[{"data":1,"prerenderedAt":173118},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch7-act-mo-xing-xun-lian":3,"wiki-doc-nav":172},{"id":4,"title":5,"body":6,"description":164,"extension":165,"meta":166,"navigation":167,"path":168,"seo":169,"stem":170,"__hash__":171},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":8,"toc":162},"minimark",[9,14,98,102,152,158],[10,11,13],"h1",{"id":12},"_7-act-模型训练","7. ACT 模型训练",[15,16,21],"pre",{"className":17,"code":18,"language":19,"meta":20,"style":20},"language-bash shiki shiki-themes github-light github-dark","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","bash","",[22,23,24,37,49,57,65,73,81,89],"code",{"__ignoreMap":20},[25,26,29,33],"span",{"class":27,"line":28},"line",1,[25,30,32],{"class":31},"sScJk","lerobot-train",[25,34,36],{"class":35},"sj4cs"," \\\n",[25,38,40,43,47],{"class":27,"line":39},2,[25,41,42],{"class":35},"  --dataset.repo_id=",[25,44,46],{"class":45},"sZZnC","\"Embodied-AI-6\u002Fso101_test\"",[25,48,36],{"class":35},[25,50,52,55],{"class":27,"line":51},3,[25,53,54],{"class":35},"  --policy.type=act",[25,56,36],{"class":35},[25,58,60,63],{"class":27,"line":59},4,[25,61,62],{"class":35},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[25,64,36],{"class":35},[25,66,68,71],{"class":27,"line":67},5,[25,69,70],{"class":35},"  --job_name=act_so101_test",[25,72,36],{"class":35},[25,74,76,79],{"class":27,"line":75},6,[25,77,78],{"class":35},"  --policy.device=cuda",[25,80,36],{"class":35},[25,82,84,87],{"class":27,"line":83},7,[25,85,86],{"class":35},"  --wandb.enable=false",[25,88,36],{"class":35},[25,90,92,95],{"class":27,"line":91},8,[25,93,94],{"class":35},"  --policy.repo_id=",[25,96,97],{"class":45},"\"Embodied-AI-6\u002Flerobot_new\"\n",[99,100,101],"p",{},"参数说明：",[103,104,105,112,118,124,130,140,146],"ul",{},[106,107,108,111],"li",{},[22,109,110],{},"--dataset.repo_id","：训练数据集仓库。",[106,113,114,117],{},[22,115,116],{},"--policy.type=act","：策略模型类型为 ACT。",[106,119,120,123],{},[22,121,122],{},"--output_dir","：本地训练输出目录。",[106,125,126,129],{},[22,127,128],{},"--job_name","：训练任务名称。",[106,131,132,135,136,139],{},[22,133,134],{},"--policy.device","：训练设备（如 ",[22,137,138],{},"cuda","）。",[106,141,142,145],{},[22,143,144],{},"--wandb.enable","：是否启用 WandB 可视化。",[106,147,148,151],{},[22,149,150],{},"--policy.repo_id","：训练后模型推送目标仓库。",[99,153,154],{},[155,156],"img",{"alt":20,"src":157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[159,160,161],"style",{},"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":20,"searchDepth":39,"depth":39,"links":163},[],null,"md",{},true,"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":5,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",[173,5272,6380,7800,10789,12140,13629,14718,23481,23493,24090,24116,24240,24481,24546,24564,24577,24624,24747,24915,25114,25294,25496,25599,25694,25731,25744,26054,26795,27503,27524,28544,30175,30326,30339,30351,30652,50464,50479,50496,50529,53401,76749,92894,92915,93028,93149,93919,94582,94943,94981,95087,95187,95230,95256,95317,96971,97072,97097,97588,98088,99168,99451,100193,100695,100707,102723,104387,105890,107588,109505,111424,113446,116916,117348,117811,118560,121504,121852,121874,122230,125537,125549,125952,125975,126122,126289,126494,126795,127352,128009,129940,131538,132187,133681,135112,136347,138041,139793,142203,142319,143254,143465,144350,145585,145813,145826,146981,149393,151761,155082,157559,159203,160980,162993,166045,168225,170752,172946],{"id":174,"title":175,"body":176,"description":20,"extension":165,"meta":5267,"navigation":167,"path":5268,"seo":5269,"stem":5270,"__hash__":5271},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":177,"toc":5239},[178,181,186,189,193,205,209,214,217,220,223,226,229,259,263,266,269,272,275,327,331,349,351,365,368,376,379,1242,1249,1265,1269,1355,1359,1365,1453,1457,1495,1499,1563,1567,1571,1577,1588,1592,1597,1601,1606,1610,1615,1619,1623,1628,1898,1903,2041,2046,2302,2305,2313,2317,2322,2425,2428,2734,2743,2844,2847,2850,2853,2856,3116,3121,3261,3264,3443,3446,3574,3577,3729,3733,3738,3741,3752,3760,3763,3870,3874,3878,3883,3933,3938,3943,3967,3972,4025,4028,4033,4210,4215,4500,4505,4902,4906,4911,4968,4973,4981,4984,5124,5127,5236],[10,179,175],{"id":180},"_1基础入门",[182,183,185],"h2",{"id":184},"_11注释","1.1注释",[99,187,188],{},"\u002F\u002F或者\u002F* *\u002F",[182,190,192],{"id":191},"_12命名","1.2命名",[194,195,196,199,202],"ol",{},[106,197,198],{},"字母数字下划线",[106,200,201],{},"开头必须是字母或_",[106,203,204],{},"不能使用关键词",[182,206,208],{"id":207},"_13数据类型","1.3数据类型",[210,211,213],"h3",{"id":212},"_131整形","1.3.1整形",[99,215,216],{},"short 短整形 2",[99,218,219],{},"int 整形 4",[99,221,222],{},"long 长整形 win4 linux32位4 linux64位8",[99,224,225],{},"long long 长长整形 8",[99,227,228],{},"利用sizeof可以求数据类型占用的内存空间大小",[15,230,234],{"className":231,"code":232,"language":233,"meta":20,"style":20},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[22,235,236,252],{"__ignoreMap":20},[25,237,238,242,246,249],{"class":27,"line":28},[25,239,241],{"class":240},"szBVR","sizeof",[25,243,245],{"class":244},"sVt8B","(",[25,247,248],{"class":240},"int",[25,250,251],{"class":244},")\n",[25,253,254,256],{"class":27,"line":39},[25,255,241],{"class":240},[25,257,258],{"class":244},"(num)\n",[210,260,262],{"id":261},"_132浮点型","1.3.2浮点型",[99,264,265],{},"float 单精度 4节 7位有效数字",[99,267,268],{},"double 双精度 8节 15-16有效数字",[99,270,271],{},"默认情况下，输出一个小数，会显示6位有效数字",[99,273,274],{},"注意点：",[15,276,278],{"className":231,"code":277,"language":233,"meta":20,"style":20},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[22,279,280,304],{"__ignoreMap":20},[25,281,282,285,288,291,294,297,300],{"class":27,"line":28},[25,283,284],{"class":240},"float",[25,286,287],{"class":244}," f1",[25,289,290],{"class":240},"=",[25,292,293],{"class":35},"3.14",[25,295,296],{"class":240},"f",[25,298,299],{"class":244},";",[25,301,303],{"class":302},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[25,305,306,308,311,313,316,319,322,324],{"class":27,"line":39},[25,307,284],{"class":240},[25,309,310],{"class":244}," f2",[25,312,290],{"class":240},[25,314,315],{"class":35},"3",[25,317,318],{"class":240},"e",[25,320,321],{"class":35},"2",[25,323,299],{"class":244},[25,325,326],{"class":302}," \u002F\u002F科学记数法\n",[210,328,330],{"id":329},"_133字符型","1.3.3字符型",[15,332,334],{"className":231,"code":333,"language":233,"meta":20,"style":20},"char ch='a'\n",[22,335,336],{"__ignoreMap":20},[25,337,338,341,344,346],{"class":27,"line":28},[25,339,340],{"class":240},"char",[25,342,343],{"class":244}," ch",[25,345,290],{"class":240},[25,347,348],{"class":45},"'a'\n",[99,350,274],{},[194,352,353,356,359,362],{},[106,354,355],{},"在显示字符型变量时，只能单引号，双引号x",[106,357,358],{},"单引号内只能一个字符，不能字符串",[106,360,361],{},"c和c++字符型变量只占用一个字符",[106,363,364],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[99,366,367],{},"ASCII码大致由以下两部分组成：",[194,369,370,373],{},[106,371,372],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[106,374,375],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[99,377,378],{},"ASCII码表格：",[380,381,382,426],"table",{},[383,384,385],"thead",{},[386,387,388,396,401,405,410,414,418,422],"tr",{},[389,390,391,395],"th",{},[392,393,394],"strong",{},"ASCII","值",[389,397,398],{},[392,399,400],{},"控制字符",[389,402,403,395],{},[392,404,394],{},[389,406,407],{},[392,408,409],{},"字符",[389,411,412,395],{},[392,413,394],{},[389,415,416],{},[392,417,409],{},[389,419,420,395],{},[392,421,394],{},[389,423,424],{},[392,425,409],{},[427,428,429,456,482,507,532,558,583,608,634,659,685,711,737,762,788,814,840,864,889,914,939,964,989,1014,1039,1064,1089,1115,1140,1165,1190,1216],"tbody",{},[386,430,431,435,438,441,444,447,450,453],{},[432,433,434],"td",{},"0",[432,436,437],{},"NUT",[432,439,440],{},"32",[432,442,443],{},"(space)",[432,445,446],{},"64",[432,448,449],{},"@",[432,451,452],{},"96",[432,454,455],{},"、",[386,457,458,461,464,467,470,473,476,479],{},[432,459,460],{},"1",[432,462,463],{},"SOH",[432,465,466],{},"33",[432,468,469],{},"!",[432,471,472],{},"65",[432,474,475],{},"A",[432,477,478],{},"97",[432,480,481],{},"a",[386,483,484,486,489,492,495,498,501,504],{},[432,485,321],{},[432,487,488],{},"STX",[432,490,491],{},"34",[432,493,494],{},"\"",[432,496,497],{},"66",[432,499,500],{},"B",[432,502,503],{},"98",[432,505,506],{},"b",[386,508,509,511,514,517,520,523,526,529],{},[432,510,315],{},[432,512,513],{},"ETX",[432,515,516],{},"35",[432,518,519],{},"#",[432,521,522],{},"67",[432,524,525],{},"C",[432,527,528],{},"99",[432,530,531],{},"c",[386,533,534,537,540,543,546,549,552,555],{},[432,535,536],{},"4",[432,538,539],{},"EOT",[432,541,542],{},"36",[432,544,545],{},"$",[432,547,548],{},"68",[432,550,551],{},"D",[432,553,554],{},"100",[432,556,557],{},"d",[386,559,560,563,566,569,572,575,578,581],{},[432,561,562],{},"5",[432,564,565],{},"ENQ",[432,567,568],{},"37",[432,570,571],{},"%",[432,573,574],{},"69",[432,576,577],{},"E",[432,579,580],{},"101",[432,582,318],{},[386,584,585,588,591,594,597,600,603,606],{},[432,586,587],{},"6",[432,589,590],{},"ACK",[432,592,593],{},"38",[432,595,596],{},"&",[432,598,599],{},"70",[432,601,602],{},"F",[432,604,605],{},"102",[432,607,296],{},[386,609,610,613,616,619,622,625,628,631],{},[432,611,612],{},"7",[432,614,615],{},"BEL",[432,617,618],{},"39",[432,620,621],{},",",[432,623,624],{},"71",[432,626,627],{},"G",[432,629,630],{},"103",[432,632,633],{},"g",[386,635,636,639,642,645,647,650,653,656],{},[432,637,638],{},"8",[432,640,641],{},"BS",[432,643,644],{},"40",[432,646,245],{},[432,648,649],{},"72",[432,651,652],{},"H",[432,654,655],{},"104",[432,657,658],{},"h",[386,660,661,664,667,670,673,676,679,682],{},[432,662,663],{},"9",[432,665,666],{},"HT",[432,668,669],{},"41",[432,671,672],{},")",[432,674,675],{},"73",[432,677,678],{},"I",[432,680,681],{},"105",[432,683,684],{},"i",[386,686,687,690,693,696,699,702,705,708],{},[432,688,689],{},"10",[432,691,692],{},"LF",[432,694,695],{},"42",[432,697,698],{},"*",[432,700,701],{},"74",[432,703,704],{},"J",[432,706,707],{},"106",[432,709,710],{},"j",[386,712,713,716,719,722,725,728,731,734],{},[432,714,715],{},"11",[432,717,718],{},"VT",[432,720,721],{},"43",[432,723,724],{},"+",[432,726,727],{},"75",[432,729,730],{},"K",[432,732,733],{},"107",[432,735,736],{},"k",[386,738,739,742,745,748,750,753,756,759],{},[432,740,741],{},"12",[432,743,744],{},"FF",[432,746,747],{},"44",[432,749,621],{},[432,751,752],{},"76",[432,754,755],{},"L",[432,757,758],{},"108",[432,760,761],{},"l",[386,763,764,767,770,773,776,779,782,785],{},[432,765,766],{},"13",[432,768,769],{},"CR",[432,771,772],{},"45",[432,774,775],{},"-",[432,777,778],{},"77",[432,780,781],{},"M",[432,783,784],{},"109",[432,786,787],{},"m",[386,789,790,793,796,799,802,805,808,811],{},[432,791,792],{},"14",[432,794,795],{},"SO",[432,797,798],{},"46",[432,800,801],{},".",[432,803,804],{},"78",[432,806,807],{},"N",[432,809,810],{},"110",[432,812,813],{},"n",[386,815,816,819,822,825,828,831,834,837],{},[432,817,818],{},"15",[432,820,821],{},"SI",[432,823,824],{},"47",[432,826,827],{},"\u002F",[432,829,830],{},"79",[432,832,833],{},"O",[432,835,836],{},"111",[432,838,839],{},"o",[386,841,842,845,848,851,853,856,859,862],{},[432,843,844],{},"16",[432,846,847],{},"DLE",[432,849,850],{},"48",[432,852,434],{},[432,854,855],{},"80",[432,857,858],{},"P",[432,860,861],{},"112",[432,863,99],{},[386,865,866,869,872,875,877,880,883,886],{},[432,867,868],{},"17",[432,870,871],{},"DCI",[432,873,874],{},"49",[432,876,460],{},[432,878,879],{},"81",[432,881,882],{},"Q",[432,884,885],{},"113",[432,887,888],{},"q",[386,890,891,894,897,900,902,905,908,911],{},[432,892,893],{},"18",[432,895,896],{},"DC2",[432,898,899],{},"50",[432,901,321],{},[432,903,904],{},"82",[432,906,907],{},"R",[432,909,910],{},"114",[432,912,913],{},"r",[386,915,916,919,922,925,927,930,933,936],{},[432,917,918],{},"19",[432,920,921],{},"DC3",[432,923,924],{},"51",[432,926,315],{},[432,928,929],{},"83",[432,931,932],{},"S",[432,934,935],{},"115",[432,937,938],{},"s",[386,940,941,944,947,950,952,955,958,961],{},[432,942,943],{},"20",[432,945,946],{},"DC4",[432,948,949],{},"52",[432,951,536],{},[432,953,954],{},"84",[432,956,957],{},"T",[432,959,960],{},"116",[432,962,963],{},"t",[386,965,966,969,972,975,977,980,983,986],{},[432,967,968],{},"21",[432,970,971],{},"NAK",[432,973,974],{},"53",[432,976,562],{},[432,978,979],{},"85",[432,981,982],{},"U",[432,984,985],{},"117",[432,987,988],{},"u",[386,990,991,994,997,1000,1002,1005,1008,1011],{},[432,992,993],{},"22",[432,995,996],{},"SYN",[432,998,999],{},"54",[432,1001,587],{},[432,1003,1004],{},"86",[432,1006,1007],{},"V",[432,1009,1010],{},"118",[432,1012,1013],{},"v",[386,1015,1016,1019,1022,1025,1027,1030,1033,1036],{},[432,1017,1018],{},"23",[432,1020,1021],{},"TB",[432,1023,1024],{},"55",[432,1026,612],{},[432,1028,1029],{},"87",[432,1031,1032],{},"W",[432,1034,1035],{},"119",[432,1037,1038],{},"w",[386,1040,1041,1044,1047,1050,1052,1055,1058,1061],{},[432,1042,1043],{},"24",[432,1045,1046],{},"CAN",[432,1048,1049],{},"56",[432,1051,638],{},[432,1053,1054],{},"88",[432,1056,1057],{},"X",[432,1059,1060],{},"120",[432,1062,1063],{},"x",[386,1065,1066,1069,1072,1075,1077,1080,1083,1086],{},[432,1067,1068],{},"25",[432,1070,1071],{},"EM",[432,1073,1074],{},"57",[432,1076,663],{},[432,1078,1079],{},"89",[432,1081,1082],{},"Y",[432,1084,1085],{},"121",[432,1087,1088],{},"y",[386,1090,1091,1094,1097,1100,1103,1106,1109,1112],{},[432,1092,1093],{},"26",[432,1095,1096],{},"SUB",[432,1098,1099],{},"58",[432,1101,1102],{},":",[432,1104,1105],{},"90",[432,1107,1108],{},"Z",[432,1110,1111],{},"122",[432,1113,1114],{},"z",[386,1116,1117,1120,1123,1126,1128,1131,1134,1137],{},[432,1118,1119],{},"27",[432,1121,1122],{},"ESC",[432,1124,1125],{},"59",[432,1127,299],{},[432,1129,1130],{},"91",[432,1132,1133],{},"[",[432,1135,1136],{},"123",[432,1138,1139],{},"{",[386,1141,1142,1145,1148,1151,1154,1157,1159,1162],{},[432,1143,1144],{},"28",[432,1146,1147],{},"FS",[432,1149,1150],{},"60",[432,1152,1153],{},"\u003C",[432,1155,1156],{},"92",[432,1158,827],{},[432,1160,1161],{},"124",[432,1163,1164],{},"|",[386,1166,1167,1170,1173,1176,1178,1181,1184,1187],{},[432,1168,1169],{},"29",[432,1171,1172],{},"GS",[432,1174,1175],{},"61",[432,1177,290],{},[432,1179,1180],{},"93",[432,1182,1183],{},"]",[432,1185,1186],{},"125",[432,1188,1189],{},"}",[386,1191,1192,1195,1198,1201,1204,1207,1210,1213],{},[432,1193,1194],{},"30",[432,1196,1197],{},"RS",[432,1199,1200],{},"62",[432,1202,1203],{},">",[432,1205,1206],{},"94",[432,1208,1209],{},"^",[432,1211,1212],{},"126",[432,1214,1215],{},"`",[386,1217,1218,1221,1224,1227,1230,1233,1236,1239],{},[432,1219,1220],{},"31",[432,1222,1223],{},"US",[432,1225,1226],{},"63",[432,1228,1229],{},"?",[432,1231,1232],{},"95",[432,1234,1235],{},"_",[432,1237,1238],{},"127",[432,1240,1241],{},"DEL",[99,1243,1244,1245,1248],{},"ASCII 码大致由以下",[392,1246,1247],{},"两部分组","成：",[103,1250,1251,1258],{},[106,1252,1253,1254,1257],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[392,1255,1256],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[106,1259,1260,1261,1264],{},"ASCII 打印字符：数字 ",[392,1262,1263],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[210,1266,1268],{"id":1267},"_134转义字符","1.3.4转义字符",[15,1270,1272],{"className":231,"code":1271,"language":233,"meta":20,"style":20},"\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",[22,1273,1274,1279,1295,1309,1314,1327,1332],{"__ignoreMap":20},[25,1275,1276],{"class":27,"line":28},[25,1277,1278],{"class":302},"\u002F\u002F换行符\n",[25,1280,1281,1284,1287,1290,1292],{"class":27,"line":39},[25,1282,1283],{"class":244},"cout ",[25,1285,1286],{"class":240},"\u003C\u003C",[25,1288,1289],{"class":45},"\"hello world\u002Fn\"",[25,1291,299],{"class":244},[25,1293,1294],{"class":302}," \u002F\u002F就等同于如下：\n",[25,1296,1297,1299,1301,1304,1306],{"class":27,"line":51},[25,1298,1283],{"class":244},[25,1300,1286],{"class":240},[25,1302,1303],{"class":45},"\"hello world\"",[25,1305,1286],{"class":240},[25,1307,1308],{"class":244},"endl;\n",[25,1310,1311],{"class":27,"line":59},[25,1312,1313],{"class":302},"\u002F\u002F反斜杠\n",[25,1315,1316,1318,1320,1323,1325],{"class":27,"line":67},[25,1317,1283],{"class":244},[25,1319,1286],{"class":240},[25,1321,1322],{"class":45},"\"\u002F\u002F\"",[25,1324,1286],{"class":240},[25,1326,1308],{"class":244},[25,1328,1329],{"class":27,"line":75},[25,1330,1331],{"class":302},"\u002F\u002F水平制表符\n",[25,1333,1334,1336,1338,1341,1344,1347,1349,1352],{"class":27,"line":83},[25,1335,1283],{"class":244},[25,1337,1286],{"class":240},[25,1339,1340],{"class":45},"\"aaaa",[25,1342,1343],{"class":35},"\\t",[25,1345,1346],{"class":45},"helloworld\"",[25,1348,1286],{"class":240},[25,1350,1351],{"class":244},"endl;",[25,1353,1354],{"class":302}," \u002F\u002F输出窗口时有对齐效果\n",[210,1356,1358],{"id":1357},"_135字符串型","1.3.5字符串型",[99,1360,1361,1362,1364],{},"char 变量名",[25,1363],{},"=\"字符串值\"",[15,1366,1368],{"className":231,"code":1367,"language":233,"meta":20,"style":20},"\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",[22,1369,1370,1375,1380,1385,1390,1404,1417,1422,1427,1439],{"__ignoreMap":20},[25,1371,1372],{"class":27,"line":28},[25,1373,1374],{"class":302},"\u002F\u002Fc风格字符串\n",[25,1376,1377],{"class":27,"line":39},[25,1378,1379],{"class":302},"\u002F\u002F注意事项：\n",[25,1381,1382],{"class":27,"line":51},[25,1383,1384],{"class":302},"\u002F\u002F1.char字符串名[]\n",[25,1386,1387],{"class":27,"line":59},[25,1388,1389],{"class":302},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[25,1391,1392,1394,1397,1399,1401],{"class":27,"line":67},[25,1393,340],{"class":240},[25,1395,1396],{"class":244}," str[]",[25,1398,290],{"class":240},[25,1400,1303],{"class":45},[25,1402,1403],{"class":244},";\n",[25,1405,1406,1408,1410,1413,1415],{"class":27,"line":75},[25,1407,1283],{"class":244},[25,1409,1286],{"class":240},[25,1411,1412],{"class":244},"str",[25,1414,1286],{"class":240},[25,1416,1308],{"class":244},[25,1418,1419],{"class":27,"line":83},[25,1420,1421],{"class":302},"\u002F\u002Fc++风格字符串\n",[25,1423,1424],{"class":27,"line":91},[25,1425,1426],{"class":302},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[25,1428,1430,1433,1435,1437],{"class":27,"line":1429},9,[25,1431,1432],{"class":244},"string str2",[25,1434,290],{"class":240},[25,1436,1303],{"class":45},[25,1438,1403],{"class":244},[25,1440,1442,1444,1446,1449,1451],{"class":27,"line":1441},10,[25,1443,1283],{"class":244},[25,1445,1286],{"class":240},[25,1447,1448],{"class":244},"str2",[25,1450,1286],{"class":240},[25,1452,1308],{"class":244},[210,1454,1456],{"id":1455},"_136布尔类型bool","1.3.6布尔类型bool",[15,1458,1460],{"className":231,"code":1459,"language":233,"meta":20,"style":20},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[22,1461,1462,1477],{"__ignoreMap":20},[25,1463,1464,1467,1470,1472,1475],{"class":27,"line":28},[25,1465,1466],{"class":240},"bool",[25,1468,1469],{"class":244}," flag",[25,1471,290],{"class":240},[25,1473,1474],{"class":35},"true",[25,1476,1403],{"class":244},[25,1478,1479,1482,1485,1488,1490,1492],{"class":27,"line":39},[25,1480,1481],{"class":244},"cout",[25,1483,1484],{"class":240},"\u003C\u003Csizeof",[25,1486,1487],{"class":244},"(flag)",[25,1489,1286],{"class":240},[25,1491,1351],{"class":244},[25,1493,1494],{"class":302}," \u002F\u002F查看布尔占内存空间\n",[182,1496,1498],{"id":1497},"_14键盘输入cin","1.4键盘输入cin",[15,1500,1502],{"className":231,"code":1501,"language":233,"meta":20,"style":20},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[22,1503,1504,1517,1534,1545],{"__ignoreMap":20},[25,1505,1506,1508,1511,1513,1515],{"class":27,"line":28},[25,1507,248],{"class":240},[25,1509,1510],{"class":244}," a",[25,1512,290],{"class":240},[25,1514,434],{"class":35},[25,1516,1403],{"class":244},[25,1518,1519,1521,1523,1526,1528,1530,1532],{"class":27,"line":39},[25,1520,1481],{"class":244},[25,1522,1286],{"class":240},[25,1524,1525],{"class":45},"\"请给整型变量a赋值\"",[25,1527,1286],{"class":240},[25,1529,481],{"class":244},[25,1531,1286],{"class":240},[25,1533,1308],{"class":244},[25,1535,1536,1539,1542],{"class":27,"line":51},[25,1537,1538],{"class":244},"cin ",[25,1540,1541],{"class":240},">>",[25,1543,1544],{"class":244}," a;\n",[25,1546,1547,1549,1551,1554,1557,1559,1561],{"class":27,"line":59},[25,1548,1283],{"class":244},[25,1550,1286],{"class":240},[25,1552,1553],{"class":45}," \"整型变量a=\"",[25,1555,1556],{"class":240}," \u003C\u003C",[25,1558,481],{"class":244},[25,1560,1286],{"class":240},[25,1562,1308],{"class":244},[182,1564,1566],{"id":1565},"_15运算符","1.5运算符",[210,1568,1570],{"id":1569},"_151算术运算符","1.5.1算术运算符",[99,1572,1573,1576],{},[155,1574],{"alt":20,"src":1575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[194,1578,1579,1582,1585],{},[106,1580,1581],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[106,1583,1584],{},"两个小数不可以做取模运算",[106,1586,1587],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[210,1589,1591],{"id":1590},"_152赋值运算符","1.5.2赋值运算符",[99,1593,1594],{},[155,1595],{"alt":20,"src":1596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[210,1598,1600],{"id":1599},"_153比较运算符","1.5.3比较运算符",[99,1602,1603],{},[155,1604],{"alt":20,"src":1605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[210,1607,1609],{"id":1608},"_154逻辑运算符","1.5.4逻辑运算符",[99,1611,1612],{},[155,1613],{"alt":20,"src":1614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[182,1616,1618],{"id":1617},"_16程序流程结构","1.6程序流程结构",[210,1620,1622],{"id":1621},"_161选择结构","1.6.1选择结构",[194,1624,1625],{},[106,1626,1627],{},"if语句\n单行、多行、多条件if语句",[15,1629,1631],{"className":231,"code":1630,"language":233,"meta":20,"style":20},"\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",[22,1632,1633,1638,1653,1658,1672,1677,1682,1691,1704,1708,1721,1726,1732,1737,1751,1756,1762,1783,1788,1802,1807,1836,1841,1858,1863,1868,1873,1887,1892],{"__ignoreMap":20},[25,1634,1635],{"class":27,"line":28},[25,1636,1637],{"class":302},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[25,1639,1640,1643,1646,1648,1651],{"class":27,"line":39},[25,1641,1642],{"class":240},"if",[25,1644,1645],{"class":244},"(score",[25,1647,1203],{"class":240},[25,1649,1650],{"class":35},"600",[25,1652,251],{"class":244},[25,1654,1655],{"class":27,"line":51},[25,1656,1657],{"class":244},"{\n",[25,1659,1660,1663,1665,1668,1670],{"class":27,"line":59},[25,1661,1662],{"class":244},"    cout",[25,1664,1286],{"class":240},[25,1666,1667],{"class":45},"'这是单行if语句'",[25,1669,1286],{"class":240},[25,1671,1308],{"class":244},[25,1673,1674],{"class":27,"line":67},[25,1675,1676],{"class":244},"}\n",[25,1678,1679],{"class":27,"line":75},[25,1680,1681],{"class":302},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[25,1683,1684,1686,1688],{"class":27,"line":83},[25,1685,1538],{"class":244},[25,1687,1541],{"class":240},[25,1689,1690],{"class":244}," score\n",[25,1692,1693,1695,1697,1700,1702],{"class":27,"line":91},[25,1694,1642],{"class":240},[25,1696,1645],{"class":244},[25,1698,1699],{"class":240},"\u003C=",[25,1701,1650],{"class":35},[25,1703,251],{"class":244},[25,1705,1706],{"class":27,"line":1429},[25,1707,1657],{"class":244},[25,1709,1710,1712,1714,1717,1719],{"class":27,"line":1441},[25,1711,1662],{"class":244},[25,1713,1541],{"class":240},[25,1715,1716],{"class":45},"\"小于等于600\"",[25,1718,1286],{"class":240},[25,1720,1308],{"class":244},[25,1722,1724],{"class":27,"line":1723},11,[25,1725,1676],{"class":244},[25,1727,1729],{"class":27,"line":1728},12,[25,1730,1731],{"class":240},"else\n",[25,1733,1735],{"class":27,"line":1734},13,[25,1736,1657],{"class":244},[25,1738,1740,1742,1744,1747,1749],{"class":27,"line":1739},14,[25,1741,1662],{"class":244},[25,1743,1541],{"class":240},[25,1745,1746],{"class":45},"\"大于600\"",[25,1748,1541],{"class":240},[25,1750,1308],{"class":244},[25,1752,1754],{"class":27,"line":1753},15,[25,1755,1676],{"class":244},[25,1757,1759],{"class":27,"line":1758},16,[25,1760,1761],{"class":302},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[25,1763,1765,1767,1770,1772,1774,1777,1779,1781],{"class":27,"line":1764},17,[25,1766,1642],{"class":240},[25,1768,1769],{"class":244}," (",[25,1771,434],{"class":35},[25,1773,1153],{"class":240},[25,1775,1776],{"class":244},"num",[25,1778,1153],{"class":240},[25,1780,554],{"class":35},[25,1782,251],{"class":244},[25,1784,1786],{"class":27,"line":1785},18,[25,1787,1657],{"class":244},[25,1789,1791,1793,1795,1798,1800],{"class":27,"line":1790},19,[25,1792,1662],{"class":244},[25,1794,1286],{"class":240},[25,1796,1797],{"class":45},"\"小于100\"",[25,1799,1286],{"class":240},[25,1801,1308],{"class":244},[25,1803,1805],{"class":27,"line":1804},20,[25,1806,1676],{"class":244},[25,1808,1810,1813,1816,1819,1822,1824,1827,1829,1831,1834],{"class":27,"line":1809},21,[25,1811,1812],{"class":240},"else",[25,1814,1815],{"class":240}," if",[25,1817,1818],{"class":244}," (nmu",[25,1820,1821],{"class":240},">=",[25,1823,554],{"class":35},[25,1825,1826],{"class":240},"&&",[25,1828,1776],{"class":244},[25,1830,1153],{"class":240},[25,1832,1833],{"class":35},"200",[25,1835,251],{"class":244},[25,1837,1839],{"class":27,"line":1838},22,[25,1840,1657],{"class":244},[25,1842,1844,1846,1848,1851,1853,1855],{"class":27,"line":1843},23,[25,1845,1662],{"class":244},[25,1847,1286],{"class":240},[25,1849,1850],{"class":45},"\"不小于100且小于200\"",[25,1852,1286],{"class":240},[25,1854,1351],{"class":244},[25,1856,1857],{"class":302}," \u002F\u002F可以无限else if,python中是elif：\n",[25,1859,1861],{"class":27,"line":1860},24,[25,1862,1676],{"class":244},[25,1864,1866],{"class":27,"line":1865},25,[25,1867,1731],{"class":240},[25,1869,1871],{"class":27,"line":1870},26,[25,1872,1657],{"class":244},[25,1874,1876,1878,1880,1883,1885],{"class":27,"line":1875},27,[25,1877,1662],{"class":244},[25,1879,1286],{"class":240},[25,1881,1882],{"class":45},"\"不小于200\"",[25,1884,1286],{"class":240},[25,1886,1308],{"class":244},[25,1888,1890],{"class":27,"line":1889},28,[25,1891,1676],{"class":244},[25,1893,1895],{"class":27,"line":1894},29,[25,1896,1897],{"class":302},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[194,1899,1900],{"start":39},[106,1901,1902],{},"三目运算符",[15,1904,1906],{"className":231,"code":1905,"language":233,"meta":20,"style":20},"\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",[22,1907,1908,1913,1918,1944,1966,1983,1988,2011,2026],{"__ignoreMap":20},[25,1909,1910],{"class":27,"line":28},[25,1911,1912],{"class":302},"\u002F\u002F创建三个变量a,b,c\n",[25,1914,1915],{"class":27,"line":39},[25,1916,1917],{"class":302},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[25,1919,1920,1922,1924,1926,1928,1931,1933,1935,1938,1940,1942],{"class":27,"line":51},[25,1921,248],{"class":240},[25,1923,1510],{"class":244},[25,1925,290],{"class":240},[25,1927,943],{"class":35},[25,1929,1930],{"class":244},",b",[25,1932,290],{"class":240},[25,1934,689],{"class":35},[25,1936,1937],{"class":244},",c",[25,1939,290],{"class":240},[25,1941,434],{"class":35},[25,1943,1403],{"class":244},[25,1945,1946,1948,1950,1953,1955,1957,1959,1961,1963],{"class":27,"line":59},[25,1947,531],{"class":244},[25,1949,290],{"class":240},[25,1951,1952],{"class":244},"(a",[25,1954,1203],{"class":240},[25,1956,506],{"class":244},[25,1958,1229],{"class":240},[25,1960,481],{"class":244},[25,1962,1102],{"class":240},[25,1964,1965],{"class":244},"b)\n",[25,1967,1968,1970,1972,1975,1977,1979,1981],{"class":27,"line":67},[25,1969,1481],{"class":244},[25,1971,1286],{"class":240},[25,1973,1974],{"class":45},"\"c=\"",[25,1976,1286],{"class":240},[25,1978,531],{"class":244},[25,1980,1286],{"class":240},[25,1982,1308],{"class":244},[25,1984,1985],{"class":27,"line":75},[25,1986,1987],{"class":302},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[25,1989,1990,1992,1994,1996,1998,2000,2002,2005,2007,2009],{"class":27,"line":83},[25,1991,1952],{"class":244},[25,1993,1203],{"class":240},[25,1995,506],{"class":244},[25,1997,1229],{"class":240},[25,1999,481],{"class":244},[25,2001,1102],{"class":240},[25,2003,2004],{"class":244},"b)",[25,2006,290],{"class":240},[25,2008,554],{"class":35},[25,2010,1403],{"class":244},[25,2012,2013,2015,2017,2019,2021,2023],{"class":27,"line":91},[25,2014,1481],{"class":244},[25,2016,1286],{"class":240},[25,2018,481],{"class":244},[25,2020,1286],{"class":240},[25,2022,1351],{"class":244},[25,2024,2025],{"class":302}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[25,2027,2028,2030,2032,2034,2036,2038],{"class":27,"line":1429},[25,2029,1481],{"class":244},[25,2031,1286],{"class":240},[25,2033,506],{"class":244},[25,2035,1286],{"class":240},[25,2037,1351],{"class":244},[25,2039,2040],{"class":302}," \u002F\u002F10   a>b,b还是原值\n",[194,2042,2043],{"start":51},[106,2044,2045],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[15,2047,2049],{"className":231,"code":2048,"language":233,"meta":20,"style":20},"\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",[22,2050,2051,2056,2064,2077,2087,2091,2105,2118,2128,2136,2141,2166,2187,2209,2230,2252,2273,2293,2298],{"__ignoreMap":20},[25,2052,2053],{"class":27,"line":28},[25,2054,2055],{"class":302},"\u002F\u002F案例-电影打分\n",[25,2057,2058,2061],{"class":27,"line":39},[25,2059,2060],{"class":240},"#include",[25,2062,2063],{"class":45},"\u003Ciostream>\n",[25,2065,2066,2069,2072,2075],{"class":27,"line":51},[25,2067,2068],{"class":240},"using",[25,2070,2071],{"class":240}," namespace",[25,2073,2074],{"class":31}," std",[25,2076,1403],{"class":244},[25,2078,2079,2081,2084],{"class":27,"line":59},[25,2080,248],{"class":240},[25,2082,2083],{"class":31}," main",[25,2085,2086],{"class":244},"()\n",[25,2088,2089],{"class":27,"line":67},[25,2090,1657],{"class":244},[25,2092,2093,2096,2099,2101,2103],{"class":27,"line":75},[25,2094,2095],{"class":240},"    int",[25,2097,2098],{"class":244}," score",[25,2100,290],{"class":240},[25,2102,434],{"class":35},[25,2104,1403],{"class":244},[25,2106,2107,2109,2111,2114,2116],{"class":27,"line":83},[25,2108,1662],{"class":244},[25,2110,1286],{"class":240},[25,2112,2113],{"class":45},"\"电影打分：\"",[25,2115,1286],{"class":240},[25,2117,1308],{"class":244},[25,2119,2120,2123,2125],{"class":27,"line":91},[25,2121,2122],{"class":244},"    cin",[25,2124,1541],{"class":240},[25,2126,2127],{"class":244},"score;\n",[25,2129,2130,2133],{"class":27,"line":1429},[25,2131,2132],{"class":240},"    switch",[25,2134,2135],{"class":244},"(score)\n",[25,2137,2138],{"class":27,"line":1441},[25,2139,2140],{"class":244},"    {\n",[25,2142,2143,2146,2149,2152,2154,2157,2159,2161,2164],{"class":27,"line":1723},[25,2144,2145],{"class":240},"        case",[25,2147,2148],{"class":35}," 10",[25,2150,2151],{"class":244},":cout",[25,2153,1286],{"class":240},[25,2155,2156],{"class":45},"\"经典\"",[25,2158,1286],{"class":240},[25,2160,1351],{"class":244},[25,2162,2163],{"class":240},"break",[25,2165,1403],{"class":244},[25,2167,2168,2170,2173,2175,2177,2179,2181,2183,2185],{"class":27,"line":1728},[25,2169,2145],{"class":240},[25,2171,2172],{"class":35}," 9",[25,2174,2151],{"class":244},[25,2176,1286],{"class":240},[25,2178,2156],{"class":45},[25,2180,1286],{"class":240},[25,2182,1351],{"class":244},[25,2184,2163],{"class":240},[25,2186,1403],{"class":244},[25,2188,2189,2191,2194,2196,2198,2201,2203,2205,2207],{"class":27,"line":1734},[25,2190,2145],{"class":240},[25,2192,2193],{"class":35}," 8",[25,2195,2151],{"class":244},[25,2197,1286],{"class":240},[25,2199,2200],{"class":45},"\"非常好\"",[25,2202,1286],{"class":240},[25,2204,1351],{"class":244},[25,2206,2163],{"class":240},[25,2208,1403],{"class":244},[25,2210,2211,2213,2216,2218,2220,2222,2224,2226,2228],{"class":27,"line":1739},[25,2212,2145],{"class":240},[25,2214,2215],{"class":35}," 7",[25,2217,2151],{"class":244},[25,2219,1286],{"class":240},[25,2221,2200],{"class":45},[25,2223,1286],{"class":240},[25,2225,1351],{"class":244},[25,2227,2163],{"class":240},[25,2229,1403],{"class":244},[25,2231,2232,2234,2237,2239,2241,2244,2246,2248,2250],{"class":27,"line":1753},[25,2233,2145],{"class":240},[25,2235,2236],{"class":35}," 6",[25,2238,2151],{"class":244},[25,2240,1286],{"class":240},[25,2242,2243],{"class":45},"\"一般\"",[25,2245,1286],{"class":240},[25,2247,1351],{"class":244},[25,2249,2163],{"class":240},[25,2251,1403],{"class":244},[25,2253,2254,2256,2259,2261,2263,2265,2267,2269,2271],{"class":27,"line":1758},[25,2255,2145],{"class":240},[25,2257,2258],{"class":35}," 5",[25,2260,2151],{"class":244},[25,2262,1286],{"class":240},[25,2264,2243],{"class":45},[25,2266,1286],{"class":240},[25,2268,1351],{"class":244},[25,2270,2163],{"class":240},[25,2272,1403],{"class":244},[25,2274,2275,2278,2280,2282,2285,2287,2289,2291],{"class":27,"line":1764},[25,2276,2277],{"class":240},"        default",[25,2279,2151],{"class":244},[25,2281,1286],{"class":240},[25,2283,2284],{"class":45},"\"烂片\"",[25,2286,1286],{"class":240},[25,2288,1351],{"class":244},[25,2290,2163],{"class":240},[25,2292,1403],{"class":244},[25,2294,2295],{"class":27,"line":1785},[25,2296,2297],{"class":244},"    }\n",[25,2299,2300],{"class":27,"line":1790},[25,2301,1676],{"class":244},[99,2303,2304],{},"if和switch区别：",[103,2306,2307,2310],{},[106,2308,2309],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[106,2311,2312],{},"switch优点：结构清晰，执行效率高",[210,2314,2316],{"id":2315},"_162循环结构","1.6.2循环结构",[194,2318,2319],{},[106,2320,2321],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[15,2323,2325],{"className":231,"code":2324,"language":233,"meta":20,"style":20},"\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",[22,2326,2327,2332,2340,2344,2357,2371,2375,2395,2405,2409,2421],{"__ignoreMap":20},[25,2328,2329],{"class":27,"line":28},[25,2330,2331],{"class":302},"\u002F\u002F打印0-9数字\n",[25,2333,2334,2336,2338],{"class":27,"line":39},[25,2335,248],{"class":240},[25,2337,2083],{"class":31},[25,2339,2086],{"class":244},[25,2341,2342],{"class":27,"line":51},[25,2343,1657],{"class":244},[25,2345,2346,2348,2351,2353,2355],{"class":27,"line":59},[25,2347,2095],{"class":240},[25,2349,2350],{"class":244}," num",[25,2352,290],{"class":240},[25,2354,434],{"class":35},[25,2356,1403],{"class":244},[25,2358,2359,2362,2365,2367,2369],{"class":27,"line":67},[25,2360,2361],{"class":240},"    while",[25,2363,2364],{"class":244},"(num",[25,2366,1153],{"class":240},[25,2368,689],{"class":35},[25,2370,251],{"class":244},[25,2372,2373],{"class":27,"line":75},[25,2374,2140],{"class":244},[25,2376,2377,2380,2383,2385,2387,2389,2392],{"class":27,"line":83},[25,2378,2379],{"class":31},"       std",[25,2381,2382],{"class":244},"::cout",[25,2384,1286],{"class":240},[25,2386,1776],{"class":244},[25,2388,1286],{"class":240},[25,2390,2391],{"class":31},"std",[25,2393,2394],{"class":244},"::endl;\n",[25,2396,2397,2400,2403],{"class":27,"line":91},[25,2398,2399],{"class":244},"        num",[25,2401,2402],{"class":240},"++",[25,2404,1403],{"class":244},[25,2406,2407],{"class":27,"line":1429},[25,2408,2297],{"class":244},[25,2410,2411,2414,2416,2419],{"class":27,"line":1441},[25,2412,2413],{"class":31},"    system",[25,2415,245],{"class":244},[25,2417,2418],{"class":45},"\"pause\"",[25,2420,251],{"class":244},[25,2422,2423],{"class":27,"line":1723},[25,2424,1676],{"class":244},[99,2426,2427],{},"注意：写好循环条件，避免死循环情况",[15,2429,2431],{"className":231,"code":2430,"language":233,"meta":20,"style":20},"\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",[22,2432,2433,2438,2445,2452,2462,2470,2474,2479,2506,2511,2516,2524,2551,2556,2561,2574,2584,2588,2598,2603,2616,2621,2635,2640,2655,2659,2672,2676,2681,2685,2699,2707,2712,2718,2724,2729],{"__ignoreMap":20},[25,2434,2435],{"class":27,"line":28},[25,2436,2437],{"class":302},"\u002F\u002F循环结构-猜数字\n",[25,2439,2440,2442],{"class":27,"line":39},[25,2441,2060],{"class":240},[25,2443,2444],{"class":45}," \u003Ciostream>\n",[25,2446,2447,2449],{"class":27,"line":51},[25,2448,2060],{"class":240},[25,2450,2451],{"class":45}," \u003Cctime>\n",[25,2453,2454,2456,2458,2460],{"class":27,"line":59},[25,2455,2068],{"class":240},[25,2457,2071],{"class":240},[25,2459,2074],{"class":31},[25,2461,1403],{"class":244},[25,2463,2464,2466,2468],{"class":27,"line":67},[25,2465,248],{"class":240},[25,2467,2083],{"class":31},[25,2469,2086],{"class":244},[25,2471,2472],{"class":27,"line":75},[25,2473,1657],{"class":244},[25,2475,2476],{"class":27,"line":83},[25,2477,2478],{"class":302},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[25,2480,2481,2484,2487,2490,2493,2495,2498,2500,2503],{"class":27,"line":91},[25,2482,2483],{"class":31},"    srand",[25,2485,2486],{"class":244},"((",[25,2488,2489],{"class":240},"unsigned",[25,2491,2492],{"class":240}," int",[25,2494,672],{"class":244},[25,2496,2497],{"class":31},"time",[25,2499,245],{"class":244},[25,2501,2502],{"class":35},"NULL",[25,2504,2505],{"class":244},"));\n",[25,2507,2508],{"class":27,"line":1429},[25,2509,2510],{"emptyLinePlaceholder":167},"\n",[25,2512,2513],{"class":27,"line":1441},[25,2514,2515],{"class":302},"    \u002F\u002F1.系统生成随机数\n",[25,2517,2518,2521],{"class":27,"line":1723},[25,2519,2520],{"class":302},"    \u002F\u002Frand()%100",[25,2522,2523],{"class":302}," \u002F\u002F生成0-99的随机数\n",[25,2525,2526,2528,2530,2532,2535,2538,2540,2542,2544,2546,2548],{"class":27,"line":1728},[25,2527,2095],{"class":240},[25,2529,2350],{"class":244},[25,2531,290],{"class":240},[25,2533,2534],{"class":31},"rand",[25,2536,2537],{"class":244},"()",[25,2539,571],{"class":240},[25,2541,554],{"class":35},[25,2543,724],{"class":240},[25,2545,460],{"class":35},[25,2547,299],{"class":244},[25,2549,2550],{"class":302}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[25,2552,2553],{"class":27,"line":1734},[25,2554,2555],{"class":302},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[25,2557,2558],{"class":27,"line":1739},[25,2559,2560],{"class":302},"    \u002F\u002F2.玩家猜测\n",[25,2562,2563,2565,2568,2570,2572],{"class":27,"line":1753},[25,2564,2095],{"class":240},[25,2566,2567],{"class":244}," val",[25,2569,290],{"class":240},[25,2571,434],{"class":35},[25,2573,1403],{"class":244},[25,2575,2576,2578,2580,2582],{"class":27,"line":1758},[25,2577,2361],{"class":240},[25,2579,1769],{"class":244},[25,2581,460],{"class":35},[25,2583,251],{"class":244},[25,2585,2586],{"class":27,"line":1764},[25,2587,2140],{"class":244},[25,2589,2590,2593,2595],{"class":27,"line":1785},[25,2591,2592],{"class":244},"        cin",[25,2594,1541],{"class":240},[25,2596,2597],{"class":244},"val;\n",[25,2599,2600],{"class":27,"line":1790},[25,2601,2602],{"class":302},"        \u002F\u002F3.判断玩家猜测\n",[25,2604,2605,2608,2611,2613],{"class":27,"line":1804},[25,2606,2607],{"class":240},"        if",[25,2609,2610],{"class":244},"(val",[25,2612,1153],{"class":240},[25,2614,2615],{"class":244},"num) \n",[25,2617,2618],{"class":27,"line":1809},[25,2619,2620],{"class":244},"        {\n",[25,2622,2623,2626,2628,2631,2633],{"class":27,"line":1838},[25,2624,2625],{"class":244},"            cout",[25,2627,1286],{"class":240},[25,2629,2630],{"class":45},"\"猜小了！\"",[25,2632,1286],{"class":240},[25,2634,1308],{"class":244},[25,2636,2637],{"class":27,"line":1843},[25,2638,2639],{"class":244},"        }\n",[25,2641,2642,2645,2647,2650,2652],{"class":27,"line":1860},[25,2643,2644],{"class":240},"        else",[25,2646,1815],{"class":240},[25,2648,2649],{"class":244}," (val",[25,2651,1203],{"class":240},[25,2653,2654],{"class":244},"num)\n",[25,2656,2657],{"class":27,"line":1865},[25,2658,2620],{"class":244},[25,2660,2661,2663,2665,2668,2670],{"class":27,"line":1870},[25,2662,2625],{"class":244},[25,2664,1286],{"class":240},[25,2666,2667],{"class":45},"\"猜大了！\"",[25,2669,1286],{"class":240},[25,2671,1308],{"class":244},[25,2673,2674],{"class":27,"line":1875},[25,2675,2639],{"class":244},[25,2677,2678],{"class":27,"line":1889},[25,2679,2680],{"class":240},"        else\n",[25,2682,2683],{"class":27,"line":1894},[25,2684,2620],{"class":244},[25,2686,2688,2690,2692,2695,2697],{"class":27,"line":2687},30,[25,2689,2625],{"class":244},[25,2691,1286],{"class":240},[25,2693,2694],{"class":45},"\"猜对了！\"",[25,2696,1286],{"class":240},[25,2698,1308],{"class":244},[25,2700,2702,2705],{"class":27,"line":2701},31,[25,2703,2704],{"class":240},"            break",[25,2706,1403],{"class":244},[25,2708,2710],{"class":27,"line":2709},32,[25,2711,2639],{"class":244},[25,2713,2715],{"class":27,"line":2714},33,[25,2716,2717],{"class":302},"        \u002F\u002F猜对 退出游戏\n",[25,2719,2721],{"class":27,"line":2720},34,[25,2722,2723],{"class":302},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[25,2725,2727],{"class":27,"line":2726},35,[25,2728,2297],{"class":244},[25,2730,2732],{"class":27,"line":2731},36,[25,2733,1676],{"class":244},[194,2735,2736],{"start":39},[106,2737,2738,2739,2742],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[392,2740,2741],{},"do...while会先执行一次循环语句","，在判断循环语句",[15,2744,2746],{"className":231,"code":2745,"language":233,"meta":20,"style":20},"\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",[22,2747,2748,2753,2761,2765,2777,2785,2789,2806,2813,2817,2830,2840],{"__ignoreMap":20},[25,2749,2750],{"class":27,"line":28},[25,2751,2752],{"class":302},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[25,2754,2755,2757,2759],{"class":27,"line":39},[25,2756,248],{"class":240},[25,2758,2083],{"class":31},[25,2760,2086],{"class":244},[25,2762,2763],{"class":27,"line":51},[25,2764,1657],{"class":244},[25,2766,2767,2769,2771,2773,2775],{"class":27,"line":59},[25,2768,2095],{"class":240},[25,2770,2350],{"class":244},[25,2772,290],{"class":240},[25,2774,434],{"class":35},[25,2776,1403],{"class":244},[25,2778,2779,2782],{"class":27,"line":67},[25,2780,2781],{"class":240},"    do",[25,2783,2784],{"class":244}," \n",[25,2786,2787],{"class":27,"line":75},[25,2788,2140],{"class":244},[25,2790,2791,2794,2796,2798,2800,2802,2804],{"class":27,"line":83},[25,2792,2793],{"class":31},"        std",[25,2795,2382],{"class":244},[25,2797,1286],{"class":240},[25,2799,1776],{"class":244},[25,2801,1286],{"class":240},[25,2803,2391],{"class":31},[25,2805,2394],{"class":244},[25,2807,2808,2810],{"class":27,"line":91},[25,2809,2399],{"class":244},[25,2811,2812],{"class":240},"++\n",[25,2814,2815],{"class":27,"line":1429},[25,2816,2297],{"class":244},[25,2818,2819,2821,2823,2825,2827],{"class":27,"line":1441},[25,2820,2361],{"class":240},[25,2822,2364],{"class":244},[25,2824,1153],{"class":240},[25,2826,689],{"class":35},[25,2828,2829],{"class":244},");\n",[25,2831,2832,2834,2836,2838],{"class":27,"line":1723},[25,2833,2413],{"class":31},[25,2835,245],{"class":244},[25,2837,2418],{"class":45},[25,2839,2829],{"class":244},[25,2841,2842],{"class":27,"line":1728},[25,2843,1676],{"class":244},[99,2845,2846],{},"案例-水仙花数",[99,2848,2849],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[99,2851,2852],{},"例如：1^3+5^3+3^3=153",[99,2854,2855],{},"请用do...while语句，求出所有3位数的水仙花数",[15,2857,2859],{"className":231,"code":2858,"language":233,"meta":20,"style":20},"#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",[22,2860,2861,2867,2877,2885,2889,2894,2906,2912,2916,2921,2937,2953,2969,2984,3003,3018,3066,3070,3082,3086,3094,3098,3112],{"__ignoreMap":20},[25,2862,2863,2865],{"class":27,"line":28},[25,2864,2060],{"class":240},[25,2866,2444],{"class":45},[25,2868,2869,2871,2873,2875],{"class":27,"line":39},[25,2870,2068],{"class":240},[25,2872,2071],{"class":240},[25,2874,2074],{"class":31},[25,2876,1403],{"class":244},[25,2878,2879,2881,2883],{"class":27,"line":51},[25,2880,248],{"class":240},[25,2882,2083],{"class":31},[25,2884,2086],{"class":244},[25,2886,2887],{"class":27,"line":59},[25,2888,1657],{"class":244},[25,2890,2891],{"class":27,"line":67},[25,2892,2893],{"class":302},"    \u002F\u002F1.先打印所有三位数字\n",[25,2895,2896,2898,2900,2902,2904],{"class":27,"line":75},[25,2897,2095],{"class":240},[25,2899,2350],{"class":244},[25,2901,290],{"class":240},[25,2903,554],{"class":35},[25,2905,1403],{"class":244},[25,2907,2908,2910],{"class":27,"line":83},[25,2909,2781],{"class":240},[25,2911,2784],{"class":244},[25,2913,2914],{"class":27,"line":91},[25,2915,2140],{"class":244},[25,2917,2918],{"class":27,"line":1429},[25,2919,2920],{"class":302},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[25,2922,2923,2926,2928,2930,2932,2934],{"class":27,"line":1441},[25,2924,2925],{"class":240},"        int",[25,2927,1510],{"class":244},[25,2929,290],{"class":240},[25,2931,434],{"class":35},[25,2933,299],{"class":244},[25,2935,2936],{"class":302}," \u002F\u002F个位\n",[25,2938,2939,2941,2944,2946,2948,2950],{"class":27,"line":1723},[25,2940,2925],{"class":240},[25,2942,2943],{"class":244}," b",[25,2945,290],{"class":240},[25,2947,434],{"class":35},[25,2949,299],{"class":244},[25,2951,2952],{"class":302}," \u002F\u002F十位\n",[25,2954,2955,2957,2960,2962,2964,2966],{"class":27,"line":1728},[25,2956,2925],{"class":240},[25,2958,2959],{"class":244}," c",[25,2961,290],{"class":240},[25,2963,434],{"class":35},[25,2965,299],{"class":244},[25,2967,2968],{"class":302}," \u002F\u002F百位\n",[25,2970,2971,2974,2976,2978,2980,2982],{"class":27,"line":1734},[25,2972,2973],{"class":244},"        a",[25,2975,290],{"class":240},[25,2977,1776],{"class":244},[25,2979,571],{"class":240},[25,2981,689],{"class":35},[25,2983,1403],{"class":244},[25,2985,2986,2989,2991,2993,2995,2997,2999,3001],{"class":27,"line":1739},[25,2987,2988],{"class":244},"        b",[25,2990,290],{"class":240},[25,2992,1776],{"class":244},[25,2994,827],{"class":240},[25,2996,689],{"class":35},[25,2998,571],{"class":240},[25,3000,689],{"class":35},[25,3002,1403],{"class":244},[25,3004,3005,3008,3010,3012,3014,3016],{"class":27,"line":1753},[25,3006,3007],{"class":244},"        c",[25,3009,290],{"class":240},[25,3011,1776],{"class":244},[25,3013,827],{"class":240},[25,3015,554],{"class":35},[25,3017,1403],{"class":244},[25,3019,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3057,3060,3063],{"class":27,"line":1758},[25,3021,2607],{"class":240},[25,3023,1952],{"class":244},[25,3025,698],{"class":240},[25,3027,481],{"class":244},[25,3029,698],{"class":240},[25,3031,481],{"class":244},[25,3033,724],{"class":240},[25,3035,506],{"class":244},[25,3037,698],{"class":240},[25,3039,506],{"class":244},[25,3041,698],{"class":240},[25,3043,506],{"class":244},[25,3045,724],{"class":240},[25,3047,531],{"class":244},[25,3049,698],{"class":240},[25,3051,531],{"class":244},[25,3053,698],{"class":240},[25,3055,3056],{"class":244},"c ",[25,3058,3059],{"class":240},"==",[25,3061,3062],{"class":244}," num)",[25,3064,3065],{"class":302}," \u002F\u002F如果是水仙花数，才打印\n",[25,3067,3068],{"class":27,"line":1764},[25,3069,2620],{"class":244},[25,3071,3072,3074,3076,3078,3080],{"class":27,"line":1785},[25,3073,2625],{"class":244},[25,3075,1286],{"class":240},[25,3077,1776],{"class":244},[25,3079,1286],{"class":240},[25,3081,1308],{"class":244},[25,3083,3084],{"class":27,"line":1790},[25,3085,2639],{"class":244},[25,3087,3088,3090,3092],{"class":27,"line":1804},[25,3089,2399],{"class":244},[25,3091,2402],{"class":240},[25,3093,1403],{"class":244},[25,3095,3096],{"class":27,"line":1809},[25,3097,2297],{"class":244},[25,3099,3100,3102,3105,3107,3110],{"class":27,"line":1838},[25,3101,2361],{"class":240},[25,3103,3104],{"class":244}," (num ",[25,3106,1153],{"class":240},[25,3108,3109],{"class":35}," 1000",[25,3111,2829],{"class":244},[25,3113,3114],{"class":27,"line":1843},[25,3115,1676],{"class":244},[194,3117,3118],{"start":51},[106,3119,3120],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[15,3122,3124],{"className":231,"code":3123,"language":233,"meta":20,"style":20},"\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",[22,3125,3126,3131,3160,3164,3176,3180,3185,3196,3203,3207,3221,3225,3232,3236,3248,3257],{"__ignoreMap":20},[25,3127,3128],{"class":27,"line":28},[25,3129,3130],{"class":302},"\u002F\u002F从数字0-9打印\n",[25,3132,3133,3136,3138,3140,3143,3145,3147,3150,3152,3154,3156,3158],{"class":27,"line":39},[25,3134,3135],{"class":240},"for",[25,3137,245],{"class":244},[25,3139,248],{"class":240},[25,3141,3142],{"class":244}," i",[25,3144,290],{"class":240},[25,3146,434],{"class":35},[25,3148,3149],{"class":244},";i",[25,3151,1153],{"class":240},[25,3153,689],{"class":35},[25,3155,3149],{"class":244},[25,3157,2402],{"class":240},[25,3159,251],{"class":244},[25,3161,3162],{"class":27,"line":51},[25,3163,1657],{"class":244},[25,3165,3166,3168,3170,3172,3174],{"class":27,"line":59},[25,3167,1662],{"class":244},[25,3169,1286],{"class":240},[25,3171,684],{"class":244},[25,3173,1286],{"class":240},[25,3175,1308],{"class":244},[25,3177,3178],{"class":27,"line":67},[25,3179,1676],{"class":244},[25,3181,3182],{"class":27,"line":75},[25,3183,3184],{"class":302},"\u002F\u002F上式可以进行拆分\n",[25,3186,3187,3189,3191,3193],{"class":27,"line":83},[25,3188,248],{"class":240},[25,3190,3142],{"class":244},[25,3192,290],{"class":240},[25,3194,3195],{"class":35},"0\n",[25,3197,3198,3200],{"class":27,"line":91},[25,3199,3135],{"class":240},[25,3201,3202],{"class":244},"(;;;)\n",[25,3204,3205],{"class":27,"line":1429},[25,3206,1657],{"class":244},[25,3208,3209,3212,3215,3217,3219],{"class":27,"line":1441},[25,3210,3211],{"class":240},"    if",[25,3213,3214],{"class":244},"(i",[25,3216,1821],{"class":240},[25,3218,689],{"class":35},[25,3220,251],{"class":244},[25,3222,3223],{"class":27,"line":1723},[25,3224,2140],{"class":244},[25,3226,3227,3230],{"class":27,"line":1728},[25,3228,3229],{"class":240},"        break",[25,3231,1403],{"class":244},[25,3233,3234],{"class":27,"line":1734},[25,3235,2297],{"class":244},[25,3237,3238,3240,3242,3244,3246],{"class":27,"line":1739},[25,3239,1662],{"class":244},[25,3241,1286],{"class":240},[25,3243,684],{"class":244},[25,3245,1286],{"class":240},[25,3247,1308],{"class":244},[25,3249,3250,3253,3255],{"class":27,"line":1753},[25,3251,3252],{"class":244},"    i",[25,3254,2402],{"class":240},[25,3256,1403],{"class":244},[25,3258,3259],{"class":27,"line":1758},[25,3260,1676],{"class":244},[99,3262,3263],{},"小练习",[15,3265,3267],{"className":231,"code":3266,"language":233,"meta":20,"style":20},"#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",[22,3268,3269,3275,3285,3293,3297,3302,3307,3335,3339,3344,3349,3390,3394,3407,3411,3415,3419,3431,3435,3439],{"__ignoreMap":20},[25,3270,3271,3273],{"class":27,"line":28},[25,3272,2060],{"class":240},[25,3274,2063],{"class":45},[25,3276,3277,3279,3281,3283],{"class":27,"line":39},[25,3278,2068],{"class":240},[25,3280,2071],{"class":240},[25,3282,2074],{"class":31},[25,3284,1403],{"class":244},[25,3286,3287,3289,3291],{"class":27,"line":51},[25,3288,248],{"class":240},[25,3290,2083],{"class":31},[25,3292,2086],{"class":244},[25,3294,3295],{"class":27,"line":59},[25,3296,1657],{"class":244},[25,3298,3299],{"class":27,"line":67},[25,3300,3301],{"class":302},"    \u002F\u002F敲桌子案例\n",[25,3303,3304],{"class":27,"line":75},[25,3305,3306],{"class":302},"    \u002F\u002F1.先输出1-100的数字\n",[25,3308,3309,3312,3314,3316,3318,3320,3322,3325,3327,3329,3331,3333],{"class":27,"line":83},[25,3310,3311],{"class":240},"    for",[25,3313,245],{"class":244},[25,3315,248],{"class":240},[25,3317,3142],{"class":244},[25,3319,290],{"class":240},[25,3321,460],{"class":35},[25,3323,3324],{"class":244},"; i",[25,3326,1699],{"class":240},[25,3328,554],{"class":35},[25,3330,3324],{"class":244},[25,3332,2402],{"class":240},[25,3334,251],{"class":244},[25,3336,3337],{"class":27,"line":91},[25,3338,2140],{"class":244},[25,3340,3341],{"class":27,"line":1429},[25,3342,3343],{"class":302},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[25,3345,3346],{"class":27,"line":1441},[25,3347,3348],{"class":302},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[25,3350,3351,3353,3355,3357,3359,3361,3363,3366,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388],{"class":27,"line":1723},[25,3352,2607],{"class":240},[25,3354,3214],{"class":244},[25,3356,571],{"class":240},[25,3358,612],{"class":35},[25,3360,3059],{"class":240},[25,3362,434],{"class":35},[25,3364,3365],{"class":240}," ||",[25,3367,3142],{"class":244},[25,3369,571],{"class":240},[25,3371,689],{"class":35},[25,3373,3059],{"class":240},[25,3375,612],{"class":35},[25,3377,3365],{"class":240},[25,3379,3142],{"class":244},[25,3381,827],{"class":240},[25,3383,689],{"class":35},[25,3385,3059],{"class":240},[25,3387,612],{"class":35},[25,3389,251],{"class":244},[25,3391,3392],{"class":27,"line":1728},[25,3393,2620],{"class":244},[25,3395,3396,3398,3400,3403,3405],{"class":27,"line":1734},[25,3397,2625],{"class":244},[25,3399,1286],{"class":240},[25,3401,3402],{"class":45},"\"敲桌子\"",[25,3404,1286],{"class":240},[25,3406,1308],{"class":244},[25,3408,3409],{"class":27,"line":1739},[25,3410,2639],{"class":244},[25,3412,3413],{"class":27,"line":1753},[25,3414,2680],{"class":240},[25,3416,3417],{"class":27,"line":1758},[25,3418,2620],{"class":244},[25,3420,3421,3423,3425,3427,3429],{"class":27,"line":1764},[25,3422,2625],{"class":244},[25,3424,1286],{"class":240},[25,3426,684],{"class":244},[25,3428,1286],{"class":240},[25,3430,1308],{"class":244},[25,3432,3433],{"class":27,"line":1785},[25,3434,2639],{"class":244},[25,3436,3437],{"class":27,"line":1790},[25,3438,2297],{"class":244},[25,3440,3441],{"class":27,"line":1804},[25,3442,1676],{"class":244},[99,3444,3445],{},"嵌套实现星图",[15,3447,3449],{"className":231,"code":3448,"language":233,"meta":20,"style":20},"#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",[22,3450,3451,3457,3467,3475,3479,3505,3509,3538,3542,3553,3557,3566,3570],{"__ignoreMap":20},[25,3452,3453,3455],{"class":27,"line":28},[25,3454,2060],{"class":240},[25,3456,2063],{"class":45},[25,3458,3459,3461,3463,3465],{"class":27,"line":39},[25,3460,2068],{"class":240},[25,3462,2071],{"class":240},[25,3464,2074],{"class":31},[25,3466,1403],{"class":244},[25,3468,3469,3471,3473],{"class":27,"line":51},[25,3470,248],{"class":240},[25,3472,2083],{"class":31},[25,3474,2086],{"class":244},[25,3476,3477],{"class":27,"line":59},[25,3478,1657],{"class":244},[25,3480,3481,3483,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503],{"class":27,"line":67},[25,3482,3311],{"class":240},[25,3484,1769],{"class":244},[25,3486,248],{"class":240},[25,3488,3142],{"class":244},[25,3490,290],{"class":240},[25,3492,434],{"class":35},[25,3494,3149],{"class":244},[25,3496,1153],{"class":240},[25,3498,689],{"class":35},[25,3500,3149],{"class":244},[25,3502,2402],{"class":240},[25,3504,251],{"class":244},[25,3506,3507],{"class":27,"line":75},[25,3508,2140],{"class":244},[25,3510,3511,3514,3516,3518,3521,3523,3525,3528,3530,3532,3534,3536],{"class":27,"line":83},[25,3512,3513],{"class":240},"        for",[25,3515,1769],{"class":244},[25,3517,248],{"class":240},[25,3519,3520],{"class":244}," j",[25,3522,290],{"class":240},[25,3524,434],{"class":35},[25,3526,3527],{"class":244},";j",[25,3529,1153],{"class":240},[25,3531,689],{"class":35},[25,3533,3527],{"class":244},[25,3535,2402],{"class":240},[25,3537,251],{"class":244},[25,3539,3540],{"class":27,"line":91},[25,3541,2620],{"class":244},[25,3543,3544,3546,3548,3551],{"class":27,"line":1429},[25,3545,2625],{"class":244},[25,3547,1286],{"class":240},[25,3549,3550],{"class":45},"\"*\"",[25,3552,1403],{"class":244},[25,3554,3555],{"class":27,"line":1441},[25,3556,2639],{"class":244},[25,3558,3559,3562,3564],{"class":27,"line":1723},[25,3560,3561],{"class":244},"        cout",[25,3563,1286],{"class":240},[25,3565,1308],{"class":244},[25,3567,3568],{"class":27,"line":1728},[25,3569,2297],{"class":244},[25,3571,3572],{"class":27,"line":1734},[25,3573,1676],{"class":244},[99,3575,3576],{},"乘法口诀表",[15,3578,3580],{"className":231,"code":3579,"language":233,"meta":20,"style":20},"#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",[22,3581,3582,3588,3598,3606,3610,3636,3640,3665,3669,3709,3713,3721,3725],{"__ignoreMap":20},[25,3583,3584,3586],{"class":27,"line":28},[25,3585,2060],{"class":240},[25,3587,2444],{"class":45},[25,3589,3590,3592,3594,3596],{"class":27,"line":39},[25,3591,2068],{"class":240},[25,3593,2071],{"class":240},[25,3595,2074],{"class":31},[25,3597,1403],{"class":244},[25,3599,3600,3602,3604],{"class":27,"line":51},[25,3601,248],{"class":240},[25,3603,2083],{"class":31},[25,3605,2086],{"class":244},[25,3607,3608],{"class":27,"line":59},[25,3609,1657],{"class":244},[25,3611,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634],{"class":27,"line":67},[25,3613,3311],{"class":240},[25,3615,245],{"class":244},[25,3617,248],{"class":240},[25,3619,3142],{"class":244},[25,3621,290],{"class":240},[25,3623,460],{"class":35},[25,3625,3149],{"class":244},[25,3627,1153],{"class":240},[25,3629,689],{"class":35},[25,3631,3149],{"class":244},[25,3633,2402],{"class":240},[25,3635,251],{"class":244},[25,3637,3638],{"class":27,"line":75},[25,3639,2140],{"class":244},[25,3641,3642,3644,3646,3648,3650,3652,3654,3656,3658,3661,3663],{"class":27,"line":83},[25,3643,3513],{"class":240},[25,3645,245],{"class":244},[25,3647,248],{"class":240},[25,3649,3520],{"class":244},[25,3651,290],{"class":240},[25,3653,460],{"class":35},[25,3655,3527],{"class":244},[25,3657,1699],{"class":240},[25,3659,3660],{"class":244},"i;j",[25,3662,2402],{"class":240},[25,3664,251],{"class":244},[25,3666,3667],{"class":27,"line":91},[25,3668,2620],{"class":244},[25,3670,3671,3673,3675,3677,3679,3681,3683,3685,3687,3690,3692,3694,3696,3698,3700,3703,3705,3707],{"class":27,"line":1429},[25,3672,2625],{"class":244},[25,3674,1286],{"class":240},[25,3676,710],{"class":244},[25,3678,1286],{"class":240},[25,3680,3550],{"class":45},[25,3682,1286],{"class":240},[25,3684,684],{"class":244},[25,3686,1286],{"class":240},[25,3688,3689],{"class":45},"\"=\"",[25,3691,1286],{"class":240},[25,3693,684],{"class":244},[25,3695,698],{"class":240},[25,3697,710],{"class":244},[25,3699,1286],{"class":240},[25,3701,3702],{"class":45},"'",[25,3704,1343],{"class":35},[25,3706,3702],{"class":45},[25,3708,1403],{"class":244},[25,3710,3711],{"class":27,"line":1441},[25,3712,2639],{"class":244},[25,3714,3715,3717,3719],{"class":27,"line":1723},[25,3716,3561],{"class":244},[25,3718,1286],{"class":240},[25,3720,1308],{"class":244},[25,3722,3723],{"class":27,"line":1728},[25,3724,2297],{"class":244},[25,3726,3727],{"class":27,"line":1734},[25,3728,1676],{"class":244},[210,3730,3732],{"id":3731},"_163跳出语句","1.6.3跳出语句",[194,3734,3735],{},[106,3736,3737],{},"break语句\n作用：用于跳出选择结构或者循环结构",[99,3739,3740],{},"break使用时机：",[103,3742,3743,3746,3749],{},[106,3744,3745],{},"出现在switch条件语句中，作用是终止case并跳出switch",[106,3747,3748],{},"出现在循环结构中，作用是跳出当前的循环结构",[106,3750,3751],{},"出现在嵌套循环中，跳出最近的内层循环语句",[194,3753,3754,3757],{"start":39},[106,3755,3756],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[106,3758,3759],{},"goto语句\n语法：goto 标记;",[99,3761,3762],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[15,3764,3766],{"className":231,"code":3765,"language":233,"meta":20,"style":20},"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",[22,3767,3768,3776,3780,3793,3803,3816,3829,3842,3850,3866],{"__ignoreMap":20},[25,3769,3770,3772,3774],{"class":27,"line":28},[25,3771,248],{"class":240},[25,3773,2083],{"class":31},[25,3775,2086],{"class":244},[25,3777,3778],{"class":27,"line":39},[25,3779,1657],{"class":244},[25,3781,3782,3784,3786,3789,3791],{"class":27,"line":51},[25,3783,1662],{"class":244},[25,3785,1286],{"class":240},[25,3787,3788],{"class":45},"\"1\"",[25,3790,1286],{"class":240},[25,3792,1308],{"class":244},[25,3794,3795,3798,3801],{"class":27,"line":59},[25,3796,3797],{"class":240},"    goto",[25,3799,3800],{"class":31}," FLAG",[25,3802,1403],{"class":244},[25,3804,3805,3807,3809,3812,3814],{"class":27,"line":67},[25,3806,1662],{"class":244},[25,3808,1286],{"class":240},[25,3810,3811],{"class":45},"\"2\"",[25,3813,1286],{"class":240},[25,3815,1308],{"class":244},[25,3817,3818,3820,3822,3825,3827],{"class":27,"line":75},[25,3819,1662],{"class":244},[25,3821,1286],{"class":240},[25,3823,3824],{"class":45},"\"3\"",[25,3826,1286],{"class":240},[25,3828,1308],{"class":244},[25,3830,3831,3833,3835,3838,3840],{"class":27,"line":83},[25,3832,1662],{"class":244},[25,3834,1286],{"class":240},[25,3836,3837],{"class":45},"\"4\"",[25,3839,1286],{"class":240},[25,3841,1308],{"class":244},[25,3843,3844,3847],{"class":27,"line":91},[25,3845,3846],{"class":31},"    FLAG",[25,3848,3849],{"class":244},":\n",[25,3851,3852,3854,3856,3859,3861,3863],{"class":27,"line":1429},[25,3853,1662],{"class":244},[25,3855,1286],{"class":240},[25,3857,3858],{"class":45},"\"5\"",[25,3860,1286],{"class":240},[25,3862,1351],{"class":244},[25,3864,3865],{"class":302},"\u002F\u002F跳过了2,3,4,直接到5\n",[25,3867,3868],{"class":27,"line":1441},[25,3869,1676],{"class":244},[182,3871,3873],{"id":3872},"_17数组","1.7数组",[210,3875,3877],{"id":3876},"_171一维数组","1.7.1一维数组",[194,3879,3880],{},[106,3881,3882],{},"一维数组定义方式",[380,3884,3885,3895],{},[383,3886,3887],{},[386,3888,3889,3892],{},[389,3890,3891],{},"方式",[389,3893,3894],{},"注意事项",[427,3896,3897,3911,3921],{},[386,3898,3899,3905],{},[432,3900,3901,3902,299],{},"数据类型 数组名",[25,3903,3904],{},"数组长度",[432,3906,3907,3908,3910],{},"这种方式是先定义再arr",[25,3909,684],{},"赋值",[386,3912,3913,3918],{},[432,3914,3901,3915,3917],{},[25,3916,3904],{},"={值1,值2....};",[432,3919,3920],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[386,3922,3923,3927],{},[432,3924,3901,3925,3917],{},[25,3926],{},[432,3928,3929,3930,3932],{},"int arr",[25,3931],{},";这是不正确的，按照这样的方式定义必须有初始长度",[194,3934,3935],{"start":39},[106,3936,3937],{},"一维数组数组名\n用途：",[103,3939,3940],{},[106,3941,3942],{},"1.可以统计整个数组在内存中的长度：",[15,3944,3946],{"className":231,"code":3945,"language":233,"meta":20,"style":20},"sizeof(arr);\nsizeof(arr[0]);\n",[22,3947,3948,3955],{"__ignoreMap":20},[25,3949,3950,3952],{"class":27,"line":28},[25,3951,241],{"class":240},[25,3953,3954],{"class":244},"(arr);\n",[25,3956,3957,3959,3962,3964],{"class":27,"line":39},[25,3958,241],{"class":240},[25,3960,3961],{"class":244},"(arr[",[25,3963,434],{"class":35},[25,3965,3966],{"class":244},"]);\n",[103,3968,3969],{},[106,3970,3971],{},"2.可以获取数组在内存中的首地址:",[15,3973,3975],{"className":231,"code":3974,"language":233,"meta":20,"style":20},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[22,3976,3977,3982,3995,4000],{"__ignoreMap":20},[25,3978,3979],{"class":27,"line":28},[25,3980,3981],{"class":302},"\u002F\u002F查看16进制的首地址\n",[25,3983,3984,3986,3988,3991,3993],{"class":27,"line":39},[25,3985,1481],{"class":244},[25,3987,1286],{"class":240},[25,3989,3990],{"class":244},"arr",[25,3992,1286],{"class":240},[25,3994,1308],{"class":244},[25,3996,3997],{"class":27,"line":51},[25,3998,3999],{"class":302},"\u002F\u002F看10进制数\n",[25,4001,4002,4004,4006,4008,4010,4012,4014,4017,4019,4021,4023],{"class":27,"line":59},[25,4003,1481],{"class":244},[25,4005,1286],{"class":240},[25,4007,245],{"class":244},[25,4009,248],{"class":240},[25,4011,672],{"class":244},[25,4013,596],{"class":240},[25,4015,4016],{"class":244},"arr[",[25,4018,434],{"class":35},[25,4020,1183],{"class":244},[25,4022,1286],{"class":240},[25,4024,1308],{"class":244},[99,4026,4027],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[103,4029,4030],{},[106,4031,4032],{},"1️⃣五只小猪称体重",[15,4034,4036],{"className":231,"code":4035,"language":233,"meta":20,"style":20},"#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",[22,4037,4038,4044,4054,4062,4066,4106,4119,4145,4149,4161,4165,4175,4179,4183,4196,4206],{"__ignoreMap":20},[25,4039,4040,4042],{"class":27,"line":28},[25,4041,2060],{"class":240},[25,4043,2063],{"class":45},[25,4045,4046,4048,4050,4052],{"class":27,"line":39},[25,4047,2068],{"class":240},[25,4049,2071],{"class":240},[25,4051,2074],{"class":31},[25,4053,1403],{"class":244},[25,4055,4056,4058,4060],{"class":27,"line":51},[25,4057,248],{"class":240},[25,4059,2083],{"class":31},[25,4061,2086],{"class":244},[25,4063,4064],{"class":27,"line":59},[25,4065,1657],{"class":244},[25,4067,4068,4070,4073,4075,4077,4079,4081,4084,4086,4089,4091,4093,4095,4098,4100,4103],{"class":27,"line":67},[25,4069,2095],{"class":240},[25,4071,4072],{"class":244}," arr[",[25,4074,562],{"class":35},[25,4076,1183],{"class":244},[25,4078,290],{"class":240},[25,4080,1139],{"class":244},[25,4082,4083],{"class":35},"300",[25,4085,621],{"class":244},[25,4087,4088],{"class":35},"350",[25,4090,621],{"class":244},[25,4092,1833],{"class":35},[25,4094,621],{"class":244},[25,4096,4097],{"class":35},"400",[25,4099,621],{"class":244},[25,4101,4102],{"class":35},"250",[25,4104,4105],{"class":244},"};\n",[25,4107,4108,4110,4113,4115,4117],{"class":27,"line":75},[25,4109,2095],{"class":240},[25,4111,4112],{"class":244}," tmp",[25,4114,290],{"class":240},[25,4116,434],{"class":35},[25,4118,1403],{"class":244},[25,4120,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143],{"class":27,"line":83},[25,4122,3311],{"class":240},[25,4124,1769],{"class":244},[25,4126,248],{"class":240},[25,4128,3142],{"class":244},[25,4130,290],{"class":240},[25,4132,434],{"class":35},[25,4134,3149],{"class":244},[25,4136,1153],{"class":240},[25,4138,562],{"class":35},[25,4140,3149],{"class":244},[25,4142,2402],{"class":240},[25,4144,251],{"class":244},[25,4146,4147],{"class":27,"line":91},[25,4148,2140],{"class":244},[25,4150,4151,4153,4156,4158],{"class":27,"line":1429},[25,4152,2607],{"class":240},[25,4154,4155],{"class":244},"(tmp",[25,4157,1153],{"class":240},[25,4159,4160],{"class":244},"arr[i])\n",[25,4162,4163],{"class":27,"line":1441},[25,4164,2620],{"class":244},[25,4166,4167,4170,4172],{"class":27,"line":1723},[25,4168,4169],{"class":244},"            tmp",[25,4171,290],{"class":240},[25,4173,4174],{"class":244},"arr[i];\n",[25,4176,4177],{"class":27,"line":1728},[25,4178,2639],{"class":244},[25,4180,4181],{"class":27,"line":1734},[25,4182,2297],{"class":244},[25,4184,4185,4187,4189,4192,4194],{"class":27,"line":1739},[25,4186,1662],{"class":244},[25,4188,1286],{"class":240},[25,4190,4191],{"class":244},"tmp",[25,4193,1286],{"class":240},[25,4195,1308],{"class":244},[25,4197,4198,4201,4204],{"class":27,"line":1753},[25,4199,4200],{"class":240},"    return",[25,4202,4203],{"class":35}," 0",[25,4205,1403],{"class":244},[25,4207,4208],{"class":27,"line":1758},[25,4209,1676],{"class":244},[103,4211,4212],{},[106,4213,4214],{},"2️⃣数组元素逆置",[15,4216,4218],{"className":231,"code":4217,"language":233,"meta":20,"style":20},"\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",[22,4219,4220,4225,4231,4241,4249,4253,4288,4304,4336,4349,4354,4359,4371,4381,4391,4396,4405,4415,4420,4425,4452,4456,4472,4476,4487,4496],{"__ignoreMap":20},[25,4221,4222],{"class":27,"line":28},[25,4223,4224],{"class":302},"\u002F\u002F元素逆置\n",[25,4226,4227,4229],{"class":27,"line":39},[25,4228,2060],{"class":240},[25,4230,2063],{"class":45},[25,4232,4233,4235,4237,4239],{"class":27,"line":51},[25,4234,2068],{"class":240},[25,4236,2071],{"class":240},[25,4238,2074],{"class":31},[25,4240,1403],{"class":244},[25,4242,4243,4245,4247],{"class":27,"line":59},[25,4244,248],{"class":240},[25,4246,2083],{"class":31},[25,4248,2086],{"class":244},[25,4250,4251],{"class":27,"line":67},[25,4252,1657],{"class":244},[25,4254,4255,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278,4280,4282,4284,4286],{"class":27,"line":75},[25,4256,4257],{"class":240},"   int",[25,4259,4072],{"class":244},[25,4261,562],{"class":35},[25,4263,1183],{"class":244},[25,4265,290],{"class":240},[25,4267,1139],{"class":244},[25,4269,460],{"class":35},[25,4271,621],{"class":244},[25,4273,321],{"class":35},[25,4275,621],{"class":244},[25,4277,315],{"class":35},[25,4279,621],{"class":244},[25,4281,536],{"class":35},[25,4283,621],{"class":244},[25,4285,562],{"class":35},[25,4287,4105],{"class":244},[25,4289,4290,4292,4295,4297,4299,4301],{"class":27,"line":83},[25,4291,4257],{"class":240},[25,4293,4294],{"class":244}," start",[25,4296,290],{"class":240},[25,4298,434],{"class":35},[25,4300,299],{"class":244},[25,4302,4303],{"class":302},"\u002F\u002F起始下标\n",[25,4305,4306,4308,4311,4314,4317,4320,4322,4324,4327,4329,4331,4333],{"class":27,"line":91},[25,4307,4257],{"class":240},[25,4309,4310],{"class":244}," end",[25,4312,4313],{"class":240},"=sizeof",[25,4315,4316],{"class":244},"(arr)",[25,4318,4319],{"class":240},"\u002Fsizeof",[25,4321,3961],{"class":244},[25,4323,434],{"class":35},[25,4325,4326],{"class":244},"])",[25,4328,775],{"class":240},[25,4330,460],{"class":35},[25,4332,299],{"class":244},[25,4334,4335],{"class":302},"\u002F\u002F结束下标\n",[25,4337,4338,4341,4344,4346],{"class":27,"line":1429},[25,4339,4340],{"class":240},"   while",[25,4342,4343],{"class":244}," (start",[25,4345,1153],{"class":240},[25,4347,4348],{"class":244},"end)\n",[25,4350,4351],{"class":27,"line":1441},[25,4352,4353],{"class":244},"   {\n",[25,4355,4356],{"class":27,"line":1723},[25,4357,4358],{"class":302},"    \u002F\u002F实现元素互换代码\n",[25,4360,4361,4363,4366,4368],{"class":27,"line":1728},[25,4362,2095],{"class":240},[25,4364,4365],{"class":244}," temp",[25,4367,290],{"class":240},[25,4369,4370],{"class":244},"arr[start];\n",[25,4372,4373,4376,4378],{"class":27,"line":1734},[25,4374,4375],{"class":244},"    arr[start]",[25,4377,290],{"class":240},[25,4379,4380],{"class":244},"arr[end];\n",[25,4382,4383,4386,4388],{"class":27,"line":1739},[25,4384,4385],{"class":244},"    arr[end]",[25,4387,290],{"class":240},[25,4389,4390],{"class":244},"temp;\n",[25,4392,4393],{"class":27,"line":1753},[25,4394,4395],{"class":302},"    \u002F\u002F下标更新\n",[25,4397,4398,4401,4403],{"class":27,"line":1758},[25,4399,4400],{"class":244},"    start",[25,4402,2402],{"class":240},[25,4404,1403],{"class":244},[25,4406,4407,4410,4413],{"class":27,"line":1764},[25,4408,4409],{"class":244},"    end",[25,4411,4412],{"class":240},"--",[25,4414,1403],{"class":244},[25,4416,4417],{"class":27,"line":1785},[25,4418,4419],{"class":244},"   }\n",[25,4421,4422],{"class":27,"line":1790},[25,4423,4424],{"class":302},"   \u002F\u002F输出逆置后的数组\n",[25,4426,4427,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450],{"class":27,"line":1804},[25,4428,4429],{"class":240},"   for",[25,4431,1769],{"class":244},[25,4433,248],{"class":240},[25,4435,3142],{"class":244},[25,4437,290],{"class":240},[25,4439,434],{"class":35},[25,4441,3149],{"class":244},[25,4443,1153],{"class":240},[25,4445,562],{"class":35},[25,4447,3149],{"class":244},[25,4449,2402],{"class":240},[25,4451,251],{"class":244},[25,4453,4454],{"class":27,"line":1809},[25,4455,4353],{"class":244},[25,4457,4458,4460,4462,4465,4467,4470],{"class":27,"line":1838},[25,4459,1662],{"class":244},[25,4461,1286],{"class":240},[25,4463,4464],{"class":244},"arr[i]",[25,4466,1286],{"class":240},[25,4468,4469],{"class":45},"\" \"",[25,4471,1403],{"class":244},[25,4473,4474],{"class":27,"line":1843},[25,4475,4419],{"class":244},[25,4477,4478,4481,4483,4485],{"class":27,"line":1860},[25,4479,4480],{"class":31},"   system",[25,4482,245],{"class":244},[25,4484,2418],{"class":45},[25,4486,2829],{"class":244},[25,4488,4489,4492,4494],{"class":27,"line":1865},[25,4490,4491],{"class":240},"   return",[25,4493,4203],{"class":35},[25,4495,1403],{"class":244},[25,4497,4498],{"class":27,"line":1870},[25,4499,1676],{"class":244},[103,4501,4502],{},[106,4503,4504],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[15,4506,4508],{"className":231,"code":4507,"language":233,"meta":20,"style":20},"\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",[22,4509,4510,4515,4521,4531,4539,4543,4595,4608,4634,4638,4652,4656,4661,4666,4696,4700,4705,4739,4743,4748,4768,4773,4785,4801,4816,4821,4825,4829,4842,4868,4872,4886,4890,4898],{"__ignoreMap":20},[25,4511,4512],{"class":27,"line":28},[25,4513,4514],{"class":302},"\u002F\u002F冒泡排序,升序\n",[25,4516,4517,4519],{"class":27,"line":39},[25,4518,2060],{"class":240},[25,4520,2063],{"class":45},[25,4522,4523,4525,4527,4529],{"class":27,"line":51},[25,4524,2068],{"class":240},[25,4526,2071],{"class":240},[25,4528,2074],{"class":31},[25,4530,1403],{"class":244},[25,4532,4533,4535,4537],{"class":27,"line":59},[25,4534,248],{"class":240},[25,4536,2083],{"class":31},[25,4538,2086],{"class":244},[25,4540,4541],{"class":27,"line":67},[25,4542,1657],{"class":244},[25,4544,4545,4547,4549,4551,4554,4556,4559,4561,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593],{"class":27,"line":75},[25,4546,2095],{"class":240},[25,4548,4072],{"class":244},[25,4550,663],{"class":35},[25,4552,4553],{"class":244},"] ",[25,4555,290],{"class":240},[25,4557,4558],{"class":244}," {",[25,4560,536],{"class":35},[25,4562,621],{"class":244},[25,4564,321],{"class":35},[25,4566,621],{"class":244},[25,4568,638],{"class":35},[25,4570,621],{"class":244},[25,4572,434],{"class":35},[25,4574,621],{"class":244},[25,4576,562],{"class":35},[25,4578,621],{"class":244},[25,4580,612],{"class":35},[25,4582,621],{"class":244},[25,4584,460],{"class":35},[25,4586,621],{"class":244},[25,4588,315],{"class":35},[25,4590,621],{"class":244},[25,4592,663],{"class":35},[25,4594,4105],{"class":244},[25,4596,4597,4599,4601,4604,4606],{"class":27,"line":83},[25,4598,1662],{"class":244},[25,4600,1286],{"class":240},[25,4602,4603],{"class":45},"\"排序前：\"",[25,4605,1286],{"class":240},[25,4607,1308],{"class":244},[25,4609,4610,4612,4614,4616,4618,4620,4622,4624,4626,4628,4630,4632],{"class":27,"line":91},[25,4611,3311],{"class":240},[25,4613,1769],{"class":244},[25,4615,248],{"class":240},[25,4617,3142],{"class":244},[25,4619,290],{"class":240},[25,4621,434],{"class":35},[25,4623,3149],{"class":244},[25,4625,1153],{"class":240},[25,4627,663],{"class":35},[25,4629,3149],{"class":244},[25,4631,2402],{"class":240},[25,4633,251],{"class":244},[25,4635,4636],{"class":27,"line":1429},[25,4637,2140],{"class":244},[25,4639,4640,4642,4644,4646,4648,4650],{"class":27,"line":1441},[25,4641,3561],{"class":244},[25,4643,1286],{"class":240},[25,4645,4464],{"class":244},[25,4647,1286],{"class":240},[25,4649,4469],{"class":45},[25,4651,1403],{"class":244},[25,4653,4654],{"class":27,"line":1723},[25,4655,2297],{"class":244},[25,4657,4658],{"class":27,"line":1728},[25,4659,4660],{"class":302},"    \u002F\u002F开始冒泡排序\n",[25,4662,4663],{"class":27,"line":1734},[25,4664,4665],{"class":302},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[25,4667,4668,4670,4672,4674,4676,4678,4680,4682,4684,4686,4688,4690,4692,4694],{"class":27,"line":1739},[25,4669,3311],{"class":240},[25,4671,1769],{"class":244},[25,4673,248],{"class":240},[25,4675,3142],{"class":244},[25,4677,290],{"class":240},[25,4679,434],{"class":35},[25,4681,3149],{"class":244},[25,4683,1153],{"class":240},[25,4685,663],{"class":35},[25,4687,775],{"class":240},[25,4689,460],{"class":35},[25,4691,3149],{"class":244},[25,4693,2402],{"class":240},[25,4695,251],{"class":244},[25,4697,4698],{"class":27,"line":1753},[25,4699,2140],{"class":244},[25,4701,4702],{"class":27,"line":1758},[25,4703,4704],{"class":302},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[25,4706,4707,4709,4711,4713,4715,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737],{"class":27,"line":1764},[25,4708,3513],{"class":240},[25,4710,1769],{"class":244},[25,4712,248],{"class":240},[25,4714,3520],{"class":244},[25,4716,290],{"class":240},[25,4718,434],{"class":35},[25,4720,3527],{"class":244},[25,4722,1153],{"class":240},[25,4724,663],{"class":35},[25,4726,775],{"class":240},[25,4728,684],{"class":244},[25,4730,775],{"class":240},[25,4732,460],{"class":35},[25,4734,3527],{"class":244},[25,4736,2402],{"class":240},[25,4738,251],{"class":244},[25,4740,4741],{"class":27,"line":1785},[25,4742,2620],{"class":244},[25,4744,4745],{"class":27,"line":1790},[25,4746,4747],{"class":302},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[25,4749,4750,4753,4756,4758,4761,4763,4765],{"class":27,"line":1804},[25,4751,4752],{"class":240},"            if",[25,4754,4755],{"class":244},"(arr[j]",[25,4757,1203],{"class":240},[25,4759,4760],{"class":244},"arr[j",[25,4762,724],{"class":240},[25,4764,460],{"class":35},[25,4766,4767],{"class":244},"])\n",[25,4769,4770],{"class":27,"line":1809},[25,4771,4772],{"class":244},"            {\n",[25,4774,4775,4778,4780,4782],{"class":27,"line":1838},[25,4776,4777],{"class":240},"                int",[25,4779,4365],{"class":244},[25,4781,290],{"class":240},[25,4783,4784],{"class":244},"arr[j];\n",[25,4786,4787,4790,4792,4794,4796,4798],{"class":27,"line":1843},[25,4788,4789],{"class":244},"                arr[j]",[25,4791,290],{"class":240},[25,4793,4760],{"class":244},[25,4795,724],{"class":240},[25,4797,460],{"class":35},[25,4799,4800],{"class":244},"];\n",[25,4802,4803,4806,4808,4810,4812,4814],{"class":27,"line":1860},[25,4804,4805],{"class":244},"                arr[j",[25,4807,724],{"class":240},[25,4809,460],{"class":35},[25,4811,1183],{"class":244},[25,4813,290],{"class":240},[25,4815,4390],{"class":244},[25,4817,4818],{"class":27,"line":1865},[25,4819,4820],{"class":244},"            }\n",[25,4822,4823],{"class":27,"line":1870},[25,4824,2639],{"class":244},[25,4826,4827],{"class":27,"line":1875},[25,4828,2297],{"class":244},[25,4830,4831,4833,4835,4838,4840],{"class":27,"line":1889},[25,4832,1662],{"class":244},[25,4834,1286],{"class":240},[25,4836,4837],{"class":45},"\"排序后：\"",[25,4839,1286],{"class":240},[25,4841,1308],{"class":244},[25,4843,4844,4846,4848,4850,4852,4854,4856,4858,4860,4862,4864,4866],{"class":27,"line":1894},[25,4845,3311],{"class":240},[25,4847,1769],{"class":244},[25,4849,248],{"class":240},[25,4851,3142],{"class":244},[25,4853,290],{"class":240},[25,4855,434],{"class":35},[25,4857,3149],{"class":244},[25,4859,1153],{"class":240},[25,4861,663],{"class":35},[25,4863,3149],{"class":244},[25,4865,2402],{"class":240},[25,4867,251],{"class":244},[25,4869,4870],{"class":27,"line":2687},[25,4871,2140],{"class":244},[25,4873,4874,4876,4878,4880,4882,4884],{"class":27,"line":2701},[25,4875,3561],{"class":244},[25,4877,1286],{"class":240},[25,4879,4464],{"class":244},[25,4881,1286],{"class":240},[25,4883,4469],{"class":45},[25,4885,1403],{"class":244},[25,4887,4888],{"class":27,"line":2709},[25,4889,2297],{"class":244},[25,4891,4892,4894,4896],{"class":27,"line":2714},[25,4893,4200],{"class":240},[25,4895,4203],{"class":35},[25,4897,1403],{"class":244},[25,4899,4900],{"class":27,"line":2720},[25,4901,1676],{"class":244},[210,4903,4905],{"id":4904},"_172二维数组","1.7.2二维数组",[194,4907,4908],{},[106,4909,4910],{},"二维数组的四种定义方式",[380,4912,4913,4922],{},[383,4914,4915],{},[386,4916,4917,4920],{},[389,4918,4919],{},"序号",[389,4921,3891],{},[427,4923,4924,4934,4943,4952,4961],{},[386,4925,4926,4928],{},[432,4927,460],{},[432,4929,4930,4931,299],{},"数据类型 数组名[行数]",[25,4932,4933],{},"列数",[386,4935,4936,4938],{},[432,4937,321],{},[432,4939,4930,4940,4942],{},[25,4941,4933],{},"={ {数据1,数据2}，{数据3，数据4}... }",[386,4944,4945,4947],{},[432,4946,315],{},[432,4948,4930,4949,4951],{},[25,4950,4933],{},"={数据1,数据2,数据3...}",[386,4953,4954,4956],{},[432,4955,536],{},[432,4957,4958,4959,4951],{},"数据类型 数组名[]",[25,4960,4933],{},[386,4962,4963,4966],{},[432,4964,4965],{},"注意：不能只省略列数",[432,4967],{},[194,4969,4970],{"start":39},[106,4971,4972],{},"二维数组数组名",[103,4974,4975,4978],{},[106,4976,4977],{},"1.查看二维数组所占内存空间",[106,4979,4980],{},"2.获取二维数组首地址",[99,4982,4983],{},"已知二维数组，求二维数组的行数与列数",[15,4985,4987],{"className":231,"code":4986,"language":233,"meta":20,"style":20},"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",[22,4988,4989,4997,5001,5019,5023,5041,5057,5062,5087,5120],{"__ignoreMap":20},[25,4990,4991,4993,4995],{"class":27,"line":28},[25,4992,248],{"class":240},[25,4994,2083],{"class":31},[25,4996,2086],{"class":244},[25,4998,4999],{"class":27,"line":39},[25,5000,1657],{"class":244},[25,5002,5003,5005,5007,5009,5012,5014,5016],{"class":27,"line":51},[25,5004,2095],{"class":240},[25,5006,4072],{"class":244},[25,5008,321],{"class":35},[25,5010,5011],{"class":244},"][",[25,5013,315],{"class":35},[25,5015,1183],{"class":244},[25,5017,5018],{"class":240},"=\n",[25,5020,5021],{"class":27,"line":59},[25,5022,2140],{"class":244},[25,5024,5025,5028,5030,5032,5034,5036,5038],{"class":27,"line":67},[25,5026,5027],{"class":244},"        {",[25,5029,460],{"class":35},[25,5031,621],{"class":244},[25,5033,321],{"class":35},[25,5035,621],{"class":244},[25,5037,315],{"class":35},[25,5039,5040],{"class":244},"},\n",[25,5042,5043,5045,5047,5049,5051,5053,5055],{"class":27,"line":75},[25,5044,5027],{"class":244},[25,5046,536],{"class":35},[25,5048,621],{"class":244},[25,5050,562],{"class":35},[25,5052,621],{"class":244},[25,5054,587],{"class":35},[25,5056,1676],{"class":244},[25,5058,5059],{"class":27,"line":83},[25,5060,5061],{"class":244},"    };\n",[25,5063,5064,5066,5068,5071,5073,5075,5077,5079,5081,5083,5085],{"class":27,"line":91},[25,5065,1662],{"class":244},[25,5067,1286],{"class":240},[25,5069,5070],{"class":45},"\"二维数组的行数\"",[25,5072,1484],{"class":240},[25,5074,4316],{"class":244},[25,5076,4319],{"class":240},[25,5078,3961],{"class":244},[25,5080,434],{"class":35},[25,5082,4326],{"class":244},[25,5084,1286],{"class":240},[25,5086,1308],{"class":244},[25,5088,5089,5091,5093,5096,5098,5100,5102,5104,5106,5108,5110,5112,5114,5116,5118],{"class":27,"line":1429},[25,5090,1662],{"class":244},[25,5092,1286],{"class":240},[25,5094,5095],{"class":45},"\"二维数组的列数\"",[25,5097,1484],{"class":240},[25,5099,3961],{"class":244},[25,5101,434],{"class":35},[25,5103,4326],{"class":244},[25,5105,4319],{"class":240},[25,5107,3961],{"class":244},[25,5109,434],{"class":35},[25,5111,5011],{"class":244},[25,5113,434],{"class":35},[25,5115,4326],{"class":244},[25,5117,1286],{"class":240},[25,5119,1308],{"class":244},[25,5121,5122],{"class":27,"line":1441},[25,5123,1676],{"class":244},[99,5125,5126],{},"查看二维数组首地址",[15,5128,5130],{"className":231,"code":5129,"language":233,"meta":20,"style":20},"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",[22,5131,5132,5149,5175,5200],{"__ignoreMap":20},[25,5133,5134,5136,5138,5141,5143,5145,5147],{"class":27,"line":28},[25,5135,1481],{"class":244},[25,5137,1286],{"class":240},[25,5139,5140],{"class":45},"\"二维数组首地址：\"",[25,5142,1286],{"class":240},[25,5144,3990],{"class":244},[25,5146,1286],{"class":240},[25,5148,1308],{"class":244},[25,5150,5151,5153,5155,5158,5160,5162,5164,5167,5169,5171,5173],{"class":27,"line":39},[25,5152,1481],{"class":244},[25,5154,1286],{"class":240},[25,5156,5157],{"class":45},"\"二维数组第一行的首地址：\"",[25,5159,1286],{"class":240},[25,5161,245],{"class":244},[25,5163,248],{"class":240},[25,5165,5166],{"class":244},")arr[",[25,5168,434],{"class":35},[25,5170,1183],{"class":244},[25,5172,1286],{"class":240},[25,5174,1308],{"class":244},[25,5176,5177,5179,5181,5184,5186,5188,5190,5192,5194,5196,5198],{"class":27,"line":51},[25,5178,1481],{"class":244},[25,5180,1286],{"class":240},[25,5182,5183],{"class":45},"\"二维数组第二行的首地址：\"",[25,5185,1286],{"class":240},[25,5187,245],{"class":244},[25,5189,248],{"class":240},[25,5191,5166],{"class":244},[25,5193,460],{"class":35},[25,5195,1183],{"class":244},[25,5197,1286],{"class":240},[25,5199,1308],{"class":244},[25,5201,5202,5204,5206,5209,5211,5213,5215,5217,5219,5221,5223,5225,5227,5229,5231,5233],{"class":27,"line":59},[25,5203,1481],{"class":244},[25,5205,1286],{"class":240},[25,5207,5208],{"class":45},"\"二维数组第一个元素的首地址:\"",[25,5210,1286],{"class":240},[25,5212,245],{"class":244},[25,5214,248],{"class":240},[25,5216,672],{"class":244},[25,5218,596],{"class":240},[25,5220,4016],{"class":244},[25,5222,434],{"class":35},[25,5224,5011],{"class":244},[25,5226,434],{"class":35},[25,5228,1183],{"class":244},[25,5230,1286],{"class":240},[25,5232,1351],{"class":244},[25,5234,5235],{"class":302},"\u002F\u002F对于数，要加取址符\n",[159,5237,5238],{},"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":20,"searchDepth":39,"depth":39,"links":5240},[5241,5242,5243,5251,5252,5258,5263],{"id":184,"depth":39,"text":185},{"id":191,"depth":39,"text":192},{"id":207,"depth":39,"text":208,"children":5244},[5245,5246,5247,5248,5249,5250],{"id":212,"depth":51,"text":213},{"id":261,"depth":51,"text":262},{"id":329,"depth":51,"text":330},{"id":1267,"depth":51,"text":1268},{"id":1357,"depth":51,"text":1358},{"id":1455,"depth":51,"text":1456},{"id":1497,"depth":39,"text":1498},{"id":1565,"depth":39,"text":1566,"children":5253},[5254,5255,5256,5257],{"id":1569,"depth":51,"text":1570},{"id":1590,"depth":51,"text":1591},{"id":1599,"depth":51,"text":1600},{"id":1608,"depth":51,"text":1609},{"id":1617,"depth":39,"text":1618,"children":5259},[5260,5261,5262],{"id":1621,"depth":51,"text":1622},{"id":2315,"depth":51,"text":2316},{"id":3731,"depth":51,"text":3732},{"id":3872,"depth":39,"text":3873,"children":5264},[5265,5266],{"id":3876,"depth":51,"text":3877},{"id":4904,"depth":51,"text":4905},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":175,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5273,"title":5274,"body":5275,"description":20,"extension":165,"meta":6375,"navigation":167,"path":6376,"seo":6377,"stem":6378,"__hash__":6379},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5276,"toc":6367},[5277,5280,5284,5292,5300,5303,5369,5373,5376,5452,5456,5459,5462,5465,5678,5682,5687,5751,5756,5823,5828,5919,5922,6027,6031,6034,6040,6184,6188,6191,6205,6208,6253,6256,6364],[10,5278,5274],{"id":5279},"_2函数",[182,5281,5283],{"id":5282},"_21函数概述","2.1函数概述",[194,5285,5286,5289],{},[106,5287,5288],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[106,5290,5291],{},"语法：",[15,5293,5298],{"className":5294,"code":5296,"language":5297,"meta":20},[5295],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[22,5299,5296],{"__ignoreMap":20},[99,5301,5302],{},"小案例",[15,5304,5306],{"className":231,"code":5305,"language":233,"meta":20,"style":20},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[22,5307,5308,5313,5337,5341,5358,5365],{"__ignoreMap":20},[25,5309,5310],{"class":27,"line":28},[25,5311,5312],{"class":302},"\u002F\u002Fnum1,num2形参\n",[25,5314,5315,5317,5320,5322,5324,5328,5330,5332,5335],{"class":27,"line":39},[25,5316,248],{"class":240},[25,5318,5319],{"class":31}," add",[25,5321,245],{"class":244},[25,5323,248],{"class":240},[25,5325,5327],{"class":5326},"s4XuR"," num1",[25,5329,621],{"class":244},[25,5331,248],{"class":240},[25,5333,5334],{"class":5326}," num2",[25,5336,251],{"class":244},[25,5338,5339],{"class":27,"line":51},[25,5340,1657],{"class":244},[25,5342,5343,5345,5348,5350,5353,5355],{"class":27,"line":59},[25,5344,2095],{"class":240},[25,5346,5347],{"class":244}," sum",[25,5349,290],{"class":240},[25,5351,5352],{"class":244},"num1",[25,5354,724],{"class":240},[25,5356,5357],{"class":244},"num2;\n",[25,5359,5360,5362],{"class":27,"line":67},[25,5361,4200],{"class":240},[25,5363,5364],{"class":244}," sum;\n",[25,5366,5367],{"class":27,"line":75},[25,5368,1676],{"class":244},[182,5370,5372],{"id":5371},"_22函数调用","2.2函数调用",[99,5374,5375],{},"调用刚刚写的求和函数",[15,5377,5379],{"className":231,"code":5378,"language":233,"meta":20,"style":20},"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",[22,5380,5381,5389,5393,5398,5410,5422,5431,5436,5448],{"__ignoreMap":20},[25,5382,5383,5385,5387],{"class":27,"line":28},[25,5384,248],{"class":240},[25,5386,2083],{"class":31},[25,5388,2086],{"class":244},[25,5390,5391],{"class":27,"line":39},[25,5392,1657],{"class":244},[25,5394,5395],{"class":27,"line":51},[25,5396,5397],{"class":302},"    \u002F\u002Fa,b实参\n",[25,5399,5400,5402,5404,5406,5408],{"class":27,"line":59},[25,5401,2095],{"class":240},[25,5403,1510],{"class":244},[25,5405,290],{"class":240},[25,5407,434],{"class":35},[25,5409,1403],{"class":244},[25,5411,5412,5414,5416,5418,5420],{"class":27,"line":67},[25,5413,2095],{"class":240},[25,5415,2943],{"class":244},[25,5417,290],{"class":240},[25,5419,434],{"class":35},[25,5421,1403],{"class":244},[25,5423,5424,5426,5428],{"class":27,"line":75},[25,5425,2122],{"class":244},[25,5427,1541],{"class":240},[25,5429,5430],{"class":244},"a,b;\n",[25,5432,5433],{"class":27,"line":83},[25,5434,5435],{"class":302},"    \u002F\u002F调用函数时，实参值传给了形参\n",[25,5437,5438,5440,5442,5445],{"class":27,"line":91},[25,5439,1662],{"class":244},[25,5441,1286],{"class":240},[25,5443,5444],{"class":31},"add",[25,5446,5447],{"class":244},"(a,b);\n",[25,5449,5450],{"class":27,"line":1429},[25,5451,1676],{"class":244},[182,5453,5455],{"id":5454},"_23值传递","2.3值传递",[99,5457,5458],{},"值传递就是函数调用时实参将数值传给形参",[99,5460,5461],{},"值传递时，如果形参发生任何改变，不会影响实参",[99,5463,5464],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[15,5466,5468],{"className":231,"code":5467,"language":233,"meta":20,"style":20},"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",[22,5469,5470,5492,5496,5509,5526,5544,5555,5564,5573,5586,5602,5618,5627,5631,5639,5643,5655,5667,5674],{"__ignoreMap":20},[25,5471,5472,5475,5478,5480,5482,5484,5486,5488,5490],{"class":27,"line":28},[25,5473,5474],{"class":240},"void",[25,5476,5477],{"class":31}," swap",[25,5479,245],{"class":244},[25,5481,248],{"class":240},[25,5483,5327],{"class":5326},[25,5485,621],{"class":244},[25,5487,248],{"class":240},[25,5489,5334],{"class":5326},[25,5491,251],{"class":244},[25,5493,5494],{"class":27,"line":39},[25,5495,1657],{"class":244},[25,5497,5498,5500,5502,5505,5507],{"class":27,"line":51},[25,5499,1662],{"class":244},[25,5501,1286],{"class":240},[25,5503,5504],{"class":45},"\"交换前：\"",[25,5506,1286],{"class":240},[25,5508,1308],{"class":244},[25,5510,5511,5513,5515,5518,5520,5522,5524],{"class":27,"line":59},[25,5512,1662],{"class":244},[25,5514,1286],{"class":240},[25,5516,5517],{"class":45},"\"num1=\"",[25,5519,1286],{"class":240},[25,5521,5352],{"class":244},[25,5523,1286],{"class":240},[25,5525,1308],{"class":244},[25,5527,5528,5530,5532,5535,5537,5540,5542],{"class":27,"line":67},[25,5529,1662],{"class":244},[25,5531,1286],{"class":240},[25,5533,5534],{"class":45},"\"num2=\"",[25,5536,1286],{"class":240},[25,5538,5539],{"class":244},"num2",[25,5541,1286],{"class":240},[25,5543,1308],{"class":244},[25,5545,5546,5548,5550,5552],{"class":27,"line":75},[25,5547,2095],{"class":240},[25,5549,4365],{"class":244},[25,5551,290],{"class":240},[25,5553,5554],{"class":244},"num1;\n",[25,5556,5557,5560,5562],{"class":27,"line":83},[25,5558,5559],{"class":244},"    num1",[25,5561,290],{"class":240},[25,5563,5357],{"class":244},[25,5565,5566,5569,5571],{"class":27,"line":91},[25,5567,5568],{"class":244},"    num2",[25,5570,290],{"class":240},[25,5572,4390],{"class":244},[25,5574,5575,5577,5579,5582,5584],{"class":27,"line":1429},[25,5576,1662],{"class":244},[25,5578,1286],{"class":240},[25,5580,5581],{"class":45},"\"交换后：\"",[25,5583,1286],{"class":240},[25,5585,1308],{"class":244},[25,5587,5588,5590,5592,5594,5596,5598,5600],{"class":27,"line":1441},[25,5589,1662],{"class":244},[25,5591,1286],{"class":240},[25,5593,5517],{"class":45},[25,5595,1286],{"class":240},[25,5597,5352],{"class":244},[25,5599,1286],{"class":240},[25,5601,1308],{"class":244},[25,5603,5604,5606,5608,5610,5612,5614,5616],{"class":27,"line":1723},[25,5605,1662],{"class":244},[25,5607,1286],{"class":240},[25,5609,5534],{"class":45},[25,5611,1286],{"class":240},[25,5613,5539],{"class":244},[25,5615,1286],{"class":240},[25,5617,1308],{"class":244},[25,5619,5620,5622,5624],{"class":27,"line":1728},[25,5621,4200],{"class":240},[25,5623,299],{"class":244},[25,5625,5626],{"class":302},"\u002F\u002F或者不写\n",[25,5628,5629],{"class":27,"line":1734},[25,5630,1676],{"class":244},[25,5632,5633,5635,5637],{"class":27,"line":1739},[25,5634,248],{"class":240},[25,5636,2083],{"class":31},[25,5638,2086],{"class":244},[25,5640,5641],{"class":27,"line":1753},[25,5642,1657],{"class":244},[25,5644,5645,5647,5649,5651,5653],{"class":27,"line":1758},[25,5646,2095],{"class":240},[25,5648,1510],{"class":244},[25,5650,290],{"class":240},[25,5652,689],{"class":35},[25,5654,1403],{"class":244},[25,5656,5657,5659,5661,5663,5665],{"class":27,"line":1764},[25,5658,2095],{"class":240},[25,5660,2943],{"class":244},[25,5662,290],{"class":240},[25,5664,943],{"class":35},[25,5666,1403],{"class":244},[25,5668,5669,5672],{"class":27,"line":1785},[25,5670,5671],{"class":31},"    swap",[25,5673,5447],{"class":244},[25,5675,5676],{"class":27,"line":1790},[25,5677,1676],{"class":244},[182,5679,5681],{"id":5680},"_24函数的常见形式","2.4函数的常见形式",[194,5683,5684],{},[106,5685,5686],{},"无参无返",[15,5688,5690],{"className":231,"code":5689,"language":233,"meta":20,"style":20},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[22,5691,5692,5701,5705,5718,5722,5730,5734,5739,5747],{"__ignoreMap":20},[25,5693,5694,5696,5699],{"class":27,"line":28},[25,5695,5474],{"class":240},[25,5697,5698],{"class":31}," test01",[25,5700,2086],{"class":244},[25,5702,5703],{"class":27,"line":39},[25,5704,1657],{"class":244},[25,5706,5707,5709,5711,5714,5716],{"class":27,"line":51},[25,5708,1662],{"class":244},[25,5710,1286],{"class":240},[25,5712,5713],{"class":45},"\"你好\"",[25,5715,1286],{"class":240},[25,5717,1308],{"class":244},[25,5719,5720],{"class":27,"line":59},[25,5721,1676],{"class":244},[25,5723,5724,5726,5728],{"class":27,"line":67},[25,5725,248],{"class":240},[25,5727,2083],{"class":31},[25,5729,2086],{"class":244},[25,5731,5732],{"class":27,"line":75},[25,5733,1657],{"class":244},[25,5735,5736],{"class":27,"line":83},[25,5737,5738],{"class":302},"    \u002F\u002F函数调用\n",[25,5740,5741,5744],{"class":27,"line":91},[25,5742,5743],{"class":31},"    test01",[25,5745,5746],{"class":244},"();\n",[25,5748,5749],{"class":27,"line":1429},[25,5750,1676],{"class":244},[194,5752,5753],{"start":39},[106,5754,5755],{},"有参无返",[15,5757,5759],{"className":231,"code":5758,"language":233,"meta":20,"style":20},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[22,5760,5761,5776,5780,5792,5796,5804,5808,5819],{"__ignoreMap":20},[25,5762,5763,5765,5768,5770,5772,5774],{"class":27,"line":28},[25,5764,5474],{"class":240},[25,5766,5767],{"class":31}," test02",[25,5769,245],{"class":244},[25,5771,248],{"class":240},[25,5773,1510],{"class":5326},[25,5775,251],{"class":244},[25,5777,5778],{"class":27,"line":39},[25,5779,1657],{"class":244},[25,5781,5782,5784,5786,5788,5790],{"class":27,"line":51},[25,5783,1662],{"class":244},[25,5785,1286],{"class":240},[25,5787,5713],{"class":45},[25,5789,1286],{"class":240},[25,5791,1308],{"class":244},[25,5793,5794],{"class":27,"line":59},[25,5795,1676],{"class":244},[25,5797,5798,5800,5802],{"class":27,"line":67},[25,5799,248],{"class":240},[25,5801,2083],{"class":31},[25,5803,2086],{"class":244},[25,5805,5806],{"class":27,"line":75},[25,5807,1657],{"class":244},[25,5809,5810,5813,5815,5817],{"class":27,"line":83},[25,5811,5812],{"class":31},"    test02",[25,5814,245],{"class":244},[25,5816,554],{"class":35},[25,5818,2829],{"class":244},[25,5820,5821],{"class":27,"line":91},[25,5822,1676],{"class":244},[194,5824,5825],{"start":51},[106,5826,5827],{},"无参有返",[15,5829,5831],{"className":231,"code":5830,"language":233,"meta":20,"style":20},"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",[22,5832,5833,5842,5846,5858,5867,5871,5879,5883,5896,5915],{"__ignoreMap":20},[25,5834,5835,5837,5840],{"class":27,"line":28},[25,5836,248],{"class":240},[25,5838,5839],{"class":31}," test03",[25,5841,2086],{"class":244},[25,5843,5844],{"class":27,"line":39},[25,5845,1657],{"class":244},[25,5847,5848,5850,5852,5854,5856],{"class":27,"line":51},[25,5849,1662],{"class":244},[25,5851,1286],{"class":240},[25,5853,5713],{"class":45},[25,5855,1286],{"class":240},[25,5857,1308],{"class":244},[25,5859,5860,5862,5865],{"class":27,"line":59},[25,5861,4200],{"class":240},[25,5863,5864],{"class":35}," 100",[25,5866,1403],{"class":244},[25,5868,5869],{"class":27,"line":67},[25,5870,1676],{"class":244},[25,5872,5873,5875,5877],{"class":27,"line":75},[25,5874,248],{"class":240},[25,5876,2083],{"class":31},[25,5878,2086],{"class":244},[25,5880,5881],{"class":27,"line":83},[25,5882,1657],{"class":244},[25,5884,5885,5887,5889,5891,5894],{"class":27,"line":91},[25,5886,2095],{"class":240},[25,5888,5327],{"class":244},[25,5890,290],{"class":240},[25,5892,5893],{"class":31},"test03",[25,5895,5746],{"class":244},[25,5897,5898,5900,5902,5904,5906,5908,5910,5912],{"class":27,"line":1429},[25,5899,1662],{"class":244},[25,5901,1286],{"class":240},[25,5903,5517],{"class":45},[25,5905,1286],{"class":240},[25,5907,5352],{"class":244},[25,5909,1286],{"class":240},[25,5911,1351],{"class":244},[25,5913,5914],{"class":302}," \u002F\u002F100\n",[25,5916,5917],{"class":27,"line":1441},[25,5918,1676],{"class":244},[99,5920,5921],{},"4.有参有返",[15,5923,5925],{"className":231,"code":5924,"language":233,"meta":20,"style":20},"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",[22,5926,5927,5942,5946,5959,5965,5969,5978,5982,5994,6008,6023],{"__ignoreMap":20},[25,5928,5929,5931,5934,5936,5938,5940],{"class":27,"line":28},[25,5930,248],{"class":240},[25,5932,5933],{"class":31}," test04",[25,5935,245],{"class":244},[25,5937,248],{"class":240},[25,5939,1510],{"class":5326},[25,5941,251],{"class":244},[25,5943,5944],{"class":27,"line":39},[25,5945,1657],{"class":244},[25,5947,5948,5950,5952,5955,5957],{"class":27,"line":51},[25,5949,1662],{"class":244},[25,5951,1286],{"class":240},[25,5953,5954],{"class":45},"\"hello\"",[25,5956,1286],{"class":240},[25,5958,1308],{"class":244},[25,5960,5961,5963],{"class":27,"line":59},[25,5962,4200],{"class":240},[25,5964,1544],{"class":244},[25,5966,5967],{"class":27,"line":67},[25,5968,1676],{"class":244},[25,5970,5971,5973,5976],{"class":27,"line":75},[25,5972,248],{"class":240},[25,5974,5975],{"class":31}," mian",[25,5977,2086],{"class":244},[25,5979,5980],{"class":27,"line":83},[25,5981,1657],{"class":244},[25,5983,5984,5986,5988,5990,5992],{"class":27,"line":91},[25,5985,2095],{"class":240},[25,5987,2943],{"class":244},[25,5989,290],{"class":240},[25,5991,460],{"class":35},[25,5993,1403],{"class":244},[25,5995,5996,5998,6000,6002,6005],{"class":27,"line":1429},[25,5997,2095],{"class":240},[25,5999,2959],{"class":244},[25,6001,290],{"class":240},[25,6003,6004],{"class":31},"test04",[25,6006,6007],{"class":244},"(b);\n",[25,6009,6010,6012,6014,6016,6018,6020],{"class":27,"line":1441},[25,6011,1662],{"class":244},[25,6013,1286],{"class":240},[25,6015,531],{"class":244},[25,6017,1286],{"class":240},[25,6019,1351],{"class":244},[25,6021,6022],{"class":302}," \u002F\u002F1\n",[25,6024,6025],{"class":27,"line":1723},[25,6026,1676],{"class":244},[182,6028,6030],{"id":6029},"_25函数的声明","2.5函数的声明",[99,6032,6033],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[99,6035,6036,6037],{},"函数的",[392,6038,6039],{},"声明可以多次，但是函数的定义只能有一次",[15,6041,6043],{"className":231,"code":6042,"language":233,"meta":20,"style":20},"\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",[22,6044,6045,6050,6055,6080,6089,6093,6105,6117,6133,6137,6157,6161,6180],{"__ignoreMap":20},[25,6046,6047],{"class":27,"line":28},[25,6048,6049],{"class":302},"\u002F\u002F函数声明\n",[25,6051,6052],{"class":27,"line":39},[25,6053,6054],{"class":302},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[25,6056,6057,6059,6062,6064,6066,6068,6070,6072,6074,6077],{"class":27,"line":51},[25,6058,248],{"class":240},[25,6060,6061],{"class":31}," max",[25,6063,245],{"class":244},[25,6065,248],{"class":240},[25,6067,1510],{"class":5326},[25,6069,621],{"class":244},[25,6071,248],{"class":240},[25,6073,2943],{"class":5326},[25,6075,6076],{"class":244},");",[25,6078,6079],{"class":302},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[25,6081,6082,6084,6086],{"class":27,"line":59},[25,6083,248],{"class":240},[25,6085,2083],{"class":31},[25,6087,6088],{"class":244},"() \n",[25,6090,6091],{"class":27,"line":67},[25,6092,1657],{"class":244},[25,6094,6095,6097,6099,6101,6103],{"class":27,"line":75},[25,6096,2095],{"class":240},[25,6098,1510],{"class":244},[25,6100,290],{"class":240},[25,6102,689],{"class":35},[25,6104,1403],{"class":244},[25,6106,6107,6109,6111,6113,6115],{"class":27,"line":83},[25,6108,2095],{"class":240},[25,6110,2943],{"class":244},[25,6112,290],{"class":240},[25,6114,943],{"class":35},[25,6116,1403],{"class":244},[25,6118,6119,6121,6123,6126,6129,6131],{"class":27,"line":91},[25,6120,1662],{"class":244},[25,6122,1286],{"class":240},[25,6124,6125],{"class":31},"max",[25,6127,6128],{"class":244},"(a,b)",[25,6130,1286],{"class":240},[25,6132,1308],{"class":244},[25,6134,6135],{"class":27,"line":1429},[25,6136,1676],{"class":244},[25,6138,6139,6141,6143,6145,6147,6149,6151,6153,6155],{"class":27,"line":1441},[25,6140,248],{"class":240},[25,6142,6061],{"class":31},[25,6144,245],{"class":244},[25,6146,248],{"class":240},[25,6148,1510],{"class":5326},[25,6150,621],{"class":244},[25,6152,248],{"class":240},[25,6154,2943],{"class":5326},[25,6156,251],{"class":244},[25,6158,6159],{"class":27,"line":1723},[25,6160,1657],{"class":244},[25,6162,6163,6165,6167,6169,6171,6173,6175,6177],{"class":27,"line":1728},[25,6164,4200],{"class":240},[25,6166,1510],{"class":244},[25,6168,1203],{"class":240},[25,6170,506],{"class":244},[25,6172,1229],{"class":240},[25,6174,481],{"class":244},[25,6176,1102],{"class":240},[25,6178,6179],{"class":244},"b;\n",[25,6181,6182],{"class":27,"line":1734},[25,6183,1676],{"class":244},[182,6185,6187],{"id":6186},"_26函数的分文件编写","2.6函数的分文件编写",[99,6189,6190],{},"4个步骤：",[103,6192,6193,6196,6199,6202],{},[106,6194,6195],{},"1.创建后缀名为.h的头文件",[106,6197,6198],{},"2.创建后缀名为.cpp的源文件",[106,6200,6201],{},"3.在头文件中写函数的定义",[106,6203,6204],{},"4.在源文件中写函数的定义\n示例：",[99,6206,6207],{},"头文件：swap.h",[15,6209,6211],{"className":231,"code":6210,"language":233,"meta":20,"style":20},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[22,6212,6213,6219,6229,6233],{"__ignoreMap":20},[25,6214,6215,6217],{"class":27,"line":28},[25,6216,2060],{"class":240},[25,6218,2063],{"class":45},[25,6220,6221,6223,6225,6227],{"class":27,"line":39},[25,6222,2068],{"class":240},[25,6224,2071],{"class":240},[25,6226,2074],{"class":31},[25,6228,1403],{"class":244},[25,6230,6231],{"class":27,"line":51},[25,6232,6049],{"class":302},[25,6234,6235,6237,6239,6241,6243,6245,6247,6249,6251],{"class":27,"line":59},[25,6236,5474],{"class":240},[25,6238,5477],{"class":31},[25,6240,245],{"class":244},[25,6242,248],{"class":240},[25,6244,1510],{"class":5326},[25,6246,621],{"class":244},[25,6248,248],{"class":240},[25,6250,2943],{"class":5326},[25,6252,2829],{"class":244},[99,6254,6255],{},"源文件：swap.cpp",[15,6257,6259],{"className":231,"code":6258,"language":233,"meta":20,"style":20},"#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",[22,6260,6261,6268,6273,6293,6297,6308,6317,6326,6343,6360],{"__ignoreMap":20},[25,6262,6263,6265],{"class":27,"line":28},[25,6264,2060],{"class":240},[25,6266,6267],{"class":45}," \"swap.h\"\n",[25,6269,6270],{"class":27,"line":39},[25,6271,6272],{"class":302},"\u002F\u002F函数的定义\n",[25,6274,6275,6277,6279,6281,6283,6285,6287,6289,6291],{"class":27,"line":51},[25,6276,5474],{"class":240},[25,6278,5477],{"class":31},[25,6280,245],{"class":244},[25,6282,248],{"class":240},[25,6284,1510],{"class":5326},[25,6286,621],{"class":244},[25,6288,248],{"class":240},[25,6290,2943],{"class":5326},[25,6292,251],{"class":244},[25,6294,6295],{"class":27,"line":59},[25,6296,1657],{"class":244},[25,6298,6299,6301,6303,6305],{"class":27,"line":67},[25,6300,2095],{"class":240},[25,6302,4365],{"class":244},[25,6304,290],{"class":240},[25,6306,6307],{"class":244},"a;\n",[25,6309,6310,6313,6315],{"class":27,"line":75},[25,6311,6312],{"class":244},"    a",[25,6314,290],{"class":240},[25,6316,6179],{"class":244},[25,6318,6319,6322,6324],{"class":27,"line":83},[25,6320,6321],{"class":244},"    b",[25,6323,290],{"class":240},[25,6325,4390],{"class":244},[25,6327,6328,6330,6332,6335,6337,6339,6341],{"class":27,"line":91},[25,6329,1662],{"class":244},[25,6331,1286],{"class":240},[25,6333,6334],{"class":45},"\"a=\"",[25,6336,1286],{"class":240},[25,6338,481],{"class":244},[25,6340,1286],{"class":240},[25,6342,1308],{"class":244},[25,6344,6345,6347,6349,6352,6354,6356,6358],{"class":27,"line":1429},[25,6346,1662],{"class":244},[25,6348,1286],{"class":240},[25,6350,6351],{"class":45},"\"b=\"",[25,6353,1286],{"class":240},[25,6355,506],{"class":244},[25,6357,1286],{"class":240},[25,6359,1308],{"class":244},[25,6361,6362],{"class":27,"line":1441},[25,6363,1676],{"class":244},[159,6365,6366],{},"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":20,"searchDepth":39,"depth":39,"links":6368},[6369,6370,6371,6372,6373,6374],{"id":5282,"depth":39,"text":5283},{"id":5371,"depth":39,"text":5372},{"id":5454,"depth":39,"text":5455},{"id":5680,"depth":39,"text":5681},{"id":6029,"depth":39,"text":6030},{"id":6186,"depth":39,"text":6187},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5274,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6381,"title":6382,"body":6383,"description":6390,"extension":165,"meta":7795,"navigation":167,"path":7796,"seo":7797,"stem":7798,"__hash__":7799},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6384,"toc":7785},[6385,6388,6391,6395,6557,6561,6564,6567,6570,6573,6713,6717,6720,6723,6726,6791,6795,6800,6867,6870,6874,6877,6888,6893,6913,6916,6921,6940,6943,6947,6966,6969,6973,7208,7212,7215,7218,7221,7383,7386,7390,7393,7399,7782],[10,6386,6382],{"id":6387},"_3指针",[99,6389,6390],{},"通过指针保存一个地址，指针就是个地址",[182,6392,6394],{"id":6393},"_31定义指针","3.1定义指针",[15,6396,6398],{"className":231,"code":6397,"language":233,"meta":20,"style":20},"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",[22,6399,6400,6408,6412,6417,6429,6434,6442,6452,6470,6490,6494,6499,6504,6509,6523,6539,6553],{"__ignoreMap":20},[25,6401,6402,6404,6406],{"class":27,"line":28},[25,6403,248],{"class":240},[25,6405,2083],{"class":31},[25,6407,2086],{"class":244},[25,6409,6410],{"class":27,"line":39},[25,6411,1657],{"class":244},[25,6413,6414],{"class":27,"line":51},[25,6415,6416],{"class":302},"    \u002F\u002F1.定义指针\n",[25,6418,6419,6421,6423,6425,6427],{"class":27,"line":59},[25,6420,2095],{"class":240},[25,6422,1510],{"class":244},[25,6424,290],{"class":240},[25,6426,689],{"class":35},[25,6428,1403],{"class":244},[25,6430,6431],{"class":27,"line":67},[25,6432,6433],{"class":302},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[25,6435,6436,6439],{"class":27,"line":75},[25,6437,6438],{"class":240},"    int*",[25,6440,6441],{"class":244},"p;\n",[25,6443,6444,6447,6450],{"class":27,"line":83},[25,6445,6446],{"class":244},"    p",[25,6448,6449],{"class":240},"=&",[25,6451,6307],{"class":244},[25,6453,6454,6456,6458,6461,6464,6466,6468],{"class":27,"line":91},[25,6455,1662],{"class":244},[25,6457,1286],{"class":240},[25,6459,6460],{"class":45},"\"a的地址为：\"",[25,6462,6463],{"class":240},"\u003C\u003C&",[25,6465,481],{"class":244},[25,6467,1286],{"class":240},[25,6469,1308],{"class":244},[25,6471,6472,6474,6476,6479,6481,6483,6485,6487],{"class":27,"line":1429},[25,6473,1662],{"class":244},[25,6475,1286],{"class":240},[25,6477,6478],{"class":45},"\"指针p为：\"",[25,6480,1286],{"class":240},[25,6482,99],{"class":244},[25,6484,1286],{"class":240},[25,6486,1351],{"class":244},[25,6488,6489],{"class":302},"\u002F\u002F指针p表示的就是a的地址\n",[25,6491,6492],{"class":27,"line":1441},[25,6493,2510],{"emptyLinePlaceholder":167},[25,6495,6496],{"class":27,"line":1723},[25,6497,6498],{"class":302},"    \u002F\u002F2.使用指针\n",[25,6500,6501],{"class":27,"line":1728},[25,6502,6503],{"class":302},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[25,6505,6506],{"class":27,"line":1734},[25,6507,6508],{"class":302},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[25,6510,6511,6514,6516,6518,6521],{"class":27,"line":1739},[25,6512,6513],{"class":240},"    *",[25,6515,99],{"class":244},[25,6517,290],{"class":240},[25,6519,6520],{"class":35},"1000",[25,6522,1403],{"class":244},[25,6524,6525,6527,6530,6532,6534,6536],{"class":27,"line":1753},[25,6526,1662],{"class":244},[25,6528,6529],{"class":240},"\u003C\u003C*",[25,6531,99],{"class":244},[25,6533,1286],{"class":240},[25,6535,1351],{"class":244},[25,6537,6538],{"class":302},"\u002F\u002F1000\n",[25,6540,6541,6543,6545,6547,6549,6551],{"class":27,"line":1758},[25,6542,1662],{"class":244},[25,6544,1286],{"class":240},[25,6546,481],{"class":244},[25,6548,1286],{"class":240},[25,6550,1351],{"class":244},[25,6552,6538],{"class":302},[25,6554,6555],{"class":27,"line":1764},[25,6556,1676],{"class":244},[182,6558,6560],{"id":6559},"_32指针所占的内存空间","3.2指针所占的内存空间",[99,6562,6563],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[99,6565,6566],{},"在32位操作系统下：占用4个字节空间",[99,6568,6569],{},"在64位操作系统下：占用8个字节空间",[99,6571,6572],{},"上方是不管啥数据类型的",[15,6574,6576],{"className":231,"code":6575,"language":233,"meta":20,"style":20},"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",[22,6577,6578,6586,6590,6595,6607,6612,6617,6622,6635,6657,6683,6709],{"__ignoreMap":20},[25,6579,6580,6582,6584],{"class":27,"line":28},[25,6581,248],{"class":240},[25,6583,2083],{"class":31},[25,6585,2086],{"class":244},[25,6587,6588],{"class":27,"line":39},[25,6589,1657],{"class":244},[25,6591,6592],{"class":27,"line":51},[25,6593,6594],{"class":302},"    \u002F\u002F指针所占内存空间\n",[25,6596,6597,6599,6601,6603,6605],{"class":27,"line":59},[25,6598,2095],{"class":240},[25,6600,1510],{"class":244},[25,6602,290],{"class":240},[25,6604,689],{"class":35},[25,6606,1403],{"class":244},[25,6608,6609],{"class":27,"line":67},[25,6610,6611],{"class":302},"    \u002F\u002Fint *p;\n",[25,6613,6614],{"class":27,"line":75},[25,6615,6616],{"class":302},"    \u002F\u002Fp=&a;\n",[25,6618,6619],{"class":27,"line":83},[25,6620,6621],{"class":302},"    \u002F\u002F上述可以写为以下：\n",[25,6623,6624,6626,6629,6631,6633],{"class":27,"line":91},[25,6625,2095],{"class":240},[25,6627,6628],{"class":240}," *",[25,6630,99],{"class":244},[25,6632,6449],{"class":240},[25,6634,6307],{"class":244},[25,6636,6637,6640,6642,6645,6647,6650,6652,6654],{"class":27,"line":1429},[25,6638,6639],{"class":244},"    cout ",[25,6641,1286],{"class":240},[25,6643,6644],{"class":45},"\"sizeof(int *)\"",[25,6646,1484],{"class":240},[25,6648,6649],{"class":244},"(p)",[25,6651,1286],{"class":240},[25,6653,1351],{"class":244},[25,6655,6656],{"class":302},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[25,6658,6659,6661,6663,6665,6667,6669,6671,6673,6675,6677,6680],{"class":27,"line":1441},[25,6660,6639],{"class":244},[25,6662,1286],{"class":240},[25,6664,6644],{"class":45},[25,6666,1484],{"class":240},[25,6668,245],{"class":244},[25,6670,248],{"class":240},[25,6672,6628],{"class":240},[25,6674,672],{"class":244},[25,6676,1286],{"class":240},[25,6678,6679],{"class":244},"endl",[25,6681,6682],{"class":302},"  \u002F\u002F4字节(32位的话)\n",[25,6684,6685,6687,6689,6692,6694,6696,6698,6700,6702,6704,6706],{"class":27,"line":1723},[25,6686,6639],{"class":244},[25,6688,1286],{"class":240},[25,6690,6691],{"class":45},"\"sizeof(char *)\"",[25,6693,1484],{"class":240},[25,6695,245],{"class":244},[25,6697,340],{"class":240},[25,6699,6628],{"class":240},[25,6701,672],{"class":244},[25,6703,1286],{"class":240},[25,6705,1351],{"class":244},[25,6707,6708],{"class":302}," \u002F\u002F4字节(32位的话)\n",[25,6710,6711],{"class":27,"line":1728},[25,6712,1676],{"class":244},[182,6714,6716],{"id":6715},"_33空指针","3.3空指针",[99,6718,6719],{},"空指针：指针变量指向内存中编号为0的空间",[99,6721,6722],{},"用途：初始化指针变量",[99,6724,6725],{},"注意：空指针指向的内存是不可以访问的",[15,6727,6729],{"className":231,"code":6728,"language":233,"meta":20,"style":20},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[22,6730,6731,6739,6743,6748,6762,6767,6782,6787],{"__ignoreMap":20},[25,6732,6733,6735,6737],{"class":27,"line":28},[25,6734,248],{"class":240},[25,6736,2083],{"class":31},[25,6738,2086],{"class":244},[25,6740,6741],{"class":27,"line":39},[25,6742,1657],{"class":244},[25,6744,6745],{"class":27,"line":51},[25,6746,6747],{"class":302},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[25,6749,6750,6752,6754,6756,6758,6760],{"class":27,"line":59},[25,6751,2095],{"class":240},[25,6753,6628],{"class":240},[25,6755,99],{"class":244},[25,6757,290],{"class":240},[25,6759,2502],{"class":35},[25,6761,1403],{"class":244},[25,6763,6764],{"class":27,"line":67},[25,6765,6766],{"class":302},"    \u002F\u002F2.空指针不能进行访问\n",[25,6768,6769,6771,6773,6775,6777,6779],{"class":27,"line":75},[25,6770,6513],{"class":240},[25,6772,99],{"class":244},[25,6774,290],{"class":240},[25,6776,554],{"class":35},[25,6778,299],{"class":244},[25,6780,6781],{"class":302},"\u002F\u002F直接报错，压根不能访问\n",[25,6783,6784],{"class":27,"line":83},[25,6785,6786],{"class":302},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[25,6788,6789],{"class":27,"line":91},[25,6790,1676],{"class":244},[182,6792,6794],{"id":6793},"_34野指针","3.4野指针",[99,6796,6797],{},[392,6798,6799],{},"指针变量指向非法的内存空间",[15,6801,6803],{"className":231,"code":6802,"language":233,"meta":20,"style":20},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[22,6804,6805,6813,6817,6846,6851,6863],{"__ignoreMap":20},[25,6806,6807,6809,6811],{"class":27,"line":28},[25,6808,248],{"class":240},[25,6810,2083],{"class":31},[25,6812,2086],{"class":244},[25,6814,6815],{"class":27,"line":39},[25,6816,1657],{"class":244},[25,6818,6819,6821,6823,6825,6827,6829,6831,6833,6835,6838,6841,6843],{"class":27,"line":51},[25,6820,2095],{"class":240},[25,6822,6628],{"class":240},[25,6824,99],{"class":244},[25,6826,290],{"class":240},[25,6828,245],{"class":244},[25,6830,248],{"class":240},[25,6832,6628],{"class":240},[25,6834,672],{"class":244},[25,6836,6837],{"class":240},"0x",[25,6839,6840],{"class":35},"1100",[25,6842,299],{"class":244},[25,6844,6845],{"class":302}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[25,6847,6848],{"class":27,"line":59},[25,6849,6850],{"class":302},"    \u002F\u002F访问野指针报错\n",[25,6852,6853,6855,6857,6859,6861],{"class":27,"line":67},[25,6854,1662],{"class":244},[25,6856,6529],{"class":240},[25,6858,99],{"class":244},[25,6860,1286],{"class":240},[25,6862,1308],{"class":244},[25,6864,6865],{"class":27,"line":75},[25,6866,1676],{"class":244},[99,6868,6869],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[182,6871,6873],{"id":6872},"_35const修饰指针","3.5const修饰指针",[99,6875,6876],{},"三种情况：",[103,6878,6879,6882,6885],{},[106,6880,6881],{},"const修饰指针 常量指针",[106,6883,6884],{},"const修饰常量 指针常量",[106,6886,6887],{},"const即修饰指针，又修饰常量",[194,6889,6890],{},[106,6891,6892],{},"常量指针",[15,6894,6896],{"className":231,"code":6895,"language":233,"meta":20,"style":20},"const int *p=&a;\n",[22,6897,6898],{"__ignoreMap":20},[25,6899,6900,6903,6905,6907,6909,6911],{"class":27,"line":28},[25,6901,6902],{"class":240},"const",[25,6904,2492],{"class":240},[25,6906,6628],{"class":240},[25,6908,99],{"class":244},[25,6910,6449],{"class":240},[25,6912,6307],{"class":244},[99,6914,6915],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[194,6917,6918],{"start":39},[106,6919,6920],{},"指针常量",[15,6922,6924],{"className":231,"code":6923,"language":233,"meta":20,"style":20},"int *const p=&a;\n",[22,6925,6926],{"__ignoreMap":20},[25,6927,6928,6930,6933,6936,6938],{"class":27,"line":28},[25,6929,248],{"class":240},[25,6931,6932],{"class":240}," *const",[25,6934,6935],{"class":244}," p",[25,6937,6449],{"class":240},[25,6939,6307],{"class":244},[99,6941,6942],{},"指针的指向不可以改，指针指向的值可以改",[194,6944,6945],{"start":51},[106,6946,6887],{},[15,6948,6950],{"className":231,"code":6949,"language":233,"meta":20,"style":20},"const int *const p=&a;\n",[22,6951,6952],{"__ignoreMap":20},[25,6953,6954,6956,6958,6960,6962,6964],{"class":27,"line":28},[25,6955,6902],{"class":240},[25,6957,2492],{"class":240},[25,6959,6932],{"class":240},[25,6961,6935],{"class":244},[25,6963,6449],{"class":240},[25,6965,6307],{"class":244},[99,6967,6968],{},"指针的指向和指针指向的值都不可以改变",[182,6970,6972],{"id":6971},"_36指针和数组","3.6指针和数组",[15,6974,6976],{"className":231,"code":6975,"language":233,"meta":20,"style":20},"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",[22,6977,6978,6986,6990,6995,7049,7070,7086,7102,7113,7130,7135,7149,7175,7179,7191,7200,7204],{"__ignoreMap":20},[25,6979,6980,6982,6984],{"class":27,"line":28},[25,6981,248],{"class":240},[25,6983,2083],{"class":31},[25,6985,2086],{"class":244},[25,6987,6988],{"class":27,"line":39},[25,6989,1657],{"class":244},[25,6991,6992],{"class":27,"line":51},[25,6993,6994],{"class":302},"    \u002F\u002F利用指针访问数组中的元素\n",[25,6996,6997,6999,7001,7003,7005,7007,7009,7011,7013,7015,7017,7019,7021,7023,7025,7027,7029,7031,7033,7035,7037,7039,7041,7043,7045,7047],{"class":27,"line":59},[25,6998,2095],{"class":240},[25,7000,4072],{"class":244},[25,7002,689],{"class":35},[25,7004,1183],{"class":244},[25,7006,290],{"class":240},[25,7008,1139],{"class":244},[25,7010,460],{"class":35},[25,7012,621],{"class":244},[25,7014,321],{"class":35},[25,7016,621],{"class":244},[25,7018,315],{"class":35},[25,7020,621],{"class":244},[25,7022,536],{"class":35},[25,7024,621],{"class":244},[25,7026,562],{"class":35},[25,7028,621],{"class":244},[25,7030,587],{"class":35},[25,7032,621],{"class":244},[25,7034,612],{"class":35},[25,7036,621],{"class":244},[25,7038,638],{"class":35},[25,7040,621],{"class":244},[25,7042,663],{"class":35},[25,7044,621],{"class":244},[25,7046,689],{"class":35},[25,7048,4105],{"class":244},[25,7050,7051,7053,7055,7058,7060,7062,7064,7066,7068],{"class":27,"line":67},[25,7052,1662],{"class":244},[25,7054,1286],{"class":240},[25,7056,7057],{"class":45},"\"数组的第一个元素为：\"",[25,7059,1286],{"class":240},[25,7061,4016],{"class":244},[25,7063,434],{"class":35},[25,7065,1183],{"class":244},[25,7067,1286],{"class":240},[25,7069,1308],{"class":244},[25,7071,7072,7074,7076,7078,7080,7083],{"class":27,"line":75},[25,7073,2095],{"class":240},[25,7075,6628],{"class":240},[25,7077,99],{"class":244},[25,7079,290],{"class":240},[25,7081,7082],{"class":244},"arr;",[25,7084,7085],{"class":302},"\u002F\u002F注意数才要加取地址符号&\n",[25,7087,7088,7090,7092,7094,7096,7098,7100],{"class":27,"line":83},[25,7089,1662],{"class":244},[25,7091,1286],{"class":240},[25,7093,7057],{"class":45},[25,7095,6529],{"class":240},[25,7097,99],{"class":244},[25,7099,1286],{"class":240},[25,7101,1308],{"class":244},[25,7103,7104,7106,7108,7110],{"class":27,"line":91},[25,7105,6446],{"class":244},[25,7107,2402],{"class":240},[25,7109,299],{"class":244},[25,7111,7112],{"class":302}," \u002F\u002F让指针向后偏移4个字节\n",[25,7114,7115,7117,7119,7122,7124,7126,7128],{"class":27,"line":1429},[25,7116,1662],{"class":244},[25,7118,1286],{"class":240},[25,7120,7121],{"class":45},"\"数组的第二个元素为：\"",[25,7123,6529],{"class":240},[25,7125,99],{"class":244},[25,7127,1286],{"class":240},[25,7129,1308],{"class":244},[25,7131,7132],{"class":27,"line":1441},[25,7133,7134],{"class":302},"    \u002F\u002F利用指针遍历数组\n",[25,7136,7137,7139,7141,7144,7146],{"class":27,"line":1723},[25,7138,2095],{"class":240},[25,7140,6628],{"class":240},[25,7142,7143],{"class":244},"p2",[25,7145,290],{"class":240},[25,7147,7148],{"class":244},"arr;\n",[25,7150,7151,7153,7155,7157,7159,7161,7163,7165,7167,7169,7171,7173],{"class":27,"line":1728},[25,7152,3311],{"class":240},[25,7154,1769],{"class":244},[25,7156,248],{"class":240},[25,7158,3142],{"class":244},[25,7160,290],{"class":240},[25,7162,434],{"class":35},[25,7164,3149],{"class":244},[25,7166,1153],{"class":240},[25,7168,689],{"class":35},[25,7170,3149],{"class":244},[25,7172,2402],{"class":240},[25,7174,251],{"class":244},[25,7176,7177],{"class":27,"line":1734},[25,7178,2140],{"class":244},[25,7180,7181,7183,7185,7187,7189],{"class":27,"line":1739},[25,7182,3561],{"class":244},[25,7184,6529],{"class":240},[25,7186,7143],{"class":244},[25,7188,1286],{"class":240},[25,7190,1308],{"class":244},[25,7192,7193,7196,7198],{"class":27,"line":1753},[25,7194,7195],{"class":244},"        p2",[25,7197,2402],{"class":240},[25,7199,1403],{"class":244},[25,7201,7202],{"class":27,"line":1758},[25,7203,2297],{"class":244},[25,7205,7206],{"class":27,"line":1764},[25,7207,1676],{"class":244},[182,7209,7211],{"id":7210},"_37指针和函数","3.7指针和函数",[99,7213,7214],{},"利用指针做函数参数，可以修改实参的值",[99,7216,7217],{},"值传递：只改变形参，不改变实参",[99,7219,7220],{},"地址传递：",[15,7222,7224],{"className":231,"code":7223,"language":233,"meta":20,"style":20},"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",[22,7225,7226,7251,7255,7267,7278,7288,7292,7300,7304,7316,7328,7333,7349,7364,7379],{"__ignoreMap":20},[25,7227,7228,7230,7232,7234,7236,7238,7241,7243,7245,7247,7249],{"class":27,"line":28},[25,7229,5474],{"class":240},[25,7231,5477],{"class":31},[25,7233,245],{"class":244},[25,7235,248],{"class":240},[25,7237,6628],{"class":240},[25,7239,7240],{"class":5326},"p1",[25,7242,621],{"class":244},[25,7244,248],{"class":240},[25,7246,6628],{"class":240},[25,7248,7143],{"class":5326},[25,7250,251],{"class":244},[25,7252,7253],{"class":27,"line":39},[25,7254,1657],{"class":244},[25,7256,7257,7259,7261,7264],{"class":27,"line":51},[25,7258,2095],{"class":240},[25,7260,4365],{"class":244},[25,7262,7263],{"class":240},"=*",[25,7265,7266],{"class":244},"p1;\n",[25,7268,7269,7271,7273,7275],{"class":27,"line":59},[25,7270,6513],{"class":240},[25,7272,7240],{"class":244},[25,7274,7263],{"class":240},[25,7276,7277],{"class":244},"p2;\n",[25,7279,7280,7282,7284,7286],{"class":27,"line":67},[25,7281,6513],{"class":240},[25,7283,7143],{"class":244},[25,7285,290],{"class":240},[25,7287,4390],{"class":244},[25,7289,7290],{"class":27,"line":75},[25,7291,1676],{"class":244},[25,7293,7294,7296,7298],{"class":27,"line":83},[25,7295,248],{"class":240},[25,7297,2083],{"class":31},[25,7299,2086],{"class":244},[25,7301,7302],{"class":27,"line":91},[25,7303,1657],{"class":244},[25,7305,7306,7308,7310,7312,7314],{"class":27,"line":1429},[25,7307,2095],{"class":240},[25,7309,1510],{"class":244},[25,7311,290],{"class":240},[25,7313,689],{"class":35},[25,7315,1403],{"class":244},[25,7317,7318,7320,7322,7324,7326],{"class":27,"line":1441},[25,7319,2095],{"class":240},[25,7321,2943],{"class":244},[25,7323,290],{"class":240},[25,7325,943],{"class":35},[25,7327,1403],{"class":244},[25,7329,7330],{"class":27,"line":1723},[25,7331,7332],{"class":302},"    \u002F\u002F地址传递\n",[25,7334,7335,7337,7339,7341,7344,7346],{"class":27,"line":1728},[25,7336,5671],{"class":31},[25,7338,245],{"class":244},[25,7340,596],{"class":240},[25,7342,7343],{"class":244},"a,",[25,7345,596],{"class":240},[25,7347,7348],{"class":244},"b);\n",[25,7350,7351,7353,7355,7357,7359,7361],{"class":27,"line":1734},[25,7352,1662],{"class":244},[25,7354,1286],{"class":240},[25,7356,481],{"class":244},[25,7358,1286],{"class":240},[25,7360,1351],{"class":244},[25,7362,7363],{"class":302},"\u002F\u002F20\n",[25,7365,7366,7368,7370,7372,7374,7376],{"class":27,"line":1739},[25,7367,1662],{"class":244},[25,7369,1286],{"class":240},[25,7371,506],{"class":244},[25,7373,1286],{"class":240},[25,7375,1351],{"class":244},[25,7377,7378],{"class":302},"\u002F\u002F10\n",[25,7380,7381],{"class":27,"line":1753},[25,7382,1676],{"class":244},[99,7384,7385],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[182,7387,7389],{"id":7388},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[99,7391,7392],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[99,7394,7395,7396,7398],{},"例如数组：int arr",[25,7397,689],{},"={4,3,6,9,1,2,10,8,7,5}",[15,7400,7402],{"className":231,"code":7401,"language":233,"meta":20,"style":20},"#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",[22,7403,7404,7410,7420,7444,7448,7479,7483,7517,7521,7539,7543,7554,7569,7584,7588,7592,7596,7600,7604,7612,7616,7621,7675,7687,7699,7704,7712,7716,7721,7746,7750,7765,7774,7778],{"__ignoreMap":20},[25,7405,7406,7408],{"class":27,"line":28},[25,7407,2060],{"class":240},[25,7409,2063],{"class":45},[25,7411,7412,7414,7416,7418],{"class":27,"line":39},[25,7413,2068],{"class":240},[25,7415,2071],{"class":240},[25,7417,2074],{"class":31},[25,7419,1403],{"class":244},[25,7421,7422,7424,7427,7429,7431,7433,7435,7437,7439,7442],{"class":27,"line":51},[25,7423,5474],{"class":240},[25,7425,7426],{"class":31}," bubbleSort",[25,7428,245],{"class":244},[25,7430,248],{"class":240},[25,7432,6628],{"class":240},[25,7434,99],{"class":5326},[25,7436,621],{"class":244},[25,7438,248],{"class":240},[25,7440,7441],{"class":5326}," len",[25,7443,251],{"class":244},[25,7445,7446],{"class":27,"line":59},[25,7447,1657],{"class":244},[25,7449,7450,7452,7454,7456,7458,7460,7462,7464,7466,7469,7471,7473,7475,7477],{"class":27,"line":67},[25,7451,3311],{"class":240},[25,7453,245],{"class":244},[25,7455,248],{"class":240},[25,7457,3142],{"class":244},[25,7459,290],{"class":240},[25,7461,434],{"class":35},[25,7463,3149],{"class":244},[25,7465,1153],{"class":240},[25,7467,7468],{"class":244},"len",[25,7470,775],{"class":240},[25,7472,460],{"class":35},[25,7474,3149],{"class":244},[25,7476,2402],{"class":240},[25,7478,251],{"class":244},[25,7480,7481],{"class":27,"line":75},[25,7482,2140],{"class":244},[25,7484,7485,7487,7489,7491,7493,7495,7497,7499,7501,7503,7505,7507,7509,7511,7513,7515],{"class":27,"line":83},[25,7486,3513],{"class":240},[25,7488,245],{"class":244},[25,7490,248],{"class":240},[25,7492,3520],{"class":244},[25,7494,290],{"class":240},[25,7496,434],{"class":35},[25,7498,3527],{"class":244},[25,7500,1153],{"class":240},[25,7502,7468],{"class":244},[25,7504,775],{"class":240},[25,7506,684],{"class":244},[25,7508,775],{"class":240},[25,7510,460],{"class":35},[25,7512,3527],{"class":244},[25,7514,2402],{"class":240},[25,7516,251],{"class":244},[25,7518,7519],{"class":27,"line":91},[25,7520,2620],{"class":244},[25,7522,7523,7525,7528,7530,7533,7535,7537],{"class":27,"line":1429},[25,7524,4752],{"class":240},[25,7526,7527],{"class":244},"(p[j]",[25,7529,1203],{"class":240},[25,7531,7532],{"class":244},"p[j",[25,7534,724],{"class":240},[25,7536,460],{"class":35},[25,7538,4767],{"class":244},[25,7540,7541],{"class":27,"line":1441},[25,7542,4772],{"class":244},[25,7544,7545,7547,7549,7551],{"class":27,"line":1723},[25,7546,4777],{"class":240},[25,7548,4365],{"class":244},[25,7550,290],{"class":240},[25,7552,7553],{"class":244},"p[j];\n",[25,7555,7556,7559,7561,7563,7565,7567],{"class":27,"line":1728},[25,7557,7558],{"class":244},"                p[j]",[25,7560,290],{"class":240},[25,7562,7532],{"class":244},[25,7564,724],{"class":240},[25,7566,460],{"class":35},[25,7568,4800],{"class":244},[25,7570,7571,7574,7576,7578,7580,7582],{"class":27,"line":1734},[25,7572,7573],{"class":244},"                p[j",[25,7575,724],{"class":240},[25,7577,460],{"class":35},[25,7579,1183],{"class":244},[25,7581,290],{"class":240},[25,7583,4390],{"class":244},[25,7585,7586],{"class":27,"line":1739},[25,7587,4820],{"class":244},[25,7589,7590],{"class":27,"line":1753},[25,7591,2639],{"class":244},[25,7593,7594],{"class":27,"line":1758},[25,7595,2297],{"class":244},[25,7597,7598],{"class":27,"line":1764},[25,7599,1676],{"class":244},[25,7601,7602],{"class":27,"line":1785},[25,7603,2510],{"emptyLinePlaceholder":167},[25,7605,7606,7608,7610],{"class":27,"line":1790},[25,7607,248],{"class":240},[25,7609,2083],{"class":31},[25,7611,2086],{"class":244},[25,7613,7614],{"class":27,"line":1804},[25,7615,1657],{"class":244},[25,7617,7618],{"class":27,"line":1809},[25,7619,7620],{"class":302},"    \u002F\u002F 1.创建数组\n",[25,7622,7623,7625,7627,7629,7631,7633,7635,7637,7639,7641,7643,7645,7647,7649,7651,7653,7655,7657,7659,7661,7663,7665,7667,7669,7671,7673],{"class":27,"line":1838},[25,7624,2095],{"class":240},[25,7626,4072],{"class":244},[25,7628,689],{"class":35},[25,7630,1183],{"class":244},[25,7632,290],{"class":240},[25,7634,1139],{"class":244},[25,7636,536],{"class":35},[25,7638,621],{"class":244},[25,7640,315],{"class":35},[25,7642,621],{"class":244},[25,7644,587],{"class":35},[25,7646,621],{"class":244},[25,7648,663],{"class":35},[25,7650,621],{"class":244},[25,7652,460],{"class":35},[25,7654,621],{"class":244},[25,7656,321],{"class":35},[25,7658,621],{"class":244},[25,7660,689],{"class":35},[25,7662,621],{"class":244},[25,7664,638],{"class":35},[25,7666,621],{"class":244},[25,7668,612],{"class":35},[25,7670,621],{"class":244},[25,7672,562],{"class":35},[25,7674,4105],{"class":244},[25,7676,7677,7679,7681,7683,7685],{"class":27,"line":1843},[25,7678,2095],{"class":240},[25,7680,7441],{"class":244},[25,7682,290],{"class":240},[25,7684,689],{"class":35},[25,7686,1403],{"class":244},[25,7688,7689,7691,7693,7695,7697],{"class":27,"line":1860},[25,7690,2095],{"class":240},[25,7692,6628],{"class":240},[25,7694,99],{"class":244},[25,7696,290],{"class":240},[25,7698,7148],{"class":244},[25,7700,7701],{"class":27,"line":1865},[25,7702,7703],{"class":302},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[25,7705,7706,7709],{"class":27,"line":1870},[25,7707,7708],{"class":31},"    bubbleSort",[25,7710,7711],{"class":244},"(p,len);\n",[25,7713,7714],{"class":27,"line":1875},[25,7715,2510],{"emptyLinePlaceholder":167},[25,7717,7718],{"class":27,"line":1889},[25,7719,7720],{"class":302},"    \u002F\u002F 3.打印排序后的数组\n",[25,7722,7723,7725,7727,7729,7731,7733,7735,7737,7739,7742,7744],{"class":27,"line":1894},[25,7724,3311],{"class":240},[25,7726,1769],{"class":244},[25,7728,248],{"class":240},[25,7730,3142],{"class":244},[25,7732,290],{"class":240},[25,7734,434],{"class":35},[25,7736,3324],{"class":244},[25,7738,1153],{"class":240},[25,7740,7741],{"class":244},"len; i",[25,7743,2402],{"class":240},[25,7745,251],{"class":244},[25,7747,7748],{"class":27,"line":2687},[25,7749,2140],{"class":244},[25,7751,7752,7754,7756,7758,7760,7763],{"class":27,"line":2701},[25,7753,3561],{"class":244},[25,7755,6529],{"class":240},[25,7757,99],{"class":244},[25,7759,1286],{"class":240},[25,7761,7762],{"class":45},"\"\"",[25,7764,1403],{"class":244},[25,7766,7767,7770,7772],{"class":27,"line":2709},[25,7768,7769],{"class":244},"        p",[25,7771,2402],{"class":240},[25,7773,1403],{"class":244},[25,7775,7776],{"class":27,"line":2714},[25,7777,2297],{"class":244},[25,7779,7780],{"class":27,"line":2720},[25,7781,1676],{"class":244},[159,7783,7784],{},"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":20,"searchDepth":39,"depth":39,"links":7786},[7787,7788,7789,7790,7791,7792,7793,7794],{"id":6393,"depth":39,"text":6394},{"id":6559,"depth":39,"text":6560},{"id":6715,"depth":39,"text":6716},{"id":6793,"depth":39,"text":6794},{"id":6872,"depth":39,"text":6873},{"id":6971,"depth":39,"text":6972},{"id":7210,"depth":39,"text":7211},{"id":7388,"depth":39,"text":7389},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6382,"description":6390},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7801,"title":7802,"body":7803,"description":7810,"extension":165,"meta":10784,"navigation":167,"path":10785,"seo":10786,"stem":10787,"__hash__":10788},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7804,"toc":10775},[7805,7808,7811,7815,7818,7821,7832,8170,8173,8177,8180,8187,8442,8446,8449,8452,8607,8611,8614,8617,8823,8827,8830,9133,9136,9144,9148,9151,9302,9304,9315,9372,9376,9381,10038,10046,10049,10143,10146,10766,10772],[10,7806,7802],{"id":7807},"_4结构体",[99,7809,7810],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[182,7812,7814],{"id":7813},"_41结构体定义与使用","4.1结构体定义与使用",[99,7816,7817],{},"语法：struct 结构体名 {结构体成员列表}；",[99,7819,7820],{},"通过结构体创建变量的方式：",[103,7822,7823,7826,7829],{},[106,7824,7825],{},"struct 结构体名 变量名",[106,7827,7828],{},"struct 结构体名 变量名={成员1值，成员2值...}",[106,7830,7831],{},"定义结构体时顺便创建变量",[15,7833,7835],{"className":231,"code":7834,"language":233,"meta":20,"style":20},"#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",[22,7836,7837,7843,7853,7860,7865,7873,7877,7882,7886,7891,7896,7901,7908,7913,7920,7924,7931,7935,7939,7943,7947,7951,7955,7961,7965,7971,7979,7987,7991,7996,8001,8012,8017,8029,8040,8051,8056,8080,8085,8091,8118,8123,8129,8141,8153,8165],{"__ignoreMap":20},[25,7838,7839,7841],{"class":27,"line":28},[25,7840,2060],{"class":240},[25,7842,2063],{"class":45},[25,7844,7845,7847,7849,7851],{"class":27,"line":39},[25,7846,2068],{"class":240},[25,7848,2071],{"class":240},[25,7850,2074],{"class":31},[25,7852,1403],{"class":244},[25,7854,7855,7857],{"class":27,"line":51},[25,7856,2060],{"class":240},[25,7858,7859],{"class":45},"\u003Cstring>\n",[25,7861,7862],{"class":27,"line":59},[25,7863,7864],{"class":302},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[25,7866,7867,7870],{"class":27,"line":67},[25,7868,7869],{"class":240},"struct",[25,7871,7872],{"class":31}," Student\n",[25,7874,7875],{"class":27,"line":75},[25,7876,1657],{"class":244},[25,7878,7879],{"class":27,"line":83},[25,7880,7881],{"class":302},"    \u002F\u002F成员列表\n",[25,7883,7884],{"class":27,"line":91},[25,7885,2510],{"emptyLinePlaceholder":167},[25,7887,7888],{"class":27,"line":1429},[25,7889,7890],{"class":302},"    \u002F\u002F姓名\n",[25,7892,7893],{"class":27,"line":1441},[25,7894,7895],{"class":244},"    string name;\n",[25,7897,7898],{"class":27,"line":1723},[25,7899,7900],{"class":302},"    \u002F\u002F年龄\n",[25,7902,7903,7905],{"class":27,"line":1728},[25,7904,2095],{"class":240},[25,7906,7907],{"class":244}," age;\n",[25,7909,7910],{"class":27,"line":1734},[25,7911,7912],{"class":302},"    \u002F\u002F分数\n",[25,7914,7915,7917],{"class":27,"line":1739},[25,7916,2095],{"class":240},[25,7918,7919],{"class":244}," score;\n",[25,7921,7922],{"class":27,"line":1753},[25,7923,4105],{"class":244},[25,7925,7926,7928],{"class":27,"line":1758},[25,7927,7869],{"class":240},[25,7929,7930],{"class":31}," School\n",[25,7932,7933],{"class":27,"line":1764},[25,7934,1657],{"class":244},[25,7936,7937],{"class":27,"line":1785},[25,7938,7881],{"class":302},[25,7940,7941],{"class":27,"line":1790},[25,7942,2510],{"emptyLinePlaceholder":167},[25,7944,7945],{"class":27,"line":1804},[25,7946,7890],{"class":302},[25,7948,7949],{"class":27,"line":1809},[25,7950,7895],{"class":244},[25,7952,7953],{"class":27,"line":1838},[25,7954,7900],{"class":302},[25,7956,7957,7959],{"class":27,"line":1843},[25,7958,2095],{"class":240},[25,7960,7907],{"class":244},[25,7962,7963],{"class":27,"line":1860},[25,7964,7912],{"class":302},[25,7966,7967,7969],{"class":27,"line":1865},[25,7968,2095],{"class":240},[25,7970,7919],{"class":244},[25,7972,7973,7976],{"class":27,"line":1870},[25,7974,7975],{"class":244},"} s3;",[25,7977,7978],{"class":302}," \u002F\u002F创建结构体时就创建了变量\n",[25,7980,7981,7983,7985],{"class":27,"line":1875},[25,7982,248],{"class":240},[25,7984,2083],{"class":31},[25,7986,2086],{"class":244},[25,7988,7989],{"class":27,"line":1889},[25,7990,1657],{"class":244},[25,7992,7993],{"class":27,"line":1894},[25,7994,7995],{"class":302},"    \u002F\u002F2.通过学生类型创建具体学生\n",[25,7997,7998],{"class":27,"line":2687},[25,7999,8000],{"class":302},"    \u002F\u002F2.1 struct Student s1;\n",[25,8002,8003,8006,8009],{"class":27,"line":2701},[25,8004,8005],{"class":240},"    struct",[25,8007,8008],{"class":31}," Student",[25,8010,8011],{"class":244}," s1;\n",[25,8013,8014],{"class":27,"line":2709},[25,8015,8016],{"class":302},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[25,8018,8019,8022,8024,8027],{"class":27,"line":2714},[25,8020,8021],{"class":244},"    s1.name",[25,8023,290],{"class":240},[25,8025,8026],{"class":45},"\"张三\"",[25,8028,1403],{"class":244},[25,8030,8031,8034,8036,8038],{"class":27,"line":2720},[25,8032,8033],{"class":244},"    s1.age",[25,8035,290],{"class":240},[25,8037,893],{"class":35},[25,8039,1403],{"class":244},[25,8041,8042,8045,8047,8049],{"class":27,"line":2726},[25,8043,8044],{"class":244},"    s1.score",[25,8046,290],{"class":240},[25,8048,497],{"class":35},[25,8050,1403],{"class":244},[25,8052,8053],{"class":27,"line":2731},[25,8054,8055],{"class":302},"    \u002F\u002F输出结果\n",[25,8057,8059,8061,8063,8066,8068,8071,8073,8076,8078],{"class":27,"line":8058},37,[25,8060,1662],{"class":244},[25,8062,1286],{"class":240},[25,8064,8065],{"class":244},"s1.name",[25,8067,1286],{"class":240},[25,8069,8070],{"class":244},"s1.age",[25,8072,1286],{"class":240},[25,8074,8075],{"class":244},"s1.score",[25,8077,1286],{"class":240},[25,8079,1308],{"class":244},[25,8081,8083],{"class":27,"line":8082},38,[25,8084,2510],{"emptyLinePlaceholder":167},[25,8086,8088],{"class":27,"line":8087},39,[25,8089,8090],{"class":302},"    \u002F\u002F2.2 struct Student s2={...}\n",[25,8092,8094,8096,8098,8101,8103,8105,8108,8110,8112,8114,8116],{"class":27,"line":8093},40,[25,8095,8005],{"class":240},[25,8097,8008],{"class":31},[25,8099,8100],{"class":244}," s2",[25,8102,290],{"class":240},[25,8104,1139],{"class":244},[25,8106,8107],{"class":45},"\"王五\"",[25,8109,621],{"class":244},[25,8111,893],{"class":35},[25,8113,621],{"class":244},[25,8115,497],{"class":35},[25,8117,4105],{"class":244},[25,8119,8121],{"class":27,"line":8120},41,[25,8122,2510],{"emptyLinePlaceholder":167},[25,8124,8126],{"class":27,"line":8125},42,[25,8127,8128],{"class":302},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[25,8130,8132,8135,8137,8139],{"class":27,"line":8131},43,[25,8133,8134],{"class":244},"    s3.name",[25,8136,290],{"class":240},[25,8138,3788],{"class":45},[25,8140,1403],{"class":244},[25,8142,8144,8147,8149,8151],{"class":27,"line":8143},44,[25,8145,8146],{"class":244},"    s3.age",[25,8148,290],{"class":240},[25,8150,893],{"class":35},[25,8152,1403],{"class":244},[25,8154,8156,8159,8161,8163],{"class":27,"line":8155},45,[25,8157,8158],{"class":244},"    s3.score",[25,8160,290],{"class":240},[25,8162,943],{"class":35},[25,8164,1403],{"class":244},[25,8166,8168],{"class":27,"line":8167},46,[25,8169,1676],{"class":244},[99,8171,8172],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[182,8174,8176],{"id":8175},"_42结构体数组","4.2结构体数组",[99,8178,8179],{},"将自定义的结构体放入到数组中方便维护",[99,8181,8182,8183,8186],{},"语法：struct 结构体名 数组名",[25,8184,8185],{},"元素个数","={ {}，{},...{} };",[15,8188,8190],{"className":231,"code":8189,"language":233,"meta":20,"style":20},"#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",[22,8191,8192,8198,8208,8214,8219,8225,8229,8233,8239,8245,8249,8253,8261,8265,8270,8285,8289,8305,8321,8325,8330,8346,8361,8376,8381,8407,8411,8434,8438],{"__ignoreMap":20},[25,8193,8194,8196],{"class":27,"line":28},[25,8195,2060],{"class":240},[25,8197,2063],{"class":45},[25,8199,8200,8202,8204,8206],{"class":27,"line":39},[25,8201,2068],{"class":240},[25,8203,2071],{"class":240},[25,8205,2074],{"class":31},[25,8207,1403],{"class":244},[25,8209,8210,8212],{"class":27,"line":51},[25,8211,2060],{"class":240},[25,8213,7859],{"class":45},[25,8215,8216],{"class":27,"line":59},[25,8217,8218],{"class":302},"\u002F\u002F1.定义结构体\n",[25,8220,8221,8223],{"class":27,"line":67},[25,8222,7869],{"class":240},[25,8224,7872],{"class":31},[25,8226,8227],{"class":27,"line":75},[25,8228,1657],{"class":244},[25,8230,8231],{"class":27,"line":83},[25,8232,7895],{"class":244},[25,8234,8235,8237],{"class":27,"line":91},[25,8236,2095],{"class":240},[25,8238,7907],{"class":244},[25,8240,8241,8243],{"class":27,"line":1429},[25,8242,2095],{"class":240},[25,8244,7919],{"class":244},[25,8246,8247],{"class":27,"line":1441},[25,8248,2510],{"emptyLinePlaceholder":167},[25,8250,8251],{"class":27,"line":1723},[25,8252,4105],{"class":244},[25,8254,8255,8257,8259],{"class":27,"line":1728},[25,8256,248],{"class":240},[25,8258,2083],{"class":31},[25,8260,2086],{"class":244},[25,8262,8263],{"class":27,"line":1734},[25,8264,1657],{"class":244},[25,8266,8267],{"class":27,"line":1739},[25,8268,8269],{"class":302},"    \u002F\u002F2.创建结构体数组\n",[25,8271,8272,8274,8276,8279,8281,8283],{"class":27,"line":1753},[25,8273,8005],{"class":240},[25,8275,8008],{"class":31},[25,8277,8278],{"class":244}," stuArray[",[25,8280,321],{"class":35},[25,8282,1183],{"class":244},[25,8284,5018],{"class":240},[25,8286,8287],{"class":27,"line":1758},[25,8288,2140],{"class":244},[25,8290,8291,8293,8295,8297,8299,8301,8303],{"class":27,"line":1764},[25,8292,5027],{"class":244},[25,8294,8026],{"class":45},[25,8296,621],{"class":244},[25,8298,893],{"class":35},[25,8300,621],{"class":244},[25,8302,554],{"class":35},[25,8304,5040],{"class":244},[25,8306,8307,8309,8311,8313,8315,8317,8319],{"class":27,"line":1785},[25,8308,5027],{"class":244},[25,8310,3788],{"class":45},[25,8312,621],{"class":244},[25,8314,818],{"class":35},[25,8316,621],{"class":244},[25,8318,818],{"class":35},[25,8320,1676],{"class":244},[25,8322,8323],{"class":27,"line":1790},[25,8324,2297],{"class":244},[25,8326,8327],{"class":27,"line":1804},[25,8328,8329],{"class":302},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[25,8331,8332,8335,8337,8340,8342,8344],{"class":27,"line":1809},[25,8333,8334],{"class":244},"    stuArray[",[25,8336,460],{"class":35},[25,8338,8339],{"class":244},"].name",[25,8341,290],{"class":240},[25,8343,3811],{"class":45},[25,8345,1403],{"class":244},[25,8347,8348,8350,8352,8355,8357,8359],{"class":27,"line":1838},[25,8349,8334],{"class":244},[25,8351,460],{"class":35},[25,8353,8354],{"class":244},"].age",[25,8356,290],{"class":240},[25,8358,321],{"class":35},[25,8360,1403],{"class":244},[25,8362,8363,8365,8367,8370,8372,8374],{"class":27,"line":1843},[25,8364,8334],{"class":244},[25,8366,460],{"class":35},[25,8368,8369],{"class":244},"].score",[25,8371,290],{"class":240},[25,8373,321],{"class":35},[25,8375,1403],{"class":244},[25,8377,8378],{"class":27,"line":1860},[25,8379,8380],{"class":302},"    \u002F\u002F4.遍历结构体数组\n",[25,8382,8383,8385,8387,8389,8391,8393,8395,8397,8399,8401,8403,8405],{"class":27,"line":1865},[25,8384,3311],{"class":240},[25,8386,1769],{"class":244},[25,8388,248],{"class":240},[25,8390,3142],{"class":244},[25,8392,290],{"class":240},[25,8394,434],{"class":35},[25,8396,3149],{"class":244},[25,8398,1153],{"class":240},[25,8400,321],{"class":35},[25,8402,3149],{"class":244},[25,8404,2402],{"class":240},[25,8406,251],{"class":244},[25,8408,8409],{"class":27,"line":1870},[25,8410,2140],{"class":244},[25,8412,8413,8415,8417,8420,8422,8425,8427,8430,8432],{"class":27,"line":1875},[25,8414,3561],{"class":244},[25,8416,1286],{"class":240},[25,8418,8419],{"class":244},"stuArray[i].name",[25,8421,1286],{"class":240},[25,8423,8424],{"class":244},"stuArray[i].age",[25,8426,1286],{"class":240},[25,8428,8429],{"class":244},"stuArray[i].score",[25,8431,1286],{"class":240},[25,8433,1308],{"class":244},[25,8435,8436],{"class":27,"line":1889},[25,8437,2297],{"class":244},[25,8439,8440],{"class":27,"line":1894},[25,8441,1676],{"class":244},[182,8443,8445],{"id":8444},"_43结构体指针","4.3结构体指针",[99,8447,8448],{},"作用：通过指针访问结构体中的成员",[99,8450,8451],{},"利用操作符->可以通过结构体指针访问结构体属性",[15,8453,8455],{"className":231,"code":8454,"language":233,"meta":20,"style":20},"#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",[22,8456,8457,8463,8473,8479,8483,8489,8493,8497,8503,8509,8513,8521,8525,8530,8555,8560,8575,8580,8603],{"__ignoreMap":20},[25,8458,8459,8461],{"class":27,"line":28},[25,8460,2060],{"class":240},[25,8462,2063],{"class":45},[25,8464,8465,8467,8469,8471],{"class":27,"line":39},[25,8466,2068],{"class":240},[25,8468,2071],{"class":240},[25,8470,2074],{"class":31},[25,8472,1403],{"class":244},[25,8474,8475,8477],{"class":27,"line":51},[25,8476,2060],{"class":240},[25,8478,7859],{"class":45},[25,8480,8481],{"class":27,"line":59},[25,8482,8218],{"class":302},[25,8484,8485,8487],{"class":27,"line":67},[25,8486,7869],{"class":240},[25,8488,7872],{"class":31},[25,8490,8491],{"class":27,"line":75},[25,8492,1657],{"class":244},[25,8494,8495],{"class":27,"line":83},[25,8496,7895],{"class":244},[25,8498,8499,8501],{"class":27,"line":91},[25,8500,2095],{"class":240},[25,8502,7907],{"class":244},[25,8504,8505,8507],{"class":27,"line":1429},[25,8506,2095],{"class":240},[25,8508,7919],{"class":244},[25,8510,8511],{"class":27,"line":1441},[25,8512,4105],{"class":244},[25,8514,8515,8517,8519],{"class":27,"line":1723},[25,8516,248],{"class":240},[25,8518,2083],{"class":31},[25,8520,2086],{"class":244},[25,8522,8523],{"class":27,"line":1728},[25,8524,1657],{"class":244},[25,8526,8527],{"class":27,"line":1734},[25,8528,8529],{"class":302},"    \u002F\u002F创建学生结构体变量\n",[25,8531,8532,8534,8536,8539,8541,8543,8545,8547,8549,8551,8553],{"class":27,"line":1739},[25,8533,8005],{"class":240},[25,8535,8008],{"class":31},[25,8537,8538],{"class":244}," s",[25,8540,290],{"class":240},[25,8542,1139],{"class":244},[25,8544,8026],{"class":45},[25,8546,621],{"class":244},[25,8548,893],{"class":35},[25,8550,621],{"class":244},[25,8552,1833],{"class":35},[25,8554,4105],{"class":244},[25,8556,8557],{"class":27,"line":1753},[25,8558,8559],{"class":302},"    \u002F\u002F通过指针指向结构体变量\n",[25,8561,8562,8564,8566,8568,8570,8572],{"class":27,"line":1758},[25,8563,8005],{"class":240},[25,8565,8008],{"class":31},[25,8567,6628],{"class":240},[25,8569,99],{"class":244},[25,8571,6449],{"class":240},[25,8573,8574],{"class":244},"s\n",[25,8576,8577],{"class":27,"line":1764},[25,8578,8579],{"class":302},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[25,8581,8582,8584,8586,8589,8591,8594,8596,8599,8601],{"class":27,"line":1785},[25,8583,1662],{"class":244},[25,8585,1286],{"class":240},[25,8587,8588],{"class":244},"p->name",[25,8590,1286],{"class":240},[25,8592,8593],{"class":244},"p->age",[25,8595,1286],{"class":240},[25,8597,8598],{"class":244},"p->score",[25,8600,1286],{"class":240},[25,8602,1308],{"class":244},[25,8604,8605],{"class":27,"line":1790},[25,8606,1676],{"class":244},[182,8608,8610],{"id":8609},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[99,8612,8613],{},"作用：结构体中的成员可以是另一个结构体",[99,8615,8616],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[15,8618,8620],{"className":231,"code":8619,"language":233,"meta":20,"style":20},"#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",[22,8621,8622,8628,8638,8644,8649,8657,8661,8665,8671,8677,8681,8686,8693,8697,8704,8708,8714,8719,8723,8731,8735,8740,8745,8750,8761,8773,8784,8797,8808,8819],{"__ignoreMap":20},[25,8623,8624,8626],{"class":27,"line":28},[25,8625,2060],{"class":240},[25,8627,2063],{"class":45},[25,8629,8630,8632,8634,8636],{"class":27,"line":39},[25,8631,2068],{"class":240},[25,8633,2071],{"class":240},[25,8635,2074],{"class":31},[25,8637,1403],{"class":244},[25,8639,8640,8642],{"class":27,"line":51},[25,8641,2060],{"class":240},[25,8643,7859],{"class":45},[25,8645,8646],{"class":27,"line":59},[25,8647,8648],{"class":302},"\u002F\u002F定义学生结构体\n",[25,8650,8651,8653,8655],{"class":27,"line":67},[25,8652,7869],{"class":240},[25,8654,8008],{"class":31},[25,8656,2784],{"class":244},[25,8658,8659],{"class":27,"line":75},[25,8660,1657],{"class":244},[25,8662,8663],{"class":27,"line":83},[25,8664,7895],{"class":244},[25,8666,8667,8669],{"class":27,"line":91},[25,8668,2095],{"class":240},[25,8670,7907],{"class":244},[25,8672,8673,8675],{"class":27,"line":1429},[25,8674,2095],{"class":240},[25,8676,7919],{"class":244},[25,8678,8679],{"class":27,"line":1441},[25,8680,1676],{"class":244},[25,8682,8683],{"class":27,"line":1723},[25,8684,8685],{"class":302},"\u002F\u002F定义老师结构体\n",[25,8687,8688,8690],{"class":27,"line":1728},[25,8689,7869],{"class":240},[25,8691,8692],{"class":31}," Teacher\n",[25,8694,8695],{"class":27,"line":1734},[25,8696,1657],{"class":244},[25,8698,8699,8701],{"class":27,"line":1739},[25,8700,2095],{"class":240},[25,8702,8703],{"class":244}," id;\n",[25,8705,8706],{"class":27,"line":1753},[25,8707,7895],{"class":244},[25,8709,8710,8712],{"class":27,"line":1758},[25,8711,2095],{"class":240},[25,8713,7907],{"class":244},[25,8715,8716],{"class":27,"line":1764},[25,8717,8718],{"class":244},"    Student stu;\n",[25,8720,8721],{"class":27,"line":1785},[25,8722,1676],{"class":244},[25,8724,8725,8727,8729],{"class":27,"line":1790},[25,8726,248],{"class":240},[25,8728,2083],{"class":31},[25,8730,6088],{"class":244},[25,8732,8733],{"class":27,"line":1804},[25,8734,1657],{"class":244},[25,8736,8737],{"class":27,"line":1809},[25,8738,8739],{"class":302},"    \u002F\u002F结构体嵌套结构体\n",[25,8741,8742],{"class":27,"line":1838},[25,8743,8744],{"class":302},"    \u002F\u002F创建老师\n",[25,8746,8747],{"class":27,"line":1843},[25,8748,8749],{"class":244},"    Teacher t;\n",[25,8751,8752,8755,8757,8759],{"class":27,"line":1860},[25,8753,8754],{"class":244},"    t.id",[25,8756,290],{"class":240},[25,8758,554],{"class":35},[25,8760,1403],{"class":244},[25,8762,8763,8766,8768,8771],{"class":27,"line":1865},[25,8764,8765],{"class":244},"    t.name",[25,8767,290],{"class":240},[25,8769,8770],{"class":45},"\"老王\"",[25,8772,1403],{"class":244},[25,8774,8775,8778,8780,8782],{"class":27,"line":1870},[25,8776,8777],{"class":244},"    t.age",[25,8779,290],{"class":240},[25,8781,893],{"class":35},[25,8783,1403],{"class":244},[25,8785,8786,8789,8791,8794],{"class":27,"line":1875},[25,8787,8788],{"class":244},"    t.stu.name",[25,8790,290],{"class":240},[25,8792,8793],{"class":45},"\"小王\"",[25,8795,8796],{"class":244},"；\n",[25,8798,8799,8802,8804,8806],{"class":27,"line":1889},[25,8800,8801],{"class":244},"    t.stu.age",[25,8803,290],{"class":240},[25,8805,943],{"class":35},[25,8807,1403],{"class":244},[25,8809,8810,8813,8815,8817],{"class":27,"line":1894},[25,8811,8812],{"class":244},"    t.stu.score",[25,8814,290],{"class":240},[25,8816,587],{"class":35},[25,8818,1403],{"class":244},[25,8820,8821],{"class":27,"line":2687},[25,8822,1676],{"class":244},[182,8824,8826],{"id":8825},"_45结构体做函数参数","4.5结构体做函数参数",[99,8828,8829],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[15,8831,8833],{"className":231,"code":8832,"language":233,"meta":20,"style":20},"#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",[22,8834,8835,8841,8851,8857,8863,8867,8871,8877,8883,8887,8892,8897,8914,8918,8951,8955,8960,8979,8983,9014,9018,9026,9030,9039,9051,9063,9075,9088,9096,9109,9121,9129],{"__ignoreMap":20},[25,8836,8837,8839],{"class":27,"line":28},[25,8838,2060],{"class":240},[25,8840,2063],{"class":45},[25,8842,8843,8845,8847,8849],{"class":27,"line":39},[25,8844,2068],{"class":240},[25,8846,2071],{"class":240},[25,8848,2074],{"class":31},[25,8850,1403],{"class":244},[25,8852,8853,8855],{"class":27,"line":51},[25,8854,2060],{"class":240},[25,8856,7859],{"class":45},[25,8858,8859,8861],{"class":27,"line":59},[25,8860,7869],{"class":240},[25,8862,7872],{"class":31},[25,8864,8865],{"class":27,"line":67},[25,8866,1657],{"class":244},[25,8868,8869],{"class":27,"line":75},[25,8870,7895],{"class":244},[25,8872,8873,8875],{"class":27,"line":83},[25,8874,2095],{"class":240},[25,8876,7907],{"class":244},[25,8878,8879,8881],{"class":27,"line":91},[25,8880,2095],{"class":240},[25,8882,7919],{"class":244},[25,8884,8885],{"class":27,"line":1429},[25,8886,4105],{"class":244},[25,8888,8889],{"class":27,"line":1441},[25,8890,8891],{"class":302},"\u002F\u002F打印学生信息的函数\n",[25,8893,8894],{"class":27,"line":1723},[25,8895,8896],{"class":302},"\u002F\u002F值传递\n",[25,8898,8899,8901,8904,8906,8908,8910,8912],{"class":27,"line":1728},[25,8900,5474],{"class":240},[25,8902,8903],{"class":31}," printStudent1",[25,8905,245],{"class":244},[25,8907,7869],{"class":240},[25,8909,8008],{"class":31},[25,8911,8538],{"class":5326},[25,8913,251],{"class":244},[25,8915,8916],{"class":27,"line":1734},[25,8917,1657],{"class":244},[25,8919,8920,8922,8924,8927,8929,8932,8934,8937,8939,8941,8943,8946,8948],{"class":27,"line":1739},[25,8921,6639],{"class":244},[25,8923,1286],{"class":240},[25,8925,8926],{"class":244}," s.name ",[25,8928,1286],{"class":240},[25,8930,8931],{"class":45}," \" \"",[25,8933,1556],{"class":240},[25,8935,8936],{"class":244}," s.age ",[25,8938,1286],{"class":240},[25,8940,8931],{"class":45},[25,8942,1556],{"class":240},[25,8944,8945],{"class":244}," s.score ",[25,8947,1286],{"class":240},[25,8949,8950],{"class":244}," endl;\n",[25,8952,8953],{"class":27,"line":1753},[25,8954,1676],{"class":244},[25,8956,8957],{"class":27,"line":1758},[25,8958,8959],{"class":302},"\u002F\u002F地址传递\n",[25,8961,8962,8964,8967,8969,8971,8973,8975,8977],{"class":27,"line":1764},[25,8963,5474],{"class":240},[25,8965,8966],{"class":31}," printStudent2",[25,8968,245],{"class":244},[25,8970,7869],{"class":240},[25,8972,8008],{"class":31},[25,8974,6628],{"class":240},[25,8976,938],{"class":5326},[25,8978,251],{"class":244},[25,8980,8981],{"class":27,"line":1785},[25,8982,1657],{"class":244},[25,8984,8985,8987,8989,8992,8994,8996,8998,9001,9003,9005,9007,9010,9012],{"class":27,"line":1790},[25,8986,6639],{"class":244},[25,8988,1286],{"class":240},[25,8990,8991],{"class":244}," s->name ",[25,8993,1286],{"class":240},[25,8995,8931],{"class":45},[25,8997,1556],{"class":240},[25,8999,9000],{"class":244}," s->age ",[25,9002,1286],{"class":240},[25,9004,8931],{"class":45},[25,9006,1556],{"class":240},[25,9008,9009],{"class":244}," s->score ",[25,9011,1286],{"class":240},[25,9013,8950],{"class":244},[25,9015,9016],{"class":27,"line":1804},[25,9017,1676],{"class":244},[25,9019,9020,9022,9024],{"class":27,"line":1809},[25,9021,248],{"class":240},[25,9023,2083],{"class":31},[25,9025,2086],{"class":244},[25,9027,9028],{"class":27,"line":1838},[25,9029,1657],{"class":244},[25,9031,9032,9034,9036],{"class":27,"line":1843},[25,9033,8005],{"class":240},[25,9035,8008],{"class":31},[25,9037,9038],{"class":244}," s;\n",[25,9040,9041,9044,9046,9049],{"class":27,"line":1860},[25,9042,9043],{"class":244},"    s.name ",[25,9045,290],{"class":240},[25,9047,9048],{"class":45}," \"张三\"",[25,9050,1403],{"class":244},[25,9052,9053,9056,9058,9061],{"class":27,"line":1865},[25,9054,9055],{"class":244},"    s.age ",[25,9057,290],{"class":240},[25,9059,9060],{"class":35}," 20",[25,9062,1403],{"class":244},[25,9064,9065,9068,9070,9073],{"class":27,"line":1870},[25,9066,9067],{"class":244},"    s.score ",[25,9069,290],{"class":240},[25,9071,9072],{"class":35}," 85",[25,9074,1403],{"class":244},[25,9076,9077,9079,9081,9084,9086],{"class":27,"line":1875},[25,9078,1662],{"class":244},[25,9080,1286],{"class":240},[25,9082,9083],{"class":45},"\"值传递:\"",[25,9085,1286],{"class":240},[25,9087,1308],{"class":244},[25,9089,9090,9093],{"class":27,"line":1889},[25,9091,9092],{"class":31},"    printStudent1",[25,9094,9095],{"class":244},"(s);\n",[25,9097,9098,9100,9102,9105,9107],{"class":27,"line":1894},[25,9099,1662],{"class":244},[25,9101,1286],{"class":240},[25,9103,9104],{"class":45},"\"地址传递:\"",[25,9106,1286],{"class":240},[25,9108,1308],{"class":244},[25,9110,9111,9114,9116,9118],{"class":27,"line":2687},[25,9112,9113],{"class":31},"    printStudent2",[25,9115,245],{"class":244},[25,9117,596],{"class":240},[25,9119,9120],{"class":244},"s); \n",[25,9122,9123,9125,9127],{"class":27,"line":2701},[25,9124,4200],{"class":240},[25,9126,4203],{"class":35},[25,9128,1403],{"class":244},[25,9130,9131],{"class":27,"line":2709},[25,9132,1676],{"class":244},[99,9134,9135],{},"注意：",[103,9137,9138,9141],{},[106,9139,9140],{},"1.先定义结构体，不要在函数中写结构体的定义",[106,9142,9143],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[182,9145,9147],{"id":9146},"_46结构体中const使用场景","4.6结构体中const使用场景",[99,9149,9150],{},"用const防止误操作",[15,9152,9154],{"className":231,"code":9153,"language":233,"meta":20,"style":20},"#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",[22,9155,9156,9162,9172,9178,9183,9187,9191,9197,9203,9207,9223,9227,9250,9254,9262,9266,9287,9294,9298],{"__ignoreMap":20},[25,9157,9158,9160],{"class":27,"line":28},[25,9159,2060],{"class":240},[25,9161,2063],{"class":45},[25,9163,9164,9166,9168,9170],{"class":27,"line":39},[25,9165,2068],{"class":240},[25,9167,2071],{"class":240},[25,9169,2074],{"class":31},[25,9171,1403],{"class":244},[25,9173,9174,9176],{"class":27,"line":51},[25,9175,2060],{"class":240},[25,9177,7859],{"class":45},[25,9179,9180],{"class":27,"line":59},[25,9181,9182],{"class":244},"sctuct Student\n",[25,9184,9185],{"class":27,"line":67},[25,9186,1657],{"class":244},[25,9188,9189],{"class":27,"line":75},[25,9190,7895],{"class":244},[25,9192,9193,9195],{"class":27,"line":83},[25,9194,2095],{"class":240},[25,9196,7907],{"class":244},[25,9198,9199,9201],{"class":27,"line":91},[25,9200,2095],{"class":240},[25,9202,7919],{"class":244},[25,9204,9205],{"class":27,"line":1429},[25,9206,4105],{"class":244},[25,9208,9209,9211,9214,9216,9219,9221],{"class":27,"line":1441},[25,9210,5474],{"class":240},[25,9212,9213],{"class":31}," printStudents",[25,9215,245],{"class":244},[25,9217,9218],{"class":31},"student",[25,9220,8538],{"class":5326},[25,9222,251],{"class":244},[25,9224,9225],{"class":27,"line":1723},[25,9226,1657],{"class":244},[25,9228,9229,9231,9233,9236,9238,9241,9243,9246,9248],{"class":27,"line":1728},[25,9230,1662],{"class":244},[25,9232,1286],{"class":240},[25,9234,9235],{"class":244},"s.name",[25,9237,1286],{"class":240},[25,9239,9240],{"class":244},"s.age",[25,9242,1286],{"class":240},[25,9244,9245],{"class":244},"s.score",[25,9247,1286],{"class":240},[25,9249,1308],{"class":244},[25,9251,9252],{"class":27,"line":1734},[25,9253,1676],{"class":244},[25,9255,9256,9258,9260],{"class":27,"line":1739},[25,9257,248],{"class":240},[25,9259,2083],{"class":31},[25,9261,6088],{"class":244},[25,9263,9264],{"class":27,"line":1753},[25,9265,1657],{"class":244},[25,9267,9268,9271,9273,9275,9277,9279,9281,9283,9285],{"class":27,"line":1758},[25,9269,9270],{"class":244},"    Student s",[25,9272,290],{"class":240},[25,9274,1139],{"class":244},[25,9276,8026],{"class":45},[25,9278,621],{"class":244},[25,9280,893],{"class":35},[25,9282,621],{"class":244},[25,9284,893],{"class":35},[25,9286,4105],{"class":244},[25,9288,9289,9292],{"class":27,"line":1764},[25,9290,9291],{"class":31},"    printStudent",[25,9293,9095],{"class":244},[25,9295,9296],{"class":27,"line":1785},[25,9297,2510],{"emptyLinePlaceholder":167},[25,9299,9300],{"class":27,"line":1790},[25,9301,1676],{"class":244},[99,9303,9135],{},[103,9305,9306,9309,9312],{},[106,9307,9308],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[106,9310,9311],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[106,9313,9314],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[15,9316,9318],{"className":231,"code":9317,"language":233,"meta":20,"style":20},"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",[22,9319,9320,9339,9343,9348,9368],{"__ignoreMap":20},[25,9321,9322,9324,9326,9328,9330,9333,9335,9337],{"class":27,"line":28},[25,9323,5474],{"class":240},[25,9325,9213],{"class":31},[25,9327,245],{"class":244},[25,9329,6902],{"class":240},[25,9331,9332],{"class":31}," student",[25,9334,6628],{"class":240},[25,9336,938],{"class":5326},[25,9338,251],{"class":244},[25,9340,9341],{"class":27,"line":39},[25,9342,1657],{"class":244},[25,9344,9345],{"class":27,"line":51},[25,9346,9347],{"class":302},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[25,9349,9350,9352,9354,9356,9358,9360,9362,9364,9366],{"class":27,"line":59},[25,9351,1662],{"class":244},[25,9353,1286],{"class":240},[25,9355,9235],{"class":244},[25,9357,1286],{"class":240},[25,9359,9240],{"class":244},[25,9361,1286],{"class":240},[25,9363,9245],{"class":244},[25,9365,1286],{"class":240},[25,9367,1308],{"class":244},[25,9369,9370],{"class":27,"line":67},[25,9371,1676],{"class":244},[182,9373,9375],{"id":9374},"_47案例","4.7案例",[194,9377,9378],{},[106,9379,9380],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[15,9382,9384],{"className":231,"code":9383,"language":233,"meta":20,"style":20},"#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",[22,9385,9386,9392,9402,9408,9415,9419,9425,9429,9434,9440,9446,9450,9454,9460,9464,9469,9474,9487,9491,9496,9522,9526,9538,9565,9569,9581,9591,9595,9600,9629,9633,9645,9654,9681,9692,9702,9706,9710,9714,9719,9743,9747,9771,9775,9794,9820,9824,9849,9872,9896,9901,9906,9911,9920,9925,9931,9952,9958,9972,9978,10005,10014,10020,10028,10033],{"__ignoreMap":20},[25,9387,9388,9390],{"class":27,"line":28},[25,9389,2060],{"class":240},[25,9391,2063],{"class":45},[25,9393,9394,9396,9398,9400],{"class":27,"line":39},[25,9395,2068],{"class":240},[25,9397,2071],{"class":240},[25,9399,2074],{"class":31},[25,9401,1403],{"class":244},[25,9403,9404,9406],{"class":27,"line":51},[25,9405,2060],{"class":240},[25,9407,7859],{"class":45},[25,9409,9410,9412],{"class":27,"line":59},[25,9411,2060],{"class":240},[25,9413,9414],{"class":45},"\u003Cctime>\n",[25,9416,9417],{"class":27,"line":67},[25,9418,8648],{"class":302},[25,9420,9421,9423],{"class":27,"line":75},[25,9422,7869],{"class":240},[25,9424,7872],{"class":31},[25,9426,9427],{"class":27,"line":83},[25,9428,1657],{"class":244},[25,9430,9431],{"class":27,"line":91},[25,9432,9433],{"class":244},"    string sName;\n",[25,9435,9436,9438],{"class":27,"line":1429},[25,9437,2095],{"class":240},[25,9439,7907],{"class":244},[25,9441,9442,9444],{"class":27,"line":1441},[25,9443,2095],{"class":240},[25,9445,7919],{"class":244},[25,9447,9448],{"class":27,"line":1723},[25,9449,4105],{"class":244},[25,9451,9452],{"class":27,"line":1728},[25,9453,8685],{"class":302},[25,9455,9456,9458],{"class":27,"line":1734},[25,9457,7869],{"class":240},[25,9459,8692],{"class":31},[25,9461,9462],{"class":27,"line":1739},[25,9463,1657],{"class":244},[25,9465,9466],{"class":27,"line":1753},[25,9467,9468],{"class":244},"    string tName;\n",[25,9470,9471],{"class":27,"line":1758},[25,9472,9473],{"class":302},"    \u002F\u002F学生数组\n",[25,9475,9476,9478,9480,9483,9485],{"class":27,"line":1764},[25,9477,8005],{"class":240},[25,9479,8008],{"class":31},[25,9481,9482],{"class":244}," sArray[",[25,9484,562],{"class":35},[25,9486,4800],{"class":244},[25,9488,9489],{"class":27,"line":1785},[25,9490,4105],{"class":244},[25,9492,9493],{"class":27,"line":1790},[25,9494,9495],{"class":302},"\u002F\u002F给老师和学生赋值的函数\n",[25,9497,9498,9500,9503,9505,9507,9510,9513,9516,9518,9520],{"class":27,"line":1804},[25,9499,5474],{"class":240},[25,9501,9502],{"class":31}," allocateSpace",[25,9504,245],{"class":244},[25,9506,7869],{"class":240},[25,9508,9509],{"class":31}," Teacher",[25,9511,9512],{"class":5326}," tArray",[25,9514,9515],{"class":244},"[],",[25,9517,248],{"class":240},[25,9519,7441],{"class":5326},[25,9521,251],{"class":244},[25,9523,9524],{"class":27,"line":1809},[25,9525,1657],{"class":244},[25,9527,9528,9531,9533,9536],{"class":27,"line":1838},[25,9529,9530],{"class":244},"    string nameSeed",[25,9532,290],{"class":240},[25,9534,9535],{"class":45},"\"ABCDE\"",[25,9537,1403],{"class":244},[25,9539,9540,9542,9544,9546,9549,9551,9553,9556,9558,9561,9563],{"class":27,"line":1843},[25,9541,3311],{"class":240},[25,9543,1769],{"class":244},[25,9545,248],{"class":240},[25,9547,9548],{"class":244}," i ",[25,9550,290],{"class":240},[25,9552,4203],{"class":35},[25,9554,9555],{"class":244},"; i ",[25,9557,1153],{"class":240},[25,9559,9560],{"class":244}," len; i",[25,9562,2402],{"class":240},[25,9564,251],{"class":244},[25,9566,9567],{"class":27,"line":1860},[25,9568,2140],{"class":244},[25,9570,9571,9574,9576,9579],{"class":27,"line":1865},[25,9572,9573],{"class":244},"        tArray[i].tName ",[25,9575,290],{"class":240},[25,9577,9578],{"class":45}," \"Teacher_\"",[25,9580,1403],{"class":244},[25,9582,9583,9585,9588],{"class":27,"line":1870},[25,9584,9573],{"class":244},[25,9586,9587],{"class":240},"+=",[25,9589,9590],{"class":244},"nameSeed[i];\n",[25,9592,9593],{"class":27,"line":1875},[25,9594,2510],{"emptyLinePlaceholder":167},[25,9596,9597],{"class":27,"line":1889},[25,9598,9599],{"class":302},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[25,9601,9602,9604,9606,9608,9611,9613,9615,9618,9620,9622,9625,9627],{"class":27,"line":1894},[25,9603,3513],{"class":240},[25,9605,1769],{"class":244},[25,9607,248],{"class":240},[25,9609,9610],{"class":244}," j ",[25,9612,290],{"class":240},[25,9614,4203],{"class":35},[25,9616,9617],{"class":244},"; j ",[25,9619,1153],{"class":240},[25,9621,2258],{"class":35},[25,9623,9624],{"class":244},"; j",[25,9626,2402],{"class":240},[25,9628,251],{"class":244},[25,9630,9631],{"class":27,"line":2687},[25,9632,2620],{"class":244},[25,9634,9635,9638,9640,9643],{"class":27,"line":2701},[25,9636,9637],{"class":244},"            tArray[i].sArray[j].sName ",[25,9639,290],{"class":240},[25,9641,9642],{"class":45}," \"Student_\"",[25,9644,1403],{"class":244},[25,9646,9647,9649,9651],{"class":27,"line":2709},[25,9648,9637],{"class":244},[25,9650,9587],{"class":240},[25,9652,9653],{"class":244}," nameSeed[j];\n",[25,9655,9656,9659,9662,9664,9666,9668,9670,9672,9674,9676,9678],{"class":27,"line":2714},[25,9657,9658],{"class":240},"            int",[25,9660,9661],{"class":244}," random",[25,9663,290],{"class":240},[25,9665,2534],{"class":31},[25,9667,2537],{"class":244},[25,9669,571],{"class":240},[25,9671,1150],{"class":35},[25,9673,724],{"class":240},[25,9675,644],{"class":35},[25,9677,299],{"class":244},[25,9679,9680],{"class":302},"\u002F\u002F40~99\n",[25,9682,9683,9686,9688,9690],{"class":27,"line":2720},[25,9684,9685],{"class":244},"            tArray[i].sArray[j].age ",[25,9687,290],{"class":240},[25,9689,9060],{"class":35},[25,9691,1403],{"class":244},[25,9693,9694,9697,9699],{"class":27,"line":2726},[25,9695,9696],{"class":244},"            tArray[i].sArray[j].score ",[25,9698,290],{"class":240},[25,9700,9701],{"class":244}," random;\n",[25,9703,9704],{"class":27,"line":2731},[25,9705,2639],{"class":244},[25,9707,9708],{"class":27,"line":8058},[25,9709,2297],{"class":244},[25,9711,9712],{"class":27,"line":8082},[25,9713,1676],{"class":244},[25,9715,9716],{"class":27,"line":8087},[25,9717,9718],{"class":302},"\u002F\u002F打印所有信息的函数\n",[25,9720,9721,9723,9726,9728,9730,9732,9734,9737,9739,9741],{"class":27,"line":8093},[25,9722,5474],{"class":240},[25,9724,9725],{"class":31}," printInfo",[25,9727,245],{"class":244},[25,9729,7869],{"class":240},[25,9731,9509],{"class":31},[25,9733,9512],{"class":5326},[25,9735,9736],{"class":244},"[], ",[25,9738,248],{"class":240},[25,9740,7441],{"class":5326},[25,9742,251],{"class":244},[25,9744,9745],{"class":27,"line":8120},[25,9746,1657],{"class":244},[25,9748,9749,9751,9753,9755,9757,9759,9761,9763,9765,9767,9769],{"class":27,"line":8125},[25,9750,3311],{"class":240},[25,9752,1769],{"class":244},[25,9754,248],{"class":240},[25,9756,9548],{"class":244},[25,9758,290],{"class":240},[25,9760,4203],{"class":35},[25,9762,9555],{"class":244},[25,9764,1153],{"class":240},[25,9766,9560],{"class":244},[25,9768,2402],{"class":240},[25,9770,251],{"class":244},[25,9772,9773],{"class":27,"line":8131},[25,9774,2140],{"class":244},[25,9776,9777,9780,9782,9785,9787,9790,9792],{"class":27,"line":8143},[25,9778,9779],{"class":244},"        cout ",[25,9781,1286],{"class":240},[25,9783,9784],{"class":45}," \"Teacher: \"",[25,9786,1556],{"class":240},[25,9788,9789],{"class":244}," tArray[i].tName ",[25,9791,1286],{"class":240},[25,9793,8950],{"class":244},[25,9795,9796,9798,9800,9802,9804,9806,9808,9810,9812,9814,9816,9818],{"class":27,"line":8155},[25,9797,3513],{"class":240},[25,9799,1769],{"class":244},[25,9801,248],{"class":240},[25,9803,9610],{"class":244},[25,9805,290],{"class":240},[25,9807,4203],{"class":35},[25,9809,9617],{"class":244},[25,9811,1153],{"class":240},[25,9813,2258],{"class":35},[25,9815,9624],{"class":244},[25,9817,2402],{"class":240},[25,9819,251],{"class":244},[25,9821,9822],{"class":27,"line":8167},[25,9823,2620],{"class":244},[25,9825,9827,9830,9832,9835,9837,9840,9842,9845,9847],{"class":27,"line":9826},47,[25,9828,9829],{"class":244},"            cout ",[25,9831,1286],{"class":240},[25,9833,9834],{"class":45}," \"",[25,9836,1343],{"class":35},[25,9838,9839],{"class":45},"Student: \"",[25,9841,1556],{"class":240},[25,9843,9844],{"class":244}," tArray[i].sArray[j].sName",[25,9846,1286],{"class":240},[25,9848,1308],{"class":244},[25,9850,9852,9854,9856,9858,9860,9863,9865,9868,9870],{"class":27,"line":9851},48,[25,9853,9829],{"class":244},[25,9855,1286],{"class":240},[25,9857,9834],{"class":45},[25,9859,1343],{"class":35},[25,9861,9862],{"class":45},"Age: \"",[25,9864,1556],{"class":240},[25,9866,9867],{"class":244}," tArray[i].sArray[j].age ",[25,9869,1286],{"class":240},[25,9871,8950],{"class":244},[25,9873,9875,9877,9879,9881,9883,9886,9888,9891,9893],{"class":27,"line":9874},49,[25,9876,9829],{"class":244},[25,9878,1286],{"class":240},[25,9880,9834],{"class":45},[25,9882,1343],{"class":35},[25,9884,9885],{"class":45},"Score: \"",[25,9887,1556],{"class":240},[25,9889,9890],{"class":244}," tArray[i].sArray[j].score ",[25,9892,1286],{"class":240},[25,9894,9895],{"class":244}," endl;   \n",[25,9897,9899],{"class":27,"line":9898},50,[25,9900,2639],{"class":244},[25,9902,9904],{"class":27,"line":9903},51,[25,9905,2297],{"class":244},[25,9907,9909],{"class":27,"line":9908},52,[25,9910,1676],{"class":244},[25,9912,9914,9916,9918],{"class":27,"line":9913},53,[25,9915,248],{"class":240},[25,9917,2083],{"class":31},[25,9919,2086],{"class":244},[25,9921,9923],{"class":27,"line":9922},54,[25,9924,1657],{"class":244},[25,9926,9928],{"class":27,"line":9927},55,[25,9929,9930],{"class":302},"    \u002F\u002F随机数种子\n",[25,9932,9934,9936,9938,9940,9942,9944,9946,9948,9950],{"class":27,"line":9933},56,[25,9935,2483],{"class":31},[25,9937,2486],{"class":244},[25,9939,2489],{"class":240},[25,9941,2492],{"class":240},[25,9943,672],{"class":244},[25,9945,2497],{"class":31},[25,9947,245],{"class":244},[25,9949,2502],{"class":35},[25,9951,2505],{"class":244},[25,9953,9955],{"class":27,"line":9954},57,[25,9956,9957],{"class":302},"    \u002F\u002F1.创建3名老师的数组\n",[25,9959,9961,9963,9965,9968,9970],{"class":27,"line":9960},58,[25,9962,8005],{"class":240},[25,9964,9509],{"class":31},[25,9966,9967],{"class":244}," tArray[",[25,9969,315],{"class":35},[25,9971,4800],{"class":244},[25,9973,9975],{"class":27,"line":9974},59,[25,9976,9977],{"class":302},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[25,9979,9981,9983,9986,9988,9991,9994,9996,9998,10001,10003],{"class":27,"line":9980},60,[25,9982,2095],{"class":240},[25,9984,9985],{"class":244}," len ",[25,9987,290],{"class":240},[25,9989,9990],{"class":240}," sizeof",[25,9992,9993],{"class":244},"(tArray) ",[25,9995,827],{"class":240},[25,9997,9990],{"class":240},[25,9999,10000],{"class":244},"(tArray[",[25,10002,434],{"class":35},[25,10004,3966],{"class":244},[25,10006,10008,10011],{"class":27,"line":10007},61,[25,10009,10010],{"class":31},"    allocateSpace",[25,10012,10013],{"class":244},"(tArray, len);\n",[25,10015,10017],{"class":27,"line":10016},62,[25,10018,10019],{"class":302},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[25,10021,10023,10026],{"class":27,"line":10022},63,[25,10024,10025],{"class":31},"    printInfo",[25,10027,10013],{"class":244},[25,10029,10031],{"class":27,"line":10030},64,[25,10032,2510],{"emptyLinePlaceholder":167},[25,10034,10036],{"class":27,"line":10035},65,[25,10037,1676],{"class":244},[194,10039,10040],{"start":39},[106,10041,10042,10045],{},[392,10043,10044],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[99,10047,10048],{},"五名英雄信息如下：",[15,10050,10054],{"className":10051,"code":10052,"language":10053,"meta":20,"style":20},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[22,10055,10056,10074,10091,10108,10125],{"__ignoreMap":20},[25,10057,10058,10060,10063,10065,10067,10069,10072],{"class":27,"line":28},[25,10059,5027],{"class":244},[25,10061,10062],{"class":45},"\"刘备\"",[25,10064,621],{"class":244},[25,10066,1018],{"class":35},[25,10068,621],{"class":244},[25,10070,10071],{"class":45},"\"男\"",[25,10073,5040],{"class":244},[25,10075,10076,10078,10081,10083,10085,10087,10089],{"class":27,"line":39},[25,10077,5027],{"class":244},[25,10079,10080],{"class":45},"\"关羽\"",[25,10082,621],{"class":244},[25,10084,993],{"class":35},[25,10086,621],{"class":244},[25,10088,10071],{"class":45},[25,10090,5040],{"class":244},[25,10092,10093,10095,10098,10100,10102,10104,10106],{"class":27,"line":51},[25,10094,5027],{"class":244},[25,10096,10097],{"class":45},"\"张飞\"",[25,10099,621],{"class":244},[25,10101,943],{"class":35},[25,10103,621],{"class":244},[25,10105,10071],{"class":45},[25,10107,5040],{"class":244},[25,10109,10110,10112,10115,10117,10119,10121,10123],{"class":27,"line":59},[25,10111,5027],{"class":244},[25,10113,10114],{"class":45},"\"赵云\"",[25,10116,621],{"class":244},[25,10118,968],{"class":35},[25,10120,621],{"class":244},[25,10122,10071],{"class":45},[25,10124,5040],{"class":244},[25,10126,10127,10129,10132,10134,10136,10138,10141],{"class":27,"line":67},[25,10128,5027],{"class":244},[25,10130,10131],{"class":45},"\"貂蝉\"",[25,10133,621],{"class":244},[25,10135,918],{"class":35},[25,10137,621],{"class":244},[25,10139,10140],{"class":45},"\"女\"",[25,10142,5040],{"class":244},[99,10144,10145],{},"代码：",[15,10147,10149],{"className":231,"code":10148,"language":233,"meta":20,"style":20},"#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",[22,10150,10151,10157,10167,10173,10180,10184,10188,10194,10199,10203,10208,10231,10235,10260,10264,10297,10302,10331,10336,10351,10377,10397,10402,10407,10411,10415,10420,10442,10446,10470,10474,10536,10540,10544,10552,10556,10561,10572,10576,10592,10608,10624,10640,10656,10660,10680,10702,10707,10720,10727,10732,10738,10743,10756,10762],{"__ignoreMap":20},[25,10152,10153,10155],{"class":27,"line":28},[25,10154,2060],{"class":240},[25,10156,2063],{"class":45},[25,10158,10159,10161,10163,10165],{"class":27,"line":39},[25,10160,2068],{"class":240},[25,10162,2071],{"class":240},[25,10164,2074],{"class":31},[25,10166,1403],{"class":244},[25,10168,10169,10171],{"class":27,"line":51},[25,10170,2060],{"class":240},[25,10172,7859],{"class":45},[25,10174,10175,10177],{"class":27,"line":59},[25,10176,7869],{"class":240},[25,10178,10179],{"class":31}," Sanguo\n",[25,10181,10182],{"class":27,"line":67},[25,10183,1657],{"class":244},[25,10185,10186],{"class":27,"line":75},[25,10187,7895],{"class":244},[25,10189,10190,10192],{"class":27,"line":83},[25,10191,2095],{"class":240},[25,10193,7907],{"class":244},[25,10195,10196],{"class":27,"line":91},[25,10197,10198],{"class":244},"    string gender;\n",[25,10200,10201],{"class":27,"line":1429},[25,10202,4105],{"class":244},[25,10204,10205],{"class":27,"line":1441},[25,10206,10207],{"class":302},"\u002F\u002F定义排序函数\n",[25,10209,10210,10212,10214,10216,10219,10221,10223,10225,10227,10229],{"class":27,"line":1723},[25,10211,5474],{"class":240},[25,10213,7426],{"class":31},[25,10215,245],{"class":244},[25,10217,10218],{"class":31},"Sanguo",[25,10220,6628],{"class":240},[25,10222,938],{"class":5326},[25,10224,621],{"class":244},[25,10226,248],{"class":240},[25,10228,7441],{"class":5326},[25,10230,251],{"class":244},[25,10232,10233],{"class":27,"line":1728},[25,10234,1657],{"class":244},[25,10236,10237,10239,10241,10243,10245,10247,10249,10251,10253,10256,10258],{"class":27,"line":1734},[25,10238,3311],{"class":240},[25,10240,245],{"class":244},[25,10242,248],{"class":240},[25,10244,3142],{"class":244},[25,10246,290],{"class":240},[25,10248,434],{"class":35},[25,10250,3149],{"class":244},[25,10252,1153],{"class":240},[25,10254,10255],{"class":244},"len;i",[25,10257,2402],{"class":240},[25,10259,251],{"class":244},[25,10261,10262],{"class":27,"line":1739},[25,10263,2140],{"class":244},[25,10265,10266,10269,10271,10273,10275,10277,10279,10281,10283,10285,10287,10289,10291,10293,10295],{"class":27,"line":1753},[25,10267,10268],{"class":240},"     for",[25,10270,1769],{"class":244},[25,10272,248],{"class":240},[25,10274,3520],{"class":244},[25,10276,290],{"class":240},[25,10278,434],{"class":35},[25,10280,3527],{"class":244},[25,10282,1153],{"class":240},[25,10284,7468],{"class":244},[25,10286,775],{"class":240},[25,10288,460],{"class":35},[25,10290,775],{"class":240},[25,10292,3660],{"class":244},[25,10294,2402],{"class":240},[25,10296,251],{"class":244},[25,10298,10299],{"class":27,"line":1758},[25,10300,10301],{"class":244},"     {\n",[25,10303,10304,10307,10310,10312,10315,10317,10320,10322,10324,10326,10328],{"class":27,"line":1764},[25,10305,10306],{"class":240},"         if",[25,10308,10309],{"class":244}," ((s",[25,10311,724],{"class":240},[25,10313,10314],{"class":244},"j)->age ",[25,10316,1203],{"class":240},[25,10318,10319],{"class":244}," (s",[25,10321,724],{"class":240},[25,10323,710],{"class":244},[25,10325,724],{"class":240},[25,10327,460],{"class":35},[25,10329,10330],{"class":244},")->age)\n",[25,10332,10333],{"class":27,"line":1785},[25,10334,10335],{"class":244},"         {\n",[25,10337,10338,10341,10343,10346,10348],{"class":27,"line":1790},[25,10339,10340],{"class":244},"             Sanguo temp",[25,10342,7263],{"class":240},[25,10344,10345],{"class":244},"(s",[25,10347,724],{"class":240},[25,10349,10350],{"class":244},"j);\n",[25,10352,10353,10356,10358,10360,10363,10365,10367,10369,10371,10373,10375],{"class":27,"line":1804},[25,10354,10355],{"class":240},"             *",[25,10357,10345],{"class":244},[25,10359,724],{"class":240},[25,10361,10362],{"class":244},"j)",[25,10364,7263],{"class":240},[25,10366,10345],{"class":244},[25,10368,724],{"class":240},[25,10370,710],{"class":244},[25,10372,724],{"class":240},[25,10374,460],{"class":35},[25,10376,2829],{"class":244},[25,10378,10379,10381,10383,10385,10387,10389,10391,10393,10395],{"class":27,"line":1809},[25,10380,10355],{"class":240},[25,10382,10345],{"class":244},[25,10384,724],{"class":240},[25,10386,710],{"class":244},[25,10388,724],{"class":240},[25,10390,460],{"class":35},[25,10392,672],{"class":244},[25,10394,290],{"class":240},[25,10396,4390],{"class":244},[25,10398,10399],{"class":27,"line":1838},[25,10400,10401],{"class":244},"         }\n",[25,10403,10404],{"class":27,"line":1843},[25,10405,10406],{"class":244},"     }\n",[25,10408,10409],{"class":27,"line":1860},[25,10410,2297],{"class":244},[25,10412,10413],{"class":27,"line":1865},[25,10414,1676],{"class":244},[25,10416,10417],{"class":27,"line":1870},[25,10418,10419],{"class":302},"\u002F\u002F定义打印函数\n",[25,10421,10422,10424,10426,10428,10430,10432,10434,10436,10438,10440],{"class":27,"line":1875},[25,10423,5474],{"class":240},[25,10425,9725],{"class":31},[25,10427,245],{"class":244},[25,10429,10218],{"class":31},[25,10431,6628],{"class":240},[25,10433,938],{"class":5326},[25,10435,621],{"class":244},[25,10437,248],{"class":240},[25,10439,7441],{"class":5326},[25,10441,251],{"class":244},[25,10443,10444],{"class":27,"line":1889},[25,10445,1657],{"class":244},[25,10447,10448,10450,10452,10454,10456,10458,10460,10462,10464,10466,10468],{"class":27,"line":1894},[25,10449,3311],{"class":240},[25,10451,1769],{"class":244},[25,10453,248],{"class":240},[25,10455,3142],{"class":244},[25,10457,290],{"class":240},[25,10459,434],{"class":35},[25,10461,3149],{"class":244},[25,10463,1153],{"class":240},[25,10465,10255],{"class":244},[25,10467,2402],{"class":240},[25,10469,251],{"class":244},[25,10471,10472],{"class":27,"line":2687},[25,10473,2140],{"class":244},[25,10475,10476,10478,10480,10482,10484,10487,10489,10491,10493,10496,10498,10500,10502,10505,10507,10509,10511,10514,10516,10518,10520,10523,10525,10527,10529,10532,10534],{"class":27,"line":2701},[25,10477,3561],{"class":244},[25,10479,1286],{"class":240},[25,10481,494],{"class":45},[25,10483,1343],{"class":35},[25,10485,10486],{"class":45},"姓名：\"",[25,10488,1286],{"class":240},[25,10490,10345],{"class":244},[25,10492,724],{"class":240},[25,10494,10495],{"class":244},"i)->name",[25,10497,1286],{"class":240},[25,10499,494],{"class":45},[25,10501,1343],{"class":35},[25,10503,10504],{"class":45},"年龄：\"",[25,10506,1286],{"class":240},[25,10508,10345],{"class":244},[25,10510,724],{"class":240},[25,10512,10513],{"class":244},"i)->age",[25,10515,1286],{"class":240},[25,10517,494],{"class":45},[25,10519,1343],{"class":35},[25,10521,10522],{"class":45},"性别：\"",[25,10524,1286],{"class":240},[25,10526,10345],{"class":244},[25,10528,724],{"class":240},[25,10530,10531],{"class":244},"i)->gender",[25,10533,1286],{"class":240},[25,10535,1308],{"class":244},[25,10537,10538],{"class":27,"line":2709},[25,10539,2297],{"class":244},[25,10541,10542],{"class":27,"line":2714},[25,10543,1676],{"class":244},[25,10545,10546,10548,10550],{"class":27,"line":2720},[25,10547,248],{"class":240},[25,10549,2083],{"class":31},[25,10551,2086],{"class":244},[25,10553,10554],{"class":27,"line":2726},[25,10555,1657],{"class":244},[25,10557,10558],{"class":27,"line":2731},[25,10559,10560],{"class":302},"    \u002F\u002F定义结构体变量\n",[25,10562,10563,10566,10568,10570],{"class":27,"line":8058},[25,10564,10565],{"class":244},"    Sanguo s1[",[25,10567,562],{"class":35},[25,10569,1183],{"class":244},[25,10571,5018],{"class":240},[25,10573,10574],{"class":27,"line":8082},[25,10575,2140],{"class":244},[25,10577,10578,10580,10582,10584,10586,10588,10590],{"class":27,"line":8087},[25,10579,5027],{"class":244},[25,10581,10062],{"class":45},[25,10583,621],{"class":244},[25,10585,1018],{"class":35},[25,10587,621],{"class":244},[25,10589,10071],{"class":45},[25,10591,5040],{"class":244},[25,10593,10594,10596,10598,10600,10602,10604,10606],{"class":27,"line":8093},[25,10595,5027],{"class":244},[25,10597,10080],{"class":45},[25,10599,621],{"class":244},[25,10601,993],{"class":35},[25,10603,621],{"class":244},[25,10605,10071],{"class":45},[25,10607,5040],{"class":244},[25,10609,10610,10612,10614,10616,10618,10620,10622],{"class":27,"line":8120},[25,10611,5027],{"class":244},[25,10613,10097],{"class":45},[25,10615,621],{"class":244},[25,10617,943],{"class":35},[25,10619,621],{"class":244},[25,10621,10071],{"class":45},[25,10623,5040],{"class":244},[25,10625,10626,10628,10630,10632,10634,10636,10638],{"class":27,"line":8125},[25,10627,5027],{"class":244},[25,10629,10114],{"class":45},[25,10631,621],{"class":244},[25,10633,968],{"class":35},[25,10635,621],{"class":244},[25,10637,10071],{"class":45},[25,10639,5040],{"class":244},[25,10641,10642,10644,10646,10648,10650,10652,10654],{"class":27,"line":8131},[25,10643,5027],{"class":244},[25,10645,10131],{"class":45},[25,10647,621],{"class":244},[25,10649,918],{"class":35},[25,10651,621],{"class":244},[25,10653,10140],{"class":45},[25,10655,5040],{"class":244},[25,10657,10658],{"class":27,"line":8143},[25,10659,5061],{"class":244},[25,10661,10662,10664,10666,10668,10671,10673,10676,10678],{"class":27,"line":8155},[25,10663,2095],{"class":240},[25,10665,7441],{"class":244},[25,10667,4313],{"class":240},[25,10669,10670],{"class":244},"(s1)",[25,10672,4319],{"class":240},[25,10674,10675],{"class":244},"(s1[",[25,10677,434],{"class":35},[25,10679,3966],{"class":244},[25,10681,10682,10685,10687,10690,10692,10695,10698,10700],{"class":27,"line":8167},[25,10683,10684],{"class":244},"    Sanguo ",[25,10686,698],{"class":240},[25,10688,10689],{"class":244},"s ",[25,10691,290],{"class":240},[25,10693,10694],{"class":240}," &",[25,10696,10697],{"class":244},"s1[",[25,10699,434],{"class":35},[25,10701,4800],{"class":244},[25,10703,10704],{"class":27,"line":9826},[25,10705,10706],{"class":302},"    \u002F\u002F排序前：\n",[25,10708,10709,10711,10713,10716,10718],{"class":27,"line":9851},[25,10710,6639],{"class":244},[25,10712,1286],{"class":240},[25,10714,10715],{"class":45}," \"排序前：\"",[25,10717,1556],{"class":240},[25,10719,8950],{"class":244},[25,10721,10722,10724],{"class":27,"line":9874},[25,10723,10025],{"class":31},[25,10725,10726],{"class":244},"(s,len);\n",[25,10728,10729],{"class":27,"line":9898},[25,10730,10731],{"class":302},"    \u002F\u002F调用排序函数\n",[25,10733,10734,10736],{"class":27,"line":9903},[25,10735,7708],{"class":31},[25,10737,10726],{"class":244},[25,10739,10740],{"class":27,"line":9908},[25,10741,10742],{"class":302},"    \u002F\u002F排序后\n",[25,10744,10745,10747,10749,10752,10754],{"class":27,"line":9913},[25,10746,6639],{"class":244},[25,10748,1286],{"class":240},[25,10750,10751],{"class":45}," \"排序后：\"",[25,10753,1556],{"class":240},[25,10755,8950],{"class":244},[25,10757,10758,10760],{"class":27,"line":9922},[25,10759,10025],{"class":31},[25,10761,10726],{"class":244},[25,10763,10764],{"class":27,"line":9927},[25,10765,1676],{"class":244},[99,10767,10768,10769,10771],{},"注意：使用指针时直接用传首地址**&s",[25,10770,434],{},"**",[159,10773,10774],{},"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":20,"searchDepth":39,"depth":39,"links":10776},[10777,10778,10779,10780,10781,10782,10783],{"id":7813,"depth":39,"text":7814},{"id":8175,"depth":39,"text":8176},{"id":8444,"depth":39,"text":8445},{"id":8609,"depth":39,"text":8610},{"id":8825,"depth":39,"text":8826},{"id":9146,"depth":39,"text":9147},{"id":9374,"depth":39,"text":9375},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7802,"description":7810},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10790,"title":10791,"body":10792,"description":20,"extension":165,"meta":12135,"navigation":167,"path":12136,"seo":12137,"stem":12138,"__hash__":12139},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10793,"toc":12129},[10794,10797,10801,10807,10821,10826,10829,10833,10840,10846,10849,10856,10862,10867,10870,10873,10876,11440,11443,11457,11461,11466,11482,11622,11625,11631,11634,11639,11647,11755,11758,11763,11766,11771,11774,11780,11783,12126],[10,10795,10791],{"id":10796},"_5程序内存模型",[182,10798,10800],{"id":10799},"_51内存分区模型","5.1内存分区模型",[99,10802,10803,10804],{},"C++程序在执行时，将内存大方向划分为",[392,10805,10806],{},"4个区域",[103,10808,10809,10812,10815,10818],{},[106,10810,10811],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[106,10813,10814],{},"全局区：存放全局变量和静态变量以及常量",[106,10816,10817],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[106,10819,10820],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[99,10822,10823],{},[392,10824,10825],{},"内存四区意义：",[99,10827,10828],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[210,10830,10832],{"id":10831},"_511程序运行前","5.1.1程序运行前",[99,10834,10835,10836,10839],{},"​\t在程序编译后，生成了exe可执行程序，",[392,10837,10838],{},"未执行该程序前","分为两个区域",[99,10841,10842,10843],{},"​\t",[392,10844,10845],{},"代码区：",[99,10847,10848],{},"​\t\t存放 CPU 执行的机器指令",[99,10850,10851,10852,10855],{},"​\t\t代码区是",[392,10853,10854],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[99,10857,10851,10858,10861],{},[392,10859,10860],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[99,10863,10842,10864],{},[392,10865,10866],{},"全局区：",[99,10868,10869],{},"​\t\t全局变量和静态变量存放在此.",[99,10871,10872],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[99,10874,10875],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[15,10877,10879],{"className":231,"code":10878,"language":233,"meta":20,"style":20},"\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",[22,10880,10881,10886,10899,10912,10916,10921,10936,10951,10955,10964,10968,10973,10986,10999,11003,11008,11034,11060,11064,11091,11117,11121,11126,11142,11157,11161,11187,11213,11217,11242,11267,11271,11297,11323,11327,11343,11358,11384,11410,11414,11424,11428,11436],{"__ignoreMap":20},[25,10882,10883],{"class":27,"line":28},[25,10884,10885],{"class":302},"\u002F\u002F全局变量\n",[25,10887,10888,10890,10893,10895,10897],{"class":27,"line":39},[25,10889,248],{"class":240},[25,10891,10892],{"class":244}," g_a ",[25,10894,290],{"class":240},[25,10896,2148],{"class":35},[25,10898,1403],{"class":244},[25,10900,10901,10903,10906,10908,10910],{"class":27,"line":51},[25,10902,248],{"class":240},[25,10904,10905],{"class":244}," g_b ",[25,10907,290],{"class":240},[25,10909,2148],{"class":35},[25,10911,1403],{"class":244},[25,10913,10914],{"class":27,"line":59},[25,10915,2510],{"emptyLinePlaceholder":167},[25,10917,10918],{"class":27,"line":67},[25,10919,10920],{"class":302},"\u002F\u002F全局常量\n",[25,10922,10923,10925,10927,10930,10932,10934],{"class":27,"line":75},[25,10924,6902],{"class":240},[25,10926,2492],{"class":240},[25,10928,10929],{"class":244}," c_g_a ",[25,10931,290],{"class":240},[25,10933,2148],{"class":35},[25,10935,1403],{"class":244},[25,10937,10938,10940,10942,10945,10947,10949],{"class":27,"line":83},[25,10939,6902],{"class":240},[25,10941,2492],{"class":240},[25,10943,10944],{"class":244}," c_g_b ",[25,10946,290],{"class":240},[25,10948,2148],{"class":35},[25,10950,1403],{"class":244},[25,10952,10953],{"class":27,"line":91},[25,10954,2510],{"emptyLinePlaceholder":167},[25,10956,10957,10959,10961],{"class":27,"line":1429},[25,10958,248],{"class":240},[25,10960,2083],{"class":31},[25,10962,10963],{"class":244},"() {\n",[25,10965,10966],{"class":27,"line":1441},[25,10967,2510],{"emptyLinePlaceholder":167},[25,10969,10970],{"class":27,"line":1723},[25,10971,10972],{"class":302},"    \u002F\u002F局部变量\n",[25,10974,10975,10977,10980,10982,10984],{"class":27,"line":1728},[25,10976,2095],{"class":240},[25,10978,10979],{"class":244}," a ",[25,10981,290],{"class":240},[25,10983,2148],{"class":35},[25,10985,1403],{"class":244},[25,10987,10988,10990,10993,10995,10997],{"class":27,"line":1734},[25,10989,2095],{"class":240},[25,10991,10992],{"class":244}," b ",[25,10994,290],{"class":240},[25,10996,2148],{"class":35},[25,10998,1403],{"class":244},[25,11000,11001],{"class":27,"line":1739},[25,11002,2510],{"emptyLinePlaceholder":167},[25,11004,11005],{"class":27,"line":1753},[25,11006,11007],{"class":302},"    \u002F\u002F打印地址\n",[25,11009,11010,11012,11014,11017,11019,11021,11023,11025,11027,11030,11032],{"class":27,"line":1758},[25,11011,6639],{"class":244},[25,11013,1286],{"class":240},[25,11015,11016],{"class":45}," \"局部变量a地址为： \"",[25,11018,1556],{"class":240},[25,11020,1769],{"class":244},[25,11022,248],{"class":240},[25,11024,672],{"class":244},[25,11026,596],{"class":240},[25,11028,11029],{"class":244},"a ",[25,11031,1286],{"class":240},[25,11033,8950],{"class":244},[25,11035,11036,11038,11040,11043,11045,11047,11049,11051,11053,11056,11058],{"class":27,"line":1764},[25,11037,6639],{"class":244},[25,11039,1286],{"class":240},[25,11041,11042],{"class":45}," \"局部变量b地址为： \"",[25,11044,1556],{"class":240},[25,11046,1769],{"class":244},[25,11048,248],{"class":240},[25,11050,672],{"class":244},[25,11052,596],{"class":240},[25,11054,11055],{"class":244},"b ",[25,11057,1286],{"class":240},[25,11059,8950],{"class":244},[25,11061,11062],{"class":27,"line":1785},[25,11063,2510],{"emptyLinePlaceholder":167},[25,11065,11066,11068,11070,11073,11075,11078,11080,11082,11084,11087,11089],{"class":27,"line":1790},[25,11067,6639],{"class":244},[25,11069,1286],{"class":240},[25,11071,11072],{"class":45}," \"全局变量g_a地址为： \"",[25,11074,1556],{"class":240},[25,11076,11077],{"class":244},"  (",[25,11079,248],{"class":240},[25,11081,672],{"class":244},[25,11083,596],{"class":240},[25,11085,11086],{"class":244},"g_a ",[25,11088,1286],{"class":240},[25,11090,8950],{"class":244},[25,11092,11093,11095,11097,11100,11102,11104,11106,11108,11110,11113,11115],{"class":27,"line":1804},[25,11094,6639],{"class":244},[25,11096,1286],{"class":240},[25,11098,11099],{"class":45}," \"全局变量g_b地址为： \"",[25,11101,1556],{"class":240},[25,11103,11077],{"class":244},[25,11105,248],{"class":240},[25,11107,672],{"class":244},[25,11109,596],{"class":240},[25,11111,11112],{"class":244},"g_b ",[25,11114,1286],{"class":240},[25,11116,8950],{"class":244},[25,11118,11119],{"class":27,"line":1809},[25,11120,2510],{"emptyLinePlaceholder":167},[25,11122,11123],{"class":27,"line":1838},[25,11124,11125],{"class":302},"    \u002F\u002F静态变量\n",[25,11127,11128,11131,11133,11136,11138,11140],{"class":27,"line":1843},[25,11129,11130],{"class":240},"    static",[25,11132,2492],{"class":240},[25,11134,11135],{"class":244}," s_a ",[25,11137,290],{"class":240},[25,11139,2148],{"class":35},[25,11141,1403],{"class":244},[25,11143,11144,11146,11148,11151,11153,11155],{"class":27,"line":1860},[25,11145,11130],{"class":240},[25,11147,2492],{"class":240},[25,11149,11150],{"class":244}," s_b ",[25,11152,290],{"class":240},[25,11154,2148],{"class":35},[25,11156,1403],{"class":244},[25,11158,11159],{"class":27,"line":1865},[25,11160,2510],{"emptyLinePlaceholder":167},[25,11162,11163,11165,11167,11170,11172,11174,11176,11178,11180,11183,11185],{"class":27,"line":1870},[25,11164,6639],{"class":244},[25,11166,1286],{"class":240},[25,11168,11169],{"class":45}," \"静态变量s_a地址为： \"",[25,11171,1556],{"class":240},[25,11173,1769],{"class":244},[25,11175,248],{"class":240},[25,11177,672],{"class":244},[25,11179,596],{"class":240},[25,11181,11182],{"class":244},"s_a ",[25,11184,1286],{"class":240},[25,11186,8950],{"class":244},[25,11188,11189,11191,11193,11196,11198,11200,11202,11204,11206,11209,11211],{"class":27,"line":1875},[25,11190,6639],{"class":244},[25,11192,1286],{"class":240},[25,11194,11195],{"class":45}," \"静态变量s_b地址为： \"",[25,11197,1556],{"class":240},[25,11199,1769],{"class":244},[25,11201,248],{"class":240},[25,11203,672],{"class":244},[25,11205,596],{"class":240},[25,11207,11208],{"class":244},"s_b ",[25,11210,1286],{"class":240},[25,11212,8950],{"class":244},[25,11214,11215],{"class":27,"line":1889},[25,11216,2510],{"emptyLinePlaceholder":167},[25,11218,11219,11221,11223,11226,11228,11230,11232,11234,11236,11238,11240],{"class":27,"line":1894},[25,11220,6639],{"class":244},[25,11222,1286],{"class":240},[25,11224,11225],{"class":45}," \"字符串常量地址为： \"",[25,11227,1556],{"class":240},[25,11229,1769],{"class":244},[25,11231,248],{"class":240},[25,11233,672],{"class":244},[25,11235,596],{"class":240},[25,11237,1303],{"class":45},[25,11239,1556],{"class":240},[25,11241,8950],{"class":244},[25,11243,11244,11246,11248,11250,11252,11254,11256,11258,11260,11263,11265],{"class":27,"line":2687},[25,11245,6639],{"class":244},[25,11247,1286],{"class":240},[25,11249,11225],{"class":45},[25,11251,1556],{"class":240},[25,11253,1769],{"class":244},[25,11255,248],{"class":240},[25,11257,672],{"class":244},[25,11259,596],{"class":240},[25,11261,11262],{"class":45},"\"hello world1\"",[25,11264,1556],{"class":240},[25,11266,8950],{"class":244},[25,11268,11269],{"class":27,"line":2701},[25,11270,2510],{"emptyLinePlaceholder":167},[25,11272,11273,11275,11277,11280,11282,11284,11286,11288,11290,11293,11295],{"class":27,"line":2709},[25,11274,6639],{"class":244},[25,11276,1286],{"class":240},[25,11278,11279],{"class":45}," \"全局常量c_g_a地址为： \"",[25,11281,1556],{"class":240},[25,11283,1769],{"class":244},[25,11285,248],{"class":240},[25,11287,672],{"class":244},[25,11289,596],{"class":240},[25,11291,11292],{"class":244},"c_g_a ",[25,11294,1286],{"class":240},[25,11296,8950],{"class":244},[25,11298,11299,11301,11303,11306,11308,11310,11312,11314,11316,11319,11321],{"class":27,"line":2714},[25,11300,6639],{"class":244},[25,11302,1286],{"class":240},[25,11304,11305],{"class":45}," \"全局常量c_g_b地址为： \"",[25,11307,1556],{"class":240},[25,11309,1769],{"class":244},[25,11311,248],{"class":240},[25,11313,672],{"class":244},[25,11315,596],{"class":240},[25,11317,11318],{"class":244},"c_g_b ",[25,11320,1286],{"class":240},[25,11322,8950],{"class":244},[25,11324,11325],{"class":27,"line":2720},[25,11326,2510],{"emptyLinePlaceholder":167},[25,11328,11329,11332,11334,11337,11339,11341],{"class":27,"line":2726},[25,11330,11331],{"class":240},"    const",[25,11333,2492],{"class":240},[25,11335,11336],{"class":244}," c_l_a ",[25,11338,290],{"class":240},[25,11340,2148],{"class":35},[25,11342,1403],{"class":244},[25,11344,11345,11347,11349,11352,11354,11356],{"class":27,"line":2731},[25,11346,11331],{"class":240},[25,11348,2492],{"class":240},[25,11350,11351],{"class":244}," c_l_b ",[25,11353,290],{"class":240},[25,11355,2148],{"class":35},[25,11357,1403],{"class":244},[25,11359,11360,11362,11364,11367,11369,11371,11373,11375,11377,11380,11382],{"class":27,"line":8058},[25,11361,6639],{"class":244},[25,11363,1286],{"class":240},[25,11365,11366],{"class":45}," \"局部常量c_l_a地址为： \"",[25,11368,1556],{"class":240},[25,11370,1769],{"class":244},[25,11372,248],{"class":240},[25,11374,672],{"class":244},[25,11376,596],{"class":240},[25,11378,11379],{"class":244},"c_l_a ",[25,11381,1286],{"class":240},[25,11383,8950],{"class":244},[25,11385,11386,11388,11390,11393,11395,11397,11399,11401,11403,11406,11408],{"class":27,"line":8082},[25,11387,6639],{"class":244},[25,11389,1286],{"class":240},[25,11391,11392],{"class":45}," \"局部常量c_l_b地址为： \"",[25,11394,1556],{"class":240},[25,11396,1769],{"class":244},[25,11398,248],{"class":240},[25,11400,672],{"class":244},[25,11402,596],{"class":240},[25,11404,11405],{"class":244},"c_l_b ",[25,11407,1286],{"class":240},[25,11409,8950],{"class":244},[25,11411,11412],{"class":27,"line":8087},[25,11413,2510],{"emptyLinePlaceholder":167},[25,11415,11416,11418,11420,11422],{"class":27,"line":8093},[25,11417,2413],{"class":31},[25,11419,245],{"class":244},[25,11421,2418],{"class":45},[25,11423,2829],{"class":244},[25,11425,11426],{"class":27,"line":8120},[25,11427,2510],{"emptyLinePlaceholder":167},[25,11429,11430,11432,11434],{"class":27,"line":8125},[25,11431,4200],{"class":240},[25,11433,4203],{"class":35},[25,11435,1403],{"class":244},[25,11437,11438],{"class":27,"line":8131},[25,11439,1676],{"class":244},[99,11441,11442],{},"总结：",[103,11444,11445,11448,11451,11454],{},[106,11446,11447],{},"c++中程序运行前分为全局区和代码区",[106,11449,11450],{},"代码区特点是共享和只读",[106,11452,11453],{},"全局区中存放全局变量、静态变量、常量",[106,11455,11456],{},"常量区中存放const修饰的全局常量和字符串常量",[210,11458,11460],{"id":11459},"_512程序运行后","5.1.2程序运行后",[194,11462,11463],{},[106,11464,11465],{},"栈区：",[103,11467,11468,11475],{},[106,11469,11470,11471,11474],{},"由编译器自动分配释放, 存放",[392,11472,11473],{},"函数的参数值,局部变量","等",[106,11476,11477,11478,11481],{},"注意事项：",[392,11479,11480],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[15,11483,11485],{"className":231,"code":11484,"language":233,"meta":20,"style":20},"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",[22,11486,11487,11498,11502,11517,11529,11533,11537,11545,11550,11565,11583,11600,11610,11618],{"__ignoreMap":20},[25,11488,11489,11491,11493,11496],{"class":27,"line":28},[25,11490,248],{"class":240},[25,11492,6628],{"class":240},[25,11494,11495],{"class":31}," func",[25,11497,2086],{"class":244},[25,11499,11500],{"class":27,"line":39},[25,11501,1657],{"class":244},[25,11503,11504,11506,11508,11510,11512,11514],{"class":27,"line":51},[25,11505,2095],{"class":240},[25,11507,10979],{"class":244},[25,11509,290],{"class":240},[25,11511,2148],{"class":35},[25,11513,299],{"class":244},[25,11515,11516],{"class":302}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[25,11518,11519,11521,11523,11526],{"class":27,"line":59},[25,11520,4200],{"class":240},[25,11522,10694],{"class":240},[25,11524,11525],{"class":244},"a;",[25,11527,11528],{"class":302}," \u002F\u002F放回局部变量的地址\n",[25,11530,11531],{"class":27,"line":67},[25,11532,1676],{"class":244},[25,11534,11535],{"class":27,"line":75},[25,11536,2510],{"emptyLinePlaceholder":167},[25,11538,11539,11541,11543],{"class":27,"line":83},[25,11540,248],{"class":240},[25,11542,2083],{"class":31},[25,11544,10963],{"class":244},[25,11546,11547],{"class":27,"line":91},[25,11548,11549],{"class":302},"    \u002F\u002F接受func的返回值\n",[25,11551,11552,11554,11556,11559,11561,11563],{"class":27,"line":1429},[25,11553,2095],{"class":240},[25,11555,6628],{"class":240},[25,11557,11558],{"class":244},"p ",[25,11560,290],{"class":240},[25,11562,11495],{"class":31},[25,11564,5746],{"class":244},[25,11566,11567,11569,11571,11573,11575,11577,11580],{"class":27,"line":1441},[25,11568,6639],{"class":244},[25,11570,1286],{"class":240},[25,11572,6628],{"class":240},[25,11574,11558],{"class":244},[25,11576,1286],{"class":240},[25,11578,11579],{"class":244}," endl;",[25,11581,11582],{"class":302}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[25,11584,11585,11587,11589,11591,11593,11595,11597],{"class":27,"line":1723},[25,11586,6639],{"class":244},[25,11588,1286],{"class":240},[25,11590,6628],{"class":240},[25,11592,11558],{"class":244},[25,11594,1286],{"class":240},[25,11596,11579],{"class":244},[25,11598,11599],{"class":302}," \u002F\u002F第二次这个数据不再保留\n",[25,11601,11602,11604,11606,11608],{"class":27,"line":1728},[25,11603,2413],{"class":31},[25,11605,245],{"class":244},[25,11607,2418],{"class":45},[25,11609,2829],{"class":244},[25,11611,11612,11614,11616],{"class":27,"line":1734},[25,11613,4200],{"class":240},[25,11615,4203],{"class":35},[25,11617,1403],{"class":244},[25,11619,11620],{"class":27,"line":1739},[25,11621,1676],{"class":244},[99,11623,11624],{},"输出结果：",[99,11626,11627],{},[155,11628],{"alt":11629,"src":11630},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[99,11632,11633],{},"总结：不要返回局部变量的地址",[194,11635,11636],{"start":39},[106,11637,11638],{},"堆区",[103,11640,11641,11644],{},[106,11642,11643],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[106,11645,11646],{},"在c++中主要利用new在堆区开辟内存",[15,11648,11650],{"className":231,"code":11649,"language":233,"meta":20,"style":20},"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",[22,11651,11652,11667,11671,11676,11697,11704,11708,11716,11720,11725,11739,11751],{"__ignoreMap":20},[25,11653,11654,11656,11659,11662,11664],{"class":27,"line":28},[25,11655,248],{"class":240},[25,11657,11658],{"class":240},"  *",[25,11660,11661],{"class":31},"func",[25,11663,2537],{"class":244},[25,11665,11666],{"class":302},"  \u002F\u002F函数返回指针\n",[25,11668,11669],{"class":27,"line":39},[25,11670,1657],{"class":244},[25,11672,11673],{"class":27,"line":51},[25,11674,11675],{"class":302},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[25,11677,11678,11680,11682,11684,11686,11689,11691,11693,11695],{"class":27,"line":59},[25,11679,4257],{"class":240},[25,11681,6628],{"class":240},[25,11683,99],{"class":244},[25,11685,290],{"class":240},[25,11687,11688],{"class":240}," new",[25,11690,2492],{"class":240},[25,11692,245],{"class":244},[25,11694,689],{"class":35},[25,11696,2829],{"class":244},[25,11698,11699,11701],{"class":27,"line":67},[25,11700,4491],{"class":240},[25,11702,11703],{"class":244}," p;\n",[25,11705,11706],{"class":27,"line":75},[25,11707,1676],{"class":244},[25,11709,11710,11712,11714],{"class":27,"line":83},[25,11711,248],{"class":240},[25,11713,2083],{"class":31},[25,11715,2086],{"class":244},[25,11717,11718],{"class":27,"line":91},[25,11719,1657],{"class":244},[25,11721,11722],{"class":27,"line":1429},[25,11723,11724],{"class":302},"    \u002F\u002F在堆区开辟数据\n",[25,11726,11727,11729,11731,11733,11735,11737],{"class":27,"line":1441},[25,11728,2095],{"class":240},[25,11730,6628],{"class":240},[25,11732,99],{"class":244},[25,11734,290],{"class":240},[25,11736,11661],{"class":31},[25,11738,5746],{"class":244},[25,11740,11741,11743,11745,11747,11749],{"class":27,"line":1723},[25,11742,1662],{"class":244},[25,11744,6529],{"class":240},[25,11746,99],{"class":244},[25,11748,1286],{"class":240},[25,11750,1308],{"class":244},[25,11752,11753],{"class":27,"line":1728},[25,11754,1676],{"class":244},[99,11756,11757],{},"图片展示：",[99,11759,11760],{},[155,11761],{"alt":11629,"src":11762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[99,11764,11765],{},"堆区内存由程序员管生死！！！",[194,11767,11768],{"start":51},[106,11769,11770],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[99,11772,11773],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[99,11775,11776,11777],{},"​语法：",[22,11778,11779],{}," new 数据类型",[99,11781,11782],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[15,11784,11786],{"className":231,"code":11785,"language":233,"meta":20,"style":20},"\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",[22,11787,11788,11793,11803,11807,11812,11817,11839,11843,11851,11855,11869,11881,11893,11905,11910,11915,11926,11930,11935,11943,11947,11952,11974,12000,12004,12022,12026,12052,12056,12068,12072,12077,12082,12090,12094,12098,12106,12110,12116,12122],{"__ignoreMap":20},[25,11789,11790],{"class":27,"line":28},[25,11791,11792],{"class":302},"\u002F\u002F1.new的基本语法\n",[25,11794,11795,11797,11799,11801],{"class":27,"line":39},[25,11796,248],{"class":240},[25,11798,6628],{"class":240},[25,11800,11661],{"class":31},[25,11802,2086],{"class":244},[25,11804,11805],{"class":27,"line":51},[25,11806,1657],{"class":244},[25,11808,11809],{"class":27,"line":59},[25,11810,11811],{"class":302},"    \u002F\u002F在堆区创建整型数据\n",[25,11813,11814],{"class":27,"line":67},[25,11815,11816],{"class":302},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[25,11818,11819,11821,11823,11825,11828,11830,11832,11834,11836],{"class":27,"line":75},[25,11820,2095],{"class":240},[25,11822,6628],{"class":240},[25,11824,99],{"class":244},[25,11826,11827],{"class":240},"=new",[25,11829,2492],{"class":240},[25,11831,245],{"class":244},[25,11833,689],{"class":35},[25,11835,6076],{"class":244},[25,11837,11838],{"class":302},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[25,11840,11841],{"class":27,"line":83},[25,11842,1676],{"class":244},[25,11844,11845,11847,11849],{"class":27,"line":91},[25,11846,5474],{"class":240},[25,11848,5698],{"class":31},[25,11850,2086],{"class":244},[25,11852,11853],{"class":27,"line":1429},[25,11854,1657],{"class":244},[25,11856,11857,11859,11861,11863,11865,11867],{"class":27,"line":1441},[25,11858,2095],{"class":240},[25,11860,6628],{"class":240},[25,11862,99],{"class":244},[25,11864,290],{"class":240},[25,11866,11661],{"class":31},[25,11868,5746],{"class":244},[25,11870,11871,11873,11875,11877,11879],{"class":27,"line":1723},[25,11872,1662],{"class":244},[25,11874,6529],{"class":240},[25,11876,99],{"class":244},[25,11878,1286],{"class":240},[25,11880,1308],{"class":244},[25,11882,11883,11885,11887,11889,11891],{"class":27,"line":1728},[25,11884,1662],{"class":244},[25,11886,6529],{"class":240},[25,11888,99],{"class":244},[25,11890,1286],{"class":240},[25,11892,1308],{"class":244},[25,11894,11895,11897,11899,11901,11903],{"class":27,"line":1734},[25,11896,1662],{"class":244},[25,11898,6529],{"class":240},[25,11900,99],{"class":244},[25,11902,1286],{"class":240},[25,11904,1308],{"class":244},[25,11906,11907],{"class":27,"line":1739},[25,11908,11909],{"class":302},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[25,11911,11912],{"class":27,"line":1753},[25,11913,11914],{"class":302},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[25,11916,11917,11920,11923],{"class":27,"line":1758},[25,11918,11919],{"class":240},"    delete",[25,11921,11922],{"class":244}," p;",[25,11924,11925],{"class":302},"\u002F\u002F删除这块地址\n",[25,11927,11928],{"class":27,"line":1764},[25,11929,1676],{"class":244},[25,11931,11932],{"class":27,"line":1785},[25,11933,11934],{"class":302},"\u002F\u002F2.在堆区利用new开辟数组\n",[25,11936,11937,11939,11941],{"class":27,"line":1790},[25,11938,5474],{"class":240},[25,11940,5767],{"class":31},[25,11942,2086],{"class":244},[25,11944,11945],{"class":27,"line":1804},[25,11946,1657],{"class":244},[25,11948,11949],{"class":27,"line":1809},[25,11950,11951],{"class":302},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[25,11953,11954,11956,11958,11960,11962,11964,11966,11968,11971],{"class":27,"line":1838},[25,11955,2095],{"class":240},[25,11957,6628],{"class":240},[25,11959,3990],{"class":244},[25,11961,11827],{"class":240},[25,11963,2492],{"class":240},[25,11965,1133],{"class":244},[25,11967,689],{"class":35},[25,11969,11970],{"class":244},"];",[25,11972,11973],{"class":302},"\u002F\u002F10代表数组有10个元素\n",[25,11975,11976,11978,11980,11982,11984,11986,11988,11990,11992,11994,11996,11998],{"class":27,"line":1843},[25,11977,3311],{"class":240},[25,11979,1769],{"class":244},[25,11981,248],{"class":240},[25,11983,3142],{"class":244},[25,11985,290],{"class":240},[25,11987,434],{"class":35},[25,11989,3149],{"class":244},[25,11991,1153],{"class":240},[25,11993,689],{"class":35},[25,11995,3149],{"class":244},[25,11997,2402],{"class":240},[25,11999,251],{"class":244},[25,12001,12002],{"class":27,"line":1860},[25,12003,2140],{"class":244},[25,12005,12006,12009,12011,12013,12015,12017,12019],{"class":27,"line":1865},[25,12007,12008],{"class":244},"        arr[i]",[25,12010,290],{"class":240},[25,12012,684],{"class":244},[25,12014,724],{"class":240},[25,12016,554],{"class":35},[25,12018,299],{"class":244},[25,12020,12021],{"class":302},"\u002F\u002F给10个元素赋值100～109\n",[25,12023,12024],{"class":27,"line":1870},[25,12025,2297],{"class":244},[25,12027,12028,12030,12032,12034,12036,12038,12040,12042,12044,12046,12048,12050],{"class":27,"line":1875},[25,12029,3311],{"class":240},[25,12031,1769],{"class":244},[25,12033,248],{"class":240},[25,12035,3142],{"class":244},[25,12037,290],{"class":240},[25,12039,434],{"class":35},[25,12041,3149],{"class":244},[25,12043,1153],{"class":240},[25,12045,689],{"class":35},[25,12047,3149],{"class":244},[25,12049,2402],{"class":240},[25,12051,251],{"class":244},[25,12053,12054],{"class":27,"line":1889},[25,12055,2140],{"class":244},[25,12057,12058,12060,12062,12064,12066],{"class":27,"line":1894},[25,12059,3561],{"class":244},[25,12061,1286],{"class":240},[25,12063,4464],{"class":244},[25,12065,1286],{"class":240},[25,12067,1308],{"class":244},[25,12069,12070],{"class":27,"line":2687},[25,12071,2297],{"class":244},[25,12073,12074],{"class":27,"line":2701},[25,12075,12076],{"class":302},"    \u002F\u002F释放堆区数组\n",[25,12078,12079],{"class":27,"line":2709},[25,12080,12081],{"class":302},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[25,12083,12084,12087],{"class":27,"line":2714},[25,12085,12086],{"class":240},"    delete[]",[25,12088,12089],{"class":244}," arr;\n",[25,12091,12092],{"class":27,"line":2720},[25,12093,1676],{"class":244},[25,12095,12096],{"class":27,"line":2726},[25,12097,2510],{"emptyLinePlaceholder":167},[25,12099,12100,12102,12104],{"class":27,"line":2731},[25,12101,248],{"class":240},[25,12103,2083],{"class":31},[25,12105,2086],{"class":244},[25,12107,12108],{"class":27,"line":8058},[25,12109,1657],{"class":244},[25,12111,12112,12114],{"class":27,"line":8082},[25,12113,5743],{"class":31},[25,12115,5746],{"class":244},[25,12117,12118,12120],{"class":27,"line":8087},[25,12119,5812],{"class":31},[25,12121,5746],{"class":244},[25,12123,12124],{"class":27,"line":8093},[25,12125,1676],{"class":244},[159,12127,12128],{},"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":20,"searchDepth":39,"depth":39,"links":12130},[12131],{"id":10799,"depth":39,"text":10800,"children":12132},[12133,12134],{"id":10831,"depth":51,"text":10832},{"id":11459,"depth":51,"text":11460},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10791,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12141,"title":12142,"body":12143,"description":20,"extension":165,"meta":13624,"navigation":167,"path":13625,"seo":13626,"stem":13627,"__hash__":13628},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12144,"toc":13616},[12145,12148,12152,12155,12158,12327,12331,12336,12353,12358,12510,12514,12517,12520,12914,12918,12921,12926,12929,13241,13245,13251,13411,13413,13421,13425,13428,13435,13613],[10,12146,12142],{"id":12147},"_6引用",[182,12149,12151],{"id":12150},"_61引用基本用法","6.1引用基本用法",[99,12153,12154],{},"引用的本质：给变量起别名",[99,12156,12157],{},"语法：数据类型 &别名=原名",[15,12159,12161],{"className":231,"code":12160,"language":233,"meta":20,"style":20},"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",[22,12162,12163,12171,12175,12187,12199,12203,12222,12241,12245,12256,12260,12279,12297,12301,12311,12315,12323],{"__ignoreMap":20},[25,12164,12165,12167,12169],{"class":27,"line":28},[25,12166,248],{"class":240},[25,12168,2083],{"class":31},[25,12170,10963],{"class":244},[25,12172,12173],{"class":27,"line":39},[25,12174,2510],{"emptyLinePlaceholder":167},[25,12176,12177,12179,12181,12183,12185],{"class":27,"line":51},[25,12178,2095],{"class":240},[25,12180,10979],{"class":244},[25,12182,290],{"class":240},[25,12184,2148],{"class":35},[25,12186,1403],{"class":244},[25,12188,12189,12191,12193,12195,12197],{"class":27,"line":59},[25,12190,2095],{"class":240},[25,12192,10694],{"class":240},[25,12194,11055],{"class":244},[25,12196,290],{"class":240},[25,12198,1544],{"class":244},[25,12200,12201],{"class":27,"line":67},[25,12202,2510],{"emptyLinePlaceholder":167},[25,12204,12205,12207,12209,12212,12214,12216,12218,12220],{"class":27,"line":75},[25,12206,6639],{"class":244},[25,12208,1286],{"class":240},[25,12210,12211],{"class":45}," \"a = \"",[25,12213,1556],{"class":240},[25,12215,10979],{"class":244},[25,12217,1286],{"class":240},[25,12219,11579],{"class":244},[25,12221,7378],{"class":302},[25,12223,12224,12226,12228,12231,12233,12235,12237,12239],{"class":27,"line":83},[25,12225,6639],{"class":244},[25,12227,1286],{"class":240},[25,12229,12230],{"class":45}," \"b = \"",[25,12232,1556],{"class":240},[25,12234,10992],{"class":244},[25,12236,1286],{"class":240},[25,12238,11579],{"class":244},[25,12240,7378],{"class":302},[25,12242,12243],{"class":27,"line":91},[25,12244,2510],{"emptyLinePlaceholder":167},[25,12246,12247,12250,12252,12254],{"class":27,"line":1429},[25,12248,12249],{"class":244},"    b ",[25,12251,290],{"class":240},[25,12253,5864],{"class":35},[25,12255,1403],{"class":244},[25,12257,12258],{"class":27,"line":1441},[25,12259,2510],{"emptyLinePlaceholder":167},[25,12261,12262,12264,12266,12268,12270,12272,12274,12276],{"class":27,"line":1723},[25,12263,6639],{"class":244},[25,12265,1286],{"class":240},[25,12267,12211],{"class":45},[25,12269,1556],{"class":240},[25,12271,10979],{"class":244},[25,12273,1286],{"class":240},[25,12275,11579],{"class":244},[25,12277,12278],{"class":302},"\u002F\u002F100\n",[25,12280,12281,12283,12285,12287,12289,12291,12293,12295],{"class":27,"line":1728},[25,12282,6639],{"class":244},[25,12284,1286],{"class":240},[25,12286,12230],{"class":45},[25,12288,1556],{"class":240},[25,12290,10992],{"class":244},[25,12292,1286],{"class":240},[25,12294,11579],{"class":244},[25,12296,12278],{"class":302},[25,12298,12299],{"class":27,"line":1734},[25,12300,2510],{"emptyLinePlaceholder":167},[25,12302,12303,12305,12307,12309],{"class":27,"line":1739},[25,12304,2413],{"class":31},[25,12306,245],{"class":244},[25,12308,2418],{"class":45},[25,12310,2829],{"class":244},[25,12312,12313],{"class":27,"line":1753},[25,12314,2510],{"emptyLinePlaceholder":167},[25,12316,12317,12319,12321],{"class":27,"line":1758},[25,12318,4200],{"class":240},[25,12320,4203],{"class":35},[25,12322,1403],{"class":244},[25,12324,12325],{"class":27,"line":1764},[25,12326,1676],{"class":244},[182,12328,12330],{"id":12329},"_62引用的注意事项","6.2引用的注意事项",[194,12332,12333],{},[106,12334,12335],{},"引用必须要初始化",[15,12337,12339],{"className":231,"code":12338,"language":233,"meta":20,"style":20},"int &b;\u002F\u002F非常错误！\n",[22,12340,12341],{"__ignoreMap":20},[25,12342,12343,12345,12347,12350],{"class":27,"line":28},[25,12344,248],{"class":240},[25,12346,10694],{"class":240},[25,12348,12349],{"class":244},"b;",[25,12351,12352],{"class":302},"\u002F\u002F非常错误！\n",[194,12354,12355],{"start":39},[106,12356,12357],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[15,12359,12361],{"className":231,"code":12360,"language":233,"meta":20,"style":20},"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",[22,12362,12363,12371,12383,12395,12403,12419,12432,12450,12468,12488,12498,12506],{"__ignoreMap":20},[25,12364,12365,12367,12369],{"class":27,"line":28},[25,12366,248],{"class":240},[25,12368,2083],{"class":31},[25,12370,10963],{"class":244},[25,12372,12373,12375,12377,12379,12381],{"class":27,"line":39},[25,12374,2095],{"class":240},[25,12376,10979],{"class":244},[25,12378,290],{"class":240},[25,12380,2148],{"class":35},[25,12382,1403],{"class":244},[25,12384,12385,12387,12389,12391,12393],{"class":27,"line":51},[25,12386,2095],{"class":240},[25,12388,10992],{"class":244},[25,12390,290],{"class":240},[25,12392,9060],{"class":35},[25,12394,1403],{"class":244},[25,12396,12397,12400],{"class":27,"line":59},[25,12398,12399],{"class":302},"    \u002F\u002Fint &c;",[25,12401,12402],{"class":302}," \u002F\u002F错误，引用必须初始化\n",[25,12404,12405,12407,12409,12411,12413,12416],{"class":27,"line":67},[25,12406,2095],{"class":240},[25,12408,10694],{"class":240},[25,12410,3056],{"class":244},[25,12412,290],{"class":240},[25,12414,12415],{"class":244}," a;",[25,12417,12418],{"class":302}," \u002F\u002F一旦初始化后，就不可以更改\n",[25,12420,12421,12424,12426,12429],{"class":27,"line":75},[25,12422,12423],{"class":244},"    c ",[25,12425,290],{"class":240},[25,12427,12428],{"class":244}," b;",[25,12430,12431],{"class":302}," \u002F\u002F这是赋值操作，不是更改引用\n",[25,12433,12434,12436,12438,12440,12442,12444,12446,12448],{"class":27,"line":83},[25,12435,6639],{"class":244},[25,12437,1286],{"class":240},[25,12439,12211],{"class":45},[25,12441,1556],{"class":240},[25,12443,10979],{"class":244},[25,12445,1286],{"class":240},[25,12447,11579],{"class":244},[25,12449,7363],{"class":302},[25,12451,12452,12454,12456,12458,12460,12462,12464,12466],{"class":27,"line":91},[25,12453,6639],{"class":244},[25,12455,1286],{"class":240},[25,12457,12230],{"class":45},[25,12459,1556],{"class":240},[25,12461,10992],{"class":244},[25,12463,1286],{"class":240},[25,12465,11579],{"class":244},[25,12467,7363],{"class":302},[25,12469,12470,12472,12474,12477,12479,12482,12484,12486],{"class":27,"line":1429},[25,12471,6639],{"class":244},[25,12473,1286],{"class":240},[25,12475,12476],{"class":45}," \"c = \"",[25,12478,1556],{"class":240},[25,12480,12481],{"class":244}," c ",[25,12483,1286],{"class":240},[25,12485,11579],{"class":244},[25,12487,7363],{"class":302},[25,12489,12490,12492,12494,12496],{"class":27,"line":1441},[25,12491,2413],{"class":31},[25,12493,245],{"class":244},[25,12495,2418],{"class":45},[25,12497,2829],{"class":244},[25,12499,12500,12502,12504],{"class":27,"line":1723},[25,12501,4200],{"class":240},[25,12503,4203],{"class":35},[25,12505,1403],{"class":244},[25,12507,12508],{"class":27,"line":1728},[25,12509,1676],{"class":244},[182,12511,12513],{"id":12512},"_63引用做函数参数","6.3引用做函数参数",[99,12515,12516],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[99,12518,12519],{},"优点：可以简化指针修改实参",[15,12521,12523],{"className":231,"code":12522,"language":233,"meta":20,"style":20},"\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",[22,12524,12525,12530,12553,12564,12574,12583,12587,12591,12596,12618,12630,12642,12652,12656,12660,12665,12687,12697,12705,12713,12717,12721,12729,12733,12745,12757,12761,12772,12798,12802,12822,12846,12850,12860,12884,12888,12898,12902,12910],{"__ignoreMap":20},[25,12526,12527],{"class":27,"line":28},[25,12528,12529],{"class":302},"\u002F\u002F1. 值传递\n",[25,12531,12532,12534,12537,12539,12541,12543,12546,12548,12550],{"class":27,"line":39},[25,12533,5474],{"class":240},[25,12535,12536],{"class":31}," mySwap01",[25,12538,245],{"class":244},[25,12540,248],{"class":240},[25,12542,1510],{"class":5326},[25,12544,12545],{"class":244},", ",[25,12547,248],{"class":240},[25,12549,2943],{"class":5326},[25,12551,12552],{"class":244},") {\n",[25,12554,12555,12557,12560,12562],{"class":27,"line":51},[25,12556,2095],{"class":240},[25,12558,12559],{"class":244}," temp ",[25,12561,290],{"class":240},[25,12563,1544],{"class":244},[25,12565,12566,12569,12571],{"class":27,"line":59},[25,12567,12568],{"class":244},"    a ",[25,12570,290],{"class":240},[25,12572,12573],{"class":244}," b;\n",[25,12575,12576,12578,12580],{"class":27,"line":67},[25,12577,12249],{"class":244},[25,12579,290],{"class":240},[25,12581,12582],{"class":244}," temp;\n",[25,12584,12585],{"class":27,"line":75},[25,12586,1676],{"class":244},[25,12588,12589],{"class":27,"line":83},[25,12590,2510],{"emptyLinePlaceholder":167},[25,12592,12593],{"class":27,"line":91},[25,12594,12595],{"class":302},"\u002F\u002F2. 地址传递\n",[25,12597,12598,12600,12603,12605,12608,12610,12612,12614,12616],{"class":27,"line":1429},[25,12599,5474],{"class":240},[25,12601,12602],{"class":31}," mySwap02",[25,12604,245],{"class":244},[25,12606,12607],{"class":240},"int*",[25,12609,1510],{"class":5326},[25,12611,12545],{"class":244},[25,12613,12607],{"class":240},[25,12615,2943],{"class":5326},[25,12617,12552],{"class":244},[25,12619,12620,12622,12624,12626,12628],{"class":27,"line":1441},[25,12621,2095],{"class":240},[25,12623,12559],{"class":244},[25,12625,290],{"class":240},[25,12627,6628],{"class":240},[25,12629,6307],{"class":244},[25,12631,12632,12634,12636,12638,12640],{"class":27,"line":1723},[25,12633,6513],{"class":240},[25,12635,11029],{"class":244},[25,12637,290],{"class":240},[25,12639,6628],{"class":240},[25,12641,6179],{"class":244},[25,12643,12644,12646,12648,12650],{"class":27,"line":1728},[25,12645,6513],{"class":240},[25,12647,11055],{"class":244},[25,12649,290],{"class":240},[25,12651,12582],{"class":244},[25,12653,12654],{"class":27,"line":1734},[25,12655,1676],{"class":244},[25,12657,12658],{"class":27,"line":1739},[25,12659,2510],{"emptyLinePlaceholder":167},[25,12661,12662],{"class":27,"line":1753},[25,12663,12664],{"class":302},"\u002F\u002F3. 引用传递\n",[25,12666,12667,12669,12672,12674,12677,12679,12681,12683,12685],{"class":27,"line":1758},[25,12668,5474],{"class":240},[25,12670,12671],{"class":31}," mySwap03",[25,12673,245],{"class":244},[25,12675,12676],{"class":240},"int&",[25,12678,1510],{"class":5326},[25,12680,12545],{"class":244},[25,12682,12676],{"class":240},[25,12684,2943],{"class":5326},[25,12686,12552],{"class":244},[25,12688,12689,12691,12693,12695],{"class":27,"line":1764},[25,12690,2095],{"class":240},[25,12692,12559],{"class":244},[25,12694,290],{"class":240},[25,12696,1544],{"class":244},[25,12698,12699,12701,12703],{"class":27,"line":1785},[25,12700,12568],{"class":244},[25,12702,290],{"class":240},[25,12704,12573],{"class":244},[25,12706,12707,12709,12711],{"class":27,"line":1790},[25,12708,12249],{"class":244},[25,12710,290],{"class":240},[25,12712,12582],{"class":244},[25,12714,12715],{"class":27,"line":1804},[25,12716,1676],{"class":244},[25,12718,12719],{"class":27,"line":1809},[25,12720,2510],{"emptyLinePlaceholder":167},[25,12722,12723,12725,12727],{"class":27,"line":1838},[25,12724,248],{"class":240},[25,12726,2083],{"class":31},[25,12728,10963],{"class":244},[25,12730,12731],{"class":27,"line":1843},[25,12732,2510],{"emptyLinePlaceholder":167},[25,12734,12735,12737,12739,12741,12743],{"class":27,"line":1860},[25,12736,2095],{"class":240},[25,12738,10979],{"class":244},[25,12740,290],{"class":240},[25,12742,2148],{"class":35},[25,12744,1403],{"class":244},[25,12746,12747,12749,12751,12753,12755],{"class":27,"line":1865},[25,12748,2095],{"class":240},[25,12750,10992],{"class":244},[25,12752,290],{"class":240},[25,12754,9060],{"class":35},[25,12756,1403],{"class":244},[25,12758,12759],{"class":27,"line":1870},[25,12760,2510],{"emptyLinePlaceholder":167},[25,12762,12763,12766,12769],{"class":27,"line":1875},[25,12764,12765],{"class":31},"    mySwap01",[25,12767,12768],{"class":244},"(a, b);",[25,12770,12771],{"class":302},"\u002F\u002F值传递，形参不会修饰实参\n",[25,12773,12774,12776,12778,12781,12783,12785,12787,12790,12792,12794,12796],{"class":27,"line":1889},[25,12775,6639],{"class":244},[25,12777,1286],{"class":240},[25,12779,12780],{"class":45}," \"a:\"",[25,12782,1556],{"class":240},[25,12784,10979],{"class":244},[25,12786,1286],{"class":240},[25,12788,12789],{"class":45}," \" b:\"",[25,12791,1556],{"class":240},[25,12793,10992],{"class":244},[25,12795,1286],{"class":240},[25,12797,8950],{"class":244},[25,12799,12800],{"class":27,"line":1894},[25,12801,2510],{"emptyLinePlaceholder":167},[25,12803,12804,12807,12809,12811,12814,12816,12819],{"class":27,"line":2687},[25,12805,12806],{"class":31},"    mySwap02",[25,12808,245],{"class":244},[25,12810,596],{"class":240},[25,12812,12813],{"class":244},"a, ",[25,12815,596],{"class":240},[25,12817,12818],{"class":244},"b);",[25,12820,12821],{"class":302},"\u002F\u002F地址传递，形参会修饰实参\n",[25,12823,12824,12826,12828,12830,12832,12834,12836,12838,12840,12842,12844],{"class":27,"line":2701},[25,12825,6639],{"class":244},[25,12827,1286],{"class":240},[25,12829,12780],{"class":45},[25,12831,1556],{"class":240},[25,12833,10979],{"class":244},[25,12835,1286],{"class":240},[25,12837,12789],{"class":45},[25,12839,1556],{"class":240},[25,12841,10992],{"class":244},[25,12843,1286],{"class":240},[25,12845,8950],{"class":244},[25,12847,12848],{"class":27,"line":2709},[25,12849,2510],{"emptyLinePlaceholder":167},[25,12851,12852,12855,12857],{"class":27,"line":2714},[25,12853,12854],{"class":31},"    mySwap03",[25,12856,12768],{"class":244},[25,12858,12859],{"class":302},"\u002F\u002F引用传递，形参会修饰实参\n",[25,12861,12862,12864,12866,12868,12870,12872,12874,12876,12878,12880,12882],{"class":27,"line":2720},[25,12863,6639],{"class":244},[25,12865,1286],{"class":240},[25,12867,12780],{"class":45},[25,12869,1556],{"class":240},[25,12871,10979],{"class":244},[25,12873,1286],{"class":240},[25,12875,12789],{"class":45},[25,12877,1556],{"class":240},[25,12879,10992],{"class":244},[25,12881,1286],{"class":240},[25,12883,8950],{"class":244},[25,12885,12886],{"class":27,"line":2726},[25,12887,2510],{"emptyLinePlaceholder":167},[25,12889,12890,12892,12894,12896],{"class":27,"line":2731},[25,12891,2413],{"class":31},[25,12893,245],{"class":244},[25,12895,2418],{"class":45},[25,12897,2829],{"class":244},[25,12899,12900],{"class":27,"line":8058},[25,12901,2510],{"emptyLinePlaceholder":167},[25,12903,12904,12906,12908],{"class":27,"line":8082},[25,12905,4200],{"class":240},[25,12907,4203],{"class":35},[25,12909,1403],{"class":244},[25,12911,12912],{"class":27,"line":8087},[25,12913,1676],{"class":244},[182,12915,12917],{"id":12916},"_64引用做函数的返回值","6.4引用做函数的返回值",[99,12919,12920],{},"作用：引用是可以作为函数的返回值存在的",[99,12922,9135,12923],{},[392,12924,12925],{},"不要返回局部变量引用",[99,12927,12928],{},"用法：函数调用作为左值",[15,12930,12932],{"className":10051,"code":12931,"language":10053,"meta":20,"style":20},"\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",[22,12933,12934,12939,12947,12962,12968,12972,12976,12981,12989,13006,13012,13016,13020,13028,13032,13037,13051,13071,13090,13094,13099,13112,13132,13150,13154,13170,13174,13193,13211,13215,13225,13229,13237],{"__ignoreMap":20},[25,12935,12936],{"class":27,"line":28},[25,12937,12938],{"class":302},"\u002F\u002F返回局部变量引用\n",[25,12940,12941,12943,12945],{"class":27,"line":39},[25,12942,12676],{"class":240},[25,12944,5698],{"class":31},[25,12946,10963],{"class":244},[25,12948,12949,12951,12953,12955,12957,12959],{"class":27,"line":51},[25,12950,2095],{"class":240},[25,12952,10979],{"class":244},[25,12954,290],{"class":240},[25,12956,2148],{"class":35},[25,12958,299],{"class":244},[25,12960,12961],{"class":302}," \u002F\u002F局部变量\n",[25,12963,12964,12966],{"class":27,"line":59},[25,12965,4200],{"class":240},[25,12967,1544],{"class":244},[25,12969,12970],{"class":27,"line":67},[25,12971,1676],{"class":244},[25,12973,12974],{"class":27,"line":75},[25,12975,2510],{"emptyLinePlaceholder":167},[25,12977,12978],{"class":27,"line":83},[25,12979,12980],{"class":302},"\u002F\u002F返回静态变量引用\n",[25,12982,12983,12985,12987],{"class":27,"line":91},[25,12984,12676],{"class":240},[25,12986,5767],{"class":31},[25,12988,10963],{"class":244},[25,12990,12991,12993,12995,12997,12999,13001,13003],{"class":27,"line":1429},[25,12992,11130],{"class":240},[25,12994,2492],{"class":240},[25,12996,10979],{"class":244},[25,12998,290],{"class":240},[25,13000,9060],{"class":35},[25,13002,299],{"class":244},[25,13004,13005],{"class":302},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[25,13007,13008,13010],{"class":27,"line":1441},[25,13009,4200],{"class":240},[25,13011,1544],{"class":244},[25,13013,13014],{"class":27,"line":1723},[25,13015,1676],{"class":244},[25,13017,13018],{"class":27,"line":1728},[25,13019,2510],{"emptyLinePlaceholder":167},[25,13021,13022,13024,13026],{"class":27,"line":1734},[25,13023,248],{"class":240},[25,13025,2083],{"class":31},[25,13027,10963],{"class":244},[25,13029,13030],{"class":27,"line":1739},[25,13031,2510],{"emptyLinePlaceholder":167},[25,13033,13034],{"class":27,"line":1753},[25,13035,13036],{"class":302},"    \u002F\u002F不能返回局部变量的引用\n",[25,13038,13039,13042,13045,13047,13049],{"class":27,"line":1758},[25,13040,13041],{"class":240},"    int&",[25,13043,13044],{"class":244}," ref ",[25,13046,290],{"class":240},[25,13048,5698],{"class":31},[25,13050,5746],{"class":244},[25,13052,13053,13055,13057,13060,13062,13064,13066,13068],{"class":27,"line":1764},[25,13054,6639],{"class":244},[25,13056,1286],{"class":240},[25,13058,13059],{"class":45}," \"ref = \"",[25,13061,1556],{"class":240},[25,13063,13044],{"class":244},[25,13065,1286],{"class":240},[25,13067,11579],{"class":244},[25,13069,13070],{"class":302},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[25,13072,13073,13075,13077,13079,13081,13083,13085,13087],{"class":27,"line":1785},[25,13074,6639],{"class":244},[25,13076,1286],{"class":240},[25,13078,13059],{"class":45},[25,13080,1556],{"class":240},[25,13082,13044],{"class":244},[25,13084,1286],{"class":240},[25,13086,11579],{"class":244},[25,13088,13089],{"class":302},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[25,13091,13092],{"class":27,"line":1790},[25,13093,2510],{"emptyLinePlaceholder":167},[25,13095,13096],{"class":27,"line":1804},[25,13097,13098],{"class":302},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[25,13100,13101,13103,13106,13108,13110],{"class":27,"line":1809},[25,13102,13041],{"class":240},[25,13104,13105],{"class":244}," ref2 ",[25,13107,290],{"class":240},[25,13109,5767],{"class":31},[25,13111,5746],{"class":244},[25,13113,13114,13116,13118,13121,13123,13125,13127,13129],{"class":27,"line":1838},[25,13115,6639],{"class":244},[25,13117,1286],{"class":240},[25,13119,13120],{"class":45}," \"ref2 = \"",[25,13122,1556],{"class":240},[25,13124,13105],{"class":244},[25,13126,1286],{"class":240},[25,13128,11579],{"class":244},[25,13130,13131],{"class":302}," \u002F\u002F20\n",[25,13133,13134,13136,13138,13140,13142,13144,13146,13148],{"class":27,"line":1843},[25,13135,6639],{"class":244},[25,13137,1286],{"class":240},[25,13139,13120],{"class":45},[25,13141,1556],{"class":240},[25,13143,13105],{"class":244},[25,13145,1286],{"class":240},[25,13147,11579],{"class":244},[25,13149,13131],{"class":302},[25,13151,13152],{"class":27,"line":1860},[25,13153,2510],{"emptyLinePlaceholder":167},[25,13155,13156,13158,13161,13163,13165,13167],{"class":27,"line":1865},[25,13157,5812],{"class":31},[25,13159,13160],{"class":244},"() ",[25,13162,290],{"class":240},[25,13164,3109],{"class":35},[25,13166,299],{"class":244},[25,13168,13169],{"class":302},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[25,13171,13172],{"class":27,"line":1870},[25,13173,2510],{"emptyLinePlaceholder":167},[25,13175,13176,13178,13180,13182,13184,13186,13188,13190],{"class":27,"line":1875},[25,13177,6639],{"class":244},[25,13179,1286],{"class":240},[25,13181,13120],{"class":45},[25,13183,1556],{"class":240},[25,13185,13105],{"class":244},[25,13187,1286],{"class":240},[25,13189,11579],{"class":244},[25,13191,13192],{"class":302}," \u002F\u002F1000\n",[25,13194,13195,13197,13199,13201,13203,13205,13207,13209],{"class":27,"line":1889},[25,13196,6639],{"class":244},[25,13198,1286],{"class":240},[25,13200,13120],{"class":45},[25,13202,1556],{"class":240},[25,13204,13105],{"class":244},[25,13206,1286],{"class":240},[25,13208,11579],{"class":244},[25,13210,13192],{"class":302},[25,13212,13213],{"class":27,"line":1894},[25,13214,2510],{"emptyLinePlaceholder":167},[25,13216,13217,13219,13221,13223],{"class":27,"line":2687},[25,13218,2413],{"class":31},[25,13220,245],{"class":244},[25,13222,2418],{"class":45},[25,13224,2829],{"class":244},[25,13226,13227],{"class":27,"line":2701},[25,13228,2510],{"emptyLinePlaceholder":167},[25,13230,13231,13233,13235],{"class":27,"line":2709},[25,13232,4200],{"class":240},[25,13234,4203],{"class":35},[25,13236,1403],{"class":244},[25,13238,13239],{"class":27,"line":2714},[25,13240,1676],{"class":244},[182,13242,13244],{"id":13243},"_65引用的本质","6.5引用的本质",[99,13246,13247,13248],{},"本质：",[392,13249,13250],{},"引用的本质在c++内部实现是一个指针常量.",[15,13252,13254],{"className":231,"code":13253,"language":233,"meta":20,"style":20},"\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",[22,13255,13256,13261,13277,13291,13295,13304,13316,13321,13326,13337,13350,13354,13370,13387,13391,13399,13407],{"__ignoreMap":20},[25,13257,13258],{"class":27,"line":28},[25,13259,13260],{"class":302},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[25,13262,13263,13265,13267,13269,13271,13274],{"class":27,"line":39},[25,13264,5474],{"class":240},[25,13266,11495],{"class":31},[25,13268,245],{"class":244},[25,13270,12676],{"class":240},[25,13272,13273],{"class":5326}," ref",[25,13275,13276],{"class":244},"){\n",[25,13278,13279,13282,13284,13286,13288],{"class":27,"line":51},[25,13280,13281],{"class":244},"    ref ",[25,13283,290],{"class":240},[25,13285,5864],{"class":35},[25,13287,299],{"class":244},[25,13289,13290],{"class":302}," \u002F\u002F ref是引用，转换为*ref = 100\n",[25,13292,13293],{"class":27,"line":59},[25,13294,1676],{"class":244},[25,13296,13297,13299,13301],{"class":27,"line":67},[25,13298,248],{"class":240},[25,13300,2083],{"class":31},[25,13302,13303],{"class":244},"(){\n",[25,13305,13306,13308,13310,13312,13314],{"class":27,"line":75},[25,13307,2095],{"class":240},[25,13309,10979],{"class":244},[25,13311,290],{"class":240},[25,13313,2148],{"class":35},[25,13315,1403],{"class":244},[25,13317,13318],{"class":27,"line":83},[25,13319,13320],{"class":244},"    \n",[25,13322,13323],{"class":27,"line":91},[25,13324,13325],{"class":302},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[25,13327,13328,13330,13332,13334],{"class":27,"line":1429},[25,13329,13041],{"class":240},[25,13331,13044],{"class":244},[25,13333,290],{"class":240},[25,13335,13336],{"class":244}," a; \n",[25,13338,13339,13341,13343,13345,13347],{"class":27,"line":1441},[25,13340,13281],{"class":244},[25,13342,290],{"class":240},[25,13344,9060],{"class":35},[25,13346,299],{"class":244},[25,13348,13349],{"class":302}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[25,13351,13352],{"class":27,"line":1723},[25,13353,13320],{"class":244},[25,13355,13356,13358,13360,13362,13364,13366,13368],{"class":27,"line":1728},[25,13357,6639],{"class":244},[25,13359,1286],{"class":240},[25,13361,12780],{"class":45},[25,13363,1556],{"class":240},[25,13365,10979],{"class":244},[25,13367,1286],{"class":240},[25,13369,8950],{"class":244},[25,13371,13372,13374,13376,13379,13381,13383,13385],{"class":27,"line":1734},[25,13373,6639],{"class":244},[25,13375,1286],{"class":240},[25,13377,13378],{"class":45}," \"ref:\"",[25,13380,1556],{"class":240},[25,13382,13044],{"class":244},[25,13384,1286],{"class":240},[25,13386,8950],{"class":244},[25,13388,13389],{"class":27,"line":1739},[25,13390,13320],{"class":244},[25,13392,13393,13396],{"class":27,"line":1753},[25,13394,13395],{"class":31},"    func",[25,13397,13398],{"class":244},"(a);\n",[25,13400,13401,13403,13405],{"class":27,"line":1758},[25,13402,4200],{"class":240},[25,13404,4203],{"class":35},[25,13406,1403],{"class":244},[25,13408,13409],{"class":27,"line":1764},[25,13410,1676],{"class":244},[99,13412,11442],{},[194,13414,13415,13418],{},[106,13416,13417],{},"引用的本质，就是一个指针常量",[106,13419,13420],{},"引用一旦初始化，就不可以发生改变",[182,13422,13424],{"id":13423},"_66常量引用","6.6常量引用",[99,13426,13427],{},"作用：常量引用主要用来修饰形参",[99,13429,13430,13431,13434],{},"在函数形参列表中，可以加",[392,13432,13433],{},"const修饰形参","，防止形参改变实参",[15,13436,13438],{"className":231,"code":13437,"language":233,"meta":20,"style":20},"\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",[22,13439,13440,13445,13450,13469,13474,13487,13491,13495,13503,13507,13512,13517,13531,13535,13543,13555,13559,13564,13576,13583,13587,13597,13601,13609],{"__ignoreMap":20},[25,13441,13442],{"class":27,"line":28},[25,13443,13444],{"class":302},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[25,13446,13447],{"class":27,"line":39},[25,13448,13449],{"class":302},"\u002F\u002F加上const就不能修改实参的\n",[25,13451,13452,13454,13457,13459,13461,13464,13467],{"class":27,"line":51},[25,13453,5474],{"class":240},[25,13455,13456],{"class":31}," showValue",[25,13458,245],{"class":244},[25,13460,6902],{"class":240},[25,13462,13463],{"class":240}," int&",[25,13465,13466],{"class":5326}," v",[25,13468,12552],{"class":244},[25,13470,13471],{"class":27,"line":59},[25,13472,13473],{"class":302},"    \u002F\u002Fv += 100;\n",[25,13475,13476,13478,13480,13483,13485],{"class":27,"line":67},[25,13477,6639],{"class":244},[25,13479,1286],{"class":240},[25,13481,13482],{"class":244}," v ",[25,13484,1286],{"class":240},[25,13486,8950],{"class":244},[25,13488,13489],{"class":27,"line":75},[25,13490,1676],{"class":244},[25,13492,13493],{"class":27,"line":83},[25,13494,2510],{"emptyLinePlaceholder":167},[25,13496,13497,13499,13501],{"class":27,"line":91},[25,13498,248],{"class":240},[25,13500,2083],{"class":31},[25,13502,10963],{"class":244},[25,13504,13505],{"class":27,"line":1429},[25,13506,2510],{"emptyLinePlaceholder":167},[25,13508,13509],{"class":27,"line":1441},[25,13510,13511],{"class":302},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[25,13513,13514],{"class":27,"line":1723},[25,13515,13516],{"class":302},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[25,13518,13519,13521,13523,13525,13527,13529],{"class":27,"line":1728},[25,13520,11331],{"class":240},[25,13522,13463],{"class":240},[25,13524,13044],{"class":244},[25,13526,290],{"class":240},[25,13528,2148],{"class":35},[25,13530,1403],{"class":244},[25,13532,13533],{"class":27,"line":1734},[25,13534,2510],{"emptyLinePlaceholder":167},[25,13536,13537,13540],{"class":27,"line":1739},[25,13538,13539],{"class":302},"    \u002F\u002Fref = 100;",[25,13541,13542],{"class":302},"  \u002F\u002F加入const后不可以修改变量\n",[25,13544,13545,13547,13549,13551,13553],{"class":27,"line":1753},[25,13546,6639],{"class":244},[25,13548,1286],{"class":240},[25,13550,13044],{"class":244},[25,13552,1286],{"class":240},[25,13554,8950],{"class":244},[25,13556,13557],{"class":27,"line":1758},[25,13558,2510],{"emptyLinePlaceholder":167},[25,13560,13561],{"class":27,"line":1764},[25,13562,13563],{"class":302},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[25,13565,13566,13568,13570,13572,13574],{"class":27,"line":1785},[25,13567,2095],{"class":240},[25,13569,10979],{"class":244},[25,13571,290],{"class":240},[25,13573,2148],{"class":35},[25,13575,1403],{"class":244},[25,13577,13578,13581],{"class":27,"line":1790},[25,13579,13580],{"class":31},"    showValue",[25,13582,13398],{"class":244},[25,13584,13585],{"class":27,"line":1804},[25,13586,2510],{"emptyLinePlaceholder":167},[25,13588,13589,13591,13593,13595],{"class":27,"line":1809},[25,13590,2413],{"class":31},[25,13592,245],{"class":244},[25,13594,2418],{"class":45},[25,13596,2829],{"class":244},[25,13598,13599],{"class":27,"line":1838},[25,13600,2510],{"emptyLinePlaceholder":167},[25,13602,13603,13605,13607],{"class":27,"line":1843},[25,13604,4200],{"class":240},[25,13606,4203],{"class":35},[25,13608,1403],{"class":244},[25,13610,13611],{"class":27,"line":1860},[25,13612,1676],{"class":244},[159,13614,13615],{},"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":20,"searchDepth":39,"depth":39,"links":13617},[13618,13619,13620,13621,13622,13623],{"id":12150,"depth":39,"text":12151},{"id":12329,"depth":39,"text":12330},{"id":12512,"depth":39,"text":12513},{"id":12916,"depth":39,"text":12917},{"id":13243,"depth":39,"text":13244},{"id":13423,"depth":39,"text":13424},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12142,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13630,"title":13631,"body":13632,"description":20,"extension":165,"meta":14713,"navigation":167,"path":14714,"seo":14715,"stem":14716,"__hash__":14717},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13633,"toc":14705},[13634,13637,13641,13644,13649,13881,13883,13894,13898,13901,13909,14013,14016,14020,14023,14027,14030,14035,14057,14063,14390,14393,14397,14405,14702],[10,13635,13631],{"id":13636},"_7函数高级部分",[182,13638,13640],{"id":13639},"_71函数默认参数","7.1函数默认参数",[99,13642,13643],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[99,13645,5291,13646],{},[22,13647,13648],{}," 返回值类型  函数名 （参数= 默认值）{}",[15,13650,13652],{"className":231,"code":13651,"language":233,"meta":20,"style":20},"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",[22,13653,13654,13689,13704,13708,13712,13717,13722,13751,13771,13781,13785,13789,13797,13801,13829,13851,13855,13865,13869,13877],{"__ignoreMap":20},[25,13655,13656,13658,13660,13662,13664,13666,13668,13670,13672,13675,13677,13679,13681,13683,13685,13687],{"class":27,"line":28},[25,13657,248],{"class":240},[25,13659,11495],{"class":31},[25,13661,245],{"class":244},[25,13663,248],{"class":240},[25,13665,1510],{"class":5326},[25,13667,12545],{"class":244},[25,13669,248],{"class":240},[25,13671,2943],{"class":5326},[25,13673,13674],{"class":240}," =",[25,13676,2148],{"class":35},[25,13678,12545],{"class":244},[25,13680,248],{"class":240},[25,13682,2959],{"class":5326},[25,13684,13674],{"class":240},[25,13686,2148],{"class":35},[25,13688,12552],{"class":244},[25,13690,13691,13693,13695,13697,13699,13701],{"class":27,"line":39},[25,13692,4200],{"class":240},[25,13694,10979],{"class":244},[25,13696,724],{"class":240},[25,13698,10992],{"class":244},[25,13700,724],{"class":240},[25,13702,13703],{"class":244}," c;\n",[25,13705,13706],{"class":27,"line":51},[25,13707,1676],{"class":244},[25,13709,13710],{"class":27,"line":59},[25,13711,2510],{"emptyLinePlaceholder":167},[25,13713,13714],{"class":27,"line":67},[25,13715,13716],{"class":302},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[25,13718,13719],{"class":27,"line":75},[25,13720,13721],{"class":302},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[25,13723,13724,13726,13729,13731,13733,13735,13737,13739,13741,13743,13745,13747,13749],{"class":27,"line":83},[25,13725,248],{"class":240},[25,13727,13728],{"class":31}," func2",[25,13730,245],{"class":244},[25,13732,248],{"class":240},[25,13734,1510],{"class":5326},[25,13736,13674],{"class":240},[25,13738,2148],{"class":35},[25,13740,12545],{"class":244},[25,13742,248],{"class":240},[25,13744,2943],{"class":5326},[25,13746,13674],{"class":240},[25,13748,2148],{"class":35},[25,13750,2829],{"class":244},[25,13752,13753,13755,13757,13759,13761,13763,13765,13767,13769],{"class":27,"line":91},[25,13754,248],{"class":240},[25,13756,13728],{"class":31},[25,13758,245],{"class":244},[25,13760,248],{"class":240},[25,13762,1510],{"class":5326},[25,13764,12545],{"class":244},[25,13766,248],{"class":240},[25,13768,2943],{"class":5326},[25,13770,12552],{"class":244},[25,13772,13773,13775,13777,13779],{"class":27,"line":1429},[25,13774,4200],{"class":240},[25,13776,10979],{"class":244},[25,13778,724],{"class":240},[25,13780,12573],{"class":244},[25,13782,13783],{"class":27,"line":1441},[25,13784,1676],{"class":244},[25,13786,13787],{"class":27,"line":1723},[25,13788,2510],{"emptyLinePlaceholder":167},[25,13790,13791,13793,13795],{"class":27,"line":1728},[25,13792,248],{"class":240},[25,13794,2083],{"class":31},[25,13796,10963],{"class":244},[25,13798,13799],{"class":27,"line":1734},[25,13800,2510],{"emptyLinePlaceholder":167},[25,13802,13803,13805,13807,13810,13812,13814,13816,13818,13820,13822,13825,13827],{"class":27,"line":1739},[25,13804,6639],{"class":244},[25,13806,1286],{"class":240},[25,13808,13809],{"class":45}," \"ret = \"",[25,13811,1556],{"class":240},[25,13813,11495],{"class":31},[25,13815,245],{"class":244},[25,13817,943],{"class":35},[25,13819,12545],{"class":244},[25,13821,943],{"class":35},[25,13823,13824],{"class":244},") ",[25,13826,1286],{"class":240},[25,13828,8950],{"class":244},[25,13830,13831,13833,13835,13837,13839,13841,13843,13845,13847,13849],{"class":27,"line":1753},[25,13832,6639],{"class":244},[25,13834,1286],{"class":240},[25,13836,13809],{"class":45},[25,13838,1556],{"class":240},[25,13840,11495],{"class":31},[25,13842,245],{"class":244},[25,13844,554],{"class":35},[25,13846,13824],{"class":244},[25,13848,1286],{"class":240},[25,13850,8950],{"class":244},[25,13852,13853],{"class":27,"line":1758},[25,13854,2510],{"emptyLinePlaceholder":167},[25,13856,13857,13859,13861,13863],{"class":27,"line":1764},[25,13858,2413],{"class":31},[25,13860,245],{"class":244},[25,13862,2418],{"class":45},[25,13864,2829],{"class":244},[25,13866,13867],{"class":27,"line":1785},[25,13868,2510],{"emptyLinePlaceholder":167},[25,13870,13871,13873,13875],{"class":27,"line":1790},[25,13872,4200],{"class":240},[25,13874,4203],{"class":35},[25,13876,1403],{"class":244},[25,13878,13879],{"class":27,"line":1804},[25,13880,1676],{"class":244},[99,13882,11442],{},[194,13884,13885,13888,13891],{},[106,13886,13887],{},"我传就用我；没传就用你",[106,13889,13890],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[106,13892,13893],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[182,13895,13897],{"id":13896},"_72函数的占位参数","7.2函数的占位参数",[99,13899,13900],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[99,13902,13903,13905,13906],{},[392,13904,5291],{}," ",[22,13907,13908],{},"返回值类型 函数名 (数据类型){}",[15,13910,13912],{"className":231,"code":13911,"language":233,"meta":20,"style":20},"\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",[22,13913,13914,13919,13937,13950,13954,13962,13966,13983,13987,13997,14001,14009],{"__ignoreMap":20},[25,13915,13916],{"class":27,"line":28},[25,13917,13918],{"class":302},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[25,13920,13921,13923,13925,13927,13929,13931,13933,13935],{"class":27,"line":39},[25,13922,5474],{"class":240},[25,13924,11495],{"class":31},[25,13926,245],{"class":244},[25,13928,248],{"class":240},[25,13930,1510],{"class":5326},[25,13932,12545],{"class":244},[25,13934,248],{"class":240},[25,13936,12552],{"class":244},[25,13938,13939,13941,13943,13946,13948],{"class":27,"line":51},[25,13940,6639],{"class":244},[25,13942,1286],{"class":240},[25,13944,13945],{"class":45}," \"this is func\"",[25,13947,1556],{"class":240},[25,13949,8950],{"class":244},[25,13951,13952],{"class":27,"line":59},[25,13953,1676],{"class":244},[25,13955,13956,13958,13960],{"class":27,"line":67},[25,13957,248],{"class":240},[25,13959,2083],{"class":31},[25,13961,10963],{"class":244},[25,13963,13964],{"class":27,"line":75},[25,13965,2510],{"emptyLinePlaceholder":167},[25,13967,13968,13970,13972,13974,13976,13978,13980],{"class":27,"line":83},[25,13969,13395],{"class":31},[25,13971,245],{"class":244},[25,13973,689],{"class":35},[25,13975,621],{"class":244},[25,13977,689],{"class":35},[25,13979,6076],{"class":244},[25,13981,13982],{"class":302}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[25,13984,13985],{"class":27,"line":91},[25,13986,2510],{"emptyLinePlaceholder":167},[25,13988,13989,13991,13993,13995],{"class":27,"line":1429},[25,13990,2413],{"class":31},[25,13992,245],{"class":244},[25,13994,2418],{"class":45},[25,13996,2829],{"class":244},[25,13998,13999],{"class":27,"line":1441},[25,14000,2510],{"emptyLinePlaceholder":167},[25,14002,14003,14005,14007],{"class":27,"line":1723},[25,14004,4200],{"class":240},[25,14006,4203],{"class":35},[25,14008,1403],{"class":244},[25,14010,14011],{"class":27,"line":1728},[25,14012,1676],{"class":244},[99,14014,14015],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[182,14017,14019],{"id":14018},"_73函数重载","7.3函数重载",[99,14021,14022],{},"意思是函数名是可以相同的",[210,14024,14026],{"id":14025},"_731基本语法","7.3.1基本语法",[99,14028,14029],{},"作用：函数名可以相同，提高复用性",[99,14031,14032],{},[392,14033,14034],{},"函数重载满足条件：",[103,14036,14037,14040,14043],{},[106,14038,14039],{},"同一个作用域下",[106,14041,14042],{},"函数名称相同",[106,14044,14045,14046,14049,14050,14053,14054],{},"函数参数",[392,14047,14048],{},"类型不同","  或者 ",[392,14051,14052],{},"个数不同"," 或者 ",[392,14055,14056],{},"顺序不同",[99,14058,14059,14062],{},[392,14060,14061],{},"注意:","  函数的返回值不可以作为函数重载的条件",[15,14064,14066],{"className":10051,"code":14065,"language":10053,"meta":20,"style":20},"\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",[22,14067,14068,14073,14081,14085,14098,14102,14116,14120,14133,14137,14152,14156,14169,14173,14194,14198,14211,14215,14235,14239,14252,14256,14260,14265,14270,14275,14280,14285,14289,14293,14301,14305,14311,14321,14331,14345,14360,14364,14374,14378,14386],{"__ignoreMap":20},[25,14069,14070],{"class":27,"line":28},[25,14071,14072],{"class":302},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[25,14074,14075,14077,14079],{"class":27,"line":39},[25,14076,5474],{"class":240},[25,14078,11495],{"class":31},[25,14080,2086],{"class":244},[25,14082,14083],{"class":27,"line":51},[25,14084,1657],{"class":244},[25,14086,14087,14089,14091,14094,14096],{"class":27,"line":59},[25,14088,6639],{"class":244},[25,14090,1286],{"class":240},[25,14092,14093],{"class":45}," \"func 的调用！\"",[25,14095,1556],{"class":240},[25,14097,8950],{"class":244},[25,14099,14100],{"class":27,"line":67},[25,14101,1676],{"class":244},[25,14103,14104,14106,14108,14110,14112,14114],{"class":27,"line":75},[25,14105,5474],{"class":240},[25,14107,11495],{"class":31},[25,14109,245],{"class":244},[25,14111,248],{"class":240},[25,14113,1510],{"class":5326},[25,14115,251],{"class":244},[25,14117,14118],{"class":27,"line":83},[25,14119,1657],{"class":244},[25,14121,14122,14124,14126,14129,14131],{"class":27,"line":91},[25,14123,6639],{"class":244},[25,14125,1286],{"class":240},[25,14127,14128],{"class":45}," \"func (int a) 的调用！\"",[25,14130,1556],{"class":240},[25,14132,8950],{"class":244},[25,14134,14135],{"class":27,"line":1429},[25,14136,1676],{"class":244},[25,14138,14139,14141,14143,14145,14148,14150],{"class":27,"line":1441},[25,14140,5474],{"class":240},[25,14142,11495],{"class":31},[25,14144,245],{"class":244},[25,14146,14147],{"class":240},"double",[25,14149,1510],{"class":5326},[25,14151,251],{"class":244},[25,14153,14154],{"class":27,"line":1723},[25,14155,1657],{"class":244},[25,14157,14158,14160,14162,14165,14167],{"class":27,"line":1728},[25,14159,6639],{"class":244},[25,14161,1286],{"class":240},[25,14163,14164],{"class":45}," \"func (double a)的调用！\"",[25,14166,1556],{"class":240},[25,14168,8950],{"class":244},[25,14170,14171],{"class":27,"line":1734},[25,14172,1676],{"class":244},[25,14174,14175,14177,14179,14181,14183,14185,14188,14190,14192],{"class":27,"line":1739},[25,14176,5474],{"class":240},[25,14178,11495],{"class":31},[25,14180,245],{"class":244},[25,14182,248],{"class":240},[25,14184,1510],{"class":5326},[25,14186,14187],{"class":244}," ,",[25,14189,14147],{"class":240},[25,14191,2943],{"class":5326},[25,14193,251],{"class":244},[25,14195,14196],{"class":27,"line":1753},[25,14197,1657],{"class":244},[25,14199,14200,14202,14204,14207,14209],{"class":27,"line":1758},[25,14201,6639],{"class":244},[25,14203,1286],{"class":240},[25,14205,14206],{"class":45}," \"func (int a ,double b) 的调用！\"",[25,14208,1556],{"class":240},[25,14210,8950],{"class":244},[25,14212,14213],{"class":27,"line":1764},[25,14214,1676],{"class":244},[25,14216,14217,14219,14221,14223,14225,14227,14229,14231,14233],{"class":27,"line":1785},[25,14218,5474],{"class":240},[25,14220,11495],{"class":31},[25,14222,245],{"class":244},[25,14224,14147],{"class":240},[25,14226,1510],{"class":5326},[25,14228,14187],{"class":244},[25,14230,248],{"class":240},[25,14232,2943],{"class":5326},[25,14234,251],{"class":244},[25,14236,14237],{"class":27,"line":1790},[25,14238,1657],{"class":244},[25,14240,14241,14243,14245,14248,14250],{"class":27,"line":1804},[25,14242,6639],{"class":244},[25,14244,1286],{"class":240},[25,14246,14247],{"class":45}," \"func (double a ,int b)的调用！\"",[25,14249,1556],{"class":240},[25,14251,8950],{"class":244},[25,14253,14254],{"class":27,"line":1809},[25,14255,1676],{"class":244},[25,14257,14258],{"class":27,"line":1838},[25,14259,2510],{"emptyLinePlaceholder":167},[25,14261,14262],{"class":27,"line":1843},[25,14263,14264],{"class":302},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[25,14266,14267],{"class":27,"line":1860},[25,14268,14269],{"class":302},"\u002F\u002Fint func(double a, int b)\n",[25,14271,14272],{"class":27,"line":1865},[25,14273,14274],{"class":302},"\u002F\u002F{\n",[25,14276,14277],{"class":27,"line":1870},[25,14278,14279],{"class":302},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[25,14281,14282],{"class":27,"line":1875},[25,14283,14284],{"class":302},"\u002F\u002F}\n",[25,14286,14287],{"class":27,"line":1889},[25,14288,2510],{"emptyLinePlaceholder":167},[25,14290,14291],{"class":27,"line":1894},[25,14292,2510],{"emptyLinePlaceholder":167},[25,14294,14295,14297,14299],{"class":27,"line":2687},[25,14296,248],{"class":240},[25,14298,2083],{"class":31},[25,14300,10963],{"class":244},[25,14302,14303],{"class":27,"line":2701},[25,14304,2510],{"emptyLinePlaceholder":167},[25,14306,14307,14309],{"class":27,"line":2709},[25,14308,13395],{"class":31},[25,14310,5746],{"class":244},[25,14312,14313,14315,14317,14319],{"class":27,"line":2714},[25,14314,13395],{"class":31},[25,14316,245],{"class":244},[25,14318,689],{"class":35},[25,14320,2829],{"class":244},[25,14322,14323,14325,14327,14329],{"class":27,"line":2720},[25,14324,13395],{"class":31},[25,14326,245],{"class":244},[25,14328,293],{"class":35},[25,14330,2829],{"class":244},[25,14332,14333,14335,14337,14339,14341,14343],{"class":27,"line":2726},[25,14334,13395],{"class":31},[25,14336,245],{"class":244},[25,14338,689],{"class":35},[25,14340,621],{"class":244},[25,14342,293],{"class":35},[25,14344,2829],{"class":244},[25,14346,14347,14349,14351,14353,14356,14358],{"class":27,"line":2731},[25,14348,13395],{"class":31},[25,14350,245],{"class":244},[25,14352,293],{"class":35},[25,14354,14355],{"class":244}," , ",[25,14357,689],{"class":35},[25,14359,2829],{"class":244},[25,14361,14362],{"class":27,"line":8058},[25,14363,13320],{"class":244},[25,14365,14366,14368,14370,14372],{"class":27,"line":8082},[25,14367,2413],{"class":31},[25,14369,245],{"class":244},[25,14371,2418],{"class":45},[25,14373,2829],{"class":244},[25,14375,14376],{"class":27,"line":8087},[25,14377,2510],{"emptyLinePlaceholder":167},[25,14379,14380,14382,14384],{"class":27,"line":8093},[25,14381,4200],{"class":240},[25,14383,4203],{"class":35},[25,14385,1403],{"class":244},[25,14387,14388],{"class":27,"line":8120},[25,14389,1676],{"class":244},[99,14391,14392],{},"重点：函数返回值不可以作为函数重载条件！",[210,14394,14396],{"id":14395},"_732注意事项","7.3.2注意事项",[103,14398,14399,14402],{},[106,14400,14401],{},"引用作为重载条件!!!",[106,14403,14404],{},"函数重载碰到函数默认参数",[15,14406,14408],{"className":231,"code":14407,"language":233,"meta":20,"style":20},"\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",[22,14409,14410,14415,14420,14424,14440,14444,14457,14461,14465,14483,14487,14500,14504,14508,14512,14517,14521,14545,14549,14562,14566,14570,14584,14588,14601,14605,14609,14617,14621,14633,14643,14656,14660,14664,14672,14676,14686,14690,14698],{"__ignoreMap":20},[25,14411,14412],{"class":27,"line":28},[25,14413,14414],{"class":302},"\u002F\u002F函数重载注意事项\n",[25,14416,14417],{"class":27,"line":39},[25,14418,14419],{"class":302},"\u002F\u002F1、引用作为重载条件\n",[25,14421,14422],{"class":27,"line":51},[25,14423,2510],{"emptyLinePlaceholder":167},[25,14425,14426,14428,14430,14432,14434,14436,14438],{"class":27,"line":59},[25,14427,5474],{"class":240},[25,14429,11495],{"class":31},[25,14431,245],{"class":244},[25,14433,248],{"class":240},[25,14435,10694],{"class":240},[25,14437,481],{"class":5326},[25,14439,251],{"class":244},[25,14441,14442],{"class":27,"line":67},[25,14443,1657],{"class":244},[25,14445,14446,14448,14450,14453,14455],{"class":27,"line":75},[25,14447,6639],{"class":244},[25,14449,1286],{"class":240},[25,14451,14452],{"class":45}," \"func (int &a) 调用 \"",[25,14454,1556],{"class":240},[25,14456,8950],{"class":244},[25,14458,14459],{"class":27,"line":83},[25,14460,1676],{"class":244},[25,14462,14463],{"class":27,"line":91},[25,14464,2510],{"emptyLinePlaceholder":167},[25,14466,14467,14469,14471,14473,14475,14477,14479,14481],{"class":27,"line":1429},[25,14468,5474],{"class":240},[25,14470,11495],{"class":31},[25,14472,245],{"class":244},[25,14474,6902],{"class":240},[25,14476,2492],{"class":240},[25,14478,10694],{"class":240},[25,14480,481],{"class":5326},[25,14482,251],{"class":244},[25,14484,14485],{"class":27,"line":1441},[25,14486,1657],{"class":244},[25,14488,14489,14491,14493,14496,14498],{"class":27,"line":1723},[25,14490,6639],{"class":244},[25,14492,1286],{"class":240},[25,14494,14495],{"class":45}," \"func (const int &a) 调用 \"",[25,14497,1556],{"class":240},[25,14499,8950],{"class":244},[25,14501,14502],{"class":27,"line":1728},[25,14503,1676],{"class":244},[25,14505,14506],{"class":27,"line":1734},[25,14507,2510],{"emptyLinePlaceholder":167},[25,14509,14510],{"class":27,"line":1739},[25,14511,2510],{"emptyLinePlaceholder":167},[25,14513,14514],{"class":27,"line":1753},[25,14515,14516],{"class":302},"\u002F\u002F2、函数重载碰到函数默认参数\n",[25,14518,14519],{"class":27,"line":1758},[25,14520,2510],{"emptyLinePlaceholder":167},[25,14522,14523,14525,14527,14529,14531,14533,14535,14537,14539,14541,14543],{"class":27,"line":1764},[25,14524,5474],{"class":240},[25,14526,13728],{"class":31},[25,14528,245],{"class":244},[25,14530,248],{"class":240},[25,14532,1510],{"class":5326},[25,14534,12545],{"class":244},[25,14536,248],{"class":240},[25,14538,2943],{"class":5326},[25,14540,13674],{"class":240},[25,14542,2148],{"class":35},[25,14544,251],{"class":244},[25,14546,14547],{"class":27,"line":1785},[25,14548,1657],{"class":244},[25,14550,14551,14553,14555,14558,14560],{"class":27,"line":1790},[25,14552,6639],{"class":244},[25,14554,1286],{"class":240},[25,14556,14557],{"class":45}," \"func2(int a, int b = 10) 调用\"",[25,14559,1556],{"class":240},[25,14561,8950],{"class":244},[25,14563,14564],{"class":27,"line":1804},[25,14565,1676],{"class":244},[25,14567,14568],{"class":27,"line":1809},[25,14569,2510],{"emptyLinePlaceholder":167},[25,14571,14572,14574,14576,14578,14580,14582],{"class":27,"line":1838},[25,14573,5474],{"class":240},[25,14575,13728],{"class":31},[25,14577,245],{"class":244},[25,14579,248],{"class":240},[25,14581,1510],{"class":5326},[25,14583,251],{"class":244},[25,14585,14586],{"class":27,"line":1843},[25,14587,1657],{"class":244},[25,14589,14590,14592,14594,14597,14599],{"class":27,"line":1860},[25,14591,6639],{"class":244},[25,14593,1286],{"class":240},[25,14595,14596],{"class":45}," \"func2(int a) 调用\"",[25,14598,1556],{"class":240},[25,14600,8950],{"class":244},[25,14602,14603],{"class":27,"line":1865},[25,14604,1676],{"class":244},[25,14606,14607],{"class":27,"line":1870},[25,14608,2510],{"emptyLinePlaceholder":167},[25,14610,14611,14613,14615],{"class":27,"line":1875},[25,14612,248],{"class":240},[25,14614,2083],{"class":31},[25,14616,10963],{"class":244},[25,14618,14619],{"class":27,"line":1889},[25,14620,13320],{"class":244},[25,14622,14623,14625,14627,14629,14631],{"class":27,"line":1894},[25,14624,2095],{"class":240},[25,14626,10979],{"class":244},[25,14628,290],{"class":240},[25,14630,2148],{"class":35},[25,14632,1403],{"class":244},[25,14634,14635,14637,14640],{"class":27,"line":2687},[25,14636,13395],{"class":31},[25,14638,14639],{"class":244},"(a);",[25,14641,14642],{"class":302}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[25,14644,14645,14647,14649,14651,14653],{"class":27,"line":2701},[25,14646,13395],{"class":31},[25,14648,245],{"class":244},[25,14650,689],{"class":35},[25,14652,6076],{"class":244},[25,14654,14655],{"class":302},"\u002F\u002F调用有const   10是个常量\n",[25,14657,14658],{"class":27,"line":2709},[25,14659,2510],{"emptyLinePlaceholder":167},[25,14661,14662],{"class":27,"line":2714},[25,14663,2510],{"emptyLinePlaceholder":167},[25,14665,14666,14669],{"class":27,"line":2720},[25,14667,14668],{"class":302},"    \u002F\u002Ffunc2(10);",[25,14670,14671],{"class":302}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[25,14673,14674],{"class":27,"line":2726},[25,14675,2510],{"emptyLinePlaceholder":167},[25,14677,14678,14680,14682,14684],{"class":27,"line":2731},[25,14679,2413],{"class":31},[25,14681,245],{"class":244},[25,14683,2418],{"class":45},[25,14685,2829],{"class":244},[25,14687,14688],{"class":27,"line":8058},[25,14689,2510],{"emptyLinePlaceholder":167},[25,14691,14692,14694,14696],{"class":27,"line":8082},[25,14693,4200],{"class":240},[25,14695,4203],{"class":35},[25,14697,1403],{"class":244},[25,14699,14700],{"class":27,"line":8087},[25,14701,1676],{"class":244},[159,14703,14704],{},"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":20,"searchDepth":39,"depth":39,"links":14706},[14707,14708,14709],{"id":13639,"depth":39,"text":13640},{"id":13896,"depth":39,"text":13897},{"id":14018,"depth":39,"text":14019,"children":14710},[14711,14712],{"id":14025,"depth":51,"text":14026},{"id":14395,"depth":51,"text":14396},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13631,"description":20},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14719,"title":14720,"body":14721,"description":23475,"extension":165,"meta":23476,"navigation":167,"path":23477,"seo":23478,"stem":23479,"__hash__":23480},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14722,"toc":23456},[14723,14726,14732,14739,14744,14747,14750,14753,14757,14761,14764,14767,14775,14780,14783,14790,14795,14954,14957,15210,15213,15216,15219,15224,15227,15230,15241,15246,15482,15486,15496,15499,15507,15654,15658,15661,15664,15668,16113,16117,16125,16133,17045,17052,17057,17685,17688,17691,17694,17813,17816,17903,17906,18032,18035,18129,18132,18485,18489,18497,18501,18508,18511,18514,18525,18531,18536,18548,18556,18576,18584,18601,18787,18790,18794,18797,18800,18803,18806,18809,18812,18815,19275,19281,19285,19288,19299,19886,19889,20378,20382,20385,20388,20391,20394,20397,20405,20801,20805,20808,20811,21258,21261,21264,21269,21272,21277,21280,21284,21287,21289,21295,21298,21604,21614,21655,21659,21662,21664,21697,21700,22007,22009,22024,22027,22050,22059,22065,22068,22072,22075,22078,22083,22094,22099,22107,22112,22242,22245,22248,22423,22428,22640,22644,22647,22761,22766,23005,23009,23013,23016,23019,23024,23129,23132,23135,23138,23142,23253,23256,23259,23264,23316,23319,23322,23327,23373,23376,23381,23449,23451,23454],[10,14724,14720],{"id":14725},"_8类和对象",[99,14727,14728,14729],{},"C++面向对象的三大特性为",[392,14730,14731],{},"封装、继承、多态",[99,14733,14734,14735,14738],{},"C++认为",[392,14736,14737],{},"万事万物都皆为对象","，对象上有其属性和行为",[99,14740,14741],{},[392,14742,14743],{},"例如：",[99,14745,14746],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[99,14748,14749],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[99,14751,14752],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[182,14754,14756],{"id":14755},"_81封装","8.1封装",[210,14758,14760],{"id":14759},"_811封装的意义","8.1.1封装的意义",[99,14762,14763],{},"封装是C++面向对象三大特性之一",[99,14765,14766],{},"封装的意义：",[103,14768,14769,14772],{},[106,14770,14771],{},"将属性和行为作为一个整体，表现生活中的事物",[106,14773,14774],{},"将属性和行为加以权限控制",[99,14776,14777],{},[392,14778,14779],{},"封装意义一：",[99,14781,14782],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[99,14784,14785,13905,14787],{},[392,14786,5291],{},[22,14788,14789],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[194,14791,14792],{},[106,14793,14794],{},"**示例1：**设计一个圆类，求圆的周长",[15,14796,14798],{"className":231,"code":14797,"language":233,"meta":20,"style":20},"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",[22,14799,14800,14808,14812,14817,14822,14827,14832,14839,14844,14854,14858,14876,14880,14884,14892,14896,14901,14906,14911,14916,14927,14950],{"__ignoreMap":20},[25,14801,14802,14805],{"class":27,"line":28},[25,14803,14804],{"class":240},"class",[25,14806,14807],{"class":31}," Circle\n",[25,14809,14810],{"class":27,"line":39},[25,14811,1657],{"class":244},[25,14813,14814],{"class":27,"line":51},[25,14815,14816],{"class":302},"    \u002F\u002F访问权限\n",[25,14818,14819],{"class":27,"line":59},[25,14820,14821],{"class":302},"    \u002F\u002F公共权限\n",[25,14823,14824],{"class":27,"line":67},[25,14825,14826],{"class":240},"public:\n",[25,14828,14829],{"class":27,"line":75},[25,14830,14831],{"class":302},"    \u002F\u002F属性\n",[25,14833,14834,14836],{"class":27,"line":83},[25,14835,2095],{"class":240},[25,14837,14838],{"class":244}," m_r;\n",[25,14840,14841],{"class":27,"line":91},[25,14842,14843],{"class":302},"    \u002F\u002F行为\n",[25,14845,14846,14849,14852],{"class":27,"line":1429},[25,14847,14848],{"class":240},"    double",[25,14850,14851],{"class":31}," calculateZC",[25,14853,2086],{"class":244},[25,14855,14856],{"class":27,"line":1441},[25,14857,2140],{"class":244},[25,14859,14860,14863,14866,14868,14871,14873],{"class":27,"line":1723},[25,14861,14862],{"class":240},"        return",[25,14864,14865],{"class":35}," 2",[25,14867,698],{"class":240},[25,14869,14870],{"class":244},"PI",[25,14872,698],{"class":240},[25,14874,14875],{"class":244},"m_r;\n",[25,14877,14878],{"class":27,"line":1728},[25,14879,2297],{"class":244},[25,14881,14882],{"class":27,"line":1734},[25,14883,4105],{"class":244},[25,14885,14886,14888,14890],{"class":27,"line":1739},[25,14887,248],{"class":240},[25,14889,2083],{"class":31},[25,14891,2086],{"class":244},[25,14893,14894],{"class":27,"line":1753},[25,14895,1657],{"class":244},[25,14897,14898],{"class":27,"line":1758},[25,14899,14900],{"class":302},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[25,14902,14903],{"class":27,"line":1764},[25,14904,14905],{"class":302},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[25,14907,14908],{"class":27,"line":1785},[25,14909,14910],{"class":244},"    Circle c1;\n",[25,14912,14913],{"class":27,"line":1790},[25,14914,14915],{"class":302},"    \u002F\u002F给圆对象 的属性进行赋值\n",[25,14917,14918,14921,14923,14925],{"class":27,"line":1804},[25,14919,14920],{"class":244},"    c1.m_r",[25,14922,290],{"class":240},[25,14924,689],{"class":35},[25,14926,1403],{"class":244},[25,14928,14929,14931,14933,14936,14938,14941,14944,14946,14948],{"class":27,"line":1809},[25,14930,1662],{"class":244},[25,14932,1286],{"class":240},[25,14934,14935],{"class":45},"\"圆的周长\"",[25,14937,1286],{"class":240},[25,14939,14940],{"class":244},"c1.",[25,14942,14943],{"class":31},"calculateZC",[25,14945,2537],{"class":244},[25,14947,1286],{"class":240},[25,14949,1308],{"class":244},[25,14951,14952],{"class":27,"line":1838},[25,14953,1676],{"class":244},[99,14955,14956],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[15,14958,14960],{"className":231,"code":14959,"language":233,"meta":20,"style":20},"#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",[22,14961,14962,14968,14978,14984,14990,14994,14998,15003,15010,15015,15033,15037,15047,15051,15056,15072,15076,15086,15090,15095,15103,15107,15139,15143,15147,15155,15159,15164,15169,15183,15197,15206],{"__ignoreMap":20},[25,14963,14964,14966],{"class":27,"line":28},[25,14965,2060],{"class":240},[25,14967,2063],{"class":45},[25,14969,14970,14972,14974,14976],{"class":27,"line":39},[25,14971,2068],{"class":240},[25,14973,2071],{"class":240},[25,14975,2074],{"class":31},[25,14977,1403],{"class":244},[25,14979,14980,14982],{"class":27,"line":51},[25,14981,2060],{"class":240},[25,14983,7859],{"class":45},[25,14985,14986,14988],{"class":27,"line":59},[25,14987,14804],{"class":240},[25,14989,7872],{"class":31},[25,14991,14992],{"class":27,"line":67},[25,14993,1657],{"class":244},[25,14995,14996],{"class":27,"line":75},[25,14997,14826],{"class":240},[25,14999,15000],{"class":27,"line":83},[25,15001,15002],{"class":244},"    string m_name;\n",[25,15004,15005,15007],{"class":27,"line":91},[25,15006,2095],{"class":240},[25,15008,15009],{"class":244}," m_id;\n",[25,15011,15012],{"class":27,"line":1429},[25,15013,15014],{"class":302},"    \u002F\u002F赋值姓名\n",[25,15016,15017,15020,15023,15025,15028,15031],{"class":27,"line":1441},[25,15018,15019],{"class":240},"    void",[25,15021,15022],{"class":31}," setName",[25,15024,245],{"class":244},[25,15026,15027],{"class":31},"string",[25,15029,15030],{"class":5326}," name",[25,15032,251],{"class":244},[25,15034,15035],{"class":27,"line":1723},[25,15036,2140],{"class":244},[25,15038,15039,15042,15044],{"class":27,"line":1728},[25,15040,15041],{"class":244},"        m_name",[25,15043,290],{"class":240},[25,15045,15046],{"class":244},"name;\n",[25,15048,15049],{"class":27,"line":1734},[25,15050,2297],{"class":244},[25,15052,15053],{"class":27,"line":1739},[25,15054,15055],{"class":302},"    \u002F\u002F赋值学号\n",[25,15057,15058,15060,15063,15065,15067,15070],{"class":27,"line":1753},[25,15059,15019],{"class":240},[25,15061,15062],{"class":31}," setId",[25,15064,245],{"class":244},[25,15066,248],{"class":240},[25,15068,15069],{"class":5326}," id",[25,15071,251],{"class":244},[25,15073,15074],{"class":27,"line":1758},[25,15075,2140],{"class":244},[25,15077,15078,15081,15083],{"class":27,"line":1764},[25,15079,15080],{"class":244},"        m_id",[25,15082,290],{"class":240},[25,15084,15085],{"class":244},"id;\n",[25,15087,15088],{"class":27,"line":1785},[25,15089,2297],{"class":244},[25,15091,15092],{"class":27,"line":1790},[25,15093,15094],{"class":302},"    \u002F\u002F打印学生信息\n",[25,15096,15097,15099,15101],{"class":27,"line":1804},[25,15098,15019],{"class":240},[25,15100,9725],{"class":31},[25,15102,2086],{"class":244},[25,15104,15105],{"class":27,"line":1809},[25,15106,2140],{"class":244},[25,15108,15109,15111,15113,15116,15118,15121,15123,15125,15127,15130,15132,15135,15137],{"class":27,"line":1838},[25,15110,3561],{"class":244},[25,15112,1286],{"class":240},[25,15114,15115],{"class":45},"\"姓名：\"",[25,15117,1286],{"class":240},[25,15119,15120],{"class":244},"m_name",[25,15122,1286],{"class":240},[25,15124,4469],{"class":45},[25,15126,1286],{"class":240},[25,15128,15129],{"class":45},"\"学号：\"",[25,15131,1286],{"class":240},[25,15133,15134],{"class":244},"m_id",[25,15136,1286],{"class":240},[25,15138,1308],{"class":244},[25,15140,15141],{"class":27,"line":1843},[25,15142,2297],{"class":244},[25,15144,15145],{"class":27,"line":1860},[25,15146,4105],{"class":244},[25,15148,15149,15151,15153],{"class":27,"line":1865},[25,15150,248],{"class":240},[25,15152,2083],{"class":31},[25,15154,2086],{"class":244},[25,15156,15157],{"class":27,"line":1870},[25,15158,1657],{"class":244},[25,15160,15161],{"class":27,"line":1875},[25,15162,15163],{"class":302},"    \u002F\u002F实例化\n",[25,15165,15166],{"class":27,"line":1889},[25,15167,15168],{"class":244},"    Student s1;\n",[25,15170,15171,15174,15177,15179,15181],{"class":27,"line":1894},[25,15172,15173],{"class":244},"    s1.",[25,15175,15176],{"class":31},"setName",[25,15178,245],{"class":244},[25,15180,8026],{"class":45},[25,15182,2829],{"class":244},[25,15184,15185,15187,15190,15192,15195],{"class":27,"line":2687},[25,15186,15173],{"class":244},[25,15188,15189],{"class":31},"setId",[25,15191,245],{"class":244},[25,15193,15194],{"class":35},"123456",[25,15196,2829],{"class":244},[25,15198,15199,15201,15204],{"class":27,"line":2701},[25,15200,15173],{"class":244},[25,15202,15203],{"class":31},"printInfo",[25,15205,5746],{"class":244},[25,15207,15208],{"class":27,"line":2709},[25,15209,1676],{"class":244},[99,15211,15212],{},"类中的属性和行为统称为成员",[99,15214,15215],{},"属性：成员属性(成员变量)",[99,15217,15218],{},"方法：成员函数(成员方法)",[99,15220,15221],{},[392,15222,15223],{},"封装意义二：",[99,15225,15226],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[99,15228,15229],{},"访问权限有三种：",[194,15231,15232,15235,15238],{},[106,15233,15234],{},"public        公共权限",[106,15236,15237],{},"protected 保护权限",[106,15239,15240],{},"private      私有权限",[99,15242,15243],{},[392,15244,15245],{},"示例：",[15,15247,15249],{"className":10051,"code":15248,"language":10053,"meta":20,"style":20},"\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",[22,15250,15251,15256,15261,15266,15271,15275,15282,15286,15291,15295,15300,15304,15309,15314,15319,15323,15328,15333,15340,15344,15348,15356,15360,15371,15383,15395,15399,15403,15407,15415,15419,15424,15436,15444,15452,15456,15466,15470,15478],{"__ignoreMap":20},[25,15252,15253],{"class":27,"line":28},[25,15254,15255],{"class":302},"\u002F\u002F三种权限\n",[25,15257,15258],{"class":27,"line":39},[25,15259,15260],{"class":302},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[25,15262,15263],{"class":27,"line":51},[25,15264,15265],{"class":302},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[25,15267,15268],{"class":27,"line":59},[25,15269,15270],{"class":302},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[25,15272,15273],{"class":27,"line":67},[25,15274,2510],{"emptyLinePlaceholder":167},[25,15276,15277,15279],{"class":27,"line":75},[25,15278,14804],{"class":240},[25,15280,15281],{"class":31}," Person\n",[25,15283,15284],{"class":27,"line":83},[25,15285,1657],{"class":244},[25,15287,15288],{"class":27,"line":91},[25,15289,15290],{"class":302},"    \u002F\u002F姓名  公共权限\n",[25,15292,15293],{"class":27,"line":1429},[25,15294,14826],{"class":240},[25,15296,15297],{"class":27,"line":1441},[25,15298,15299],{"class":244},"    string m_Name;\n",[25,15301,15302],{"class":27,"line":1723},[25,15303,2510],{"emptyLinePlaceholder":167},[25,15305,15306],{"class":27,"line":1728},[25,15307,15308],{"class":302},"    \u002F\u002F汽车  保护权限\n",[25,15310,15311],{"class":27,"line":1734},[25,15312,15313],{"class":240},"protected:\n",[25,15315,15316],{"class":27,"line":1739},[25,15317,15318],{"class":244},"    string m_Car;\n",[25,15320,15321],{"class":27,"line":1753},[25,15322,2510],{"emptyLinePlaceholder":167},[25,15324,15325],{"class":27,"line":1758},[25,15326,15327],{"class":302},"    \u002F\u002F银行卡密码  私有权限\n",[25,15329,15330],{"class":27,"line":1764},[25,15331,15332],{"class":240},"private:\n",[25,15334,15335,15337],{"class":27,"line":1785},[25,15336,2095],{"class":240},[25,15338,15339],{"class":244}," m_Password;\n",[25,15341,15342],{"class":27,"line":1790},[25,15343,2510],{"emptyLinePlaceholder":167},[25,15345,15346],{"class":27,"line":1804},[25,15347,14826],{"class":240},[25,15349,15350,15352,15354],{"class":27,"line":1809},[25,15351,15019],{"class":240},[25,15353,11495],{"class":31},[25,15355,2086],{"class":244},[25,15357,15358],{"class":27,"line":1838},[25,15359,2140],{"class":244},[25,15361,15362,15365,15367,15369],{"class":27,"line":1843},[25,15363,15364],{"class":244},"        m_Name ",[25,15366,290],{"class":240},[25,15368,9048],{"class":45},[25,15370,1403],{"class":244},[25,15372,15373,15376,15378,15381],{"class":27,"line":1860},[25,15374,15375],{"class":244},"        m_Car ",[25,15377,290],{"class":240},[25,15379,15380],{"class":45}," \"拖拉机\"",[25,15382,1403],{"class":244},[25,15384,15385,15388,15390,15393],{"class":27,"line":1865},[25,15386,15387],{"class":244},"        m_Password ",[25,15389,290],{"class":240},[25,15391,15392],{"class":35}," 123456",[25,15394,1403],{"class":244},[25,15396,15397],{"class":27,"line":1870},[25,15398,2297],{"class":244},[25,15400,15401],{"class":27,"line":1875},[25,15402,4105],{"class":244},[25,15404,15405],{"class":27,"line":1889},[25,15406,2510],{"emptyLinePlaceholder":167},[25,15408,15409,15411,15413],{"class":27,"line":1894},[25,15410,248],{"class":240},[25,15412,2083],{"class":31},[25,15414,10963],{"class":244},[25,15416,15417],{"class":27,"line":2687},[25,15418,2510],{"emptyLinePlaceholder":167},[25,15420,15421],{"class":27,"line":2701},[25,15422,15423],{"class":244},"    Person p;\n",[25,15425,15426,15429,15431,15434],{"class":27,"line":2709},[25,15427,15428],{"class":244},"    p.m_Name ",[25,15430,290],{"class":240},[25,15432,15433],{"class":45}," \"李四\"",[25,15435,1403],{"class":244},[25,15437,15438,15441],{"class":27,"line":2714},[25,15439,15440],{"class":302},"    \u002F\u002Fp.m_Car = \"奔驰\";",[25,15442,15443],{"class":302},"  \u002F\u002F保护权限类外访问不到\n",[25,15445,15446,15449],{"class":27,"line":2720},[25,15447,15448],{"class":302},"    \u002F\u002Fp.m_Password = 123;",[25,15450,15451],{"class":302}," \u002F\u002F私有权限类外访问不到\n",[25,15453,15454],{"class":27,"line":2726},[25,15455,2510],{"emptyLinePlaceholder":167},[25,15457,15458,15460,15462,15464],{"class":27,"line":2731},[25,15459,2413],{"class":31},[25,15461,245],{"class":244},[25,15463,2418],{"class":45},[25,15465,2829],{"class":244},[25,15467,15468],{"class":27,"line":8058},[25,15469,2510],{"emptyLinePlaceholder":167},[25,15471,15472,15474,15476],{"class":27,"line":8082},[25,15473,4200],{"class":240},[25,15475,4203],{"class":35},[25,15477,1403],{"class":244},[25,15479,15480],{"class":27,"line":8087},[25,15481,1676],{"class":244},[210,15483,15485],{"id":15484},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[99,15487,15488,15489,15492,15493],{},"在C++中 struct和class唯一的",[392,15490,15491],{},"区别","就在于 ",[392,15494,15495],{},"默认的访问权限不同",[99,15497,15498],{},"区别：",[103,15500,15501,15504],{},[106,15502,15503],{},"struct 默认权限为公共",[106,15505,15506],{},"class   默认权限为私有",[15,15508,15510],{"className":10051,"code":15509,"language":10053,"meta":20,"style":20},"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",[22,15511,15512,15519,15523,15533,15537,15541,15548,15552,15562,15566,15570,15578,15582,15587,15601,15605,15610,15624,15628,15638,15642,15650],{"__ignoreMap":20},[25,15513,15514,15516],{"class":27,"line":28},[25,15515,14804],{"class":240},[25,15517,15518],{"class":31}," C1\n",[25,15520,15521],{"class":27,"line":39},[25,15522,1657],{"class":244},[25,15524,15525,15527,15530],{"class":27,"line":51},[25,15526,2095],{"class":240},[25,15528,15529],{"class":244},"  m_A;",[25,15531,15532],{"class":302}," \u002F\u002F默认是私有权限\n",[25,15534,15535],{"class":27,"line":59},[25,15536,4105],{"class":244},[25,15538,15539],{"class":27,"line":67},[25,15540,2510],{"emptyLinePlaceholder":167},[25,15542,15543,15545],{"class":27,"line":75},[25,15544,7869],{"class":240},[25,15546,15547],{"class":31}," C2\n",[25,15549,15550],{"class":27,"line":83},[25,15551,1657],{"class":244},[25,15553,15554,15556,15559],{"class":27,"line":91},[25,15555,2095],{"class":240},[25,15557,15558],{"class":244}," m_A;",[25,15560,15561],{"class":302},"  \u002F\u002F默认是公共权限\n",[25,15563,15564],{"class":27,"line":1429},[25,15565,4105],{"class":244},[25,15567,15568],{"class":27,"line":1441},[25,15569,2510],{"emptyLinePlaceholder":167},[25,15571,15572,15574,15576],{"class":27,"line":1723},[25,15573,248],{"class":240},[25,15575,2083],{"class":31},[25,15577,10963],{"class":244},[25,15579,15580],{"class":27,"line":1728},[25,15581,2510],{"emptyLinePlaceholder":167},[25,15583,15584],{"class":27,"line":1734},[25,15585,15586],{"class":244},"    C1 c1;\n",[25,15588,15589,15592,15594,15596,15598],{"class":27,"line":1739},[25,15590,15591],{"class":244},"    c1.m_A ",[25,15593,290],{"class":240},[25,15595,2148],{"class":35},[25,15597,299],{"class":244},[25,15599,15600],{"class":302}," \u002F\u002F错误，访问权限是私有\n",[25,15602,15603],{"class":27,"line":1753},[25,15604,2510],{"emptyLinePlaceholder":167},[25,15606,15607],{"class":27,"line":1758},[25,15608,15609],{"class":244},"    C2 c2;\n",[25,15611,15612,15615,15617,15619,15621],{"class":27,"line":1764},[25,15613,15614],{"class":244},"    c2.m_A ",[25,15616,290],{"class":240},[25,15618,2148],{"class":35},[25,15620,299],{"class":244},[25,15622,15623],{"class":302}," \u002F\u002F正确，访问权限是公共\n",[25,15625,15626],{"class":27,"line":1785},[25,15627,2510],{"emptyLinePlaceholder":167},[25,15629,15630,15632,15634,15636],{"class":27,"line":1790},[25,15631,2413],{"class":31},[25,15633,245],{"class":244},[25,15635,2418],{"class":45},[25,15637,2829],{"class":244},[25,15639,15640],{"class":27,"line":1804},[25,15641,2510],{"emptyLinePlaceholder":167},[25,15643,15644,15646,15648],{"class":27,"line":1809},[25,15645,4200],{"class":240},[25,15647,4203],{"class":35},[25,15649,1403],{"class":244},[25,15651,15652],{"class":27,"line":1838},[25,15653,1676],{"class":244},[210,15655,15657],{"id":15656},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[99,15659,15660],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[99,15662,15663],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[99,15665,15666],{},[392,15667,15245],{},[15,15669,15671],{"className":10051,"code":15670,"language":10053,"meta":20,"style":20},"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",[22,15672,15673,15683,15687,15691,15696,15710,15719,15723,15733,15737,15744,15748,15752,15756,15761,15770,15777,15781,15786,15802,15825,15838,15845,15849,15858,15862,15866,15871,15887,15897,15901,15905,15909,15917,15921,15931,15935,15943,15947,15951,15959,15963,15967,15972,15985,16008,16012,16017,16030,16052,16056,16061,16075,16083,16087,16097,16101,16109],{"__ignoreMap":20},[25,15674,15675,15677,15680],{"class":27,"line":28},[25,15676,14804],{"class":240},[25,15678,15679],{"class":31}," Person",[25,15681,15682],{"class":244}," {\n",[25,15684,15685],{"class":27,"line":39},[25,15686,14826],{"class":240},[25,15688,15689],{"class":27,"line":51},[25,15690,2510],{"emptyLinePlaceholder":167},[25,15692,15693],{"class":27,"line":59},[25,15694,15695],{"class":302},"    \u002F\u002F姓名设置可读可写\n",[25,15697,15698,15700,15702,15704,15706,15708],{"class":27,"line":67},[25,15699,15019],{"class":240},[25,15701,15022],{"class":31},[25,15703,245],{"class":244},[25,15705,15027],{"class":31},[25,15707,15030],{"class":5326},[25,15709,12552],{"class":244},[25,15711,15712,15714,15716],{"class":27,"line":75},[25,15713,15364],{"class":244},[25,15715,290],{"class":240},[25,15717,15718],{"class":244}," name;\n",[25,15720,15721],{"class":27,"line":83},[25,15722,2297],{"class":244},[25,15724,15725,15728,15731],{"class":27,"line":91},[25,15726,15727],{"class":31},"    string",[25,15729,15730],{"class":31}," getName",[25,15732,2086],{"class":244},[25,15734,15735],{"class":27,"line":1429},[25,15736,2140],{"class":244},[25,15738,15739,15741],{"class":27,"line":1441},[25,15740,14862],{"class":240},[25,15742,15743],{"class":244}," m_Name;\n",[25,15745,15746],{"class":27,"line":1723},[25,15747,2297],{"class":244},[25,15749,15750],{"class":27,"line":1728},[25,15751,2510],{"emptyLinePlaceholder":167},[25,15753,15754],{"class":27,"line":1734},[25,15755,2510],{"emptyLinePlaceholder":167},[25,15757,15758],{"class":27,"line":1739},[25,15759,15760],{"class":302},"    \u002F\u002F获取年龄 \n",[25,15762,15763,15765,15768],{"class":27,"line":1753},[25,15764,2095],{"class":240},[25,15766,15767],{"class":31}," getAge",[25,15769,10963],{"class":244},[25,15771,15772,15774],{"class":27,"line":1758},[25,15773,14862],{"class":240},[25,15775,15776],{"class":244}," m_Age;\n",[25,15778,15779],{"class":27,"line":1764},[25,15780,2297],{"class":244},[25,15782,15783],{"class":27,"line":1785},[25,15784,15785],{"class":302},"    \u002F\u002F设置年龄\n",[25,15787,15788,15790,15793,15795,15797,15800],{"class":27,"line":1790},[25,15789,15019],{"class":240},[25,15791,15792],{"class":31}," setAge",[25,15794,245],{"class":244},[25,15796,248],{"class":240},[25,15798,15799],{"class":5326}," age",[25,15801,12552],{"class":244},[25,15803,15804,15806,15809,15811,15813,15815,15818,15820,15823],{"class":27,"line":1804},[25,15805,2607],{"class":240},[25,15807,15808],{"class":244}," (age ",[25,15810,1153],{"class":240},[25,15812,4203],{"class":35},[25,15814,3365],{"class":240},[25,15816,15817],{"class":244}," age ",[25,15819,1203],{"class":240},[25,15821,15822],{"class":35}," 150",[25,15824,12552],{"class":244},[25,15826,15827,15829,15831,15834,15836],{"class":27,"line":1809},[25,15828,9829],{"class":244},[25,15830,1286],{"class":240},[25,15832,15833],{"class":45}," \"你个老妖精!\"",[25,15835,1556],{"class":240},[25,15837,8950],{"class":244},[25,15839,15840,15843],{"class":27,"line":1838},[25,15841,15842],{"class":240},"            return",[25,15844,1403],{"class":244},[25,15846,15847],{"class":27,"line":1843},[25,15848,2639],{"class":244},[25,15850,15851,15854,15856],{"class":27,"line":1860},[25,15852,15853],{"class":244},"        m_Age ",[25,15855,290],{"class":240},[25,15857,7907],{"class":244},[25,15859,15860],{"class":27,"line":1865},[25,15861,2297],{"class":244},[25,15863,15864],{"class":27,"line":1870},[25,15865,2510],{"emptyLinePlaceholder":167},[25,15867,15868],{"class":27,"line":1875},[25,15869,15870],{"class":302},"    \u002F\u002F情人设置为只写\n",[25,15872,15873,15875,15878,15880,15882,15885],{"class":27,"line":1889},[25,15874,15019],{"class":240},[25,15876,15877],{"class":31}," setLover",[25,15879,245],{"class":244},[25,15881,15027],{"class":31},[25,15883,15884],{"class":5326}," lover",[25,15886,12552],{"class":244},[25,15888,15889,15892,15894],{"class":27,"line":1894},[25,15890,15891],{"class":244},"        m_Lover ",[25,15893,290],{"class":240},[25,15895,15896],{"class":244}," lover;\n",[25,15898,15899],{"class":27,"line":2687},[25,15900,2297],{"class":244},[25,15902,15903],{"class":27,"line":2701},[25,15904,2510],{"emptyLinePlaceholder":167},[25,15906,15907],{"class":27,"line":2709},[25,15908,15332],{"class":240},[25,15910,15911,15914],{"class":27,"line":2714},[25,15912,15913],{"class":244},"    string m_Name;",[25,15915,15916],{"class":302}," \u002F\u002F可读可写  姓名\n",[25,15918,15919],{"class":27,"line":2720},[25,15920,13320],{"class":244},[25,15922,15923,15925,15928],{"class":27,"line":2726},[25,15924,2095],{"class":240},[25,15926,15927],{"class":244}," m_Age;",[25,15929,15930],{"class":302}," \u002F\u002F只读  年龄\n",[25,15932,15933],{"class":27,"line":2731},[25,15934,2510],{"emptyLinePlaceholder":167},[25,15936,15937,15940],{"class":27,"line":8058},[25,15938,15939],{"class":244},"    string m_Lover;",[25,15941,15942],{"class":302}," \u002F\u002F只写  情人\n",[25,15944,15945],{"class":27,"line":8082},[25,15946,4105],{"class":244},[25,15948,15949],{"class":27,"line":8087},[25,15950,2510],{"emptyLinePlaceholder":167},[25,15952,15953,15955,15957],{"class":27,"line":8093},[25,15954,248],{"class":240},[25,15956,2083],{"class":31},[25,15958,10963],{"class":244},[25,15960,15961],{"class":27,"line":8120},[25,15962,2510],{"emptyLinePlaceholder":167},[25,15964,15965],{"class":27,"line":8125},[25,15966,15423],{"class":244},[25,15968,15969],{"class":27,"line":8131},[25,15970,15971],{"class":302},"    \u002F\u002F姓名设置\n",[25,15973,15974,15977,15979,15981,15983],{"class":27,"line":8143},[25,15975,15976],{"class":244},"    p.",[25,15978,15176],{"class":31},[25,15980,245],{"class":244},[25,15982,8026],{"class":45},[25,15984,2829],{"class":244},[25,15986,15987,15989,15991,15994,15996,15999,16002,16004,16006],{"class":27,"line":8155},[25,15988,6639],{"class":244},[25,15990,1286],{"class":240},[25,15992,15993],{"class":45}," \"姓名： \"",[25,15995,1556],{"class":240},[25,15997,15998],{"class":244}," p.",[25,16000,16001],{"class":31},"getName",[25,16003,13160],{"class":244},[25,16005,1286],{"class":240},[25,16007,8950],{"class":244},[25,16009,16010],{"class":27,"line":8167},[25,16011,2510],{"emptyLinePlaceholder":167},[25,16013,16014],{"class":27,"line":9826},[25,16015,16016],{"class":302},"    \u002F\u002F年龄设置\n",[25,16018,16019,16021,16024,16026,16028],{"class":27,"line":9851},[25,16020,15976],{"class":244},[25,16022,16023],{"class":31},"setAge",[25,16025,245],{"class":244},[25,16027,899],{"class":35},[25,16029,2829],{"class":244},[25,16031,16032,16034,16036,16039,16041,16043,16046,16048,16050],{"class":27,"line":9874},[25,16033,6639],{"class":244},[25,16035,1286],{"class":240},[25,16037,16038],{"class":45}," \"年龄： \"",[25,16040,1556],{"class":240},[25,16042,15998],{"class":244},[25,16044,16045],{"class":31},"getAge",[25,16047,13160],{"class":244},[25,16049,1286],{"class":240},[25,16051,8950],{"class":244},[25,16053,16054],{"class":27,"line":9898},[25,16055,2510],{"emptyLinePlaceholder":167},[25,16057,16058],{"class":27,"line":9903},[25,16059,16060],{"class":302},"    \u002F\u002F情人设置\n",[25,16062,16063,16065,16068,16070,16073],{"class":27,"line":9908},[25,16064,15976],{"class":244},[25,16066,16067],{"class":31},"setLover",[25,16069,245],{"class":244},[25,16071,16072],{"class":45},"\"苍井\"",[25,16074,2829],{"class":244},[25,16076,16077,16080],{"class":27,"line":9913},[25,16078,16079],{"class":302},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[25,16081,16082],{"class":302},"  \u002F\u002F只写属性，不可以读取\n",[25,16084,16085],{"class":27,"line":9922},[25,16086,2510],{"emptyLinePlaceholder":167},[25,16088,16089,16091,16093,16095],{"class":27,"line":9927},[25,16090,2413],{"class":31},[25,16092,245],{"class":244},[25,16094,2418],{"class":45},[25,16096,2829],{"class":244},[25,16098,16099],{"class":27,"line":9933},[25,16100,2510],{"emptyLinePlaceholder":167},[25,16102,16103,16105,16107],{"class":27,"line":9954},[25,16104,4200],{"class":240},[25,16106,4203],{"class":35},[25,16108,1403],{"class":244},[25,16110,16111],{"class":27,"line":9960},[25,16112,1676],{"class":244},[210,16114,16116],{"id":16115},"_814封装案例","8.1.4封装案例",[194,16118,16119],{},[106,16120,16121,16124],{},[392,16122,16123],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[103,16126,16127,16130],{},[106,16128,16129],{},"求出立方体的面积和体积",[106,16131,16132],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[15,16134,16136],{"className":231,"code":16135,"language":233,"meta":20,"style":20},"#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",[22,16137,16138,16144,16154,16161,16165,16169,16174,16204,16208,16218,16228,16238,16242,16251,16255,16291,16295,16304,16308,16324,16328,16333,16342,16346,16353,16357,16366,16370,16377,16381,16390,16394,16401,16405,16410,16427,16431,16477,16481,16490,16494,16498,16502,16511,16515,16519,16524,16528,16534,16540,16546,16550,16554,16559,16581,16585,16639,16643,16651,16655,16660,16665,16678,16685,16701,16712,16718,16741,16747,16770,16784,16804,16810,16821,16844,16866,16871,16877,16891,16904,16909,16923,16928,16934,16939,16953,16958,16963,16977,16989,16994,17007,17012,17017,17022,17035,17040],{"__ignoreMap":20},[25,16139,16140,16142],{"class":27,"line":28},[25,16141,2060],{"class":240},[25,16143,2063],{"class":45},[25,16145,16146,16148,16150,16152],{"class":27,"line":39},[25,16147,2068],{"class":240},[25,16149,2071],{"class":240},[25,16151,2074],{"class":31},[25,16153,1403],{"class":244},[25,16155,16156,16158],{"class":27,"line":51},[25,16157,14804],{"class":240},[25,16159,16160],{"class":31}," Cube\n",[25,16162,16163],{"class":27,"line":59},[25,16164,1657],{"class":244},[25,16166,16167],{"class":27,"line":67},[25,16168,14826],{"class":240},[25,16170,16171],{"class":27,"line":75},[25,16172,16173],{"class":302},"    \u002F\u002F输入长宽高\n",[25,16175,16176,16178,16181,16183,16185,16188,16190,16192,16195,16197,16199,16202],{"class":27,"line":83},[25,16177,15019],{"class":240},[25,16179,16180],{"class":31}," setLwh",[25,16182,245],{"class":244},[25,16184,248],{"class":240},[25,16186,16187],{"class":5326}," l",[25,16189,621],{"class":244},[25,16191,248],{"class":240},[25,16193,16194],{"class":5326}," w",[25,16196,621],{"class":244},[25,16198,248],{"class":240},[25,16200,16201],{"class":5326}," h",[25,16203,251],{"class":244},[25,16205,16206],{"class":27,"line":91},[25,16207,2140],{"class":244},[25,16209,16210,16213,16215],{"class":27,"line":1429},[25,16211,16212],{"class":244},"        m_L",[25,16214,290],{"class":240},[25,16216,16217],{"class":244},"l;\n",[25,16219,16220,16223,16225],{"class":27,"line":1441},[25,16221,16222],{"class":244},"        m_W",[25,16224,290],{"class":240},[25,16226,16227],{"class":244},"w;\n",[25,16229,16230,16233,16235],{"class":27,"line":1723},[25,16231,16232],{"class":244},"        m_H",[25,16234,290],{"class":240},[25,16236,16237],{"class":244},"h;\n",[25,16239,16240],{"class":27,"line":1728},[25,16241,2297],{"class":244},[25,16243,16244,16246,16249],{"class":27,"line":1734},[25,16245,2095],{"class":240},[25,16247,16248],{"class":31}," mianji",[25,16250,2086],{"class":244},[25,16252,16253],{"class":27,"line":1739},[25,16254,2140],{"class":244},[25,16256,16257,16259,16261,16263,16266,16268,16271,16273,16276,16278,16281,16283,16286,16288],{"class":27,"line":1753},[25,16258,14862],{"class":240},[25,16260,14865],{"class":35},[25,16262,698],{"class":240},[25,16264,16265],{"class":244},"(m_L",[25,16267,698],{"class":240},[25,16269,16270],{"class":244},"m_W ",[25,16272,724],{"class":240},[25,16274,16275],{"class":244}," m_L",[25,16277,698],{"class":240},[25,16279,16280],{"class":244},"m_H ",[25,16282,724],{"class":240},[25,16284,16285],{"class":244}," m_W",[25,16287,698],{"class":240},[25,16289,16290],{"class":244},"m_H);\n",[25,16292,16293],{"class":27,"line":1758},[25,16294,2297],{"class":244},[25,16296,16297,16299,16302],{"class":27,"line":1764},[25,16298,2095],{"class":240},[25,16300,16301],{"class":31}," tiji",[25,16303,2086],{"class":244},[25,16305,16306],{"class":27,"line":1785},[25,16307,2140],{"class":244},[25,16309,16310,16312,16314,16316,16319,16321],{"class":27,"line":1790},[25,16311,14862],{"class":240},[25,16313,16275],{"class":244},[25,16315,698],{"class":240},[25,16317,16318],{"class":244},"m_W",[25,16320,698],{"class":240},[25,16322,16323],{"class":244},"m_H;\n",[25,16325,16326],{"class":27,"line":1804},[25,16327,2297],{"class":244},[25,16329,16330],{"class":27,"line":1809},[25,16331,16332],{"class":302},"    \u002F\u002F获取长宽高\n",[25,16334,16335,16337,16340],{"class":27,"line":1838},[25,16336,2095],{"class":240},[25,16338,16339],{"class":31}," getLength",[25,16341,2086],{"class":244},[25,16343,16344],{"class":27,"line":1843},[25,16345,2140],{"class":244},[25,16347,16348,16350],{"class":27,"line":1860},[25,16349,14862],{"class":240},[25,16351,16352],{"class":244}," m_L;\n",[25,16354,16355],{"class":27,"line":1865},[25,16356,2297],{"class":244},[25,16358,16359,16361,16364],{"class":27,"line":1870},[25,16360,2095],{"class":240},[25,16362,16363],{"class":31}," getWidth",[25,16365,2086],{"class":244},[25,16367,16368],{"class":27,"line":1875},[25,16369,2140],{"class":244},[25,16371,16372,16374],{"class":27,"line":1889},[25,16373,14862],{"class":240},[25,16375,16376],{"class":244}," m_W;\n",[25,16378,16379],{"class":27,"line":1894},[25,16380,2297],{"class":244},[25,16382,16383,16385,16388],{"class":27,"line":2687},[25,16384,2095],{"class":240},[25,16386,16387],{"class":31}," getHeight",[25,16389,2086],{"class":244},[25,16391,16392],{"class":27,"line":2701},[25,16393,2140],{"class":244},[25,16395,16396,16398],{"class":27,"line":2709},[25,16397,14862],{"class":240},[25,16399,16400],{"class":244}," m_H;\n",[25,16402,16403],{"class":27,"line":2714},[25,16404,2297],{"class":244},[25,16406,16407],{"class":27,"line":2720},[25,16408,16409],{"class":302},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[25,16411,16412,16415,16418,16420,16423,16425],{"class":27,"line":2726},[25,16413,16414],{"class":240},"    bool",[25,16416,16417],{"class":31}," isEqual",[25,16419,245],{"class":244},[25,16421,16422],{"class":31},"Cube",[25,16424,2959],{"class":5326},[25,16426,251],{"class":244},[25,16428,16429],{"class":27,"line":2731},[25,16430,2140],{"class":244},[25,16432,16433,16435,16438,16441,16443,16445,16448,16450,16453,16456,16458,16460,16463,16465,16467,16470,16472,16474],{"class":27,"line":8058},[25,16434,2607],{"class":240},[25,16436,16437],{"class":244}," (c.",[25,16439,16440],{"class":31},"getLength",[25,16442,13160],{"class":244},[25,16444,3059],{"class":240},[25,16446,16447],{"class":244}," m_L ",[25,16449,1826],{"class":240},[25,16451,16452],{"class":244}," c.",[25,16454,16455],{"class":31},"getWidth",[25,16457,13160],{"class":244},[25,16459,3059],{"class":240},[25,16461,16462],{"class":244}," m_W ",[25,16464,1826],{"class":240},[25,16466,16452],{"class":244},[25,16468,16469],{"class":31},"getHeight",[25,16471,13160],{"class":244},[25,16473,3059],{"class":240},[25,16475,16476],{"class":244}," m_H)\n",[25,16478,16479],{"class":27,"line":8082},[25,16480,2620],{"class":244},[25,16482,16483,16485,16488],{"class":27,"line":8087},[25,16484,15842],{"class":240},[25,16486,16487],{"class":35}," true",[25,16489,1403],{"class":244},[25,16491,16492],{"class":27,"line":8093},[25,16493,2639],{"class":244},[25,16495,16496],{"class":27,"line":8120},[25,16497,2680],{"class":240},[25,16499,16500],{"class":27,"line":8125},[25,16501,2620],{"class":244},[25,16503,16504,16506,16509],{"class":27,"line":8131},[25,16505,15842],{"class":240},[25,16507,16508],{"class":35}," false",[25,16510,1403],{"class":244},[25,16512,16513],{"class":27,"line":8143},[25,16514,2639],{"class":244},[25,16516,16517],{"class":27,"line":8155},[25,16518,2297],{"class":244},[25,16520,16521],{"class":27,"line":8167},[25,16522,16523],{"class":302},"    \u002F\u002F私有属性\n",[25,16525,16526],{"class":27,"line":9826},[25,16527,15332],{"class":240},[25,16529,16530,16532],{"class":27,"line":9851},[25,16531,2095],{"class":240},[25,16533,16352],{"class":244},[25,16535,16536,16538],{"class":27,"line":9874},[25,16537,2095],{"class":240},[25,16539,16376],{"class":244},[25,16541,16542,16544],{"class":27,"line":9898},[25,16543,2095],{"class":240},[25,16545,16400],{"class":244},[25,16547,16548],{"class":27,"line":9903},[25,16549,2510],{"emptyLinePlaceholder":167},[25,16551,16552],{"class":27,"line":9908},[25,16553,4105],{"class":244},[25,16555,16556],{"class":27,"line":9913},[25,16557,16558],{"class":302},"\u002F\u002F全局函数判断两个立方体是否相等\n",[25,16560,16561,16563,16565,16567,16569,16572,16574,16576,16579],{"class":27,"line":9922},[25,16562,1466],{"class":240},[25,16564,16417],{"class":31},[25,16566,245],{"class":244},[25,16568,16422],{"class":31},[25,16570,16571],{"class":5326}," c1",[25,16573,621],{"class":244},[25,16575,16422],{"class":31},[25,16577,16578],{"class":5326}," c2",[25,16580,251],{"class":244},[25,16582,16583],{"class":27,"line":9927},[25,16584,1657],{"class":244},[25,16586,16587,16589,16592,16594,16596,16598,16601,16603,16606,16608,16610,16612,16614,16616,16618,16620,16622,16624,16626,16628,16630,16632,16634,16636],{"class":27,"line":9933},[25,16588,4200],{"class":240},[25,16590,16591],{"class":244}," (c1.",[25,16593,16440],{"class":31},[25,16595,13160],{"class":244},[25,16597,3059],{"class":240},[25,16599,16600],{"class":244}," c2.",[25,16602,16440],{"class":31},[25,16604,16605],{"class":244},"()) ",[25,16607,1826],{"class":240},[25,16609,16591],{"class":244},[25,16611,16455],{"class":31},[25,16613,13160],{"class":244},[25,16615,3059],{"class":240},[25,16617,16600],{"class":244},[25,16619,16455],{"class":31},[25,16621,16605],{"class":244},[25,16623,1826],{"class":240},[25,16625,16591],{"class":244},[25,16627,16469],{"class":31},[25,16629,13160],{"class":244},[25,16631,3059],{"class":240},[25,16633,16600],{"class":244},[25,16635,16469],{"class":31},[25,16637,16638],{"class":244},"());\n",[25,16640,16641],{"class":27,"line":9954},[25,16642,1676],{"class":244},[25,16644,16645,16647,16649],{"class":27,"line":9960},[25,16646,248],{"class":240},[25,16648,2083],{"class":31},[25,16650,2086],{"class":244},[25,16652,16653],{"class":27,"line":9974},[25,16654,1657],{"class":244},[25,16656,16657],{"class":27,"line":9980},[25,16658,16659],{"class":244},"    Cube c1;\n",[25,16661,16662],{"class":27,"line":10007},[25,16663,16664],{"class":302},"    \u002F\u002F输入立方体的长宽高\n",[25,16666,16667,16669,16671,16674,16676],{"class":27,"line":10016},[25,16668,1662],{"class":244},[25,16670,1286],{"class":240},[25,16672,16673],{"class":45},"\"请输入第一个立方体的长、宽、高：\"",[25,16675,1286],{"class":240},[25,16677,1308],{"class":244},[25,16679,16680,16682],{"class":27,"line":10022},[25,16681,2095],{"class":240},[25,16683,16684],{"class":244}," l,w,h,l1,w1,h1;\n",[25,16686,16687,16689,16691,16693,16695,16697,16699],{"class":27,"line":10030},[25,16688,2122],{"class":244},[25,16690,1541],{"class":240},[25,16692,761],{"class":244},[25,16694,1541],{"class":240},[25,16696,1038],{"class":244},[25,16698,1541],{"class":240},[25,16700,16237],{"class":244},[25,16702,16703,16706,16709],{"class":27,"line":10035},[25,16704,16705],{"class":244},"    c1.",[25,16707,16708],{"class":31},"setLwh",[25,16710,16711],{"class":244},"(l,w,h);\n",[25,16713,16715],{"class":27,"line":16714},66,[25,16716,16717],{"class":302},"    \u002F\u002F面积\n",[25,16719,16721,16723,16725,16728,16730,16732,16735,16737,16739],{"class":27,"line":16720},67,[25,16722,1662],{"class":244},[25,16724,1286],{"class":240},[25,16726,16727],{"class":45},"\"立方体的表面积为：\"",[25,16729,1286],{"class":240},[25,16731,14940],{"class":244},[25,16733,16734],{"class":31},"mianji",[25,16736,2537],{"class":244},[25,16738,1286],{"class":240},[25,16740,1308],{"class":244},[25,16742,16744],{"class":27,"line":16743},68,[25,16745,16746],{"class":302},"    \u002F\u002F体积\n",[25,16748,16750,16752,16754,16757,16759,16761,16764,16766,16768],{"class":27,"line":16749},69,[25,16751,1662],{"class":244},[25,16753,1286],{"class":240},[25,16755,16756],{"class":45},"\"立方体的体积为：\"",[25,16758,1286],{"class":240},[25,16760,14940],{"class":244},[25,16762,16763],{"class":31},"tiji",[25,16765,2537],{"class":244},[25,16767,1286],{"class":240},[25,16769,1308],{"class":244},[25,16771,16773,16775,16777,16780,16782],{"class":27,"line":16772},70,[25,16774,1662],{"class":244},[25,16776,1286],{"class":240},[25,16778,16779],{"class":45},"\"请输入第二个立方体的长、宽、高：\"",[25,16781,1286],{"class":240},[25,16783,1308],{"class":244},[25,16785,16787,16789,16791,16794,16796,16799,16801],{"class":27,"line":16786},71,[25,16788,2122],{"class":244},[25,16790,1541],{"class":240},[25,16792,16793],{"class":244},"l1",[25,16795,1541],{"class":240},[25,16797,16798],{"class":244},"w1",[25,16800,1541],{"class":240},[25,16802,16803],{"class":244},"h1;\n",[25,16805,16807],{"class":27,"line":16806},72,[25,16808,16809],{"class":244},"    Cube c2;\n",[25,16811,16813,16816,16818],{"class":27,"line":16812},73,[25,16814,16815],{"class":244},"    c2.",[25,16817,16708],{"class":31},[25,16819,16820],{"class":244},"(l1,w1,h1);\n",[25,16822,16824,16826,16828,16831,16833,16836,16838,16840,16842],{"class":27,"line":16823},74,[25,16825,1662],{"class":244},[25,16827,1286],{"class":240},[25,16829,16830],{"class":45},"\"第二个立方体的表面积为：\"",[25,16832,1286],{"class":240},[25,16834,16835],{"class":244},"c2.",[25,16837,16734],{"class":31},[25,16839,2537],{"class":244},[25,16841,1286],{"class":240},[25,16843,1308],{"class":244},[25,16845,16847,16849,16851,16854,16856,16858,16860,16862,16864],{"class":27,"line":16846},75,[25,16848,1662],{"class":244},[25,16850,1286],{"class":240},[25,16852,16853],{"class":45},"\"第二个立方体的体积为：\"",[25,16855,1286],{"class":240},[25,16857,16835],{"class":244},[25,16859,16763],{"class":31},[25,16861,2537],{"class":244},[25,16863,1286],{"class":240},[25,16865,1308],{"class":244},[25,16867,16869],{"class":27,"line":16868},76,[25,16870,2510],{"emptyLinePlaceholder":167},[25,16872,16874],{"class":27,"line":16873},77,[25,16875,16876],{"class":302},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[25,16878,16880,16882,16884,16887,16889],{"class":27,"line":16879},78,[25,16881,1662],{"class":244},[25,16883,1286],{"class":240},[25,16885,16886],{"class":45},"\"内部函数判断结果：\"",[25,16888,1286],{"class":240},[25,16890,1308],{"class":244},[25,16892,16894,16896,16898,16901],{"class":27,"line":16893},79,[25,16895,3211],{"class":240},[25,16897,16591],{"class":244},[25,16899,16900],{"class":31},"isEqual",[25,16902,16903],{"class":244},"(c2))\n",[25,16905,16907],{"class":27,"line":16906},80,[25,16908,2140],{"class":244},[25,16910,16912,16914,16916,16919,16921],{"class":27,"line":16911},81,[25,16913,3561],{"class":244},[25,16915,1286],{"class":240},[25,16917,16918],{"class":45},"\"两个立方体相等\"",[25,16920,1286],{"class":240},[25,16922,1308],{"class":244},[25,16924,16926],{"class":27,"line":16925},82,[25,16927,2297],{"class":244},[25,16929,16931],{"class":27,"line":16930},83,[25,16932,16933],{"class":240},"    else\n",[25,16935,16937],{"class":27,"line":16936},84,[25,16938,2140],{"class":244},[25,16940,16942,16944,16946,16949,16951],{"class":27,"line":16941},85,[25,16943,3561],{"class":244},[25,16945,1286],{"class":240},[25,16947,16948],{"class":45},"\"两个立方体不相等\"",[25,16950,1286],{"class":240},[25,16952,1308],{"class":244},[25,16954,16956],{"class":27,"line":16955},86,[25,16957,2297],{"class":244},[25,16959,16961],{"class":27,"line":16960},87,[25,16962,2510],{"emptyLinePlaceholder":167},[25,16964,16966,16968,16970,16973,16975],{"class":27,"line":16965},88,[25,16967,1662],{"class":244},[25,16969,1286],{"class":240},[25,16971,16972],{"class":45},"\"全局函数判断结果：\"",[25,16974,1286],{"class":240},[25,16976,1308],{"class":244},[25,16978,16980,16982,16984,16986],{"class":27,"line":16979},89,[25,16981,3211],{"class":240},[25,16983,1769],{"class":244},[25,16985,16900],{"class":31},[25,16987,16988],{"class":244},"(c1, c2))\n",[25,16990,16992],{"class":27,"line":16991},90,[25,16993,2140],{"class":244},[25,16995,16997,16999,17001,17003,17005],{"class":27,"line":16996},91,[25,16998,3561],{"class":244},[25,17000,1286],{"class":240},[25,17002,16918],{"class":45},[25,17004,1286],{"class":240},[25,17006,1308],{"class":244},[25,17008,17010],{"class":27,"line":17009},92,[25,17011,2297],{"class":244},[25,17013,17015],{"class":27,"line":17014},93,[25,17016,16933],{"class":240},[25,17018,17020],{"class":27,"line":17019},94,[25,17021,2140],{"class":244},[25,17023,17025,17027,17029,17031,17033],{"class":27,"line":17024},95,[25,17026,3561],{"class":244},[25,17028,1286],{"class":240},[25,17030,16948],{"class":45},[25,17032,1286],{"class":240},[25,17034,1308],{"class":244},[25,17036,17038],{"class":27,"line":17037},96,[25,17039,2297],{"class":244},[25,17041,17043],{"class":27,"line":17042},97,[25,17044,1676],{"class":244},[194,17046,17047],{"start":39},[106,17048,17049],{},[392,17050,17051],{},"练习案例2：点和圆的关系",[103,17053,17054],{},[106,17055,17056],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[15,17058,17060],{"className":231,"code":17059,"language":233,"meta":20,"style":20},"#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",[22,17061,17062,17068,17078,17085,17092,17096,17100,17105,17139,17144,17160,17174,17178,17182,17189,17196,17200,17206,17210,17214,17218,17240,17263,17268,17282,17297,17301,17305,17311,17316,17321,17325,17351,17355,17385,17413,17441,17458,17462,17475,17479,17483,17487,17500,17504,17508,17516,17520,17524,17528,17533,17537,17548,17555,17564,17574,17585,17592,17605,17616,17626,17637,17644,17658,17663,17673,17681],{"__ignoreMap":20},[25,17063,17064,17066],{"class":27,"line":28},[25,17065,2060],{"class":240},[25,17067,2063],{"class":45},[25,17069,17070,17072,17074,17076],{"class":27,"line":39},[25,17071,2068],{"class":240},[25,17073,2071],{"class":240},[25,17075,2074],{"class":31},[25,17077,1403],{"class":244},[25,17079,17080,17082],{"class":27,"line":51},[25,17081,2060],{"class":240},[25,17083,17084],{"class":45},"\u003Ccmath>\n",[25,17086,17087,17089],{"class":27,"line":59},[25,17088,14804],{"class":240},[25,17090,17091],{"class":31}," Point\n",[25,17093,17094],{"class":27,"line":67},[25,17095,1657],{"class":244},[25,17097,17098],{"class":27,"line":75},[25,17099,14826],{"class":240},[25,17101,17102],{"class":27,"line":83},[25,17103,17104],{"class":302},"    \u002F\u002F赋值\n",[25,17106,17107,17109,17112,17114,17116,17119,17121,17123,17126,17129,17131,17134,17136],{"class":27,"line":91},[25,17108,15019],{"class":240},[25,17110,17111],{"class":31}," setPoint",[25,17113,245],{"class":244},[25,17115,14147],{"class":240},[25,17117,17118],{"class":5326}," x",[25,17120,12545],{"class":244},[25,17122,14147],{"class":240},[25,17124,17125],{"class":5326}," y",[25,17127,17128],{"class":244},") { m_x ",[25,17130,290],{"class":240},[25,17132,17133],{"class":244}," x; m_y ",[25,17135,290],{"class":240},[25,17137,17138],{"class":244}," y; }\n",[25,17140,17141],{"class":27,"line":1429},[25,17142,17143],{"class":302},"    \u002F\u002F获取坐标\n",[25,17145,17146,17148,17151,17154,17157],{"class":27,"line":1441},[25,17147,14848],{"class":240},[25,17149,17150],{"class":31}," getX",[25,17152,17153],{"class":244},"() { ",[25,17155,17156],{"class":240},"return",[25,17158,17159],{"class":244}," m_x; }\n",[25,17161,17162,17164,17167,17169,17171],{"class":27,"line":1723},[25,17163,14848],{"class":240},[25,17165,17166],{"class":31}," getY",[25,17168,17153],{"class":244},[25,17170,17156],{"class":240},[25,17172,17173],{"class":244}," m_y; }\n",[25,17175,17176],{"class":27,"line":1728},[25,17177,2510],{"emptyLinePlaceholder":167},[25,17179,17180],{"class":27,"line":1734},[25,17181,15332],{"class":240},[25,17183,17184,17186],{"class":27,"line":1739},[25,17185,14848],{"class":240},[25,17187,17188],{"class":244}," m_x;\n",[25,17190,17191,17193],{"class":27,"line":1753},[25,17192,14848],{"class":240},[25,17194,17195],{"class":244}," m_y;\n",[25,17197,17198],{"class":27,"line":1758},[25,17199,4105],{"class":244},[25,17201,17202,17204],{"class":27,"line":1764},[25,17203,14804],{"class":240},[25,17205,14807],{"class":31},[25,17207,17208],{"class":27,"line":1785},[25,17209,1657],{"class":244},[25,17211,17212],{"class":27,"line":1790},[25,17213,14826],{"class":240},[25,17215,17216],{"class":27,"line":1804},[25,17217,17104],{"class":302},[25,17219,17220,17222,17225,17227,17229,17232,17235,17237],{"class":27,"line":1809},[25,17221,15019],{"class":240},[25,17223,17224],{"class":31}," setRadius",[25,17226,245],{"class":244},[25,17228,14147],{"class":240},[25,17230,17231],{"class":5326}," r",[25,17233,17234],{"class":244},") { m_r ",[25,17236,290],{"class":240},[25,17238,17239],{"class":244}," r; }\n",[25,17241,17242,17244,17247,17249,17252,17255,17258,17260],{"class":27,"line":1838},[25,17243,15019],{"class":240},[25,17245,17246],{"class":31}," setCenter",[25,17248,245],{"class":244},[25,17250,17251],{"class":31},"Point",[25,17253,17254],{"class":5326}," center",[25,17256,17257],{"class":244},") { m_center ",[25,17259,290],{"class":240},[25,17261,17262],{"class":244}," center; }\n",[25,17264,17265],{"class":27,"line":1843},[25,17266,17267],{"class":302},"    \u002F\u002F获取属性\n",[25,17269,17270,17272,17275,17277,17279],{"class":27,"line":1860},[25,17271,14848],{"class":240},[25,17273,17274],{"class":31}," getRadius",[25,17276,17153],{"class":244},[25,17278,17156],{"class":240},[25,17280,17281],{"class":244}," m_r; }\n",[25,17283,17284,17287,17290,17292,17294],{"class":27,"line":1865},[25,17285,17286],{"class":31},"    Point",[25,17288,17289],{"class":31}," getCenter",[25,17291,17153],{"class":244},[25,17293,17156],{"class":240},[25,17295,17296],{"class":244}," m_center; }\n",[25,17298,17299],{"class":27,"line":1870},[25,17300,2510],{"emptyLinePlaceholder":167},[25,17302,17303],{"class":27,"line":1875},[25,17304,15332],{"class":240},[25,17306,17307,17309],{"class":27,"line":1889},[25,17308,14848],{"class":240},[25,17310,14838],{"class":244},[25,17312,17313],{"class":27,"line":1894},[25,17314,17315],{"class":302},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[25,17317,17318],{"class":27,"line":2687},[25,17319,17320],{"class":244},"    Point m_center;\n",[25,17322,17323],{"class":27,"line":2701},[25,17324,4105],{"class":244},[25,17326,17327,17329,17332,17334,17337,17339,17341,17343,17345,17347,17349],{"class":27,"line":2709},[25,17328,5474],{"class":240},[25,17330,17331],{"class":31}," isInCircle",[25,17333,245],{"class":244},[25,17335,17336],{"class":31},"Circle",[25,17338,10694],{"class":240},[25,17340,531],{"class":5326},[25,17342,621],{"class":244},[25,17344,17251],{"class":31},[25,17346,10694],{"class":240},[25,17348,99],{"class":5326},[25,17350,251],{"class":244},[25,17352,17353],{"class":27,"line":2714},[25,17354,1657],{"class":244},[25,17356,17357,17359,17362,17364,17366,17369,17372,17375,17377,17379,17381,17383],{"class":27,"line":2720},[25,17358,14848],{"class":240},[25,17360,17361],{"class":244}," dx ",[25,17363,290],{"class":240},[25,17365,16452],{"class":244},[25,17367,17368],{"class":31},"getCenter",[25,17370,17371],{"class":244},"().",[25,17373,17374],{"class":31},"getX",[25,17376,13160],{"class":244},[25,17378,775],{"class":240},[25,17380,15998],{"class":244},[25,17382,17374],{"class":31},[25,17384,5746],{"class":244},[25,17386,17387,17389,17392,17394,17396,17398,17400,17403,17405,17407,17409,17411],{"class":27,"line":2726},[25,17388,14848],{"class":240},[25,17390,17391],{"class":244}," dy ",[25,17393,290],{"class":240},[25,17395,16452],{"class":244},[25,17397,17368],{"class":31},[25,17399,17371],{"class":244},[25,17401,17402],{"class":31},"getY",[25,17404,13160],{"class":244},[25,17406,775],{"class":240},[25,17408,15998],{"class":244},[25,17410,17402],{"class":31},[25,17412,5746],{"class":244},[25,17414,17415,17417,17420,17422,17425,17428,17430,17432,17434,17436,17438],{"class":27,"line":2731},[25,17416,14848],{"class":240},[25,17418,17419],{"class":244}," distance ",[25,17421,290],{"class":240},[25,17423,17424],{"class":31}," sqrt",[25,17426,17427],{"class":244},"(dx ",[25,17429,698],{"class":240},[25,17431,17361],{"class":244},[25,17433,724],{"class":240},[25,17435,17391],{"class":244},[25,17437,698],{"class":240},[25,17439,17440],{"class":244}," dy);\n",[25,17442,17443,17445,17448,17450,17452,17455],{"class":27,"line":8058},[25,17444,3211],{"class":240},[25,17446,17447],{"class":244}," (distance ",[25,17449,1153],{"class":240},[25,17451,16452],{"class":244},[25,17453,17454],{"class":31},"getRadius",[25,17456,17457],{"class":244},"())\n",[25,17459,17460],{"class":27,"line":8082},[25,17461,2140],{"class":244},[25,17463,17464,17466,17468,17471,17473],{"class":27,"line":8087},[25,17465,9779],{"class":244},[25,17467,1286],{"class":240},[25,17469,17470],{"class":45}," \"点在圆内\"",[25,17472,1556],{"class":240},[25,17474,8950],{"class":244},[25,17476,17477],{"class":27,"line":8093},[25,17478,2297],{"class":244},[25,17480,17481],{"class":27,"line":8120},[25,17482,16933],{"class":240},[25,17484,17485],{"class":27,"line":8125},[25,17486,2140],{"class":244},[25,17488,17489,17491,17493,17496,17498],{"class":27,"line":8131},[25,17490,9779],{"class":244},[25,17492,1286],{"class":240},[25,17494,17495],{"class":45}," \"点在圆外\"",[25,17497,1556],{"class":240},[25,17499,8950],{"class":244},[25,17501,17502],{"class":27,"line":8143},[25,17503,2297],{"class":244},[25,17505,17506],{"class":27,"line":8155},[25,17507,1676],{"class":244},[25,17509,17510,17512,17514],{"class":27,"line":8167},[25,17511,248],{"class":240},[25,17513,2083],{"class":31},[25,17515,2086],{"class":244},[25,17517,17518],{"class":27,"line":9826},[25,17519,1657],{"class":244},[25,17521,17522],{"class":27,"line":9851},[25,17523,15163],{"class":302},[25,17525,17526],{"class":27,"line":9874},[25,17527,14910],{"class":244},[25,17529,17530],{"class":27,"line":9898},[25,17531,17532],{"class":244},"    Point p1;\n",[25,17534,17535],{"class":27,"line":9903},[25,17536,17104],{"class":302},[25,17538,17539,17541,17543,17546],{"class":27,"line":9908},[25,17540,1662],{"class":244},[25,17542,1286],{"class":240},[25,17544,17545],{"class":45},"\"请输入圆的半径：\"",[25,17547,1403],{"class":244},[25,17549,17550,17552],{"class":27,"line":9913},[25,17551,14848],{"class":240},[25,17553,17554],{"class":244}," r;\n",[25,17556,17557,17559,17561],{"class":27,"line":9922},[25,17558,2122],{"class":244},[25,17560,1541],{"class":240},[25,17562,17563],{"class":244},"r;\n",[25,17565,17566,17568,17571],{"class":27,"line":9927},[25,17567,16705],{"class":244},[25,17569,17570],{"class":31},"setRadius",[25,17572,17573],{"class":244},"(r);\n",[25,17575,17576,17578,17580,17583],{"class":27,"line":9933},[25,17577,1662],{"class":244},[25,17579,1286],{"class":240},[25,17581,17582],{"class":45},"\"请输入圆心坐标：\"",[25,17584,1403],{"class":244},[25,17586,17587,17589],{"class":27,"line":9954},[25,17588,14848],{"class":240},[25,17590,17591],{"class":244}," x, y;\n",[25,17593,17594,17596,17598,17600,17602],{"class":27,"line":9960},[25,17595,2122],{"class":244},[25,17597,1541],{"class":240},[25,17599,1063],{"class":244},[25,17601,1541],{"class":240},[25,17603,17604],{"class":244},"y;\n",[25,17606,17607,17610,17613],{"class":27,"line":9974},[25,17608,17609],{"class":244},"    p1.",[25,17611,17612],{"class":31},"setPoint",[25,17614,17615],{"class":244},"(x, y);\n",[25,17617,17618,17620,17623],{"class":27,"line":9980},[25,17619,16705],{"class":244},[25,17621,17622],{"class":31},"setCenter",[25,17624,17625],{"class":244},"(p1);\n",[25,17627,17628,17630,17632,17635],{"class":27,"line":10007},[25,17629,1662],{"class":244},[25,17631,1286],{"class":240},[25,17633,17634],{"class":45},"\"请输入测试点坐标：\"",[25,17636,1403],{"class":244},[25,17638,17639,17641],{"class":27,"line":10016},[25,17640,14848],{"class":240},[25,17642,17643],{"class":244}," x1, y1;\n",[25,17645,17646,17648,17650,17653,17655],{"class":27,"line":10022},[25,17647,2122],{"class":244},[25,17649,1541],{"class":240},[25,17651,17652],{"class":244},"x1",[25,17654,1541],{"class":240},[25,17656,17657],{"class":244},"y1;\n",[25,17659,17660],{"class":27,"line":10030},[25,17661,17662],{"class":244},"    Point p2;\n",[25,17664,17665,17668,17670],{"class":27,"line":10035},[25,17666,17667],{"class":244},"    p2.",[25,17669,17612],{"class":31},[25,17671,17672],{"class":244},"(x1, y1);\n",[25,17674,17675,17678],{"class":27,"line":16714},[25,17676,17677],{"class":31},"    isInCircle",[25,17679,17680],{"class":244},"(c1, p2);\n",[25,17682,17683],{"class":27,"line":16720},[25,17684,1676],{"class":244},[99,17686,17687],{},"在类中可以让另一个类作为本来的成员",[99,17689,17690],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[99,17692,17693],{},"创建point.h",[15,17695,17697],{"className":231,"code":17696,"language":233,"meta":20,"style":20},"#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",[22,17698,17699,17710,17716,17726,17732,17736,17741,17745,17749,17769,17773,17781,17789,17793,17797,17803,17809],{"__ignoreMap":20},[25,17700,17701,17704,17707],{"class":27,"line":28},[25,17702,17703],{"class":240},"#pragma",[25,17705,17706],{"class":31}," once",[25,17708,17709],{"class":302}," \u002F\u002F防止头文件重复包含\n",[25,17711,17712,17714],{"class":27,"line":39},[25,17713,2060],{"class":240},[25,17715,2063],{"class":45},[25,17717,17718,17720,17722,17724],{"class":27,"line":51},[25,17719,2068],{"class":240},[25,17721,2071],{"class":240},[25,17723,2074],{"class":31},[25,17725,1403],{"class":244},[25,17727,17728,17730],{"class":27,"line":59},[25,17729,14804],{"class":240},[25,17731,17091],{"class":31},[25,17733,17734],{"class":27,"line":67},[25,17735,1657],{"class":244},[25,17737,17738],{"class":27,"line":75},[25,17739,17740],{"class":302},"\u002F\u002F做好声明与变量定义就可以\n",[25,17742,17743],{"class":27,"line":83},[25,17744,14826],{"class":240},[25,17746,17747],{"class":27,"line":91},[25,17748,17104],{"class":302},[25,17750,17751,17753,17755,17757,17759,17761,17763,17765,17767],{"class":27,"line":1429},[25,17752,15019],{"class":240},[25,17754,17111],{"class":31},[25,17756,245],{"class":244},[25,17758,14147],{"class":240},[25,17760,17118],{"class":5326},[25,17762,12545],{"class":244},[25,17764,14147],{"class":240},[25,17766,17125],{"class":5326},[25,17768,2829],{"class":244},[25,17770,17771],{"class":27,"line":1441},[25,17772,17143],{"class":302},[25,17774,17775,17777,17779],{"class":27,"line":1723},[25,17776,14848],{"class":240},[25,17778,17150],{"class":31},[25,17780,5746],{"class":244},[25,17782,17783,17785,17787],{"class":27,"line":1728},[25,17784,14848],{"class":240},[25,17786,17166],{"class":31},[25,17788,5746],{"class":244},[25,17790,17791],{"class":27,"line":1734},[25,17792,2510],{"emptyLinePlaceholder":167},[25,17794,17795],{"class":27,"line":1739},[25,17796,15332],{"class":240},[25,17798,17799,17801],{"class":27,"line":1753},[25,17800,14848],{"class":240},[25,17802,17188],{"class":244},[25,17804,17805,17807],{"class":27,"line":1758},[25,17806,14848],{"class":240},[25,17808,17195],{"class":244},[25,17810,17811],{"class":27,"line":1764},[25,17812,4105],{"class":244},[99,17814,17815],{},"创建point.cpp",[15,17817,17819],{"className":231,"code":17818,"language":233,"meta":20,"style":20},"#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",[22,17820,17821,17828,17833,17867,17871,17887],{"__ignoreMap":20},[25,17822,17823,17825],{"class":27,"line":28},[25,17824,2060],{"class":240},[25,17826,17827],{"class":45},"\u003Cpoint.h>\n",[25,17829,17830],{"class":27,"line":39},[25,17831,17832],{"class":302},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[25,17834,17835,17837,17840,17843,17845,17847,17849,17851,17853,17855,17857,17859,17861,17863,17865],{"class":27,"line":51},[25,17836,15019],{"class":240},[25,17838,17839],{"class":31}," Point",[25,17841,17842],{"class":244},"::",[25,17844,17612],{"class":31},[25,17846,245],{"class":244},[25,17848,14147],{"class":240},[25,17850,17118],{"class":5326},[25,17852,12545],{"class":244},[25,17854,14147],{"class":240},[25,17856,17125],{"class":5326},[25,17858,17128],{"class":244},[25,17860,290],{"class":240},[25,17862,17133],{"class":244},[25,17864,290],{"class":240},[25,17866,17138],{"class":244},[25,17868,17869],{"class":27,"line":59},[25,17870,17143],{"class":302},[25,17872,17873,17875,17877,17879,17881,17883,17885],{"class":27,"line":67},[25,17874,14848],{"class":240},[25,17876,17839],{"class":31},[25,17878,17842],{"class":244},[25,17880,17374],{"class":31},[25,17882,17153],{"class":244},[25,17884,17156],{"class":240},[25,17886,17159],{"class":244},[25,17888,17889,17891,17893,17895,17897,17899,17901],{"class":27,"line":75},[25,17890,14848],{"class":240},[25,17892,17839],{"class":31},[25,17894,17842],{"class":244},[25,17896,17402],{"class":31},[25,17898,17153],{"class":244},[25,17900,17156],{"class":240},[25,17902,17173],{"class":244},[99,17904,17905],{},"创建circle.h",[15,17907,17909],{"className":231,"code":17908,"language":233,"meta":20,"style":20},"#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",[22,17910,17911,17918,17924,17934,17940,17946,17950,17954,17958,17972,17986,17990,17998,18006,18010,18014,18020,18024,18028],{"__ignoreMap":20},[25,17912,17913,17915],{"class":27,"line":28},[25,17914,17703],{"class":240},[25,17916,17917],{"class":31}," once\n",[25,17919,17920,17922],{"class":27,"line":39},[25,17921,2060],{"class":240},[25,17923,2063],{"class":45},[25,17925,17926,17928,17930,17932],{"class":27,"line":51},[25,17927,2068],{"class":240},[25,17929,2071],{"class":240},[25,17931,2074],{"class":31},[25,17933,1403],{"class":244},[25,17935,17936,17938],{"class":27,"line":59},[25,17937,2060],{"class":240},[25,17939,17827],{"class":45},[25,17941,17942,17944],{"class":27,"line":67},[25,17943,14804],{"class":240},[25,17945,14807],{"class":31},[25,17947,17948],{"class":27,"line":75},[25,17949,1657],{"class":244},[25,17951,17952],{"class":27,"line":83},[25,17953,14826],{"class":240},[25,17955,17956],{"class":27,"line":91},[25,17957,17104],{"class":302},[25,17959,17960,17962,17964,17966,17968,17970],{"class":27,"line":1429},[25,17961,15019],{"class":240},[25,17963,17224],{"class":31},[25,17965,245],{"class":244},[25,17967,14147],{"class":240},[25,17969,17231],{"class":5326},[25,17971,2829],{"class":244},[25,17973,17974,17976,17978,17980,17982,17984],{"class":27,"line":1441},[25,17975,15019],{"class":240},[25,17977,17246],{"class":31},[25,17979,245],{"class":244},[25,17981,17251],{"class":31},[25,17983,17254],{"class":5326},[25,17985,2829],{"class":244},[25,17987,17988],{"class":27,"line":1723},[25,17989,17267],{"class":302},[25,17991,17992,17994,17996],{"class":27,"line":1728},[25,17993,14848],{"class":240},[25,17995,17274],{"class":31},[25,17997,5746],{"class":244},[25,17999,18000,18002,18004],{"class":27,"line":1734},[25,18001,17286],{"class":31},[25,18003,17289],{"class":31},[25,18005,5746],{"class":244},[25,18007,18008],{"class":27,"line":1739},[25,18009,2510],{"emptyLinePlaceholder":167},[25,18011,18012],{"class":27,"line":1753},[25,18013,15332],{"class":240},[25,18015,18016,18018],{"class":27,"line":1758},[25,18017,14848],{"class":240},[25,18019,14838],{"class":244},[25,18021,18022],{"class":27,"line":1764},[25,18023,17315],{"class":302},[25,18025,18026],{"class":27,"line":1785},[25,18027,17320],{"class":244},[25,18029,18030],{"class":27,"line":1790},[25,18031,4105],{"class":244},[99,18033,18034],{},"创建circle.cpp",[15,18036,18038],{"className":231,"code":18037,"language":233,"meta":20,"style":20},"#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",[22,18039,18040,18047,18070,18092,18097,18113],{"__ignoreMap":20},[25,18041,18042,18044],{"class":27,"line":28},[25,18043,2060],{"class":240},[25,18045,18046],{"class":45},"\u003Ccircle.h>\n",[25,18048,18049,18051,18054,18056,18058,18060,18062,18064,18066,18068],{"class":27,"line":39},[25,18050,5474],{"class":240},[25,18052,18053],{"class":31}," Circle",[25,18055,17842],{"class":244},[25,18057,17570],{"class":31},[25,18059,245],{"class":244},[25,18061,14147],{"class":240},[25,18063,17231],{"class":5326},[25,18065,17234],{"class":244},[25,18067,290],{"class":240},[25,18069,17239],{"class":244},[25,18071,18072,18074,18076,18078,18080,18082,18084,18086,18088,18090],{"class":27,"line":51},[25,18073,5474],{"class":240},[25,18075,18053],{"class":31},[25,18077,17842],{"class":244},[25,18079,17622],{"class":31},[25,18081,245],{"class":244},[25,18083,17251],{"class":31},[25,18085,17254],{"class":5326},[25,18087,17257],{"class":244},[25,18089,290],{"class":240},[25,18091,17262],{"class":244},[25,18093,18094],{"class":27,"line":59},[25,18095,18096],{"class":302},"\u002F\u002F获取属性\n",[25,18098,18099,18101,18103,18105,18107,18109,18111],{"class":27,"line":67},[25,18100,14147],{"class":240},[25,18102,18053],{"class":31},[25,18104,17842],{"class":244},[25,18106,17454],{"class":31},[25,18108,17153],{"class":244},[25,18110,17156],{"class":240},[25,18112,17281],{"class":244},[25,18114,18115,18117,18119,18121,18123,18125,18127],{"class":27,"line":75},[25,18116,17251],{"class":31},[25,18118,18053],{"class":31},[25,18120,17842],{"class":244},[25,18122,17368],{"class":31},[25,18124,17153],{"class":244},[25,18126,17156],{"class":240},[25,18128,17296],{"class":244},[99,18130,18131],{},"使用封装的类",[15,18133,18135],{"className":231,"code":18134,"language":233,"meta":20,"style":20},"#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",[22,18136,18137,18143,18153,18159,18165,18189,18193,18219,18245,18269,18283,18287,18299,18303,18307,18311,18323,18327,18331,18339,18343,18347,18351,18355,18359,18369,18375,18383,18391,18401,18407,18419,18427,18435,18445,18451,18463,18467,18475,18481],{"__ignoreMap":20},[25,18138,18139,18141],{"class":27,"line":28},[25,18140,2060],{"class":240},[25,18142,2063],{"class":45},[25,18144,18145,18147,18149,18151],{"class":27,"line":39},[25,18146,2068],{"class":240},[25,18148,2071],{"class":240},[25,18150,2074],{"class":31},[25,18152,1403],{"class":244},[25,18154,18155,18157],{"class":27,"line":51},[25,18156,2060],{"class":240},[25,18158,18046],{"class":45},[25,18160,18161,18163],{"class":27,"line":59},[25,18162,2060],{"class":240},[25,18164,17827],{"class":45},[25,18166,18167,18169,18171,18173,18175,18177,18179,18181,18183,18185,18187],{"class":27,"line":67},[25,18168,5474],{"class":240},[25,18170,17331],{"class":31},[25,18172,245],{"class":244},[25,18174,17336],{"class":31},[25,18176,10694],{"class":240},[25,18178,531],{"class":5326},[25,18180,621],{"class":244},[25,18182,17251],{"class":31},[25,18184,10694],{"class":240},[25,18186,99],{"class":5326},[25,18188,251],{"class":244},[25,18190,18191],{"class":27,"line":75},[25,18192,1657],{"class":244},[25,18194,18195,18197,18199,18201,18203,18205,18207,18209,18211,18213,18215,18217],{"class":27,"line":83},[25,18196,14848],{"class":240},[25,18198,17361],{"class":244},[25,18200,290],{"class":240},[25,18202,16452],{"class":244},[25,18204,17368],{"class":31},[25,18206,17371],{"class":244},[25,18208,17374],{"class":31},[25,18210,13160],{"class":244},[25,18212,775],{"class":240},[25,18214,15998],{"class":244},[25,18216,17374],{"class":31},[25,18218,5746],{"class":244},[25,18220,18221,18223,18225,18227,18229,18231,18233,18235,18237,18239,18241,18243],{"class":27,"line":91},[25,18222,14848],{"class":240},[25,18224,17391],{"class":244},[25,18226,290],{"class":240},[25,18228,16452],{"class":244},[25,18230,17368],{"class":31},[25,18232,17371],{"class":244},[25,18234,17402],{"class":31},[25,18236,13160],{"class":244},[25,18238,775],{"class":240},[25,18240,15998],{"class":244},[25,18242,17402],{"class":31},[25,18244,5746],{"class":244},[25,18246,18247,18249,18251,18253,18255,18257,18259,18261,18263,18265,18267],{"class":27,"line":1429},[25,18248,14848],{"class":240},[25,18250,17419],{"class":244},[25,18252,290],{"class":240},[25,18254,17424],{"class":31},[25,18256,17427],{"class":244},[25,18258,698],{"class":240},[25,18260,17361],{"class":244},[25,18262,724],{"class":240},[25,18264,17391],{"class":244},[25,18266,698],{"class":240},[25,18268,17440],{"class":244},[25,18270,18271,18273,18275,18277,18279,18281],{"class":27,"line":1441},[25,18272,3211],{"class":240},[25,18274,17447],{"class":244},[25,18276,1153],{"class":240},[25,18278,16452],{"class":244},[25,18280,17454],{"class":31},[25,18282,17457],{"class":244},[25,18284,18285],{"class":27,"line":1723},[25,18286,2140],{"class":244},[25,18288,18289,18291,18293,18295,18297],{"class":27,"line":1728},[25,18290,9779],{"class":244},[25,18292,1286],{"class":240},[25,18294,17470],{"class":45},[25,18296,1556],{"class":240},[25,18298,8950],{"class":244},[25,18300,18301],{"class":27,"line":1734},[25,18302,2297],{"class":244},[25,18304,18305],{"class":27,"line":1739},[25,18306,16933],{"class":240},[25,18308,18309],{"class":27,"line":1753},[25,18310,2140],{"class":244},[25,18312,18313,18315,18317,18319,18321],{"class":27,"line":1758},[25,18314,9779],{"class":244},[25,18316,1286],{"class":240},[25,18318,17495],{"class":45},[25,18320,1556],{"class":240},[25,18322,8950],{"class":244},[25,18324,18325],{"class":27,"line":1764},[25,18326,2297],{"class":244},[25,18328,18329],{"class":27,"line":1785},[25,18330,1676],{"class":244},[25,18332,18333,18335,18337],{"class":27,"line":1790},[25,18334,248],{"class":240},[25,18336,2083],{"class":31},[25,18338,2086],{"class":244},[25,18340,18341],{"class":27,"line":1804},[25,18342,1657],{"class":244},[25,18344,18345],{"class":27,"line":1809},[25,18346,15163],{"class":302},[25,18348,18349],{"class":27,"line":1838},[25,18350,14910],{"class":244},[25,18352,18353],{"class":27,"line":1843},[25,18354,17532],{"class":244},[25,18356,18357],{"class":27,"line":1860},[25,18358,17104],{"class":302},[25,18360,18361,18363,18365,18367],{"class":27,"line":1865},[25,18362,1662],{"class":244},[25,18364,1286],{"class":240},[25,18366,17545],{"class":45},[25,18368,1403],{"class":244},[25,18370,18371,18373],{"class":27,"line":1870},[25,18372,14848],{"class":240},[25,18374,17554],{"class":244},[25,18376,18377,18379,18381],{"class":27,"line":1875},[25,18378,2122],{"class":244},[25,18380,1541],{"class":240},[25,18382,17563],{"class":244},[25,18384,18385,18387,18389],{"class":27,"line":1889},[25,18386,16705],{"class":244},[25,18388,17570],{"class":31},[25,18390,17573],{"class":244},[25,18392,18393,18395,18397,18399],{"class":27,"line":1894},[25,18394,1662],{"class":244},[25,18396,1286],{"class":240},[25,18398,17582],{"class":45},[25,18400,1403],{"class":244},[25,18402,18403,18405],{"class":27,"line":2687},[25,18404,14848],{"class":240},[25,18406,17591],{"class":244},[25,18408,18409,18411,18413,18415,18417],{"class":27,"line":2701},[25,18410,2122],{"class":244},[25,18412,1541],{"class":240},[25,18414,1063],{"class":244},[25,18416,1541],{"class":240},[25,18418,17604],{"class":244},[25,18420,18421,18423,18425],{"class":27,"line":2709},[25,18422,17609],{"class":244},[25,18424,17612],{"class":31},[25,18426,17615],{"class":244},[25,18428,18429,18431,18433],{"class":27,"line":2714},[25,18430,16705],{"class":244},[25,18432,17622],{"class":31},[25,18434,17625],{"class":244},[25,18436,18437,18439,18441,18443],{"class":27,"line":2720},[25,18438,1662],{"class":244},[25,18440,1286],{"class":240},[25,18442,17634],{"class":45},[25,18444,1403],{"class":244},[25,18446,18447,18449],{"class":27,"line":2726},[25,18448,14848],{"class":240},[25,18450,17643],{"class":244},[25,18452,18453,18455,18457,18459,18461],{"class":27,"line":2731},[25,18454,2122],{"class":244},[25,18456,1541],{"class":240},[25,18458,17652],{"class":244},[25,18460,1541],{"class":240},[25,18462,17657],{"class":244},[25,18464,18465],{"class":27,"line":8058},[25,18466,17662],{"class":244},[25,18468,18469,18471,18473],{"class":27,"line":8082},[25,18470,17667],{"class":244},[25,18472,17612],{"class":31},[25,18474,17672],{"class":244},[25,18476,18477,18479],{"class":27,"line":8087},[25,18478,17677],{"class":31},[25,18480,17680],{"class":244},[25,18482,18483],{"class":27,"line":8093},[25,18484,1676],{"class":244},[182,18486,18488],{"id":18487},"_82对象的初始化清理","8.2对象的初始化清理",[103,18490,18491,18494],{},[106,18492,18493],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[106,18495,18496],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[210,18498,18500],{"id":18499},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[99,18502,18503,18504,18507],{},"对象的",[392,18505,18506],{},"初始化和清理","也是两个非常重要的安全问题",[99,18509,18510],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[99,18512,18513],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[99,18515,18516,18517,18520,18521,18524],{},"c++利用了",[392,18518,18519],{},"构造函数","和",[392,18522,18523],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[99,18526,18527,18528],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[392,18529,18530],{},"我们不提供构造和析构，编译器会提供",[99,18532,18533],{},[392,18534,18535],{},"编译器提供的构造函数和析构函数是空实现。",[103,18537,18538,18541],{},[106,18539,18540],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[106,18542,18543,18544,18547],{},"析构函数：主要作用在于对象",[392,18545,18546],{},"销毁前","系统自动调用，执行一些清理工作。",[99,18549,18550,18553],{},[392,18551,18552],{},"构造函数语法：",[22,18554,18555],{},"类名(){}",[194,18557,18558,18561,18564,18567,18570],{},[106,18559,18560],{},"构造函数，没有返回值也不写void",[106,18562,18563],{},"函数名称与类名相同",[106,18565,18566],{},"构造函数可以有参数，因此可以发生重载",[106,18568,18569],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[106,18571,18572,18573,672],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[22,18574,18575],{},"Person(){}",[99,18577,18578,13905,18581],{},[392,18579,18580],{},"析构函数语法：",[22,18582,18583],{},"~类名(){}",[194,18585,18586,18589,18592,18598],{},[106,18587,18588],{},"析构函数，没有返回值也不写void",[106,18590,18591],{},"函数名称与类名相同,在名称前加上符号  ~",[106,18593,18594,18595],{},"析构函数不可以有参数，因此",[392,18596,18597],{},"不可以发生重载",[106,18599,18600],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[15,18602,18604],{"className":231,"code":18603,"language":233,"meta":20,"style":20},"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",[22,18605,18606,18612,18616,18620,18625,18632,18636,18649,18653,18658,18665,18669,18682,18686,18690,18694,18698,18706,18710,18718,18722,18726,18734,18738,18743,18747,18754,18758,18771,18775,18783],{"__ignoreMap":20},[25,18607,18608,18610],{"class":27,"line":28},[25,18609,14804],{"class":240},[25,18611,15281],{"class":31},[25,18613,18614],{"class":27,"line":39},[25,18615,1657],{"class":244},[25,18617,18618],{"class":27,"line":51},[25,18619,14826],{"class":240},[25,18621,18622],{"class":27,"line":59},[25,18623,18624],{"class":302},"    \u002F\u002F构造函数\n",[25,18626,18627,18630],{"class":27,"line":67},[25,18628,18629],{"class":31},"    Person",[25,18631,2086],{"class":244},[25,18633,18634],{"class":27,"line":75},[25,18635,2140],{"class":244},[25,18637,18638,18640,18642,18645,18647],{"class":27,"line":83},[25,18639,9779],{"class":244},[25,18641,1286],{"class":240},[25,18643,18644],{"class":45}," \"Person的构造函数调用\"",[25,18646,1556],{"class":240},[25,18648,8950],{"class":244},[25,18650,18651],{"class":27,"line":91},[25,18652,2297],{"class":244},[25,18654,18655],{"class":27,"line":1429},[25,18656,18657],{"class":302},"    \u002F\u002F析构函数\n",[25,18659,18660,18663],{"class":27,"line":1441},[25,18661,18662],{"class":31},"    ~Person",[25,18664,2086],{"class":244},[25,18666,18667],{"class":27,"line":1723},[25,18668,2140],{"class":244},[25,18670,18671,18673,18675,18678,18680],{"class":27,"line":1728},[25,18672,9779],{"class":244},[25,18674,1286],{"class":240},[25,18676,18677],{"class":45}," \"Person的析构函数调用\"",[25,18679,1556],{"class":240},[25,18681,8950],{"class":244},[25,18683,18684],{"class":27,"line":1734},[25,18685,2297],{"class":244},[25,18687,18688],{"class":27,"line":1739},[25,18689,2510],{"emptyLinePlaceholder":167},[25,18691,18692],{"class":27,"line":1753},[25,18693,4105],{"class":244},[25,18695,18696],{"class":27,"line":1758},[25,18697,2510],{"emptyLinePlaceholder":167},[25,18699,18700,18702,18704],{"class":27,"line":1764},[25,18701,5474],{"class":240},[25,18703,5698],{"class":31},[25,18705,2086],{"class":244},[25,18707,18708],{"class":27,"line":1785},[25,18709,1657],{"class":244},[25,18711,18712,18715],{"class":27,"line":1790},[25,18713,18714],{"class":244},"    Person p;",[25,18716,18717],{"class":302},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[25,18719,18720],{"class":27,"line":1804},[25,18721,1676],{"class":244},[25,18723,18724],{"class":27,"line":1809},[25,18725,2510],{"emptyLinePlaceholder":167},[25,18727,18728,18730,18732],{"class":27,"line":1838},[25,18729,248],{"class":240},[25,18731,2083],{"class":31},[25,18733,10963],{"class":244},[25,18735,18736],{"class":27,"line":1843},[25,18737,13320],{"class":244},[25,18739,18740],{"class":27,"line":1860},[25,18741,18742],{"class":302},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[25,18744,18745],{"class":27,"line":1865},[25,18746,2510],{"emptyLinePlaceholder":167},[25,18748,18749,18751],{"class":27,"line":1870},[25,18750,18714],{"class":244},[25,18752,18753],{"class":302},"\u002F\u002F只有构造函数\n",[25,18755,18756],{"class":27,"line":1875},[25,18757,2510],{"emptyLinePlaceholder":167},[25,18759,18760,18762,18764,18766,18768],{"class":27,"line":1889},[25,18761,2413],{"class":31},[25,18763,245],{"class":244},[25,18765,2418],{"class":45},[25,18767,6076],{"class":244},[25,18769,18770],{"class":302},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[25,18772,18773],{"class":27,"line":1894},[25,18774,2510],{"emptyLinePlaceholder":167},[25,18776,18777,18779,18781],{"class":27,"line":2687},[25,18778,4200],{"class":240},[25,18780,4203],{"class":35},[25,18782,1403],{"class":244},[25,18784,18785],{"class":27,"line":2701},[25,18786,1676],{"class":244},[99,18788,18789],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[210,18791,18793],{"id":18792},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[99,18795,18796],{},"两种分类方式：",[99,18798,18799],{},"​\t按参数分为： 有参构造和无参构造",[99,18801,18802],{},"​\t按类型分为： 普通构造和拷贝构造",[99,18804,18805],{},"三种调用方式：",[99,18807,18808],{},"​\t括号法",[99,18810,18811],{},"​\t显示法",[99,18813,18814],{},"​\t隐式转换法",[15,18816,18818],{"className":231,"code":18817,"language":233,"meta":20,"style":20},"#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",[22,18819,18820,18826,18836,18841,18846,18851,18856,18860,18868,18872,18876,18880,18886,18890,18903,18907,18919,18923,18932,18945,18949,18953,18959,18963,18976,18980,18985,19001,19005,19010,19019,19032,19036,19042,19046,19051,19059,19063,19068,19072,19080,19084,19089,19094,19099,19104,19109,19113,19118,19123,19128,19133,19137,19142,19147,19163,19175,19180,19184,19189,19194,19199,19203,19208,19222,19235,19239,19247,19251,19257,19263,19271],{"__ignoreMap":20},[25,18821,18822,18824],{"class":27,"line":28},[25,18823,2060],{"class":240},[25,18825,2063],{"class":45},[25,18827,18828,18830,18832,18834],{"class":27,"line":39},[25,18829,2068],{"class":240},[25,18831,2071],{"class":240},[25,18833,2074],{"class":31},[25,18835,1403],{"class":244},[25,18837,18838],{"class":27,"line":51},[25,18839,18840],{"class":302},"\u002F\u002F1.构造函数的分类及调用\n",[25,18842,18843],{"class":27,"line":59},[25,18844,18845],{"class":302},"\u002F\u002F分类\n",[25,18847,18848],{"class":27,"line":67},[25,18849,18850],{"class":302},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[25,18852,18853],{"class":27,"line":75},[25,18854,18855],{"class":302},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[25,18857,18858],{"class":27,"line":83},[25,18859,2510],{"emptyLinePlaceholder":167},[25,18861,18862,18864,18866],{"class":27,"line":91},[25,18863,14804],{"class":240},[25,18865,15679],{"class":31},[25,18867,2784],{"class":244},[25,18869,18870],{"class":27,"line":1429},[25,18871,1657],{"class":244},[25,18873,18874],{"class":27,"line":1441},[25,18875,14826],{"class":240},[25,18877,18878],{"class":27,"line":1723},[25,18879,18624],{"class":302},[25,18881,18882,18884],{"class":27,"line":1728},[25,18883,18629],{"class":31},[25,18885,2086],{"class":244},[25,18887,18888],{"class":27,"line":1734},[25,18889,2140],{"class":244},[25,18891,18892,18894,18896,18899,18901],{"class":27,"line":1739},[25,18893,3561],{"class":244},[25,18895,1286],{"class":240},[25,18897,18898],{"class":45},"\"Person构造函数无参构造\"",[25,18900,1286],{"class":240},[25,18902,1308],{"class":244},[25,18904,18905],{"class":27,"line":1753},[25,18906,2297],{"class":244},[25,18908,18909,18911,18913,18915,18917],{"class":27,"line":1758},[25,18910,18629],{"class":31},[25,18912,245],{"class":244},[25,18914,248],{"class":240},[25,18916,1510],{"class":5326},[25,18918,251],{"class":244},[25,18920,18921],{"class":27,"line":1764},[25,18922,2140],{"class":244},[25,18924,18925,18928,18930],{"class":27,"line":1785},[25,18926,18927],{"class":244},"        age",[25,18929,290],{"class":240},[25,18931,6307],{"class":244},[25,18933,18934,18936,18938,18941,18943],{"class":27,"line":1790},[25,18935,3561],{"class":244},[25,18937,1286],{"class":240},[25,18939,18940],{"class":45},"\"Person构造函数有参构造\"",[25,18942,1286],{"class":240},[25,18944,1308],{"class":244},[25,18946,18947],{"class":27,"line":1804},[25,18948,2297],{"class":244},[25,18950,18951],{"class":27,"line":1809},[25,18952,18657],{"class":302},[25,18954,18955,18957],{"class":27,"line":1838},[25,18956,18662],{"class":31},[25,18958,2086],{"class":244},[25,18960,18961],{"class":27,"line":1843},[25,18962,2140],{"class":244},[25,18964,18965,18967,18969,18972,18974],{"class":27,"line":1860},[25,18966,3561],{"class":244},[25,18968,1286],{"class":240},[25,18970,18971],{"class":45},"\"Person析构函数被调用\"",[25,18973,1286],{"class":240},[25,18975,1308],{"class":244},[25,18977,18978],{"class":27,"line":1865},[25,18979,2297],{"class":244},[25,18981,18982],{"class":27,"line":1870},[25,18983,18984],{"class":302},"    \u002F\u002F拷贝构造函数\n",[25,18986,18987,18989,18991,18993,18995,18997,18999],{"class":27,"line":1875},[25,18988,18629],{"class":31},[25,18990,245],{"class":244},[25,18992,6902],{"class":240},[25,18994,15679],{"class":31},[25,18996,10694],{"class":240},[25,18998,99],{"class":5326},[25,19000,251],{"class":244},[25,19002,19003],{"class":27,"line":1889},[25,19004,2140],{"class":244},[25,19006,19007],{"class":27,"line":1894},[25,19008,19009],{"class":302},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[25,19011,19012,19014,19016],{"class":27,"line":2687},[25,19013,18927],{"class":244},[25,19015,290],{"class":240},[25,19017,19018],{"class":244},"p.age;\n",[25,19020,19021,19023,19025,19028,19030],{"class":27,"line":2701},[25,19022,3561],{"class":244},[25,19024,1286],{"class":240},[25,19026,19027],{"class":45},"\"Person拷贝构造函数被调用\"",[25,19029,1286],{"class":240},[25,19031,1308],{"class":244},[25,19033,19034],{"class":27,"line":2709},[25,19035,2297],{"class":244},[25,19037,19038,19040],{"class":27,"line":2714},[25,19039,2095],{"class":240},[25,19041,7907],{"class":244},[25,19043,19044],{"class":27,"line":2720},[25,19045,4105],{"class":244},[25,19047,19048],{"class":27,"line":2726},[25,19049,19050],{"class":302},"\u002F\u002F调用\n",[25,19052,19053,19055,19057],{"class":27,"line":2731},[25,19054,5474],{"class":240},[25,19056,5698],{"class":31},[25,19058,2086],{"class":244},[25,19060,19061],{"class":27,"line":8058},[25,19062,1657],{"class":244},[25,19064,19065],{"class":27,"line":8082},[25,19066,19067],{"class":302},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[25,19069,19070],{"class":27,"line":8087},[25,19071,1676],{"class":244},[25,19073,19074,19076,19078],{"class":27,"line":8093},[25,19075,5474],{"class":240},[25,19077,5767],{"class":31},[25,19079,2086],{"class":244},[25,19081,19082],{"class":27,"line":8120},[25,19083,1657],{"class":244},[25,19085,19086],{"class":27,"line":8125},[25,19087,19088],{"class":302},"    \u002F\u002F1.括号法\n",[25,19090,19091],{"class":27,"line":8131},[25,19092,19093],{"class":302},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[25,19095,19096],{"class":27,"line":8143},[25,19097,19098],{"class":302},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[25,19100,19101],{"class":27,"line":8155},[25,19102,19103],{"class":302},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[25,19105,19106],{"class":27,"line":8167},[25,19107,19108],{"class":302},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[25,19110,19111],{"class":27,"line":9826},[25,19112,2510],{"emptyLinePlaceholder":167},[25,19114,19115],{"class":27,"line":9851},[25,19116,19117],{"class":302},"    \u002F\u002F注意事项\n",[25,19119,19120],{"class":27,"line":9874},[25,19121,19122],{"class":302},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[25,19124,19125],{"class":27,"line":9898},[25,19126,19127],{"class":302},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[25,19129,19130],{"class":27,"line":9903},[25,19131,19132],{"class":302},"    \u002F\u002F Person p4();\n",[25,19134,19135],{"class":27,"line":9908},[25,19136,2510],{"emptyLinePlaceholder":167},[25,19138,19139],{"class":27,"line":9913},[25,19140,19141],{"class":302},"    \u002F\u002F2.显示法\n",[25,19143,19144],{"class":27,"line":9922},[25,19145,19146],{"class":244},"    Person p1;\n",[25,19148,19149,19152,19154,19157,19159,19161],{"class":27,"line":9927},[25,19150,19151],{"class":244},"    Person p2",[25,19153,290],{"class":240},[25,19155,19156],{"class":31},"Person",[25,19158,245],{"class":244},[25,19160,689],{"class":35},[25,19162,2829],{"class":244},[25,19164,19165,19168,19170,19172],{"class":27,"line":9933},[25,19166,19167],{"class":244},"    Person p3",[25,19169,290],{"class":240},[25,19171,19156],{"class":31},[25,19173,19174],{"class":244},"(p2);\n",[25,19176,19177],{"class":27,"line":9954},[25,19178,19179],{"class":302},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[25,19181,19182],{"class":27,"line":9960},[25,19183,2510],{"emptyLinePlaceholder":167},[25,19185,19186],{"class":27,"line":9974},[25,19187,19188],{"class":302},"    \u002F\u002F 注意事项2\n",[25,19190,19191],{"class":27,"line":9980},[25,19192,19193],{"class":302},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[25,19195,19196],{"class":27,"line":10007},[25,19197,19198],{"class":302},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[25,19200,19201],{"class":27,"line":10016},[25,19202,2510],{"emptyLinePlaceholder":167},[25,19204,19205],{"class":27,"line":10022},[25,19206,19207],{"class":302},"    \u002F\u002F3.隐士转换法\n",[25,19209,19210,19213,19215,19217,19219],{"class":27,"line":10030},[25,19211,19212],{"class":244},"    Person p4",[25,19214,290],{"class":240},[25,19216,689],{"class":35},[25,19218,299],{"class":244},[25,19220,19221],{"class":302},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[25,19223,19224,19227,19229,19232],{"class":27,"line":10035},[25,19225,19226],{"class":244},"    Person p5",[25,19228,290],{"class":240},[25,19230,19231],{"class":244},"p4;",[25,19233,19234],{"class":302}," \u002F\u002F 这里会调用拷贝构造函数\n",[25,19236,19237],{"class":27,"line":16714},[25,19238,1676],{"class":244},[25,19240,19241,19243,19245],{"class":27,"line":16720},[25,19242,248],{"class":240},[25,19244,2083],{"class":31},[25,19246,2086],{"class":244},[25,19248,19249],{"class":27,"line":16743},[25,19250,1657],{"class":244},[25,19252,19253,19255],{"class":27,"line":16749},[25,19254,5743],{"class":31},[25,19256,5746],{"class":244},[25,19258,19259,19261],{"class":27,"line":16772},[25,19260,5812],{"class":31},[25,19262,5746],{"class":244},[25,19264,19265,19267,19269],{"class":27,"line":16786},[25,19266,4200],{"class":240},[25,19268,4203],{"class":35},[25,19270,1403],{"class":244},[25,19272,19273],{"class":27,"line":16806},[25,19274,1676],{"class":244},[99,19276,19277,19280],{},[392,19278,19279],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[210,19282,19284],{"id":19283},"_823拷贝构造函数","8.2.3拷贝构造函数",[99,19286,19287],{},"C++中拷贝构造函数调用时机通常有三种情况",[103,19289,19290,19293,19296],{},[106,19291,19292],{},"使用一个已经创建完毕的对象来初始化一个新对象",[106,19294,19295],{},"值传递的方式给函数参数传值",[106,19297,19298],{},"以值方式返回局部对象",[15,19300,19302],{"className":231,"code":19301,"language":233,"meta":20,"style":20},"#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",[22,19303,19304,19310,19320,19324,19329,19333,19338,19343,19348,19354,19358,19362,19368,19372,19385,19389,19394,19406,19410,19418,19431,19435,19439,19455,19459,19468,19481,19485,19491,19495,19507,19511,19517,19521,19525,19533,19537,19550,19558,19576,19580,19585,19590,19605,19609,19622,19626,19634,19638,19642,19650,19654,19659,19668,19672,19676,19701,19711,19715,19723,19727,19738,19763,19767,19771,19775,19783,19787,19792,19797,19804,19809,19814,19819,19824,19828,19833,19837,19842,19846,19851,19856,19860,19864,19869,19874,19882],{"__ignoreMap":20},[25,19305,19306,19308],{"class":27,"line":28},[25,19307,2060],{"class":240},[25,19309,2063],{"class":45},[25,19311,19312,19314,19316,19318],{"class":27,"line":39},[25,19313,2068],{"class":240},[25,19315,2071],{"class":240},[25,19317,2074],{"class":31},[25,19319,1403],{"class":244},[25,19321,19322],{"class":27,"line":51},[25,19323,2510],{"emptyLinePlaceholder":167},[25,19325,19326],{"class":27,"line":59},[25,19327,19328],{"class":302},"\u002F\u002F拷贝构造函数调用时机\n",[25,19330,19331],{"class":27,"line":67},[25,19332,2510],{"emptyLinePlaceholder":167},[25,19334,19335],{"class":27,"line":75},[25,19336,19337],{"class":302},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[25,19339,19340],{"class":27,"line":83},[25,19341,19342],{"class":302},"\u002F\u002F2.值传递的方式给函数参数传值\n",[25,19344,19345],{"class":27,"line":91},[25,19346,19347],{"class":302},"\u002F\u002F3.以值方式返回局部对象\n",[25,19349,19350,19352],{"class":27,"line":1429},[25,19351,14804],{"class":240},[25,19353,15281],{"class":31},[25,19355,19356],{"class":27,"line":1441},[25,19357,1657],{"class":244},[25,19359,19360],{"class":27,"line":1723},[25,19361,14826],{"class":240},[25,19363,19364,19366],{"class":27,"line":1728},[25,19365,18629],{"class":31},[25,19367,2086],{"class":244},[25,19369,19370],{"class":27,"line":1734},[25,19371,2140],{"class":244},[25,19373,19374,19376,19378,19381,19383],{"class":27,"line":1739},[25,19375,9779],{"class":244},[25,19377,1286],{"class":240},[25,19379,19380],{"class":45}," \"Person的默认构造函数调用\"",[25,19382,1556],{"class":240},[25,19384,8950],{"class":244},[25,19386,19387],{"class":27,"line":1753},[25,19388,2297],{"class":244},[25,19390,19391],{"class":27,"line":1758},[25,19392,19393],{"class":302},"    \u002F\u002F有参构造\n",[25,19395,19396,19398,19400,19402,19404],{"class":27,"line":1764},[25,19397,18629],{"class":31},[25,19399,245],{"class":244},[25,19401,248],{"class":240},[25,19403,15799],{"class":5326},[25,19405,251],{"class":244},[25,19407,19408],{"class":27,"line":1785},[25,19409,2140],{"class":244},[25,19411,19412,19414,19416],{"class":27,"line":1790},[25,19413,15853],{"class":244},[25,19415,290],{"class":240},[25,19417,7907],{"class":244},[25,19419,19420,19422,19424,19427,19429],{"class":27,"line":1804},[25,19421,9779],{"class":244},[25,19423,1286],{"class":240},[25,19425,19426],{"class":45}," \"Person的有参构造函数调用\"",[25,19428,1556],{"class":240},[25,19430,8950],{"class":244},[25,19432,19433],{"class":27,"line":1809},[25,19434,2297],{"class":244},[25,19436,19437],{"class":27,"line":1838},[25,19438,18984],{"class":302},[25,19440,19441,19443,19445,19447,19449,19451,19453],{"class":27,"line":1843},[25,19442,18629],{"class":31},[25,19444,245],{"class":244},[25,19446,6902],{"class":240},[25,19448,15679],{"class":31},[25,19450,10694],{"class":240},[25,19452,99],{"class":5326},[25,19454,251],{"class":244},[25,19456,19457],{"class":27,"line":1860},[25,19458,2140],{"class":244},[25,19460,19461,19463,19465],{"class":27,"line":1865},[25,19462,15853],{"class":244},[25,19464,290],{"class":240},[25,19466,19467],{"class":244}," p.m_Age;\n",[25,19469,19470,19472,19474,19477,19479],{"class":27,"line":1870},[25,19471,9779],{"class":244},[25,19473,1286],{"class":240},[25,19475,19476],{"class":45}," \"Person的拷贝构造函数调用\"",[25,19478,1556],{"class":240},[25,19480,8950],{"class":244},[25,19482,19483],{"class":27,"line":1875},[25,19484,2297],{"class":244},[25,19486,19487,19489],{"class":27,"line":1889},[25,19488,18662],{"class":31},[25,19490,2086],{"class":244},[25,19492,19493],{"class":27,"line":1894},[25,19494,2140],{"class":244},[25,19496,19497,19499,19501,19503,19505],{"class":27,"line":2687},[25,19498,9779],{"class":244},[25,19500,1286],{"class":240},[25,19502,18677],{"class":45},[25,19504,1556],{"class":240},[25,19506,8950],{"class":244},[25,19508,19509],{"class":27,"line":2701},[25,19510,2297],{"class":244},[25,19512,19513,19515],{"class":27,"line":2709},[25,19514,2095],{"class":240},[25,19516,15776],{"class":244},[25,19518,19519],{"class":27,"line":2714},[25,19520,4105],{"class":244},[25,19522,19523],{"class":27,"line":2720},[25,19524,19337],{"class":302},[25,19526,19527,19529,19531],{"class":27,"line":2726},[25,19528,5474],{"class":240},[25,19530,5698],{"class":31},[25,19532,2086],{"class":244},[25,19534,19535],{"class":27,"line":2731},[25,19536,1657],{"class":244},[25,19538,19539,19542,19544,19546,19548],{"class":27,"line":8058},[25,19540,19541],{"class":244},"    Person ",[25,19543,7240],{"class":31},[25,19545,245],{"class":244},[25,19547,943],{"class":35},[25,19549,2829],{"class":244},[25,19551,19552,19554,19556],{"class":27,"line":8082},[25,19553,19541],{"class":244},[25,19555,7143],{"class":31},[25,19557,17625],{"class":244},[25,19559,19560,19562,19564,19567,19569,19572,19574],{"class":27,"line":8087},[25,19561,1662],{"class":244},[25,19563,1286],{"class":240},[25,19565,19566],{"class":45},"\"P2的年龄为：\"",[25,19568,1286],{"class":240},[25,19570,19571],{"class":244},"p2.m_Age",[25,19573,1286],{"class":240},[25,19575,1308],{"class":244},[25,19577,19578],{"class":27,"line":8093},[25,19579,1676],{"class":244},[25,19581,19582],{"class":27,"line":8120},[25,19583,19584],{"class":302},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[25,19586,19587],{"class":27,"line":8125},[25,19588,19589],{"class":302},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[25,19591,19592,19594,19597,19599,19601,19603],{"class":27,"line":8131},[25,19593,5474],{"class":240},[25,19595,19596],{"class":31}," doWork",[25,19598,245],{"class":244},[25,19600,19156],{"class":31},[25,19602,6935],{"class":5326},[25,19604,251],{"class":244},[25,19606,19607],{"class":27,"line":8143},[25,19608,1657],{"class":244},[25,19610,19611,19613,19615,19618,19620],{"class":27,"line":8155},[25,19612,6639],{"class":244},[25,19614,1286],{"class":240},[25,19616,19617],{"class":45}," \"doWork函数调用\"",[25,19619,1556],{"class":240},[25,19621,8950],{"class":244},[25,19623,19624],{"class":27,"line":8167},[25,19625,1676],{"class":244},[25,19627,19628,19630,19632],{"class":27,"line":9826},[25,19629,5474],{"class":240},[25,19631,5767],{"class":31},[25,19633,2086],{"class":244},[25,19635,19636],{"class":27,"line":9851},[25,19637,1657],{"class":244},[25,19639,19640],{"class":27,"line":9874},[25,19641,15423],{"class":244},[25,19643,19644,19647],{"class":27,"line":9898},[25,19645,19646],{"class":31},"    doWork",[25,19648,19649],{"class":244},"(p);\n",[25,19651,19652],{"class":27,"line":9903},[25,19653,1676],{"class":244},[25,19655,19656],{"class":27,"line":9908},[25,19657,19658],{"class":302},"\u002F\u002F 3.以值方式返回局部对象\n",[25,19660,19661,19663,19666],{"class":27,"line":9913},[25,19662,19156],{"class":31},[25,19664,19665],{"class":31}," doWork2",[25,19667,2086],{"class":244},[25,19669,19670],{"class":27,"line":9922},[25,19671,1657],{"class":244},[25,19673,19674],{"class":27,"line":9927},[25,19675,19146],{"class":244},[25,19677,19678,19680,19682,19684,19686,19688,19690,19692,19694,19696,19698],{"class":27,"line":9933},[25,19679,1662],{"class":244},[25,19681,1286],{"class":240},[25,19683,245],{"class":244},[25,19685,248],{"class":240},[25,19687,6628],{"class":240},[25,19689,672],{"class":244},[25,19691,596],{"class":240},[25,19693,7240],{"class":244},[25,19695,1286],{"class":240},[25,19697,1351],{"class":244},[25,19699,19700],{"class":302},"\u002F\u002F打印p1的地址\n",[25,19702,19703,19705,19708],{"class":27,"line":9954},[25,19704,4200],{"class":240},[25,19706,19707],{"class":244}," p1;",[25,19709,19710],{"class":302},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[25,19712,19713],{"class":27,"line":9960},[25,19714,1676],{"class":244},[25,19716,19717,19719,19721],{"class":27,"line":9974},[25,19718,5474],{"class":240},[25,19720,5839],{"class":31},[25,19722,2086],{"class":244},[25,19724,19725],{"class":27,"line":9980},[25,19726,1657],{"class":244},[25,19728,19729,19732,19734,19736],{"class":27,"line":10007},[25,19730,19731],{"class":244},"    Person p ",[25,19733,290],{"class":240},[25,19735,19665],{"class":31},[25,19737,5746],{"class":244},[25,19739,19740,19742,19744,19746,19748,19750,19752,19754,19756,19758,19760],{"class":27,"line":10016},[25,19741,1662],{"class":244},[25,19743,1286],{"class":240},[25,19745,245],{"class":244},[25,19747,248],{"class":240},[25,19749,6628],{"class":240},[25,19751,672],{"class":244},[25,19753,596],{"class":240},[25,19755,99],{"class":244},[25,19757,1286],{"class":240},[25,19759,1351],{"class":244},[25,19761,19762],{"class":302},"\u002F\u002F打印p的地址\n",[25,19764,19765],{"class":27,"line":10022},[25,19766,1676],{"class":244},[25,19768,19769],{"class":27,"line":10030},[25,19770,2510],{"emptyLinePlaceholder":167},[25,19772,19773],{"class":27,"line":10035},[25,19774,2510],{"emptyLinePlaceholder":167},[25,19776,19777,19779,19781],{"class":27,"line":16714},[25,19778,248],{"class":240},[25,19780,2083],{"class":31},[25,19782,2086],{"class":244},[25,19784,19785],{"class":27,"line":16720},[25,19786,1657],{"class":244},[25,19788,19789],{"class":27,"line":16743},[25,19790,19791],{"class":302},"    \u002F\u002F test01();\n",[25,19793,19794],{"class":27,"line":16749},[25,19795,19796],{"class":302},"    \u002F\u002F test02();\n",[25,19798,19799,19802],{"class":27,"line":16772},[25,19800,19801],{"class":31},"    test03",[25,19803,5746],{"class":244},[25,19805,19806],{"class":27,"line":16786},[25,19807,19808],{"class":302},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[25,19810,19811],{"class":27,"line":16806},[25,19812,19813],{"class":302},"\u002F\u002F 输出结果如下：\n",[25,19815,19816],{"class":27,"line":16812},[25,19817,19818],{"class":302},"\u002F\u002F Person的默认构造函数调用\n",[25,19820,19821],{"class":27,"line":16823},[25,19822,19823],{"class":302},"\u002F\u002F 0x7fffffffceec\n",[25,19825,19826],{"class":27,"line":16846},[25,19827,19823],{"class":302},[25,19829,19830],{"class":27,"line":16868},[25,19831,19832],{"class":302},"\u002F\u002F Person的析构函数调用\n",[25,19834,19835],{"class":27,"line":16873},[25,19836,2510],{"emptyLinePlaceholder":167},[25,19838,19839],{"class":27,"line":16879},[25,19840,19841],{"class":302},"\u002F\u002F 之前的输出结果如下：\n",[25,19843,19844],{"class":27,"line":16893},[25,19845,19818],{"class":302},[25,19847,19848],{"class":27,"line":16906},[25,19849,19850],{"class":302},"\u002F\u002F 地址\n",[25,19852,19853],{"class":27,"line":16911},[25,19854,19855],{"class":302},"\u002F\u002F Person的拷贝构造函数调用\n",[25,19857,19858],{"class":27,"line":16925},[25,19859,19832],{"class":302},[25,19861,19862],{"class":27,"line":16930},[25,19863,19850],{"class":302},[25,19865,19866],{"class":27,"line":16936},[25,19867,19868],{"class":302},"\u002F\u002F (这两次输出的地址也是不同的) \n",[25,19870,19871],{"class":27,"line":16941},[25,19872,19873],{"class":302},"\u002F\u002F Person的析构函数调用     \n",[25,19875,19876,19878,19880],{"class":27,"line":16955},[25,19877,4200],{"class":240},[25,19879,4203],{"class":35},[25,19881,1403],{"class":244},[25,19883,19884],{"class":27,"line":16960},[25,19885,1676],{"class":244},[99,19887,19888],{},"简化版理解",[15,19890,19892],{"className":231,"code":19891,"language":233,"meta":20,"style":20},"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",[22,19893,19894,19902,19906,19912,19925,19936,19940,19952,19965,19973,19977,19993,20006,20015,20019,20024,20030,20043,20047,20051,20058,20062,20066,20071,20079,20083,20099,20112,20125,20129,20134,20142,20146,20150,20155,20160,20176,20184,20191,20197,20201,20205,20210,20218,20222,20226,20249,20256,20260,20264,20272,20276,20286,20308,20312,20316,20320,20328,20332,20337,20342,20348,20352,20362,20366,20374],{"__ignoreMap":20},[25,19895,19896,19898,19900],{"class":27,"line":28},[25,19897,14804],{"class":240},[25,19899,15679],{"class":31},[25,19901,15682],{"class":244},[25,19903,19904],{"class":27,"line":39},[25,19905,14826],{"class":240},[25,19907,19908,19910],{"class":27,"line":51},[25,19909,18629],{"class":31},[25,19911,10963],{"class":244},[25,19913,19914,19916,19918,19921,19923],{"class":27,"line":59},[25,19915,9779],{"class":244},[25,19917,1286],{"class":240},[25,19919,19920],{"class":45}," \"无参构造函数!\"",[25,19922,1556],{"class":240},[25,19924,8950],{"class":244},[25,19926,19927,19930,19932,19934],{"class":27,"line":67},[25,19928,19929],{"class":244},"        mAge ",[25,19931,290],{"class":240},[25,19933,4203],{"class":35},[25,19935,1403],{"class":244},[25,19937,19938],{"class":27,"line":75},[25,19939,2297],{"class":244},[25,19941,19942,19944,19946,19948,19950],{"class":27,"line":83},[25,19943,18629],{"class":31},[25,19945,245],{"class":244},[25,19947,248],{"class":240},[25,19949,15799],{"class":5326},[25,19951,12552],{"class":244},[25,19953,19954,19956,19958,19961,19963],{"class":27,"line":91},[25,19955,9779],{"class":244},[25,19957,1286],{"class":240},[25,19959,19960],{"class":45}," \"有参构造函数!\"",[25,19962,1556],{"class":240},[25,19964,8950],{"class":244},[25,19966,19967,19969,19971],{"class":27,"line":1429},[25,19968,19929],{"class":244},[25,19970,290],{"class":240},[25,19972,7907],{"class":244},[25,19974,19975],{"class":27,"line":1441},[25,19976,2297],{"class":244},[25,19978,19979,19981,19983,19985,19987,19989,19991],{"class":27,"line":1723},[25,19980,18629],{"class":31},[25,19982,245],{"class":244},[25,19984,6902],{"class":240},[25,19986,15679],{"class":31},[25,19988,596],{"class":240},[25,19990,6935],{"class":5326},[25,19992,12552],{"class":244},[25,19994,19995,19997,19999,20002,20004],{"class":27,"line":1728},[25,19996,9779],{"class":244},[25,19998,1286],{"class":240},[25,20000,20001],{"class":45}," \"拷贝构造函数!\"",[25,20003,1556],{"class":240},[25,20005,8950],{"class":244},[25,20007,20008,20010,20012],{"class":27,"line":1734},[25,20009,19929],{"class":244},[25,20011,290],{"class":240},[25,20013,20014],{"class":244}," p.mAge;\n",[25,20016,20017],{"class":27,"line":1739},[25,20018,2297],{"class":244},[25,20020,20021],{"class":27,"line":1753},[25,20022,20023],{"class":302},"    \u002F\u002F析构函数在释放内存之前调用\n",[25,20025,20026,20028],{"class":27,"line":1758},[25,20027,18662],{"class":31},[25,20029,10963],{"class":244},[25,20031,20032,20034,20036,20039,20041],{"class":27,"line":1764},[25,20033,9779],{"class":244},[25,20035,1286],{"class":240},[25,20037,20038],{"class":45}," \"析构函数!\"",[25,20040,1556],{"class":240},[25,20042,8950],{"class":244},[25,20044,20045],{"class":27,"line":1785},[25,20046,2297],{"class":244},[25,20048,20049],{"class":27,"line":1790},[25,20050,14826],{"class":240},[25,20052,20053,20055],{"class":27,"line":1804},[25,20054,2095],{"class":240},[25,20056,20057],{"class":244}," mAge;\n",[25,20059,20060],{"class":27,"line":1809},[25,20061,4105],{"class":244},[25,20063,20064],{"class":27,"line":1838},[25,20065,2510],{"emptyLinePlaceholder":167},[25,20067,20068],{"class":27,"line":1843},[25,20069,20070],{"class":302},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[25,20072,20073,20075,20077],{"class":27,"line":1860},[25,20074,5474],{"class":240},[25,20076,5698],{"class":31},[25,20078,10963],{"class":244},[25,20080,20081],{"class":27,"line":1865},[25,20082,2510],{"emptyLinePlaceholder":167},[25,20084,20085,20087,20090,20092,20094,20096],{"class":27,"line":1870},[25,20086,19541],{"class":244},[25,20088,20089],{"class":31},"man",[25,20091,245],{"class":244},[25,20093,554],{"class":35},[25,20095,6076],{"class":244},[25,20097,20098],{"class":302}," \u002F\u002Fp对象已经创建完毕\n",[25,20100,20101,20103,20106,20109],{"class":27,"line":1875},[25,20102,19541],{"class":244},[25,20104,20105],{"class":31},"newman",[25,20107,20108],{"class":244},"(man);",[25,20110,20111],{"class":302}," \u002F\u002F调用拷贝构造函数\n",[25,20113,20114,20117,20119,20122],{"class":27,"line":1889},[25,20115,20116],{"class":244},"    Person newman2 ",[25,20118,290],{"class":240},[25,20120,20121],{"class":244}," man;",[25,20123,20124],{"class":302}," \u002F\u002F拷贝构造\n",[25,20126,20127],{"class":27,"line":1894},[25,20128,2510],{"emptyLinePlaceholder":167},[25,20130,20131],{"class":27,"line":2687},[25,20132,20133],{"class":302},"    \u002F\u002FPerson newman3;\n",[25,20135,20136,20139],{"class":27,"line":2701},[25,20137,20138],{"class":302},"    \u002F\u002Fnewman3 = man;",[25,20140,20141],{"class":302}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[25,20143,20144],{"class":27,"line":2709},[25,20145,1676],{"class":244},[25,20147,20148],{"class":27,"line":2714},[25,20149,2510],{"emptyLinePlaceholder":167},[25,20151,20152],{"class":27,"line":2720},[25,20153,20154],{"class":302},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[25,20156,20157],{"class":27,"line":2726},[25,20158,20159],{"class":302},"\u002F\u002F相当于Person p1 = p;\n",[25,20161,20162,20164,20166,20168,20170,20173],{"class":27,"line":2731},[25,20163,5474],{"class":240},[25,20165,19596],{"class":31},[25,20167,245],{"class":244},[25,20169,19156],{"class":31},[25,20171,20172],{"class":5326}," p1",[25,20174,20175],{"class":244},") {}\n",[25,20177,20178,20180,20182],{"class":27,"line":8058},[25,20179,5474],{"class":240},[25,20181,5767],{"class":31},[25,20183,10963],{"class":244},[25,20185,20186,20188],{"class":27,"line":8082},[25,20187,18714],{"class":244},[25,20189,20190],{"class":302}," \u002F\u002F无参构造函数\n",[25,20192,20193,20195],{"class":27,"line":8087},[25,20194,19646],{"class":31},[25,20196,19649],{"class":244},[25,20198,20199],{"class":27,"line":8093},[25,20200,1676],{"class":244},[25,20202,20203],{"class":27,"line":8120},[25,20204,2510],{"emptyLinePlaceholder":167},[25,20206,20207],{"class":27,"line":8125},[25,20208,20209],{"class":302},"\u002F\u002F3. 以值方式返回局部对象\n",[25,20211,20212,20214,20216],{"class":27,"line":8131},[25,20213,19156],{"class":31},[25,20215,19665],{"class":31},[25,20217,2086],{"class":244},[25,20219,20220],{"class":27,"line":8143},[25,20221,1657],{"class":244},[25,20223,20224],{"class":27,"line":8155},[25,20225,19146],{"class":244},[25,20227,20228,20230,20232,20234,20236,20238,20240,20242,20245,20247],{"class":27,"line":8167},[25,20229,6639],{"class":244},[25,20231,1286],{"class":240},[25,20233,1769],{"class":244},[25,20235,248],{"class":240},[25,20237,6628],{"class":240},[25,20239,672],{"class":244},[25,20241,596],{"class":240},[25,20243,20244],{"class":244},"p1 ",[25,20246,1286],{"class":240},[25,20248,8950],{"class":244},[25,20250,20251,20253],{"class":27,"line":9826},[25,20252,4200],{"class":240},[25,20254,20255],{"class":244}," p1;\n",[25,20257,20258],{"class":27,"line":9851},[25,20259,1676],{"class":244},[25,20261,20262],{"class":27,"line":9874},[25,20263,2510],{"emptyLinePlaceholder":167},[25,20265,20266,20268,20270],{"class":27,"line":9898},[25,20267,5474],{"class":240},[25,20269,5839],{"class":31},[25,20271,2086],{"class":244},[25,20273,20274],{"class":27,"line":9903},[25,20275,1657],{"class":244},[25,20277,20278,20280,20282,20284],{"class":27,"line":9908},[25,20279,19731],{"class":244},[25,20281,290],{"class":240},[25,20283,19665],{"class":31},[25,20285,5746],{"class":244},[25,20287,20288,20290,20292,20294,20296,20298,20300,20302,20304,20306],{"class":27,"line":9913},[25,20289,6639],{"class":244},[25,20291,1286],{"class":240},[25,20293,1769],{"class":244},[25,20295,248],{"class":240},[25,20297,6628],{"class":240},[25,20299,672],{"class":244},[25,20301,596],{"class":240},[25,20303,11558],{"class":244},[25,20305,1286],{"class":240},[25,20307,8950],{"class":244},[25,20309,20310],{"class":27,"line":9922},[25,20311,1676],{"class":244},[25,20313,20314],{"class":27,"line":9927},[25,20315,2510],{"emptyLinePlaceholder":167},[25,20317,20318],{"class":27,"line":9933},[25,20319,2510],{"emptyLinePlaceholder":167},[25,20321,20322,20324,20326],{"class":27,"line":9954},[25,20323,248],{"class":240},[25,20325,2083],{"class":31},[25,20327,10963],{"class":244},[25,20329,20330],{"class":27,"line":9960},[25,20331,2510],{"emptyLinePlaceholder":167},[25,20333,20334],{"class":27,"line":9974},[25,20335,20336],{"class":302},"    \u002F\u002Ftest01();\n",[25,20338,20339],{"class":27,"line":9980},[25,20340,20341],{"class":302},"    \u002F\u002Ftest02();\n",[25,20343,20344,20346],{"class":27,"line":10007},[25,20345,19801],{"class":31},[25,20347,5746],{"class":244},[25,20349,20350],{"class":27,"line":10016},[25,20351,2510],{"emptyLinePlaceholder":167},[25,20353,20354,20356,20358,20360],{"class":27,"line":10022},[25,20355,2413],{"class":31},[25,20357,245],{"class":244},[25,20359,2418],{"class":45},[25,20361,2829],{"class":244},[25,20363,20364],{"class":27,"line":10030},[25,20365,2510],{"emptyLinePlaceholder":167},[25,20367,20368,20370,20372],{"class":27,"line":10035},[25,20369,4200],{"class":240},[25,20371,4203],{"class":35},[25,20373,1403],{"class":244},[25,20375,20376],{"class":27,"line":16714},[25,20377,1676],{"class":244},[210,20379,20381],{"id":20380},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[99,20383,20384],{},"默认情况下，c++编译器至少给一个类添加3个函数",[99,20386,20387],{},"1．默认构造函数(无参，函数体为空)",[99,20389,20390],{},"2．默认析构函数(无参，函数体为空)",[99,20392,20393],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[99,20395,20396],{},"构造函数调用规则如下：",[103,20398,20399,20402],{},[106,20400,20401],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[106,20403,20404],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[15,20406,20408],{"className":231,"code":20407,"language":233,"meta":20,"style":20},"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",[22,20409,20410,20418,20422,20427,20433,20445,20449,20454,20466,20475,20487,20491,20495,20511,20520,20532,20536,20540,20546,20558,20562,20566,20572,20576,20580,20588,20592,20604,20609,20617,20621,20639,20643,20647,20655,20659,20664,20672,20687,20700,20704,20709,20716,20732,20745,20749,20753,20761,20765,20771,20775,20785,20789,20797],{"__ignoreMap":20},[25,20411,20412,20414,20416],{"class":27,"line":28},[25,20413,14804],{"class":240},[25,20415,15679],{"class":31},[25,20417,15682],{"class":244},[25,20419,20420],{"class":27,"line":39},[25,20421,14826],{"class":240},[25,20423,20424],{"class":27,"line":51},[25,20425,20426],{"class":302},"    \u002F\u002F无参（默认）构造函数\n",[25,20428,20429,20431],{"class":27,"line":59},[25,20430,18629],{"class":31},[25,20432,10963],{"class":244},[25,20434,20435,20437,20439,20441,20443],{"class":27,"line":67},[25,20436,9779],{"class":244},[25,20438,1286],{"class":240},[25,20440,19920],{"class":45},[25,20442,1556],{"class":240},[25,20444,8950],{"class":244},[25,20446,20447],{"class":27,"line":75},[25,20448,2297],{"class":244},[25,20450,20451],{"class":27,"line":83},[25,20452,20453],{"class":302},"    \u002F\u002F有参构造函数\n",[25,20455,20456,20458,20460,20462,20464],{"class":27,"line":91},[25,20457,18629],{"class":31},[25,20459,245],{"class":244},[25,20461,248],{"class":240},[25,20463,1510],{"class":5326},[25,20465,12552],{"class":244},[25,20467,20468,20471,20473],{"class":27,"line":1429},[25,20469,20470],{"class":244},"        age ",[25,20472,290],{"class":240},[25,20474,1544],{"class":244},[25,20476,20477,20479,20481,20483,20485],{"class":27,"line":1441},[25,20478,9779],{"class":244},[25,20480,1286],{"class":240},[25,20482,19960],{"class":45},[25,20484,1556],{"class":240},[25,20486,8950],{"class":244},[25,20488,20489],{"class":27,"line":1723},[25,20490,2297],{"class":244},[25,20492,20493],{"class":27,"line":1728},[25,20494,18984],{"class":302},[25,20496,20497,20499,20501,20503,20505,20507,20509],{"class":27,"line":1734},[25,20498,18629],{"class":31},[25,20500,245],{"class":244},[25,20502,6902],{"class":240},[25,20504,15679],{"class":31},[25,20506,596],{"class":240},[25,20508,6935],{"class":5326},[25,20510,12552],{"class":244},[25,20512,20513,20515,20517],{"class":27,"line":1739},[25,20514,20470],{"class":244},[25,20516,290],{"class":240},[25,20518,20519],{"class":244}," p.age;\n",[25,20521,20522,20524,20526,20528,20530],{"class":27,"line":1753},[25,20523,9779],{"class":244},[25,20525,1286],{"class":240},[25,20527,20001],{"class":45},[25,20529,1556],{"class":240},[25,20531,8950],{"class":244},[25,20533,20534],{"class":27,"line":1758},[25,20535,2297],{"class":244},[25,20537,20538],{"class":27,"line":1764},[25,20539,18657],{"class":302},[25,20541,20542,20544],{"class":27,"line":1785},[25,20543,18662],{"class":31},[25,20545,10963],{"class":244},[25,20547,20548,20550,20552,20554,20556],{"class":27,"line":1790},[25,20549,9779],{"class":244},[25,20551,1286],{"class":240},[25,20553,20038],{"class":45},[25,20555,1556],{"class":240},[25,20557,8950],{"class":244},[25,20559,20560],{"class":27,"line":1804},[25,20561,2297],{"class":244},[25,20563,20564],{"class":27,"line":1809},[25,20565,14826],{"class":240},[25,20567,20568,20570],{"class":27,"line":1838},[25,20569,2095],{"class":240},[25,20571,7907],{"class":244},[25,20573,20574],{"class":27,"line":1843},[25,20575,4105],{"class":244},[25,20577,20578],{"class":27,"line":1860},[25,20579,2510],{"emptyLinePlaceholder":167},[25,20581,20582,20584,20586],{"class":27,"line":1865},[25,20583,5474],{"class":240},[25,20585,5698],{"class":31},[25,20587,2086],{"class":244},[25,20589,20590],{"class":27,"line":1870},[25,20591,1657],{"class":244},[25,20593,20594,20596,20598,20600,20602],{"class":27,"line":1875},[25,20595,19541],{"class":244},[25,20597,7240],{"class":31},[25,20599,245],{"class":244},[25,20601,893],{"class":35},[25,20603,2829],{"class":244},[25,20605,20606],{"class":27,"line":1889},[25,20607,20608],{"class":302},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[25,20610,20611,20613,20615],{"class":27,"line":1894},[25,20612,19541],{"class":244},[25,20614,7143],{"class":31},[25,20616,17625],{"class":244},[25,20618,20619],{"class":27,"line":2687},[25,20620,2510],{"emptyLinePlaceholder":167},[25,20622,20623,20625,20627,20630,20632,20635,20637],{"class":27,"line":2701},[25,20624,6639],{"class":244},[25,20626,1286],{"class":240},[25,20628,20629],{"class":45}," \"p2的年龄为： \"",[25,20631,1556],{"class":240},[25,20633,20634],{"class":244}," p2.age ",[25,20636,1286],{"class":240},[25,20638,8950],{"class":244},[25,20640,20641],{"class":27,"line":2709},[25,20642,1676],{"class":244},[25,20644,20645],{"class":27,"line":2714},[25,20646,2510],{"emptyLinePlaceholder":167},[25,20648,20649,20651,20653],{"class":27,"line":2720},[25,20650,5474],{"class":240},[25,20652,5767],{"class":31},[25,20654,2086],{"class":244},[25,20656,20657],{"class":27,"line":2726},[25,20658,1657],{"class":244},[25,20660,20661],{"class":27,"line":2731},[25,20662,20663],{"class":302},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[25,20665,20666,20669],{"class":27,"line":8058},[25,20667,20668],{"class":244},"    Person p1;",[25,20670,20671],{"class":302}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[25,20673,20674,20676,20678,20680,20682,20684],{"class":27,"line":8082},[25,20675,19541],{"class":244},[25,20677,7143],{"class":31},[25,20679,245],{"class":244},[25,20681,689],{"class":35},[25,20683,6076],{"class":244},[25,20685,20686],{"class":302}," \u002F\u002F用户提供的有参\n",[25,20688,20689,20691,20694,20697],{"class":27,"line":8087},[25,20690,19541],{"class":244},[25,20692,20693],{"class":31},"p3",[25,20695,20696],{"class":244},"(p2);",[25,20698,20699],{"class":302}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[25,20701,20702],{"class":27,"line":8093},[25,20703,2510],{"emptyLinePlaceholder":167},[25,20705,20706],{"class":27,"line":8120},[25,20707,20708],{"class":302},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[25,20710,20711,20714],{"class":27,"line":8125},[25,20712,20713],{"class":244},"    Person p4;",[25,20715,20671],{"class":302},[25,20717,20718,20720,20723,20725,20727,20729],{"class":27,"line":8131},[25,20719,19541],{"class":244},[25,20721,20722],{"class":31},"p5",[25,20724,245],{"class":244},[25,20726,689],{"class":35},[25,20728,6076],{"class":244},[25,20730,20731],{"class":302}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[25,20733,20734,20736,20739,20742],{"class":27,"line":8143},[25,20735,19541],{"class":244},[25,20737,20738],{"class":31},"p6",[25,20740,20741],{"class":244},"(p5);",[25,20743,20744],{"class":302}," \u002F\u002F用户自己提供拷贝构造\n",[25,20746,20747],{"class":27,"line":8155},[25,20748,1676],{"class":244},[25,20750,20751],{"class":27,"line":8167},[25,20752,2510],{"emptyLinePlaceholder":167},[25,20754,20755,20757,20759],{"class":27,"line":9826},[25,20756,248],{"class":240},[25,20758,2083],{"class":31},[25,20760,10963],{"class":244},[25,20762,20763],{"class":27,"line":9851},[25,20764,2510],{"emptyLinePlaceholder":167},[25,20766,20767,20769],{"class":27,"line":9874},[25,20768,5743],{"class":31},[25,20770,5746],{"class":244},[25,20772,20773],{"class":27,"line":9898},[25,20774,2510],{"emptyLinePlaceholder":167},[25,20776,20777,20779,20781,20783],{"class":27,"line":9903},[25,20778,2413],{"class":31},[25,20780,245],{"class":244},[25,20782,2418],{"class":45},[25,20784,2829],{"class":244},[25,20786,20787],{"class":27,"line":9908},[25,20788,2510],{"emptyLinePlaceholder":167},[25,20790,20791,20793,20795],{"class":27,"line":9913},[25,20792,4200],{"class":240},[25,20794,4203],{"class":35},[25,20796,1403],{"class":244},[25,20798,20799],{"class":27,"line":9922},[25,20800,1676],{"class":244},[210,20802,20804],{"id":20803},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[99,20806,20807],{},"浅拷贝：简单的赋值拷贝操作",[99,20809,20810],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[15,20812,20814],{"className":231,"code":20813,"language":233,"meta":20,"style":20},"#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",[22,20815,20816,20822,20832,20838,20842,20846,20851,20857,20861,20874,20878,20882,20889,20893,20903,20918,20931,20935,20940,20945,20961,20965,20978,20983,20988,20993,21002,21007,21022,21026,21030,21034,21040,21044,21049,21064,21068,21079,21093,21097,21106,21110,21116,21128,21132,21140,21144,21161,21192,21200,21228,21232,21236,21244,21248,21254],{"__ignoreMap":20},[25,20817,20818,20820],{"class":27,"line":28},[25,20819,2060],{"class":240},[25,20821,2063],{"class":45},[25,20823,20824,20826,20828,20830],{"class":27,"line":39},[25,20825,2068],{"class":240},[25,20827,2071],{"class":240},[25,20829,2074],{"class":31},[25,20831,1403],{"class":244},[25,20833,20834,20836],{"class":27,"line":51},[25,20835,14804],{"class":240},[25,20837,15281],{"class":31},[25,20839,20840],{"class":27,"line":59},[25,20841,1657],{"class":244},[25,20843,20844],{"class":27,"line":67},[25,20845,14826],{"class":240},[25,20847,20848],{"class":27,"line":75},[25,20849,20850],{"class":302},"    \u002F\u002F默认构造函数\n",[25,20852,20853,20855],{"class":27,"line":83},[25,20854,18629],{"class":31},[25,20856,2086],{"class":244},[25,20858,20859],{"class":27,"line":91},[25,20860,2140],{"class":244},[25,20862,20863,20865,20867,20870,20872],{"class":27,"line":1429},[25,20864,3561],{"class":244},[25,20866,1286],{"class":240},[25,20868,20869],{"class":45},"\"默认构造函数\"",[25,20871,1286],{"class":240},[25,20873,1308],{"class":244},[25,20875,20876],{"class":27,"line":1441},[25,20877,2297],{"class":244},[25,20879,20880],{"class":27,"line":1723},[25,20881,20453],{"class":302},[25,20883,20884,20886],{"class":27,"line":1728},[25,20885,18662],{"class":31},[25,20887,20888],{"class":244},"(int age,int height)\n",[25,20890,20891],{"class":27,"line":1734},[25,20892,2140],{"class":244},[25,20894,20895,20898,20900],{"class":27,"line":1739},[25,20896,20897],{"class":244},"        m_Age",[25,20899,290],{"class":240},[25,20901,20902],{"class":244},"age;\n",[25,20904,20905,20908,20910,20912,20915],{"class":27,"line":1753},[25,20906,20907],{"class":244},"        m_Height",[25,20909,11827],{"class":240},[25,20911,2492],{"class":240},[25,20913,20914],{"class":244},"(height);",[25,20916,20917],{"class":302},"\u002F\u002F放到堆区\n",[25,20919,20920,20922,20924,20927,20929],{"class":27,"line":1758},[25,20921,3561],{"class":244},[25,20923,1286],{"class":240},[25,20925,20926],{"class":45},"\"有参构造函数\"",[25,20928,1286],{"class":240},[25,20930,1308],{"class":244},[25,20932,20933],{"class":27,"line":1764},[25,20934,2297],{"class":244},[25,20936,20937],{"class":27,"line":1785},[25,20938,20939],{"class":302},"    \u002F\u002F深拷贝解决上述问题\n",[25,20941,20942],{"class":27,"line":1790},[25,20943,20944],{"class":302},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[25,20946,20947,20949,20951,20953,20955,20957,20959],{"class":27,"line":1804},[25,20948,18629],{"class":31},[25,20950,245],{"class":244},[25,20952,6902],{"class":240},[25,20954,15679],{"class":31},[25,20956,10694],{"class":240},[25,20958,99],{"class":5326},[25,20960,251],{"class":244},[25,20962,20963],{"class":27,"line":1809},[25,20964,2140],{"class":244},[25,20966,20967,20969,20971,20974,20976],{"class":27,"line":1838},[25,20968,3561],{"class":244},[25,20970,1286],{"class":240},[25,20972,20973],{"class":45},"\"拷贝构造函数\"",[25,20975,1286],{"class":240},[25,20977,1308],{"class":244},[25,20979,20980],{"class":27,"line":1843},[25,20981,20982],{"class":302},"        \u002F\u002F编译器默认的写如下注释部分\n",[25,20984,20985],{"class":27,"line":1860},[25,20986,20987],{"class":302},"        \u002F\u002Fm_Age=p.m_Age;\n",[25,20989,20990],{"class":27,"line":1865},[25,20991,20992],{"class":302},"        \u002F\u002Fm_Height=p.m_Height;\n",[25,20994,20995,20997,20999],{"class":27,"line":1870},[25,20996,20897],{"class":244},[25,20998,290],{"class":240},[25,21000,21001],{"class":244},"p.m_Age;\n",[25,21003,21004],{"class":27,"line":1875},[25,21005,21006],{"class":302},"        \u002F\u002F深拷贝操作\n",[25,21008,21009,21011,21013,21015,21017,21019],{"class":27,"line":1889},[25,21010,20907],{"class":244},[25,21012,11827],{"class":240},[25,21014,2492],{"class":240},[25,21016,245],{"class":244},[25,21018,698],{"class":240},[25,21020,21021],{"class":244},"p.m_Height);\n",[25,21023,21024],{"class":27,"line":1894},[25,21025,2297],{"class":244},[25,21027,21028],{"class":27,"line":2687},[25,21029,2510],{"emptyLinePlaceholder":167},[25,21031,21032],{"class":27,"line":2701},[25,21033,18657],{"class":302},[25,21035,21036,21038],{"class":27,"line":2709},[25,21037,18662],{"class":31},[25,21039,2086],{"class":244},[25,21041,21042],{"class":27,"line":2714},[25,21043,2140],{"class":244},[25,21045,21046],{"class":27,"line":2720},[25,21047,21048],{"class":302},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[25,21050,21051,21053,21056,21059,21062],{"class":27,"line":2726},[25,21052,2607],{"class":240},[25,21054,21055],{"class":244},"(m_Height ",[25,21057,21058],{"class":240},"!=",[25,21060,21061],{"class":35}," NULL",[25,21063,251],{"class":244},[25,21065,21066],{"class":27,"line":2731},[25,21067,2620],{"class":244},[25,21069,21070,21073,21076],{"class":27,"line":8058},[25,21071,21072],{"class":240},"            delete",[25,21074,21075],{"class":244}," m_Height;",[25,21077,21078],{"class":302}," \u002F\u002F释放堆区内存\n",[25,21080,21081,21084,21086,21088,21090],{"class":27,"line":8082},[25,21082,21083],{"class":244},"            m_Height",[25,21085,290],{"class":240},[25,21087,2502],{"class":35},[25,21089,299],{"class":244},[25,21091,21092],{"class":302}," \u002F\u002F防止野指针\n",[25,21094,21095],{"class":27,"line":8087},[25,21096,2639],{"class":244},[25,21098,21099,21101,21103],{"class":27,"line":8093},[25,21100,3561],{"class":244},[25,21102,1286],{"class":240},[25,21104,21105],{"class":45},"\"Person的析构函数调用\"\n",[25,21107,21108],{"class":27,"line":8120},[25,21109,2297],{"class":244},[25,21111,21112,21114],{"class":27,"line":8125},[25,21113,2095],{"class":240},[25,21115,15776],{"class":244},[25,21117,21118,21120,21122,21125],{"class":27,"line":8131},[25,21119,2095],{"class":240},[25,21121,6628],{"class":240},[25,21123,21124],{"class":244},"m_Height;",[25,21126,21127],{"class":302}," \u002F\u002F定义一个指针，指向身高\n",[25,21129,21130],{"class":27,"line":8143},[25,21131,4105],{"class":244},[25,21133,21134,21136,21138],{"class":27,"line":8155},[25,21135,5474],{"class":240},[25,21137,5698],{"class":31},[25,21139,2086],{"class":244},[25,21141,21142],{"class":27,"line":8167},[25,21143,1657],{"class":244},[25,21145,21146,21148,21150,21152,21154,21156,21159],{"class":27,"line":9826},[25,21147,19541],{"class":244},[25,21149,7240],{"class":31},[25,21151,245],{"class":244},[25,21153,893],{"class":35},[25,21155,621],{"class":244},[25,21157,21158],{"class":35},"160",[25,21160,2829],{"class":244},[25,21162,21163,21165,21167,21170,21172,21175,21177,21180,21182,21185,21187,21189],{"class":27,"line":9851},[25,21164,1662],{"class":244},[25,21166,1286],{"class":240},[25,21168,21169],{"class":45},"\"p1的年龄为:\"",[25,21171,1286],{"class":240},[25,21173,21174],{"class":244},"p1.m_Age",[25,21176,1286],{"class":240},[25,21178,21179],{"class":45},"\"身高为：\"",[25,21181,6529],{"class":240},[25,21183,21184],{"class":244},"p1.m_Height",[25,21186,1286],{"class":240},[25,21188,1351],{"class":244},[25,21190,21191],{"class":302},"  \u002F\u002F18\n",[25,21193,21194,21196,21198],{"class":27,"line":9874},[25,21195,19541],{"class":244},[25,21197,7143],{"class":31},[25,21199,17625],{"class":244},[25,21201,21202,21204,21206,21209,21211,21213,21215,21217,21219,21222,21224,21226],{"class":27,"line":9898},[25,21203,1662],{"class":244},[25,21205,1286],{"class":240},[25,21207,21208],{"class":45},"\"p2的年龄为：\"",[25,21210,1286],{"class":240},[25,21212,19571],{"class":244},[25,21214,1286],{"class":240},[25,21216,21179],{"class":45},[25,21218,6529],{"class":240},[25,21220,21221],{"class":244},"p2.m_Height",[25,21223,1286],{"class":240},[25,21225,1351],{"class":244},[25,21227,21191],{"class":302},[25,21229,21230],{"class":27,"line":9903},[25,21231,13320],{"class":244},[25,21233,21234],{"class":27,"line":9908},[25,21235,1676],{"class":244},[25,21237,21238,21240,21242],{"class":27,"line":9913},[25,21239,248],{"class":240},[25,21241,2083],{"class":31},[25,21243,2086],{"class":244},[25,21245,21246],{"class":27,"line":9922},[25,21247,1657],{"class":244},[25,21249,21250,21252],{"class":27,"line":9927},[25,21251,5743],{"class":31},[25,21253,5746],{"class":244},[25,21255,21256],{"class":27,"line":9933},[25,21257,1676],{"class":244},[99,21259,21260],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[99,21262,21263],{},"浅拷贝带来的问题是堆区的内存重复释放",[99,21265,21266],{},[155,21267],{"alt":20,"src":21268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[99,21270,21271],{},"浅拷贝问题要使用深拷贝来解决",[99,21273,21274],{},[155,21275],{"alt":20,"src":21276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[99,21278,21279],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[210,21281,21283],{"id":21282},"_826初始化列表","8.2.6初始化列表",[99,21285,21286],{},"作用：初始化属性",[99,21288,5291],{},[15,21290,21293],{"className":21291,"code":21292,"language":5297},[5295],"构造函数():属性1(值1),属性2(值2).....{}\n",[22,21294,21292],{"__ignoreMap":20},[99,21296,21297],{},"例子",[15,21299,21301],{"className":231,"code":21300,"language":233,"meta":20,"style":20},"#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",[22,21302,21303,21309,21319,21325,21329,21334,21338,21343,21348,21353,21358,21363,21368,21372,21377,21382,21425,21434,21452,21470,21488,21492,21496,21503,21510,21517,21521,21525,21533,21537,21541,21561,21570,21574,21578,21588,21592,21600],{"__ignoreMap":20},[25,21304,21305,21307],{"class":27,"line":28},[25,21306,2060],{"class":240},[25,21308,2063],{"class":45},[25,21310,21311,21313,21315,21317],{"class":27,"line":39},[25,21312,2068],{"class":240},[25,21314,2071],{"class":240},[25,21316,2074],{"class":31},[25,21318,1403],{"class":244},[25,21320,21321,21323],{"class":27,"line":51},[25,21322,14804],{"class":240},[25,21324,15281],{"class":31},[25,21326,21327],{"class":27,"line":59},[25,21328,1657],{"class":244},[25,21330,21331],{"class":27,"line":67},[25,21332,21333],{"class":240},"    public:\n",[25,21335,21336],{"class":27,"line":75},[25,21337,2510],{"emptyLinePlaceholder":167},[25,21339,21340],{"class":27,"line":83},[25,21341,21342],{"class":302},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[25,21344,21345],{"class":27,"line":91},[25,21346,21347],{"class":302},"    \u002F\u002FPerson(int a, int b, int c) {\n",[25,21349,21350],{"class":27,"line":1429},[25,21351,21352],{"class":302},"    \u002F\u002F  m_A = a;\n",[25,21354,21355],{"class":27,"line":1441},[25,21356,21357],{"class":302},"    \u002F\u002F  m_B = b;\n",[25,21359,21360],{"class":27,"line":1723},[25,21361,21362],{"class":302},"    \u002F\u002F  m_C = c;\n",[25,21364,21365],{"class":27,"line":1728},[25,21366,21367],{"class":302},"    \u002F\u002F}\n",[25,21369,21370],{"class":27,"line":1734},[25,21371,2510],{"emptyLinePlaceholder":167},[25,21373,21374],{"class":27,"line":1739},[25,21375,21376],{"class":302},"    \u002F\u002F初始化列表方式初始化\n",[25,21378,21379],{"class":27,"line":1753},[25,21380,21381],{"class":302},"    \u002F\u002F使用有参构造函数\n",[25,21383,21384,21386,21388,21390,21392,21394,21396,21398,21400,21402,21404,21407,21410,21413,21416,21419,21422],{"class":27,"line":1758},[25,21385,18629],{"class":31},[25,21387,245],{"class":244},[25,21389,248],{"class":240},[25,21391,1510],{"class":5326},[25,21393,12545],{"class":244},[25,21395,248],{"class":240},[25,21397,2943],{"class":5326},[25,21399,12545],{"class":244},[25,21401,248],{"class":240},[25,21403,2959],{"class":5326},[25,21405,21406],{"class":244},") :",[25,21408,21409],{"class":31},"m_A",[25,21411,21412],{"class":244},"(a), ",[25,21414,21415],{"class":31},"m_B",[25,21417,21418],{"class":244},"(b), ",[25,21420,21421],{"class":31},"m_C",[25,21423,21424],{"class":244},"(c) {}\n",[25,21426,21427,21429,21432],{"class":27,"line":1764},[25,21428,15019],{"class":240},[25,21430,21431],{"class":31}," PrintPerson",[25,21433,10963],{"class":244},[25,21435,21436,21438,21440,21443,21445,21448,21450],{"class":27,"line":1785},[25,21437,9779],{"class":244},[25,21439,1286],{"class":240},[25,21441,21442],{"class":45}," \"mA:\"",[25,21444,1556],{"class":240},[25,21446,21447],{"class":244}," m_A ",[25,21449,1286],{"class":240},[25,21451,8950],{"class":244},[25,21453,21454,21456,21458,21461,21463,21466,21468],{"class":27,"line":1790},[25,21455,9779],{"class":244},[25,21457,1286],{"class":240},[25,21459,21460],{"class":45}," \"mB:\"",[25,21462,1556],{"class":240},[25,21464,21465],{"class":244}," m_B ",[25,21467,1286],{"class":240},[25,21469,8950],{"class":244},[25,21471,21472,21474,21476,21479,21481,21484,21486],{"class":27,"line":1804},[25,21473,9779],{"class":244},[25,21475,1286],{"class":240},[25,21477,21478],{"class":45}," \"mC:\"",[25,21480,1556],{"class":240},[25,21482,21483],{"class":244}," m_C ",[25,21485,1286],{"class":240},[25,21487,8950],{"class":244},[25,21489,21490],{"class":27,"line":1809},[25,21491,2297],{"class":244},[25,21493,21494],{"class":27,"line":1838},[25,21495,15332],{"class":240},[25,21497,21498,21500],{"class":27,"line":1843},[25,21499,2095],{"class":240},[25,21501,21502],{"class":244}," m_A;\n",[25,21504,21505,21507],{"class":27,"line":1860},[25,21506,2095],{"class":240},[25,21508,21509],{"class":244}," m_B;\n",[25,21511,21512,21514],{"class":27,"line":1865},[25,21513,2095],{"class":240},[25,21515,21516],{"class":244}," m_C;\n",[25,21518,21519],{"class":27,"line":1870},[25,21520,4105],{"class":244},[25,21522,21523],{"class":27,"line":1875},[25,21524,2510],{"emptyLinePlaceholder":167},[25,21526,21527,21529,21531],{"class":27,"line":1889},[25,21528,248],{"class":240},[25,21530,2083],{"class":31},[25,21532,6088],{"class":244},[25,21534,21535],{"class":27,"line":1894},[25,21536,1657],{"class":244},[25,21538,21539],{"class":27,"line":2687},[25,21540,2510],{"emptyLinePlaceholder":167},[25,21542,21543,21545,21547,21549,21551,21553,21555,21557,21559],{"class":27,"line":2701},[25,21544,19541],{"class":244},[25,21546,99],{"class":31},[25,21548,245],{"class":244},[25,21550,460],{"class":35},[25,21552,12545],{"class":244},[25,21554,321],{"class":35},[25,21556,12545],{"class":244},[25,21558,315],{"class":35},[25,21560,2829],{"class":244},[25,21562,21563,21565,21568],{"class":27,"line":2709},[25,21564,15976],{"class":244},[25,21566,21567],{"class":31},"PrintPerson",[25,21569,5746],{"class":244},[25,21571,21572],{"class":27,"line":2714},[25,21573,2510],{"emptyLinePlaceholder":167},[25,21575,21576],{"class":27,"line":2720},[25,21577,2510],{"emptyLinePlaceholder":167},[25,21579,21580,21582,21584,21586],{"class":27,"line":2726},[25,21581,2413],{"class":31},[25,21583,245],{"class":244},[25,21585,2418],{"class":45},[25,21587,2829],{"class":244},[25,21589,21590],{"class":27,"line":2731},[25,21591,2510],{"emptyLinePlaceholder":167},[25,21593,21594,21596,21598],{"class":27,"line":8058},[25,21595,4200],{"class":240},[25,21597,4203],{"class":35},[25,21599,1403],{"class":244},[25,21601,21602],{"class":27,"line":8082},[25,21603,1676],{"class":244},[99,21605,21606,21607,21610,21611],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[392,21608,21609],{},"参数名就是定义的对象属性","，",[392,21612,21613],{},"属性后面的值为有参构造函数的形参",[15,21615,21617],{"className":231,"code":21616,"language":233,"meta":20,"style":20},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[22,21618,21619],{"__ignoreMap":20},[25,21620,21621,21623,21625,21627,21630,21632,21635,21637,21640,21642,21645,21647,21650,21652],{"class":27,"line":28},[25,21622,19156],{"class":31},[25,21624,245],{"class":244},[25,21626,248],{"class":240},[25,21628,21629],{"class":244}," a.",[25,21631,248],{"class":240},[25,21633,21634],{"class":244}," b,",[25,21636,248],{"class":240},[25,21638,21639],{"class":244}," b):",[25,21641,21409],{"class":31},[25,21643,21644],{"class":244},"(a),",[25,21646,21415],{"class":31},[25,21648,21649],{"class":244},"(c),",[25,21651,21421],{"class":31},[25,21653,21654],{"class":244},"(b) {}\n",[210,21656,21658],{"id":21657},"_827类对象作为类成员","8.2.7类对象作为类成员",[99,21660,21661],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[99,21663,14743],{},[15,21665,21667],{"className":231,"code":21666,"language":233,"meta":20,"style":20},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[22,21668,21669,21674,21679,21683,21688,21692],{"__ignoreMap":20},[25,21670,21671],{"class":27,"line":28},[25,21672,21673],{"class":244},"A{};\n",[25,21675,21676],{"class":27,"line":39},[25,21677,21678],{"class":244},"B\n",[25,21680,21681],{"class":27,"line":51},[25,21682,1657],{"class":244},[25,21684,21685],{"class":27,"line":59},[25,21686,21687],{"class":244},"    A a;\n",[25,21689,21690],{"class":27,"line":67},[25,21691,1676],{"class":244},[25,21693,21694],{"class":27,"line":75},[25,21695,21696],{"class":302},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[99,21698,21699],{},"案例",[15,21701,21703],{"className":231,"code":21702,"language":233,"meta":20,"style":20},"\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",[22,21704,21705,21710,21717,21721,21726,21731,21745,21749,21759,21770,21774,21781,21785,21798,21802,21807,21812,21816,21822,21826,21830,21834,21865,21869,21880,21884,21890,21894,21907,21911,21915,21919,21924,21929,21933,21941,21945,21962,21981,21985,21993,21997,22003],{"__ignoreMap":20},[25,21706,21707],{"class":27,"line":28},[25,21708,21709],{"class":302},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[25,21711,21712,21714],{"class":27,"line":39},[25,21713,14804],{"class":240},[25,21715,21716],{"class":31}," Phone\n",[25,21718,21719],{"class":27,"line":51},[25,21720,1657],{"class":244},[25,21722,21723],{"class":27,"line":59},[25,21724,21725],{"class":244},"public：\n",[25,21727,21728],{"class":27,"line":67},[25,21729,21730],{"class":302},"    \u002F\u002F 赋值(构造函数)\n",[25,21732,21733,21736,21738,21740,21743],{"class":27,"line":75},[25,21734,21735],{"class":31},"    Phone",[25,21737,245],{"class":244},[25,21739,15027],{"class":31},[25,21741,21742],{"class":5326}," pName",[25,21744,251],{"class":244},[25,21746,21747],{"class":27,"line":83},[25,21748,2140],{"class":244},[25,21750,21751,21754,21756],{"class":27,"line":91},[25,21752,21753],{"class":244},"        m_pName",[25,21755,290],{"class":240},[25,21757,21758],{"class":244},"pName;\n",[25,21760,21761,21763,21765,21768],{"class":27,"line":1429},[25,21762,3561],{"class":244},[25,21764,1286],{"class":240},[25,21766,21767],{"class":45},"\"Phone的构造函数调用\"",[25,21769,1403],{"class":244},[25,21771,21772],{"class":27,"line":1441},[25,21773,2297],{"class":244},[25,21775,21776,21779],{"class":27,"line":1723},[25,21777,21778],{"class":31},"    ~Phone",[25,21780,2086],{"class":244},[25,21782,21783],{"class":27,"line":1728},[25,21784,2140],{"class":244},[25,21786,21787,21789,21791,21794,21796],{"class":27,"line":1734},[25,21788,3561],{"class":244},[25,21790,1286],{"class":240},[25,21792,21793],{"class":45},"\"Phone析构函数调用\"",[25,21795,1286],{"class":240},[25,21797,1308],{"class":244},[25,21799,21800],{"class":27,"line":1739},[25,21801,2297],{"class":244},[25,21803,21804],{"class":27,"line":1753},[25,21805,21806],{"class":302},"    \u002F\u002F\n",[25,21808,21809],{"class":27,"line":1758},[25,21810,21811],{"class":244},"    string m_PName;\n",[25,21813,21814],{"class":27,"line":1764},[25,21815,4105],{"class":244},[25,21817,21818,21820],{"class":27,"line":1785},[25,21819,14804],{"class":240},[25,21821,15281],{"class":31},[25,21823,21824],{"class":27,"line":1790},[25,21825,1657],{"class":244},[25,21827,21828],{"class":27,"line":1804},[25,21829,14826],{"class":240},[25,21831,21832],{"class":27,"line":1809},[25,21833,17104],{"class":302},[25,21835,21836,21838,21840,21842,21844,21846,21848,21851,21854,21856,21859,21862],{"class":27,"line":1838},[25,21837,18629],{"class":31},[25,21839,245],{"class":244},[25,21841,15027],{"class":31},[25,21843,15030],{"class":5326},[25,21845,621],{"class":244},[25,21847,15027],{"class":31},[25,21849,21850],{"class":5326}," pname",[25,21852,21853],{"class":244},"):",[25,21855,15120],{"class":31},[25,21857,21858],{"class":244},"(name),m_phone.",[25,21860,21861],{"class":31},"m_PName",[25,21863,21864],{"class":244},"(pname) \n",[25,21866,21867],{"class":27,"line":1843},[25,21868,2140],{"class":244},[25,21870,21871,21873,21875,21878],{"class":27,"line":1860},[25,21872,3561],{"class":244},[25,21874,1286],{"class":240},[25,21876,21877],{"class":45},"\"Person的构造函数调用\"",[25,21879,1403],{"class":244},[25,21881,21882],{"class":27,"line":1865},[25,21883,2297],{"class":244},[25,21885,21886,21888],{"class":27,"line":1870},[25,21887,18662],{"class":31},[25,21889,2086],{"class":244},[25,21891,21892],{"class":27,"line":1875},[25,21893,2140],{"class":244},[25,21895,21896,21898,21900,21903,21905],{"class":27,"line":1889},[25,21897,3561],{"class":244},[25,21899,1286],{"class":240},[25,21901,21902],{"class":45},"\"Person析构函数调用\"",[25,21904,1286],{"class":240},[25,21906,1308],{"class":244},[25,21908,21909],{"class":27,"line":1894},[25,21910,2297],{"class":244},[25,21912,21913],{"class":27,"line":2687},[25,21914,7890],{"class":302},[25,21916,21917],{"class":27,"line":2701},[25,21918,15002],{"class":244},[25,21920,21921],{"class":27,"line":2709},[25,21922,21923],{"class":302},"    \u002F\u002F手机\n",[25,21925,21926],{"class":27,"line":2714},[25,21927,21928],{"class":244},"    Phone m_Phone;\n",[25,21930,21931],{"class":27,"line":2720},[25,21932,4105],{"class":244},[25,21934,21935,21937,21939],{"class":27,"line":2726},[25,21936,5474],{"class":240},[25,21938,5698],{"class":31},[25,21940,2086],{"class":244},[25,21942,21943],{"class":27,"line":2731},[25,21944,1657],{"class":244},[25,21946,21947,21949,21951,21953,21955,21957,21960],{"class":27,"line":8058},[25,21948,19541],{"class":244},[25,21950,99],{"class":31},[25,21952,245],{"class":244},[25,21954,8026],{"class":45},[25,21956,621],{"class":244},[25,21958,21959],{"class":45},"\"安卓\"",[25,21961,2829],{"class":244},[25,21963,21964,21966,21968,21971,21973,21976,21978],{"class":27,"line":8082},[25,21965,1662],{"class":244},[25,21967,1286],{"class":240},[25,21969,21970],{"class":244},"p.Name",[25,21972,1286],{"class":240},[25,21974,21975],{"class":45},"\"拿着：\"",[25,21977,1286],{"class":240},[25,21979,21980],{"class":244},"p.m_phone.m_PName;\n",[25,21982,21983],{"class":27,"line":8087},[25,21984,1676],{"class":244},[25,21986,21987,21989,21991],{"class":27,"line":8093},[25,21988,248],{"class":240},[25,21990,2083],{"class":31},[25,21992,2086],{"class":244},[25,21994,21995],{"class":27,"line":8120},[25,21996,1657],{"class":244},[25,21998,21999,22001],{"class":27,"line":8125},[25,22000,5743],{"class":31},[25,22002,5746],{"class":244},[25,22004,22005],{"class":27,"line":8131},[25,22006,1676],{"class":244},[99,22008,9135],{},[15,22010,22012],{"className":231,"code":22011,"language":233,"meta":20,"style":20},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[22,22013,22014,22019],{"__ignoreMap":20},[25,22015,22016],{"class":27,"line":28},[25,22017,22018],{"class":302},"    \u002F\u002F不需要写这个：\n",[25,22020,22021],{"class":27,"line":39},[25,22022,22023],{"class":302},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[99,22025,22026],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[15,22028,22030],{"className":231,"code":22029,"language":233,"meta":20,"style":20},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[22,22031,22032],{"__ignoreMap":20},[25,22033,22034,22036,22039,22041,22044,22047],{"class":27,"line":28},[25,22035,19156],{"class":31},[25,22037,22038],{"class":244},"(string name.string pname):",[25,22040,15120],{"class":31},[25,22042,22043],{"class":244},"(name),",[25,22045,22046],{"class":31},"m_phone",[25,22048,22049],{"class":244},"(pname) {}\n",[99,22051,22052,22053,290,22056],{},"采用的是隐式转换法，实际为如下：\n",[22,22054,22055],{},"m_phone(pname)",[22,22057,22058],{},"Phone m_phone=pname",[99,22060,22061,22064],{},[392,22062,22063],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[99,22066,22067],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[210,22069,22071],{"id":22070},"_828静态对象","8.2.8静态对象",[99,22073,22074],{},"静态对象在成员对象前static，称为静态对象",[99,22076,22077],{},"静态对象分为两类：",[194,22079,22080],{},[106,22081,22082],{},"静态成员变量",[103,22084,22085,22088,22091],{},[106,22086,22087],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[106,22089,22090],{},"②在编译阶段分配内存",[106,22092,22093],{},"③类内声明，类外初始化",[194,22095,22096],{"start":39},[106,22097,22098],{},"静态成员函数",[103,22100,22101,22104],{},[106,22102,22103],{},"①所有对象共享同一个函数",[106,22105,22106],{},"②静态成员函数只能访问静态成员变量",[22108,22109,22111],"h4",{"id":22110},"_8281静态成员变量","8.2.8.1静态成员变量",[15,22113,22115],{"className":231,"code":22114,"language":233,"meta":20,"style":20},"#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",[22,22116,22117,22123,22133,22139,22143,22147,22152,22157,22162,22170,22174,22178,22182,22190,22194,22198,22203,22216,22220,22228,22232,22238],{"__ignoreMap":20},[25,22118,22119,22121],{"class":27,"line":28},[25,22120,2060],{"class":240},[25,22122,2063],{"class":45},[25,22124,22125,22127,22129,22131],{"class":27,"line":39},[25,22126,2068],{"class":240},[25,22128,2071],{"class":240},[25,22130,2074],{"class":31},[25,22132,1403],{"class":244},[25,22134,22135,22137],{"class":27,"line":51},[25,22136,14804],{"class":240},[25,22138,15281],{"class":31},[25,22140,22141],{"class":27,"line":59},[25,22142,1657],{"class":244},[25,22144,22145],{"class":27,"line":67},[25,22146,14826],{"class":240},[25,22148,22149],{"class":27,"line":75},[25,22150,22151],{"class":302},"    \u002F\u002F非静态成员变量\n",[25,22153,22154],{"class":27,"line":83},[25,22155,22156],{"class":302},"    \u002F\u002F int m_A;\n",[25,22158,22159],{"class":27,"line":91},[25,22160,22161],{"class":302},"    \u002F\u002F定义静态成员变量\n",[25,22163,22164,22166,22168],{"class":27,"line":1429},[25,22165,11130],{"class":240},[25,22167,2492],{"class":240},[25,22169,21502],{"class":244},[25,22171,22172],{"class":27,"line":1441},[25,22173,2510],{"emptyLinePlaceholder":167},[25,22175,22176],{"class":27,"line":1723},[25,22177,2510],{"emptyLinePlaceholder":167},[25,22179,22180],{"class":27,"line":1728},[25,22181,4105],{"class":244},[25,22183,22184,22186,22188],{"class":27,"line":1734},[25,22185,5474],{"class":240},[25,22187,5698],{"class":31},[25,22189,2086],{"class":244},[25,22191,22192],{"class":27,"line":1739},[25,22193,1657],{"class":244},[25,22195,22196],{"class":27,"line":1753},[25,22197,15423],{"class":244},[25,22199,22200],{"class":27,"line":1758},[25,22201,22202],{"class":302},"    \u002F\u002F输出类成员变量这块内存\n",[25,22204,22205,22207,22209,22212,22214],{"class":27,"line":1764},[25,22206,1662],{"class":244},[25,22208,1286],{"class":240},[25,22210,22211],{"class":244},"p.m_A",[25,22213,1286],{"class":240},[25,22215,1308],{"class":244},[25,22217,22218],{"class":27,"line":1785},[25,22219,1676],{"class":244},[25,22221,22222,22224,22226],{"class":27,"line":1790},[25,22223,248],{"class":240},[25,22225,2083],{"class":31},[25,22227,2086],{"class":244},[25,22229,22230],{"class":27,"line":1804},[25,22231,1657],{"class":244},[25,22233,22234,22236],{"class":27,"line":1809},[25,22235,5743],{"class":31},[25,22237,2086],{"class":244},[25,22239,22240],{"class":27,"line":1838},[25,22241,1676],{"class":244},[99,22243,22244],{},"此时输出是报错的：无法解析外部命令",[99,22246,22247],{},"解决这一问题：必须用到类内声明，类外初始化操作",[15,22249,22251],{"className":231,"code":22250,"language":233,"meta":20,"style":20},"#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",[22,22252,22253,22259,22269,22275,22279,22283,22288,22296,22300,22305,22320,22328,22332,22336,22341,22346,22358,22363,22374,22379,22384,22397,22401,22409,22413,22419],{"__ignoreMap":20},[25,22254,22255,22257],{"class":27,"line":28},[25,22256,2060],{"class":240},[25,22258,2063],{"class":45},[25,22260,22261,22263,22265,22267],{"class":27,"line":39},[25,22262,2068],{"class":240},[25,22264,2071],{"class":240},[25,22266,2074],{"class":31},[25,22268,1403],{"class":244},[25,22270,22271,22273],{"class":27,"line":51},[25,22272,14804],{"class":240},[25,22274,15281],{"class":31},[25,22276,22277],{"class":27,"line":59},[25,22278,1657],{"class":244},[25,22280,22281],{"class":27,"line":67},[25,22282,14826],{"class":240},[25,22284,22285],{"class":27,"line":75},[25,22286,22287],{"class":302},"    \u002F\u002F类内声明\n",[25,22289,22290,22292,22294],{"class":27,"line":83},[25,22291,11130],{"class":240},[25,22293,2492],{"class":240},[25,22295,21502],{"class":244},[25,22297,22298],{"class":27,"line":91},[25,22299,4105],{"class":244},[25,22301,22302],{"class":27,"line":1429},[25,22303,22304],{"class":302},"\u002F\u002F类外初始化\n",[25,22306,22307,22309,22311,22314,22316,22318],{"class":27,"line":1441},[25,22308,248],{"class":240},[25,22310,15679],{"class":31},[25,22312,22313],{"class":244},"::m_A",[25,22315,290],{"class":240},[25,22317,689],{"class":35},[25,22319,1403],{"class":244},[25,22321,22322,22324,22326],{"class":27,"line":1723},[25,22323,5474],{"class":240},[25,22325,5698],{"class":31},[25,22327,2086],{"class":244},[25,22329,22330],{"class":27,"line":1728},[25,22331,1657],{"class":244},[25,22333,22334],{"class":27,"line":1734},[25,22335,15423],{"class":244},[25,22337,22338],{"class":27,"line":1739},[25,22339,22340],{"class":302},"    \u002F\u002F访问变量的原内存空间\n",[25,22342,22343],{"class":27,"line":1753},[25,22344,22345],{"class":302},"    \u002F\u002F100\n",[25,22347,22348,22350,22352,22354,22356],{"class":27,"line":1758},[25,22349,1662],{"class":244},[25,22351,1286],{"class":240},[25,22353,22211],{"class":244},[25,22355,1286],{"class":240},[25,22357,1308],{"class":244},[25,22359,22360],{"class":27,"line":1764},[25,22361,22362],{"class":244},"    Person p2;\n",[25,22364,22365,22368,22370,22372],{"class":27,"line":1785},[25,22366,22367],{"class":244},"    p2.m_A",[25,22369,290],{"class":240},[25,22371,1833],{"class":35},[25,22373,1403],{"class":244},[25,22375,22376],{"class":27,"line":1790},[25,22377,22378],{"class":302},"    \u002F\u002F继续访问这片空间\n",[25,22380,22381],{"class":27,"line":1804},[25,22382,22383],{"class":302},"    \u002F\u002F200\n",[25,22385,22386,22388,22390,22393,22395],{"class":27,"line":1809},[25,22387,1662],{"class":244},[25,22389,1286],{"class":240},[25,22391,22392],{"class":244},"p2.m_A",[25,22394,1286],{"class":240},[25,22396,1308],{"class":244},[25,22398,22399],{"class":27,"line":1838},[25,22400,1676],{"class":244},[25,22402,22403,22405,22407],{"class":27,"line":1843},[25,22404,248],{"class":240},[25,22406,2083],{"class":31},[25,22408,2086],{"class":244},[25,22410,22411],{"class":27,"line":1860},[25,22412,1657],{"class":244},[25,22414,22415,22417],{"class":27,"line":1865},[25,22416,5743],{"class":31},[25,22418,5746],{"class":244},[25,22420,22421],{"class":27,"line":1870},[25,22422,1676],{"class":244},[99,22424,22425],{},[392,22426,22427],{},"静态变量的访问",[15,22429,22431],{"className":231,"code":22430,"language":233,"meta":20,"style":20},"#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",[22,22432,22433,22439,22449,22455,22459,22463,22467,22475,22479,22484,22492,22496,22500,22514,22529,22537,22541,22546,22551,22556,22561,22573,22578,22583,22597,22614,22618,22626,22630,22636],{"__ignoreMap":20},[25,22434,22435,22437],{"class":27,"line":28},[25,22436,2060],{"class":240},[25,22438,2063],{"class":45},[25,22440,22441,22443,22445,22447],{"class":27,"line":39},[25,22442,2068],{"class":240},[25,22444,2071],{"class":240},[25,22446,2074],{"class":31},[25,22448,1403],{"class":244},[25,22450,22451,22453],{"class":27,"line":51},[25,22452,14804],{"class":240},[25,22454,15281],{"class":31},[25,22456,22457],{"class":27,"line":59},[25,22458,1657],{"class":244},[25,22460,22461],{"class":27,"line":67},[25,22462,14826],{"class":240},[25,22464,22465],{"class":27,"line":75},[25,22466,22287],{"class":302},[25,22468,22469,22471,22473],{"class":27,"line":83},[25,22470,11130],{"class":240},[25,22472,2492],{"class":240},[25,22474,21502],{"class":244},[25,22476,22477],{"class":27,"line":91},[25,22478,15332],{"class":240},[25,22480,22481],{"class":27,"line":1429},[25,22482,22483],{"class":302},"    \u002F\u002F静态成员变量也是有访问权限的\n",[25,22485,22486,22488,22490],{"class":27,"line":1441},[25,22487,11130],{"class":240},[25,22489,2492],{"class":240},[25,22491,21509],{"class":244},[25,22493,22494],{"class":27,"line":1723},[25,22495,4105],{"class":244},[25,22497,22498],{"class":27,"line":1728},[25,22499,22304],{"class":302},[25,22501,22502,22504,22506,22508,22510,22512],{"class":27,"line":1734},[25,22503,248],{"class":240},[25,22505,15679],{"class":31},[25,22507,22313],{"class":244},[25,22509,290],{"class":240},[25,22511,689],{"class":35},[25,22513,1403],{"class":244},[25,22515,22516,22518,22520,22523,22525,22527],{"class":27,"line":1739},[25,22517,248],{"class":240},[25,22519,15679],{"class":31},[25,22521,22522],{"class":244},"::m_B",[25,22524,290],{"class":240},[25,22526,943],{"class":35},[25,22528,1403],{"class":244},[25,22530,22531,22533,22535],{"class":27,"line":1753},[25,22532,5474],{"class":240},[25,22534,5767],{"class":31},[25,22536,2086],{"class":244},[25,22538,22539],{"class":27,"line":1758},[25,22540,1657],{"class":244},[25,22542,22543],{"class":27,"line":1764},[25,22544,22545],{"class":302},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[25,22547,22548],{"class":27,"line":1785},[25,22549,22550],{"class":302},"    \u002F\u002F静态成员变量有两种访问方式：\n",[25,22552,22553],{"class":27,"line":1790},[25,22554,22555],{"class":302},"    \u002F\u002F1.通过对象进行访问\n",[25,22557,22558],{"class":27,"line":1804},[25,22559,22560],{"class":244},"    Person p;  \n",[25,22562,22563,22565,22567,22569,22571],{"class":27,"line":1809},[25,22564,1662],{"class":244},[25,22566,1286],{"class":240},[25,22568,22211],{"class":244},[25,22570,1286],{"class":240},[25,22572,1308],{"class":244},[25,22574,22575],{"class":27,"line":1838},[25,22576,22577],{"class":302},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[25,22579,22580],{"class":27,"line":1843},[25,22581,22582],{"class":302},"    \u002F\u002F2.通过类名进行访问\n",[25,22584,22585,22587,22589,22591,22593,22595],{"class":27,"line":1860},[25,22586,1662],{"class":244},[25,22588,1286],{"class":240},[25,22590,19156],{"class":31},[25,22592,22313],{"class":244},[25,22594,1286],{"class":240},[25,22596,1308],{"class":244},[25,22598,22599,22601,22603,22605,22607,22609,22611],{"class":27,"line":1865},[25,22600,1662],{"class":244},[25,22602,1286],{"class":240},[25,22604,19156],{"class":31},[25,22606,22522],{"class":244},[25,22608,1286],{"class":240},[25,22610,1351],{"class":244},[25,22612,22613],{"class":302}," \u002F\u002F没有访问权限，报错\n",[25,22615,22616],{"class":27,"line":1870},[25,22617,1676],{"class":244},[25,22619,22620,22622,22624],{"class":27,"line":1875},[25,22621,248],{"class":240},[25,22623,2083],{"class":31},[25,22625,2086],{"class":244},[25,22627,22628],{"class":27,"line":1889},[25,22629,1657],{"class":244},[25,22631,22632,22634],{"class":27,"line":1894},[25,22633,5812],{"class":31},[25,22635,5746],{"class":244},[25,22637,22638],{"class":27,"line":2687},[25,22639,1676],{"class":244},[22108,22641,22643],{"id":22642},"_8282静态成员函数","8.2.8.2静态成员函数",[99,22645,22646],{},"1.静态成员函数定义与访问",[15,22648,22650],{"className":231,"code":22649,"language":233,"meta":20,"style":20},"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",[22,22651,22652,22658,22662,22666,22671,22682,22686,22700,22704,22708,22716,22720,22725,22730,22734,22742,22747,22757],{"__ignoreMap":20},[25,22653,22654,22656],{"class":27,"line":28},[25,22655,14804],{"class":240},[25,22657,15281],{"class":31},[25,22659,22660],{"class":27,"line":39},[25,22661,1657],{"class":244},[25,22663,22664],{"class":27,"line":51},[25,22665,14826],{"class":240},[25,22667,22668],{"class":27,"line":59},[25,22669,22670],{"class":302},"    \u002F\u002F在公共权限下定义静态成员函数\n",[25,22672,22673,22675,22678,22680],{"class":27,"line":67},[25,22674,11130],{"class":240},[25,22676,22677],{"class":240}," void",[25,22679,11495],{"class":31},[25,22681,2086],{"class":244},[25,22683,22684],{"class":27,"line":75},[25,22685,2140],{"class":244},[25,22687,22688,22691,22693,22696,22698],{"class":27,"line":83},[25,22689,22690],{"class":244},"        coout",[25,22692,1286],{"class":240},[25,22694,22695],{"class":45},"\"静态成员函数的调用\"",[25,22697,1286],{"class":240},[25,22699,1308],{"class":244},[25,22701,22702],{"class":27,"line":91},[25,22703,2297],{"class":244},[25,22705,22706],{"class":27,"line":1429},[25,22707,4105],{"class":244},[25,22709,22710,22712,22714],{"class":27,"line":1441},[25,22711,5474],{"class":240},[25,22713,5698],{"class":31},[25,22715,2086],{"class":244},[25,22717,22718],{"class":27,"line":1723},[25,22719,1657],{"class":244},[25,22721,22722],{"class":27,"line":1728},[25,22723,22724],{"class":302},"    \u002F\u002F静态成员函数的调用方式:\n",[25,22726,22727],{"class":27,"line":1734},[25,22728,22729],{"class":302},"    \u002F\u002F1.通过对象访问\n",[25,22731,22732],{"class":27,"line":1739},[25,22733,15423],{"class":244},[25,22735,22736,22738,22740],{"class":27,"line":1753},[25,22737,15976],{"class":244},[25,22739,11661],{"class":31},[25,22741,5746],{"class":244},[25,22743,22744],{"class":27,"line":1758},[25,22745,22746],{"class":302},"    \u002F\u002F2.通过类名访问\n",[25,22748,22749,22751,22753,22755],{"class":27,"line":1764},[25,22750,18629],{"class":31},[25,22752,17842],{"class":244},[25,22754,11661],{"class":31},[25,22756,5746],{"class":244},[25,22758,22759],{"class":27,"line":1785},[25,22760,1676],{"class":244},[194,22762,22763],{"start":39},[106,22764,22765],{},"静态成员函数只能访问静态成员变量",[15,22767,22769],{"className":231,"code":22768,"language":233,"meta":20,"style":20},"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",[22,22770,22771,22777,22781,22785,22789,22799,22803,22817,22822,22834,22838,22849,22859,22863,22867,22871,22881,22885,22898,22902,22906,22910,22914,22928,22936,22940,22944,22948,22952,22960,22964,22974,22979,22983,22991,22995,23001],{"__ignoreMap":20},[25,22772,22773,22775],{"class":27,"line":28},[25,22774,14804],{"class":240},[25,22776,15281],{"class":31},[25,22778,22779],{"class":27,"line":39},[25,22780,1657],{"class":244},[25,22782,22783],{"class":27,"line":51},[25,22784,14826],{"class":240},[25,22786,22787],{"class":27,"line":59},[25,22788,22670],{"class":302},[25,22790,22791,22793,22795,22797],{"class":27,"line":67},[25,22792,11130],{"class":240},[25,22794,22677],{"class":240},[25,22796,11495],{"class":31},[25,22798,2086],{"class":244},[25,22800,22801],{"class":27,"line":75},[25,22802,2140],{"class":244},[25,22804,22805,22808,22810,22812,22814],{"class":27,"line":83},[25,22806,22807],{"class":244},"        m_A",[25,22809,290],{"class":240},[25,22811,554],{"class":35},[25,22813,299],{"class":244},[25,22815,22816],{"class":302}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[25,22818,22819],{"class":27,"line":91},[25,22820,22821],{"class":302},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[25,22823,22824,22826,22828,22830,22832],{"class":27,"line":1429},[25,22825,22690],{"class":244},[25,22827,1286],{"class":240},[25,22829,22695],{"class":45},[25,22831,1286],{"class":240},[25,22833,1308],{"class":244},[25,22835,22836],{"class":27,"line":1441},[25,22837,2297],{"class":244},[25,22839,22840,22842,22844,22846],{"class":27,"line":1723},[25,22841,11130],{"class":240},[25,22843,2492],{"class":240},[25,22845,15558],{"class":244},[25,22847,22848],{"class":302}," \u002F\u002F静态成员变量\n",[25,22850,22851,22853,22856],{"class":27,"line":1728},[25,22852,2095],{"class":240},[25,22854,22855],{"class":244}," m_B;",[25,22857,22858],{"class":302}," \u002F\u002F非静态成员变量\n",[25,22860,22861],{"class":27,"line":1734},[25,22862,2510],{"emptyLinePlaceholder":167},[25,22864,22865],{"class":27,"line":1739},[25,22866,15332],{"class":240},[25,22868,22869],{"class":27,"line":1753},[25,22870,22483],{"class":302},[25,22872,22873,22875,22877,22879],{"class":27,"line":1758},[25,22874,11130],{"class":240},[25,22876,22677],{"class":240},[25,22878,13728],{"class":31},[25,22880,2086],{"class":244},[25,22882,22883],{"class":27,"line":1764},[25,22884,2140],{"class":244},[25,22886,22887,22889,22891,22894,22896],{"class":27,"line":1785},[25,22888,3561],{"class":244},[25,22890,1286],{"class":240},[25,22892,22893],{"class":45},"\"这是私有权限下的静态函数调用\"",[25,22895,1286],{"class":240},[25,22897,1308],{"class":244},[25,22899,22900],{"class":27,"line":1790},[25,22901,2297],{"class":244},[25,22903,22904],{"class":27,"line":1804},[25,22905,2510],{"emptyLinePlaceholder":167},[25,22907,22908],{"class":27,"line":1809},[25,22909,2510],{"emptyLinePlaceholder":167},[25,22911,22912],{"class":27,"line":1838},[25,22913,4105],{"class":244},[25,22915,22916,22918,22920,22922,22924,22926],{"class":27,"line":1843},[25,22917,248],{"class":240},[25,22919,15679],{"class":31},[25,22921,22313],{"class":244},[25,22923,290],{"class":240},[25,22925,434],{"class":35},[25,22927,1403],{"class":244},[25,22929,22930,22932,22934],{"class":27,"line":1860},[25,22931,5474],{"class":240},[25,22933,5698],{"class":31},[25,22935,2086],{"class":244},[25,22937,22938],{"class":27,"line":1865},[25,22939,1657],{"class":244},[25,22941,22942],{"class":27,"line":1870},[25,22943,22724],{"class":302},[25,22945,22946],{"class":27,"line":1875},[25,22947,22729],{"class":302},[25,22949,22950],{"class":27,"line":1889},[25,22951,15423],{"class":244},[25,22953,22954,22956,22958],{"class":27,"line":1894},[25,22955,15976],{"class":244},[25,22957,11661],{"class":31},[25,22959,5746],{"class":244},[25,22961,22962],{"class":27,"line":2687},[25,22963,22746],{"class":302},[25,22965,22966,22968,22970,22972],{"class":27,"line":2701},[25,22967,18629],{"class":31},[25,22969,17842],{"class":244},[25,22971,11661],{"class":31},[25,22973,5746],{"class":244},[25,22975,22976],{"class":27,"line":2709},[25,22977,22978],{"class":302},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[25,22980,22981],{"class":27,"line":2714},[25,22982,1676],{"class":244},[25,22984,22985,22987,22989],{"class":27,"line":2720},[25,22986,248],{"class":240},[25,22988,2083],{"class":31},[25,22990,2086],{"class":244},[25,22992,22993],{"class":27,"line":2726},[25,22994,1657],{"class":244},[25,22996,22997,22999],{"class":27,"line":2731},[25,22998,5743],{"class":31},[25,23000,5746],{"class":244},[25,23002,23003],{"class":27,"line":8058},[25,23004,1676],{"class":244},[210,23006,23008],{"id":23007},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22108,23010,23012],{"id":23011},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[99,23014,23015],{},"在c++中，类内的成员变量和成员函数分开存储",[99,23017,23018],{},"只有非静态成员变量才属于类的对象上",[23020,23021,23023],"h5",{"id":23022},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[15,23025,23027],{"className":231,"code":23026,"language":233,"meta":20,"style":20},"#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",[22,23028,23029,23036,23046,23052,23056,23060,23064,23072,23076,23080,23103,23107,23115,23119,23125],{"__ignoreMap":20},[25,23030,23031,23033],{"class":27,"line":28},[25,23032,2060],{"class":240},[25,23034,23035],{"class":45},"\u003Ciostraem>\n",[25,23037,23038,23040,23042,23044],{"class":27,"line":39},[25,23039,2068],{"class":240},[25,23041,2071],{"class":240},[25,23043,2074],{"class":31},[25,23045,1403],{"class":244},[25,23047,23048,23050],{"class":27,"line":51},[25,23049,14804],{"class":240},[25,23051,15281],{"class":31},[25,23053,23054],{"class":27,"line":59},[25,23055,1657],{"class":244},[25,23057,23058],{"class":27,"line":67},[25,23059,2510],{"emptyLinePlaceholder":167},[25,23061,23062],{"class":27,"line":75},[25,23063,4105],{"class":244},[25,23065,23066,23068,23070],{"class":27,"line":83},[25,23067,5474],{"class":240},[25,23069,5698],{"class":31},[25,23071,2086],{"class":244},[25,23073,23074],{"class":27,"line":91},[25,23075,1657],{"class":244},[25,23077,23078],{"class":27,"line":1429},[25,23079,15423],{"class":244},[25,23081,23082,23084,23086,23089,23091,23094,23096,23098,23100],{"class":27,"line":1441},[25,23083,1662],{"class":244},[25,23085,1286],{"class":240},[25,23087,23088],{"class":45},"\"size of p=\"",[25,23090,1286],{"class":240},[25,23092,23093],{"class":31},"sizeoif",[25,23095,6649],{"class":244},[25,23097,1286],{"class":240},[25,23099,1351],{"class":244},[25,23101,23102],{"class":302}," \u002F\u002F查看这个空类的占用的内存空间\n",[25,23104,23105],{"class":27,"line":1723},[25,23106,1676],{"class":244},[25,23108,23109,23111,23113],{"class":27,"line":1728},[25,23110,248],{"class":240},[25,23112,2083],{"class":31},[25,23114,2086],{"class":244},[25,23116,23117],{"class":27,"line":1734},[25,23118,1657],{"class":244},[25,23120,23121,23123],{"class":27,"line":1739},[25,23122,5743],{"class":31},[25,23124,5746],{"class":244},[25,23126,23127],{"class":27,"line":1753},[25,23128,1676],{"class":244},[99,23130,23131],{},"输出结果为：size of p=1",[99,23133,23134],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[99,23136,23137],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23020,23139,23141],{"id":23140},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[15,23143,23145],{"className":231,"code":23144,"language":233,"meta":20,"style":20},"#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",[22,23146,23147,23153,23163,23171,23175,23184,23188,23196,23200,23204,23223,23227,23231,23239,23243,23249],{"__ignoreMap":20},[25,23148,23149,23151],{"class":27,"line":28},[25,23150,2060],{"class":240},[25,23152,2063],{"class":45},[25,23154,23155,23157,23159,23161],{"class":27,"line":39},[25,23156,2068],{"class":240},[25,23158,2071],{"class":240},[25,23160,2074],{"class":31},[25,23162,1403],{"class":244},[25,23164,23165,23167,23169],{"class":27,"line":51},[25,23166,14804],{"class":240},[25,23168,15679],{"class":31},[25,23170,2784],{"class":244},[25,23172,23173],{"class":27,"line":59},[25,23174,1657],{"class":244},[25,23176,23177,23179,23181],{"class":27,"line":67},[25,23178,2095],{"class":240},[25,23180,15558],{"class":244},[25,23182,23183],{"class":302},"\u002F\u002F非静态成员变量\n",[25,23185,23186],{"class":27,"line":75},[25,23187,4105],{"class":244},[25,23189,23190,23192,23194],{"class":27,"line":83},[25,23191,5474],{"class":240},[25,23193,5698],{"class":31},[25,23195,2086],{"class":244},[25,23197,23198],{"class":27,"line":91},[25,23199,1657],{"class":244},[25,23201,23202],{"class":27,"line":1429},[25,23203,15423],{"class":244},[25,23205,23206,23208,23210,23212,23214,23216,23218,23220],{"class":27,"line":1441},[25,23207,1662],{"class":244},[25,23209,1286],{"class":240},[25,23211,23088],{"class":45},[25,23213,1484],{"class":240},[25,23215,6649],{"class":244},[25,23217,1286],{"class":240},[25,23219,1351],{"class":244},[25,23221,23222],{"class":302}," \u002F\u002F查看不是空对象时占用多少内存\n",[25,23224,23225],{"class":27,"line":1723},[25,23226,2510],{"emptyLinePlaceholder":167},[25,23228,23229],{"class":27,"line":1728},[25,23230,1676],{"class":244},[25,23232,23233,23235,23237],{"class":27,"line":1734},[25,23234,248],{"class":240},[25,23236,2083],{"class":31},[25,23238,2086],{"class":244},[25,23240,23241],{"class":27,"line":1739},[25,23242,1657],{"class":244},[25,23244,23245,23247],{"class":27,"line":1753},[25,23246,5743],{"class":31},[25,23248,5746],{"class":244},[25,23250,23251],{"class":27,"line":1758},[25,23252,1676],{"class":244},[99,23254,23255],{},"输出结果：size of p=4",[99,23257,23258],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[194,23260,23261],{},[106,23262,23263],{},"如果加上非静态成员变量，Person类修改如下",[15,23265,23267],{"className":231,"code":23266,"language":233,"meta":20,"style":20},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[22,23268,23269,23275,23279,23285,23293,23297,23302],{"__ignoreMap":20},[25,23270,23271,23273],{"class":27,"line":28},[25,23272,14804],{"class":240},[25,23274,15281],{"class":31},[25,23276,23277],{"class":27,"line":39},[25,23278,1657],{"class":244},[25,23280,23281,23283],{"class":27,"line":51},[25,23282,2095],{"class":240},[25,23284,21502],{"class":244},[25,23286,23287,23289,23291],{"class":27,"line":59},[25,23288,11130],{"class":240},[25,23290,2492],{"class":240},[25,23292,21509],{"class":244},[25,23294,23295],{"class":27,"line":67},[25,23296,4105],{"class":244},[25,23298,23299],{"class":27,"line":75},[25,23300,23301],{"class":302},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[25,23303,23304,23306,23308,23310,23312,23314],{"class":27,"line":83},[25,23305,248],{"class":240},[25,23307,15679],{"class":31},[25,23309,22522],{"class":244},[25,23311,290],{"class":240},[25,23313,434],{"class":35},[25,23315,1403],{"class":244},[99,23317,23318],{},"输出结果：4",[99,23320,23321],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[194,23323,23324],{"start":39},[106,23325,23326],{},"加上非静态成员函数",[15,23328,23330],{"className":231,"code":23329,"language":233,"meta":20,"style":20},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[22,23331,23332,23339,23343,23349,23357,23361,23365,23369],{"__ignoreMap":20},[25,23333,23334,23336],{"class":27,"line":28},[25,23335,14804],{"class":240},[25,23337,23338],{"class":31},"  Person\n",[25,23340,23341],{"class":27,"line":39},[25,23342,1657],{"class":244},[25,23344,23345,23347],{"class":27,"line":51},[25,23346,2095],{"class":240},[25,23348,21502],{"class":244},[25,23350,23351,23353,23355],{"class":27,"line":59},[25,23352,15019],{"class":240},[25,23354,11495],{"class":31},[25,23356,2086],{"class":244},[25,23358,23359],{"class":27,"line":67},[25,23360,2140],{"class":244},[25,23362,23363],{"class":27,"line":75},[25,23364,2510],{"emptyLinePlaceholder":167},[25,23366,23367],{"class":27,"line":83},[25,23368,2297],{"class":244},[25,23370,23371],{"class":27,"line":91},[25,23372,4105],{"class":244},[99,23374,23375],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[194,23377,23378],{"start":51},[106,23379,23380],{},"加上静态成员函数",[15,23382,23384],{"className":231,"code":23383,"language":233,"meta":20,"style":20},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[22,23385,23386,23392,23396,23402,23410,23414,23418,23422,23433,23437,23441,23445],{"__ignoreMap":20},[25,23387,23388,23390],{"class":27,"line":28},[25,23389,14804],{"class":240},[25,23391,23338],{"class":31},[25,23393,23394],{"class":27,"line":39},[25,23395,1657],{"class":244},[25,23397,23398,23400],{"class":27,"line":51},[25,23399,2095],{"class":240},[25,23401,21502],{"class":244},[25,23403,23404,23406,23408],{"class":27,"line":59},[25,23405,15019],{"class":240},[25,23407,11495],{"class":31},[25,23409,2086],{"class":244},[25,23411,23412],{"class":27,"line":67},[25,23413,2140],{"class":244},[25,23415,23416],{"class":27,"line":75},[25,23417,2510],{"emptyLinePlaceholder":167},[25,23419,23420],{"class":27,"line":83},[25,23421,2297],{"class":244},[25,23423,23424,23426,23428,23431],{"class":27,"line":91},[25,23425,11130],{"class":240},[25,23427,22677],{"class":240},[25,23429,23430],{"class":31}," func1",[25,23432,2086],{"class":244},[25,23434,23435],{"class":27,"line":1429},[25,23436,2140],{"class":244},[25,23438,23439],{"class":27,"line":1441},[25,23440,2510],{"emptyLinePlaceholder":167},[25,23442,23443],{"class":27,"line":1723},[25,23444,2297],{"class":244},[25,23446,23447],{"class":27,"line":1728},[25,23448,4105],{"class":244},[99,23450,23318],{},[99,23452,23453],{},"解释：静态成员函数也不属于类上",[159,23455,7784],{},{"title":20,"searchDepth":39,"depth":39,"links":23457},[23458,23464],{"id":14755,"depth":39,"text":14756,"children":23459},[23460,23461,23462,23463],{"id":14759,"depth":51,"text":14760},{"id":15484,"depth":51,"text":15485},{"id":15656,"depth":51,"text":15657},{"id":16115,"depth":51,"text":16116},{"id":18487,"depth":39,"text":18488,"children":23465},[23466,23467,23468,23469,23470,23471,23472,23473,23474],{"id":18499,"depth":51,"text":18500},{"id":18792,"depth":51,"text":18793},{"id":19283,"depth":51,"text":19284},{"id":20380,"depth":51,"text":20381},{"id":20803,"depth":51,"text":20804},{"id":21282,"depth":51,"text":21283},{"id":21657,"depth":51,"text":21658},{"id":22070,"depth":51,"text":22071},{"id":23007,"depth":51,"text":23008},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14720,"description":23475},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23482,"title":233,"body":23483,"description":164,"extension":165,"meta":23487,"navigation":167,"path":23489,"seo":23490,"stem":23491,"__hash__":23492},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23484,"toc":23485},[],{"title":20,"searchDepth":39,"depth":39,"links":23486},[],{"category":23488},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":233,"description":164},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23494,"title":23495,"body":23496,"description":20,"extension":165,"meta":24085,"navigation":167,"path":24086,"seo":24087,"stem":24088,"__hash__":24089},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23497,"toc":24067},[23498,23501,23505,23508,23511,23514,23532,23537,23540,23543,23546,23549,23554,23557,23562,23565,23568,23572,23575,23578,23584,23587,23605,23609,23613,23616,23621,23624,23628,23631,23644,23647,23651,23654,23657,23660,23685,23688,23697,23708,23723,23755,23759,23766,23774,23778,23781,23784,23789,23793,23796,23799,23804,23807,23811,23814,23817,23822,23825,23829,23834,23838,23905,23909,23912,23915,23918,23921,23924,23930,23949,23952,23966,23975,23979,23982,23985,23990,23993,23998,24003,24006,24009,24014,24019,24022,24027,24032,24035,24040,24045,24048,24051,24056,24059,24064],[10,23499,23495],{"id":23500},"_1强化学习基本认识",[182,23502,23504],{"id":23503},"_11什么是强化学习","1.1.什么是强化学习",[99,23506,23507],{},"强化学习有两部分组成：智能体和环境；",[99,23509,23510],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[99,23512,23513],{},"强化学习与监督学习的区别:",[194,23515,23516,23519,23522,23525],{},[106,23517,23518],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[106,23520,23521],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[106,23523,23524],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[106,23526,23527,23528,23531],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[392,23529,23530],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[99,23533,23534],{},[155,23535],{"alt":20,"src":23536},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[99,23538,23539],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[99,23541,23542],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[99,23544,23545],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[99,23547,23548],{},"获取奖励",[99,23550,23551],{},[155,23552],{"alt":20,"src":23553},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[99,23555,23556],{},"强化学习可以分成标准强化学习和深度强化学习",[99,23558,23559],{},[155,23560],{"alt":20,"src":23561},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[99,23563,23564],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[99,23566,23567],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[182,23569,23571],{"id":23570},"_12强化学习应用场景","1.2.强化学习应用场景",[99,23573,23574],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[99,23576,23577],{},"具身智能中的应用",[99,23579,23580,23583],{},[392,23581,23582],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[99,23585,23586],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[99,23588,23589,23590,23593,23594,23597,23598,23601,23602],{},"机器人是",[392,23591,23592],{},"躯体","，深度学习是",[392,23595,23596],{},"神经元****网络","，VLA是",[392,23599,23600],{},"通用的行为逻辑","，而强化学习是",[392,23603,23604],{},"教练",[182,23606,23608],{"id":23607},"_13序列决策","1.3.序列决策",[210,23610,23612],{"id":23611},"_131智能体与环境","1.3.1.智能体与环境",[99,23614,23615],{},"强化学习研究的问题是智能体agent与环境交互的问题",[99,23617,23618],{},[155,23619],{"alt":20,"src":23620},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[99,23622,23623],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[210,23625,23627],{"id":23626},"_132奖励","1.3.2.奖励",[99,23629,23630],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[99,23632,23633,23634,23643],{},"取某个策略的表现如何。强化学习的目的就是",[392,23635,23636,23637,23642],{},"最大化",[392,23638,23639],{},[392,23640,23641],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[99,23645,23646],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[210,23648,23650],{"id":23649},"_133序列决策","1.3.3.序列决策",[99,23652,23653],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[99,23655,23656],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[99,23658,23659],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[99,23661,23662,23666,23667,23669,23670,23672,23673,23675,23676,13905,23679,13905,23682],{},[23663,23664,23665],"em",{},"Ht"," = ",[23663,23668,839],{},"1*, a",[23663,23671,460],{},", r",[23663,23674,460],{},", . . . ,* ",[23663,23677,23678],{},"ot",[23663,23680,23681],{},", at ,",[23663,23683,23684],{},"rt",[99,23686,23687],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[99,23689,23690,23666,23693,1769,23695,672],{},[23663,23691,23692],{},"st",[23663,23694,296],{},[23663,23696,23665],{},[99,23698,23699,23700,23703,23704,23707],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[392,23701,23702],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[392,23705,23706],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[99,23709,23710,23711,23714,23715,23718,23719,23722],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[392,23712,23713],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[392,23716,23717],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23663,23720,23721],{},"S, A, T, R, Ω, O, γ",")。",[99,23724,23725,23726,23728,23729,23731,23732,245,23734,23737,23738,23740,23741,245,23744,23747,23748,23750,23751,23754],{},"其中 ",[23663,23727,932],{}," 表示状态空间，为隐变量，",[23663,23730,475],{}," 为动作空间，",[23663,23733,957],{},[23663,23735,23736],{},"s ′ |s, a",") 为状态转移概率，",[23663,23739,907],{}," 为奖励函数，",[23663,23742,23743],{},"Ω",[23663,23745,23746],{},"o|s, a",") 为观测概率，",[23663,23749,833],{}," 为观测空间，",[23663,23752,23753],{},"γ"," 为折扣因子。",[182,23756,23758],{"id":23757},"_14动作空间","1.4.动作空间",[99,23760,23761,23762,23765],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[392,23763,23764],{},"动作空间"," ，动作空间分为:",[194,23767,23768,23771],{},[106,23769,23770],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[106,23772,23773],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[182,23775,23777],{"id":23776},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[99,23779,23780],{},"由策略、价值函数、模型三部分组成",[99,23782,23783],{},"这三者组成马尔可夫决策过程",[99,23785,23786],{},[155,23787],{"alt":20,"src":23788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[210,23790,23792],{"id":23791},"_151策略","1.5.1.策略",[99,23794,23795],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[99,23797,23798],{},"策略可分为两种：",[99,23800,23801],{},[155,23802],{"alt":20,"src":23803},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[99,23805,23806],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[210,23808,23810],{"id":23809},"_152价值函数","1.5.2.价值函数",[99,23812,23813],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[99,23815,23816],{},"价值函数中有一个折扣因子，类似于存款利息",[99,23818,23819],{},[155,23820],{"alt":20,"src":23821},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[99,23823,23824],{},"进入某个状态采取的最优动作可以通过Q函数得到",[210,23826,23828],{"id":23827},"_153模型","1.5.3.模型",[99,23830,23831],{},[155,23832],{"alt":20,"src":23833},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[182,23835,23837],{"id":23836},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[380,23839,23840,23851],{},[383,23841,23842],{},[386,23843,23844,23848],{},[389,23845,23847],{"align":23846},"left","类型",[389,23849,23850],{"align":23846},"特点",[427,23852,23853,23863,23873,23883,23895],{},[386,23854,23855,23860],{},[432,23856,23857],{"align":23846},[392,23858,23859],{},"基于价值的智能体",[432,23861,23862],{"align":23846},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[386,23864,23865,23870],{},[432,23866,23867],{"align":23846},[392,23868,23869],{},"基于策略的智能体",[432,23871,23872],{"align":23846},"直接学习策略，没有学习价值函数",[386,23874,23875,23880],{},[432,23876,23877],{"align":23846},[392,23878,23879],{},"演员-评论员智能体",[432,23881,23882],{"align":23846},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[386,23884,23885,23890],{},[432,23886,23887],{"align":23846},[392,23888,23889],{},"有模型强化学习智能体",[432,23891,23892],{"align":23846},[155,23893],{"alt":20,"src":23894},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[386,23896,23897,23902],{},[432,23898,23899],{"align":23846},[392,23900,23901],{},"免模型强化学习智能体",[432,23903,23904],{"align":23846},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[182,23906,23908],{"id":23907},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[99,23910,23911],{},"学习和规划是序列决策的两个基本问题",[99,23913,23914],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[99,23916,23917],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[99,23919,23920],{},"强化学习用到的库：Gym",[99,23922,23923],{},"Gym可以检验强化学习算法的优劣",[99,23925,23926,23929],{},[392,23927,23928],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[15,23931,23933],{"className":17,"code":23932,"language":19,"meta":20,"style":20},"pip install gym==0.25.2\n",[22,23934,23935],{"__ignoreMap":20},[25,23936,23937,23940,23943,23946],{"class":27,"line":28},[25,23938,23939],{"class":31},"pip",[25,23941,23942],{"class":45}," install",[25,23944,23945],{"class":45}," gym==",[25,23947,23948],{"class":35},"0.25.2\n",[99,23950,23951],{},"显示图形界面需要",[15,23953,23955],{"className":17,"code":23954,"language":19,"meta":20,"style":20},"pip install pygame\n",[22,23956,23957],{"__ignoreMap":20},[25,23958,23959,23961,23963],{"class":27,"line":28},[25,23960,23939],{"class":31},[25,23962,23942],{"class":45},[25,23964,23965],{"class":45}," pygame\n",[99,23967,23968,23969],{},"有关Gym库的相关文档介绍：",[481,23970,23974],{"href":23971,"rel":23972},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23973],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[182,23976,23978],{"id":23977},"_18一些补充基础概念","1.8.一些补充基础概念",[99,23980,23981],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[99,23983,23984],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[99,23986,23987],{},[155,23988],{"alt":20,"src":23989},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[99,23991,23992],{},"折扣率需要自己来设定",[99,23994,23995],{},[155,23996],{"alt":20,"src":23997},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[194,23999,24000],{},[106,24001,24002],{},"状态转移函数：",[99,24004,24005],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[99,24007,24008],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[99,24010,24011],{},[155,24012],{"alt":20,"src":24013},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[194,24015,24016],{"start":39},[106,24017,24018],{},"动作价值函数：",[99,24020,24021],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[99,24023,24024],{},[155,24025],{"alt":20,"src":24026},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[194,24028,24029],{"start":51},[106,24030,24031],{},"最优动作价值函数：",[99,24033,24034],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[99,24036,24037],{},[155,24038],{"alt":20,"src":24039},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[194,24041,24042],{"start":59},[106,24043,24044],{},"状态价值函数:",[99,24046,24047],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[99,24049,24050],{},"它衡量的是“一个具体动作”的长期价值",[99,24052,24053],{},[155,24054],{"alt":20,"src":24055},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[99,24057,24058],{},"几个价值函数之间的比较：",[99,24060,24061],{},[155,24062],{"alt":20,"src":24063},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[159,24065,24066],{},"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":20,"searchDepth":39,"depth":39,"links":24068},[24069,24070,24071,24076,24077,24082,24083,24084],{"id":23503,"depth":39,"text":23504},{"id":23570,"depth":39,"text":23571},{"id":23607,"depth":39,"text":23608,"children":24072},[24073,24074,24075],{"id":23611,"depth":51,"text":23612},{"id":23626,"depth":51,"text":23627},{"id":23649,"depth":51,"text":23650},{"id":23757,"depth":39,"text":23758},{"id":23776,"depth":39,"text":23777,"children":24078},[24079,24080,24081],{"id":23791,"depth":51,"text":23792},{"id":23809,"depth":51,"text":23810},{"id":23827,"depth":51,"text":23828},{"id":23836,"depth":39,"text":23837},{"id":23907,"depth":39,"text":23908},{"id":23977,"depth":39,"text":23978},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23495,"description":20},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24091,"title":24092,"body":24093,"description":24100,"extension":165,"meta":24111,"navigation":167,"path":24112,"seo":24113,"stem":24114,"__hash__":24115},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24094,"toc":24109},[24095,24098,24101,24106],[10,24096,24092],{"id":24097},"_2马尔可夫决策过程",[99,24099,24100],{},"这是强化学习的基本框架",[99,24102,24103],{},[155,24104],{"alt":20,"src":24105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[99,24107,24108],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":20,"searchDepth":39,"depth":39,"links":24110},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24092,"description":24100},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24117,"title":24118,"body":24119,"description":20,"extension":165,"meta":24235,"navigation":167,"path":24236,"seo":24237,"stem":24238,"__hash__":24239},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24120,"toc":24230},[24121,24124,24128,24131,24136,24141,24144,24149,24152,24157,24160,24164,24169,24172,24177,24182,24187,24190,24194,24199,24202,24207,24212,24217,24222,24225],[10,24122,24118],{"id":24123},"_3动作价值函数",[182,24125,24127],{"id":24126},"_31dqn","3.1.DQN",[99,24129,24130],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[99,24132,24133],{},[155,24134],{"alt":20,"src":24135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[99,24137,24138],{},[155,24139],{"alt":20,"src":24140},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[99,24142,24143],{},"DQN算法的描述：",[99,24145,24146],{},[155,24147],{"alt":20,"src":24148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[99,24150,24151],{},"这里的Dense指的是全连接层",[99,24153,24154],{},[155,24155],{"alt":20,"src":24156},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[99,24158,24159],{},"当前观测的状态为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算法",[182,24161,24163],{"id":24162},"_32dqn的举例","3.2.DQN的举例",[99,24165,24166],{},[155,24167],{"alt":20,"src":24168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[99,24170,24171],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[99,24173,24174],{},[155,24175],{"alt":20,"src":24176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[99,24178,24179],{},[155,24180],{"alt":20,"src":24181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[99,24183,24184],{},[155,24185],{"alt":20,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[99,24188,24189],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[182,24191,24193],{"id":24192},"_33td算法","3.3.TD算法",[99,24195,24196],{},[155,24197],{"alt":20,"src":24198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[99,24200,24201],{},"强化学习TD算法公式的粗略解释：",[99,24203,24204],{},[155,24205],{"alt":20,"src":24206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[99,24208,24209],{},[155,24210],{"alt":20,"src":24211},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[99,24213,24214],{},[155,24215],{"alt":20,"src":24216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[99,24218,24219],{},[155,24220],{"alt":20,"src":24221},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[99,24223,24224],{},"TD算法总结：",[99,24226,24227],{},[155,24228],{"alt":20,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":20,"searchDepth":39,"depth":39,"links":24231},[24232,24233,24234],{"id":24126,"depth":39,"text":24127},{"id":24162,"depth":39,"text":24163},{"id":24192,"depth":39,"text":24193},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24118,"description":20},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24241,"title":24242,"body":24243,"description":20,"extension":165,"meta":24476,"navigation":167,"path":24477,"seo":24478,"stem":24479,"__hash__":24480},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24244,"toc":24472},[24245,24248,24252,24255,24258,24263,24268,24271,24276,24281,24284,24289,24292,24297,24300,24305,24308,24313,24316,24321,24326,24329,24334,24337,24340,24345,24348,24353,24358,24362,24365,24368,24373,24378,24381,24386,24391,24394,24399,24402,24405,24410,24413,24418,24421,24426,24431,24434,24439,24444,24447,24452,24455,24460,24463],[10,24246,24242],{"id":24247},"_4策略学习",[182,24249,24251],{"id":24250},"_41概念描述","4.1.概念描述",[99,24253,24254],{},"用神经网络（策略网络）近似策略函数",[99,24256,24257],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[99,24259,24260],{},[155,24261],{"alt":20,"src":24262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[99,24264,24265],{},[155,24266],{"alt":20,"src":24267},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[99,24269,24270],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[99,24272,24273],{},[155,24274],{"alt":20,"src":24275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[99,24277,24278],{},[155,24279],{"alt":20,"src":24280},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[99,24282,24283],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[99,24285,24286],{},[155,24287],{"alt":20,"src":24288},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[99,24290,24291],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[99,24293,24294],{},[155,24295],{"alt":20,"src":24296},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[99,24298,24299],{},"改进theta要用到策略梯度算法",[99,24301,24302],{},[155,24303],{"alt":20,"src":24304},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[99,24306,24307],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[99,24309,24310],{},[155,24311],{"alt":20,"src":24312},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[99,24314,24315],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[99,24317,24318],{},[155,24319],{"alt":20,"src":24320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[99,24322,24323],{},[155,24324],{"alt":20,"src":24325},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[99,24327,24328],{},"梯度公式总结：",[99,24330,24331],{},[155,24332],{"alt":20,"src":24333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[99,24335,24336],{},"两个公式的分别应用场景：",[99,24338,24339],{},"对于离散的动作：",[99,24341,24342],{},[155,24343],{"alt":20,"src":24344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[99,24346,24347],{},"对于连续的动作：",[99,24349,24350],{},[155,24351],{"alt":20,"src":24352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[99,24354,24355],{},[155,24356],{"alt":20,"src":24357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[182,24359,24361],{"id":24360},"_42概率梯度算法总结","4.2.概率梯度算法总结",[99,24363,24364],{},"使用蒙特卡洛来近似计算策略梯度",[99,24366,24367],{},"蒙特卡洛法的解释如下：",[99,24369,24370],{},[155,24371],{"alt":20,"src":24372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[99,24374,24375],{},[155,24376],{"alt":20,"src":24377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[99,24379,24380],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[194,24382,24383],{},[106,24384,24385],{},"方法一：reinforce算法",[99,24387,24388],{},[155,24389],{"alt":20,"src":24390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[99,24392,24393],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[194,24395,24396],{"start":39},[106,24397,24398],{},"方法二：actor-critic算法",[99,24400,24401],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[99,24403,24404],{},"两个网络的构建：",[99,24406,24407],{},[155,24408],{"alt":20,"src":24409},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[99,24411,24412],{},"actor网路：",[99,24414,24415],{},[155,24416],{"alt":20,"src":24417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[99,24419,24420],{},"critic网络",[99,24422,24423],{},[155,24424],{"alt":20,"src":24425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[194,24427,24428],{"start":51},[106,24429,24430],{},"网络的训练",[99,24432,24433],{},"网络描述",[99,24435,24436],{},[155,24437],{"alt":20,"src":24438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[99,24440,24441],{},[155,24442],{"alt":20,"src":24443},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[99,24445,24446],{},"TD算法更新梯度：",[99,24448,24449],{},[155,24450],{"alt":20,"src":24451},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[99,24453,24454],{},"策略网络更新梯度：",[99,24456,24457],{},[155,24458],{"alt":20,"src":24459},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[99,24461,24462],{},"训练整个流程的具体描述：",[99,24464,24465,24468,24469],{},[155,24466],{"alt":20,"src":24467},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[155,24470],{"alt":20,"src":24471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":20,"searchDepth":39,"depth":39,"links":24473},[24474,24475],{"id":24250,"depth":39,"text":24251},{"id":24360,"depth":39,"text":24361},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24242,"description":20},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24482,"title":24483,"body":24484,"description":24491,"extension":165,"meta":24541,"navigation":167,"path":24542,"seo":24543,"stem":24544,"__hash__":24545},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24485,"toc":24537},[24486,24489,24492,24496,24499,24504,24508,24511,24516,24519,24524,24529,24532],[10,24487,24483],{"id":24488},"_5alphago算法",[99,24490,24491],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[182,24493,24495],{"id":24494},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[99,24497,24498],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[99,24500,24501],{},[155,24502],{"alt":20,"src":24503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[182,24505,24507],{"id":24506},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[99,24509,24510],{},"采用强化学习的方式训练策略网络",[99,24512,24513],{},[155,24514],{"alt":20,"src":24515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[99,24517,24518],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[99,24520,24521],{},[155,24522],{"alt":20,"src":24523},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[99,24525,24526],{},[155,24527],{"alt":20,"src":24528},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[99,24530,24531],{},"强化学习训练策略网络的总结：",[99,24533,24534],{},[155,24535],{"alt":20,"src":24536},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":20,"searchDepth":39,"depth":39,"links":24538},[24539,24540],{"id":24494,"depth":39,"text":24495},{"id":24506,"depth":39,"text":24507},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24483,"description":24491},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24547,"title":24548,"body":24549,"description":24556,"extension":165,"meta":24559,"navigation":167,"path":24560,"seo":24561,"stem":24562,"__hash__":24563},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24550,"toc":24557},[24551,24554],[10,24552,24548],{"id":24553},"_6价值网络",[99,24555,24556],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":20,"searchDepth":39,"depth":39,"links":24558},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24548,"description":24556},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24565,"title":24566,"body":24567,"description":24571,"extension":165,"meta":24572,"navigation":167,"path":24573,"seo":24574,"stem":24575,"__hash__":24576},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24568,"toc":24569},[],{"title":20,"searchDepth":39,"depth":39,"links":24570},[],"记录自己的强化学习笔记。",{"category":23488},"\u002Fwiki\u002F2025-12-04",{"title":24566,"description":24571},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24578,"title":24579,"body":24580,"description":164,"extension":165,"meta":24619,"navigation":167,"path":24620,"seo":24621,"stem":24622,"__hash__":24623},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24581,"toc":24617},[24582,24585,24588,24594,24597,24603,24606,24611,24614],[10,24583,24579],{"id":24584},"_1-项目概览与官方资源",[99,24586,24587],{},"官方文档：",[99,24589,24590],{},[481,24591,24592],{"href":24592,"rel":24593},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23973],[99,24595,24596],{},"官方代码仓库：",[99,24598,24599],{},[481,24600,24601],{"href":24601,"rel":24602},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23973],[99,24604,24605],{},"复现大体流程：",[99,24607,24608],{},[155,24609],{"alt":20,"src":24610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[99,24612,24613],{},"本教程的目标是打通这条链路：",[99,24615,24616],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":20,"searchDepth":39,"depth":39,"links":24618},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24579,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24625,"title":24626,"body":24627,"description":164,"extension":165,"meta":24742,"navigation":167,"path":24743,"seo":24744,"stem":24745,"__hash__":24746},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24628,"toc":24737},[24629,24632,24636,24639,24646,24650,24653,24662,24671,24675,24705,24708,24734],[10,24630,24626],{"id":24631},"_2-环境准备与设备连接",[182,24633,24635],{"id":24634},"_21-系统与环境","2.1 系统与环境",[99,24637,24638],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[99,24640,24641,24642,24645],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[22,24643,24644],{},"lerobot"," 依赖。",[182,24647,24649],{"id":24648},"_22-机械臂串口识别","2.2 机械臂串口识别",[99,24651,24652],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[15,24654,24656],{"className":17,"code":24655,"language":19,"meta":20,"style":20},"lerobot-find-out\n",[22,24657,24658],{"__ignoreMap":20},[25,24659,24660],{"class":27,"line":28},[25,24661,24655],{"class":31},[99,24663,24664,24665,455,24668,139],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[22,24666,24667],{},"\u002Fdev\u002FttyACM0",[22,24669,24670],{},"\u002Fdev\u002FttyACM1",[182,24672,24674],{"id":24673},"_23-串口授权","2.3 串口授权",[15,24676,24678],{"className":17,"code":24677,"language":19,"meta":20,"style":20},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[22,24679,24680,24694],{"__ignoreMap":20},[25,24681,24682,24685,24688,24691],{"class":27,"line":28},[25,24683,24684],{"class":31},"sudo",[25,24686,24687],{"class":45}," chmod",[25,24689,24690],{"class":35}," 666",[25,24692,24693],{"class":45}," \u002Fdev\u002FttyACM0\n",[25,24695,24696,24698,24700,24702],{"class":27,"line":39},[25,24697,24684],{"class":31},[25,24699,24687],{"class":45},[25,24701,24690],{"class":35},[25,24703,24704],{"class":45}," \u002Fdev\u002FttyACM1\n",[99,24706,24707],{},"说明：",[103,24709,24710,24715,24721,24731],{},[106,24711,24712,24714],{},[22,24713,24684],{},"：以 root 权限执行命令。",[106,24716,24717,24720],{},[22,24718,24719],{},"chmod","：修改设备节点权限。",[106,24722,24723,24726,24727,24730],{},[22,24724,24725],{},"666","：",[22,24728,24729],{},"rw-rw-rw-","，所有用户可读写。",[106,24732,24733],{},"串口号必须替换为你机器上的真实端口。",[159,24735,24736],{},"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":20,"searchDepth":39,"depth":39,"links":24738},[24739,24740,24741],{"id":24634,"depth":39,"text":24635},{"id":24648,"depth":39,"text":24649},{"id":24673,"depth":39,"text":24674},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24626,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24748,"title":24749,"body":24750,"description":164,"extension":165,"meta":24910,"navigation":167,"path":24911,"seo":24912,"stem":24913,"__hash__":24914},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24751,"toc":24906},[24752,24756,24760,24766,24769,24825,24828,24832,24835,24903],[10,24753,24755],{"id":24754},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[182,24757,24759],{"id":24758},"_31-配置电机-id","3.1 配置电机 ID",[99,24761,24762,24763,24765],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[22,24764,460],{},"，需要改成机械臂链路里不冲突的编号。",[99,24767,24768],{},"方式一：用 LeRobot 命令逐步写入。",[15,24770,24772],{"className":17,"code":24771,"language":19,"meta":20,"style":20},"# 主臂舵机配置 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",[22,24773,24774,24779,24786,24793,24798,24802,24807,24813,24820],{"__ignoreMap":20},[25,24775,24776],{"class":27,"line":28},[25,24777,24778],{"class":302},"# 主臂舵机配置 ID\n",[25,24780,24781,24784],{"class":27,"line":39},[25,24782,24783],{"class":31},"lerobot-setup-motors",[25,24785,36],{"class":35},[25,24787,24788,24791],{"class":27,"line":51},[25,24789,24790],{"class":35},"  --teleop.type=so101_leader",[25,24792,36],{"class":35},[25,24794,24795],{"class":27,"line":59},[25,24796,24797],{"class":35},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[25,24799,24800],{"class":27,"line":67},[25,24801,2510],{"emptyLinePlaceholder":167},[25,24803,24804],{"class":27,"line":75},[25,24805,24806],{"class":302},"# 从臂舵机配置 ID\n",[25,24808,24809,24811],{"class":27,"line":83},[25,24810,24783],{"class":31},[25,24812,36],{"class":35},[25,24814,24815,24818],{"class":27,"line":91},[25,24816,24817],{"class":35},"  --robot.type=so101_follower",[25,24819,36],{"class":35},[25,24821,24822],{"class":27,"line":1429},[25,24823,24824],{"class":35},"  --robot.port=\u002Fdev\u002FttyACM1\n",[99,24826,24827],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[182,24829,24831],{"id":24830},"_32-机械臂校准","3.2 机械臂校准",[99,24833,24834],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[15,24836,24838],{"className":17,"code":24837,"language":19,"meta":20,"style":20},"# 主臂校准\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",[22,24839,24840,24845,24852,24858,24865,24870,24874,24879,24885,24891,24898],{"__ignoreMap":20},[25,24841,24842],{"class":27,"line":28},[25,24843,24844],{"class":302},"# 主臂校准\n",[25,24846,24847,24850],{"class":27,"line":39},[25,24848,24849],{"class":31},"lerobot-calibrate",[25,24851,36],{"class":35},[25,24853,24854,24856],{"class":27,"line":51},[25,24855,24790],{"class":35},[25,24857,36],{"class":35},[25,24859,24860,24863],{"class":27,"line":59},[25,24861,24862],{"class":35},"  --teleop.port=\u002Fdev\u002FttyACM0",[25,24864,36],{"class":35},[25,24866,24867],{"class":27,"line":67},[25,24868,24869],{"class":35},"  --teleop.id=my_awesome_leader_arm\n",[25,24871,24872],{"class":27,"line":75},[25,24873,2510],{"emptyLinePlaceholder":167},[25,24875,24876],{"class":27,"line":83},[25,24877,24878],{"class":302},"# 从臂校准\n",[25,24880,24881,24883],{"class":27,"line":91},[25,24882,24849],{"class":31},[25,24884,36],{"class":35},[25,24886,24887,24889],{"class":27,"line":1429},[25,24888,24817],{"class":35},[25,24890,36],{"class":35},[25,24892,24893,24896],{"class":27,"line":1441},[25,24894,24895],{"class":35},"  --robot.port=\u002Fdev\u002FttyACM1",[25,24897,36],{"class":35},[25,24899,24900],{"class":27,"line":1723},[25,24901,24902],{"class":35},"  --robot.id=my_awesome_follower_arm\n",[159,24904,24905],{},"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":20,"searchDepth":39,"depth":39,"links":24907},[24908,24909],{"id":24758,"depth":39,"text":24759},{"id":24830,"depth":39,"text":24831},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24749,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24916,"title":24917,"body":24918,"description":164,"extension":165,"meta":25109,"navigation":167,"path":25110,"seo":25111,"stem":25112,"__hash__":25113},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24919,"toc":25105},[24920,24923,24927,24974,24978,24991,25054,25057,25102],[10,24921,24917],{"id":24922},"_4-遥操与相机接入",[182,24924,24926],{"id":24925},"_41-不带相机遥操","4.1 不带相机遥操",[15,24928,24930],{"className":17,"code":24929,"language":19,"meta":20,"style":20},"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",[22,24931,24932,24939,24945,24951,24958,24964,24970],{"__ignoreMap":20},[25,24933,24934,24937],{"class":27,"line":28},[25,24935,24936],{"class":31},"lerobot-teleoperate",[25,24938,36],{"class":35},[25,24940,24941,24943],{"class":27,"line":39},[25,24942,24817],{"class":35},[25,24944,36],{"class":35},[25,24946,24947,24949],{"class":27,"line":51},[25,24948,24895],{"class":35},[25,24950,36],{"class":35},[25,24952,24953,24956],{"class":27,"line":59},[25,24954,24955],{"class":35},"  --robot.id=my_awesome_follower_arm",[25,24957,36],{"class":35},[25,24959,24960,24962],{"class":27,"line":67},[25,24961,24790],{"class":35},[25,24963,36],{"class":35},[25,24965,24966,24968],{"class":27,"line":75},[25,24967,24862],{"class":35},[25,24969,36],{"class":35},[25,24971,24972],{"class":27,"line":83},[25,24973,24869],{"class":35},[182,24975,24977],{"id":24976},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[15,24979,24981],{"className":17,"code":24980,"language":19,"meta":20,"style":20},"lerobot-find-cameras opencv\n",[22,24982,24983],{"__ignoreMap":20},[25,24984,24985,24988],{"class":27,"line":28},[25,24986,24987],{"class":31},"lerobot-find-cameras",[25,24989,24990],{"class":45}," opencv\n",[15,24992,24994],{"className":17,"code":24993,"language":19,"meta":20,"style":20},"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",[22,24995,24996,25002,25008,25014,25020,25030,25036,25042,25049],{"__ignoreMap":20},[25,24997,24998,25000],{"class":27,"line":28},[25,24999,24936],{"class":31},[25,25001,36],{"class":35},[25,25003,25004,25006],{"class":27,"line":39},[25,25005,24817],{"class":35},[25,25007,36],{"class":35},[25,25009,25010,25012],{"class":27,"line":51},[25,25011,24895],{"class":35},[25,25013,36],{"class":35},[25,25015,25016,25018],{"class":27,"line":59},[25,25017,24955],{"class":35},[25,25019,36],{"class":35},[25,25021,25022,25025,25028],{"class":27,"line":67},[25,25023,25024],{"class":35},"  --robot.cameras=",[25,25026,25027],{"class":45},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[25,25029,36],{"class":35},[25,25031,25032,25034],{"class":27,"line":75},[25,25033,24790],{"class":35},[25,25035,36],{"class":35},[25,25037,25038,25040],{"class":27,"line":83},[25,25039,24862],{"class":35},[25,25041,36],{"class":35},[25,25043,25044,25047],{"class":27,"line":91},[25,25045,25046],{"class":35},"  --teleop.id=my_awesome_leader_arm",[25,25048,36],{"class":35},[25,25050,25051],{"class":27,"line":1429},[25,25052,25053],{"class":35},"  --display_data=true\n",[99,25055,25056],{},"相机参数说明：",[103,25058,25059,25065,25071,25080,25090,25096],{},[106,25060,25061,25064],{},[22,25062,25063],{},"front","：相机名称。",[106,25066,25067,25070],{},[22,25068,25069],{},"type: opencv","：相机驱动类型。",[106,25072,25073,25076,25077,139],{},[22,25074,25075],{},"index_or_path","：设备编号或设备路径（如 ",[22,25078,25079],{},"\u002Fdev\u002Fvideo4",[106,25081,25082,25085,25086,25089],{},[22,25083,25084],{},"width"," \u002F ",[22,25087,25088],{},"height","：图像分辨率。",[106,25091,25092,25095],{},[22,25093,25094],{},"fps","：采样帧率。",[106,25097,25098,25101],{},[22,25099,25100],{},"--display_data=true","：启用实时可视化。",[159,25103,25104],{},"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":20,"searchDepth":39,"depth":39,"links":25106},[25107,25108],{"id":24925,"depth":39,"text":24926},{"id":24976,"depth":39,"text":24977},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24917,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25115,"title":25116,"body":25117,"description":164,"extension":165,"meta":25289,"navigation":167,"path":25290,"seo":25291,"stem":25292,"__hash__":25293},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25118,"toc":25284},[25119,25123,25127,25132,25137,25140,25182,25188,25192,25241,25246,25250,25253,25261,25266,25271,25276,25281],[10,25120,25122],{"id":25121},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[182,25124,25126],{"id":25125},"_51-生成访问令牌","5.1 生成访问令牌",[99,25128,25129],{},[155,25130],{"alt":20,"src":25131},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[99,25133,25134],{},[155,25135],{"alt":20,"src":25136},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[99,25138,25139],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[15,25141,25143],{"className":17,"code":25142,"language":19,"meta":20,"style":20},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[22,25144,25145,25158],{"__ignoreMap":20},[25,25146,25147,25150,25153,25155],{"class":27,"line":28},[25,25148,25149],{"class":240},"export",[25,25151,25152],{"class":244}," HF_TOKEN",[25,25154,290],{"class":240},[25,25156,25157],{"class":45},"\"your_huggingface_token\"\n",[25,25159,25160,25163,25166,25169,25172,25174,25177,25179],{"class":27,"line":39},[25,25161,25162],{"class":31},"hf",[25,25164,25165],{"class":45}," auth",[25,25167,25168],{"class":45}," login",[25,25170,25171],{"class":35}," --token",[25,25173,9834],{"class":45},[25,25175,25176],{"class":244},"$HF_TOKEN",[25,25178,494],{"class":45},[25,25180,25181],{"class":35}," --add-to-git-credential\n",[99,25183,25184,25187],{},[22,25185,25186],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[182,25189,25191],{"id":25190},"_52-验证登录","5.2 验证登录",[15,25193,25195],{"className":17,"code":25194,"language":19,"meta":20,"style":20},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[22,25196,25197,25228],{"__ignoreMap":20},[25,25198,25199,25202,25204,25207,25209,25211,25214,25217,25220,25223,25226],{"class":27,"line":28},[25,25200,25201],{"class":244},"HF_USER",[25,25203,290],{"class":240},[25,25205,25206],{"class":244},"$(",[25,25208,25162],{"class":31},[25,25210,25165],{"class":45},[25,25212,25213],{"class":45}," whoami",[25,25215,25216],{"class":240}," |",[25,25218,25219],{"class":31}," head",[25,25221,25222],{"class":35}," -n",[25,25224,25225],{"class":35}," 1",[25,25227,251],{"class":244},[25,25229,25230,25233,25235,25238],{"class":27,"line":39},[25,25231,25232],{"class":35},"echo",[25,25234,9834],{"class":45},[25,25236,25237],{"class":244},"$HF_USER",[25,25239,25240],{"class":45},"\"\n",[99,25242,25243],{},[155,25244],{"alt":20,"src":25245},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[182,25247,25249],{"id":25248},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[99,25251,25252],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[103,25254,25255,25258],{},[106,25256,25257],{},"Dataset Repo（用于上传演示数据）",[106,25259,25260],{},"Model Repo（用于上传训练后的 ACT 权重）",[99,25262,25263],{},[155,25264],{"alt":20,"src":25265},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[99,25267,25268],{},[155,25269],{"alt":20,"src":25270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[99,25272,25273],{},[155,25274],{"alt":20,"src":25275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[99,25277,25278],{},[155,25279],{"alt":20,"src":25280},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[159,25282,25283],{},"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":20,"searchDepth":39,"depth":39,"links":25285},[25286,25287,25288],{"id":25125,"depth":39,"text":25126},{"id":25190,"depth":39,"text":25191},{"id":25248,"depth":39,"text":25249},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25116,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25295,"title":25296,"body":25297,"description":164,"extension":165,"meta":25491,"navigation":167,"path":25492,"seo":25493,"stem":25494,"__hash__":25495},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25298,"toc":25486},[25299,25303,25307,25401,25409,25414,25418,25434,25437,25441,25484],[10,25300,25302],{"id":25301},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[182,25304,25306],{"id":25305},"_61-录制示教数据","6.1 录制示教数据",[15,25308,25310],{"className":17,"code":25309,"language":19,"meta":20,"style":20},"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",[22,25311,25312,25319,25325,25331,25337,25346,25352,25358,25364,25371,25379,25386,25396],{"__ignoreMap":20},[25,25313,25314,25317],{"class":27,"line":28},[25,25315,25316],{"class":31},"lerobot-record",[25,25318,36],{"class":35},[25,25320,25321,25323],{"class":27,"line":39},[25,25322,24817],{"class":35},[25,25324,36],{"class":35},[25,25326,25327,25329],{"class":27,"line":51},[25,25328,24895],{"class":35},[25,25330,36],{"class":35},[25,25332,25333,25335],{"class":27,"line":59},[25,25334,24955],{"class":35},[25,25336,36],{"class":35},[25,25338,25339,25341,25344],{"class":27,"line":67},[25,25340,25024],{"class":35},[25,25342,25343],{"class":45},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[25,25345,36],{"class":35},[25,25347,25348,25350],{"class":27,"line":75},[25,25349,24790],{"class":35},[25,25351,36],{"class":35},[25,25353,25354,25356],{"class":27,"line":83},[25,25355,24862],{"class":35},[25,25357,36],{"class":35},[25,25359,25360,25362],{"class":27,"line":91},[25,25361,25046],{"class":35},[25,25363,36],{"class":35},[25,25365,25366,25369],{"class":27,"line":1429},[25,25367,25368],{"class":35},"  --display_data=true",[25,25370,36],{"class":35},[25,25372,25373,25375,25377],{"class":27,"line":1441},[25,25374,42],{"class":35},[25,25376,46],{"class":45},[25,25378,36],{"class":35},[25,25380,25381,25384],{"class":27,"line":1723},[25,25382,25383],{"class":35},"  --dataset.num_episodes=10",[25,25385,36],{"class":35},[25,25387,25388,25391,25394],{"class":27,"line":1728},[25,25389,25390],{"class":35},"  --dataset.single_task=",[25,25392,25393],{"class":45},"\"Grab the green cube\"",[25,25395,36],{"class":35},[25,25397,25398],{"class":27,"line":1734},[25,25399,25400],{"class":35},"  --resume=true\n",[103,25402,25403],{},[106,25404,25405,25408],{},[22,25406,25407],{},"--resume=true","：已有同一数据集时继续追加 episode。",[99,25410,25411],{},[155,25412],{"alt":20,"src":25413},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[182,25415,25417],{"id":25416},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[15,25419,25421],{"className":17,"code":25420,"language":19,"meta":20,"style":20},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[22,25422,25423],{"__ignoreMap":20},[25,25424,25425,25428,25431],{"class":27,"line":28},[25,25426,25427],{"class":31},"rm",[25,25429,25430],{"class":35}," -rf",[25,25432,25433],{"class":45}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[99,25435,25436],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[182,25438,25440],{"id":25439},"_63-回放指定-episode","6.3 回放指定 episode",[15,25442,25444],{"className":17,"code":25443,"language":19,"meta":20,"style":20},"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",[22,25445,25446,25453,25459,25465,25471,25479],{"__ignoreMap":20},[25,25447,25448,25451],{"class":27,"line":28},[25,25449,25450],{"class":31},"lerobot-replay",[25,25452,36],{"class":35},[25,25454,25455,25457],{"class":27,"line":39},[25,25456,24817],{"class":35},[25,25458,36],{"class":35},[25,25460,25461,25463],{"class":27,"line":51},[25,25462,24895],{"class":35},[25,25464,36],{"class":35},[25,25466,25467,25469],{"class":27,"line":59},[25,25468,24955],{"class":35},[25,25470,36],{"class":35},[25,25472,25473,25475,25477],{"class":27,"line":67},[25,25474,42],{"class":35},[25,25476,46],{"class":45},[25,25478,36],{"class":35},[25,25480,25481],{"class":27,"line":75},[25,25482,25483],{"class":35},"  --dataset.episode=0\n",[159,25485,161],{},{"title":20,"searchDepth":39,"depth":39,"links":25487},[25488,25489,25490],{"id":25305,"depth":39,"text":25306},{"id":25416,"depth":39,"text":25417},{"id":25439,"depth":39,"text":25440},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25296,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":4,"title":5,"body":25497,"description":164,"extension":165,"meta":25597,"navigation":167,"path":168,"seo":25598,"stem":170,"__hash__":171},{"type":7,"value":25498,"toc":25595},[25499,25501,25555,25557,25589,25593],[10,25500,13],{"id":12},[15,25502,25503],{"className":17,"code":18,"language":19,"meta":20,"style":20},[22,25504,25505,25511,25519,25525,25531,25537,25543,25549],{"__ignoreMap":20},[25,25506,25507,25509],{"class":27,"line":28},[25,25508,32],{"class":31},[25,25510,36],{"class":35},[25,25512,25513,25515,25517],{"class":27,"line":39},[25,25514,42],{"class":35},[25,25516,46],{"class":45},[25,25518,36],{"class":35},[25,25520,25521,25523],{"class":27,"line":51},[25,25522,54],{"class":35},[25,25524,36],{"class":35},[25,25526,25527,25529],{"class":27,"line":59},[25,25528,62],{"class":35},[25,25530,36],{"class":35},[25,25532,25533,25535],{"class":27,"line":67},[25,25534,70],{"class":35},[25,25536,36],{"class":35},[25,25538,25539,25541],{"class":27,"line":75},[25,25540,78],{"class":35},[25,25542,36],{"class":35},[25,25544,25545,25547],{"class":27,"line":83},[25,25546,86],{"class":35},[25,25548,36],{"class":35},[25,25550,25551,25553],{"class":27,"line":91},[25,25552,94],{"class":35},[25,25554,97],{"class":45},[99,25556,101],{},[103,25558,25559,25563,25567,25571,25575,25581,25585],{},[106,25560,25561,111],{},[22,25562,110],{},[106,25564,25565,117],{},[22,25566,116],{},[106,25568,25569,123],{},[22,25570,122],{},[106,25572,25573,129],{},[22,25574,128],{},[106,25576,25577,135,25579,139],{},[22,25578,134],{},[22,25580,138],{},[106,25582,25583,145],{},[22,25584,144],{},[106,25586,25587,151],{},[22,25588,150],{},[99,25590,25591],{},[155,25592],{"alt":20,"src":157},[159,25594,161],{},{"title":20,"searchDepth":39,"depth":39,"links":25596},[],{},{"title":5,"description":164},{"id":25600,"title":25601,"body":25602,"description":164,"extension":165,"meta":25689,"navigation":167,"path":25690,"seo":25691,"stem":25692,"__hash__":25693},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25603,"toc":25687},[25604,25607,25610,25677,25685],[10,25605,25601],{"id":25606},"_8-策略部署与自动采集",[99,25608,25609],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[15,25611,25613],{"className":17,"code":25612,"language":19,"meta":20,"style":20},"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",[22,25614,25615,25621,25627,25633,25641,25647,25654,25662,25670],{"__ignoreMap":20},[25,25616,25617,25619],{"class":27,"line":28},[25,25618,25316],{"class":31},[25,25620,36],{"class":35},[25,25622,25623,25625],{"class":27,"line":39},[25,25624,24817],{"class":35},[25,25626,36],{"class":35},[25,25628,25629,25631],{"class":27,"line":51},[25,25630,24895],{"class":35},[25,25632,36],{"class":35},[25,25634,25635,25637,25639],{"class":27,"line":59},[25,25636,25024],{"class":35},[25,25638,25343],{"class":45},[25,25640,36],{"class":35},[25,25642,25643,25645],{"class":27,"line":67},[25,25644,24955],{"class":35},[25,25646,36],{"class":35},[25,25648,25649,25652],{"class":27,"line":75},[25,25650,25651],{"class":35},"  --display_data=false",[25,25653,36],{"class":35},[25,25655,25656,25658,25660],{"class":27,"line":83},[25,25657,42],{"class":35},[25,25659,46],{"class":45},[25,25661,36],{"class":35},[25,25663,25664,25666,25668],{"class":27,"line":91},[25,25665,25390],{"class":35},[25,25667,25393],{"class":45},[25,25669,36],{"class":35},[25,25671,25672,25675],{"class":27,"line":1429},[25,25673,25674],{"class":35},"  --policy.path=",[25,25676,97],{"class":45},[103,25678,25679],{},[106,25680,25681,25684],{},[22,25682,25683],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[159,25686,161],{},{"title":20,"searchDepth":39,"depth":39,"links":25688},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25601,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25695,"title":25696,"body":25697,"description":164,"extension":165,"meta":25726,"navigation":167,"path":25727,"seo":25728,"stem":25729,"__hash__":25730},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25698,"toc":25724},[25699,25703,25706,25712,25715,25721],[10,25700,25702],{"id":25701},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[99,25704,25705],{},"项目地址：",[99,25707,25708],{},[481,25709,25710],{"href":25710,"rel":25711},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23973],[99,25713,25714],{},"参考教程：",[99,25716,25717],{},[481,25718,25719],{"href":25719,"rel":25720},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23973],[99,25722,25723],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":20,"searchDepth":39,"depth":39,"links":25725},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25696,"description":164},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25732,"title":25733,"body":25734,"description":25738,"extension":165,"meta":25739,"navigation":167,"path":25740,"seo":25741,"stem":25742,"__hash__":25743},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25735,"toc":25736},[],{"title":20,"searchDepth":39,"depth":39,"links":25737},[],"act复现",{"category":23488},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25733,"description":25738},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25745,"title":25746,"body":25747,"description":20,"extension":165,"meta":26049,"navigation":167,"path":26050,"seo":26051,"stem":26052,"__hash__":26053},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25748,"toc":26041},[25749,25752,25756,25766,25773,25780,25783,25790,25793,25796,25800,25812,25816,25862,25865,25868,25871,25874,25877,25881,25919,25925,25929,25983,25988,25991,25994,25999,26002,26007,26010,26013,26017,26020,26023,26027],[10,25750,25746],{"id":25751},"_1简介",[210,25753,25755],{"id":25754},"_11什么是-docker","1.1什么是 Docker？",[99,25757,25758,25759,25762,25763],{},"Docker 是一个开源的 ",[392,25760,25761],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[392,25764,25765],{},"一次构建，到处运行。",[99,25767,25768,25769,25772],{},"“ ",[392,25770,25771],{},"一次构建，到处运行"," ”也就是说：",[194,25774,25775],{},[106,25776,25777],{},[392,25778,25779],{},"之前：",[99,25781,25782],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[194,25784,25785],{},[106,25786,25787],{},[392,25788,25789],{},"使用docker后：",[99,25791,25792],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[99,25794,25795],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[210,25797,25799],{"id":25798},"_12它是怎么工作的","1.2.它是怎么工作的？",[103,25801,25802,25805],{},[106,25803,25804],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[106,25806,25807,25808,25811],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[392,25809,25810],{},"无论在哪运行都一样稳定"," 。",[210,25813,25815],{"id":25814},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[380,25817,25818,25828],{},[383,25819,25820],{},[386,25821,25822,25825],{},[389,25823,25824],{"align":23846},"概念",[389,25826,25827],{"align":23846},"解释",[427,25829,25830,25838,25846,25854],{},[386,25831,25832,25835],{},[432,25833,25834],{"align":23846},"镜像",[432,25836,25837],{"align":23846},"Image，运行容器的模板，像是一个应用快照",[386,25839,25840,25843],{},[432,25841,25842],{"align":23846},"容器",[432,25844,25845],{"align":23846},"Container，运行中的镜像实例，有自己的文件系统、网络等",[386,25847,25848,25851],{},[432,25849,25850],{"align":23846},"Dockerfile",[432,25852,25853],{"align":23846},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[386,25855,25856,25859],{},[432,25857,25858],{"align":23846},"仓库",[432,25860,25861],{"align":23846},"Registry，存放镜像的地方，比如 Docker Hub",[99,25863,25864],{},"抽象化理解:",[99,25866,25867],{},"Docker镜像≈C++类",[99,25869,25870],{},"Docker容器≈C++类实例(即对象)",[99,25872,25873],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[99,25875,25876],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[210,25878,25880],{"id":25879},"_14类比理解","1.4.类比理解",[380,25882,25883,25893],{},[383,25884,25885],{},[386,25886,25887,25890],{},[389,25888,25889],{"align":23846},"传统部署",[389,25891,25892],{"align":23846},"Docker部署",[427,25894,25895,25903,25911],{},[386,25896,25897,25900],{},[432,25898,25899],{"align":23846},"手动安装依赖、调试版本不一致问题",[432,25901,25902],{"align":23846},"一次打包环境和代码",[386,25904,25905,25908],{},[432,25906,25907],{"align":23846},"程序“裸奔”跑在系统上",[432,25909,25910],{"align":23846},"程序“穿着容器”隔离运行",[386,25912,25913,25916],{},[432,25914,25915],{"align":23846},"容易“在我电脑上能跑”",[432,25917,25918],{"align":23846},"保证“无论在哪都能跑”",[99,25920,25921,25922],{},"就像快递包裹： ",[392,25923,25924],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[210,25926,25928],{"id":25927},"_15docker-的核心优势","1.5.Docker 的核心优势",[380,25930,25931,25941],{},[383,25932,25933],{},[386,25934,25935,25938],{},[389,25936,25937],{"align":23846},"优势",[389,25939,25940],{"align":23846},"说明",[427,25942,25943,25951,25959,25967,25975],{},[386,25944,25945,25948],{},[432,25946,25947],{"align":23846},"轻量级",[432,25949,25950],{"align":23846},"基于系统内核共享，启动速度快，占资源少",[386,25952,25953,25956],{},[432,25954,25955],{"align":23846},"跨平台",[432,25957,25958],{"align":23846},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[386,25960,25961,25964],{},[432,25962,25963],{"align":23846},"易于迁移部署",[432,25965,25966],{"align":23846},"应用和环境一起封装，不怕依赖不一致",[386,25968,25969,25972],{},[432,25970,25971],{"align":23846},"易于版本控制",[432,25973,25974],{"align":23846},"镜像版本可控，支持回滚",[386,25976,25977,25980],{},[432,25978,25979],{"align":23846},"生态丰富",[432,25981,25982],{"align":23846},"Docker Hub 上有成千上万的现成镜像可用",[194,25984,25985],{},[106,25986,25987],{},"在Linux上可以几乎实现无性能损失。",[99,25989,25990],{},"docker里的发行版和本机共用Linux内核。",[99,25992,25993],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[194,25995,25996],{},[106,25997,25998],{},"可以快速部署在绝大多数Linux发行版",[99,26000,26001],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[194,26003,26004],{},[106,26005,26006],{},"配置环境简单",[99,26008,26009],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[99,26011,26012],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[194,26014,26015],{},[106,26016,25979],{},[99,26018,26019],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[99,26021,26022],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[210,26024,26026],{"id":26025},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[103,26028,26029,26032,26035,26038],{},[106,26030,26031],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[106,26033,26034],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[106,26036,26037],{},"微服务架构：每个服务一个容器，灵活组合",[106,26039,26040],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":20,"searchDepth":39,"depth":39,"links":26042},[26043,26044,26045,26046,26047,26048],{"id":25754,"depth":51,"text":25755},{"id":25798,"depth":51,"text":25799},{"id":25814,"depth":51,"text":25815},{"id":25879,"depth":51,"text":25880},{"id":25927,"depth":51,"text":25928},{"id":26025,"depth":51,"text":26026},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25746,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26055,"title":26056,"body":26057,"description":20,"extension":165,"meta":26790,"navigation":167,"path":26791,"seo":26792,"stem":26793,"__hash__":26794},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26058,"toc":26785},[26059,26062,26066,26069,26072,26078,26084,26088,26097,26100,26157,26160,26211,26214,26297,26300,26337,26341,26352,26365,26372,26375,26455,26458,26508,26511,26534,26538,26545,26548,26564,26570,26573,26589,26595,26598,26614,26628,26634,26654,26660,26663,26675,26681,26684,26698,26704,26707,26727,26732,26735,26738,26742,26745,26748,26751,26758,26761,26764,26767,26772,26777,26782],[10,26060,26056],{"id":26061},"_2安装docker",[210,26063,26065],{"id":26064},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[99,26067,26068],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[99,26070,26071],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[99,26073,26074],{},[481,26075,26076],{"href":26076,"rel":26077},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23973],[99,26079,26080],{},[481,26081,26082],{"href":26082,"rel":26083},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23973],[22108,26085,26087],{"id":26086},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[99,26089,26090,26091,26096],{},"以下内容根据 ",[481,26092,26095],{"href":26093,"rel":26094},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23973],"官方文档"," 修改而来。",[99,26098,26099],{},"如果你过去安装过 docker，先删掉：",[15,26101,26103],{"className":17,"code":26102,"language":19,"meta":20,"style":20},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[22,26104,26105],{"__ignoreMap":20},[25,26106,26107,26109,26112,26115,26118,26121,26124,26127,26130,26133,26136,26139,26142,26145,26148,26151,26154],{"class":27,"line":28},[25,26108,3135],{"class":240},[25,26110,26111],{"class":244}," pkg ",[25,26113,26114],{"class":240},"in",[25,26116,26117],{"class":45}," docker.io",[25,26119,26120],{"class":45}," docker-doc",[25,26122,26123],{"class":45}," docker-compose",[25,26125,26126],{"class":45}," docker-compose-v2",[25,26128,26129],{"class":45}," podman-docker",[25,26131,26132],{"class":45}," containerd",[25,26134,26135],{"class":45}," runc",[25,26137,26138],{"class":244},"; ",[25,26140,26141],{"class":240},"do",[25,26143,26144],{"class":31}," sudo",[25,26146,26147],{"class":45}," apt-get",[25,26149,26150],{"class":45}," remove",[25,26152,26153],{"class":244}," $pkg; ",[25,26155,26156],{"class":240},"done\n",[99,26158,26159],{},"首先安装依赖和GPG：",[15,26161,26165],{"className":26162,"code":26163,"language":26164,"meta":20,"style":20},"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",[22,26166,26167,26172,26177,26182,26187,26192,26197,26201,26206],{"__ignoreMap":20},[25,26168,26169],{"class":27,"line":28},[25,26170,26171],{},"# Add Docker's official GPG key:\n",[25,26173,26174],{"class":27,"line":39},[25,26175,26176],{},"sudo apt-get update\n",[25,26178,26179],{"class":27,"line":51},[25,26180,26181],{},"sudo apt-get install ca-certificates curl\n",[25,26183,26184],{"class":27,"line":59},[25,26185,26186],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[25,26188,26189],{"class":27,"line":67},[25,26190,26191],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[25,26193,26194],{"class":27,"line":75},[25,26195,26196],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[25,26198,26199],{"class":27,"line":83},[25,26200,2510],{"emptyLinePlaceholder":167},[25,26202,26203],{"class":27,"line":91},[25,26204,26205],{},"# 如果上面这行报错就弄下面这行\n",[25,26207,26208],{"class":27,"line":1429},[25,26209,26210],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[99,26212,26213],{},"信任 Docker 的 GPG 公钥并添加仓库：",[15,26215,26217],{"className":17,"code":26216,"language":19,"meta":20,"style":20},"# 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",[22,26218,26219,26224,26230,26247,26280],{"__ignoreMap":20},[25,26220,26221],{"class":27,"line":28},[25,26222,26223],{"class":302},"# Add the repository to Apt sources:\n",[25,26225,26226,26228],{"class":27,"line":39},[25,26227,25232],{"class":35},[25,26229,36],{"class":35},[25,26231,26232,26235,26238,26241,26244],{"class":27,"line":51},[25,26233,26234],{"class":45},"  \"deb [arch=$(",[25,26236,26237],{"class":31},"dpkg",[25,26239,26240],{"class":35}," --print-architecture",[25,26242,26243],{"class":45},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[25,26245,26246],{"class":35},"\\\n",[25,26248,26249,26252,26254,26256,26259,26262,26264,26266,26269,26271,26273,26276,26278],{"class":27,"line":59},[25,26250,26251],{"class":45},"  \"",[25,26253,25206],{"class":244},[25,26255,801],{"class":35},[25,26257,26258],{"class":45}," \u002Fetc\u002Fos-release",[25,26260,26261],{"class":244}," && ",[25,26263,25232],{"class":35},[25,26265,9834],{"class":45},[25,26267,26268],{"class":244},"$VERSION_CODENAME",[25,26270,494],{"class":45},[25,26272,672],{"class":244},[25,26274,26275],{"class":45},"\" stable\"",[25,26277,25216],{"class":240},[25,26279,36],{"class":35},[25,26281,26282,26285,26288,26291,26294],{"class":27,"line":67},[25,26283,26284],{"class":31},"  sudo",[25,26286,26287],{"class":45}," tee",[25,26289,26290],{"class":45}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[25,26292,26293],{"class":240}," >",[25,26295,26296],{"class":45}," \u002Fdev\u002Fnull\n",[99,26298,26299],{},"最后安装",[15,26301,26303],{"className":17,"code":26302,"language":19,"meta":20,"style":20},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[22,26304,26305,26314],{"__ignoreMap":20},[25,26306,26307,26309,26311],{"class":27,"line":28},[25,26308,24684],{"class":31},[25,26310,26147],{"class":45},[25,26312,26313],{"class":45}," update\n",[25,26315,26316,26318,26320,26322,26325,26328,26331,26334],{"class":27,"line":39},[25,26317,24684],{"class":31},[25,26319,26147],{"class":45},[25,26321,23942],{"class":45},[25,26323,26324],{"class":45}," docker-ce",[25,26326,26327],{"class":45}," docker-ce-cli",[25,26329,26330],{"class":45}," containerd.io",[25,26332,26333],{"class":45}," docker-buildx-plugin",[25,26335,26336],{"class":45}," docker-compose-plugin\n",[22108,26338,26340],{"id":26339},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[99,26342,26343,26344,26347,26348,26351],{},"查看自己自己包管理工具版本（dnf是 ",[392,26345,26346],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[392,26349,26350],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[15,26353,26355],{"className":17,"code":26354,"language":19,"meta":20,"style":20},"dnf --version\n",[22,26356,26357],{"__ignoreMap":20},[25,26358,26359,26362],{"class":27,"line":28},[25,26360,26361],{"class":31},"dnf",[25,26363,26364],{"class":35}," --version\n",[99,26366,26090,26367,26371],{},[481,26368,26095],{"href":26369,"rel":26370},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23973]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[99,26373,26374],{},"如果你之前安装过 docker，请先删掉",[15,26376,26378],{"className":17,"code":26377,"language":19,"meta":20,"style":20},"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",[22,26379,26380,26394,26401,26408,26415,26422,26429,26436,26443,26450],{"__ignoreMap":20},[25,26381,26382,26384,26387,26389,26392],{"class":27,"line":28},[25,26383,24684],{"class":31},[25,26385,26386],{"class":45}," dnf",[25,26388,26150],{"class":45},[25,26390,26391],{"class":45}," docker",[25,26393,36],{"class":35},[25,26395,26396,26399],{"class":27,"line":39},[25,26397,26398],{"class":45},"                  docker-client",[25,26400,36],{"class":35},[25,26402,26403,26406],{"class":27,"line":51},[25,26404,26405],{"class":45},"                  docker-client-latest",[25,26407,36],{"class":35},[25,26409,26410,26413],{"class":27,"line":59},[25,26411,26412],{"class":45},"                  docker-common",[25,26414,36],{"class":35},[25,26416,26417,26420],{"class":27,"line":67},[25,26418,26419],{"class":45},"                  docker-latest",[25,26421,36],{"class":35},[25,26423,26424,26427],{"class":27,"line":75},[25,26425,26426],{"class":45},"                  docker-latest-logrotate",[25,26428,36],{"class":35},[25,26430,26431,26434],{"class":27,"line":83},[25,26432,26433],{"class":45},"                  docker-logrotate",[25,26435,36],{"class":35},[25,26437,26438,26441],{"class":27,"line":91},[25,26439,26440],{"class":45},"                  docker-selinux",[25,26442,36],{"class":35},[25,26444,26445,26448],{"class":27,"line":1429},[25,26446,26447],{"class":45},"                  docker-engine-selinux",[25,26449,36],{"class":35},[25,26451,26452],{"class":27,"line":1441},[25,26453,26454],{"class":45},"                  docker-engine\n",[99,26456,26457],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[15,26459,26461],{"className":17,"code":26460,"language":19,"meta":20,"style":20},"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",[22,26462,26463,26477,26492],{"__ignoreMap":20},[25,26464,26465,26467,26469,26472,26474],{"class":27,"line":28},[25,26466,24684],{"class":31},[25,26468,26386],{"class":45},[25,26470,26471],{"class":35}," -y",[25,26473,23942],{"class":45},[25,26475,26476],{"class":45}," dnf-plugins-core\n",[25,26478,26479,26481,26483,26486,26489],{"class":27,"line":39},[25,26480,24684],{"class":31},[25,26482,26386],{"class":45},[25,26484,26485],{"class":45}," config-manager",[25,26487,26488],{"class":45}," addrepo",[25,26490,26491],{"class":35}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[25,26493,26494,26496,26499,26502,26505],{"class":27,"line":51},[25,26495,24684],{"class":31},[25,26497,26498],{"class":45}," sed",[25,26500,26501],{"class":35}," -i",[25,26503,26504],{"class":45}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[25,26506,26507],{"class":45}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[99,26509,26510],{},"最后安装：",[15,26512,26514],{"className":17,"code":26513,"language":19,"meta":20,"style":20},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[22,26515,26516],{"__ignoreMap":20},[25,26517,26518,26520,26522,26524,26526,26528,26530,26532],{"class":27,"line":28},[25,26519,24684],{"class":31},[25,26521,26386],{"class":45},[25,26523,23942],{"class":45},[25,26525,26324],{"class":45},[25,26527,26327],{"class":45},[25,26529,26330],{"class":45},[25,26531,26333],{"class":45},[25,26533,26336],{"class":45},[210,26535,26537],{"id":26536},"_22配置环境","2.2.配置环境",[22108,26539,26541,26544],{"id":26540},"_221检查-docker-服务状态",[392,26542,26543],{},"2.2.1.检查 Docker 服务状态"," ：",[99,26546,26547],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[15,26549,26551],{"className":17,"code":26550,"language":19,"meta":20,"style":20},"systemctl status docker\n",[22,26552,26553],{"__ignoreMap":20},[25,26554,26555,26558,26561],{"class":27,"line":28},[25,26556,26557],{"class":31},"systemctl",[25,26559,26560],{"class":45}," status",[25,26562,26563],{"class":45}," docker\n",[22108,26565,26567,26544],{"id":26566},"_222启动-docker-服务",[392,26568,26569],{},"2.2.2.启动 Docker 服务",[99,26571,26572],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[15,26574,26576],{"className":17,"code":26575,"language":19,"meta":20,"style":20},"sudo systemctl start docker\n",[22,26577,26578],{"__ignoreMap":20},[25,26579,26580,26582,26585,26587],{"class":27,"line":28},[25,26581,24684],{"class":31},[25,26583,26584],{"class":45}," systemctl",[25,26586,4294],{"class":45},[25,26588,26563],{"class":45},[22108,26590,26592,26544],{"id":26591},"_223设置-docker-开机自启",[392,26593,26594],{},"2.2.3.设置 Docker 开机自启",[99,26596,26597],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[15,26599,26601],{"className":17,"code":26600,"language":19,"meta":20,"style":20},"sudo systemctl enable docker\n",[22,26602,26603],{"__ignoreMap":20},[25,26604,26605,26607,26609,26612],{"class":27,"line":28},[25,26606,24684],{"class":31},[25,26608,26584],{"class":45},[25,26610,26611],{"class":45}," enable",[25,26613,26563],{"class":45},[22108,26615,26617,13905,26620,13905,26625,26544],{"id":26616},"_224将用户添加到-docker-组",[392,26618,26619],{},"2.2.4.将用户添加到",[392,26621,26622],{},[22,26623,26624],{},"docker",[392,26626,26627],{},"组",[99,26629,26630,26631,26633],{},"使用以下命令将当前用户添加到 ",[22,26632,26624],{}," 组：",[15,26635,26637],{"className":17,"code":26636,"language":19,"meta":20,"style":20},"sudo usermod -aG docker $USER\n",[22,26638,26639],{"__ignoreMap":20},[25,26640,26641,26643,26646,26649,26651],{"class":27,"line":28},[25,26642,24684],{"class":31},[25,26644,26645],{"class":45}," usermod",[25,26647,26648],{"class":35}," -aG",[25,26650,26391],{"class":45},[25,26652,26653],{"class":244}," $USER\n",[22108,26655,26657,26544],{"id":26656},"_225退出并重新登录",[392,26658,26659],{},"2.2.5.退出并重新登录",[99,26661,26662],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[15,26664,26666],{"className":17,"code":26665,"language":19,"meta":20,"style":20},"newgrp docker\n",[22,26667,26668],{"__ignoreMap":20},[25,26669,26670,26673],{"class":27,"line":28},[25,26671,26672],{"class":31},"newgrp",[25,26674,26563],{"class":45},[22108,26676,26678,26544],{"id":26677},"_226重新启动-docker-服务如果需要",[392,26679,26680],{},"2.2.6.重新启动 Docker 服务（如果需要）",[99,26682,26683],{},"确保 Docker 服务正在运行，可以使用以下命令：",[15,26685,26686],{"className":17,"code":26575,"language":19,"meta":20,"style":20},[22,26687,26688],{"__ignoreMap":20},[25,26689,26690,26692,26694,26696],{"class":27,"line":28},[25,26691,24684],{"class":31},[25,26693,26584],{"class":45},[25,26695,4294],{"class":45},[25,26697,26563],{"class":45},[22108,26699,26701,26544],{"id":26700},"_227重启电脑后检查-docker-服务状态",[392,26702,26703],{},"2.2.7.重启电脑后检查 Docker 服务状态",[99,26705,26706],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[15,26708,26710],{"className":17,"code":26709,"language":19,"meta":20,"style":20},"sudo reboot\nsystemctl status docker\n",[22,26711,26712,26719],{"__ignoreMap":20},[25,26713,26714,26716],{"class":27,"line":28},[25,26715,24684],{"class":31},[25,26717,26718],{"class":45}," reboot\n",[25,26720,26721,26723,26725],{"class":27,"line":39},[25,26722,26557],{"class":31},[25,26724,26560],{"class":45},[25,26726,26563],{"class":45},[99,26728,26729],{},[155,26730],{"alt":20,"src":26731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[99,26733,26734],{},"第三行显示enabled说明开机自启动成功",[99,26736,26737],{},"按q退出",[210,26739,26741],{"id":26740},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[99,26743,26744],{},"优先使用linux来使用docker是比较好的",[99,26746,26747],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[99,26749,26750],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[99,26752,26753,26754],{},"官方下载安装:",[481,26755,26756],{"href":26756,"rel":26757},"https:\u002F\u002Fwww.docker.com\u002F",[23973],[99,26759,26760],{},"Windows的Docker显卡直通与USB直通:",[99,26762,26763],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[99,26765,26766],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[99,26768,26769],{},[155,26770],{"alt":20,"src":26771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[99,26773,26774],{},[155,26775],{"alt":20,"src":26776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[99,26778,26779],{},[155,26780],{"alt":20,"src":26781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[159,26783,26784],{},"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":20,"searchDepth":39,"depth":39,"links":26786},[26787,26788,26789],{"id":26064,"depth":51,"text":26065},{"id":26536,"depth":51,"text":26537},{"id":26740,"depth":51,"text":26741},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26056,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26796,"title":26797,"body":26798,"description":26805,"extension":165,"meta":27498,"navigation":167,"path":27499,"seo":27500,"stem":27501,"__hash__":27502},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26799,"toc":27492},[26800,26803,26806,26810,26815,26820,26823,26851,26856,26865,26868,26873,26877,26884,26889,26895,26899,26902,26906,26911,27003,27008,27026,27031,27052,27057,27073,27077,27082,27111,27116,27162,27167,27211,27219,27236,27241,27257,27262,27276,27279,27282,27285,27288,27317,27320,27325,27329,27332,27335,27341,27344,27347,27350,27412,27419,27424,27427,27445,27449,27452,27469,27472,27475,27489],[10,26801,26797],{"id":26802},"_3docker直通",[99,26804,26805],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[210,26807,26809],{"id":26808},"_31usb直通","3.1.USB直通",[99,26811,26812],{},[155,26813],{"alt":20,"src":26814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[194,26816,26817],{},[106,26818,26819],{},"方法一(不是很推荐新手)：",[99,26821,26822],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[15,26824,26826],{"className":17,"code":26825,"language":19,"meta":20,"style":20},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[22,26827,26828,26836,26841],{"__ignoreMap":20},[25,26829,26830,26833],{"class":27,"line":28},[25,26831,26832],{"class":31},"ls",[25,26834,26835],{"class":45}," \u002Fdev\n",[25,26837,26838],{"class":27,"line":39},[25,26839,26840],{"class":302},"#例如\n",[25,26842,26843,26846,26848],{"class":27,"line":51},[25,26844,26845],{"class":244},"--device",[25,26847,290],{"class":240},[25,26849,26850],{"class":45},"\u002Fdev\u002Ftty_USB0\n",[194,26852,26853],{"start":39},[106,26854,26855],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[15,26857,26859],{"className":17,"code":26858,"language":19,"meta":20,"style":20},"--privileged\n",[22,26860,26861],{"__ignoreMap":20},[25,26862,26863],{"class":27,"line":28},[25,26864,26858],{"class":31},[99,26866,26867],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[99,26869,26870],{},[155,26871],{"alt":20,"src":26872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[210,26874,26876],{"id":26875},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[99,26878,26879,26880,26883],{},"NVIDIA Container Toolkit使用户 ",[392,26881,26882],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[99,26885,26886],{},[155,26887],{"alt":20,"src":26888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[99,26890,26891],{},[481,26892,26893],{"href":26893,"rel":26894},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23973],[22108,26896,26898],{"id":26897},"_321安装","3.2.1.安装",[99,26900,26901],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23020,26903,26905],{"id":26904},"_3211ubuntu","3.2.1.1.Ubuntu",[194,26907,26908],{},[106,26909,26910],{},"配置存储库 并更新",[15,26912,26914],{"className":17,"code":26913,"language":19,"meta":20,"style":20},"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",[22,26915,26916,26945,26965,26977,26989,26995],{"__ignoreMap":20},[25,26917,26918,26921,26924,26927,26929,26931,26934,26937,26940,26943],{"class":27,"line":28},[25,26919,26920],{"class":31},"curl",[25,26922,26923],{"class":35}," -fsSL",[25,26925,26926],{"class":45}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[25,26928,25216],{"class":240},[25,26930,26144],{"class":31},[25,26932,26933],{"class":45}," gpg",[25,26935,26936],{"class":35}," --dearmor",[25,26938,26939],{"class":35}," -o",[25,26941,26942],{"class":45}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[25,26944,36],{"class":35},[25,26946,26947,26950,26952,26955,26958,26961,26963],{"class":27,"line":39},[25,26948,26949],{"class":244},"  && ",[25,26951,26920],{"class":31},[25,26953,26954],{"class":35}," -s",[25,26956,26957],{"class":35}," -L",[25,26959,26960],{"class":45}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[25,26962,25216],{"class":240},[25,26964,36],{"class":35},[25,26966,26967,26970,26973,26975],{"class":27,"line":51},[25,26968,26969],{"class":31},"    sed",[25,26971,26972],{"class":45}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[25,26974,25216],{"class":240},[25,26976,36],{"class":35},[25,26978,26979,26982,26984,26987],{"class":27,"line":59},[25,26980,26981],{"class":31},"    sudo",[25,26983,26287],{"class":45},[25,26985,26986],{"class":45}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[25,26988,36],{"class":35},[25,26990,26991,26993],{"class":27,"line":67},[25,26992,26949],{"class":244},[25,26994,26246],{"class":35},[25,26996,26997,26999,27001],{"class":27,"line":75},[25,26998,26981],{"class":31},[25,27000,26147],{"class":45},[25,27002,26313],{"class":45},[194,27004,27005],{"start":39},[106,27006,27007],{},"安装nvidia-docker2",[15,27009,27011],{"className":17,"code":27010,"language":19,"meta":20,"style":20},"sudo apt-get install -y nvidia-docker2\n",[22,27012,27013],{"__ignoreMap":20},[25,27014,27015,27017,27019,27021,27023],{"class":27,"line":28},[25,27016,24684],{"class":31},[25,27018,26147],{"class":45},[25,27020,23942],{"class":45},[25,27022,26471],{"class":35},[25,27024,27025],{"class":45}," nvidia-docker2\n",[194,27027,27028],{"start":51},[106,27029,27030],{},"使用nvidia-ctk命令配置container runtime",[15,27032,27034],{"className":17,"code":27033,"language":19,"meta":20,"style":20},"sudo nvidia-ctk runtime configure --runtime=docker\n",[22,27035,27036],{"__ignoreMap":20},[25,27037,27038,27040,27043,27046,27049],{"class":27,"line":28},[25,27039,24684],{"class":31},[25,27041,27042],{"class":45}," nvidia-ctk",[25,27044,27045],{"class":45}," runtime",[25,27047,27048],{"class":45}," configure",[25,27050,27051],{"class":35}," --runtime=docker\n",[194,27053,27054],{"start":59},[106,27055,27056],{},"重启docker服务:",[15,27058,27060],{"className":17,"code":27059,"language":19,"meta":20,"style":20},"sudo systemctl restart docker\n",[22,27061,27062],{"__ignoreMap":20},[25,27063,27064,27066,27068,27071],{"class":27,"line":28},[25,27065,24684],{"class":31},[25,27067,26584],{"class":45},[25,27069,27070],{"class":45}," restart",[25,27072,26563],{"class":45},[23020,27074,27076],{"id":27075},"_3212fedora","3.2.1.2.Fedora",[194,27078,27079],{},[106,27080,27081],{},"配置存储库",[15,27083,27085],{"className":17,"code":27084,"language":19,"meta":20,"style":20},"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",[22,27086,27087,27102],{"__ignoreMap":20},[25,27088,27089,27091,27093,27095,27098,27100],{"class":27,"line":28},[25,27090,26920],{"class":31},[25,27092,26954],{"class":35},[25,27094,26957],{"class":35},[25,27096,27097],{"class":45}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[25,27099,25216],{"class":240},[25,27101,36],{"class":35},[25,27103,27104,27106,27108],{"class":27,"line":39},[25,27105,24684],{"class":31},[25,27107,26287],{"class":45},[25,27109,27110],{"class":45}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[194,27112,27113],{"start":39},[106,27114,27115],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[15,27117,27119],{"className":17,"code":27118,"language":19,"meta":20,"style":20},"# 如果是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",[22,27120,27121,27126,27140,27144,27149],{"__ignoreMap":20},[25,27122,27123],{"class":27,"line":28},[25,27124,27125],{"class":302},"# 如果是RHEL或者Rocky（DNF4）\n",[25,27127,27128,27130,27132,27134,27137],{"class":27,"line":39},[25,27129,24684],{"class":31},[25,27131,26386],{"class":45},[25,27133,26485],{"class":45},[25,27135,27136],{"class":35}," --add-repo",[25,27138,27139],{"class":45}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[25,27141,27142],{"class":27,"line":51},[25,27143,2510],{"emptyLinePlaceholder":167},[25,27145,27146],{"class":27,"line":59},[25,27147,27148],{"class":302},"# 如果是Feodra41+（DNF5）\n",[25,27150,27151,27153,27155,27157,27159],{"class":27,"line":67},[25,27152,24684],{"class":31},[25,27154,26386],{"class":45},[25,27156,26485],{"class":45},[25,27158,26488],{"class":45},[25,27160,27161],{"class":35}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[194,27163,27164],{"start":51},[106,27165,27166],{},"安装NVIDIA Container Toolki包",[15,27168,27170],{"className":17,"code":27169,"language":19,"meta":20,"style":20},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[22,27171,27172,27177,27190,27194,27199],{"__ignoreMap":20},[25,27173,27174],{"class":27,"line":28},[25,27175,27176],{"class":302},"# 如果是RHEL或者Rocky\n",[25,27178,27179,27181,27183,27185,27187],{"class":27,"line":39},[25,27180,24684],{"class":31},[25,27182,26386],{"class":45},[25,27184,23942],{"class":45},[25,27186,26471],{"class":35},[25,27188,27189],{"class":45}," nvidia-container-toolkit\n",[25,27191,27192],{"class":27,"line":51},[25,27193,2510],{"emptyLinePlaceholder":167},[25,27195,27196],{"class":27,"line":59},[25,27197,27198],{"class":302},"# 如果是Fedora\n",[25,27200,27201,27203,27205,27207,27209],{"class":27,"line":67},[25,27202,24684],{"class":31},[25,27204,26386],{"class":45},[25,27206,23942],{"class":45},[25,27208,26471],{"class":35},[25,27210,27189],{"class":45},[194,27212,27213],{"start":59},[106,27214,27215,27216,27218],{},"安装nvidia-docker2 ： 在Fedora上使用",[22,27217,26361],{},"进行安装",[15,27220,27222],{"className":17,"code":27221,"language":19,"meta":20,"style":20},"sudo dnf install -y nvidia-docker2\n",[22,27223,27224],{"__ignoreMap":20},[25,27225,27226,27228,27230,27232,27234],{"class":27,"line":28},[25,27227,24684],{"class":31},[25,27229,26386],{"class":45},[25,27231,23942],{"class":45},[25,27233,26471],{"class":35},[25,27235,27025],{"class":45},[194,27237,27238],{"start":67},[106,27239,27240],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[15,27242,27243],{"className":17,"code":27033,"language":19,"meta":20,"style":20},[22,27244,27245],{"__ignoreMap":20},[25,27246,27247,27249,27251,27253,27255],{"class":27,"line":28},[25,27248,24684],{"class":31},[25,27250,27042],{"class":45},[25,27252,27045],{"class":45},[25,27254,27048],{"class":45},[25,27256,27051],{"class":35},[194,27258,27259],{"start":75},[106,27260,27261],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[15,27263,27264],{"className":17,"code":27059,"language":19,"meta":20,"style":20},[22,27265,27266],{"__ignoreMap":20},[25,27267,27268,27270,27272,27274],{"class":27,"line":28},[25,27269,24684],{"class":31},[25,27271,26584],{"class":45},[25,27273,27070],{"class":45},[25,27275,26563],{"class":45},[99,27277,27278],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[99,27280,27281],{},"方法：",[99,27283,27284],{},"1️⃣nvidia-smi",[99,27286,27287],{},"2️⃣运行nvidia cuda 容器进行测试",[15,27289,27291],{"className":17,"code":27290,"language":19,"meta":20,"style":20},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[22,27292,27293],{"__ignoreMap":20},[25,27294,27295,27297,27299,27302,27305,27308,27311,27314],{"class":27,"line":28},[25,27296,24684],{"class":31},[25,27298,26391],{"class":45},[25,27300,27301],{"class":45}," run",[25,27303,27304],{"class":35}," --rm",[25,27306,27307],{"class":35}," --gpus",[25,27309,27310],{"class":45}," all",[25,27312,27313],{"class":45}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[25,27315,27316],{"class":45}," nvidia-smi\n",[99,27318,27319],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[99,27321,27322],{},[155,27323],{"alt":20,"src":27324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[210,27326,27328],{"id":27327},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[99,27330,27331],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[99,27333,27334],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[99,27336,27337],{},[481,27338,27339],{"href":27339,"rel":27340},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23973],[99,27342,27343],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[99,27345,27346],{},"我们只需要找到对应的Docker镜像当底包即可。",[99,27348,27349],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[380,27351,27352,27368],{},[383,27353,27354],{},[386,27355,27356,27359,27362,27365],{},[389,27357,27358],{"align":23846},"镜像类型",[389,27360,27361],{"align":23846},"适用场景",[389,27363,27364],{"align":23846},"示例标签",[389,27366,27367],{"align":23846},"大小",[427,27369,27370,27384,27398],{},[386,27371,27372,27375,27378,27381],{},[432,27373,27374],{"align":23846},"base",[432,27376,27377],{"align":23846},"仅需 CUDA 运行时库",[432,27379,27380],{"align":23846},"12.4.0-base-ubuntu22.04",[432,27382,27383],{"align":23846},"~240MB",[386,27385,27386,27389,27392,27395],{},[432,27387,27388],{"align":23846},"runtime",[432,27390,27391],{"align":23846},"部署编译后的应用（含数学库）",[432,27393,27394],{"align":23846},"12.4.0-runtime-ubuntu22.04",[432,27396,27397],{"align":23846},"~2GB",[386,27399,27400,27403,27406,27409],{},[432,27401,27402],{"align":23846},"devel",[432,27404,27405],{"align":23846},"开发环境（含编译工具）",[432,27407,27408],{"align":23846},"12.4.0-devel-ubuntu22.04",[432,27410,27411],{"align":23846},"~3GB",[99,27413,27414,27415,27418],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[22,27416,27417],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[99,27420,27421],{},[155,27422],{"alt":20,"src":27423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[99,27425,27426],{},"在dockerfile里就可以开头这么写：",[15,27428,27430],{"className":17,"code":27429,"language":19,"meta":20,"style":20},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[22,27431,27432,27437],{"__ignoreMap":20},[25,27433,27434],{"class":27,"line":28},[25,27435,27436],{"class":302},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[25,27438,27439,27442],{"class":27,"line":39},[25,27440,27441],{"class":31},"FROM",[25,27443,27444],{"class":45}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[210,27446,27448],{"id":27447},"_34配置以太网","3.4.配置以太网",[99,27450,27451],{},"指定网络模式",[15,27453,27455],{"className":17,"code":27454,"language":19,"meta":20,"style":20},"--net=host \\\n",[22,27456,27457],{"__ignoreMap":20},[25,27458,27459,27462,27464,27467],{"class":27,"line":28},[25,27460,27461],{"class":244},"--net",[25,27463,290],{"class":240},[25,27465,27466],{"class":45},"host",[25,27468,36],{"class":31},[99,27470,27471],{},"启动参数里加上这行即可。具体在下方",[99,27473,27474],{},"--net选项：指定网络模式，该选项有以下参数可选：",[103,27476,27477,27480,27483,27486],{},[106,27478,27479],{},"--net=bridge:默认选项，表示连接到默认的网桥",[106,27481,27482],{},"--net=host:容器使用宿主机的网络",[106,27484,27485],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[106,27487,27488],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[159,27490,27491],{},"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":20,"searchDepth":39,"depth":39,"links":27493},[27494,27495,27496,27497],{"id":26808,"depth":51,"text":26809},{"id":26875,"depth":51,"text":26876},{"id":27327,"depth":51,"text":27328},{"id":27447,"depth":51,"text":27448},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26797,"description":26805},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27504,"title":27505,"body":27506,"description":27513,"extension":165,"meta":27519,"navigation":167,"path":27520,"seo":27521,"stem":27522,"__hash__":27523},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27507,"toc":27517},[27508,27511,27514],[10,27509,27505],{"id":27510},"_4dockerhub换源",[99,27512,27513],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[99,27515,27516],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":20,"searchDepth":39,"depth":39,"links":27518},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27505,"description":27513},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27525,"title":27526,"body":27527,"description":20,"extension":165,"meta":28539,"navigation":167,"path":28540,"seo":28541,"stem":28542,"__hash__":28543},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27528,"toc":28534},[27529,27532,27536,27542,27546,27549,27889,27892,27895,27898,27903,27908,27911,27914,27917,27920,27939,27942,27953,27959,28141,28151,28167,28430,28432,28457,28472,28481,28531],[10,27530,27526],{"id":27531},"_5docker命令学习",[210,27533,27535],{"id":27534},"_51参考文档","5.1.参考文档",[99,27537,27538],{},[481,27539,27540],{"href":27540,"rel":27541},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23973],[210,27543,27545],{"id":27544},"_52常用命令","5.2.常用命令",[99,27547,27548],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[380,27550,27551,27564],{},[383,27552,27553],{},[386,27554,27555,27558,27561],{},[389,27556,27557],{"align":23846},"命令",[389,27559,27560],{"align":23846},"描述",[389,27562,27563],{"align":23846},"示例",[427,27565,27566,27577,27588,27599,27610,27621,27632,27643,27653,27664,27675,27686,27696,27707,27718,27729,27739,27749,27759,27769,27780,27791,27802,27813,27824,27835,27845,27856,27867,27878],{},[386,27567,27568,27571,27574],{},[432,27569,27570],{"align":23846},"docker run",[432,27572,27573],{"align":23846},"创建并启动一个新的容器。",[432,27575,27576],{"align":23846},"docker run -it ubuntu bash",[386,27578,27579,27582,27585],{},[432,27580,27581],{"align":23846},"docker build",[432,27583,27584],{"align":23846},"通过指定的 Dockerfile 创建一个新的镜像。",[432,27586,27587],{"align":23846},"docker build -t myimage .",[386,27589,27590,27593,27596],{},[432,27591,27592],{"align":23846},"docker pull",[432,27594,27595],{"align":23846},"从 Docker 仓库拉取镜像。",[432,27597,27598],{"align":23846},"docker pull ubuntu",[386,27600,27601,27604,27607],{},[432,27602,27603],{"align":23846},"docker push",[432,27605,27606],{"align":23846},"将本地镜像推送到 Docker 仓库。",[432,27608,27609],{"align":23846},"docker push myimage",[386,27611,27612,27615,27618],{},[432,27613,27614],{"align":23846},"docker stop",[432,27616,27617],{"align":23846},"停止一个正在运行的容器。",[432,27619,27620],{"align":23846},"docker stop container_id",[386,27622,27623,27626,27629],{},[432,27624,27625],{"align":23846},"docker start",[432,27627,27628],{"align":23846},"启动一个已经存在的容器。",[432,27630,27631],{"align":23846},"docker start container_id",[386,27633,27634,27637,27640],{},[432,27635,27636],{"align":23846},"docker restart",[432,27638,27639],{"align":23846},"重新启动容器。",[432,27641,27642],{"align":23846},"docker restart container_id",[386,27644,27645,27648,27651],{},[432,27646,27647],{"align":23846},"docker ps",[432,27649,27650],{"align":23846},"列出当前正在运行的容器。",[432,27652,27647],{"align":23846},[386,27654,27655,27658,27661],{},[432,27656,27657],{"align":23846},"docker rm",[432,27659,27660],{"align":23846},"删除一个或多个停止的容器。",[432,27662,27663],{"align":23846},"docker rm container_id",[386,27665,27666,27669,27672],{},[432,27667,27668],{"align":23846},"docker exec",[432,27670,27671],{"align":23846},"在一个正在运行的容器中执行命令。",[432,27673,27674],{"align":23846},"docker exec -it container_id bash",[386,27676,27677,27680,27683],{},[432,27678,27679],{"align":23846},"docker logs",[432,27681,27682],{"align":23846},"查看容器的日志输出。",[432,27684,27685],{"align":23846},"docker logs container_id",[386,27687,27688,27691,27694],{},[432,27689,27690],{"align":23846},"docker images",[432,27692,27693],{"align":23846},"列出本地所有镜像。",[432,27695,27690],{"align":23846},[386,27697,27698,27701,27704],{},[432,27699,27700],{"align":23846},"docker rmi",[432,27702,27703],{"align":23846},"删除一个或多个镜像。",[432,27705,27706],{"align":23846},"docker rmi myimage",[386,27708,27709,27712,27715],{},[432,27710,27711],{"align":23846},"docker network",[432,27713,27714],{"align":23846},"管理 Docker 网络。",[432,27716,27717],{"align":23846},"docker network ls",[386,27719,27720,27723,27726],{},[432,27721,27722],{"align":23846},"docker volume",[432,27724,27725],{"align":23846},"管理 Docker 数据卷。",[432,27727,27728],{"align":23846},"docker volume ls",[386,27730,27731,27734,27737],{},[432,27732,27733],{"align":23846},"docker-compose up",[432,27735,27736],{"align":23846},"启动 docker-compose.yml 中定义的所有服务。",[432,27738,27733],{"align":23846},[386,27740,27741,27744,27747],{},[432,27742,27743],{"align":23846},"docker-compose down",[432,27745,27746],{"align":23846},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[432,27748,27743],{"align":23846},[386,27750,27751,27754,27757],{},[432,27752,27753],{"align":23846},"docker info",[432,27755,27756],{"align":23846},"显示 Docker 系统的详细信息。",[432,27758,27753],{"align":23846},[386,27760,27761,27764,27767],{},[432,27762,27763],{"align":23846},"docker stats",[432,27765,27766],{"align":23846},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[432,27768,27763],{"align":23846},[386,27770,27771,27774,27777],{},[432,27772,27773],{"align":23846},"docker inspect",[432,27775,27776],{"align":23846},"查看容器或镜像的详细信息（JSON 格式）。",[432,27778,27779],{"align":23846},"docker inspect container_id",[386,27781,27782,27785,27788],{},[432,27783,27784],{"align":23846},"docker save",[432,27786,27787],{"align":23846},"将一个镜像保存为 tar 文件。",[432,27789,27790],{"align":23846},"docker save -o myimage.tar myimage",[386,27792,27793,27796,27799],{},[432,27794,27795],{"align":23846},"docker load",[432,27797,27798],{"align":23846},"从 tar 文件中加载镜像。",[432,27800,27801],{"align":23846},"docker load -i myimage.tar",[386,27803,27804,27807,27810],{},[432,27805,27806],{"align":23846},"docker tag",[432,27808,27809],{"align":23846},"为镜像添加标签（tag）。",[432,27811,27812],{"align":23846},"docker tag myimage myimage:v1",[386,27814,27815,27818,27821],{},[432,27816,27817],{"align":23846},"docker buildx build",[432,27819,27820],{"align":23846},"使用 Buildx 构建多架构镜像。",[432,27822,27823],{"align":23846},"docker buildx build -t myimage .",[386,27825,27826,27829,27832],{},[432,27827,27828],{"align":23846},"docker buildx create",[432,27830,27831],{"align":23846},"创建一个新的 Buildx 构建实例。",[432,27833,27834],{"align":23846},"docker buildx create –use",[386,27836,27837,27840,27843],{},[432,27838,27839],{"align":23846},"docker buildx ls",[432,27841,27842],{"align":23846},"列出所有可用的 Buildx 构建实例。",[432,27844,27839],{"align":23846},[386,27846,27847,27850,27853],{},[432,27848,27849],{"align":23846},"docker buildx use",[432,27851,27852],{"align":23846},"设置当前的 Buildx 构建实例。",[432,27854,27855],{"align":23846},"docker buildx use mybuilder",[386,27857,27858,27861,27864],{},[432,27859,27860],{"align":23846},"docker buildx bake",[432,27862,27863],{"align":23846},"使用 Bake 文件批量构建镜像。",[432,27865,27866],{"align":23846},"docker buildx bake -f bake.hcl",[386,27868,27869,27872,27875],{},[432,27870,27871],{"align":23846},"docker buildx build –push",[432,27873,27874],{"align":23846},"构建镜像并推送到镜像仓库。",[432,27876,27877],{"align":23846},"docker buildx build –push -t myimage .",[386,27879,27880,27883,27886],{},[432,27881,27882],{"align":23846},"docker buildx build –platform",[432,27884,27885],{"align":23846},"构建镜像并为多个平台生成支持。",[432,27887,27888],{"align":23846},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[99,27890,27891],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[99,27893,27894],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[99,27896,27897],{},"docker images 可以查看已经下载的镜像",[99,27899,27900],{},[155,27901],{"alt":20,"src":27902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[99,27904,27905],{},[392,27906,27907],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[99,27909,27910],{},"docker rmi $(docker images -q) 删除所有的镜像",[99,27912,27913],{},"docker container logs 查看容器日志",[99,27915,27916],{},"docker top 查看容器里的进程",[99,27918,27919],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[15,27921,27923],{"className":17,"code":27922,"language":19,"meta":20,"style":20},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[22,27924,27925],{"__ignoreMap":20},[25,27926,27927,27930,27933,27936],{"class":27,"line":28},[25,27928,27929],{"class":31},"如：docker",[25,27931,27932],{"class":45}," cp",[25,27934,27935],{"class":45}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[25,27937,27938],{"class":45}," \u002Fmydata\u002Fnginx\n",[99,27940,27941],{},"docker run时在启动容器的时候会有几个常用的选项：",[103,27943,27944,27947,27950],{},[106,27945,27946],{},"-d选项：表示后台运行",[106,27948,27949],{},"-P选项：随机端口映射",[106,27951,27952],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[210,27954,27956],{"id":27955},"_53run命令的参数非常重要",[392,27957,27958],{},"5.3.run命令的参数（非常重要）",[380,27960,27961,27974],{},[383,27962,27963],{},[386,27964,27965,27968,27971],{},[389,27966,27967],{"align":23846},"参数\u002F配置",[389,27969,27970],{"align":23846},"功能说明",[389,27972,27973],{"align":23846},"重要性与参考依据",[427,27975,27976,27987,27998,28009,28020,28031,28042,28053,28064,28075,28086,28097,28108,28119,28130],{},[386,27977,27978,27981,27984],{},[432,27979,27980],{"align":23846},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[432,27982,27983],{"align":23846},"指定容器名称，便于后续管理",[432,27985,27986],{"align":23846},"替代随机生成的容器名。",[386,27988,27989,27992,27995],{},[432,27990,27991],{"align":23846},"–gpus all",[432,27993,27994],{"align":23846},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[432,27996,27997],{"align":23846},"用于CUDA加速等GPU依赖任务。",[386,27999,28000,28003,28006],{},[432,28001,28002],{"align":23846},"-e NVIDIA_DRIVER_CAPABILITIES=all",[432,28004,28005],{"align":23846},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[432,28007,28008],{"align":23846},"确保容器内GPU功能完整67。",[386,28010,28011,28014,28017],{},[432,28012,28013],{"align":23846},"-dit",[432,28015,28016],{"align":23846},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[432,28018,28019],{"align":23846},"允许容器在后台运行并支持交互操作。",[386,28021,28022,28025,28028],{},[432,28023,28024],{"align":23846},"–privileged",[432,28026,28027],{"align":23846},"赋予容器完全主机权限（可访问设备、内核模块等）",[432,28029,28030],{"align":23846},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[386,28032,28033,28036,28039],{},[432,28034,28035],{"align":23846},"–net=host",[432,28037,28038],{"align":23846},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[432,28040,28041],{"align":23846},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[386,28043,28044,28047,28050],{},[432,28045,28046],{"align":23846},"–group-add audio–group-add video–group-add dialout",[432,28048,28049],{"align":23846},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[432,28051,28052],{"align":23846},"避免权限问题（如避免无法调用摄像头、麦克风）。",[386,28054,28055,28058,28061],{},[432,28056,28057],{"align":23846},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[432,28059,28060],{"align":23846},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[432,28062,28063],{"align":23846},"支持容器内运行图形界面应用（如OpenCV可视化）。",[386,28065,28066,28069,28072],{},[432,28067,28068],{"align":23846},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[432,28070,28071],{"align":23846},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[432,28073,28074],{"align":23846},"实现容器内图形显示。",[386,28076,28077,28080,28083],{},[432,28078,28079],{"align":23846},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[432,28081,28082],{"align":23846},"挂载X11认证文件（只读）",[432,28084,28085],{"align":23846},"确保容器有权连接宿主机显示服务。",[386,28087,28088,28091,28094],{},[432,28089,28090],{"align":23846},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[432,28092,28093],{"align":23846},"挂载Wayland显示协议相关目录",[432,28095,28096],{"align":23846},"支持Wayland协议的图形显示。",[386,28098,28099,28102,28105],{},[432,28100,28101],{"align":23846},"–ulimit nofile=1024:524288",[432,28103,28104],{"align":23846},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[432,28106,28107],{"align":23846},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[386,28109,28110,28113,28116],{},[432,28111,28112],{"align":23846},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[432,28114,28115],{"align":23846},"挂载宿主机用户目录到容器内同名路径",[432,28117,28118],{"align":23846},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[386,28120,28121,28124,28127],{},[432,28122,28123],{"align":23846},"-w \u002Fhome\u002Ftungchiahui",[432,28125,28126],{"align":23846},"设置容器启动后的默认工作目录",[432,28128,28129],{"align":23846},"直接进入项目路径，方便执行命令2324。",[386,28131,28132,28135,28138],{},[432,28133,28134],{"align":23846},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[432,28136,28137],{"align":23846},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[432,28139,28140],{"align":23846},"提供预配置的深度学习与机器人开发环境。",[99,28142,28143,28144,28146,28147,28150],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[22,28145,24684],{},"加不加",[22,28148,28149],{},"sudo -E","都无所谓。",[99,28152,28153,28154,28156,28157,28159,28160,28163,28164,28166],{},"用户已经被加到docker组了，不用",[22,28155,24684],{},"也行跑，其次，",[22,28158,24684],{},"运行的话，你的",[22,28161,28162],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[22,28165,28162],{},"更不可能变了。",[15,28168,28170],{"className":17,"code":28169,"language":19,"meta":20,"style":20},"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",[22,28171,28172,28185,28195,28205,28217,28224,28231,28238,28248,28257,28266,28280,28292,28304,28313,28323,28332,28347,28380,28407,28418,28425],{"__ignoreMap":20},[25,28173,28174,28176,28178,28180,28183],{"class":27,"line":28},[25,28175,24684],{"class":31},[25,28177,26391],{"class":45},[25,28179,27301],{"class":45},[25,28181,28182],{"class":35}," --name=ros_opencv_cuda",[25,28184,36],{"class":35},[25,28186,28187,28190,28193],{"class":27,"line":39},[25,28188,28189],{"class":244},"--gpus ",[25,28191,28192],{"class":45},"all",[25,28194,36],{"class":35},[25,28196,28197,28200,28203],{"class":27,"line":51},[25,28198,28199],{"class":244},"-e ",[25,28201,28202],{"class":45},"NVIDIA_DRIVER_CAPABILITIES=all",[25,28204,36],{"class":35},[25,28206,28207,28209,28212,28215],{"class":27,"line":59},[25,28208,28199],{"class":244},[25,28210,28211],{"class":45},"DISPLAY=",[25,28213,28214],{"class":244},"$DISPLAY ",[25,28216,26246],{"class":35},[25,28218,28219,28222],{"class":27,"line":67},[25,28220,28221],{"class":244},"-dit ",[25,28223,26246],{"class":35},[25,28225,28226,28229],{"class":27,"line":75},[25,28227,28228],{"class":244},"--privileged ",[25,28230,26246],{"class":35},[25,28232,28233,28236],{"class":27,"line":83},[25,28234,28235],{"class":244},"--net=host ",[25,28237,26246],{"class":35},[25,28239,28240,28243,28246],{"class":27,"line":91},[25,28241,28242],{"class":244},"--group-add ",[25,28244,28245],{"class":45},"audio",[25,28247,36],{"class":35},[25,28249,28250,28252,28255],{"class":27,"line":1429},[25,28251,28242],{"class":244},[25,28253,28254],{"class":45},"video",[25,28256,36],{"class":35},[25,28258,28259,28261,28264],{"class":27,"line":1441},[25,28260,28242],{"class":244},[25,28262,28263],{"class":45},"dialout",[25,28265,36],{"class":35},[25,28267,28268,28270,28273,28275,28278],{"class":27,"line":1723},[25,28269,28199],{"class":244},[25,28271,28272],{"class":45},"XAUTHORITY=",[25,28274,28162],{"class":244},[25,28276,28277],{"class":45},"\u002F.Xauthority",[25,28279,36],{"class":35},[25,28281,28282,28284,28287,28290],{"class":27,"line":1728},[25,28283,28199],{"class":244},[25,28285,28286],{"class":45},"WAYLAND_DISPLAY=",[25,28288,28289],{"class":244},"$WAYLAND_DISPLAY ",[25,28291,26246],{"class":35},[25,28293,28294,28296,28299,28302],{"class":27,"line":1734},[25,28295,28199],{"class":244},[25,28297,28298],{"class":45},"XDG_RUNTIME_DIR=",[25,28300,28301],{"class":244},"$XDG_RUNTIME_DIR ",[25,28303,26246],{"class":35},[25,28305,28306,28308,28311],{"class":27,"line":1739},[25,28307,28199],{"class":244},[25,28309,28310],{"class":45},"QT_QPA_PLATFORM=xcb",[25,28312,36],{"class":35},[25,28314,28315,28318,28321],{"class":27,"line":1753},[25,28316,28317],{"class":244},"-v ",[25,28319,28320],{"class":45},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[25,28322,36],{"class":35},[25,28324,28325,28327,28330],{"class":27,"line":1758},[25,28326,28317],{"class":244},[25,28328,28329],{"class":45},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[25,28331,36],{"class":35},[25,28333,28334,28337,28340,28342,28345],{"class":27,"line":1764},[25,28335,28336],{"class":244},"-v $HOME",[25,28338,28339],{"class":45},"\u002F.Xauthority:",[25,28341,28162],{"class":244},[25,28343,28344],{"class":45},"\u002F.Xauthority:ro",[25,28346,36],{"class":35},[25,28348,28349,28351,28354,28356,28359,28362,28364,28367,28369,28371,28373,28375,28378],{"class":27,"line":1785},[25,28350,28317],{"class":244},[25,28352,28353],{"class":45},"\u002Frun\u002Fuser\u002F",[25,28355,25206],{"class":244},[25,28357,28358],{"class":31},"id",[25,28360,28361],{"class":35}," -u",[25,28363,672],{"class":244},[25,28365,28366],{"class":45},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[25,28368,25206],{"class":244},[25,28370,28358],{"class":31},[25,28372,28361],{"class":35},[25,28374,672],{"class":244},[25,28376,28377],{"class":45},"\u002Fwayland-0",[25,28379,36],{"class":35},[25,28381,28382,28384,28386,28388,28390,28392,28394,28397,28399,28401,28403,28405],{"class":27,"line":1790},[25,28383,28317],{"class":244},[25,28385,28353],{"class":45},[25,28387,25206],{"class":244},[25,28389,28358],{"class":31},[25,28391,28361],{"class":35},[25,28393,672],{"class":244},[25,28395,28396],{"class":45},":\u002Frun\u002Fuser\u002F",[25,28398,25206],{"class":244},[25,28400,28358],{"class":31},[25,28402,28361],{"class":35},[25,28404,13824],{"class":244},[25,28406,26246],{"class":35},[25,28408,28409,28411,28413,28416],{"class":27,"line":1804},[25,28410,28336],{"class":244},[25,28412,1102],{"class":45},[25,28414,28415],{"class":244},"$HOME ",[25,28417,26246],{"class":35},[25,28419,28420,28423],{"class":27,"line":1809},[25,28421,28422],{"class":244},"-w $HOME ",[25,28424,26246],{"class":35},[25,28426,28427],{"class":27,"line":1838},[25,28428,28429],{"class":244},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[99,28431,9135],{},[194,28433,28434,28442,28445,28448],{},[106,28435,28436,13905,28438,28441],{},[22,28437,28202],{},[22,28439,28440],{},"--gpus all","没有英伟达显卡请注释。",[106,28443,28444],{},"--name后面请自己为容器起名。",[106,28446,28447],{},"最后一行仓库名称请你自己找对应的镜像填上。",[106,28449,28450,28451,28456],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23663,28452,28453],{},[392,28454,28455],{},"请不要加","。",[15,28458,28460],{"className":17,"code":28459,"language":19,"meta":20,"style":20},"--ulimit nofile=1024:524288 \\\n",[22,28461,28462],{"__ignoreMap":20},[25,28463,28464,28467,28470],{"class":27,"line":28},[25,28465,28466],{"class":31},"--ulimit",[25,28468,28469],{"class":45}," nofile=1024:524288",[25,28471,36],{"class":35},[99,28473,28474,28475,28480],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23663,28476,28477],{},[392,28478,28479],{},"不建议","**.**",[15,28482,28484],{"className":17,"code":28483,"language":19,"meta":20,"style":20},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[22,28485,28486,28513,28522],{"__ignoreMap":20},[25,28487,28488,28491,28494,28496,28498,28500,28502,28504,28506,28509,28511],{"class":27,"line":28},[25,28489,28490],{"class":31},"--user",[25,28492,28493],{"class":244}," $(",[25,28495,28358],{"class":31},[25,28497,28361],{"class":35},[25,28499,672],{"class":244},[25,28501,1102],{"class":45},[25,28503,25206],{"class":244},[25,28505,28358],{"class":31},[25,28507,28508],{"class":35}," -g",[25,28510,13824],{"class":244},[25,28512,26246],{"class":35},[25,28514,28515,28517,28520],{"class":27,"line":39},[25,28516,28317],{"class":244},[25,28518,28519],{"class":45},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[25,28521,36],{"class":35},[25,28523,28524,28526,28529],{"class":27,"line":51},[25,28525,28317],{"class":244},[25,28527,28528],{"class":45},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[25,28530,36],{"class":35},[159,28532,28533],{},"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":20,"searchDepth":39,"depth":39,"links":28535},[28536,28537,28538],{"id":27534,"depth":51,"text":27535},{"id":27544,"depth":51,"text":27545},{"id":27955,"depth":51,"text":27958},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27526,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28545,"title":28546,"body":28547,"description":20,"extension":165,"meta":30170,"navigation":167,"path":30171,"seo":30172,"stem":30173,"__hash__":30174},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28548,"toc":30165},[28549,28552,28556,28559,28781,28785,28789,28792,28898,28903,28906,28911,28914,28919,28922,28927,28930,28942,28945,28950,28957,28985,28992,29068,29073,29076,29099,29101,29176,29181,29184,29188,29196,29201,29206,29210,29221,29227,29230,29233,29257,29260,29263,29291,29294,29297,29762,29765,29770,29775,29779,29802,29807,29811,29815,29818,29821,29824,29851,29854,29857,29875,29878,29881,29903,29911,29916,29921,29925,29928,29931,29934,29937,29982,29985,30003,30006,30011,30014,30035,30038,30094,30097,30102,30106,30109,30116,30119,30122,30127,30130,30146,30149,30162],[10,28550,28546],{"id":28551},"_6手动创建docker镜像",[210,28553,28555],{"id":28554},"_61dockerfile","6.1.DockerFile",[99,28557,28558],{},"常用命令：",[380,28560,28561,28572],{},[383,28562,28563],{},[386,28564,28565,28568,28570],{},[389,28566,28567],{"align":23846},"指令",[389,28569,25940],{"align":23846},[389,28571,27563],{"align":23846},[427,28573,28574,28584,28600,28611,28622,28633,28644,28655,28666,28680,28694,28705,28719,28730,28741,28755,28770],{},[386,28575,28576,28578,28581],{},[432,28577,27441],{"align":23846},[432,28579,28580],{"align":23846},"指定基础镜像，是 Dockerfile 的起点",[432,28582,28583],{"align":23846},"FROM ubuntu:22.04",[386,28585,28586,28589,28592],{},[432,28587,28588],{"align":23846},"LABEL",[432,28590,28591],{"align":23846},"添加元数据（如作者、版本等）",[432,28593,28594,28595,28599],{"align":23846},"LABEL maintainer=”",[481,28596,28598],{"href":28597},"mailto:you@example.com","you@example.com","”",[386,28601,28602,28605,28608],{},[432,28603,28604],{"align":23846},"ENV",[432,28606,28607],{"align":23846},"设置环境变量",[432,28609,28610],{"align":23846},"ENV PORT=8080",[386,28612,28613,28616,28619],{},[432,28614,28615],{"align":23846},"ARG",[432,28617,28618],{"align":23846},"构建参数，只在构建期间可用",[432,28620,28621],{"align":23846},"ARG VERSION=1.0",[386,28623,28624,28627,28630],{},[432,28625,28626],{"align":23846},"RUN",[432,28628,28629],{"align":23846},"构建镜像时运行命令",[432,28631,28632],{"align":23846},"RUN apt-get update && apt-get install -y curl",[386,28634,28635,28638,28641],{},[432,28636,28637],{"align":23846},"COPY",[432,28639,28640],{"align":23846},"复制文件到镜像中",[432,28642,28643],{"align":23846},"COPY . \u002Fapp",[386,28645,28646,28649,28652],{},[432,28647,28648],{"align":23846},"ADD",[432,28650,28651],{"align":23846},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[432,28653,28654],{"align":23846},"ADD archive.tar.gz \u002Fdata\u002F",[386,28656,28657,28660,28663],{},[432,28658,28659],{"align":23846},"WORKDIR",[432,28661,28662],{"align":23846},"设置工作目录",[432,28664,28665],{"align":23846},"WORKDIR \u002Fopt",[386,28667,28668,28671,28674],{},[432,28669,28670],{"align":23846},"CMD",[432,28672,28673],{"align":23846},"设置容器启动时默认命令（可被 docker run 覆盖）",[432,28675,28676,28677],{"align":23846},"CMD ",[25,28678,28679],{},"“node”, “index.js”",[386,28681,28682,28685,28688],{},[432,28683,28684],{"align":23846},"ENTRYPOINT",[432,28686,28687],{"align":23846},"设置容器启动时固定命令（通常用于 CLI 工具等）",[432,28689,28690,28691],{"align":23846},"ENTRYPOINT ",[25,28692,28693],{},"“python3”",[386,28695,28696,28699,28702],{},[432,28697,28698],{"align":23846},"EXPOSE",[432,28700,28701],{"align":23846},"声明镜像内服务监听的端口（不会自动映射）",[432,28703,28704],{"align":23846},"EXPOSE 80",[386,28706,28707,28710,28713],{},[432,28708,28709],{"align":23846},"VOLUME",[432,28711,28712],{"align":23846},"声明数据卷挂载点",[432,28714,28715,28716],{"align":23846},"VOLUME ",[25,28717,28718],{},"“\u002Fdata”",[386,28720,28721,28724,28727],{},[432,28722,28723],{"align":23846},"USER",[432,28725,28726],{"align":23846},"设置后续命令执行的用户",[432,28728,28729],{"align":23846},"USER appuser",[386,28731,28732,28735,28738],{},[432,28733,28734],{"align":23846},"ONBUILD",[432,28736,28737],{"align":23846},"当镜像作为其他镜像基础镜像时触发的构建指令",[432,28739,28740],{"align":23846},"ONBUILD COPY . \u002Fsrc",[386,28742,28743,28746,28749],{},[432,28744,28745],{"align":23846},"SHELL",[432,28747,28748],{"align":23846},"更改默认 shell，比如将 sh -c 改为 bash -c",[432,28750,28751,28752],{"align":23846},"SHELL ",[25,28753,28754],{},"“\u002Fbin\u002Fbash”, “-c”",[386,28756,28757,28760,28763],{},[432,28758,28759],{"align":23846},"HEALTHCHECK",[432,28761,28762],{"align":23846},"定义容器运行时的健康检查命令",[432,28764,28765,28766],{"align":23846},"`HEALTHCHECK CMD curl –fail ",[481,28767,28768],{"href":28768,"rel":28769},"http:\u002F\u002Flocalhost:8080",[23973],[386,28771,28772,28775,28778],{},[432,28773,28774],{"align":23846},"STOPSIGNAL",[432,28776,28777],{"align":23846},"容器停止时发送的信号",[432,28779,28780],{"align":23846},"STOPSIGNAL SIGKILL",[210,28782,28784],{"id":28783},"_62自己创建容器","6.2.自己创建容器",[22108,28786,28788],{"id":28787},"_621手动创建","6.2.1.手动创建",[99,28790,28791],{},"在x86电脑上编译x86的：",[15,28793,28795],{"className":17,"code":28794,"language":19,"meta":20,"style":20},"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",[22,28796,28797,28813,28817,28830,28834,28847,28851,28864,28868,28881,28885],{"__ignoreMap":20},[25,28798,28799,28801,28804,28807,28810],{"class":27,"line":28},[25,28800,26624],{"class":31},[25,28802,28803],{"class":45}," build",[25,28805,28806],{"class":35}," -t",[25,28808,28809],{"class":45}," ros-melodic-cuda118-cudnn8-bionic:latest",[25,28811,28812],{"class":45}," .\n",[25,28814,28815],{"class":27,"line":39},[25,28816,2510],{"emptyLinePlaceholder":167},[25,28818,28819,28821,28823,28825,28828],{"class":27,"line":51},[25,28820,26624],{"class":31},[25,28822,28803],{"class":45},[25,28824,28806],{"class":35},[25,28826,28827],{"class":45}," ros-noetic-focal:latest",[25,28829,28812],{"class":45},[25,28831,28832],{"class":27,"line":59},[25,28833,2510],{"emptyLinePlaceholder":167},[25,28835,28836,28838,28840,28842,28845],{"class":27,"line":67},[25,28837,26624],{"class":31},[25,28839,28803],{"class":45},[25,28841,28806],{"class":35},[25,28843,28844],{"class":45}," ros-humble-jammy:latest",[25,28846,28812],{"class":45},[25,28848,28849],{"class":27,"line":75},[25,28850,2510],{"emptyLinePlaceholder":167},[25,28852,28853,28855,28857,28859,28862],{"class":27,"line":83},[25,28854,26624],{"class":31},[25,28856,28803],{"class":45},[25,28858,28806],{"class":35},[25,28860,28861],{"class":45}," ros-jazzy-noble:latest",[25,28863,28812],{"class":45},[25,28865,28866],{"class":27,"line":91},[25,28867,2510],{"emptyLinePlaceholder":167},[25,28869,28870,28872,28874,28876,28879],{"class":27,"line":1429},[25,28871,26624],{"class":31},[25,28873,28803],{"class":45},[25,28875,28806],{"class":35},[25,28877,28878],{"class":45}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[25,28880,28812],{"class":45},[25,28882,28883],{"class":27,"line":1441},[25,28884,2510],{"emptyLinePlaceholder":167},[25,28886,28887,28889,28891,28893,28896],{"class":27,"line":1723},[25,28888,26624],{"class":31},[25,28890,28803],{"class":45},[25,28892,28806],{"class":35},[25,28894,28895],{"class":45}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[25,28897,28812],{"class":45},[99,28899,28900],{},[155,28901],{"alt":20,"src":28902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[99,28904,28905],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[99,28907,28908],{},[155,28909],{"alt":20,"src":28910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[99,28912,28913],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[194,28915,28916],{},[106,28917,28918],{},"创建 Docker Hub 账户",[99,28920,28921],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[194,28923,28924],{"start":39},[106,28925,28926],{},"登录 Docker Hub",[99,28928,28929],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[15,28931,28933],{"className":17,"code":28932,"language":19,"meta":20,"style":20},"docker login\n",[22,28934,28935],{"__ignoreMap":20},[25,28936,28937,28939],{"class":27,"line":28},[25,28938,26624],{"class":31},[25,28940,28941],{"class":45}," login\n",[99,28943,28944],{},"输入你的 Docker Hub 用户名和密码进行验证。",[194,28946,28947],{},[106,28948,28949],{},"为你的镜像打标签",[99,28951,28952,28953,28956],{},"Docker Hub 使用 ",[22,28954,28955],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[15,28958,28960],{"className":17,"code":28959,"language":19,"meta":20,"style":20},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[22,28961,28962],{"__ignoreMap":20},[25,28963,28964,28966,28969,28971,28974,28977,28980,28982],{"class":27,"line":28},[25,28965,26624],{"class":31},[25,28967,28968],{"class":45}," tag",[25,28970,28861],{"class":45},[25,28972,28973],{"class":240}," \u003C",[25,28975,28976],{"class":45},"你的用户",[25,28978,28979],{"class":244},"名",[25,28981,1203],{"class":240},[25,28983,28984],{"class":45},"\u002Fros-jazzy-noble:latest\n",[99,28986,28987,28988,28991],{},"例如，如果你的 Docker Hub 用户名是 ",[22,28989,28990],{},"tungchiahui","，你应该执行：",[15,28993,28995],{"className":17,"code":28994,"language":19,"meta":20,"style":20},"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",[22,28996,28997,29008,29012,29023,29027,29038,29042,29053,29057],{"__ignoreMap":20},[25,28998,28999,29001,29003,29005],{"class":27,"line":28},[25,29000,26624],{"class":31},[25,29002,28968],{"class":45},[25,29004,28827],{"class":45},[25,29006,29007],{"class":45}," tungchiahui\u002Fros-noetic-focal:latest\n",[25,29009,29010],{"class":27,"line":39},[25,29011,2510],{"emptyLinePlaceholder":167},[25,29013,29014,29016,29018,29020],{"class":27,"line":51},[25,29015,26624],{"class":31},[25,29017,28968],{"class":45},[25,29019,28844],{"class":45},[25,29021,29022],{"class":45}," tungchiahui\u002Fros-humble-jammy:latest\n",[25,29024,29025],{"class":27,"line":59},[25,29026,2510],{"emptyLinePlaceholder":167},[25,29028,29029,29031,29033,29035],{"class":27,"line":67},[25,29030,26624],{"class":31},[25,29032,28968],{"class":45},[25,29034,28861],{"class":45},[25,29036,29037],{"class":45}," tungchiahui\u002Fros-jazzy-noble:latest\n",[25,29039,29040],{"class":27,"line":75},[25,29041,2510],{"emptyLinePlaceholder":167},[25,29043,29044,29046,29048,29050],{"class":27,"line":83},[25,29045,26624],{"class":31},[25,29047,28968],{"class":45},[25,29049,28878],{"class":45},[25,29051,29052],{"class":45}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[25,29054,29055],{"class":27,"line":91},[25,29056,2510],{"emptyLinePlaceholder":167},[25,29058,29059,29061,29063,29065],{"class":27,"line":1429},[25,29060,26624],{"class":31},[25,29062,28968],{"class":45},[25,29064,28895],{"class":45},[25,29066,29067],{"class":45}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[194,29069,29070],{"start":39},[106,29071,29072],{},"推送镜像到 Docker Hub",[99,29074,29075],{},"使用以下命令将镜像推送到 Docker Hub：",[15,29077,29079],{"className":17,"code":29078,"language":19,"meta":20,"style":20},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[22,29080,29081],{"__ignoreMap":20},[25,29082,29083,29085,29088,29090,29092,29094,29096],{"class":27,"line":28},[25,29084,26624],{"class":31},[25,29086,29087],{"class":45}," push",[25,29089,28973],{"class":240},[25,29091,28976],{"class":45},[25,29093,28979],{"class":244},[25,29095,1203],{"class":240},[25,29097,29098],{"class":45},"\u002Fros-noetic-jazzy-noble:latest\n",[99,29100,14743],{},[15,29102,29104],{"className":17,"code":29103,"language":19,"meta":20,"style":20},"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",[22,29105,29106,29114,29118,29126,29130,29138,29142,29151,29155,29163,29167],{"__ignoreMap":20},[25,29107,29108,29110,29112],{"class":27,"line":28},[25,29109,26624],{"class":31},[25,29111,29087],{"class":45},[25,29113,29007],{"class":45},[25,29115,29116],{"class":27,"line":39},[25,29117,2510],{"emptyLinePlaceholder":167},[25,29119,29120,29122,29124],{"class":27,"line":51},[25,29121,26624],{"class":31},[25,29123,29087],{"class":45},[25,29125,29022],{"class":45},[25,29127,29128],{"class":27,"line":59},[25,29129,2510],{"emptyLinePlaceholder":167},[25,29131,29132,29134,29136],{"class":27,"line":67},[25,29133,26624],{"class":31},[25,29135,29087],{"class":45},[25,29137,29037],{"class":45},[25,29139,29140],{"class":27,"line":75},[25,29141,2510],{"emptyLinePlaceholder":167},[25,29143,29144,29146,29148],{"class":27,"line":83},[25,29145,26624],{"class":31},[25,29147,29087],{"class":45},[25,29149,29150],{"class":45}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[25,29152,29153],{"class":27,"line":91},[25,29154,2510],{"emptyLinePlaceholder":167},[25,29156,29157,29159,29161],{"class":27,"line":1429},[25,29158,26624],{"class":31},[25,29160,29087],{"class":45},[25,29162,29067],{"class":45},[25,29164,29165],{"class":27,"line":1441},[25,29166,2510],{"emptyLinePlaceholder":167},[25,29168,29169,29171,29173],{"class":27,"line":1723},[25,29170,26624],{"class":31},[25,29172,29087],{"class":45},[25,29174,29175],{"class":45}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[194,29177,29178],{"start":51},[106,29179,29180],{},"验证推送成功",[99,29182,29183],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[99,29185,29186],{},[392,29187,3894],{},[103,29189,29190,29193],{},[106,29191,29192],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[106,29194,29195],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[99,29197,29198],{},[155,29199],{"alt":20,"src":29200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[99,29202,29203],{},[155,29204],{"alt":20,"src":29205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22108,29207,29209],{"id":29208},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[99,29211,29212,29213,29216,29217,29220],{},"如果您想在 ",[392,29214,29215],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[392,29218,29219],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[99,29222,29223,29224],{},"1. ",[392,29225,29226],{},"启用 Docker 跨平台构建",[99,29228,29229],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[99,29231,29232],{},"第一步：启用 buildx（只需执行一次）",[15,29234,29236],{"className":17,"code":29235,"language":19,"meta":20,"style":20},"docker buildx create --name multiarch_builder --use\n",[22,29237,29238],{"__ignoreMap":20},[25,29239,29240,29242,29245,29248,29251,29254],{"class":27,"line":28},[25,29241,26624],{"class":31},[25,29243,29244],{"class":45}," buildx",[25,29246,29247],{"class":45}," create",[25,29249,29250],{"class":35}," --name",[25,29252,29253],{"class":45}," multiarch_builder",[25,29255,29256],{"class":35}," --use\n",[99,29258,29259],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[99,29261,29262],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[15,29264,29266],{"className":17,"code":29265,"language":19,"meta":20,"style":20},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[22,29267,29268],{"__ignoreMap":20},[25,29269,29270,29272,29274,29276,29279,29282,29285,29288],{"class":27,"line":28},[25,29271,26624],{"class":31},[25,29273,27301],{"class":45},[25,29275,27304],{"class":35},[25,29277,29278],{"class":35}," --privileged",[25,29280,29281],{"class":45}," multiarch\u002Fqemu-user-static",[25,29283,29284],{"class":35}," --reset",[25,29286,29287],{"class":35}," -p",[25,29289,29290],{"class":45}," yes\n",[99,29292,29293],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[99,29295,29296],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[15,29298,29300],{"className":17,"code":29299,"language":19,"meta":20,"style":20},"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",[22,29301,29302,29344,29348,29353,29363,29373,29382,29388,29392,29396,29406,29414,29423,29429,29433,29437,29447,29455,29464,29470,29474,29478,29488,29496,29505,29511,29515,29519,29529,29537,29546,29552,29556,29560,29570,29578,29587,29593,29597,29601,29611,29619,29628,29634,29638,29642,29652,29660,29669,29675,29679,29683,29693,29701,29710,29716,29720,29724,29735,29743,29752,29758],{"__ignoreMap":20},[25,29303,29304,29306,29308,29310,29313,29316,29318,29320,29323,29325,29327,29329,29331,29334,29337,29339,29342],{"class":27,"line":28},[25,29305,26624],{"class":31},[25,29307,29244],{"class":45},[25,29309,28803],{"class":45},[25,29311,29312],{"class":35}," --platform",[25,29314,29315],{"class":45}," linux\u002Famd64,linux\u002Farm64",[25,29317,28806],{"class":35},[25,29319,28973],{"class":240},[25,29321,29322],{"class":45},"你的镜像",[25,29324,28979],{"class":244},[25,29326,1203],{"class":240},[25,29328,1102],{"class":45},[25,29330,1153],{"class":240},[25,29332,29333],{"class":45},"标",[25,29335,29336],{"class":244},"签",[25,29338,1203],{"class":240},[25,29340,29341],{"class":35}," --push",[25,29343,28812],{"class":45},[25,29345,29346],{"class":27,"line":39},[25,29347,2510],{"emptyLinePlaceholder":167},[25,29349,29350],{"class":27,"line":51},[25,29351,29352],{"class":302},"# 例子：\n",[25,29354,29355,29357,29359,29361],{"class":27,"line":59},[25,29356,26624],{"class":31},[25,29358,29244],{"class":45},[25,29360,28803],{"class":45},[25,29362,36],{"class":35},[25,29364,29365,29368,29371],{"class":27,"line":67},[25,29366,29367],{"class":244},"--platform ",[25,29369,29370],{"class":45},"linux\u002Famd64,linux\u002Farm64",[25,29372,36],{"class":35},[25,29374,29375,29377,29380],{"class":27,"line":75},[25,29376,28806],{"class":35},[25,29378,29379],{"class":45}," tungchiahui\u002Fros:noetic-focal",[25,29381,36],{"class":35},[25,29383,29384,29386],{"class":27,"line":83},[25,29385,29341],{"class":35},[25,29387,36],{"class":35},[25,29389,29390],{"class":27,"line":91},[25,29391,28812],{"class":45},[25,29393,29394],{"class":27,"line":1429},[25,29395,2510],{"emptyLinePlaceholder":167},[25,29397,29398,29400,29402,29404],{"class":27,"line":1441},[25,29399,26624],{"class":31},[25,29401,29244],{"class":45},[25,29403,28803],{"class":45},[25,29405,36],{"class":35},[25,29407,29408,29410,29412],{"class":27,"line":1723},[25,29409,29367],{"class":244},[25,29411,29370],{"class":45},[25,29413,36],{"class":35},[25,29415,29416,29418,29421],{"class":27,"line":1728},[25,29417,28806],{"class":35},[25,29419,29420],{"class":45}," tungchiahui\u002Fros:humble-jammy",[25,29422,36],{"class":35},[25,29424,29425,29427],{"class":27,"line":1734},[25,29426,29341],{"class":35},[25,29428,36],{"class":35},[25,29430,29431],{"class":27,"line":1739},[25,29432,28812],{"class":45},[25,29434,29435],{"class":27,"line":1753},[25,29436,2510],{"emptyLinePlaceholder":167},[25,29438,29439,29441,29443,29445],{"class":27,"line":1758},[25,29440,26624],{"class":31},[25,29442,29244],{"class":45},[25,29444,28803],{"class":45},[25,29446,36],{"class":35},[25,29448,29449,29451,29453],{"class":27,"line":1764},[25,29450,29367],{"class":244},[25,29452,29370],{"class":45},[25,29454,36],{"class":35},[25,29456,29457,29459,29462],{"class":27,"line":1785},[25,29458,28806],{"class":35},[25,29460,29461],{"class":45}," tungchiahui\u002Fros:jazzy-noble",[25,29463,36],{"class":35},[25,29465,29466,29468],{"class":27,"line":1790},[25,29467,29341],{"class":35},[25,29469,36],{"class":35},[25,29471,29472],{"class":27,"line":1804},[25,29473,28812],{"class":45},[25,29475,29476],{"class":27,"line":1809},[25,29477,2510],{"emptyLinePlaceholder":167},[25,29479,29480,29482,29484,29486],{"class":27,"line":1838},[25,29481,26391],{"class":31},[25,29483,29244],{"class":45},[25,29485,28803],{"class":45},[25,29487,36],{"class":35},[25,29489,29490,29492,29494],{"class":27,"line":1843},[25,29491,29367],{"class":244},[25,29493,29370],{"class":45},[25,29495,36],{"class":35},[25,29497,29498,29500,29503],{"class":27,"line":1860},[25,29499,28806],{"class":35},[25,29501,29502],{"class":45}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[25,29504,36],{"class":35},[25,29506,29507,29509],{"class":27,"line":1865},[25,29508,29341],{"class":35},[25,29510,36],{"class":35},[25,29512,29513],{"class":27,"line":1870},[25,29514,28812],{"class":45},[25,29516,29517],{"class":27,"line":1875},[25,29518,2510],{"emptyLinePlaceholder":167},[25,29520,29521,29523,29525,29527],{"class":27,"line":1889},[25,29522,26624],{"class":31},[25,29524,29244],{"class":45},[25,29526,28803],{"class":45},[25,29528,36],{"class":35},[25,29530,29531,29533,29535],{"class":27,"line":1894},[25,29532,29367],{"class":244},[25,29534,29370],{"class":45},[25,29536,36],{"class":35},[25,29538,29539,29541,29544],{"class":27,"line":2687},[25,29540,28806],{"class":35},[25,29542,29543],{"class":45}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[25,29545,36],{"class":35},[25,29547,29548,29550],{"class":27,"line":2701},[25,29549,29341],{"class":35},[25,29551,36],{"class":35},[25,29553,29554],{"class":27,"line":2709},[25,29555,28812],{"class":45},[25,29557,29558],{"class":27,"line":2714},[25,29559,2510],{"emptyLinePlaceholder":167},[25,29561,29562,29564,29566,29568],{"class":27,"line":2720},[25,29563,26391],{"class":31},[25,29565,29244],{"class":45},[25,29567,28803],{"class":45},[25,29569,36],{"class":35},[25,29571,29572,29574,29576],{"class":27,"line":2726},[25,29573,29367],{"class":244},[25,29575,29370],{"class":45},[25,29577,36],{"class":35},[25,29579,29580,29582,29585],{"class":27,"line":2731},[25,29581,28806],{"class":35},[25,29583,29584],{"class":45}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[25,29586,36],{"class":35},[25,29588,29589,29591],{"class":27,"line":8058},[25,29590,29341],{"class":35},[25,29592,36],{"class":35},[25,29594,29595],{"class":27,"line":8082},[25,29596,28812],{"class":45},[25,29598,29599],{"class":27,"line":8087},[25,29600,2510],{"emptyLinePlaceholder":167},[25,29602,29603,29605,29607,29609],{"class":27,"line":8093},[25,29604,26624],{"class":31},[25,29606,29244],{"class":45},[25,29608,28803],{"class":45},[25,29610,36],{"class":35},[25,29612,29613,29615,29617],{"class":27,"line":8120},[25,29614,29367],{"class":244},[25,29616,29370],{"class":45},[25,29618,36],{"class":35},[25,29620,29621,29623,29626],{"class":27,"line":8125},[25,29622,28806],{"class":35},[25,29624,29625],{"class":45}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[25,29627,36],{"class":35},[25,29629,29630,29632],{"class":27,"line":8131},[25,29631,29341],{"class":35},[25,29633,36],{"class":35},[25,29635,29636],{"class":27,"line":8143},[25,29637,28812],{"class":45},[25,29639,29640],{"class":27,"line":8155},[25,29641,2510],{"emptyLinePlaceholder":167},[25,29643,29644,29646,29648,29650],{"class":27,"line":8167},[25,29645,26624],{"class":31},[25,29647,29244],{"class":45},[25,29649,28803],{"class":45},[25,29651,36],{"class":35},[25,29653,29654,29656,29658],{"class":27,"line":9826},[25,29655,29367],{"class":244},[25,29657,29370],{"class":45},[25,29659,36],{"class":35},[25,29661,29662,29664,29667],{"class":27,"line":9851},[25,29663,28806],{"class":35},[25,29665,29666],{"class":45}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[25,29668,36],{"class":35},[25,29670,29671,29673],{"class":27,"line":9874},[25,29672,29341],{"class":35},[25,29674,36],{"class":35},[25,29676,29677],{"class":27,"line":9898},[25,29678,28812],{"class":45},[25,29680,29681],{"class":27,"line":9903},[25,29682,2510],{"emptyLinePlaceholder":167},[25,29684,29685,29687,29689,29691],{"class":27,"line":9908},[25,29686,26391],{"class":31},[25,29688,29244],{"class":45},[25,29690,28803],{"class":45},[25,29692,36],{"class":35},[25,29694,29695,29697,29699],{"class":27,"line":9913},[25,29696,29367],{"class":244},[25,29698,29370],{"class":45},[25,29700,36],{"class":35},[25,29702,29703,29705,29708],{"class":27,"line":9922},[25,29704,28806],{"class":35},[25,29706,29707],{"class":45}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[25,29709,36],{"class":35},[25,29711,29712,29714],{"class":27,"line":9927},[25,29713,29341],{"class":35},[25,29715,36],{"class":35},[25,29717,29718],{"class":27,"line":9933},[25,29719,28812],{"class":45},[25,29721,29722],{"class":27,"line":9954},[25,29723,2510],{"emptyLinePlaceholder":167},[25,29725,29726,29729,29731,29733],{"class":27,"line":9960},[25,29727,29728],{"class":31},"  docker",[25,29730,29244],{"class":45},[25,29732,28803],{"class":45},[25,29734,36],{"class":35},[25,29736,29737,29739,29741],{"class":27,"line":9974},[25,29738,29367],{"class":244},[25,29740,29370],{"class":45},[25,29742,36],{"class":35},[25,29744,29745,29747,29750],{"class":27,"line":9980},[25,29746,28806],{"class":35},[25,29748,29749],{"class":45}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[25,29751,36],{"class":35},[25,29753,29754,29756],{"class":27,"line":10007},[25,29755,29341],{"class":35},[25,29757,36],{"class":35},[25,29759,29760],{"class":27,"line":10016},[25,29761,28812],{"class":45},[99,29763,29764],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[99,29766,29767],{},[155,29768],{"alt":20,"src":29769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[99,29771,29772],{},[155,29773],{"alt":20,"src":29774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22108,29776,29778],{"id":29777},"_623清除构建缓存","6.2.3.清除构建缓存",[15,29780,29782],{"className":17,"code":29781,"language":19,"meta":20,"style":20},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[22,29783,29784,29789],{"__ignoreMap":20},[25,29785,29786],{"class":27,"line":28},[25,29787,29788],{"class":302},"# 清理BuildKit构建缓存\n",[25,29790,29791,29793,29796,29799],{"class":27,"line":39},[25,29792,26624],{"class":31},[25,29794,29795],{"class":45}," builder",[25,29797,29798],{"class":45}," prune",[25,29800,29801],{"class":35}," -f\n",[99,29803,29804],{},[155,29805],{"alt":20,"src":29806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[210,29808,29810],{"id":29809},"_63补充","6.3.补充",[22108,29812,29814],{"id":29813},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[99,29816,29817],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[99,29819,29820],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[99,29822,29823],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[15,29825,29827],{"className":17,"code":29826,"language":19,"meta":20,"style":20},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[22,29828,29829,29836],{"__ignoreMap":20},[25,29830,29831,29833],{"class":27,"line":28},[25,29832,27441],{"class":31},[25,29834,29835],{"class":45}," nginx\n",[25,29837,29838,29840,29843,29846,29848],{"class":27,"line":39},[25,29839,28626],{"class":31},[25,29841,29842],{"class":45}," echo",[25,29844,29845],{"class":45}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[25,29847,26293],{"class":240},[25,29849,29850],{"class":45}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[99,29852,29853],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[99,29855,29856],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[15,29858,29860],{"className":17,"code":29859,"language":19,"meta":20,"style":20},"docker build -t nginx:tuling .\n",[22,29861,29862],{"__ignoreMap":20},[25,29863,29864,29866,29868,29870,29873],{"class":27,"line":28},[25,29865,26624],{"class":31},[25,29867,28803],{"class":45},[25,29869,28806],{"class":35},[25,29871,29872],{"class":45}," nginx:tuling",[25,29874,28812],{"class":45},[99,29876,29877],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[99,29879,29880],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[15,29882,29884],{"className":17,"code":29883,"language":19,"meta":20,"style":20},"docker run -d -p 92:80 nginx:tuling\n",[22,29885,29886],{"__ignoreMap":20},[25,29887,29888,29890,29892,29895,29897,29900],{"class":27,"line":28},[25,29889,26624],{"class":31},[25,29891,27301],{"class":45},[25,29893,29894],{"class":35}," -d",[25,29896,29287],{"class":35},[25,29898,29899],{"class":45}," 92:80",[25,29901,29902],{"class":45}," nginx:tuling\n",[99,29904,29905,29906],{},"4、访问 ",[481,29907,29910],{"href":29908,"rel":29909},"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",[23973],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[99,29912,29913],{},[155,29914],{"alt":20,"src":29915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[99,29917,29918],{},[155,29919],{"alt":20,"src":29920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22108,29922,29924],{"id":29923},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[99,29926,29927],{},"只需要知道大体流程即可",[99,29929,29930],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[99,29932,29933],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[99,29935,29936],{},"2、在Dockerfile中添加以下内容",[15,29938,29940],{"className":26162,"code":29939,"language":26164,"meta":20,"style":20},"# 基于哪个镜像\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",[22,29941,29942,29947,29952,29957,29962,29967,29972,29977],{"__ignoreMap":20},[25,29943,29944],{"class":27,"line":28},[25,29945,29946],{},"# 基于哪个镜像\n",[25,29948,29949],{"class":27,"line":39},[25,29950,29951],{},"From java:8\n",[25,29953,29954],{"class":27,"line":51},[25,29955,29956],{},"# 复制文件到容器\n",[25,29958,29959],{"class":27,"line":59},[25,29960,29961],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[25,29963,29964],{"class":27,"line":67},[25,29965,29966],{},"# 声明需要暴露的端口\n",[25,29968,29969],{"class":27,"line":75},[25,29970,29971],{},"EXPOSE 8877\n",[25,29973,29974],{"class":27,"line":83},[25,29975,29976],{},"# 配置容器启动后执行的命令\n",[25,29978,29979],{"class":27,"line":91},[25,29980,29981],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[99,29983,29984],{},"3、使用docker build命令构建镜像",[15,29986,29988],{"className":17,"code":29987,"language":19,"meta":20,"style":20},"docker build -t tulingmall-member:0.0.5 .\n",[22,29989,29990],{"__ignoreMap":20},[25,29991,29992,29994,29996,29998,30001],{"class":27,"line":28},[25,29993,26624],{"class":31},[25,29995,28803],{"class":45},[25,29997,28806],{"class":35},[25,29999,30000],{"class":45}," tulingmall-member:0.0.5",[25,30002,28812],{"class":45},[99,30004,30005],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[99,30007,30008],{},[155,30009],{"alt":20,"src":30010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[99,30012,30013],{},"4、启动镜像，加-d可在后台启动",[15,30015,30017],{"className":17,"code":30016,"language":19,"meta":20,"style":20},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[22,30018,30019],{"__ignoreMap":20},[25,30020,30021,30023,30025,30027,30029,30032],{"class":27,"line":28},[25,30022,26624],{"class":31},[25,30024,27301],{"class":45},[25,30026,29894],{"class":35},[25,30028,29287],{"class":35},[25,30030,30031],{"class":45}," 8877:8877",[25,30033,30034],{"class":45}," tulingmall-member:0.0.5\n",[99,30036,30037],{},"加上JVM参数：",[15,30039,30041],{"className":17,"code":30040,"language":19,"meta":20,"style":20},"# --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",[22,30042,30043,30048,30063,30073,30082,30089],{"__ignoreMap":20},[25,30044,30045],{"class":27,"line":28},[25,30046,30047],{"class":302},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[25,30049,30050,30052,30054,30057,30059,30061],{"class":27,"line":39},[25,30051,26624],{"class":31},[25,30053,27301],{"class":45},[25,30055,30056],{"class":35},"  -d",[25,30058,29287],{"class":35},[25,30060,30031],{"class":45},[25,30062,36],{"class":35},[25,30064,30065,30067,30070],{"class":27,"line":51},[25,30066,28199],{"class":244},[25,30068,30069],{"class":45},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[25,30071,30072],{"class":35},"  \\\n",[25,30074,30075,30077,30080],{"class":27,"line":59},[25,30076,28199],{"class":244},[25,30078,30079],{"class":45},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[25,30081,30072],{"class":35},[25,30083,30084,30087],{"class":27,"line":67},[25,30085,30086],{"class":244},"--cap-add=SYS_PTRACE  ",[25,30088,26246],{"class":35},[25,30090,30091],{"class":27,"line":75},[25,30092,30093],{"class":244},"tulingmall-member:0.0.5\n",[99,30095,30096],{},"5、访问会员服务接口",[99,30098,30099],{},[155,30100],{"alt":20,"src":30101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22108,30103,30105],{"id":30104},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[99,30107,30108],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[99,30110,30111,30112],{},"阿里云docker镜像仓库：",[481,30113,30114],{"href":30114,"rel":30115},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23973],[99,30117,30118],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[99,30120,30121],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[99,30123,30124],{},[155,30125],{"alt":20,"src":30126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[99,30128,30129],{},"要把镜像推送到镜像仓库",[15,30131,30133],{"className":17,"code":30132,"language":19,"meta":20,"style":20},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[22,30134,30135],{"__ignoreMap":20},[25,30136,30137,30139,30141,30143],{"class":27,"line":28},[25,30138,26624],{"class":31},[25,30140,28968],{"class":45},[25,30142,30000],{"class":45},[25,30144,30145],{"class":45}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[99,30147,30148],{},"最后将镜像推送到远程仓库",[15,30150,30152],{"className":17,"code":30151,"language":19,"meta":20,"style":20},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[22,30153,30154],{"__ignoreMap":20},[25,30155,30156,30158,30160],{"class":27,"line":28},[25,30157,26624],{"class":31},[25,30159,29087],{"class":45},[25,30161,30145],{"class":45},[159,30163,30164],{},"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":20,"searchDepth":39,"depth":39,"links":30166},[30167,30168,30169],{"id":28554,"depth":51,"text":28555},{"id":28783,"depth":51,"text":28784},{"id":29809,"depth":51,"text":29810},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28546,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30176,"title":30177,"body":30178,"description":20,"extension":165,"meta":30321,"navigation":167,"path":30322,"seo":30323,"stem":30324,"__hash__":30325},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30179,"toc":30319},[30180,30183,30188,30193,30196,30201,30206,30209,30214,30219,30222,30227,30230,30233,30236,30239,30242,30245,30265,30287,30290,30293,30313,30316],[10,30181,30177],{"id":30182},"_7vscode远程开发",[194,30184,30185],{},[106,30186,30187],{},"插件1：微软Docker工具",[99,30189,30190],{},[155,30191],{"alt":20,"src":30192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[99,30194,30195],{},"docker扩展插件已经进化为container tools了，请安装container tools",[99,30197,30198],{},[155,30199],{"alt":20,"src":30200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[194,30202,30203],{"start":39},[106,30204,30205],{},"插件2：微软Docker远程开发工具",[99,30207,30208],{},"下面这是远程开发的插件。",[99,30210,30211],{},[155,30212],{"alt":20,"src":30213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[99,30215,30216],{},[155,30217],{"alt":20,"src":30218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[99,30220,30221],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[99,30223,30224],{},[155,30225],{"alt":20,"src":30226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[99,30228,30229],{},"安装完拓展之后，vscode进行链接：",[99,30231,30232],{},"1.按ctrl+shift+p",[99,30234,30235],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[99,30237,30238],{},"3.选择目前运行的容器",[99,30240,30241],{},"4.VS Code 会在新窗口中打开并连接到容器",[99,30243,30244],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[15,30246,30248],{"className":17,"code":30247,"language":19,"meta":20,"style":20},"docker run -v 主机目录:容器目录 image-name\n",[22,30249,30250],{"__ignoreMap":20},[25,30251,30252,30254,30256,30259,30262],{"class":27,"line":28},[25,30253,26624],{"class":31},[25,30255,27301],{"class":45},[25,30257,30258],{"class":35}," -v",[25,30260,30261],{"class":45}," 主机目录:容器目录",[25,30263,30264],{"class":45}," image-name\n",[15,30266,30268],{"className":17,"code":30267,"language":19,"meta":20,"style":20},"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",[22,30269,30270],{"__ignoreMap":20},[25,30271,30272,30274,30276,30279,30281,30284],{"class":27,"line":28},[25,30273,26624],{"class":31},[25,30275,27301],{"class":45},[25,30277,30278],{"class":35}," -it",[25,30280,30258],{"class":35},[25,30282,30283],{"class":45}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[25,30285,30286],{"class":45}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[99,30288,30289],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[99,30291,30292],{},"查看挂载情况：",[15,30294,30296],{"className":17,"code":30295,"language":19,"meta":20,"style":20},"mount | grep -i project\n",[22,30297,30298],{"__ignoreMap":20},[25,30299,30300,30303,30305,30308,30310],{"class":27,"line":28},[25,30301,30302],{"class":31},"mount",[25,30304,25216],{"class":240},[25,30306,30307],{"class":31}," grep",[25,30309,26501],{"class":35},[25,30311,30312],{"class":45}," project\n",[99,30314,30315],{},"也可以通过ls来进行查看",[159,30317,30318],{},"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":20,"searchDepth":39,"depth":39,"links":30320},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30177,"description":20},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30327,"title":30328,"body":30329,"description":164,"extension":165,"meta":30333,"navigation":167,"path":30335,"seo":30336,"stem":30337,"__hash__":30338},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30330,"toc":30331},[],{"title":20,"searchDepth":39,"depth":39,"links":30332},[],{"category":30334},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30328,"description":164},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30340,"title":30341,"body":30342,"description":164,"extension":165,"meta":30346,"navigation":167,"path":30347,"seo":30348,"stem":30349,"__hash__":30350},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30343,"toc":30344},[],{"title":20,"searchDepth":39,"depth":39,"links":30345},[],{"category":30334},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30341,"description":164},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30352,"title":30353,"body":30354,"description":164,"extension":165,"meta":30647,"navigation":167,"path":30648,"seo":30649,"stem":30650,"__hash__":30651},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30355,"toc":30645},[30356,30359,30367,30382,30387,30438,30441,30447,30634,30639,30642],[10,30357,30353],{"id":30358},"_1验证深度学习环境",[99,30360,30361,30362],{},"关于环境的安装，看",[481,30363,30366],{"href":30364,"rel":30365},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23973],"Pytorch-->深度学习",[99,30368,30369,30370,30373,30374,30377,30378,30381],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[22,30371,30372],{},"pytorch-cuda=12.4"," 是一个“ ",[392,30375,30376],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[392,30379,30380],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[99,30383,30384],{},[155,30385],{"alt":20,"src":30386},"\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",[15,30388,30390],{"className":17,"code":30389,"language":19,"meta":20,"style":20},"# 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",[22,30391,30392,30397],{"__ignoreMap":20},[25,30393,30394],{"class":27,"line":28},[25,30395,30396],{"class":302},"# CUDA 12.4\n",[25,30398,30399,30402,30404,30407,30410,30413,30416,30419,30421,30424,30427,30430,30433,30435],{"class":27,"line":39},[25,30400,30401],{"class":31},"conda",[25,30403,23942],{"class":45},[25,30405,30406],{"class":45}," pytorch==",[25,30408,30409],{"class":35},"2.5.1",[25,30411,30412],{"class":45}," torchvision==",[25,30414,30415],{"class":35},"0.20.1",[25,30417,30418],{"class":45}," torchaudio==",[25,30420,30409],{"class":35},[25,30422,30423],{"class":45}," pytorch-cuda=",[25,30425,30426],{"class":35},"12.4",[25,30428,30429],{"class":35}," -c",[25,30431,30432],{"class":45}," pytorch",[25,30434,30429],{"class":35},[25,30436,30437],{"class":45}," nvidia\n",[99,30439,30440],{},"）：",[99,30442,30443],{},[481,30444,30445],{"href":30445,"rel":30446},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23973],[15,30448,30452],{"className":30449,"code":30450,"language":30451,"meta":20,"style":20},"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",[22,30453,30454,30459,30467,30472,30482,30498,30503,30513,30550,30557,30569,30585,30590,30600,30612,30622],{"__ignoreMap":20},[25,30455,30456],{"class":27,"line":28},[25,30457,30458],{"class":302},"# 对深度学习环境进行测试\n",[25,30460,30461,30464],{"class":27,"line":39},[25,30462,30463],{"class":240},"import",[25,30465,30466],{"class":244}," torch\n",[25,30468,30469],{"class":27,"line":51},[25,30470,30471],{"class":302},"# 查看cuda是否被激活\n",[25,30473,30474,30477,30479],{"class":27,"line":59},[25,30475,30476],{"class":244},"flag",[25,30478,290],{"class":240},[25,30480,30481],{"class":244},"torch.cuda.is_available()\n",[25,30483,30484,30487,30489,30492,30495],{"class":27,"line":67},[25,30485,30486],{"class":35},"print",[25,30488,245],{"class":244},[25,30490,30491],{"class":45},"\"cuda:\"",[25,30493,30494],{"class":244},", flag)   ",[25,30496,30497],{"class":302},"#返回true的话说明被激活\n",[25,30499,30500],{"class":27,"line":75},[25,30501,30502],{"class":302},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[25,30504,30505,30508,30510],{"class":27,"line":83},[25,30506,30507],{"class":244},"ngpu",[25,30509,290],{"class":240},[25,30511,30512],{"class":35},"1\n",[25,30514,30515,30518,30520,30523,30526,30528,30531,30534,30537,30539,30541,30543,30545,30548],{"class":27,"line":91},[25,30516,30517],{"class":244},"device",[25,30519,290],{"class":240},[25,30521,30522],{"class":244},"torch.device(",[25,30524,30525],{"class":45},"\"cuda:0\"",[25,30527,1815],{"class":240},[25,30529,30530],{"class":244},"(torch.cuda.is_available() ",[25,30532,30533],{"class":240},"and",[25,30535,30536],{"class":244}," ngpu",[25,30538,1203],{"class":240},[25,30540,434],{"class":35},[25,30542,13824],{"class":244},[25,30544,1812],{"class":240},[25,30546,30547],{"class":45}," \"cpu\"",[25,30549,251],{"class":244},[25,30551,30552,30554],{"class":27,"line":1429},[25,30553,30486],{"class":35},[25,30555,30556],{"class":244},"(device)\n",[25,30558,30559,30561,30564,30566],{"class":27,"line":1441},[25,30560,30486],{"class":35},[25,30562,30563],{"class":244},"(torch.cuda.get_device_name(",[25,30565,434],{"class":35},[25,30567,30568],{"class":244},"))\n",[25,30570,30571,30573,30576,30578,30580,30582],{"class":27,"line":1723},[25,30572,30486],{"class":35},[25,30574,30575],{"class":244},"(torch.rand(",[25,30577,315],{"class":35},[25,30579,621],{"class":244},[25,30581,315],{"class":35},[25,30583,30584],{"class":244},").cuda())\n",[25,30586,30587],{"class":27,"line":1728},[25,30588,30589],{"class":302},"# 查看cuda和cudnn的版本\n",[25,30591,30592,30595,30597],{"class":27,"line":1734},[25,30593,30594],{"class":244},"cuda_version",[25,30596,290],{"class":240},[25,30598,30599],{"class":244},"torch.version.cuda\n",[25,30601,30602,30604,30606,30609],{"class":27,"line":1739},[25,30603,30486],{"class":35},[25,30605,245],{"class":244},[25,30607,30608],{"class":45},"\"cuda version\"",[25,30610,30611],{"class":244},",cuda_version)\n",[25,30613,30614,30617,30619],{"class":27,"line":1753},[25,30615,30616],{"class":244},"cudnn_version",[25,30618,290],{"class":240},[25,30620,30621],{"class":244},"torch.backends.cudnn.version()\n",[25,30623,30624,30626,30628,30631],{"class":27,"line":1758},[25,30625,30486],{"class":35},[25,30627,245],{"class":244},[25,30629,30630],{"class":45},"\"cudnn version\"",[25,30632,30633],{"class":244},",cudnn_version)\n",[99,30635,30636],{},[155,30637],{"alt":20,"src":30638},"\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",[99,30640,30641],{},"cuda:0 指的是一块显卡",[159,30643,30644],{},"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":20,"searchDepth":39,"depth":39,"links":30646},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30353,"description":164},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30653,"title":30654,"body":30655,"description":164,"extension":165,"meta":50459,"navigation":167,"path":50460,"seo":50461,"stem":50462,"__hash__":50463},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30656,"toc":50453},[30657,30660,30664,30668,30671,30676,30681,30684,30689,30694,30699,30702,30706,30711,30715,30720,30723,30728,30731,30734,30737,30740,30745,30748,30753,30758,30763,30768,30771,30775,30778,30783,31387,31392,31395,31400,31403,31406,31870,31873,31876,31879,31882,33933,33936,33941,33946,34741,34744,34749,35527,35531,37190,37194,37908,37912,37916,37921,37926,37931,37934,37939,37944,37949,37954,37959,37963,37968,39250,39255,39258,39261,39264,39419,39422,39425,40641,40646,41341,41345,41349,41354,41359,41362,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41447,41452,41457,41462,41467,41472,41477,41482,41487,41492,41497,41502,41507,41512,41516,41520,41523,43001,43005,44652,44656,45350,45354,45357,45360,45904,45907,45911,45914,47311,47315,47318,47896,49683,49687,49690,50450],[10,30658,30654],{"id":30659},"_2经典神经网络",[210,30661,30663],{"id":30662},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22108,30665,30667],{"id":30666},"_211原理介绍","2.1.1.原理介绍",[99,30669,30670],{},"LeNet-5",[194,30672,30673],{},[106,30674,30675],{},"原理",[99,30677,30678],{},[155,30679],{"alt":20,"src":30680},"\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",[99,30682,30683],{},"B是batch批次；C是channel通道",[194,30685,30686],{"start":39},[106,30687,30688],{},"网络参数详细",[99,30690,30691],{},[155,30692],{"alt":20,"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-004.png",[99,30695,30696],{},[155,30697],{"alt":20,"src":30698},"\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",[99,30700,30701],{},"AlexNet",[194,30703,30704],{},[106,30705,30675],{},[99,30707,30708],{},[155,30709],{"alt":20,"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-006.png",[194,30712,30713],{"start":39},[106,30714,30688],{},[99,30716,30717],{},[155,30718],{"alt":20,"src":30719},"\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",[99,30721,30722],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[99,30724,30725],{},[155,30726],{"alt":20,"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-008.png",[99,30729,30730],{},"数据处理中的图像增强操作:",[99,30732,30733],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[99,30735,30736],{},"①增加数据量，保证训练数据充足；②防止过拟合",[99,30738,30739],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[99,30741,30742],{},[155,30743],{"alt":20,"src":30744},"\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",[99,30746,30747],{},"提升网络精确度的方法：LRN正则化",[99,30749,30750],{},[155,30751],{"alt":20,"src":30752},"\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",[99,30754,30755],{},[155,30756],{"alt":20,"src":30757},"\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",[194,30759,30760],{"start":51},[106,30761,30762],{},"AlexNet的总结",[99,30764,30765],{},[155,30766],{"alt":20,"src":30767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[99,30769,30770],{},"比LeNet模型要深一丢丢",[22108,30772,30774],{"id":30773},"_212代码实现","2.1.2.代码实现",[99,30776,30777],{},"（1）LeNet",[194,30779,30780],{},[106,30781,30782],{},"模型搭建",[15,30784,30786],{"className":30449,"code":30785,"language":30451,"meta":20,"style":20},"# 导入库\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",[22,30787,30788,30793,30799,30804,30817,30822,30834,30838,30858,30863,30868,30879,30884,30903,30907,30912,30961,30973,30978,31007,31042,31069,31074,31086,31091,31111,31130,31149,31153,31158,31168,31185,31196,31211,31222,31233,31248,31263,31274,31281,31285,31299,31304,31327,31332,31337,31342,31346,31351,31356,31366],{"__ignoreMap":20},[25,30789,30790],{"class":27,"line":28},[25,30791,30792],{"class":302},"# 导入库\n",[25,30794,30795,30797],{"class":27,"line":39},[25,30796,30463],{"class":240},[25,30798,30466],{"class":244},[25,30800,30801],{"class":27,"line":51},[25,30802,30803],{"class":302},"# 导入神经网络层\n",[25,30805,30806,30809,30812,30814],{"class":27,"line":59},[25,30807,30808],{"class":240},"from",[25,30810,30811],{"class":244}," torch ",[25,30813,30463],{"class":240},[25,30815,30816],{"class":244}," nn\n",[25,30818,30819],{"class":27,"line":67},[25,30820,30821],{"class":302},"# 导入展示神经网络参数的包\n",[25,30823,30824,30826,30829,30831],{"class":27,"line":75},[25,30825,30808],{"class":240},[25,30827,30828],{"class":244}," torchsummary ",[25,30830,30463],{"class":240},[25,30832,30833],{"class":244}," summary\n",[25,30835,30836],{"class":27,"line":83},[25,30837,2510],{"emptyLinePlaceholder":167},[25,30839,30840,30842,30845,30847,30850,30852,30855],{"class":27,"line":91},[25,30841,14804],{"class":240},[25,30843,30844],{"class":31}," LeNet",[25,30846,245],{"class":244},[25,30848,30849],{"class":31},"nn",[25,30851,801],{"class":244},[25,30853,30854],{"class":31},"Module",[25,30856,30857],{"class":244},"):\n",[25,30859,30860],{"class":27,"line":1429},[25,30861,30862],{"class":302},"    # 模型初始化:\n",[25,30864,30865],{"class":27,"line":1441},[25,30866,30867],{"class":302},"    # 定义一些网络层和激活函数\n",[25,30869,30870,30873,30876],{"class":27,"line":1723},[25,30871,30872],{"class":240},"    def",[25,30874,30875],{"class":35}," __init__",[25,30877,30878],{"class":244},"(self):\n",[25,30880,30881],{"class":27,"line":1728},[25,30882,30883],{"class":302},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[25,30885,30886,30889,30892,30895,30898,30901],{"class":27,"line":1734},[25,30887,30888],{"class":35},"        super",[25,30890,30891],{"class":244},"(LeNet,",[25,30893,30894],{"class":35},"self",[25,30896,30897],{"class":244},").",[25,30899,30900],{"class":35},"__init__",[25,30902,2086],{"class":244},[25,30904,30905],{"class":27,"line":1739},[25,30906,2510],{"emptyLinePlaceholder":167},[25,30908,30909],{"class":27,"line":1753},[25,30910,30911],{"class":302},"        # 定义网络层\n",[25,30913,30914,30917,30920,30922,30925,30928,30930,30932,30934,30937,30939,30941,30943,30946,30948,30950,30952,30955,30957,30959],{"class":27,"line":1758},[25,30915,30916],{"class":35},"        self",[25,30918,30919],{"class":244},".c1",[25,30921,290],{"class":240},[25,30923,30924],{"class":244},"nn.Conv2d(",[25,30926,30927],{"class":5326},"in_channels",[25,30929,290],{"class":240},[25,30931,460],{"class":35},[25,30933,621],{"class":244},[25,30935,30936],{"class":5326},"out_channels",[25,30938,290],{"class":240},[25,30940,587],{"class":35},[25,30942,621],{"class":244},[25,30944,30945],{"class":5326},"kernel_size",[25,30947,290],{"class":240},[25,30949,562],{"class":35},[25,30951,621],{"class":244},[25,30953,30954],{"class":5326},"padding",[25,30956,290],{"class":240},[25,30958,321],{"class":35},[25,30960,251],{"class":244},[25,30962,30963,30965,30968,30970],{"class":27,"line":1764},[25,30964,30916],{"class":35},[25,30966,30967],{"class":244},".sig",[25,30969,290],{"class":240},[25,30971,30972],{"class":244},"nn.Sigmoid()\n",[25,30974,30975],{"class":27,"line":1785},[25,30976,30977],{"class":302},"        # 定义池化\n",[25,30979,30980,30982,30985,30987,30990,30992,30994,30996,30998,31001,31003,31005],{"class":27,"line":1790},[25,30981,30916],{"class":35},[25,30983,30984],{"class":244},".s2",[25,30986,290],{"class":240},[25,30988,30989],{"class":244},"nn.AvgPool2d(",[25,30991,30945],{"class":5326},[25,30993,290],{"class":240},[25,30995,321],{"class":35},[25,30997,621],{"class":244},[25,30999,31000],{"class":5326},"stride",[25,31002,290],{"class":240},[25,31004,321],{"class":35},[25,31006,251],{"class":244},[25,31008,31009,31011,31014,31016,31018,31020,31022,31024,31026,31028,31030,31032,31034,31036,31038,31040],{"class":27,"line":1804},[25,31010,30916],{"class":35},[25,31012,31013],{"class":244},".c3",[25,31015,290],{"class":240},[25,31017,30924],{"class":244},[25,31019,30927],{"class":5326},[25,31021,290],{"class":240},[25,31023,587],{"class":35},[25,31025,621],{"class":244},[25,31027,30936],{"class":5326},[25,31029,290],{"class":240},[25,31031,844],{"class":35},[25,31033,621],{"class":244},[25,31035,30945],{"class":5326},[25,31037,290],{"class":240},[25,31039,562],{"class":35},[25,31041,251],{"class":244},[25,31043,31044,31046,31049,31051,31053,31055,31057,31059,31061,31063,31065,31067],{"class":27,"line":1809},[25,31045,30916],{"class":35},[25,31047,31048],{"class":244},".s4",[25,31050,290],{"class":240},[25,31052,30989],{"class":244},[25,31054,30945],{"class":5326},[25,31056,290],{"class":240},[25,31058,321],{"class":35},[25,31060,621],{"class":244},[25,31062,31000],{"class":5326},[25,31064,290],{"class":240},[25,31066,321],{"class":35},[25,31068,251],{"class":244},[25,31070,31071],{"class":27,"line":1838},[25,31072,31073],{"class":302},"        # 定义平展层\n",[25,31075,31076,31078,31081,31083],{"class":27,"line":1843},[25,31077,30916],{"class":35},[25,31079,31080],{"class":244},".flatten",[25,31082,290],{"class":240},[25,31084,31085],{"class":244},"nn.Flatten()\n",[25,31087,31088],{"class":27,"line":1860},[25,31089,31090],{"class":302},"        # 定义全连接层\n",[25,31092,31093,31095,31098,31100,31103,31105,31107,31109],{"class":27,"line":1865},[25,31094,30916],{"class":35},[25,31096,31097],{"class":244},".f5",[25,31099,290],{"class":240},[25,31101,31102],{"class":244},"nn.Linear(",[25,31104,4097],{"class":35},[25,31106,621],{"class":244},[25,31108,1060],{"class":35},[25,31110,251],{"class":244},[25,31112,31113,31115,31118,31120,31122,31124,31126,31128],{"class":27,"line":1870},[25,31114,30916],{"class":35},[25,31116,31117],{"class":244},".f6",[25,31119,290],{"class":240},[25,31121,31102],{"class":244},[25,31123,1060],{"class":35},[25,31125,621],{"class":244},[25,31127,954],{"class":35},[25,31129,251],{"class":244},[25,31131,31132,31134,31137,31139,31141,31143,31145,31147],{"class":27,"line":1875},[25,31133,30916],{"class":35},[25,31135,31136],{"class":244},".f7",[25,31138,290],{"class":240},[25,31140,31102],{"class":244},[25,31142,954],{"class":35},[25,31144,621],{"class":244},[25,31146,689],{"class":35},[25,31148,251],{"class":244},[25,31150,31151],{"class":27,"line":1889},[25,31152,2510],{"emptyLinePlaceholder":167},[25,31154,31155],{"class":27,"line":1894},[25,31156,31157],{"class":302},"    # 写工具->写前向传播\n",[25,31159,31160,31162,31165],{"class":27,"line":2687},[25,31161,30872],{"class":240},[25,31163,31164],{"class":31}," forward",[25,31166,31167],{"class":244},"(self,x):\n",[25,31169,31170,31173,31175,31177,31180,31182],{"class":27,"line":2701},[25,31171,31172],{"class":244},"        x",[25,31174,290],{"class":240},[25,31176,30894],{"class":35},[25,31178,31179],{"class":244},".sig(",[25,31181,30894],{"class":35},[25,31183,31184],{"class":244},".c1(x))\n",[25,31186,31187,31189,31191,31193],{"class":27,"line":2709},[25,31188,31172],{"class":244},[25,31190,290],{"class":240},[25,31192,30894],{"class":35},[25,31194,31195],{"class":244},".s2(x)\n",[25,31197,31198,31200,31202,31204,31206,31208],{"class":27,"line":2714},[25,31199,31172],{"class":244},[25,31201,290],{"class":240},[25,31203,30894],{"class":35},[25,31205,31179],{"class":244},[25,31207,30894],{"class":35},[25,31209,31210],{"class":244},".c3(x))\n",[25,31212,31213,31215,31217,31219],{"class":27,"line":2720},[25,31214,31172],{"class":244},[25,31216,290],{"class":240},[25,31218,30894],{"class":35},[25,31220,31221],{"class":244},".s4(x)\n",[25,31223,31224,31226,31228,31230],{"class":27,"line":2726},[25,31225,31172],{"class":244},[25,31227,290],{"class":240},[25,31229,30894],{"class":35},[25,31231,31232],{"class":244},".flatten(x)\n",[25,31234,31235,31237,31239,31241,31243,31245],{"class":27,"line":2731},[25,31236,31172],{"class":244},[25,31238,290],{"class":240},[25,31240,30894],{"class":35},[25,31242,31179],{"class":244},[25,31244,30894],{"class":35},[25,31246,31247],{"class":244},".f5(x))\n",[25,31249,31250,31252,31254,31256,31258,31260],{"class":27,"line":8058},[25,31251,31172],{"class":244},[25,31253,290],{"class":240},[25,31255,30894],{"class":35},[25,31257,31179],{"class":244},[25,31259,30894],{"class":35},[25,31261,31262],{"class":244},".f6(x))\n",[25,31264,31265,31267,31269,31271],{"class":27,"line":8082},[25,31266,31172],{"class":244},[25,31268,290],{"class":240},[25,31270,30894],{"class":35},[25,31272,31273],{"class":244},".f7(x)\n",[25,31275,31276,31278],{"class":27,"line":8087},[25,31277,14862],{"class":240},[25,31279,31280],{"class":244}," x\n",[25,31282,31283],{"class":27,"line":8093},[25,31284,2510],{"emptyLinePlaceholder":167},[25,31286,31287,31289,31292,31294,31297],{"class":27,"line":8120},[25,31288,1642],{"class":240},[25,31290,31291],{"class":35}," __name__",[25,31293,3059],{"class":240},[25,31295,31296],{"class":45},"\"__main__\"",[25,31298,3849],{"class":244},[25,31300,31301],{"class":27,"line":8125},[25,31302,31303],{"class":302},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[25,31305,31306,31309,31311,31313,31316,31318,31321,31323,31325],{"class":27,"line":8131},[25,31307,31308],{"class":244},"    device",[25,31310,290],{"class":240},[25,31312,30522],{"class":244},[25,31314,31315],{"class":45},"\"cuda\"",[25,31317,1815],{"class":240},[25,31319,31320],{"class":244}," torch.cuda.is_available() ",[25,31322,1812],{"class":240},[25,31324,30547],{"class":45},[25,31326,251],{"class":244},[25,31328,31329],{"class":27,"line":8143},[25,31330,31331],{"class":302},"    # 如果就是想指定用cpu用下方代码:\n",[25,31333,31334],{"class":27,"line":8155},[25,31335,31336],{"class":302},"    # device=\"cpu\"\n",[25,31338,31339],{"class":27,"line":8167},[25,31340,31341],{"class":302},"    # print(device)\n",[25,31343,31344],{"class":27,"line":9826},[25,31345,2510],{"emptyLinePlaceholder":167},[25,31347,31348],{"class":27,"line":9851},[25,31349,31350],{"class":302},"    # 实例化模型\n",[25,31352,31353],{"class":27,"line":9874},[25,31354,31355],{"class":302},"    # 将模型放到设备中去运行\n",[25,31357,31358,31361,31363],{"class":27,"line":9898},[25,31359,31360],{"class":244},"    model",[25,31362,290],{"class":240},[25,31364,31365],{"class":244},"LeNet().to(device)\n",[25,31367,31368,31371,31374,31376,31378,31380,31382,31384],{"class":27,"line":9903},[25,31369,31370],{"class":35},"    print",[25,31372,31373],{"class":244},"(summary(model,(",[25,31375,460],{"class":35},[25,31377,621],{"class":244},[25,31379,1144],{"class":35},[25,31381,621],{"class":244},[25,31383,1144],{"class":35},[25,31385,31386],{"class":244},")))\n",[99,31388,31389],{},[155,31390],{"alt":20,"src":31391},"\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",[99,31393,31394],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[194,31396,31397],{"start":39},[106,31398,31399],{},"训练",[99,31401,31402],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[99,31404,31405],{},"在训练之前可以将数据展示看一下",[15,31407,31409],{"className":30449,"code":31408,"language":30451,"meta":20,"style":20},"# 建立画图的函数，用于展示数据\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",[22,31410,31411,31416,31421,31433,31445,31458,31463,31475,31480,31492,31497,31509,31513,31517,31538,31550,31555,31576,31587,31591,31596,31614,31625,31630,31641,31646,31657,31661,31666,31681,31694,31699,31704,31717,31730,31743,31748,31752,31757,31777,31794,31814,31827,31840,31850,31865],{"__ignoreMap":20},[25,31412,31413],{"class":27,"line":28},[25,31414,31415],{"class":302},"# 建立画图的函数，用于展示数据\n",[25,31417,31418],{"class":27,"line":39},[25,31419,31420],{"class":302},"# torchvision中包含很多内置的数据集\n",[25,31422,31423,31425,31428,31430],{"class":27,"line":51},[25,31424,30808],{"class":240},[25,31426,31427],{"class":244}," sklearn.externals.array_api_compat.torch ",[25,31429,30463],{"class":240},[25,31431,31432],{"class":244}," squeeze\n",[25,31434,31435,31437,31440,31442],{"class":27,"line":59},[25,31436,30808],{"class":240},[25,31438,31439],{"class":244}," torchvision.datasets ",[25,31441,30463],{"class":240},[25,31443,31444],{"class":244}," FashionMNIST\n",[25,31446,31447,31449,31452,31455],{"class":27,"line":67},[25,31448,30463],{"class":240},[25,31450,31451],{"class":244}," numpy ",[25,31453,31454],{"class":240},"as",[25,31456,31457],{"class":244}," np\n",[25,31459,31460],{"class":27,"line":75},[25,31461,31462],{"class":302},"# 引入处理数据集的包\n",[25,31464,31465,31467,31470,31472],{"class":27,"line":83},[25,31466,30808],{"class":240},[25,31468,31469],{"class":244}," torchvision ",[25,31471,30463],{"class":240},[25,31473,31474],{"class":244}," transforms\n",[25,31476,31477],{"class":27,"line":91},[25,31478,31479],{"class":302},"# 从torch库中引入数据处理的包\n",[25,31481,31482,31484,31487,31489],{"class":27,"line":1429},[25,31483,30463],{"class":240},[25,31485,31486],{"class":244}," torch.utils.data ",[25,31488,31454],{"class":240},[25,31490,31491],{"class":244}," Data\n",[25,31493,31494],{"class":27,"line":1441},[25,31495,31496],{"class":302},"# 导入画图的库\n",[25,31498,31499,31501,31504,31506],{"class":27,"line":1723},[25,31500,30463],{"class":240},[25,31502,31503],{"class":244}," matplotlib.pyplot ",[25,31505,31454],{"class":240},[25,31507,31508],{"class":244}," plt\n",[25,31510,31511],{"class":27,"line":1728},[25,31512,2510],{"emptyLinePlaceholder":167},[25,31514,31515],{"class":27,"line":1734},[25,31516,2510],{"emptyLinePlaceholder":167},[25,31518,31519,31522,31524,31527,31530,31532,31535],{"class":27,"line":1739},[25,31520,31521],{"class":244},"train_data",[25,31523,290],{"class":240},[25,31525,31526],{"class":244},"FashionMNIST(",[25,31528,31529],{"class":5326},"root",[25,31531,290],{"class":240},[25,31533,31534],{"class":45},"'.\u002Fdata'",[25,31536,31537],{"class":244},",\n",[25,31539,31540,31543,31545,31548],{"class":27,"line":1753},[25,31541,31542],{"class":5326},"                        train",[25,31544,290],{"class":240},[25,31546,31547],{"class":35},"True",[25,31549,31537],{"class":244},[25,31551,31552],{"class":27,"line":1758},[25,31553,31554],{"class":302},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[25,31556,31557,31560,31562,31565,31568,31570,31573],{"class":27,"line":1764},[25,31558,31559],{"class":5326},"                        transform",[25,31561,290],{"class":240},[25,31563,31564],{"class":244},"transforms.Compose([transforms.Resize(",[25,31566,31567],{"class":5326},"size",[25,31569,290],{"class":240},[25,31571,31572],{"class":35},"224",[25,31574,31575],{"class":244},"),transforms.ToTensor()]),\n",[25,31577,31578,31581,31583,31585],{"class":27,"line":1785},[25,31579,31580],{"class":5326},"                        download",[25,31582,290],{"class":240},[25,31584,31547],{"class":35},[25,31586,251],{"class":244},[25,31588,31589],{"class":27,"line":1790},[25,31590,2510],{"emptyLinePlaceholder":167},[25,31592,31593],{"class":27,"line":1804},[25,31594,31595],{"class":302},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[25,31597,31598,31601,31603,31606,31609,31611],{"class":27,"line":1809},[25,31599,31600],{"class":244},"train_loader",[25,31602,290],{"class":240},[25,31604,31605],{"class":244},"Data.DataLoader(",[25,31607,31608],{"class":5326},"dataset",[25,31610,290],{"class":240},[25,31612,31613],{"class":244},"train_data,\n",[25,31615,31616,31619,31621,31623],{"class":27,"line":1838},[25,31617,31618],{"class":5326},"                             batch_size",[25,31620,290],{"class":240},[25,31622,446],{"class":35},[25,31624,31537],{"class":244},[25,31626,31627],{"class":27,"line":1843},[25,31628,31629],{"class":302},"                             # 数据是否打乱\n",[25,31631,31632,31635,31637,31639],{"class":27,"line":1860},[25,31633,31634],{"class":5326},"                             shuffle",[25,31636,290],{"class":240},[25,31638,31547],{"class":35},[25,31640,31537],{"class":244},[25,31642,31643],{"class":27,"line":1865},[25,31644,31645],{"class":302},"                             # 规定加载数据的进程\n",[25,31647,31648,31651,31653,31655],{"class":27,"line":1870},[25,31649,31650],{"class":5326},"                             num_workers",[25,31652,290],{"class":240},[25,31654,434],{"class":35},[25,31656,251],{"class":244},[25,31658,31659],{"class":27,"line":1875},[25,31660,2510],{"emptyLinePlaceholder":167},[25,31662,31663],{"class":27,"line":1889},[25,31664,31665],{"class":302},"# 获得一个batch的数据\n",[25,31667,31668,31670,31673,31675,31678],{"class":27,"line":1894},[25,31669,3135],{"class":240},[25,31671,31672],{"class":244}," step,(b_x,b_y) ",[25,31674,26114],{"class":240},[25,31676,31677],{"class":35}," enumerate",[25,31679,31680],{"class":244},"(train_loader):\n",[25,31682,31683,31685,31688,31690,31692],{"class":27,"line":2687},[25,31684,3211],{"class":240},[25,31686,31687],{"class":244}," step ",[25,31689,1203],{"class":240},[25,31691,4203],{"class":35},[25,31693,3849],{"class":244},[25,31695,31696],{"class":27,"line":2701},[25,31697,31698],{"class":240},"        break\n",[25,31700,31701],{"class":27,"line":2709},[25,31702,31703],{"class":302},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[25,31705,31706,31709,31711,31714],{"class":27,"line":2714},[25,31707,31708],{"class":244},"batch_x",[25,31710,290],{"class":240},[25,31712,31713],{"class":244},"b_x.squeeze().numpy()  ",[25,31715,31716],{"class":302},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[25,31718,31719,31722,31724,31727],{"class":27,"line":2720},[25,31720,31721],{"class":244},"batch_y",[25,31723,290],{"class":240},[25,31725,31726],{"class":244},"b_y.numpy()   ",[25,31728,31729],{"class":302},"#将张量转换成功numpy数组\n",[25,31731,31732,31735,31737,31740],{"class":27,"line":2726},[25,31733,31734],{"class":244},"class_label",[25,31736,290],{"class":240},[25,31738,31739],{"class":244},"train_data.classes  ",[25,31741,31742],{"class":302},"#训练集标签\n",[25,31744,31745],{"class":27,"line":2731},[25,31746,31747],{"class":302},"# print(class_label)\n",[25,31749,31750],{"class":27,"line":8058},[25,31751,2510],{"emptyLinePlaceholder":167},[25,31753,31754],{"class":27,"line":8082},[25,31755,31756],{"class":302},"# 可视化一个batch的图像\n",[25,31758,31759,31762,31765,31767,31769,31771,31773,31775],{"class":27,"line":8087},[25,31760,31761],{"class":244},"plt.figure(",[25,31763,31764],{"class":5326},"figsize",[25,31766,290],{"class":240},[25,31768,245],{"class":244},[25,31770,741],{"class":35},[25,31772,621],{"class":244},[25,31774,562],{"class":35},[25,31776,30568],{"class":244},[25,31778,31779,31781,31784,31786,31789,31791],{"class":27,"line":8093},[25,31780,3135],{"class":240},[25,31782,31783],{"class":244}," ii ",[25,31785,26114],{"class":240},[25,31787,31788],{"class":244}," np.arange(",[25,31790,7468],{"class":35},[25,31792,31793],{"class":244},"(batch_y)):\n",[25,31795,31796,31799,31801,31803,31805,31808,31810,31812],{"class":27,"line":8120},[25,31797,31798],{"class":244},"    plt.subplot(",[25,31800,536],{"class":35},[25,31802,621],{"class":244},[25,31804,844],{"class":35},[25,31806,31807],{"class":244},",ii ",[25,31809,724],{"class":240},[25,31811,25225],{"class":35},[25,31813,251],{"class":244},[25,31815,31816,31819,31822,31824],{"class":27,"line":8125},[25,31817,31818],{"class":244},"    plt.imshow(batch_x[ii,:,:],",[25,31820,31821],{"class":5326},"cmap",[25,31823,290],{"class":240},[25,31825,31826],{"class":244},"plt.cm.gray)\n",[25,31828,31829,31832,31834,31836,31838],{"class":27,"line":8131},[25,31830,31831],{"class":244},"    plt.title(class_label[batch_y[ii]],",[25,31833,31567],{"class":5326},[25,31835,290],{"class":240},[25,31837,689],{"class":35},[25,31839,251],{"class":244},[25,31841,31842,31845,31848],{"class":27,"line":8143},[25,31843,31844],{"class":244},"    plt.axis(",[25,31846,31847],{"class":45},"\"off\"",[25,31849,251],{"class":244},[25,31851,31852,31855,31858,31860,31863],{"class":27,"line":8155},[25,31853,31854],{"class":244},"    plt.subplots_adjust(",[25,31856,31857],{"class":5326},"wspace",[25,31859,290],{"class":240},[25,31861,31862],{"class":35},"0.05",[25,31864,251],{"class":244},[25,31866,31867],{"class":27,"line":8167},[25,31868,31869],{"class":244},"plt.show()\n",[99,31871,31872],{},"用matplotlib进行展示的过程可以后续再补",[99,31874,31875],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[99,31877,31878],{},"训练次数就是按照批次过整个训练集数据的次数",[99,31880,31881],{},"模型训练：",[15,31883,31885],{"className":30449,"code":31884,"language":30451,"meta":20,"style":20},"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",[22,31886,31887,31894,31901,31905,31917,31923,31934,31944,31954,31964,31974,31979,31991,32001,32005,32009,32014,32025,32038,32049,32066,32077,32116,32132,32144,32155,32160,32171,32187,32198,32209,32220,32227,32231,32236,32241,32245,32250,32260,32281,32285,32289,32294,32299,32304,32324,32328,32333,32343,32347,32352,32361,32366,32371,32376,32386,32390,32394,32399,32404,32414,32419,32429,32434,32443,32448,32457,32462,32471,32475,32480,32490,32494,32498,32503,32518,32546,32561,32565,32570,32575,32584,32589,32598,32603,32612,32617,32626,32631,32640,32645,32654,32659,32672,32677,32687,32692,32702,32708,32714,32720,32726,32737,32743,32763,32769,32780,32786,32792,32798,32804,32810,32816,32822,32842,32848,32864,32870,32884,32890,32905,32911,32920,32926,32935,32941,32947,32956,32962,32973,32979,32998,33004,33015,33021,33041,33057,33063,33077,33083,33089,33100,33106,33112,33122,33128,33139,33145,33155,33160,33166,33215,33262,33267,33273,33292,33298,33318,33324,33330,33340,33345,33351,33367,33412,33418,33424,33430,33441,33447,33453,33459,33477,33491,33500,33509,33518,33527,33533,33539,33547,33552,33558,33569,33575,33595,33601,33607,33613,33630,33636,33642,33648,33654,33660,33687,33711,33717,33723,33729,33740,33751,33757,33774,33797,33820,33826,33831,33840,33850,33856,33861,33867,33880,33886,33897,33908,33927],{"__ignoreMap":20},[25,31888,31889,31891],{"class":27,"line":28},[25,31890,30463],{"class":240},[25,31892,31893],{"class":244}," copy\n",[25,31895,31896,31898],{"class":27,"line":39},[25,31897,30463],{"class":240},[25,31899,31900],{"class":244}," time\n",[25,31902,31903],{"class":27,"line":51},[25,31904,2510],{"emptyLinePlaceholder":167},[25,31906,31907,31909,31912,31914],{"class":27,"line":59},[25,31908,30463],{"class":240},[25,31910,31911],{"class":244}," pandas ",[25,31913,31454],{"class":240},[25,31915,31916],{"class":244}," pd\n",[25,31918,31919,31921],{"class":27,"line":67},[25,31920,30463],{"class":240},[25,31922,30466],{"class":244},[25,31924,31925,31927,31929,31931],{"class":27,"line":75},[25,31926,30808],{"class":240},[25,31928,31486],{"class":244},[25,31930,30463],{"class":240},[25,31932,31933],{"class":244}," Dataset\n",[25,31935,31936,31938,31940,31942],{"class":27,"line":83},[25,31937,30808],{"class":240},[25,31939,31439],{"class":244},[25,31941,30463],{"class":240},[25,31943,31444],{"class":244},[25,31945,31946,31948,31950,31952],{"class":27,"line":91},[25,31947,30808],{"class":240},[25,31949,31469],{"class":244},[25,31951,30463],{"class":240},[25,31953,31474],{"class":244},[25,31955,31956,31958,31960,31962],{"class":27,"line":1429},[25,31957,30463],{"class":240},[25,31959,31486],{"class":244},[25,31961,31454],{"class":240},[25,31963,31491],{"class":244},[25,31965,31966,31968,31970,31972],{"class":27,"line":1441},[25,31967,30463],{"class":240},[25,31969,31503],{"class":244},[25,31971,31454],{"class":240},[25,31973,31508],{"class":244},[25,31975,31976],{"class":27,"line":1723},[25,31977,31978],{"class":302},"# 导入模型\n",[25,31980,31981,31983,31986,31988],{"class":27,"line":1728},[25,31982,30808],{"class":240},[25,31984,31985],{"class":244}," model ",[25,31987,30463],{"class":240},[25,31989,31990],{"class":244}," LeNet\n",[25,31992,31993,31995,31997,31999],{"class":27,"line":1734},[25,31994,30808],{"class":240},[25,31996,30811],{"class":244},[25,31998,30463],{"class":240},[25,32000,30816],{"class":244},[25,32002,32003],{"class":27,"line":1739},[25,32004,2510],{"emptyLinePlaceholder":167},[25,32006,32007],{"class":27,"line":1753},[25,32008,2510],{"emptyLinePlaceholder":167},[25,32010,32011],{"class":27,"line":1758},[25,32012,32013],{"class":302},"# 处理训练集与验证集函数--->划分数据集\n",[25,32015,32016,32019,32022],{"class":27,"line":1764},[25,32017,32018],{"class":240},"def",[25,32020,32021],{"class":31}," train_val_data_process",[25,32023,32024],{"class":244},"():\n",[25,32026,32027,32030,32032,32034,32036],{"class":27,"line":1785},[25,32028,32029],{"class":244},"    train_data",[25,32031,290],{"class":240},[25,32033,31526],{"class":244},[25,32035,31534],{"class":45},[25,32037,31537],{"class":244},[25,32039,32040,32043,32045,32047],{"class":27,"line":1790},[25,32041,32042],{"class":5326},"                            train",[25,32044,290],{"class":240},[25,32046,31547],{"class":35},[25,32048,31537],{"class":244},[25,32050,32051,32054,32056,32058,32060,32062,32064],{"class":27,"line":1804},[25,32052,32053],{"class":5326},"                            transform",[25,32055,290],{"class":240},[25,32057,31564],{"class":244},[25,32059,31567],{"class":5326},[25,32061,290],{"class":240},[25,32063,1144],{"class":35},[25,32065,31575],{"class":244},[25,32067,32068,32071,32073,32075],{"class":27,"line":1809},[25,32069,32070],{"class":5326},"                            download",[25,32072,290],{"class":240},[25,32074,31547],{"class":35},[25,32076,251],{"class":244},[25,32078,32079,32082,32084,32087,32090,32092,32095,32097,32099,32102,32104,32106,32109,32111,32113],{"class":27,"line":1838},[25,32080,32081],{"class":244},"    train_data,val_data",[25,32083,290],{"class":240},[25,32085,32086],{"class":244},"Data.random_split(train_data,[",[25,32088,32089],{"class":35},"round",[25,32091,245],{"class":244},[25,32093,32094],{"class":35},"0.8",[25,32096,698],{"class":240},[25,32098,7468],{"class":35},[25,32100,32101],{"class":244},"(train_data)),",[25,32103,32089],{"class":35},[25,32105,245],{"class":244},[25,32107,32108],{"class":35},"0.2",[25,32110,698],{"class":240},[25,32112,7468],{"class":35},[25,32114,32115],{"class":244},"(train_data))])\n",[25,32117,32118,32121,32123,32126,32128,32130],{"class":27,"line":1843},[25,32119,32120],{"class":244},"    train_dataloader ",[25,32122,290],{"class":240},[25,32124,32125],{"class":244}," Data.DataLoader(",[25,32127,31608],{"class":5326},[25,32129,290],{"class":240},[25,32131,31613],{"class":244},[25,32133,32134,32137,32139,32142],{"class":27,"line":1860},[25,32135,32136],{"class":5326},"                                       batch_size",[25,32138,290],{"class":240},[25,32140,32141],{"class":35},"128",[25,32143,31537],{"class":244},[25,32145,32146,32149,32151,32153],{"class":27,"line":1865},[25,32147,32148],{"class":5326},"                                       shuffle",[25,32150,290],{"class":240},[25,32152,31547],{"class":35},[25,32154,31537],{"class":244},[25,32156,32157],{"class":27,"line":1870},[25,32158,32159],{"class":302},"                                       # 规定8个进程\n",[25,32161,32162,32165,32167,32169],{"class":27,"line":1875},[25,32163,32164],{"class":5326},"                                       num_workers",[25,32166,290],{"class":240},[25,32168,638],{"class":35},[25,32170,251],{"class":244},[25,32172,32173,32176,32178,32180,32182,32184],{"class":27,"line":1889},[25,32174,32175],{"class":244},"    val_dataloader",[25,32177,290],{"class":240},[25,32179,31605],{"class":244},[25,32181,31608],{"class":5326},[25,32183,290],{"class":240},[25,32185,32186],{"class":244},"val_data,\n",[25,32188,32189,32192,32194,32196],{"class":27,"line":1894},[25,32190,32191],{"class":5326},"                                   batch_size",[25,32193,290],{"class":240},[25,32195,32141],{"class":35},[25,32197,31537],{"class":244},[25,32199,32200,32203,32205,32207],{"class":27,"line":2687},[25,32201,32202],{"class":5326},"                                   shuffle",[25,32204,290],{"class":240},[25,32206,31547],{"class":35},[25,32208,31537],{"class":244},[25,32210,32211,32214,32216,32218],{"class":27,"line":2701},[25,32212,32213],{"class":5326},"                                   num_workers",[25,32215,290],{"class":240},[25,32217,638],{"class":35},[25,32219,251],{"class":244},[25,32221,32222,32224],{"class":27,"line":2709},[25,32223,4200],{"class":240},[25,32225,32226],{"class":244}," train_dataloader,val_dataloader\n",[25,32228,32229],{"class":27,"line":2714},[25,32230,2510],{"emptyLinePlaceholder":167},[25,32232,32233],{"class":27,"line":2720},[25,32234,32235],{"class":302},"# 验证是否出错\n",[25,32237,32238],{"class":27,"line":2726},[25,32239,32240],{"class":302},"# train_val_data_process()\n",[25,32242,32243],{"class":27,"line":2731},[25,32244,2510],{"emptyLinePlaceholder":167},[25,32246,32247],{"class":27,"line":8058},[25,32248,32249],{"class":302},"# 定义模型训练函数\n",[25,32251,32252,32254,32257],{"class":27,"line":8082},[25,32253,32018],{"class":240},[25,32255,32256],{"class":31}," train_model_process",[25,32258,32259],{"class":244},"(model,train_dataloader,val_dataloader,num_epochs):\n",[25,32261,32262,32264,32266,32268,32270,32272,32274,32276,32279],{"class":27,"line":8087},[25,32263,31308],{"class":244},[25,32265,290],{"class":240},[25,32267,30522],{"class":244},[25,32269,31315],{"class":45},[25,32271,1815],{"class":240},[25,32273,31320],{"class":244},[25,32275,1812],{"class":240},[25,32277,32278],{"class":45}," 'cpu'",[25,32280,251],{"class":244},[25,32282,32283],{"class":27,"line":8093},[25,32284,2510],{"emptyLinePlaceholder":167},[25,32286,32287],{"class":27,"line":8120},[25,32288,2510],{"emptyLinePlaceholder":167},[25,32290,32291],{"class":27,"line":8125},[25,32292,32293],{"class":302},"    # 定义优化器\n",[25,32295,32296],{"class":27,"line":8131},[25,32297,32298],{"class":302},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[25,32300,32301],{"class":27,"line":8143},[25,32302,32303],{"class":302},"    # lr为学习率\n",[25,32305,32306,32309,32311,32314,32317,32319,32322],{"class":27,"line":8155},[25,32307,32308],{"class":244},"    optimizer",[25,32310,290],{"class":240},[25,32312,32313],{"class":244},"torch.optim.Adam(model.parameters(),",[25,32315,32316],{"class":5326},"lr",[25,32318,290],{"class":240},[25,32320,32321],{"class":35},"0.001",[25,32323,251],{"class":244},[25,32325,32326],{"class":27,"line":8167},[25,32327,2510],{"emptyLinePlaceholder":167},[25,32329,32330],{"class":27,"line":9826},[25,32331,32332],{"class":302},"    # 定义损失函数使用交叉熵损失函数\n",[25,32334,32335,32338,32340],{"class":27,"line":9851},[25,32336,32337],{"class":244},"    criterion",[25,32339,290],{"class":240},[25,32341,32342],{"class":244},"nn.CrossEntropyLoss()\n",[25,32344,32345],{"class":27,"line":9874},[25,32346,2510],{"emptyLinePlaceholder":167},[25,32348,32349],{"class":27,"line":9898},[25,32350,32351],{"class":302},"    # 将模型放到GPU中进行训练\n",[25,32353,32354,32356,32358],{"class":27,"line":9903},[25,32355,31360],{"class":244},[25,32357,290],{"class":240},[25,32359,32360],{"class":244},"model.to(device)\n",[25,32362,32363],{"class":27,"line":9908},[25,32364,32365],{"class":302},"    # 复制当前模型的参数\n",[25,32367,32368],{"class":27,"line":9913},[25,32369,32370],{"class":302},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[25,32372,32373],{"class":27,"line":9922},[25,32374,32375],{"class":302},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[25,32377,32378,32381,32383],{"class":27,"line":9927},[25,32379,32380],{"class":244},"    best_model_wts",[25,32382,290],{"class":240},[25,32384,32385],{"class":244},"copy.deepcopy(model.state_dict())\n",[25,32387,32388],{"class":27,"line":9933},[25,32389,2510],{"emptyLinePlaceholder":167},[25,32391,32392],{"class":27,"line":9954},[25,32393,2510],{"emptyLinePlaceholder":167},[25,32395,32396],{"class":27,"line":9960},[25,32397,32398],{"class":302},"    # 初始化参数\n",[25,32400,32401],{"class":27,"line":9974},[25,32402,32403],{"class":302},"    # 最高准确度\n",[25,32405,32406,32409,32411],{"class":27,"line":9980},[25,32407,32408],{"class":244},"    best_acc",[25,32410,290],{"class":240},[25,32412,32413],{"class":35},"0.0\n",[25,32415,32416],{"class":27,"line":10007},[25,32417,32418],{"class":302},"    # 训练集损失列表\n",[25,32420,32421,32424,32426],{"class":27,"line":10016},[25,32422,32423],{"class":244},"    train_loss_all",[25,32425,290],{"class":240},[25,32427,32428],{"class":244},"[]\n",[25,32430,32431],{"class":27,"line":10022},[25,32432,32433],{"class":302},"    # 验证集函数列表\n",[25,32435,32436,32439,32441],{"class":27,"line":10030},[25,32437,32438],{"class":244},"    val_loss_all",[25,32440,290],{"class":240},[25,32442,32428],{"class":244},[25,32444,32445],{"class":27,"line":10035},[25,32446,32447],{"class":302},"    # 训练集准确度列表\n",[25,32449,32450,32453,32455],{"class":27,"line":16714},[25,32451,32452],{"class":244},"    train_acc_all",[25,32454,290],{"class":240},[25,32456,32428],{"class":244},[25,32458,32459],{"class":27,"line":16720},[25,32460,32461],{"class":302},"    # 验证集准确度列表\n",[25,32463,32464,32467,32469],{"class":27,"line":16743},[25,32465,32466],{"class":244},"    val_acc_all",[25,32468,290],{"class":240},[25,32470,32428],{"class":244},[25,32472,32473],{"class":27,"line":16749},[25,32474,2510],{"emptyLinePlaceholder":167},[25,32476,32477],{"class":27,"line":16772},[25,32478,32479],{"class":302},"    # 保存当前时间--->方便看每轮训练的时间\n",[25,32481,32482,32485,32487],{"class":27,"line":16786},[25,32483,32484],{"class":244},"    since",[25,32486,290],{"class":240},[25,32488,32489],{"class":244},"time.time()\n",[25,32491,32492],{"class":27,"line":16806},[25,32493,2510],{"emptyLinePlaceholder":167},[25,32495,32496],{"class":27,"line":16812},[25,32497,2510],{"emptyLinePlaceholder":167},[25,32499,32500],{"class":27,"line":16823},[25,32501,32502],{"class":302},"    # 准备工作完成--->开始训练模型\n",[25,32504,32505,32507,32510,32512,32515],{"class":27,"line":16846},[25,32506,3311],{"class":240},[25,32508,32509],{"class":244}," epoch ",[25,32511,26114],{"class":240},[25,32513,32514],{"class":35}," range",[25,32516,32517],{"class":244},"(num_epochs):\n",[25,32519,32520,32523,32525,32528,32531,32533,32535,32537,32540,32542,32544],{"class":27,"line":16868},[25,32521,32522],{"class":35},"        print",[25,32524,245],{"class":244},[25,32526,32527],{"class":45},"\"Epoch ",[25,32529,32530],{"class":35},"{}",[25,32532,827],{"class":45},[25,32534,32530],{"class":35},[25,32536,494],{"class":45},[25,32538,32539],{"class":244},".format(epoch,num_epochs",[25,32541,775],{"class":240},[25,32543,460],{"class":35},[25,32545,30568],{"class":244},[25,32547,32548,32550,32552,32555,32557,32559],{"class":27,"line":16873},[25,32549,32522],{"class":35},[25,32551,245],{"class":244},[25,32553,32554],{"class":45},"\"-\"",[25,32556,698],{"class":240},[25,32558,689],{"class":35},[25,32560,251],{"class":244},[25,32562,32563],{"class":27,"line":16879},[25,32564,2510],{"emptyLinePlaceholder":167},[25,32566,32567],{"class":27,"line":16893},[25,32568,32569],{"class":302},"        # 初始化参数\n",[25,32571,32572],{"class":27,"line":16906},[25,32573,32574],{"class":302},"        # 训练集损失函数\n",[25,32576,32577,32580,32582],{"class":27,"line":16911},[25,32578,32579],{"class":244},"        train_loss",[25,32581,290],{"class":240},[25,32583,32413],{"class":35},[25,32585,32586],{"class":27,"line":16925},[25,32587,32588],{"class":302},"        # 训练集准确度\n",[25,32590,32591,32594,32596],{"class":27,"line":16930},[25,32592,32593],{"class":244},"        train_corrects",[25,32595,290],{"class":240},[25,32597,3195],{"class":35},[25,32599,32600],{"class":27,"line":16936},[25,32601,32602],{"class":302},"        # 验证集损失函数\n",[25,32604,32605,32608,32610],{"class":27,"line":16941},[25,32606,32607],{"class":244},"        val_loss",[25,32609,290],{"class":240},[25,32611,32413],{"class":35},[25,32613,32614],{"class":27,"line":16955},[25,32615,32616],{"class":302},"        # 验证集准确度\n",[25,32618,32619,32622,32624],{"class":27,"line":16960},[25,32620,32621],{"class":244},"        val_corrects",[25,32623,290],{"class":240},[25,32625,3195],{"class":35},[25,32627,32628],{"class":27,"line":16965},[25,32629,32630],{"class":302},"        # 训练集样本数量\n",[25,32632,32633,32636,32638],{"class":27,"line":16979},[25,32634,32635],{"class":244},"        train_num",[25,32637,290],{"class":240},[25,32639,3195],{"class":35},[25,32641,32642],{"class":27,"line":16991},[25,32643,32644],{"class":302},"        # 验证集样本数量\n",[25,32646,32647,32650,32652],{"class":27,"line":16996},[25,32648,32649],{"class":244},"        val_num",[25,32651,290],{"class":240},[25,32653,3195],{"class":35},[25,32655,32656],{"class":27,"line":17009},[25,32657,32658],{"class":302},"        # 将数据放到设备,并开始训练\n",[25,32660,32661,32663,32665,32667,32669],{"class":27,"line":17014},[25,32662,3513],{"class":240},[25,32664,31672],{"class":244},[25,32666,26114],{"class":240},[25,32668,31677],{"class":35},[25,32670,32671],{"class":244},"(train_dataloader):\n",[25,32673,32674],{"class":27,"line":17019},[25,32675,32676],{"class":302},"            # 将特征放入到训练设备\n",[25,32678,32679,32682,32684],{"class":27,"line":17024},[25,32680,32681],{"class":244},"            b_x",[25,32683,290],{"class":240},[25,32685,32686],{"class":244},"b_x.to(device)\n",[25,32688,32689],{"class":27,"line":17037},[25,32690,32691],{"class":302},"            # 将标签放入到训练设备当中\n",[25,32693,32694,32697,32699],{"class":27,"line":17042},[25,32695,32696],{"class":244},"            b_y",[25,32698,290],{"class":240},[25,32700,32701],{"class":244},"b_y.to(device)\n",[25,32703,32705],{"class":27,"line":32704},98,[25,32706,32707],{"class":302},"            # 设置模型为训练模式\n",[25,32709,32711],{"class":27,"line":32710},99,[25,32712,32713],{"class":244},"            model.train()\n",[25,32715,32717],{"class":27,"line":32716},100,[25,32718,32719],{"class":302},"            # 将数据放到模型当中,开始前向传播\n",[25,32721,32723],{"class":27,"line":32722},101,[25,32724,32725],{"class":302},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[25,32727,32729,32732,32734],{"class":27,"line":32728},102,[25,32730,32731],{"class":244},"            output",[25,32733,290],{"class":240},[25,32735,32736],{"class":244},"model(b_x)\n",[25,32738,32740],{"class":27,"line":32739},103,[25,32741,32742],{"class":302},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[25,32744,32746,32749,32751,32754,32757,32759,32761],{"class":27,"line":32745},104,[25,32747,32748],{"class":244},"            pre_lab",[25,32750,290],{"class":240},[25,32752,32753],{"class":244},"torch.argmax(output,",[25,32755,32756],{"class":5326},"dim",[25,32758,290],{"class":240},[25,32760,460],{"class":35},[25,32762,251],{"class":244},[25,32764,32766],{"class":27,"line":32765},105,[25,32767,32768],{"class":302},"            # 计算每一个batch的损失函数\n",[25,32770,32772,32775,32777],{"class":27,"line":32771},106,[25,32773,32774],{"class":244},"            loss",[25,32776,290],{"class":240},[25,32778,32779],{"class":244},"criterion(output,b_y)\n",[25,32781,32783],{"class":27,"line":32782},107,[25,32784,32785],{"class":302},"            # 将梯度初始化为0\n",[25,32787,32789],{"class":27,"line":32788},108,[25,32790,32791],{"class":244},"            optimizer.zero_grad()\n",[25,32793,32795],{"class":27,"line":32794},109,[25,32796,32797],{"class":302},"            # 梯度置为0后再进行反向传播\n",[25,32799,32801],{"class":27,"line":32800},110,[25,32802,32803],{"class":244},"            loss.backward()\n",[25,32805,32807],{"class":27,"line":32806},111,[25,32808,32809],{"class":302},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[25,32811,32813],{"class":27,"line":32812},112,[25,32814,32815],{"class":244},"            optimizer.step()\n",[25,32817,32819],{"class":27,"line":32818},113,[25,32820,32821],{"class":302},"            # loss.item()指的是batch的平均损失\n",[25,32823,32825,32828,32830,32833,32835,32838,32840],{"class":27,"line":32824},114,[25,32826,32827],{"class":244},"            train_loss",[25,32829,9587],{"class":240},[25,32831,32832],{"class":244},"loss.item()",[25,32834,698],{"class":240},[25,32836,32837],{"class":244},"b_x.size(",[25,32839,434],{"class":35},[25,32841,251],{"class":244},[25,32843,32845],{"class":27,"line":32844},115,[25,32846,32847],{"class":302},"            # 计算每个批次中正确预测的数量\n",[25,32849,32851,32854,32856,32859,32861],{"class":27,"line":32850},116,[25,32852,32853],{"class":244},"            train_corrects",[25,32855,9587],{"class":240},[25,32857,32858],{"class":244},"torch.sum(pre_lab",[25,32860,3059],{"class":240},[25,32862,32863],{"class":244},"b_y.data)\n",[25,32865,32867],{"class":27,"line":32866},117,[25,32868,32869],{"class":302},"            # 计算目前为止一共处理了多少样本\n",[25,32871,32873,32876,32878,32880,32882],{"class":27,"line":32872},118,[25,32874,32875],{"class":244},"            train_num",[25,32877,9587],{"class":240},[25,32879,32837],{"class":244},[25,32881,434],{"class":35},[25,32883,251],{"class":244},[25,32885,32887],{"class":27,"line":32886},119,[25,32888,32889],{"class":302},"        # 验证数据\n",[25,32891,32893,32895,32898,32900,32902],{"class":27,"line":32892},120,[25,32894,3513],{"class":240},[25,32896,32897],{"class":244}," step ,(b_x,b_y) ",[25,32899,26114],{"class":240},[25,32901,31677],{"class":35},[25,32903,32904],{"class":244},"(val_dataloader):\n",[25,32906,32908],{"class":27,"line":32907},121,[25,32909,32910],{"class":302},"            # 将特征放到验证设备当中\n",[25,32912,32914,32916,32918],{"class":27,"line":32913},122,[25,32915,32681],{"class":244},[25,32917,290],{"class":240},[25,32919,32686],{"class":244},[25,32921,32923],{"class":27,"line":32922},123,[25,32924,32925],{"class":302},"            # 将标签放到放到训练设备当中\n",[25,32927,32929,32931,32933],{"class":27,"line":32928},124,[25,32930,32696],{"class":244},[25,32932,290],{"class":240},[25,32934,32701],{"class":244},[25,32936,32938],{"class":27,"line":32937},125,[25,32939,32940],{"class":302},"            # 开启验证模式，设置模型为评估模式\n",[25,32942,32944],{"class":27,"line":32943},126,[25,32945,32946],{"class":244},"            model.eval()\n",[25,32948,32950,32953],{"class":27,"line":32949},127,[25,32951,32952],{"class":240},"            with",[25,32954,32955],{"class":244}," torch.no_grad():\n",[25,32957,32959],{"class":27,"line":32958},128,[25,32960,32961],{"class":302},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[25,32963,32965,32968,32970],{"class":27,"line":32964},129,[25,32966,32967],{"class":244},"                output ",[25,32969,290],{"class":240},[25,32971,32972],{"class":244}," model(b_x)\n",[25,32974,32976],{"class":27,"line":32975},130,[25,32977,32978],{"class":302},"                # 查找每一行中最大值对应的下标\n",[25,32980,32982,32985,32987,32990,32992,32994,32996],{"class":27,"line":32981},131,[25,32983,32984],{"class":244},"                pre_lab ",[25,32986,290],{"class":240},[25,32988,32989],{"class":244}," torch.argmax(output, ",[25,32991,32756],{"class":5326},[25,32993,290],{"class":240},[25,32995,460],{"class":35},[25,32997,251],{"class":244},[25,32999,33001],{"class":27,"line":33000},132,[25,33002,33003],{"class":302},"                # 计算验证集上的当前 batch 损失\n",[25,33005,33007,33010,33012],{"class":27,"line":33006},133,[25,33008,33009],{"class":244},"                val_batch_loss ",[25,33011,290],{"class":240},[25,33013,33014],{"class":244}," criterion(output, b_y)\n",[25,33016,33018],{"class":27,"line":33017},134,[25,33019,33020],{"class":302},"                # 对损失函数进行累加（按样本数加权）\n",[25,33022,33024,33027,33029,33032,33034,33037,33039],{"class":27,"line":33023},135,[25,33025,33026],{"class":244},"                val_loss ",[25,33028,9587],{"class":240},[25,33030,33031],{"class":244}," val_batch_loss.item() ",[25,33033,698],{"class":240},[25,33035,33036],{"class":244}," b_x.size(",[25,33038,434],{"class":35},[25,33040,251],{"class":244},[25,33042,33044,33047,33049,33052,33054],{"class":27,"line":33043},136,[25,33045,33046],{"class":244},"                val_corrects ",[25,33048,9587],{"class":240},[25,33050,33051],{"class":244}," torch.sum(pre_lab ",[25,33053,3059],{"class":240},[25,33055,33056],{"class":244}," b_y.data)\n",[25,33058,33060],{"class":27,"line":33059},137,[25,33061,33062],{"class":302},"                # 当前用于验证的样本数量\n",[25,33064,33066,33069,33071,33073,33075],{"class":27,"line":33065},138,[25,33067,33068],{"class":244},"            val_num ",[25,33070,9587],{"class":240},[25,33072,33036],{"class":244},[25,33074,434],{"class":35},[25,33076,251],{"class":244},[25,33078,33080],{"class":27,"line":33079},139,[25,33081,33082],{"class":302},"        # 计算并保存每一次迭代的loss值和准确率\n",[25,33084,33086],{"class":27,"line":33085},140,[25,33087,33088],{"class":302},"        # 计算并保存训练集的loss值\n",[25,33090,33092,33095,33097],{"class":27,"line":33091},141,[25,33093,33094],{"class":244},"        train_loss_all.append(train_loss",[25,33096,827],{"class":240},[25,33098,33099],{"class":244},"train_num)\n",[25,33101,33103],{"class":27,"line":33102},142,[25,33104,33105],{"class":302},"        # 取双精度\n",[25,33107,33109],{"class":27,"line":33108},143,[25,33110,33111],{"class":302},"        # 计算并保存训练集的准确率\n",[25,33113,33115,33118,33120],{"class":27,"line":33114},144,[25,33116,33117],{"class":244},"        train_acc_all.append(train_corrects.double().item()",[25,33119,827],{"class":240},[25,33121,33099],{"class":244},[25,33123,33125],{"class":27,"line":33124},145,[25,33126,33127],{"class":302},"        # 计算并保存验证集的loss值\n",[25,33129,33131,33134,33136],{"class":27,"line":33130},146,[25,33132,33133],{"class":244},"        val_loss_all.append(val_loss",[25,33135,827],{"class":240},[25,33137,33138],{"class":244},"val_num)\n",[25,33140,33142],{"class":27,"line":33141},147,[25,33143,33144],{"class":302},"        # 计算并保存验证集的准确率\n",[25,33146,33148,33151,33153],{"class":27,"line":33147},148,[25,33149,33150],{"class":244},"        val_acc_all.append(val_corrects.double().item()",[25,33152,827],{"class":240},[25,33154,33138],{"class":244},[25,33156,33158],{"class":27,"line":33157},149,[25,33159,2510],{"emptyLinePlaceholder":167},[25,33161,33163],{"class":27,"line":33162},150,[25,33164,33165],{"class":302},"        # 打印训练一轮的loss值和准确率\n",[25,33167,33169,33171,33173,33175,33177,33180,33182,33185,33187,33190,33192,33194,33196,33198,33201,33203,33205,33208,33210,33212],{"class":27,"line":33168},151,[25,33170,32522],{"class":35},[25,33172,245],{"class":244},[25,33174,3702],{"class":45},[25,33176,32530],{"class":35},[25,33178,33179],{"class":45},"train loss:",[25,33181,1139],{"class":35},[25,33183,33184],{"class":240},":.4f",[25,33186,1189],{"class":35},[25,33188,33189],{"class":45}," train acc:",[25,33191,1139],{"class":35},[25,33193,33184],{"class":240},[25,33195,1189],{"class":35},[25,33197,3702],{"class":45},[25,33199,33200],{"class":244},".format(epoch,train_loss_all[",[25,33202,775],{"class":240},[25,33204,460],{"class":35},[25,33206,33207],{"class":244},"],train_acc_all[",[25,33209,775],{"class":240},[25,33211,460],{"class":35},[25,33213,33214],{"class":244},"]))\n",[25,33216,33218,33220,33222,33224,33226,33229,33231,33233,33235,33238,33240,33242,33244,33246,33249,33251,33253,33256,33258,33260],{"class":27,"line":33217},152,[25,33219,32522],{"class":35},[25,33221,245],{"class":244},[25,33223,3702],{"class":45},[25,33225,32530],{"class":35},[25,33227,33228],{"class":45},"val loss:",[25,33230,1139],{"class":35},[25,33232,33184],{"class":240},[25,33234,1189],{"class":35},[25,33236,33237],{"class":45}," val acc:",[25,33239,1139],{"class":35},[25,33241,33184],{"class":240},[25,33243,1189],{"class":35},[25,33245,3702],{"class":45},[25,33247,33248],{"class":244},".format(epoch,val_loss_all[",[25,33250,775],{"class":240},[25,33252,460],{"class":35},[25,33254,33255],{"class":244},"],val_acc_all[",[25,33257,775],{"class":240},[25,33259,460],{"class":35},[25,33261,33214],{"class":244},[25,33263,33265],{"class":27,"line":33264},153,[25,33266,2510],{"emptyLinePlaceholder":167},[25,33268,33270],{"class":27,"line":33269},154,[25,33271,33272],{"class":302},"        # 判断准确度--->保存最优模型\n",[25,33274,33276,33278,33281,33283,33285,33287,33289],{"class":27,"line":33275},155,[25,33277,2607],{"class":240},[25,33279,33280],{"class":244}," val_acc_all[",[25,33282,775],{"class":240},[25,33284,460],{"class":35},[25,33286,1183],{"class":244},[25,33288,1203],{"class":240},[25,33290,33291],{"class":244},"best_acc:\n",[25,33293,33295],{"class":27,"line":33294},156,[25,33296,33297],{"class":302},"            # 保存当前模型准确度\n",[25,33299,33301,33304,33306,33308,33311,33313,33315],{"class":27,"line":33300},157,[25,33302,33303],{"class":244},"            best_acc:",[25,33305,284],{"class":35},[25,33307,290],{"class":240},[25,33309,33310],{"class":244},"val_acc_all[",[25,33312,775],{"class":240},[25,33314,460],{"class":35},[25,33316,33317],{"class":244},"]\n",[25,33319,33321],{"class":27,"line":33320},158,[25,33322,33323],{"class":302},"            # 保存当前的准确度\n",[25,33325,33327],{"class":27,"line":33326},159,[25,33328,33329],{"class":302},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[25,33331,33333,33336,33338],{"class":27,"line":33332},160,[25,33334,33335],{"class":244},"            best_model_wts",[25,33337,290],{"class":240},[25,33339,32385],{"class":244},[25,33341,33343],{"class":27,"line":33342},161,[25,33344,2510],{"emptyLinePlaceholder":167},[25,33346,33348],{"class":27,"line":33347},162,[25,33349,33350],{"class":302},"        # 计算耗时\n",[25,33352,33354,33357,33359,33362,33364],{"class":27,"line":33353},163,[25,33355,33356],{"class":244},"        time_use",[25,33358,290],{"class":240},[25,33360,33361],{"class":244},"time.time()",[25,33363,775],{"class":240},[25,33365,33366],{"class":244},"since\n",[25,33368,33370,33372,33374,33377,33379,33382,33384,33386,33388,33390,33392,33395,33398,33401,33403,33406,33408,33410],{"class":27,"line":33369},164,[25,33371,32522],{"class":35},[25,33373,245],{"class":244},[25,33375,33376],{"class":45},"'训练和验证耗费的时间",[25,33378,1139],{"class":35},[25,33380,33381],{"class":240},":.0f",[25,33383,1189],{"class":35},[25,33385,787],{"class":45},[25,33387,1139],{"class":35},[25,33389,33381],{"class":240},[25,33391,1189],{"class":35},[25,33393,33394],{"class":45},"s'",[25,33396,33397],{"class":244},".format(time_use",[25,33399,33400],{"class":240},"\u002F\u002F",[25,33402,1150],{"class":35},[25,33404,33405],{"class":244},",time_use",[25,33407,571],{"class":240},[25,33409,1150],{"class":35},[25,33411,30568],{"class":244},[25,33413,33415],{"class":27,"line":33414},165,[25,33416,33417],{"class":302},"    # 选择最优参数\n",[25,33419,33421],{"class":27,"line":33420},166,[25,33422,33423],{"class":302},"    # 加载最高准确率下的模型参数\n",[25,33425,33427],{"class":27,"line":33426},167,[25,33428,33429],{"class":302},"    # model.load_state_dict(best_model_wts)\n",[25,33431,33433,33436,33439],{"class":27,"line":33432},168,[25,33434,33435],{"class":244},"    torch.save(model.state_dict(best_model_wts), ",[25,33437,33438],{"class":45},"'.\u002Fbest_model.pth'",[25,33440,251],{"class":244},[25,33442,33444],{"class":27,"line":33443},169,[25,33445,33446],{"class":302},"    # 或者写成\n",[25,33448,33450],{"class":27,"line":33449},170,[25,33451,33452],{"class":302},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[25,33454,33456],{"class":27,"line":33455},171,[25,33457,33458],{"class":302},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[25,33460,33462,33465,33467,33470,33473,33475],{"class":27,"line":33461},172,[25,33463,33464],{"class":244},"    train_process",[25,33466,290],{"class":240},[25,33468,33469],{"class":244},"pd.DataFrame(",[25,33471,33472],{"class":5326},"data",[25,33474,290],{"class":240},[25,33476,1657],{"class":244},[25,33478,33480,33483,33485,33488],{"class":27,"line":33479},173,[25,33481,33482],{"class":45},"        \"epoch\"",[25,33484,1102],{"class":244},[25,33486,33487],{"class":35},"range",[25,33489,33490],{"class":244},"(num_epochs),\n",[25,33492,33494,33497],{"class":27,"line":33493},174,[25,33495,33496],{"class":45},"        \"train_loss_all\"",[25,33498,33499],{"class":244},":train_loss_all,\n",[25,33501,33503,33506],{"class":27,"line":33502},175,[25,33504,33505],{"class":45},"        \"val_loss_all\"",[25,33507,33508],{"class":244},":val_loss_all,\n",[25,33510,33512,33515],{"class":27,"line":33511},176,[25,33513,33514],{"class":45},"        \"train_acc_all\"",[25,33516,33517],{"class":244},":train_acc_all,\n",[25,33519,33521,33524],{"class":27,"line":33520},177,[25,33522,33523],{"class":45},"        \"val_acc_all\"",[25,33525,33526],{"class":244},":val_acc_all\n",[25,33528,33530],{"class":27,"line":33529},178,[25,33531,33532],{"class":244},"    })\n",[25,33534,33536],{"class":27,"line":33535},179,[25,33537,33538],{"class":302},"    # 返回训练保存的过程\n",[25,33540,33542,33544],{"class":27,"line":33541},180,[25,33543,4200],{"class":240},[25,33545,33546],{"class":244}," train_process\n",[25,33548,33550],{"class":27,"line":33549},181,[25,33551,2510],{"emptyLinePlaceholder":167},[25,33553,33555],{"class":27,"line":33554},182,[25,33556,33557],{"class":302},"# 将loss值和精度按照图片的形式展示出来\n",[25,33559,33561,33563,33566],{"class":27,"line":33560},183,[25,33562,32018],{"class":240},[25,33564,33565],{"class":31}," matplot_acc_loss",[25,33567,33568],{"class":244},"(train_process):\n",[25,33570,33572],{"class":27,"line":33571},184,[25,33573,33574],{"class":302},"    # 设置图的大小\n",[25,33576,33578,33581,33583,33585,33587,33589,33591,33593],{"class":27,"line":33577},185,[25,33579,33580],{"class":244},"    plt.figure(",[25,33582,31764],{"class":5326},[25,33584,290],{"class":240},[25,33586,245],{"class":244},[25,33588,741],{"class":35},[25,33590,621],{"class":244},[25,33592,536],{"class":35},[25,33594,30568],{"class":244},[25,33596,33598],{"class":27,"line":33597},186,[25,33599,33600],{"class":302},"    # 设置图中有几张图\n",[25,33602,33604],{"class":27,"line":33603},187,[25,33605,33606],{"class":302},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[25,33608,33610],{"class":27,"line":33609},188,[25,33611,33612],{"class":302},"    # ①loss图\n",[25,33614,33616,33618,33620,33622,33624,33626,33628],{"class":27,"line":33615},189,[25,33617,31798],{"class":244},[25,33619,460],{"class":35},[25,33621,621],{"class":244},[25,33623,321],{"class":35},[25,33625,621],{"class":244},[25,33627,460],{"class":35},[25,33629,251],{"class":244},[25,33631,33633],{"class":27,"line":33632},190,[25,33634,33635],{"class":302},"    # 补充:\n",[25,33637,33639],{"class":27,"line":33638},191,[25,33640,33641],{"class":302},"    # plt.subplot(nrows, ncols, index)\n",[25,33643,33645],{"class":27,"line":33644},192,[25,33646,33647],{"class":302},"    # nrows：行数\n",[25,33649,33651],{"class":27,"line":33650},193,[25,33652,33653],{"class":302},"    # ncols：列数\n",[25,33655,33657],{"class":27,"line":33656},194,[25,33658,33659],{"class":302},"    # index：目前选中第几个子图（从1开始）\n",[25,33661,33663,33666,33669,33672,33675,33677,33680,33682,33685],{"class":27,"line":33662},195,[25,33664,33665],{"class":244},"    plt.plot(train_process[",[25,33667,33668],{"class":45},"\"epoch\"",[25,33670,33671],{"class":244},"],train_process.train_loss_all,",[25,33673,33674],{"class":45},"'ro-'",[25,33676,621],{"class":244},[25,33678,33679],{"class":5326},"label",[25,33681,290],{"class":240},[25,33683,33684],{"class":45},"'train loss'",[25,33686,251],{"class":244},[25,33688,33690,33692,33694,33697,33700,33702,33704,33706,33709],{"class":27,"line":33689},196,[25,33691,33665],{"class":244},[25,33693,33668],{"class":45},[25,33695,33696],{"class":244},"],train_process.val_loss_all,",[25,33698,33699],{"class":45},"'bs--'",[25,33701,621],{"class":244},[25,33703,33679],{"class":5326},[25,33705,290],{"class":240},[25,33707,33708],{"class":45},"'val loss'",[25,33710,251],{"class":244},[25,33712,33714],{"class":27,"line":33713},197,[25,33715,33716],{"class":302},"    # 添加一个图例\n",[25,33718,33720],{"class":27,"line":33719},198,[25,33721,33722],{"class":244},"    plt.legend()\n",[25,33724,33726],{"class":27,"line":33725},199,[25,33727,33728],{"class":302},"    # 给轴添加标签\n",[25,33730,33732,33735,33738],{"class":27,"line":33731},200,[25,33733,33734],{"class":244},"    plt.xlabel(",[25,33736,33737],{"class":45},"'epoch'",[25,33739,251],{"class":244},[25,33741,33743,33746,33749],{"class":27,"line":33742},201,[25,33744,33745],{"class":244},"    plt.ylabel(",[25,33747,33748],{"class":45},"'loss'",[25,33750,251],{"class":244},[25,33752,33754],{"class":27,"line":33753},202,[25,33755,33756],{"class":302},"    # ②准确度图\n",[25,33758,33760,33762,33764,33766,33768,33770,33772],{"class":27,"line":33759},203,[25,33761,31798],{"class":244},[25,33763,460],{"class":35},[25,33765,621],{"class":244},[25,33767,321],{"class":35},[25,33769,621],{"class":244},[25,33771,321],{"class":35},[25,33773,251],{"class":244},[25,33775,33777,33779,33781,33784,33786,33788,33790,33792,33795],{"class":27,"line":33776},204,[25,33778,33665],{"class":244},[25,33780,33668],{"class":45},[25,33782,33783],{"class":244},"],train_process.train_acc_all,",[25,33785,33674],{"class":45},[25,33787,621],{"class":244},[25,33789,33679],{"class":5326},[25,33791,290],{"class":240},[25,33793,33794],{"class":45},"'train acc'",[25,33796,251],{"class":244},[25,33798,33800,33802,33804,33807,33809,33811,33813,33815,33818],{"class":27,"line":33799},205,[25,33801,33665],{"class":244},[25,33803,33668],{"class":45},[25,33805,33806],{"class":244},"],train_process.val_acc_all,",[25,33808,33699],{"class":45},[25,33810,621],{"class":244},[25,33812,33679],{"class":5326},[25,33814,290],{"class":240},[25,33816,33817],{"class":45},"'val acc'",[25,33819,251],{"class":244},[25,33821,33823],{"class":27,"line":33822},206,[25,33824,33825],{"class":302},"    # 添加图例\n",[25,33827,33829],{"class":27,"line":33828},207,[25,33830,33722],{"class":244},[25,33832,33834,33836,33838],{"class":27,"line":33833},208,[25,33835,33734],{"class":244},[25,33837,33668],{"class":45},[25,33839,251],{"class":244},[25,33841,33843,33845,33848],{"class":27,"line":33842},209,[25,33844,33745],{"class":244},[25,33846,33847],{"class":45},"\"acc\"",[25,33849,251],{"class":244},[25,33851,33853],{"class":27,"line":33852},210,[25,33854,33855],{"class":244},"    plt.show()\n",[25,33857,33859],{"class":27,"line":33858},211,[25,33860,2510],{"emptyLinePlaceholder":167},[25,33862,33864],{"class":27,"line":33863},212,[25,33865,33866],{"class":302},"# 正式开始训练:\n",[25,33868,33870,33872,33874,33876,33878],{"class":27,"line":33869},213,[25,33871,1642],{"class":240},[25,33873,31291],{"class":35},[25,33875,3059],{"class":240},[25,33877,31296],{"class":45},[25,33879,3849],{"class":244},[25,33881,33883],{"class":27,"line":33882},214,[25,33884,33885],{"class":302},"    # 将模型实例化\n",[25,33887,33889,33892,33894],{"class":27,"line":33888},215,[25,33890,33891],{"class":244},"    LeNet",[25,33893,290],{"class":240},[25,33895,33896],{"class":244},"LeNet()\n",[25,33898,33900,33903,33905],{"class":27,"line":33899},216,[25,33901,33902],{"class":244},"    train_dataloader,val_dataloader",[25,33904,290],{"class":240},[25,33906,33907],{"class":244},"train_val_data_process()\n",[25,33909,33911,33913,33915,33918,33921,33923,33925],{"class":27,"line":33910},217,[25,33912,33464],{"class":244},[25,33914,290],{"class":240},[25,33916,33917],{"class":244},"train_model_process(LeNet,train_dataloader,val_dataloader,",[25,33919,33920],{"class":5326},"num_epochs",[25,33922,290],{"class":240},[25,33924,943],{"class":35},[25,33926,251],{"class":244},[25,33928,33930],{"class":27,"line":33929},218,[25,33931,33932],{"class":244},"    matplot_acc_loss(train_process)\n",[99,33934,33935],{},"画图的补充点学习：",[99,33937,33938],{},[155,33939],{"alt":20,"src":33940},"\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",[194,33942,33943],{"start":51},[106,33944,33945],{},"测试",[15,33947,33949],{"className":30449,"code":33948,"language":30451,"meta":20,"style":20},"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",[22,33950,33951,33957,33967,33979,33989,33994,34004,34014,34018,34023,34032,34049,34061,34078,34089,34105,34110,34121,34132,34143,34150,34154,34159,34169,34174,34191,34199,34203,34208,34217,34226,34230,34235,34240,34245,34252,34257,34269,34279,34289,34294,34298,34303,34312,34317,34333,34338,34343,34348,34362,34367,34381,34385,34390,34405,34410,34422,34426,34431,34443,34448,34456,34461,34466,34476,34481,34490,34495,34500,34504,34509,34514,34530,34538,34543,34548,34607,34613,34618,34629,34637,34645,34649,34654,34658,34663,34671,34676,34692,34697,34707,34717],{"__ignoreMap":20},[25,33952,33953,33955],{"class":27,"line":28},[25,33954,30463],{"class":240},[25,33956,30466],{"class":244},[25,33958,33959,33961,33963,33965],{"class":27,"line":39},[25,33960,30463],{"class":240},[25,33962,31486],{"class":244},[25,33964,31454],{"class":240},[25,33966,31491],{"class":244},[25,33968,33969,33971,33974,33976],{"class":27,"line":51},[25,33970,30808],{"class":240},[25,33972,33973],{"class":244}," jupyter_client.consoleapp ",[25,33975,30463],{"class":240},[25,33977,33978],{"class":244}," classes\n",[25,33980,33981,33983,33985,33987],{"class":27,"line":59},[25,33982,30808],{"class":240},[25,33984,31469],{"class":244},[25,33986,30463],{"class":240},[25,33988,31474],{"class":244},[25,33990,33991],{"class":27,"line":67},[25,33992,33993],{"class":302},"# 导入数据集\n",[25,33995,33996,33998,34000,34002],{"class":27,"line":75},[25,33997,30808],{"class":240},[25,33999,31439],{"class":244},[25,34001,30463],{"class":240},[25,34003,31444],{"class":244},[25,34005,34006,34008,34010,34012],{"class":27,"line":83},[25,34007,30808],{"class":240},[25,34009,31985],{"class":244},[25,34011,30463],{"class":240},[25,34013,31990],{"class":244},[25,34015,34016],{"class":27,"line":91},[25,34017,2510],{"emptyLinePlaceholder":167},[25,34019,34020],{"class":27,"line":1429},[25,34021,34022],{"class":302},"# 测试数据处理\n",[25,34024,34025,34027,34030],{"class":27,"line":1441},[25,34026,32018],{"class":240},[25,34028,34029],{"class":31}," test_data_process",[25,34031,32024],{"class":244},[25,34033,34034,34037,34039,34041,34043,34045,34047],{"class":27,"line":1723},[25,34035,34036],{"class":244},"    test_data",[25,34038,290],{"class":240},[25,34040,31526],{"class":244},[25,34042,31529],{"class":5326},[25,34044,290],{"class":240},[25,34046,31534],{"class":45},[25,34048,31537],{"class":244},[25,34050,34051,34054,34056,34059],{"class":27,"line":1728},[25,34052,34053],{"class":5326},"                           train",[25,34055,290],{"class":240},[25,34057,34058],{"class":35},"False",[25,34060,31537],{"class":244},[25,34062,34063,34066,34068,34070,34072,34074,34076],{"class":27,"line":1734},[25,34064,34065],{"class":5326},"                           transform",[25,34067,290],{"class":240},[25,34069,31564],{"class":244},[25,34071,31567],{"class":5326},[25,34073,290],{"class":240},[25,34075,1144],{"class":35},[25,34077,31575],{"class":244},[25,34079,34080,34083,34085,34087],{"class":27,"line":1739},[25,34081,34082],{"class":5326},"                           download",[25,34084,290],{"class":240},[25,34086,31547],{"class":35},[25,34088,251],{"class":244},[25,34090,34091,34094,34096,34098,34100,34102],{"class":27,"line":1753},[25,34092,34093],{"class":244},"    test_dataloader",[25,34095,290],{"class":240},[25,34097,31605],{"class":244},[25,34099,31608],{"class":5326},[25,34101,290],{"class":240},[25,34103,34104],{"class":244},"test_data,\n",[25,34106,34107],{"class":27,"line":1758},[25,34108,34109],{"class":302},"                                    # 这里是一张一张进行测试\n",[25,34111,34112,34115,34117,34119],{"class":27,"line":1764},[25,34113,34114],{"class":5326},"                                    batch_size",[25,34116,290],{"class":240},[25,34118,460],{"class":35},[25,34120,31537],{"class":244},[25,34122,34123,34126,34128,34130],{"class":27,"line":1785},[25,34124,34125],{"class":5326},"                                    shuffle",[25,34127,290],{"class":240},[25,34129,31547],{"class":35},[25,34131,31537],{"class":244},[25,34133,34134,34137,34139,34141],{"class":27,"line":1790},[25,34135,34136],{"class":5326},"                                    num_workers",[25,34138,290],{"class":240},[25,34140,434],{"class":35},[25,34142,251],{"class":244},[25,34144,34145,34147],{"class":27,"line":1804},[25,34146,4200],{"class":240},[25,34148,34149],{"class":244}," test_dataloader\n",[25,34151,34152],{"class":27,"line":1809},[25,34153,2510],{"emptyLinePlaceholder":167},[25,34155,34156],{"class":27,"line":1838},[25,34157,34158],{"class":302},"# 定义模型测试函数\n",[25,34160,34161,34163,34166],{"class":27,"line":1843},[25,34162,32018],{"class":240},[25,34164,34165],{"class":31}," test_model_process",[25,34167,34168],{"class":244},"(model,test_dataloader):\n",[25,34170,34171],{"class":27,"line":1860},[25,34172,34173],{"class":302},"    # 将模型放到设备当中，先进行判断\n",[25,34175,34176,34178,34180,34182,34184,34186,34188],{"class":27,"line":1865},[25,34177,31308],{"class":244},[25,34179,290],{"class":240},[25,34181,31315],{"class":45},[25,34183,1815],{"class":240},[25,34185,31320],{"class":244},[25,34187,1812],{"class":240},[25,34189,34190],{"class":45}," \"cpu\"\n",[25,34192,34193,34195,34197],{"class":27,"line":1870},[25,34194,31360],{"class":244},[25,34196,290],{"class":240},[25,34198,32360],{"class":244},[25,34200,34201],{"class":27,"line":1875},[25,34202,2510],{"emptyLinePlaceholder":167},[25,34204,34205],{"class":27,"line":1889},[25,34206,34207],{"class":302},"    # 设置初始化参数\n",[25,34209,34210,34213,34215],{"class":27,"line":1894},[25,34211,34212],{"class":244},"    test_corrects",[25,34214,290],{"class":240},[25,34216,32413],{"class":35},[25,34218,34219,34222,34224],{"class":27,"line":2687},[25,34220,34221],{"class":244},"    test_num",[25,34223,290],{"class":240},[25,34225,3195],{"class":35},[25,34227,34228],{"class":27,"line":2701},[25,34229,2510],{"emptyLinePlaceholder":167},[25,34231,34232],{"class":27,"line":2709},[25,34233,34234],{"class":302},"    # 进行模型测试\n",[25,34236,34237],{"class":27,"line":2714},[25,34238,34239],{"class":302},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[25,34241,34242],{"class":27,"line":2720},[25,34243,34244],{"class":302},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[25,34246,34247,34250],{"class":27,"line":2726},[25,34248,34249],{"class":240},"    with",[25,34251,32955],{"class":244},[25,34253,34254],{"class":27,"line":2731},[25,34255,34256],{"class":302},"        # 从数据中进行\n",[25,34258,34259,34261,34264,34266],{"class":27,"line":8058},[25,34260,3513],{"class":240},[25,34262,34263],{"class":244}," test_data_x,test_data_y ",[25,34265,26114],{"class":240},[25,34267,34268],{"class":244}," test_dataloader:\n",[25,34270,34271,34274,34276],{"class":27,"line":8082},[25,34272,34273],{"class":244},"            test_data_x",[25,34275,290],{"class":240},[25,34277,34278],{"class":244},"test_data_x.to(device)\n",[25,34280,34281,34284,34286],{"class":27,"line":8087},[25,34282,34283],{"class":244},"            test_data_y",[25,34285,290],{"class":240},[25,34287,34288],{"class":244},"test_data_y.to(device)\n",[25,34290,34291],{"class":27,"line":8093},[25,34292,34293],{"class":302},"            # 设置为验证模式\n",[25,34295,34296],{"class":27,"line":8120},[25,34297,32946],{"class":244},[25,34299,34300],{"class":27,"line":8125},[25,34301,34302],{"class":302},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[25,34304,34305,34307,34309],{"class":27,"line":8131},[25,34306,32731],{"class":244},[25,34308,290],{"class":240},[25,34310,34311],{"class":244},"model(test_data_x)\n",[25,34313,34314],{"class":27,"line":8143},[25,34315,34316],{"class":302},"            # 查找每一行中最大值对应的下标\n",[25,34318,34319,34321,34323,34325,34327,34329,34331],{"class":27,"line":8155},[25,34320,32748],{"class":244},[25,34322,290],{"class":240},[25,34324,32753],{"class":244},[25,34326,32756],{"class":5326},[25,34328,290],{"class":240},[25,34330,460],{"class":35},[25,34332,251],{"class":244},[25,34334,34335],{"class":27,"line":8167},[25,34336,34337],{"class":302},"            # 计算正确率\n",[25,34339,34340],{"class":27,"line":9826},[25,34341,34342],{"class":302},"            # .data表示是一个不带梯度信息的tensor\n",[25,34344,34345],{"class":27,"line":9851},[25,34346,34347],{"class":302},"            # 如果预测正确，则准确度test_corrects加1\n",[25,34349,34350,34353,34355,34357,34359],{"class":27,"line":9874},[25,34351,34352],{"class":244},"            test_corrects",[25,34354,9587],{"class":240},[25,34356,32858],{"class":244},[25,34358,3059],{"class":240},[25,34360,34361],{"class":244},"test_data_y.data)\n",[25,34363,34364],{"class":27,"line":9898},[25,34365,34366],{"class":302},"            # 将所有的测试样本进行累计\n",[25,34368,34369,34372,34374,34377,34379],{"class":27,"line":9903},[25,34370,34371],{"class":244},"            test_num",[25,34373,9587],{"class":240},[25,34375,34376],{"class":244},"test_data_x.size(",[25,34378,434],{"class":35},[25,34380,251],{"class":244},[25,34382,34383],{"class":27,"line":9908},[25,34384,2510],{"emptyLinePlaceholder":167},[25,34386,34387],{"class":27,"line":9913},[25,34388,34389],{"class":302},"        # 计算准确度\n",[25,34391,34392,34395,34397,34400,34402],{"class":27,"line":9922},[25,34393,34394],{"class":244},"        test_acc",[25,34396,290],{"class":240},[25,34398,34399],{"class":244},"test_corrects.double().item()",[25,34401,827],{"class":240},[25,34403,34404],{"class":244},"test_num\n",[25,34406,34407],{"class":27,"line":9927},[25,34408,34409],{"class":302},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[25,34411,34412,34414,34416,34419],{"class":27,"line":9933},[25,34413,32522],{"class":35},[25,34415,245],{"class":244},[25,34417,34418],{"class":45},"\"测试的准确率：\"",[25,34420,34421],{"class":244},",test_acc)\n",[25,34423,34424],{"class":27,"line":9954},[25,34425,2510],{"emptyLinePlaceholder":167},[25,34427,34428],{"class":27,"line":9960},[25,34429,34430],{"class":302},"# 实现模型的测试功能\n",[25,34432,34433,34435,34437,34439,34441],{"class":27,"line":9974},[25,34434,1642],{"class":240},[25,34436,31291],{"class":35},[25,34438,3059],{"class":240},[25,34440,31296],{"class":45},[25,34442,3849],{"class":244},[25,34444,34445],{"class":27,"line":9980},[25,34446,34447],{"class":302},"    # 加载模型\n",[25,34449,34450,34452,34454],{"class":27,"line":10007},[25,34451,31360],{"class":244},[25,34453,290],{"class":240},[25,34455,33896],{"class":244},[25,34457,34458],{"class":27,"line":10016},[25,34459,34460],{"class":302},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[25,34462,34463],{"class":27,"line":10022},[25,34464,34465],{"class":302},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[25,34467,34468,34471,34474],{"class":27,"line":10030},[25,34469,34470],{"class":244},"    model.load_state_dict(torch.load(",[25,34472,34473],{"class":45},"'best_model.pth'",[25,34475,30568],{"class":244},[25,34477,34478],{"class":27,"line":10035},[25,34479,34480],{"class":302},"    # 数据加载\n",[25,34482,34483,34485,34487],{"class":27,"line":16714},[25,34484,34093],{"class":244},[25,34486,290],{"class":240},[25,34488,34489],{"class":244},"test_data_process()\n",[25,34491,34492],{"class":27,"line":16720},[25,34493,34494],{"class":302},"    # 加载模型测试的函数\n",[25,34496,34497],{"class":27,"line":16743},[25,34498,34499],{"class":244},"    test_model_process(model,test_dataloader)\n",[25,34501,34502],{"class":27,"line":16749},[25,34503,2510],{"emptyLinePlaceholder":167},[25,34505,34506],{"class":27,"line":16772},[25,34507,34508],{"class":302},"    # 验证集推理实现：\n",[25,34510,34511],{"class":27,"line":16786},[25,34512,34513],{"class":302},"    # 加载数据加载的更详细一些\n",[25,34515,34516,34518,34520,34522,34524,34526,34528],{"class":27,"line":16806},[25,34517,31308],{"class":244},[25,34519,290],{"class":240},[25,34521,31315],{"class":45},[25,34523,1815],{"class":240},[25,34525,31320],{"class":244},[25,34527,1812],{"class":240},[25,34529,34190],{"class":45},[25,34531,34532,34534,34536],{"class":27,"line":16812},[25,34533,31360],{"class":244},[25,34535,290],{"class":240},[25,34537,32360],{"class":244},[25,34539,34540],{"class":27,"line":16823},[25,34541,34542],{"class":302},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[25,34544,34545],{"class":27,"line":16846},[25,34546,34547],{"class":302},"    # 顺序不可改变\n",[25,34549,34550,34553,34555,34557,34560,34562,34565,34567,34570,34572,34575,34577,34580,34582,34585,34587,34590,34592,34595,34597,34600,34602,34605],{"class":27,"line":16868},[25,34551,34552],{"class":244},"    classes",[25,34554,290],{"class":240},[25,34556,1133],{"class":244},[25,34558,34559],{"class":45},"'T-shirt\u002Ftop'",[25,34561,621],{"class":244},[25,34563,34564],{"class":45},"'Trouser'",[25,34566,621],{"class":244},[25,34568,34569],{"class":45},"'Pullover'",[25,34571,621],{"class":244},[25,34573,34574],{"class":45},"'Dress'",[25,34576,621],{"class":244},[25,34578,34579],{"class":45},"'Coat'",[25,34581,621],{"class":244},[25,34583,34584],{"class":45},"'Sandal'",[25,34586,621],{"class":244},[25,34588,34589],{"class":45},"'Shirt'",[25,34591,621],{"class":244},[25,34593,34594],{"class":45},"'Sneaker'",[25,34596,621],{"class":244},[25,34598,34599],{"class":45},"'Bag'",[25,34601,621],{"class":244},[25,34603,34604],{"class":45},"'Ankle boot'",[25,34606,33317],{"class":244},[25,34608,34609,34611],{"class":27,"line":16873},[25,34610,34249],{"class":240},[25,34612,32955],{"class":244},[25,34614,34615],{"class":27,"line":16879},[25,34616,34617],{"class":302},"        # 将数据和标签都放到设备当中\n",[25,34619,34620,34622,34625,34627],{"class":27,"line":16893},[25,34621,3513],{"class":240},[25,34623,34624],{"class":244}," b_x,b_y ",[25,34626,26114],{"class":240},[25,34628,34268],{"class":244},[25,34630,34631,34633,34635],{"class":27,"line":16906},[25,34632,32681],{"class":244},[25,34634,290],{"class":240},[25,34636,32686],{"class":244},[25,34638,34639,34641,34643],{"class":27,"line":16911},[25,34640,32696],{"class":244},[25,34642,290],{"class":240},[25,34644,32701],{"class":244},[25,34646,34647],{"class":27,"line":16925},[25,34648,2510],{"emptyLinePlaceholder":167},[25,34650,34651],{"class":27,"line":16930},[25,34652,34653],{"class":302},"            # 设置模型为验证模式\n",[25,34655,34656],{"class":27,"line":16936},[25,34657,32946],{"class":244},[25,34659,34660],{"class":27,"line":16941},[25,34661,34662],{"class":302},"            # 模型推理结果\n",[25,34664,34665,34667,34669],{"class":27,"line":16955},[25,34666,32731],{"class":244},[25,34668,290],{"class":240},[25,34670,32736],{"class":244},[25,34672,34673],{"class":27,"line":16960},[25,34674,34675],{"class":302},"            # 获取最大下标，最大下标就是类别号\n",[25,34677,34678,34680,34682,34684,34686,34688,34690],{"class":27,"line":16965},[25,34679,32748],{"class":244},[25,34681,290],{"class":240},[25,34683,32753],{"class":244},[25,34685,32756],{"class":5326},[25,34687,290],{"class":240},[25,34689,460],{"class":35},[25,34691,251],{"class":244},[25,34693,34694],{"class":27,"line":16979},[25,34695,34696],{"class":302},"            # 取出张量中的数值\n",[25,34698,34699,34702,34704],{"class":27,"line":16991},[25,34700,34701],{"class":244},"            result",[25,34703,290],{"class":240},[25,34705,34706],{"class":244},"pre_lab.item()\n",[25,34708,34709,34712,34714],{"class":27,"line":16996},[25,34710,34711],{"class":244},"            label",[25,34713,290],{"class":240},[25,34715,34716],{"class":244},"b_y.item()\n",[25,34718,34719,34722,34724,34727,34730,34733,34735,34738],{"class":27,"line":17009},[25,34720,34721],{"class":35},"            print",[25,34723,245],{"class":244},[25,34725,34726],{"class":45},"\"预测值：\"",[25,34728,34729],{"class":244},",classes[result],",[25,34731,34732],{"class":45},"\"------\"",[25,34734,621],{"class":244},[25,34736,34737],{"class":45},"\"真实值：\"",[25,34739,34740],{"class":244},",classes[label])\n",[99,34742,34743],{},"（2）AlexNet",[194,34745,34746],{},[106,34747,34748],{},"神经网络构建",[15,34750,34752],{"className":30449,"code":34751,"language":30451,"meta":20,"style":20},"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",[22,34753,34754,34760,34770,34780,34792,34796,34813,34821,34836,34848,34890,34917,34960,34986,35030,35073,35116,35143,35147,35157,35162,35190,35209,35228,35232,35237,35245,35260,35270,35284,35294,35309,35324,35339,35350,35354,35359,35369,35384,35389,35403,35418,35430,35435,35446,35451,35457,35462,35474,35494,35499,35508],{"__ignoreMap":20},[25,34755,34756,34758],{"class":27,"line":28},[25,34757,30463],{"class":240},[25,34759,30466],{"class":244},[25,34761,34762,34764,34766,34768],{"class":27,"line":39},[25,34763,30808],{"class":240},[25,34765,30811],{"class":244},[25,34767,30463],{"class":240},[25,34769,30816],{"class":244},[25,34771,34772,34774,34776,34778],{"class":27,"line":51},[25,34773,30808],{"class":240},[25,34775,30828],{"class":244},[25,34777,30463],{"class":240},[25,34779,30833],{"class":244},[25,34781,34782,34784,34787,34789],{"class":27,"line":59},[25,34783,30463],{"class":240},[25,34785,34786],{"class":244}," torch.nn.functional ",[25,34788,31454],{"class":240},[25,34790,34791],{"class":244}," F\n",[25,34793,34794],{"class":27,"line":67},[25,34795,2510],{"emptyLinePlaceholder":167},[25,34797,34798,34800,34803,34805,34807,34809,34811],{"class":27,"line":75},[25,34799,14804],{"class":240},[25,34801,34802],{"class":31}," AlexNet",[25,34804,245],{"class":244},[25,34806,30849],{"class":31},[25,34808,801],{"class":244},[25,34810,30854],{"class":31},[25,34812,30857],{"class":244},[25,34814,34815,34817,34819],{"class":27,"line":83},[25,34816,30872],{"class":240},[25,34818,30875],{"class":35},[25,34820,30878],{"class":244},[25,34822,34823,34825,34828,34830,34832,34834],{"class":27,"line":91},[25,34824,30888],{"class":35},[25,34826,34827],{"class":244},"(AlexNet,",[25,34829,30894],{"class":35},[25,34831,30897],{"class":244},[25,34833,30900],{"class":35},[25,34835,2086],{"class":244},[25,34837,34838,34840,34843,34845],{"class":27,"line":1429},[25,34839,30916],{"class":35},[25,34841,34842],{"class":244},".ReLu",[25,34844,290],{"class":240},[25,34846,34847],{"class":244},"nn.ReLU()\n",[25,34849,34850,34852,34854,34856,34858,34860,34862,34864,34866,34868,34870,34872,34874,34876,34878,34880,34882,34884,34886,34888],{"class":27,"line":1441},[25,34851,30916],{"class":35},[25,34853,30919],{"class":244},[25,34855,290],{"class":240},[25,34857,30924],{"class":244},[25,34859,30927],{"class":5326},[25,34861,290],{"class":240},[25,34863,460],{"class":35},[25,34865,621],{"class":244},[25,34867,30936],{"class":5326},[25,34869,290],{"class":240},[25,34871,452],{"class":35},[25,34873,621],{"class":244},[25,34875,30945],{"class":5326},[25,34877,290],{"class":240},[25,34879,715],{"class":35},[25,34881,621],{"class":244},[25,34883,31000],{"class":5326},[25,34885,290],{"class":240},[25,34887,536],{"class":35},[25,34889,251],{"class":244},[25,34891,34892,34894,34896,34898,34901,34903,34905,34907,34909,34911,34913,34915],{"class":27,"line":1723},[25,34893,30916],{"class":35},[25,34895,30984],{"class":244},[25,34897,290],{"class":240},[25,34899,34900],{"class":244},"nn.MaxPool2d(",[25,34902,30945],{"class":5326},[25,34904,290],{"class":240},[25,34906,315],{"class":35},[25,34908,621],{"class":244},[25,34910,31000],{"class":5326},[25,34912,290],{"class":240},[25,34914,321],{"class":35},[25,34916,251],{"class":244},[25,34918,34919,34921,34923,34925,34927,34929,34931,34933,34935,34937,34939,34942,34944,34946,34948,34950,34952,34954,34956,34958],{"class":27,"line":1728},[25,34920,30916],{"class":35},[25,34922,31013],{"class":244},[25,34924,290],{"class":240},[25,34926,30924],{"class":244},[25,34928,30927],{"class":5326},[25,34930,290],{"class":240},[25,34932,452],{"class":35},[25,34934,621],{"class":244},[25,34936,30936],{"class":5326},[25,34938,290],{"class":240},[25,34940,34941],{"class":35},"256",[25,34943,621],{"class":244},[25,34945,30945],{"class":5326},[25,34947,290],{"class":240},[25,34949,562],{"class":35},[25,34951,621],{"class":244},[25,34953,30954],{"class":5326},[25,34955,290],{"class":240},[25,34957,321],{"class":35},[25,34959,251],{"class":244},[25,34961,34962,34964,34966,34968,34970,34972,34974,34976,34978,34980,34982,34984],{"class":27,"line":1734},[25,34963,30916],{"class":35},[25,34965,31048],{"class":244},[25,34967,290],{"class":240},[25,34969,34900],{"class":244},[25,34971,30945],{"class":5326},[25,34973,290],{"class":240},[25,34975,315],{"class":35},[25,34977,621],{"class":244},[25,34979,31000],{"class":5326},[25,34981,290],{"class":240},[25,34983,321],{"class":35},[25,34985,251],{"class":244},[25,34987,34988,34990,34993,34995,34997,34999,35001,35003,35005,35007,35009,35012,35014,35016,35018,35020,35022,35024,35026,35028],{"class":27,"line":1739},[25,34989,30916],{"class":35},[25,34991,34992],{"class":244},".c5",[25,34994,290],{"class":240},[25,34996,30924],{"class":244},[25,34998,30927],{"class":5326},[25,35000,290],{"class":240},[25,35002,34941],{"class":35},[25,35004,621],{"class":244},[25,35006,30936],{"class":5326},[25,35008,290],{"class":240},[25,35010,35011],{"class":35},"384",[25,35013,621],{"class":244},[25,35015,30945],{"class":5326},[25,35017,290],{"class":240},[25,35019,315],{"class":35},[25,35021,621],{"class":244},[25,35023,30954],{"class":5326},[25,35025,290],{"class":240},[25,35027,460],{"class":35},[25,35029,251],{"class":244},[25,35031,35032,35034,35037,35039,35041,35043,35045,35047,35049,35051,35053,35055,35057,35059,35061,35063,35065,35067,35069,35071],{"class":27,"line":1753},[25,35033,30916],{"class":35},[25,35035,35036],{"class":244},".c6",[25,35038,290],{"class":240},[25,35040,30924],{"class":244},[25,35042,30927],{"class":5326},[25,35044,290],{"class":240},[25,35046,35011],{"class":35},[25,35048,621],{"class":244},[25,35050,30936],{"class":5326},[25,35052,290],{"class":240},[25,35054,35011],{"class":35},[25,35056,621],{"class":244},[25,35058,30945],{"class":5326},[25,35060,290],{"class":240},[25,35062,315],{"class":35},[25,35064,621],{"class":244},[25,35066,30954],{"class":5326},[25,35068,290],{"class":240},[25,35070,460],{"class":35},[25,35072,251],{"class":244},[25,35074,35075,35077,35080,35082,35084,35086,35088,35090,35092,35094,35096,35098,35100,35102,35104,35106,35108,35110,35112,35114],{"class":27,"line":1758},[25,35076,30916],{"class":35},[25,35078,35079],{"class":244},".c7",[25,35081,290],{"class":240},[25,35083,30924],{"class":244},[25,35085,30927],{"class":5326},[25,35087,290],{"class":240},[25,35089,35011],{"class":35},[25,35091,621],{"class":244},[25,35093,30936],{"class":5326},[25,35095,290],{"class":240},[25,35097,34941],{"class":35},[25,35099,621],{"class":244},[25,35101,30945],{"class":5326},[25,35103,290],{"class":240},[25,35105,315],{"class":35},[25,35107,621],{"class":244},[25,35109,30954],{"class":5326},[25,35111,290],{"class":240},[25,35113,460],{"class":35},[25,35115,251],{"class":244},[25,35117,35118,35120,35123,35125,35127,35129,35131,35133,35135,35137,35139,35141],{"class":27,"line":1764},[25,35119,30916],{"class":35},[25,35121,35122],{"class":244},".s8",[25,35124,290],{"class":240},[25,35126,34900],{"class":244},[25,35128,30945],{"class":5326},[25,35130,290],{"class":240},[25,35132,315],{"class":35},[25,35134,621],{"class":244},[25,35136,31000],{"class":5326},[25,35138,290],{"class":240},[25,35140,321],{"class":35},[25,35142,251],{"class":244},[25,35144,35145],{"class":27,"line":1785},[25,35146,31073],{"class":302},[25,35148,35149,35151,35153,35155],{"class":27,"line":1790},[25,35150,30916],{"class":35},[25,35152,31080],{"class":244},[25,35154,290],{"class":240},[25,35156,31085],{"class":244},[25,35158,35159],{"class":27,"line":1804},[25,35160,35161],{"class":302},"       # 定义全连接层\n",[25,35163,35164,35166,35169,35171,35173,35175,35177,35179,35181,35183,35185,35188],{"class":27,"line":1809},[25,35165,30916],{"class":35},[25,35167,35168],{"class":244},".f1",[25,35170,290],{"class":240},[25,35172,31102],{"class":244},[25,35174,587],{"class":35},[25,35176,698],{"class":240},[25,35178,587],{"class":35},[25,35180,698],{"class":240},[25,35182,34941],{"class":35},[25,35184,621],{"class":244},[25,35186,35187],{"class":35},"4096",[25,35189,251],{"class":244},[25,35191,35192,35194,35197,35199,35201,35203,35205,35207],{"class":27,"line":1838},[25,35193,30916],{"class":35},[25,35195,35196],{"class":244},".f2",[25,35198,290],{"class":240},[25,35200,31102],{"class":244},[25,35202,35187],{"class":35},[25,35204,621],{"class":244},[25,35206,35187],{"class":35},[25,35208,251],{"class":244},[25,35210,35211,35213,35216,35218,35220,35222,35224,35226],{"class":27,"line":1843},[25,35212,30916],{"class":35},[25,35214,35215],{"class":244},".f3",[25,35217,290],{"class":240},[25,35219,31102],{"class":244},[25,35221,35187],{"class":35},[25,35223,621],{"class":244},[25,35225,689],{"class":35},[25,35227,251],{"class":244},[25,35229,35230],{"class":27,"line":1860},[25,35231,2510],{"emptyLinePlaceholder":167},[25,35233,35234],{"class":27,"line":1865},[25,35235,35236],{"class":302},"    # 定义前向传播\n",[25,35238,35239,35241,35243],{"class":27,"line":1870},[25,35240,30872],{"class":240},[25,35242,31164],{"class":31},[25,35244,31167],{"class":244},[25,35246,35247,35249,35251,35253,35256,35258],{"class":27,"line":1875},[25,35248,31172],{"class":244},[25,35250,290],{"class":240},[25,35252,30894],{"class":35},[25,35254,35255],{"class":244},".ReLu(",[25,35257,30894],{"class":35},[25,35259,31184],{"class":244},[25,35261,35262,35264,35266,35268],{"class":27,"line":1889},[25,35263,31172],{"class":244},[25,35265,290],{"class":240},[25,35267,30894],{"class":35},[25,35269,31195],{"class":244},[25,35271,35272,35274,35276,35278,35280,35282],{"class":27,"line":1894},[25,35273,31172],{"class":244},[25,35275,290],{"class":240},[25,35277,30894],{"class":35},[25,35279,35255],{"class":244},[25,35281,30894],{"class":35},[25,35283,31210],{"class":244},[25,35285,35286,35288,35290,35292],{"class":27,"line":2687},[25,35287,31172],{"class":244},[25,35289,290],{"class":240},[25,35291,30894],{"class":35},[25,35293,31221],{"class":244},[25,35295,35296,35298,35300,35302,35304,35306],{"class":27,"line":2701},[25,35297,31172],{"class":244},[25,35299,290],{"class":240},[25,35301,30894],{"class":35},[25,35303,35255],{"class":244},[25,35305,30894],{"class":35},[25,35307,35308],{"class":244},".c5(x))\n",[25,35310,35311,35313,35315,35317,35319,35321],{"class":27,"line":2709},[25,35312,31172],{"class":244},[25,35314,290],{"class":240},[25,35316,30894],{"class":35},[25,35318,35255],{"class":244},[25,35320,30894],{"class":35},[25,35322,35323],{"class":244},".c6(x))\n",[25,35325,35326,35328,35330,35332,35334,35336],{"class":27,"line":2714},[25,35327,31172],{"class":244},[25,35329,290],{"class":240},[25,35331,30894],{"class":35},[25,35333,35255],{"class":244},[25,35335,30894],{"class":35},[25,35337,35338],{"class":244},".c7(x))\n",[25,35340,35341,35343,35345,35347],{"class":27,"line":2720},[25,35342,31172],{"class":244},[25,35344,290],{"class":240},[25,35346,30894],{"class":35},[25,35348,35349],{"class":244},".s8(x)\n",[25,35351,35352],{"class":27,"line":2726},[25,35353,2510],{"emptyLinePlaceholder":167},[25,35355,35356],{"class":27,"line":2731},[25,35357,35358],{"class":302},"        # 展平加线性全连接层\n",[25,35360,35361,35363,35365,35367],{"class":27,"line":8058},[25,35362,31172],{"class":244},[25,35364,290],{"class":240},[25,35366,30894],{"class":35},[25,35368,31232],{"class":244},[25,35370,35371,35373,35375,35377,35379,35381],{"class":27,"line":8082},[25,35372,31172],{"class":244},[25,35374,290],{"class":240},[25,35376,30894],{"class":35},[25,35378,35255],{"class":244},[25,35380,30894],{"class":35},[25,35382,35383],{"class":244},".f1(x))\n",[25,35385,35386],{"class":27,"line":8087},[25,35387,35388],{"class":302},"        # 还需要dropout对神经元随机进行失活\n",[25,35390,35391,35393,35395,35398,35401],{"class":27,"line":8093},[25,35392,31172],{"class":244},[25,35394,290],{"class":240},[25,35396,35397],{"class":244},"F.dropout(x,",[25,35399,35400],{"class":35},"0.5",[25,35402,251],{"class":244},[25,35404,35405,35407,35409,35411,35413,35415],{"class":27,"line":8120},[25,35406,31172],{"class":244},[25,35408,290],{"class":240},[25,35410,30894],{"class":35},[25,35412,35255],{"class":244},[25,35414,30894],{"class":35},[25,35416,35417],{"class":244},".f2(x))\n",[25,35419,35420,35422,35424,35426,35428],{"class":27,"line":8125},[25,35421,31172],{"class":244},[25,35423,290],{"class":240},[25,35425,35397],{"class":244},[25,35427,35400],{"class":35},[25,35429,251],{"class":244},[25,35431,35432],{"class":27,"line":8131},[25,35433,35434],{"class":302},"        # 直接输出\n",[25,35436,35437,35439,35441,35443],{"class":27,"line":8143},[25,35438,31172],{"class":244},[25,35440,290],{"class":240},[25,35442,30894],{"class":35},[25,35444,35445],{"class":244},".f3(x)\n",[25,35447,35448],{"class":27,"line":8155},[25,35449,35450],{"class":302},"        # 前向传播输出\n",[25,35452,35453,35455],{"class":27,"line":8167},[25,35454,14862],{"class":240},[25,35456,31280],{"class":244},[25,35458,35459],{"class":27,"line":9826},[25,35460,35461],{"class":302},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[25,35463,35464,35466,35468,35470,35472],{"class":27,"line":9851},[25,35465,1642],{"class":240},[25,35467,31291],{"class":35},[25,35469,3059],{"class":240},[25,35471,31296],{"class":45},[25,35473,3849],{"class":244},[25,35475,35476,35478,35480,35482,35484,35486,35488,35490,35492],{"class":27,"line":9874},[25,35477,31308],{"class":244},[25,35479,290],{"class":240},[25,35481,30522],{"class":244},[25,35483,31315],{"class":45},[25,35485,1815],{"class":240},[25,35487,31320],{"class":244},[25,35489,1812],{"class":240},[25,35491,30547],{"class":45},[25,35493,251],{"class":244},[25,35495,35496],{"class":27,"line":9898},[25,35497,35498],{"class":302},"    # 模型实例化，然后将实例化的模型放到设备中\n",[25,35500,35501,35503,35505],{"class":27,"line":9903},[25,35502,31360],{"class":244},[25,35504,290],{"class":240},[25,35506,35507],{"class":244},"AlexNet().to(device)\n",[25,35509,35510,35512,35514,35516,35518,35521,35523,35525],{"class":27,"line":9908},[25,35511,31370],{"class":35},[25,35513,31373],{"class":244},[25,35515,460],{"class":35},[25,35517,621],{"class":244},[25,35519,35520],{"class":35},"227",[25,35522,621],{"class":244},[25,35524,35520],{"class":35},[25,35526,31386],{"class":244},[194,35528,35529],{"start":39},[106,35530,31399],{},[15,35532,35534],{"className":30449,"code":35533,"language":30451,"meta":20,"style":20},"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",[22,35535,35536,35542,35548,35558,35564,35574,35584,35594,35604,35614,35618,35629,35639,35643,35647,35651,35659,35671,35681,35697,35707,35739,35753,35763,35773,35777,35787,35801,35811,35821,35831,35837,35841,35845,35849,35853,35857,35865,35885,35889,35893,35897,35901,35905,35921,35925,35929,35937,35941,35945,35953,35957,35961,35965,35973,35977,35981,35985,35989,35997,36001,36009,36013,36021,36025,36033,36037,36045,36049,36053,36061,36065,36069,36073,36085,36109,36123,36127,36131,36135,36143,36147,36155,36159,36167,36171,36179,36183,36191,36195,36203,36207,36219,36223,36231,36235,36243,36247,36251,36255,36259,36267,36271,36287,36291,36299,36303,36307,36311,36315,36319,36323,36327,36343,36347,36359,36363,36375,36379,36391,36395,36403,36407,36415,36419,36423,36428,36434,36438,36447,36451,36468,36472,36481,36485,36503,36516,36521,36534,36538,36542,36550,36554,36558,36566,36570,36578,36582,36590,36594,36598,36640,36682,36686,36690,36706,36710,36726,36730,36734,36742,36746,36750,36762,36800,36805,36810,36819,36823,36837,36847,36853,36859,36865,36871,36875,36879,36885,36889,36893,36901,36905,36923,36927,36931,36935,36951,36955,36959,36963,36967,36971,36991,37011,37015,37019,37023,37031,37039,37043,37059,37079,37099,37103,37107,37115,37123,37127,37131,37135,37147,37151,37161,37169,37186],{"__ignoreMap":20},[25,35537,35538,35540],{"class":27,"line":28},[25,35539,30463],{"class":240},[25,35541,31893],{"class":244},[25,35543,35544,35546],{"class":27,"line":39},[25,35545,30463],{"class":240},[25,35547,31900],{"class":244},[25,35549,35550,35552,35554,35556],{"class":27,"line":51},[25,35551,30463],{"class":240},[25,35553,31911],{"class":244},[25,35555,31454],{"class":240},[25,35557,31916],{"class":244},[25,35559,35560,35562],{"class":27,"line":59},[25,35561,30463],{"class":240},[25,35563,30466],{"class":244},[25,35565,35566,35568,35570,35572],{"class":27,"line":67},[25,35567,30808],{"class":240},[25,35569,31486],{"class":244},[25,35571,30463],{"class":240},[25,35573,31933],{"class":244},[25,35575,35576,35578,35580,35582],{"class":27,"line":75},[25,35577,30808],{"class":240},[25,35579,31439],{"class":244},[25,35581,30463],{"class":240},[25,35583,31444],{"class":244},[25,35585,35586,35588,35590,35592],{"class":27,"line":83},[25,35587,30808],{"class":240},[25,35589,31469],{"class":244},[25,35591,30463],{"class":240},[25,35593,31474],{"class":244},[25,35595,35596,35598,35600,35602],{"class":27,"line":91},[25,35597,30463],{"class":240},[25,35599,31486],{"class":244},[25,35601,31454],{"class":240},[25,35603,31491],{"class":244},[25,35605,35606,35608,35610,35612],{"class":27,"line":1429},[25,35607,30463],{"class":240},[25,35609,31503],{"class":244},[25,35611,31454],{"class":240},[25,35613,31508],{"class":244},[25,35615,35616],{"class":27,"line":1441},[25,35617,31978],{"class":302},[25,35619,35620,35622,35624,35626],{"class":27,"line":1723},[25,35621,30808],{"class":240},[25,35623,31985],{"class":244},[25,35625,30463],{"class":240},[25,35627,35628],{"class":244}," AlexNet\n",[25,35630,35631,35633,35635,35637],{"class":27,"line":1728},[25,35632,30808],{"class":240},[25,35634,30811],{"class":244},[25,35636,30463],{"class":240},[25,35638,30816],{"class":244},[25,35640,35641],{"class":27,"line":1734},[25,35642,2510],{"emptyLinePlaceholder":167},[25,35644,35645],{"class":27,"line":1739},[25,35646,2510],{"emptyLinePlaceholder":167},[25,35648,35649],{"class":27,"line":1753},[25,35650,32013],{"class":302},[25,35652,35653,35655,35657],{"class":27,"line":1758},[25,35654,32018],{"class":240},[25,35656,32021],{"class":31},[25,35658,32024],{"class":244},[25,35660,35661,35663,35665,35667,35669],{"class":27,"line":1764},[25,35662,32029],{"class":244},[25,35664,290],{"class":240},[25,35666,31526],{"class":244},[25,35668,31534],{"class":45},[25,35670,31537],{"class":244},[25,35672,35673,35675,35677,35679],{"class":27,"line":1785},[25,35674,32042],{"class":5326},[25,35676,290],{"class":240},[25,35678,31547],{"class":35},[25,35680,31537],{"class":244},[25,35682,35683,35685,35687,35689,35691,35693,35695],{"class":27,"line":1790},[25,35684,32053],{"class":5326},[25,35686,290],{"class":240},[25,35688,31564],{"class":244},[25,35690,31567],{"class":5326},[25,35692,290],{"class":240},[25,35694,35520],{"class":35},[25,35696,31575],{"class":244},[25,35698,35699,35701,35703,35705],{"class":27,"line":1804},[25,35700,32070],{"class":5326},[25,35702,290],{"class":240},[25,35704,31547],{"class":35},[25,35706,251],{"class":244},[25,35708,35709,35711,35713,35715,35717,35719,35721,35723,35725,35727,35729,35731,35733,35735,35737],{"class":27,"line":1809},[25,35710,32081],{"class":244},[25,35712,290],{"class":240},[25,35714,32086],{"class":244},[25,35716,32089],{"class":35},[25,35718,245],{"class":244},[25,35720,32094],{"class":35},[25,35722,698],{"class":240},[25,35724,7468],{"class":35},[25,35726,32101],{"class":244},[25,35728,32089],{"class":35},[25,35730,245],{"class":244},[25,35732,32108],{"class":35},[25,35734,698],{"class":240},[25,35736,7468],{"class":35},[25,35738,32115],{"class":244},[25,35740,35741,35743,35745,35747,35749,35751],{"class":27,"line":1838},[25,35742,32120],{"class":244},[25,35744,290],{"class":240},[25,35746,32125],{"class":244},[25,35748,31608],{"class":5326},[25,35750,290],{"class":240},[25,35752,31613],{"class":244},[25,35754,35755,35757,35759,35761],{"class":27,"line":1843},[25,35756,32136],{"class":5326},[25,35758,290],{"class":240},[25,35760,32141],{"class":35},[25,35762,31537],{"class":244},[25,35764,35765,35767,35769,35771],{"class":27,"line":1860},[25,35766,32148],{"class":5326},[25,35768,290],{"class":240},[25,35770,31547],{"class":35},[25,35772,31537],{"class":244},[25,35774,35775],{"class":27,"line":1865},[25,35776,32159],{"class":302},[25,35778,35779,35781,35783,35785],{"class":27,"line":1870},[25,35780,32164],{"class":5326},[25,35782,290],{"class":240},[25,35784,638],{"class":35},[25,35786,251],{"class":244},[25,35788,35789,35791,35793,35795,35797,35799],{"class":27,"line":1875},[25,35790,32175],{"class":244},[25,35792,290],{"class":240},[25,35794,31605],{"class":244},[25,35796,31608],{"class":5326},[25,35798,290],{"class":240},[25,35800,32186],{"class":244},[25,35802,35803,35805,35807,35809],{"class":27,"line":1889},[25,35804,32191],{"class":5326},[25,35806,290],{"class":240},[25,35808,32141],{"class":35},[25,35810,31537],{"class":244},[25,35812,35813,35815,35817,35819],{"class":27,"line":1894},[25,35814,32202],{"class":5326},[25,35816,290],{"class":240},[25,35818,31547],{"class":35},[25,35820,31537],{"class":244},[25,35822,35823,35825,35827,35829],{"class":27,"line":2687},[25,35824,32213],{"class":5326},[25,35826,290],{"class":240},[25,35828,638],{"class":35},[25,35830,251],{"class":244},[25,35832,35833,35835],{"class":27,"line":2701},[25,35834,4200],{"class":240},[25,35836,32226],{"class":244},[25,35838,35839],{"class":27,"line":2709},[25,35840,2510],{"emptyLinePlaceholder":167},[25,35842,35843],{"class":27,"line":2714},[25,35844,32235],{"class":302},[25,35846,35847],{"class":27,"line":2720},[25,35848,32240],{"class":302},[25,35850,35851],{"class":27,"line":2726},[25,35852,2510],{"emptyLinePlaceholder":167},[25,35854,35855],{"class":27,"line":2731},[25,35856,32249],{"class":302},[25,35858,35859,35861,35863],{"class":27,"line":8058},[25,35860,32018],{"class":240},[25,35862,32256],{"class":31},[25,35864,32259],{"class":244},[25,35866,35867,35869,35871,35873,35875,35877,35879,35881,35883],{"class":27,"line":8082},[25,35868,31308],{"class":244},[25,35870,290],{"class":240},[25,35872,30522],{"class":244},[25,35874,31315],{"class":45},[25,35876,1815],{"class":240},[25,35878,31320],{"class":244},[25,35880,1812],{"class":240},[25,35882,32278],{"class":45},[25,35884,251],{"class":244},[25,35886,35887],{"class":27,"line":8087},[25,35888,2510],{"emptyLinePlaceholder":167},[25,35890,35891],{"class":27,"line":8093},[25,35892,2510],{"emptyLinePlaceholder":167},[25,35894,35895],{"class":27,"line":8120},[25,35896,32293],{"class":302},[25,35898,35899],{"class":27,"line":8125},[25,35900,32298],{"class":302},[25,35902,35903],{"class":27,"line":8131},[25,35904,32303],{"class":302},[25,35906,35907,35909,35911,35913,35915,35917,35919],{"class":27,"line":8143},[25,35908,32308],{"class":244},[25,35910,290],{"class":240},[25,35912,32313],{"class":244},[25,35914,32316],{"class":5326},[25,35916,290],{"class":240},[25,35918,32321],{"class":35},[25,35920,251],{"class":244},[25,35922,35923],{"class":27,"line":8155},[25,35924,2510],{"emptyLinePlaceholder":167},[25,35926,35927],{"class":27,"line":8167},[25,35928,32332],{"class":302},[25,35930,35931,35933,35935],{"class":27,"line":9826},[25,35932,32337],{"class":244},[25,35934,290],{"class":240},[25,35936,32342],{"class":244},[25,35938,35939],{"class":27,"line":9851},[25,35940,2510],{"emptyLinePlaceholder":167},[25,35942,35943],{"class":27,"line":9874},[25,35944,32351],{"class":302},[25,35946,35947,35949,35951],{"class":27,"line":9898},[25,35948,31360],{"class":244},[25,35950,290],{"class":240},[25,35952,32360],{"class":244},[25,35954,35955],{"class":27,"line":9903},[25,35956,32365],{"class":302},[25,35958,35959],{"class":27,"line":9908},[25,35960,32370],{"class":302},[25,35962,35963],{"class":27,"line":9913},[25,35964,32375],{"class":302},[25,35966,35967,35969,35971],{"class":27,"line":9922},[25,35968,32380],{"class":244},[25,35970,290],{"class":240},[25,35972,32385],{"class":244},[25,35974,35975],{"class":27,"line":9927},[25,35976,2510],{"emptyLinePlaceholder":167},[25,35978,35979],{"class":27,"line":9933},[25,35980,2510],{"emptyLinePlaceholder":167},[25,35982,35983],{"class":27,"line":9954},[25,35984,32398],{"class":302},[25,35986,35987],{"class":27,"line":9960},[25,35988,32403],{"class":302},[25,35990,35991,35993,35995],{"class":27,"line":9974},[25,35992,32408],{"class":244},[25,35994,290],{"class":240},[25,35996,32413],{"class":35},[25,35998,35999],{"class":27,"line":9980},[25,36000,32418],{"class":302},[25,36002,36003,36005,36007],{"class":27,"line":10007},[25,36004,32423],{"class":244},[25,36006,290],{"class":240},[25,36008,32428],{"class":244},[25,36010,36011],{"class":27,"line":10016},[25,36012,32433],{"class":302},[25,36014,36015,36017,36019],{"class":27,"line":10022},[25,36016,32438],{"class":244},[25,36018,290],{"class":240},[25,36020,32428],{"class":244},[25,36022,36023],{"class":27,"line":10030},[25,36024,32447],{"class":302},[25,36026,36027,36029,36031],{"class":27,"line":10035},[25,36028,32452],{"class":244},[25,36030,290],{"class":240},[25,36032,32428],{"class":244},[25,36034,36035],{"class":27,"line":16714},[25,36036,32461],{"class":302},[25,36038,36039,36041,36043],{"class":27,"line":16720},[25,36040,32466],{"class":244},[25,36042,290],{"class":240},[25,36044,32428],{"class":244},[25,36046,36047],{"class":27,"line":16743},[25,36048,2510],{"emptyLinePlaceholder":167},[25,36050,36051],{"class":27,"line":16749},[25,36052,32479],{"class":302},[25,36054,36055,36057,36059],{"class":27,"line":16772},[25,36056,32484],{"class":244},[25,36058,290],{"class":240},[25,36060,32489],{"class":244},[25,36062,36063],{"class":27,"line":16786},[25,36064,2510],{"emptyLinePlaceholder":167},[25,36066,36067],{"class":27,"line":16806},[25,36068,2510],{"emptyLinePlaceholder":167},[25,36070,36071],{"class":27,"line":16812},[25,36072,32502],{"class":302},[25,36074,36075,36077,36079,36081,36083],{"class":27,"line":16823},[25,36076,3311],{"class":240},[25,36078,32509],{"class":244},[25,36080,26114],{"class":240},[25,36082,32514],{"class":35},[25,36084,32517],{"class":244},[25,36086,36087,36089,36091,36093,36095,36097,36099,36101,36103,36105,36107],{"class":27,"line":16846},[25,36088,32522],{"class":35},[25,36090,245],{"class":244},[25,36092,32527],{"class":45},[25,36094,32530],{"class":35},[25,36096,827],{"class":45},[25,36098,32530],{"class":35},[25,36100,494],{"class":45},[25,36102,32539],{"class":244},[25,36104,775],{"class":240},[25,36106,460],{"class":35},[25,36108,30568],{"class":244},[25,36110,36111,36113,36115,36117,36119,36121],{"class":27,"line":16868},[25,36112,32522],{"class":35},[25,36114,245],{"class":244},[25,36116,32554],{"class":45},[25,36118,698],{"class":240},[25,36120,689],{"class":35},[25,36122,251],{"class":244},[25,36124,36125],{"class":27,"line":16873},[25,36126,2510],{"emptyLinePlaceholder":167},[25,36128,36129],{"class":27,"line":16879},[25,36130,32569],{"class":302},[25,36132,36133],{"class":27,"line":16893},[25,36134,32574],{"class":302},[25,36136,36137,36139,36141],{"class":27,"line":16906},[25,36138,32579],{"class":244},[25,36140,290],{"class":240},[25,36142,32413],{"class":35},[25,36144,36145],{"class":27,"line":16911},[25,36146,32588],{"class":302},[25,36148,36149,36151,36153],{"class":27,"line":16925},[25,36150,32593],{"class":244},[25,36152,290],{"class":240},[25,36154,3195],{"class":35},[25,36156,36157],{"class":27,"line":16930},[25,36158,32602],{"class":302},[25,36160,36161,36163,36165],{"class":27,"line":16936},[25,36162,32607],{"class":244},[25,36164,290],{"class":240},[25,36166,32413],{"class":35},[25,36168,36169],{"class":27,"line":16941},[25,36170,32616],{"class":302},[25,36172,36173,36175,36177],{"class":27,"line":16955},[25,36174,32621],{"class":244},[25,36176,290],{"class":240},[25,36178,3195],{"class":35},[25,36180,36181],{"class":27,"line":16960},[25,36182,32630],{"class":302},[25,36184,36185,36187,36189],{"class":27,"line":16965},[25,36186,32635],{"class":244},[25,36188,290],{"class":240},[25,36190,3195],{"class":35},[25,36192,36193],{"class":27,"line":16979},[25,36194,32644],{"class":302},[25,36196,36197,36199,36201],{"class":27,"line":16991},[25,36198,32649],{"class":244},[25,36200,290],{"class":240},[25,36202,3195],{"class":35},[25,36204,36205],{"class":27,"line":16996},[25,36206,32658],{"class":302},[25,36208,36209,36211,36213,36215,36217],{"class":27,"line":17009},[25,36210,3513],{"class":240},[25,36212,31672],{"class":244},[25,36214,26114],{"class":240},[25,36216,31677],{"class":35},[25,36218,32671],{"class":244},[25,36220,36221],{"class":27,"line":17014},[25,36222,32676],{"class":302},[25,36224,36225,36227,36229],{"class":27,"line":17019},[25,36226,32681],{"class":244},[25,36228,290],{"class":240},[25,36230,32686],{"class":244},[25,36232,36233],{"class":27,"line":17024},[25,36234,32691],{"class":302},[25,36236,36237,36239,36241],{"class":27,"line":17037},[25,36238,32696],{"class":244},[25,36240,290],{"class":240},[25,36242,32701],{"class":244},[25,36244,36245],{"class":27,"line":17042},[25,36246,32707],{"class":302},[25,36248,36249],{"class":27,"line":32704},[25,36250,32713],{"class":244},[25,36252,36253],{"class":27,"line":32710},[25,36254,32719],{"class":302},[25,36256,36257],{"class":27,"line":32716},[25,36258,32725],{"class":302},[25,36260,36261,36263,36265],{"class":27,"line":32722},[25,36262,32731],{"class":244},[25,36264,290],{"class":240},[25,36266,32736],{"class":244},[25,36268,36269],{"class":27,"line":32728},[25,36270,32742],{"class":302},[25,36272,36273,36275,36277,36279,36281,36283,36285],{"class":27,"line":32739},[25,36274,32748],{"class":244},[25,36276,290],{"class":240},[25,36278,32753],{"class":244},[25,36280,32756],{"class":5326},[25,36282,290],{"class":240},[25,36284,460],{"class":35},[25,36286,251],{"class":244},[25,36288,36289],{"class":27,"line":32745},[25,36290,32768],{"class":302},[25,36292,36293,36295,36297],{"class":27,"line":32765},[25,36294,32774],{"class":244},[25,36296,290],{"class":240},[25,36298,32779],{"class":244},[25,36300,36301],{"class":27,"line":32771},[25,36302,32785],{"class":302},[25,36304,36305],{"class":27,"line":32782},[25,36306,32791],{"class":244},[25,36308,36309],{"class":27,"line":32788},[25,36310,32797],{"class":302},[25,36312,36313],{"class":27,"line":32794},[25,36314,32803],{"class":244},[25,36316,36317],{"class":27,"line":32800},[25,36318,32809],{"class":302},[25,36320,36321],{"class":27,"line":32806},[25,36322,32815],{"class":244},[25,36324,36325],{"class":27,"line":32812},[25,36326,32821],{"class":302},[25,36328,36329,36331,36333,36335,36337,36339,36341],{"class":27,"line":32818},[25,36330,32827],{"class":244},[25,36332,9587],{"class":240},[25,36334,32832],{"class":244},[25,36336,698],{"class":240},[25,36338,32837],{"class":244},[25,36340,434],{"class":35},[25,36342,251],{"class":244},[25,36344,36345],{"class":27,"line":32824},[25,36346,32847],{"class":302},[25,36348,36349,36351,36353,36355,36357],{"class":27,"line":32844},[25,36350,32853],{"class":244},[25,36352,9587],{"class":240},[25,36354,32858],{"class":244},[25,36356,3059],{"class":240},[25,36358,32863],{"class":244},[25,36360,36361],{"class":27,"line":32850},[25,36362,32869],{"class":302},[25,36364,36365,36367,36369,36371,36373],{"class":27,"line":32866},[25,36366,32875],{"class":244},[25,36368,9587],{"class":240},[25,36370,32837],{"class":244},[25,36372,434],{"class":35},[25,36374,251],{"class":244},[25,36376,36377],{"class":27,"line":32872},[25,36378,32889],{"class":302},[25,36380,36381,36383,36385,36387,36389],{"class":27,"line":32886},[25,36382,3513],{"class":240},[25,36384,32897],{"class":244},[25,36386,26114],{"class":240},[25,36388,31677],{"class":35},[25,36390,32904],{"class":244},[25,36392,36393],{"class":27,"line":32892},[25,36394,32910],{"class":302},[25,36396,36397,36399,36401],{"class":27,"line":32907},[25,36398,32681],{"class":244},[25,36400,290],{"class":240},[25,36402,32686],{"class":244},[25,36404,36405],{"class":27,"line":32913},[25,36406,32925],{"class":302},[25,36408,36409,36411,36413],{"class":27,"line":32922},[25,36410,32696],{"class":244},[25,36412,290],{"class":240},[25,36414,32701],{"class":244},[25,36416,36417],{"class":27,"line":32928},[25,36418,32940],{"class":302},[25,36420,36421],{"class":27,"line":32937},[25,36422,32946],{"class":244},[25,36424,36425],{"class":27,"line":32943},[25,36426,36427],{"class":302},"            # 验证时不计算梯度以节省内存\u002F计算\n",[25,36429,36430,36432],{"class":27,"line":32949},[25,36431,32952],{"class":240},[25,36433,32955],{"class":244},[25,36435,36436],{"class":27,"line":32958},[25,36437,32961],{"class":302},[25,36439,36440,36443,36445],{"class":27,"line":32964},[25,36441,36442],{"class":244},"                output",[25,36444,290],{"class":240},[25,36446,32736],{"class":244},[25,36448,36449],{"class":27,"line":32975},[25,36450,32978],{"class":302},[25,36452,36453,36456,36458,36460,36462,36464,36466],{"class":27,"line":32981},[25,36454,36455],{"class":244},"                pre_lab",[25,36457,290],{"class":240},[25,36459,32753],{"class":244},[25,36461,32756],{"class":5326},[25,36463,290],{"class":240},[25,36465,460],{"class":35},[25,36467,251],{"class":244},[25,36469,36470],{"class":27,"line":33000},[25,36471,33003],{"class":302},[25,36473,36474,36477,36479],{"class":27,"line":33006},[25,36475,36476],{"class":244},"                val_batch_loss",[25,36478,290],{"class":240},[25,36480,32779],{"class":244},[25,36482,36483],{"class":27,"line":33017},[25,36484,33020],{"class":302},[25,36486,36487,36490,36492,36495,36497,36499,36501],{"class":27,"line":33023},[25,36488,36489],{"class":244},"                val_loss",[25,36491,9587],{"class":240},[25,36493,36494],{"class":244},"val_batch_loss.item()",[25,36496,698],{"class":240},[25,36498,32837],{"class":244},[25,36500,434],{"class":35},[25,36502,251],{"class":244},[25,36504,36505,36508,36510,36512,36514],{"class":27,"line":33043},[25,36506,36507],{"class":244},"                val_corrects",[25,36509,9587],{"class":240},[25,36511,32858],{"class":244},[25,36513,3059],{"class":240},[25,36515,32863],{"class":244},[25,36517,36518],{"class":27,"line":33059},[25,36519,36520],{"class":302},"            # 当前用于验证的样本数量\n",[25,36522,36523,36526,36528,36530,36532],{"class":27,"line":33065},[25,36524,36525],{"class":244},"            val_num",[25,36527,9587],{"class":240},[25,36529,32837],{"class":244},[25,36531,434],{"class":35},[25,36533,251],{"class":244},[25,36535,36536],{"class":27,"line":33079},[25,36537,33082],{"class":302},[25,36539,36540],{"class":27,"line":33085},[25,36541,33088],{"class":302},[25,36543,36544,36546,36548],{"class":27,"line":33091},[25,36545,33094],{"class":244},[25,36547,827],{"class":240},[25,36549,33099],{"class":244},[25,36551,36552],{"class":27,"line":33102},[25,36553,33105],{"class":302},[25,36555,36556],{"class":27,"line":33108},[25,36557,33111],{"class":302},[25,36559,36560,36562,36564],{"class":27,"line":33114},[25,36561,33117],{"class":244},[25,36563,827],{"class":240},[25,36565,33099],{"class":244},[25,36567,36568],{"class":27,"line":33124},[25,36569,33127],{"class":302},[25,36571,36572,36574,36576],{"class":27,"line":33130},[25,36573,33133],{"class":244},[25,36575,827],{"class":240},[25,36577,33138],{"class":244},[25,36579,36580],{"class":27,"line":33141},[25,36581,33144],{"class":302},[25,36583,36584,36586,36588],{"class":27,"line":33147},[25,36585,33150],{"class":244},[25,36587,827],{"class":240},[25,36589,33138],{"class":244},[25,36591,36592],{"class":27,"line":33157},[25,36593,2510],{"emptyLinePlaceholder":167},[25,36595,36596],{"class":27,"line":33162},[25,36597,33165],{"class":302},[25,36599,36600,36602,36604,36606,36608,36610,36612,36614,36616,36618,36620,36622,36624,36626,36628,36630,36632,36634,36636,36638],{"class":27,"line":33168},[25,36601,32522],{"class":35},[25,36603,245],{"class":244},[25,36605,3702],{"class":45},[25,36607,32530],{"class":35},[25,36609,33179],{"class":45},[25,36611,1139],{"class":35},[25,36613,33184],{"class":240},[25,36615,1189],{"class":35},[25,36617,33189],{"class":45},[25,36619,1139],{"class":35},[25,36621,33184],{"class":240},[25,36623,1189],{"class":35},[25,36625,3702],{"class":45},[25,36627,33200],{"class":244},[25,36629,775],{"class":240},[25,36631,460],{"class":35},[25,36633,33207],{"class":244},[25,36635,775],{"class":240},[25,36637,460],{"class":35},[25,36639,33214],{"class":244},[25,36641,36642,36644,36646,36648,36650,36652,36654,36656,36658,36660,36662,36664,36666,36668,36670,36672,36674,36676,36678,36680],{"class":27,"line":33217},[25,36643,32522],{"class":35},[25,36645,245],{"class":244},[25,36647,3702],{"class":45},[25,36649,32530],{"class":35},[25,36651,33228],{"class":45},[25,36653,1139],{"class":35},[25,36655,33184],{"class":240},[25,36657,1189],{"class":35},[25,36659,33237],{"class":45},[25,36661,1139],{"class":35},[25,36663,33184],{"class":240},[25,36665,1189],{"class":35},[25,36667,3702],{"class":45},[25,36669,33248],{"class":244},[25,36671,775],{"class":240},[25,36673,460],{"class":35},[25,36675,33255],{"class":244},[25,36677,775],{"class":240},[25,36679,460],{"class":35},[25,36681,33214],{"class":244},[25,36683,36684],{"class":27,"line":33264},[25,36685,2510],{"emptyLinePlaceholder":167},[25,36687,36688],{"class":27,"line":33269},[25,36689,33272],{"class":302},[25,36691,36692,36694,36696,36698,36700,36702,36704],{"class":27,"line":33275},[25,36693,2607],{"class":240},[25,36695,33280],{"class":244},[25,36697,775],{"class":240},[25,36699,460],{"class":35},[25,36701,1183],{"class":244},[25,36703,1203],{"class":240},[25,36705,33291],{"class":244},[25,36707,36708],{"class":27,"line":33294},[25,36709,33297],{"class":302},[25,36711,36712,36714,36716,36718,36720,36722,36724],{"class":27,"line":33300},[25,36713,33303],{"class":244},[25,36715,284],{"class":35},[25,36717,290],{"class":240},[25,36719,33310],{"class":244},[25,36721,775],{"class":240},[25,36723,460],{"class":35},[25,36725,33317],{"class":244},[25,36727,36728],{"class":27,"line":33320},[25,36729,33323],{"class":302},[25,36731,36732],{"class":27,"line":33326},[25,36733,33329],{"class":302},[25,36735,36736,36738,36740],{"class":27,"line":33332},[25,36737,33335],{"class":244},[25,36739,290],{"class":240},[25,36741,32385],{"class":244},[25,36743,36744],{"class":27,"line":33342},[25,36745,2510],{"emptyLinePlaceholder":167},[25,36747,36748],{"class":27,"line":33347},[25,36749,33350],{"class":302},[25,36751,36752,36754,36756,36758,36760],{"class":27,"line":33353},[25,36753,33356],{"class":244},[25,36755,290],{"class":240},[25,36757,33361],{"class":244},[25,36759,775],{"class":240},[25,36761,33366],{"class":244},[25,36763,36764,36766,36768,36770,36772,36774,36776,36778,36780,36782,36784,36786,36788,36790,36792,36794,36796,36798],{"class":27,"line":33369},[25,36765,32522],{"class":35},[25,36767,245],{"class":244},[25,36769,33376],{"class":45},[25,36771,1139],{"class":35},[25,36773,33381],{"class":240},[25,36775,1189],{"class":35},[25,36777,787],{"class":45},[25,36779,1139],{"class":35},[25,36781,33381],{"class":240},[25,36783,1189],{"class":35},[25,36785,33394],{"class":45},[25,36787,33397],{"class":244},[25,36789,33400],{"class":240},[25,36791,1150],{"class":35},[25,36793,33405],{"class":244},[25,36795,571],{"class":240},[25,36797,1150],{"class":35},[25,36799,30568],{"class":244},[25,36801,36802],{"class":27,"line":33414},[25,36803,36804],{"class":302},"    # 选择最优参数并保存\n",[25,36806,36807],{"class":27,"line":33420},[25,36808,36809],{"class":302},"    # 保存最佳模型权重字典\n",[25,36811,36812,36815,36817],{"class":27,"line":33426},[25,36813,36814],{"class":244},"    torch.save(best_model_wts,",[25,36816,33438],{"class":45},[25,36818,251],{"class":244},[25,36820,36821],{"class":27,"line":33432},[25,36822,33458],{"class":302},[25,36824,36825,36827,36829,36831,36833,36835],{"class":27,"line":33443},[25,36826,33464],{"class":244},[25,36828,290],{"class":240},[25,36830,33469],{"class":244},[25,36832,33472],{"class":5326},[25,36834,290],{"class":240},[25,36836,1657],{"class":244},[25,36838,36839,36841,36843,36845],{"class":27,"line":33449},[25,36840,33482],{"class":45},[25,36842,1102],{"class":244},[25,36844,33487],{"class":35},[25,36846,33490],{"class":244},[25,36848,36849,36851],{"class":27,"line":33455},[25,36850,33496],{"class":45},[25,36852,33499],{"class":244},[25,36854,36855,36857],{"class":27,"line":33461},[25,36856,33505],{"class":45},[25,36858,33508],{"class":244},[25,36860,36861,36863],{"class":27,"line":33479},[25,36862,33514],{"class":45},[25,36864,33517],{"class":244},[25,36866,36867,36869],{"class":27,"line":33493},[25,36868,33523],{"class":45},[25,36870,33526],{"class":244},[25,36872,36873],{"class":27,"line":33502},[25,36874,33532],{"class":244},[25,36876,36877],{"class":27,"line":33511},[25,36878,33538],{"class":302},[25,36880,36881,36883],{"class":27,"line":33520},[25,36882,4200],{"class":240},[25,36884,33546],{"class":244},[25,36886,36887],{"class":27,"line":33529},[25,36888,2510],{"emptyLinePlaceholder":167},[25,36890,36891],{"class":27,"line":33535},[25,36892,33557],{"class":302},[25,36894,36895,36897,36899],{"class":27,"line":33541},[25,36896,32018],{"class":240},[25,36898,33565],{"class":31},[25,36900,33568],{"class":244},[25,36902,36903],{"class":27,"line":33549},[25,36904,33574],{"class":302},[25,36906,36907,36909,36911,36913,36915,36917,36919,36921],{"class":27,"line":33554},[25,36908,33580],{"class":244},[25,36910,31764],{"class":5326},[25,36912,290],{"class":240},[25,36914,245],{"class":244},[25,36916,741],{"class":35},[25,36918,621],{"class":244},[25,36920,536],{"class":35},[25,36922,30568],{"class":244},[25,36924,36925],{"class":27,"line":33560},[25,36926,33600],{"class":302},[25,36928,36929],{"class":27,"line":33571},[25,36930,33606],{"class":302},[25,36932,36933],{"class":27,"line":33577},[25,36934,33612],{"class":302},[25,36936,36937,36939,36941,36943,36945,36947,36949],{"class":27,"line":33597},[25,36938,31798],{"class":244},[25,36940,460],{"class":35},[25,36942,621],{"class":244},[25,36944,321],{"class":35},[25,36946,621],{"class":244},[25,36948,460],{"class":35},[25,36950,251],{"class":244},[25,36952,36953],{"class":27,"line":33603},[25,36954,33635],{"class":302},[25,36956,36957],{"class":27,"line":33609},[25,36958,33641],{"class":302},[25,36960,36961],{"class":27,"line":33615},[25,36962,33647],{"class":302},[25,36964,36965],{"class":27,"line":33632},[25,36966,33653],{"class":302},[25,36968,36969],{"class":27,"line":33638},[25,36970,33659],{"class":302},[25,36972,36973,36975,36977,36979,36981,36983,36985,36987,36989],{"class":27,"line":33644},[25,36974,33665],{"class":244},[25,36976,33668],{"class":45},[25,36978,33671],{"class":244},[25,36980,33674],{"class":45},[25,36982,621],{"class":244},[25,36984,33679],{"class":5326},[25,36986,290],{"class":240},[25,36988,33684],{"class":45},[25,36990,251],{"class":244},[25,36992,36993,36995,36997,36999,37001,37003,37005,37007,37009],{"class":27,"line":33650},[25,36994,33665],{"class":244},[25,36996,33668],{"class":45},[25,36998,33696],{"class":244},[25,37000,33699],{"class":45},[25,37002,621],{"class":244},[25,37004,33679],{"class":5326},[25,37006,290],{"class":240},[25,37008,33708],{"class":45},[25,37010,251],{"class":244},[25,37012,37013],{"class":27,"line":33656},[25,37014,33716],{"class":302},[25,37016,37017],{"class":27,"line":33662},[25,37018,33722],{"class":244},[25,37020,37021],{"class":27,"line":33689},[25,37022,33728],{"class":302},[25,37024,37025,37027,37029],{"class":27,"line":33713},[25,37026,33734],{"class":244},[25,37028,33737],{"class":45},[25,37030,251],{"class":244},[25,37032,37033,37035,37037],{"class":27,"line":33719},[25,37034,33745],{"class":244},[25,37036,33748],{"class":45},[25,37038,251],{"class":244},[25,37040,37041],{"class":27,"line":33725},[25,37042,33756],{"class":302},[25,37044,37045,37047,37049,37051,37053,37055,37057],{"class":27,"line":33731},[25,37046,31798],{"class":244},[25,37048,460],{"class":35},[25,37050,621],{"class":244},[25,37052,321],{"class":35},[25,37054,621],{"class":244},[25,37056,321],{"class":35},[25,37058,251],{"class":244},[25,37060,37061,37063,37065,37067,37069,37071,37073,37075,37077],{"class":27,"line":33742},[25,37062,33665],{"class":244},[25,37064,33668],{"class":45},[25,37066,33783],{"class":244},[25,37068,33674],{"class":45},[25,37070,621],{"class":244},[25,37072,33679],{"class":5326},[25,37074,290],{"class":240},[25,37076,33794],{"class":45},[25,37078,251],{"class":244},[25,37080,37081,37083,37085,37087,37089,37091,37093,37095,37097],{"class":27,"line":33753},[25,37082,33665],{"class":244},[25,37084,33668],{"class":45},[25,37086,33806],{"class":244},[25,37088,33699],{"class":45},[25,37090,621],{"class":244},[25,37092,33679],{"class":5326},[25,37094,290],{"class":240},[25,37096,33817],{"class":45},[25,37098,251],{"class":244},[25,37100,37101],{"class":27,"line":33759},[25,37102,33825],{"class":302},[25,37104,37105],{"class":27,"line":33776},[25,37106,33722],{"class":244},[25,37108,37109,37111,37113],{"class":27,"line":33799},[25,37110,33734],{"class":244},[25,37112,33668],{"class":45},[25,37114,251],{"class":244},[25,37116,37117,37119,37121],{"class":27,"line":33822},[25,37118,33745],{"class":244},[25,37120,33847],{"class":45},[25,37122,251],{"class":244},[25,37124,37125],{"class":27,"line":33828},[25,37126,33855],{"class":244},[25,37128,37129],{"class":27,"line":33833},[25,37130,2510],{"emptyLinePlaceholder":167},[25,37132,37133],{"class":27,"line":33842},[25,37134,33866],{"class":302},[25,37136,37137,37139,37141,37143,37145],{"class":27,"line":33852},[25,37138,1642],{"class":240},[25,37140,31291],{"class":35},[25,37142,3059],{"class":240},[25,37144,31296],{"class":45},[25,37146,3849],{"class":244},[25,37148,37149],{"class":27,"line":33858},[25,37150,33885],{"class":302},[25,37152,37153,37156,37158],{"class":27,"line":33863},[25,37154,37155],{"class":244},"    AlexNet",[25,37157,290],{"class":240},[25,37159,37160],{"class":244},"AlexNet()\n",[25,37162,37163,37165,37167],{"class":27,"line":33869},[25,37164,33902],{"class":244},[25,37166,290],{"class":240},[25,37168,33907],{"class":244},[25,37170,37171,37173,37175,37178,37180,37182,37184],{"class":27,"line":33882},[25,37172,33464],{"class":244},[25,37174,290],{"class":240},[25,37176,37177],{"class":244},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[25,37179,33920],{"class":5326},[25,37181,290],{"class":240},[25,37183,943],{"class":35},[25,37185,251],{"class":244},[25,37187,37188],{"class":27,"line":33888},[25,37189,33932],{"class":244},[194,37191,37192],{"start":51},[106,37193,33945],{},[15,37195,37197],{"className":30449,"code":37196,"language":30451,"meta":20,"style":20},"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",[22,37198,37199,37205,37215,37225,37235,37239,37249,37259,37270,37274,37278,37282,37290,37306,37316,37332,37342,37356,37360,37370,37380,37390,37396,37400,37404,37412,37416,37432,37440,37444,37448,37456,37464,37468,37472,37476,37480,37486,37490,37500,37508,37516,37520,37524,37528,37536,37540,37556,37560,37564,37568,37580,37584,37596,37600,37604,37616,37620,37630,37634,37638,37650,37654,37662,37666,37670,37678,37682,37690,37694,37698,37702,37706,37710,37726,37734,37738,37742,37790,37796,37800,37810,37818,37826,37830,37834,37838,37842,37850,37854,37870,37874,37882,37890],{"__ignoreMap":20},[25,37200,37201,37203],{"class":27,"line":28},[25,37202,30463],{"class":240},[25,37204,30466],{"class":244},[25,37206,37207,37209,37211,37213],{"class":27,"line":39},[25,37208,30463],{"class":240},[25,37210,31486],{"class":244},[25,37212,31454],{"class":240},[25,37214,31491],{"class":244},[25,37216,37217,37219,37221,37223],{"class":27,"line":51},[25,37218,30808],{"class":240},[25,37220,33973],{"class":244},[25,37222,30463],{"class":240},[25,37224,33978],{"class":244},[25,37226,37227,37229,37231,37233],{"class":27,"line":59},[25,37228,30808],{"class":240},[25,37230,31469],{"class":244},[25,37232,30463],{"class":240},[25,37234,31474],{"class":244},[25,37236,37237],{"class":27,"line":67},[25,37238,33993],{"class":302},[25,37240,37241,37243,37245,37247],{"class":27,"line":75},[25,37242,30808],{"class":240},[25,37244,31439],{"class":244},[25,37246,30463],{"class":240},[25,37248,31444],{"class":244},[25,37250,37251,37253,37255,37257],{"class":27,"line":83},[25,37252,30808],{"class":240},[25,37254,31985],{"class":244},[25,37256,30463],{"class":240},[25,37258,35628],{"class":244},[25,37260,37261,37263,37266,37268],{"class":27,"line":91},[25,37262,30808],{"class":240},[25,37264,37265],{"class":244}," 练习.AlexNet.model ",[25,37267,30463],{"class":240},[25,37269,35628],{"class":244},[25,37271,37272],{"class":27,"line":1429},[25,37273,2510],{"emptyLinePlaceholder":167},[25,37275,37276],{"class":27,"line":1441},[25,37277,2510],{"emptyLinePlaceholder":167},[25,37279,37280],{"class":27,"line":1723},[25,37281,34022],{"class":302},[25,37283,37284,37286,37288],{"class":27,"line":1728},[25,37285,32018],{"class":240},[25,37287,34029],{"class":31},[25,37289,32024],{"class":244},[25,37291,37292,37294,37296,37298,37300,37302,37304],{"class":27,"line":1734},[25,37293,34036],{"class":244},[25,37295,290],{"class":240},[25,37297,31526],{"class":244},[25,37299,31529],{"class":5326},[25,37301,290],{"class":240},[25,37303,31534],{"class":45},[25,37305,31537],{"class":244},[25,37307,37308,37310,37312,37314],{"class":27,"line":1739},[25,37309,34053],{"class":5326},[25,37311,290],{"class":240},[25,37313,34058],{"class":35},[25,37315,31537],{"class":244},[25,37317,37318,37320,37322,37324,37326,37328,37330],{"class":27,"line":1753},[25,37319,34065],{"class":5326},[25,37321,290],{"class":240},[25,37323,31564],{"class":244},[25,37325,31567],{"class":5326},[25,37327,290],{"class":240},[25,37329,35520],{"class":35},[25,37331,31575],{"class":244},[25,37333,37334,37336,37338,37340],{"class":27,"line":1758},[25,37335,34082],{"class":5326},[25,37337,290],{"class":240},[25,37339,31547],{"class":35},[25,37341,251],{"class":244},[25,37343,37344,37346,37348,37350,37352,37354],{"class":27,"line":1764},[25,37345,34093],{"class":244},[25,37347,290],{"class":240},[25,37349,31605],{"class":244},[25,37351,31608],{"class":5326},[25,37353,290],{"class":240},[25,37355,34104],{"class":244},[25,37357,37358],{"class":27,"line":1785},[25,37359,34109],{"class":302},[25,37361,37362,37364,37366,37368],{"class":27,"line":1790},[25,37363,34114],{"class":5326},[25,37365,290],{"class":240},[25,37367,460],{"class":35},[25,37369,31537],{"class":244},[25,37371,37372,37374,37376,37378],{"class":27,"line":1804},[25,37373,34125],{"class":5326},[25,37375,290],{"class":240},[25,37377,31547],{"class":35},[25,37379,31537],{"class":244},[25,37381,37382,37384,37386,37388],{"class":27,"line":1809},[25,37383,34136],{"class":5326},[25,37385,290],{"class":240},[25,37387,434],{"class":35},[25,37389,251],{"class":244},[25,37391,37392,37394],{"class":27,"line":1838},[25,37393,4200],{"class":240},[25,37395,34149],{"class":244},[25,37397,37398],{"class":27,"line":1843},[25,37399,2510],{"emptyLinePlaceholder":167},[25,37401,37402],{"class":27,"line":1860},[25,37403,34158],{"class":302},[25,37405,37406,37408,37410],{"class":27,"line":1865},[25,37407,32018],{"class":240},[25,37409,34165],{"class":31},[25,37411,34168],{"class":244},[25,37413,37414],{"class":27,"line":1870},[25,37415,34173],{"class":302},[25,37417,37418,37420,37422,37424,37426,37428,37430],{"class":27,"line":1875},[25,37419,31308],{"class":244},[25,37421,290],{"class":240},[25,37423,31315],{"class":45},[25,37425,1815],{"class":240},[25,37427,31320],{"class":244},[25,37429,1812],{"class":240},[25,37431,34190],{"class":45},[25,37433,37434,37436,37438],{"class":27,"line":1889},[25,37435,31360],{"class":244},[25,37437,290],{"class":240},[25,37439,32360],{"class":244},[25,37441,37442],{"class":27,"line":1894},[25,37443,2510],{"emptyLinePlaceholder":167},[25,37445,37446],{"class":27,"line":2687},[25,37447,34207],{"class":302},[25,37449,37450,37452,37454],{"class":27,"line":2701},[25,37451,34212],{"class":244},[25,37453,290],{"class":240},[25,37455,32413],{"class":35},[25,37457,37458,37460,37462],{"class":27,"line":2709},[25,37459,34221],{"class":244},[25,37461,290],{"class":240},[25,37463,3195],{"class":35},[25,37465,37466],{"class":27,"line":2714},[25,37467,2510],{"emptyLinePlaceholder":167},[25,37469,37470],{"class":27,"line":2720},[25,37471,34234],{"class":302},[25,37473,37474],{"class":27,"line":2726},[25,37475,34239],{"class":302},[25,37477,37478],{"class":27,"line":2731},[25,37479,34244],{"class":302},[25,37481,37482,37484],{"class":27,"line":8058},[25,37483,34249],{"class":240},[25,37485,32955],{"class":244},[25,37487,37488],{"class":27,"line":8082},[25,37489,34256],{"class":302},[25,37491,37492,37494,37496,37498],{"class":27,"line":8087},[25,37493,3513],{"class":240},[25,37495,34263],{"class":244},[25,37497,26114],{"class":240},[25,37499,34268],{"class":244},[25,37501,37502,37504,37506],{"class":27,"line":8093},[25,37503,34273],{"class":244},[25,37505,290],{"class":240},[25,37507,34278],{"class":244},[25,37509,37510,37512,37514],{"class":27,"line":8120},[25,37511,34283],{"class":244},[25,37513,290],{"class":240},[25,37515,34288],{"class":244},[25,37517,37518],{"class":27,"line":8125},[25,37519,34293],{"class":302},[25,37521,37522],{"class":27,"line":8131},[25,37523,32946],{"class":244},[25,37525,37526],{"class":27,"line":8143},[25,37527,34302],{"class":302},[25,37529,37530,37532,37534],{"class":27,"line":8155},[25,37531,32731],{"class":244},[25,37533,290],{"class":240},[25,37535,34311],{"class":244},[25,37537,37538],{"class":27,"line":8167},[25,37539,34316],{"class":302},[25,37541,37542,37544,37546,37548,37550,37552,37554],{"class":27,"line":9826},[25,37543,32748],{"class":244},[25,37545,290],{"class":240},[25,37547,32753],{"class":244},[25,37549,32756],{"class":5326},[25,37551,290],{"class":240},[25,37553,460],{"class":35},[25,37555,251],{"class":244},[25,37557,37558],{"class":27,"line":9851},[25,37559,34337],{"class":302},[25,37561,37562],{"class":27,"line":9874},[25,37563,34342],{"class":302},[25,37565,37566],{"class":27,"line":9898},[25,37567,34347],{"class":302},[25,37569,37570,37572,37574,37576,37578],{"class":27,"line":9903},[25,37571,34352],{"class":244},[25,37573,9587],{"class":240},[25,37575,32858],{"class":244},[25,37577,3059],{"class":240},[25,37579,34361],{"class":244},[25,37581,37582],{"class":27,"line":9908},[25,37583,34366],{"class":302},[25,37585,37586,37588,37590,37592,37594],{"class":27,"line":9913},[25,37587,34371],{"class":244},[25,37589,9587],{"class":240},[25,37591,34376],{"class":244},[25,37593,434],{"class":35},[25,37595,251],{"class":244},[25,37597,37598],{"class":27,"line":9922},[25,37599,2510],{"emptyLinePlaceholder":167},[25,37601,37602],{"class":27,"line":9927},[25,37603,34389],{"class":302},[25,37605,37606,37608,37610,37612,37614],{"class":27,"line":9933},[25,37607,34394],{"class":244},[25,37609,290],{"class":240},[25,37611,34399],{"class":244},[25,37613,827],{"class":240},[25,37615,34404],{"class":244},[25,37617,37618],{"class":27,"line":9954},[25,37619,34409],{"class":302},[25,37621,37622,37624,37626,37628],{"class":27,"line":9960},[25,37623,32522],{"class":35},[25,37625,245],{"class":244},[25,37627,34418],{"class":45},[25,37629,34421],{"class":244},[25,37631,37632],{"class":27,"line":9974},[25,37633,2510],{"emptyLinePlaceholder":167},[25,37635,37636],{"class":27,"line":9980},[25,37637,34430],{"class":302},[25,37639,37640,37642,37644,37646,37648],{"class":27,"line":10007},[25,37641,1642],{"class":240},[25,37643,31291],{"class":35},[25,37645,3059],{"class":240},[25,37647,31296],{"class":45},[25,37649,3849],{"class":244},[25,37651,37652],{"class":27,"line":10016},[25,37653,34447],{"class":302},[25,37655,37656,37658,37660],{"class":27,"line":10022},[25,37657,31360],{"class":244},[25,37659,290],{"class":240},[25,37661,37160],{"class":244},[25,37663,37664],{"class":27,"line":10030},[25,37665,34460],{"class":302},[25,37667,37668],{"class":27,"line":10035},[25,37669,34465],{"class":302},[25,37671,37672,37674,37676],{"class":27,"line":16714},[25,37673,34470],{"class":244},[25,37675,34473],{"class":45},[25,37677,30568],{"class":244},[25,37679,37680],{"class":27,"line":16720},[25,37681,34480],{"class":302},[25,37683,37684,37686,37688],{"class":27,"line":16743},[25,37685,34093],{"class":244},[25,37687,290],{"class":240},[25,37689,34489],{"class":244},[25,37691,37692],{"class":27,"line":16749},[25,37693,34494],{"class":302},[25,37695,37696],{"class":27,"line":16772},[25,37697,34499],{"class":244},[25,37699,37700],{"class":27,"line":16786},[25,37701,2510],{"emptyLinePlaceholder":167},[25,37703,37704],{"class":27,"line":16806},[25,37705,34508],{"class":302},[25,37707,37708],{"class":27,"line":16812},[25,37709,34513],{"class":302},[25,37711,37712,37714,37716,37718,37720,37722,37724],{"class":27,"line":16823},[25,37713,31308],{"class":244},[25,37715,290],{"class":240},[25,37717,31315],{"class":45},[25,37719,1815],{"class":240},[25,37721,31320],{"class":244},[25,37723,1812],{"class":240},[25,37725,34190],{"class":45},[25,37727,37728,37730,37732],{"class":27,"line":16846},[25,37729,31360],{"class":244},[25,37731,290],{"class":240},[25,37733,32360],{"class":244},[25,37735,37736],{"class":27,"line":16868},[25,37737,34542],{"class":302},[25,37739,37740],{"class":27,"line":16873},[25,37741,34547],{"class":302},[25,37743,37744,37746,37748,37750,37752,37754,37756,37758,37760,37762,37764,37766,37768,37770,37772,37774,37776,37778,37780,37782,37784,37786,37788],{"class":27,"line":16879},[25,37745,34552],{"class":244},[25,37747,290],{"class":240},[25,37749,1133],{"class":244},[25,37751,34559],{"class":45},[25,37753,621],{"class":244},[25,37755,34564],{"class":45},[25,37757,621],{"class":244},[25,37759,34569],{"class":45},[25,37761,621],{"class":244},[25,37763,34574],{"class":45},[25,37765,621],{"class":244},[25,37767,34579],{"class":45},[25,37769,621],{"class":244},[25,37771,34584],{"class":45},[25,37773,621],{"class":244},[25,37775,34589],{"class":45},[25,37777,621],{"class":244},[25,37779,34594],{"class":45},[25,37781,621],{"class":244},[25,37783,34599],{"class":45},[25,37785,621],{"class":244},[25,37787,34604],{"class":45},[25,37789,33317],{"class":244},[25,37791,37792,37794],{"class":27,"line":16893},[25,37793,34249],{"class":240},[25,37795,32955],{"class":244},[25,37797,37798],{"class":27,"line":16906},[25,37799,34617],{"class":302},[25,37801,37802,37804,37806,37808],{"class":27,"line":16911},[25,37803,3513],{"class":240},[25,37805,34624],{"class":244},[25,37807,26114],{"class":240},[25,37809,34268],{"class":244},[25,37811,37812,37814,37816],{"class":27,"line":16925},[25,37813,32681],{"class":244},[25,37815,290],{"class":240},[25,37817,32686],{"class":244},[25,37819,37820,37822,37824],{"class":27,"line":16930},[25,37821,32696],{"class":244},[25,37823,290],{"class":240},[25,37825,32701],{"class":244},[25,37827,37828],{"class":27,"line":16936},[25,37829,2510],{"emptyLinePlaceholder":167},[25,37831,37832],{"class":27,"line":16941},[25,37833,34653],{"class":302},[25,37835,37836],{"class":27,"line":16955},[25,37837,32946],{"class":244},[25,37839,37840],{"class":27,"line":16960},[25,37841,34662],{"class":302},[25,37843,37844,37846,37848],{"class":27,"line":16965},[25,37845,32731],{"class":244},[25,37847,290],{"class":240},[25,37849,32736],{"class":244},[25,37851,37852],{"class":27,"line":16979},[25,37853,34675],{"class":302},[25,37855,37856,37858,37860,37862,37864,37866,37868],{"class":27,"line":16991},[25,37857,32748],{"class":244},[25,37859,290],{"class":240},[25,37861,32753],{"class":244},[25,37863,32756],{"class":5326},[25,37865,290],{"class":240},[25,37867,460],{"class":35},[25,37869,251],{"class":244},[25,37871,37872],{"class":27,"line":16996},[25,37873,34696],{"class":302},[25,37875,37876,37878,37880],{"class":27,"line":17009},[25,37877,34701],{"class":244},[25,37879,290],{"class":240},[25,37881,34706],{"class":244},[25,37883,37884,37886,37888],{"class":27,"line":17014},[25,37885,34711],{"class":244},[25,37887,290],{"class":240},[25,37889,34716],{"class":244},[25,37891,37892,37894,37896,37898,37900,37902,37904,37906],{"class":27,"line":17019},[25,37893,34721],{"class":35},[25,37895,245],{"class":244},[25,37897,34726],{"class":45},[25,37899,34729],{"class":244},[25,37901,34732],{"class":45},[25,37903,621],{"class":244},[25,37905,34737],{"class":45},[25,37907,34740],{"class":244},[210,37909,37911],{"id":37910},"_22vgg","2.2.VGG",[22108,37913,37915],{"id":37914},"_221原理","2.2.1.原理",[99,37917,37918],{},[155,37919],{"alt":20,"src":37920},"\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",[99,37922,37923],{},[155,37924],{"alt":20,"src":37925},"\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",[99,37927,37928],{},[155,37929],{"alt":20,"src":37930},"\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",[99,37932,37933],{},"参数详细描述：",[99,37935,37936],{},[155,37937],{"alt":20,"src":37938},"\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",[99,37940,37941],{},[155,37942],{"alt":20,"src":37943},"\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",[99,37945,37946],{},[155,37947],{"alt":20,"src":37948},"\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",[99,37950,37951],{},[155,37952],{"alt":20,"src":37953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[99,37955,37956],{},[155,37957],{"alt":20,"src":37958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[22108,37960,37962],{"id":37961},"_222代码实现","2.2.2.代码实现",[194,37964,37965],{},[106,37966,37967],{},"网络搭建",[15,37969,37971],{"className":30449,"code":37970,"language":30451,"meta":20,"style":20},"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",[22,37972,37973,37979,37991,38001,38011,38015,38032,38040,38059,38064,38069,38081,38119,38124,38160,38164,38193,38198,38203,38214,38250,38254,38290,38294,38322,38326,38331,38342,38378,38382,38418,38422,38458,38462,38490,38494,38499,38510,38547,38551,38587,38591,38627,38631,38659,38663,38668,38679,38715,38719,38755,38759,38795,38799,38827,38831,38836,38847,38852,38857,38862,38883,38887,38899,38903,38915,38919,38923,38928,38933,38948,38953,38963,38968,38983,38988,39007,39012,39021,39026,39036,39041,39046,39060,39065,39079,39087,39091,39095,39103,39114,39125,39136,39147,39158,39169,39175,39179,39184,39197,39217,39223,39232],{"__ignoreMap":20},[25,37974,37975,37977],{"class":27,"line":28},[25,37976,30463],{"class":240},[25,37978,30466],{"class":244},[25,37980,37981,37983,37986,37988],{"class":27,"line":39},[25,37982,30808],{"class":240},[25,37984,37985],{"class":244}," sympy.core.sympify ",[25,37987,30463],{"class":240},[25,37989,37990],{"class":244}," kernS\n",[25,37992,37993,37995,37997,37999],{"class":27,"line":51},[25,37994,30808],{"class":240},[25,37996,30811],{"class":244},[25,37998,30463],{"class":240},[25,38000,30816],{"class":244},[25,38002,38003,38005,38007,38009],{"class":27,"line":59},[25,38004,30808],{"class":240},[25,38006,30828],{"class":244},[25,38008,30463],{"class":240},[25,38010,30833],{"class":244},[25,38012,38013],{"class":27,"line":67},[25,38014,2510],{"emptyLinePlaceholder":167},[25,38016,38017,38019,38022,38024,38026,38028,38030],{"class":27,"line":75},[25,38018,14804],{"class":240},[25,38020,38021],{"class":31}," VGG16",[25,38023,245],{"class":244},[25,38025,30849],{"class":31},[25,38027,801],{"class":244},[25,38029,30854],{"class":31},[25,38031,30857],{"class":244},[25,38033,38034,38036,38038],{"class":27,"line":83},[25,38035,30872],{"class":240},[25,38037,30875],{"class":35},[25,38039,30878],{"class":244},[25,38041,38042,38044,38046,38049,38051,38053,38055,38057],{"class":27,"line":91},[25,38043,30888],{"class":35},[25,38045,245],{"class":244},[25,38047,38048],{"class":35},"VGG16",[25,38050,12545],{"class":244},[25,38052,30894],{"class":35},[25,38054,30897],{"class":244},[25,38056,30900],{"class":35},[25,38058,2086],{"class":244},[25,38060,38061],{"class":27,"line":1429},[25,38062,38063],{"class":302},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[25,38065,38066],{"class":27,"line":1441},[25,38067,38068],{"class":302},"        # 这里用的是灰度图\n",[25,38070,38071,38073,38076,38078],{"class":27,"line":1723},[25,38072,30916],{"class":35},[25,38074,38075],{"class":244},".block1",[25,38077,290],{"class":240},[25,38079,38080],{"class":244},"nn.Sequential(\n",[25,38082,38083,38086,38088,38090,38092,38094,38096,38098,38100,38102,38104,38106,38108,38110,38112,38114,38116],{"class":27,"line":1728},[25,38084,38085],{"class":244},"            nn.Conv2d(",[25,38087,30927],{"class":5326},[25,38089,290],{"class":240},[25,38091,460],{"class":35},[25,38093,621],{"class":244},[25,38095,30936],{"class":5326},[25,38097,290],{"class":240},[25,38099,446],{"class":35},[25,38101,621],{"class":244},[25,38103,30945],{"class":5326},[25,38105,290],{"class":240},[25,38107,315],{"class":35},[25,38109,621],{"class":244},[25,38111,30954],{"class":5326},[25,38113,290],{"class":240},[25,38115,460],{"class":35},[25,38117,38118],{"class":244},"),\n",[25,38120,38121],{"class":27,"line":1734},[25,38122,38123],{"class":244},"            nn.ReLU(),\n",[25,38125,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158],{"class":27,"line":1739},[25,38127,38085],{"class":244},[25,38129,30927],{"class":5326},[25,38131,290],{"class":240},[25,38133,446],{"class":35},[25,38135,621],{"class":244},[25,38137,30936],{"class":5326},[25,38139,290],{"class":240},[25,38141,446],{"class":35},[25,38143,621],{"class":244},[25,38145,30945],{"class":5326},[25,38147,290],{"class":240},[25,38149,315],{"class":35},[25,38151,621],{"class":244},[25,38153,30954],{"class":5326},[25,38155,290],{"class":240},[25,38157,460],{"class":35},[25,38159,38118],{"class":244},[25,38161,38162],{"class":27,"line":1753},[25,38163,38123],{"class":244},[25,38165,38166,38169,38171,38173,38175,38177,38179,38181,38183,38185,38187,38189,38191],{"class":27,"line":1758},[25,38167,38168],{"class":244},"            nn.MaxPool2d(",[25,38170,30945],{"class":5326},[25,38172,290],{"class":240},[25,38174,321],{"class":35},[25,38176,621],{"class":244},[25,38178,31000],{"class":5326},[25,38180,290],{"class":240},[25,38182,321],{"class":35},[25,38184,621],{"class":244},[25,38186,30954],{"class":5326},[25,38188,290],{"class":240},[25,38190,434],{"class":35},[25,38192,251],{"class":244},[25,38194,38195],{"class":27,"line":1764},[25,38196,38197],{"class":244},"        )\n",[25,38199,38200],{"class":27,"line":1785},[25,38201,38202],{"class":302},"        # 第二层\n",[25,38204,38205,38207,38210,38212],{"class":27,"line":1790},[25,38206,30916],{"class":35},[25,38208,38209],{"class":244},".block2",[25,38211,290],{"class":240},[25,38213,38080],{"class":244},[25,38215,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246,38248],{"class":27,"line":1804},[25,38217,38085],{"class":244},[25,38219,30927],{"class":5326},[25,38221,290],{"class":240},[25,38223,446],{"class":35},[25,38225,621],{"class":244},[25,38227,30936],{"class":5326},[25,38229,290],{"class":240},[25,38231,32141],{"class":35},[25,38233,621],{"class":244},[25,38235,30945],{"class":5326},[25,38237,290],{"class":240},[25,38239,315],{"class":35},[25,38241,621],{"class":244},[25,38243,30954],{"class":5326},[25,38245,290],{"class":240},[25,38247,460],{"class":35},[25,38249,38118],{"class":244},[25,38251,38252],{"class":27,"line":1809},[25,38253,38123],{"class":244},[25,38255,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288],{"class":27,"line":1838},[25,38257,38085],{"class":244},[25,38259,30927],{"class":5326},[25,38261,290],{"class":240},[25,38263,32141],{"class":35},[25,38265,621],{"class":244},[25,38267,30936],{"class":5326},[25,38269,290],{"class":240},[25,38271,32141],{"class":35},[25,38273,621],{"class":244},[25,38275,30945],{"class":5326},[25,38277,290],{"class":240},[25,38279,315],{"class":35},[25,38281,621],{"class":244},[25,38283,30954],{"class":5326},[25,38285,290],{"class":240},[25,38287,460],{"class":35},[25,38289,38118],{"class":244},[25,38291,38292],{"class":27,"line":1843},[25,38293,38123],{"class":244},[25,38295,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320],{"class":27,"line":1860},[25,38297,38168],{"class":244},[25,38299,30945],{"class":5326},[25,38301,290],{"class":240},[25,38303,321],{"class":35},[25,38305,621],{"class":244},[25,38307,31000],{"class":5326},[25,38309,290],{"class":240},[25,38311,321],{"class":35},[25,38313,621],{"class":244},[25,38315,30954],{"class":5326},[25,38317,290],{"class":240},[25,38319,434],{"class":35},[25,38321,251],{"class":244},[25,38323,38324],{"class":27,"line":1865},[25,38325,38197],{"class":244},[25,38327,38328],{"class":27,"line":1870},[25,38329,38330],{"class":302},"        # 第三层\n",[25,38332,38333,38335,38338,38340],{"class":27,"line":1875},[25,38334,30916],{"class":35},[25,38336,38337],{"class":244},".block3",[25,38339,290],{"class":240},[25,38341,38080],{"class":244},[25,38343,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374,38376],{"class":27,"line":1889},[25,38345,38085],{"class":244},[25,38347,30927],{"class":5326},[25,38349,290],{"class":240},[25,38351,32141],{"class":35},[25,38353,621],{"class":244},[25,38355,30936],{"class":5326},[25,38357,290],{"class":240},[25,38359,34941],{"class":35},[25,38361,621],{"class":244},[25,38363,30945],{"class":5326},[25,38365,290],{"class":240},[25,38367,315],{"class":35},[25,38369,621],{"class":244},[25,38371,30954],{"class":5326},[25,38373,290],{"class":240},[25,38375,460],{"class":35},[25,38377,38118],{"class":244},[25,38379,38380],{"class":27,"line":1894},[25,38381,38123],{"class":244},[25,38383,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414,38416],{"class":27,"line":2687},[25,38385,38085],{"class":244},[25,38387,30927],{"class":5326},[25,38389,290],{"class":240},[25,38391,34941],{"class":35},[25,38393,621],{"class":244},[25,38395,30936],{"class":5326},[25,38397,290],{"class":240},[25,38399,34941],{"class":35},[25,38401,621],{"class":244},[25,38403,30945],{"class":5326},[25,38405,290],{"class":240},[25,38407,315],{"class":35},[25,38409,621],{"class":244},[25,38411,30954],{"class":5326},[25,38413,290],{"class":240},[25,38415,460],{"class":35},[25,38417,38118],{"class":244},[25,38419,38420],{"class":27,"line":2701},[25,38421,38123],{"class":244},[25,38423,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446,38448,38450,38452,38454,38456],{"class":27,"line":2709},[25,38425,38085],{"class":244},[25,38427,30927],{"class":5326},[25,38429,290],{"class":240},[25,38431,34941],{"class":35},[25,38433,621],{"class":244},[25,38435,30936],{"class":5326},[25,38437,290],{"class":240},[25,38439,34941],{"class":35},[25,38441,621],{"class":244},[25,38443,30945],{"class":5326},[25,38445,290],{"class":240},[25,38447,315],{"class":35},[25,38449,621],{"class":244},[25,38451,30954],{"class":5326},[25,38453,290],{"class":240},[25,38455,460],{"class":35},[25,38457,38118],{"class":244},[25,38459,38460],{"class":27,"line":2714},[25,38461,38123],{"class":244},[25,38463,38464,38466,38468,38470,38472,38474,38476,38478,38480,38482,38484,38486,38488],{"class":27,"line":2720},[25,38465,38168],{"class":244},[25,38467,30945],{"class":5326},[25,38469,290],{"class":240},[25,38471,321],{"class":35},[25,38473,621],{"class":244},[25,38475,31000],{"class":5326},[25,38477,290],{"class":240},[25,38479,321],{"class":35},[25,38481,621],{"class":244},[25,38483,30954],{"class":5326},[25,38485,290],{"class":240},[25,38487,434],{"class":35},[25,38489,251],{"class":244},[25,38491,38492],{"class":27,"line":2726},[25,38493,38197],{"class":244},[25,38495,38496],{"class":27,"line":2731},[25,38497,38498],{"class":302},"        # 第四层\n",[25,38500,38501,38503,38506,38508],{"class":27,"line":8058},[25,38502,30916],{"class":35},[25,38504,38505],{"class":244},".block4",[25,38507,290],{"class":240},[25,38509,38080],{"class":244},[25,38511,38512,38514,38516,38518,38520,38522,38524,38526,38529,38531,38533,38535,38537,38539,38541,38543,38545],{"class":27,"line":8082},[25,38513,38085],{"class":244},[25,38515,30927],{"class":5326},[25,38517,290],{"class":240},[25,38519,34941],{"class":35},[25,38521,621],{"class":244},[25,38523,30936],{"class":5326},[25,38525,290],{"class":240},[25,38527,38528],{"class":35},"512",[25,38530,621],{"class":244},[25,38532,30945],{"class":5326},[25,38534,290],{"class":240},[25,38536,315],{"class":35},[25,38538,621],{"class":244},[25,38540,30954],{"class":5326},[25,38542,290],{"class":240},[25,38544,460],{"class":35},[25,38546,38118],{"class":244},[25,38548,38549],{"class":27,"line":8087},[25,38550,38123],{"class":244},[25,38552,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583,38585],{"class":27,"line":8093},[25,38554,38085],{"class":244},[25,38556,30927],{"class":5326},[25,38558,290],{"class":240},[25,38560,38528],{"class":35},[25,38562,621],{"class":244},[25,38564,30936],{"class":5326},[25,38566,290],{"class":240},[25,38568,38528],{"class":35},[25,38570,621],{"class":244},[25,38572,30945],{"class":5326},[25,38574,290],{"class":240},[25,38576,315],{"class":35},[25,38578,621],{"class":244},[25,38580,30954],{"class":5326},[25,38582,290],{"class":240},[25,38584,460],{"class":35},[25,38586,38118],{"class":244},[25,38588,38589],{"class":27,"line":8120},[25,38590,38123],{"class":244},[25,38592,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625],{"class":27,"line":8125},[25,38594,38085],{"class":244},[25,38596,30927],{"class":5326},[25,38598,290],{"class":240},[25,38600,38528],{"class":35},[25,38602,621],{"class":244},[25,38604,30936],{"class":5326},[25,38606,290],{"class":240},[25,38608,38528],{"class":35},[25,38610,621],{"class":244},[25,38612,30945],{"class":5326},[25,38614,290],{"class":240},[25,38616,315],{"class":35},[25,38618,621],{"class":244},[25,38620,30954],{"class":5326},[25,38622,290],{"class":240},[25,38624,460],{"class":35},[25,38626,38118],{"class":244},[25,38628,38629],{"class":27,"line":8131},[25,38630,38123],{"class":244},[25,38632,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657],{"class":27,"line":8143},[25,38634,38168],{"class":244},[25,38636,30945],{"class":5326},[25,38638,290],{"class":240},[25,38640,321],{"class":35},[25,38642,621],{"class":244},[25,38644,31000],{"class":5326},[25,38646,290],{"class":240},[25,38648,321],{"class":35},[25,38650,621],{"class":244},[25,38652,30954],{"class":5326},[25,38654,290],{"class":240},[25,38656,434],{"class":35},[25,38658,251],{"class":244},[25,38660,38661],{"class":27,"line":8155},[25,38662,38197],{"class":244},[25,38664,38665],{"class":27,"line":8167},[25,38666,38667],{"class":302},"        # 第五层\n",[25,38669,38670,38672,38675,38677],{"class":27,"line":9826},[25,38671,30916],{"class":35},[25,38673,38674],{"class":244},".block5",[25,38676,290],{"class":240},[25,38678,38080],{"class":244},[25,38680,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711,38713],{"class":27,"line":9851},[25,38682,38085],{"class":244},[25,38684,30927],{"class":5326},[25,38686,290],{"class":240},[25,38688,38528],{"class":35},[25,38690,621],{"class":244},[25,38692,30936],{"class":5326},[25,38694,290],{"class":240},[25,38696,38528],{"class":35},[25,38698,621],{"class":244},[25,38700,30945],{"class":5326},[25,38702,290],{"class":240},[25,38704,315],{"class":35},[25,38706,621],{"class":244},[25,38708,30954],{"class":5326},[25,38710,290],{"class":240},[25,38712,460],{"class":35},[25,38714,38118],{"class":244},[25,38716,38717],{"class":27,"line":9874},[25,38718,38123],{"class":244},[25,38720,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751,38753],{"class":27,"line":9898},[25,38722,38085],{"class":244},[25,38724,30927],{"class":5326},[25,38726,290],{"class":240},[25,38728,38528],{"class":35},[25,38730,621],{"class":244},[25,38732,30936],{"class":5326},[25,38734,290],{"class":240},[25,38736,38528],{"class":35},[25,38738,621],{"class":244},[25,38740,30945],{"class":5326},[25,38742,290],{"class":240},[25,38744,315],{"class":35},[25,38746,621],{"class":244},[25,38748,30954],{"class":5326},[25,38750,290],{"class":240},[25,38752,460],{"class":35},[25,38754,38118],{"class":244},[25,38756,38757],{"class":27,"line":9903},[25,38758,38123],{"class":244},[25,38760,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785,38787,38789,38791,38793],{"class":27,"line":9908},[25,38762,38085],{"class":244},[25,38764,30927],{"class":5326},[25,38766,290],{"class":240},[25,38768,38528],{"class":35},[25,38770,621],{"class":244},[25,38772,30936],{"class":5326},[25,38774,290],{"class":240},[25,38776,38528],{"class":35},[25,38778,621],{"class":244},[25,38780,30945],{"class":5326},[25,38782,290],{"class":240},[25,38784,315],{"class":35},[25,38786,621],{"class":244},[25,38788,30954],{"class":5326},[25,38790,290],{"class":240},[25,38792,460],{"class":35},[25,38794,38118],{"class":244},[25,38796,38797],{"class":27,"line":9913},[25,38798,38123],{"class":244},[25,38800,38801,38803,38805,38807,38809,38811,38813,38815,38817,38819,38821,38823,38825],{"class":27,"line":9922},[25,38802,38168],{"class":244},[25,38804,30945],{"class":5326},[25,38806,290],{"class":240},[25,38808,321],{"class":35},[25,38810,621],{"class":244},[25,38812,31000],{"class":5326},[25,38814,290],{"class":240},[25,38816,321],{"class":35},[25,38818,621],{"class":244},[25,38820,30954],{"class":5326},[25,38822,290],{"class":240},[25,38824,434],{"class":35},[25,38826,251],{"class":244},[25,38828,38829],{"class":27,"line":9927},[25,38830,38197],{"class":244},[25,38832,38833],{"class":27,"line":9933},[25,38834,38835],{"class":302},"        # 全连接层\n",[25,38837,38838,38840,38843,38845],{"class":27,"line":9954},[25,38839,30916],{"class":35},[25,38841,38842],{"class":244},".block6",[25,38844,290],{"class":240},[25,38846,38080],{"class":244},[25,38848,38849],{"class":27,"line":9960},[25,38850,38851],{"class":302},"            # 平展操作\n",[25,38853,38854],{"class":27,"line":9974},[25,38855,38856],{"class":302},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[25,38858,38859],{"class":27,"line":9980},[25,38860,38861],{"class":244},"            nn.Flatten(),\n",[25,38863,38864,38867,38869,38871,38873,38875,38877,38879,38881],{"class":27,"line":10007},[25,38865,38866],{"class":244},"            nn.Linear(",[25,38868,612],{"class":35},[25,38870,698],{"class":240},[25,38872,612],{"class":35},[25,38874,698],{"class":240},[25,38876,38528],{"class":35},[25,38878,621],{"class":244},[25,38880,34941],{"class":35},[25,38882,38118],{"class":244},[25,38884,38885],{"class":27,"line":10016},[25,38886,38123],{"class":244},[25,38888,38889,38891,38893,38895,38897],{"class":27,"line":10022},[25,38890,38866],{"class":244},[25,38892,34941],{"class":35},[25,38894,621],{"class":244},[25,38896,32141],{"class":35},[25,38898,38118],{"class":244},[25,38900,38901],{"class":27,"line":10030},[25,38902,38123],{"class":244},[25,38904,38905,38907,38909,38911,38913],{"class":27,"line":10035},[25,38906,38866],{"class":244},[25,38908,32141],{"class":35},[25,38910,621],{"class":244},[25,38912,689],{"class":35},[25,38914,251],{"class":244},[25,38916,38917],{"class":27,"line":16714},[25,38918,38197],{"class":244},[25,38920,38921],{"class":27,"line":16720},[25,38922,2510],{"emptyLinePlaceholder":167},[25,38924,38925],{"class":27,"line":16743},[25,38926,38927],{"class":302},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[25,38929,38930],{"class":27,"line":16749},[25,38931,38932],{"class":302},"        # 循环遍历模型\n",[25,38934,38935,38937,38940,38942,38945],{"class":27,"line":16772},[25,38936,3513],{"class":240},[25,38938,38939],{"class":244}," m ",[25,38941,26114],{"class":240},[25,38943,38944],{"class":35}," self",[25,38946,38947],{"class":244},".modules():\n",[25,38949,38950],{"class":27,"line":16786},[25,38951,38952],{"class":302},"            # print(m)\n",[25,38954,38955,38957,38960],{"class":27,"line":16806},[25,38956,4752],{"class":240},[25,38958,38959],{"class":35}," isinstance",[25,38961,38962],{"class":244},"(m,nn.Conv2d):\n",[25,38964,38965],{"class":27,"line":16812},[25,38966,38967],{"class":302},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[25,38969,38970,38973,38976,38978,38981],{"class":27,"line":16823},[25,38971,38972],{"class":244},"                nn.init.kaiming_normal_(m.weight,",[25,38974,38975],{"class":5326},"nonlinearity",[25,38977,290],{"class":240},[25,38979,38980],{"class":45},"'relu'",[25,38982,251],{"class":244},[25,38984,38985],{"class":27,"line":16846},[25,38986,38987],{"class":302},"                # 判断b参数是否存在\n",[25,38989,38990,38993,38996,38999,39002,39005],{"class":27,"line":16868},[25,38991,38992],{"class":240},"                if",[25,38994,38995],{"class":244}," m.bias ",[25,38997,38998],{"class":240},"is",[25,39000,39001],{"class":240}," not",[25,39003,39004],{"class":35}," None",[25,39006,3849],{"class":244},[25,39008,39009],{"class":27,"line":16873},[25,39010,39011],{"class":302},"                    # 如果参数不存在的化初始化b=0\n",[25,39013,39014,39017,39019],{"class":27,"line":16879},[25,39015,39016],{"class":244},"                    nn.init.constant_(m.bias,",[25,39018,434],{"class":35},[25,39020,251],{"class":244},[25,39022,39023],{"class":27,"line":16893},[25,39024,39025],{"class":302},"            # 全连接层初始化\n",[25,39027,39028,39031,39033],{"class":27,"line":16906},[25,39029,39030],{"class":240},"            elif",[25,39032,38959],{"class":35},[25,39034,39035],{"class":244},"(m,nn.Linear):\n",[25,39037,39038],{"class":27,"line":16911},[25,39039,39040],{"class":302},"                # 这个初始化方法是利用的是正太分布的方式\n",[25,39042,39043],{"class":27,"line":16925},[25,39044,39045],{"class":302},"                # 均值为0，方差为0.01\n",[25,39047,39048,39051,39053,39055,39058],{"class":27,"line":16930},[25,39049,39050],{"class":244},"                nn.init.normal_(m.weight,",[25,39052,434],{"class":35},[25,39054,621],{"class":244},[25,39056,39057],{"class":35},"0.01",[25,39059,251],{"class":244},[25,39061,39062],{"class":27,"line":16936},[25,39063,39064],{"class":302},"                # 初始化b参数\n",[25,39066,39067,39069,39071,39073,39075,39077],{"class":27,"line":16941},[25,39068,38992],{"class":240},[25,39070,38995],{"class":244},[25,39072,38998],{"class":240},[25,39074,39001],{"class":240},[25,39076,39004],{"class":35},[25,39078,3849],{"class":244},[25,39080,39081,39083,39085],{"class":27,"line":16955},[25,39082,39016],{"class":244},[25,39084,434],{"class":35},[25,39086,251],{"class":244},[25,39088,39089],{"class":27,"line":16960},[25,39090,2510],{"emptyLinePlaceholder":167},[25,39092,39093],{"class":27,"line":16965},[25,39094,35236],{"class":302},[25,39096,39097,39099,39101],{"class":27,"line":16979},[25,39098,30872],{"class":240},[25,39100,31164],{"class":31},[25,39102,31167],{"class":244},[25,39104,39105,39107,39109,39111],{"class":27,"line":16991},[25,39106,31172],{"class":244},[25,39108,290],{"class":240},[25,39110,30894],{"class":35},[25,39112,39113],{"class":244},".block1(x)\n",[25,39115,39116,39118,39120,39122],{"class":27,"line":16996},[25,39117,31172],{"class":244},[25,39119,290],{"class":240},[25,39121,30894],{"class":35},[25,39123,39124],{"class":244},".block2(x)\n",[25,39126,39127,39129,39131,39133],{"class":27,"line":17009},[25,39128,31172],{"class":244},[25,39130,290],{"class":240},[25,39132,30894],{"class":35},[25,39134,39135],{"class":244},".block3(x)\n",[25,39137,39138,39140,39142,39144],{"class":27,"line":17014},[25,39139,31172],{"class":244},[25,39141,290],{"class":240},[25,39143,30894],{"class":35},[25,39145,39146],{"class":244},".block4(x)\n",[25,39148,39149,39151,39153,39155],{"class":27,"line":17019},[25,39150,31172],{"class":244},[25,39152,290],{"class":240},[25,39154,30894],{"class":35},[25,39156,39157],{"class":244},".block5(x)\n",[25,39159,39160,39162,39164,39166],{"class":27,"line":17024},[25,39161,31172],{"class":244},[25,39163,290],{"class":240},[25,39165,30894],{"class":35},[25,39167,39168],{"class":244},".block6(x)\n",[25,39170,39171,39173],{"class":27,"line":17037},[25,39172,14862],{"class":240},[25,39174,31280],{"class":244},[25,39176,39177],{"class":27,"line":17042},[25,39178,2510],{"emptyLinePlaceholder":167},[25,39180,39181],{"class":27,"line":32704},[25,39182,39183],{"class":302},"# 验证模型\n",[25,39185,39186,39188,39190,39192,39195],{"class":27,"line":32710},[25,39187,1642],{"class":240},[25,39189,31291],{"class":35},[25,39191,3059],{"class":240},[25,39193,39194],{"class":45},"'__main__'",[25,39196,3849],{"class":244},[25,39198,39199,39201,39203,39205,39207,39209,39211,39213,39215],{"class":27,"line":32716},[25,39200,31308],{"class":244},[25,39202,290],{"class":240},[25,39204,30522],{"class":244},[25,39206,31315],{"class":45},[25,39208,1815],{"class":240},[25,39210,31320],{"class":244},[25,39212,1812],{"class":240},[25,39214,30547],{"class":45},[25,39216,251],{"class":244},[25,39218,39219,39221],{"class":27,"line":32722},[25,39220,31370],{"class":35},[25,39222,30556],{"class":244},[25,39224,39225,39227,39229],{"class":27,"line":32728},[25,39226,31360],{"class":244},[25,39228,290],{"class":240},[25,39230,39231],{"class":244},"VGG16().to(device)\n",[25,39233,39234,39236,39238,39240,39242,39244,39246,39248],{"class":27,"line":32739},[25,39235,31370],{"class":35},[25,39237,31373],{"class":244},[25,39239,460],{"class":35},[25,39241,621],{"class":244},[25,39243,31572],{"class":35},[25,39245,621],{"class":244},[25,39247,31572],{"class":35},[25,39249,31386],{"class":244},[194,39251,39252],{"start":39},[106,39253,39254],{},"训练代码",[99,39256,39257],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[99,39259,39260],{},"解决方式:",[99,39262,39263],{},"①权重初始化",[15,39265,39267],{"className":30449,"code":39266,"language":30451,"meta":20,"style":20},"# 权重初始化,保证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",[22,39268,39269,39274,39279,39291,39296,39304,39309,39322,39327,39341,39346,39355,39360,39369,39374,39379,39392,39397,39411],{"__ignoreMap":20},[25,39270,39271],{"class":27,"line":28},[25,39272,39273],{"class":302},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[25,39275,39276],{"class":27,"line":39},[25,39277,39278],{"class":302},"# 循环遍历模型\n",[25,39280,39281,39283,39285,39287,39289],{"class":27,"line":51},[25,39282,3135],{"class":240},[25,39284,38939],{"class":244},[25,39286,26114],{"class":240},[25,39288,38944],{"class":35},[25,39290,38947],{"class":244},[25,39292,39293],{"class":27,"line":59},[25,39294,39295],{"class":302},"    # print(m)\n",[25,39297,39298,39300,39302],{"class":27,"line":67},[25,39299,3211],{"class":240},[25,39301,38959],{"class":35},[25,39303,38962],{"class":244},[25,39305,39306],{"class":27,"line":75},[25,39307,39308],{"class":302},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[25,39310,39311,39314,39316,39318,39320],{"class":27,"line":83},[25,39312,39313],{"class":244},"        nn.init.kaiming_normal_(m.weight,",[25,39315,38975],{"class":5326},[25,39317,290],{"class":240},[25,39319,38980],{"class":45},[25,39321,251],{"class":244},[25,39323,39324],{"class":27,"line":91},[25,39325,39326],{"class":302},"        # 判断b参数是否存在\n",[25,39328,39329,39331,39333,39335,39337,39339],{"class":27,"line":1429},[25,39330,2607],{"class":240},[25,39332,38995],{"class":244},[25,39334,38998],{"class":240},[25,39336,39001],{"class":240},[25,39338,39004],{"class":35},[25,39340,3849],{"class":244},[25,39342,39343],{"class":27,"line":1441},[25,39344,39345],{"class":302},"            # 如果参数不存在的化初始化b=0\n",[25,39347,39348,39351,39353],{"class":27,"line":1723},[25,39349,39350],{"class":244},"            nn.init.constant_(m.bias,",[25,39352,434],{"class":35},[25,39354,251],{"class":244},[25,39356,39357],{"class":27,"line":1728},[25,39358,39359],{"class":302},"    # 全连接层初始化\n",[25,39361,39362,39365,39367],{"class":27,"line":1734},[25,39363,39364],{"class":240},"    elif",[25,39366,38959],{"class":35},[25,39368,39035],{"class":244},[25,39370,39371],{"class":27,"line":1739},[25,39372,39373],{"class":302},"        # 这个初始化方法是利用的是正太分布的方式\n",[25,39375,39376],{"class":27,"line":1753},[25,39377,39378],{"class":302},"        # 均值为0，方差为0.01\n",[25,39380,39381,39384,39386,39388,39390],{"class":27,"line":1758},[25,39382,39383],{"class":244},"        nn.init.normal_(m.weight,",[25,39385,434],{"class":35},[25,39387,621],{"class":244},[25,39389,39057],{"class":35},[25,39391,251],{"class":244},[25,39393,39394],{"class":27,"line":1764},[25,39395,39396],{"class":302},"        # 初始化b参数\n",[25,39398,39399,39401,39403,39405,39407,39409],{"class":27,"line":1785},[25,39400,2607],{"class":240},[25,39402,38995],{"class":244},[25,39404,38998],{"class":240},[25,39406,39001],{"class":240},[25,39408,39004],{"class":35},[25,39410,3849],{"class":244},[25,39412,39413,39415,39417],{"class":27,"line":1790},[25,39414,39350],{"class":244},[25,39416,434],{"class":35},[25,39418,251],{"class":244},[99,39420,39421],{},"②尽可能地增加批次",[99,39423,39424],{},"训练完整代码：",[15,39426,39427],{"className":30449,"code":37970,"language":30451,"meta":20,"style":20},[22,39428,39429,39435,39445,39455,39465,39469,39485,39493,39511,39515,39519,39529,39565,39569,39605,39609,39637,39641,39645,39655,39691,39695,39731,39735,39763,39767,39771,39781,39817,39821,39857,39861,39897,39901,39929,39933,39937,39947,39983,39987,40023,40027,40063,40067,40095,40099,40103,40113,40149,40153,40189,40193,40229,40233,40261,40265,40269,40279,40283,40287,40291,40311,40315,40327,40331,40343,40347,40351,40355,40359,40371,40375,40383,40387,40399,40403,40417,40421,40429,40433,40441,40445,40449,40461,40465,40479,40487,40491,40495,40503,40513,40523,40533,40543,40553,40563,40569,40573,40577,40589,40609,40615,40623],{"__ignoreMap":20},[25,39430,39431,39433],{"class":27,"line":28},[25,39432,30463],{"class":240},[25,39434,30466],{"class":244},[25,39436,39437,39439,39441,39443],{"class":27,"line":39},[25,39438,30808],{"class":240},[25,39440,37985],{"class":244},[25,39442,30463],{"class":240},[25,39444,37990],{"class":244},[25,39446,39447,39449,39451,39453],{"class":27,"line":51},[25,39448,30808],{"class":240},[25,39450,30811],{"class":244},[25,39452,30463],{"class":240},[25,39454,30816],{"class":244},[25,39456,39457,39459,39461,39463],{"class":27,"line":59},[25,39458,30808],{"class":240},[25,39460,30828],{"class":244},[25,39462,30463],{"class":240},[25,39464,30833],{"class":244},[25,39466,39467],{"class":27,"line":67},[25,39468,2510],{"emptyLinePlaceholder":167},[25,39470,39471,39473,39475,39477,39479,39481,39483],{"class":27,"line":75},[25,39472,14804],{"class":240},[25,39474,38021],{"class":31},[25,39476,245],{"class":244},[25,39478,30849],{"class":31},[25,39480,801],{"class":244},[25,39482,30854],{"class":31},[25,39484,30857],{"class":244},[25,39486,39487,39489,39491],{"class":27,"line":83},[25,39488,30872],{"class":240},[25,39490,30875],{"class":35},[25,39492,30878],{"class":244},[25,39494,39495,39497,39499,39501,39503,39505,39507,39509],{"class":27,"line":91},[25,39496,30888],{"class":35},[25,39498,245],{"class":244},[25,39500,38048],{"class":35},[25,39502,12545],{"class":244},[25,39504,30894],{"class":35},[25,39506,30897],{"class":244},[25,39508,30900],{"class":35},[25,39510,2086],{"class":244},[25,39512,39513],{"class":27,"line":1429},[25,39514,38063],{"class":302},[25,39516,39517],{"class":27,"line":1441},[25,39518,38068],{"class":302},[25,39520,39521,39523,39525,39527],{"class":27,"line":1723},[25,39522,30916],{"class":35},[25,39524,38075],{"class":244},[25,39526,290],{"class":240},[25,39528,38080],{"class":244},[25,39530,39531,39533,39535,39537,39539,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561,39563],{"class":27,"line":1728},[25,39532,38085],{"class":244},[25,39534,30927],{"class":5326},[25,39536,290],{"class":240},[25,39538,460],{"class":35},[25,39540,621],{"class":244},[25,39542,30936],{"class":5326},[25,39544,290],{"class":240},[25,39546,446],{"class":35},[25,39548,621],{"class":244},[25,39550,30945],{"class":5326},[25,39552,290],{"class":240},[25,39554,315],{"class":35},[25,39556,621],{"class":244},[25,39558,30954],{"class":5326},[25,39560,290],{"class":240},[25,39562,460],{"class":35},[25,39564,38118],{"class":244},[25,39566,39567],{"class":27,"line":1734},[25,39568,38123],{"class":244},[25,39570,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603],{"class":27,"line":1739},[25,39572,38085],{"class":244},[25,39574,30927],{"class":5326},[25,39576,290],{"class":240},[25,39578,446],{"class":35},[25,39580,621],{"class":244},[25,39582,30936],{"class":5326},[25,39584,290],{"class":240},[25,39586,446],{"class":35},[25,39588,621],{"class":244},[25,39590,30945],{"class":5326},[25,39592,290],{"class":240},[25,39594,315],{"class":35},[25,39596,621],{"class":244},[25,39598,30954],{"class":5326},[25,39600,290],{"class":240},[25,39602,460],{"class":35},[25,39604,38118],{"class":244},[25,39606,39607],{"class":27,"line":1753},[25,39608,38123],{"class":244},[25,39610,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635],{"class":27,"line":1758},[25,39612,38168],{"class":244},[25,39614,30945],{"class":5326},[25,39616,290],{"class":240},[25,39618,321],{"class":35},[25,39620,621],{"class":244},[25,39622,31000],{"class":5326},[25,39624,290],{"class":240},[25,39626,321],{"class":35},[25,39628,621],{"class":244},[25,39630,30954],{"class":5326},[25,39632,290],{"class":240},[25,39634,434],{"class":35},[25,39636,251],{"class":244},[25,39638,39639],{"class":27,"line":1764},[25,39640,38197],{"class":244},[25,39642,39643],{"class":27,"line":1785},[25,39644,38202],{"class":302},[25,39646,39647,39649,39651,39653],{"class":27,"line":1790},[25,39648,30916],{"class":35},[25,39650,38209],{"class":244},[25,39652,290],{"class":240},[25,39654,38080],{"class":244},[25,39656,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689],{"class":27,"line":1804},[25,39658,38085],{"class":244},[25,39660,30927],{"class":5326},[25,39662,290],{"class":240},[25,39664,446],{"class":35},[25,39666,621],{"class":244},[25,39668,30936],{"class":5326},[25,39670,290],{"class":240},[25,39672,32141],{"class":35},[25,39674,621],{"class":244},[25,39676,30945],{"class":5326},[25,39678,290],{"class":240},[25,39680,315],{"class":35},[25,39682,621],{"class":244},[25,39684,30954],{"class":5326},[25,39686,290],{"class":240},[25,39688,460],{"class":35},[25,39690,38118],{"class":244},[25,39692,39693],{"class":27,"line":1809},[25,39694,38123],{"class":244},[25,39696,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729],{"class":27,"line":1838},[25,39698,38085],{"class":244},[25,39700,30927],{"class":5326},[25,39702,290],{"class":240},[25,39704,32141],{"class":35},[25,39706,621],{"class":244},[25,39708,30936],{"class":5326},[25,39710,290],{"class":240},[25,39712,32141],{"class":35},[25,39714,621],{"class":244},[25,39716,30945],{"class":5326},[25,39718,290],{"class":240},[25,39720,315],{"class":35},[25,39722,621],{"class":244},[25,39724,30954],{"class":5326},[25,39726,290],{"class":240},[25,39728,460],{"class":35},[25,39730,38118],{"class":244},[25,39732,39733],{"class":27,"line":1843},[25,39734,38123],{"class":244},[25,39736,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761],{"class":27,"line":1860},[25,39738,38168],{"class":244},[25,39740,30945],{"class":5326},[25,39742,290],{"class":240},[25,39744,321],{"class":35},[25,39746,621],{"class":244},[25,39748,31000],{"class":5326},[25,39750,290],{"class":240},[25,39752,321],{"class":35},[25,39754,621],{"class":244},[25,39756,30954],{"class":5326},[25,39758,290],{"class":240},[25,39760,434],{"class":35},[25,39762,251],{"class":244},[25,39764,39765],{"class":27,"line":1865},[25,39766,38197],{"class":244},[25,39768,39769],{"class":27,"line":1870},[25,39770,38330],{"class":302},[25,39772,39773,39775,39777,39779],{"class":27,"line":1875},[25,39774,30916],{"class":35},[25,39776,38337],{"class":244},[25,39778,290],{"class":240},[25,39780,38080],{"class":244},[25,39782,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815],{"class":27,"line":1889},[25,39784,38085],{"class":244},[25,39786,30927],{"class":5326},[25,39788,290],{"class":240},[25,39790,32141],{"class":35},[25,39792,621],{"class":244},[25,39794,30936],{"class":5326},[25,39796,290],{"class":240},[25,39798,34941],{"class":35},[25,39800,621],{"class":244},[25,39802,30945],{"class":5326},[25,39804,290],{"class":240},[25,39806,315],{"class":35},[25,39808,621],{"class":244},[25,39810,30954],{"class":5326},[25,39812,290],{"class":240},[25,39814,460],{"class":35},[25,39816,38118],{"class":244},[25,39818,39819],{"class":27,"line":1894},[25,39820,38123],{"class":244},[25,39822,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855],{"class":27,"line":2687},[25,39824,38085],{"class":244},[25,39826,30927],{"class":5326},[25,39828,290],{"class":240},[25,39830,34941],{"class":35},[25,39832,621],{"class":244},[25,39834,30936],{"class":5326},[25,39836,290],{"class":240},[25,39838,34941],{"class":35},[25,39840,621],{"class":244},[25,39842,30945],{"class":5326},[25,39844,290],{"class":240},[25,39846,315],{"class":35},[25,39848,621],{"class":244},[25,39850,30954],{"class":5326},[25,39852,290],{"class":240},[25,39854,460],{"class":35},[25,39856,38118],{"class":244},[25,39858,39859],{"class":27,"line":2701},[25,39860,38123],{"class":244},[25,39862,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895],{"class":27,"line":2709},[25,39864,38085],{"class":244},[25,39866,30927],{"class":5326},[25,39868,290],{"class":240},[25,39870,34941],{"class":35},[25,39872,621],{"class":244},[25,39874,30936],{"class":5326},[25,39876,290],{"class":240},[25,39878,34941],{"class":35},[25,39880,621],{"class":244},[25,39882,30945],{"class":5326},[25,39884,290],{"class":240},[25,39886,315],{"class":35},[25,39888,621],{"class":244},[25,39890,30954],{"class":5326},[25,39892,290],{"class":240},[25,39894,460],{"class":35},[25,39896,38118],{"class":244},[25,39898,39899],{"class":27,"line":2714},[25,39900,38123],{"class":244},[25,39902,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927],{"class":27,"line":2720},[25,39904,38168],{"class":244},[25,39906,30945],{"class":5326},[25,39908,290],{"class":240},[25,39910,321],{"class":35},[25,39912,621],{"class":244},[25,39914,31000],{"class":5326},[25,39916,290],{"class":240},[25,39918,321],{"class":35},[25,39920,621],{"class":244},[25,39922,30954],{"class":5326},[25,39924,290],{"class":240},[25,39926,434],{"class":35},[25,39928,251],{"class":244},[25,39930,39931],{"class":27,"line":2726},[25,39932,38197],{"class":244},[25,39934,39935],{"class":27,"line":2731},[25,39936,38498],{"class":302},[25,39938,39939,39941,39943,39945],{"class":27,"line":8058},[25,39940,30916],{"class":35},[25,39942,38505],{"class":244},[25,39944,290],{"class":240},[25,39946,38080],{"class":244},[25,39948,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981],{"class":27,"line":8082},[25,39950,38085],{"class":244},[25,39952,30927],{"class":5326},[25,39954,290],{"class":240},[25,39956,34941],{"class":35},[25,39958,621],{"class":244},[25,39960,30936],{"class":5326},[25,39962,290],{"class":240},[25,39964,38528],{"class":35},[25,39966,621],{"class":244},[25,39968,30945],{"class":5326},[25,39970,290],{"class":240},[25,39972,315],{"class":35},[25,39974,621],{"class":244},[25,39976,30954],{"class":5326},[25,39978,290],{"class":240},[25,39980,460],{"class":35},[25,39982,38118],{"class":244},[25,39984,39985],{"class":27,"line":8087},[25,39986,38123],{"class":244},[25,39988,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021],{"class":27,"line":8093},[25,39990,38085],{"class":244},[25,39992,30927],{"class":5326},[25,39994,290],{"class":240},[25,39996,38528],{"class":35},[25,39998,621],{"class":244},[25,40000,30936],{"class":5326},[25,40002,290],{"class":240},[25,40004,38528],{"class":35},[25,40006,621],{"class":244},[25,40008,30945],{"class":5326},[25,40010,290],{"class":240},[25,40012,315],{"class":35},[25,40014,621],{"class":244},[25,40016,30954],{"class":5326},[25,40018,290],{"class":240},[25,40020,460],{"class":35},[25,40022,38118],{"class":244},[25,40024,40025],{"class":27,"line":8120},[25,40026,38123],{"class":244},[25,40028,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061],{"class":27,"line":8125},[25,40030,38085],{"class":244},[25,40032,30927],{"class":5326},[25,40034,290],{"class":240},[25,40036,38528],{"class":35},[25,40038,621],{"class":244},[25,40040,30936],{"class":5326},[25,40042,290],{"class":240},[25,40044,38528],{"class":35},[25,40046,621],{"class":244},[25,40048,30945],{"class":5326},[25,40050,290],{"class":240},[25,40052,315],{"class":35},[25,40054,621],{"class":244},[25,40056,30954],{"class":5326},[25,40058,290],{"class":240},[25,40060,460],{"class":35},[25,40062,38118],{"class":244},[25,40064,40065],{"class":27,"line":8131},[25,40066,38123],{"class":244},[25,40068,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093],{"class":27,"line":8143},[25,40070,38168],{"class":244},[25,40072,30945],{"class":5326},[25,40074,290],{"class":240},[25,40076,321],{"class":35},[25,40078,621],{"class":244},[25,40080,31000],{"class":5326},[25,40082,290],{"class":240},[25,40084,321],{"class":35},[25,40086,621],{"class":244},[25,40088,30954],{"class":5326},[25,40090,290],{"class":240},[25,40092,434],{"class":35},[25,40094,251],{"class":244},[25,40096,40097],{"class":27,"line":8155},[25,40098,38197],{"class":244},[25,40100,40101],{"class":27,"line":8167},[25,40102,38667],{"class":302},[25,40104,40105,40107,40109,40111],{"class":27,"line":9826},[25,40106,30916],{"class":35},[25,40108,38674],{"class":244},[25,40110,290],{"class":240},[25,40112,38080],{"class":244},[25,40114,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147],{"class":27,"line":9851},[25,40116,38085],{"class":244},[25,40118,30927],{"class":5326},[25,40120,290],{"class":240},[25,40122,38528],{"class":35},[25,40124,621],{"class":244},[25,40126,30936],{"class":5326},[25,40128,290],{"class":240},[25,40130,38528],{"class":35},[25,40132,621],{"class":244},[25,40134,30945],{"class":5326},[25,40136,290],{"class":240},[25,40138,315],{"class":35},[25,40140,621],{"class":244},[25,40142,30954],{"class":5326},[25,40144,290],{"class":240},[25,40146,460],{"class":35},[25,40148,38118],{"class":244},[25,40150,40151],{"class":27,"line":9874},[25,40152,38123],{"class":244},[25,40154,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187],{"class":27,"line":9898},[25,40156,38085],{"class":244},[25,40158,30927],{"class":5326},[25,40160,290],{"class":240},[25,40162,38528],{"class":35},[25,40164,621],{"class":244},[25,40166,30936],{"class":5326},[25,40168,290],{"class":240},[25,40170,38528],{"class":35},[25,40172,621],{"class":244},[25,40174,30945],{"class":5326},[25,40176,290],{"class":240},[25,40178,315],{"class":35},[25,40180,621],{"class":244},[25,40182,30954],{"class":5326},[25,40184,290],{"class":240},[25,40186,460],{"class":35},[25,40188,38118],{"class":244},[25,40190,40191],{"class":27,"line":9903},[25,40192,38123],{"class":244},[25,40194,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219,40221,40223,40225,40227],{"class":27,"line":9908},[25,40196,38085],{"class":244},[25,40198,30927],{"class":5326},[25,40200,290],{"class":240},[25,40202,38528],{"class":35},[25,40204,621],{"class":244},[25,40206,30936],{"class":5326},[25,40208,290],{"class":240},[25,40210,38528],{"class":35},[25,40212,621],{"class":244},[25,40214,30945],{"class":5326},[25,40216,290],{"class":240},[25,40218,315],{"class":35},[25,40220,621],{"class":244},[25,40222,30954],{"class":5326},[25,40224,290],{"class":240},[25,40226,460],{"class":35},[25,40228,38118],{"class":244},[25,40230,40231],{"class":27,"line":9913},[25,40232,38123],{"class":244},[25,40234,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259],{"class":27,"line":9922},[25,40236,38168],{"class":244},[25,40238,30945],{"class":5326},[25,40240,290],{"class":240},[25,40242,321],{"class":35},[25,40244,621],{"class":244},[25,40246,31000],{"class":5326},[25,40248,290],{"class":240},[25,40250,321],{"class":35},[25,40252,621],{"class":244},[25,40254,30954],{"class":5326},[25,40256,290],{"class":240},[25,40258,434],{"class":35},[25,40260,251],{"class":244},[25,40262,40263],{"class":27,"line":9927},[25,40264,38197],{"class":244},[25,40266,40267],{"class":27,"line":9933},[25,40268,38835],{"class":302},[25,40270,40271,40273,40275,40277],{"class":27,"line":9954},[25,40272,30916],{"class":35},[25,40274,38842],{"class":244},[25,40276,290],{"class":240},[25,40278,38080],{"class":244},[25,40280,40281],{"class":27,"line":9960},[25,40282,38851],{"class":302},[25,40284,40285],{"class":27,"line":9974},[25,40286,38856],{"class":302},[25,40288,40289],{"class":27,"line":9980},[25,40290,38861],{"class":244},[25,40292,40293,40295,40297,40299,40301,40303,40305,40307,40309],{"class":27,"line":10007},[25,40294,38866],{"class":244},[25,40296,612],{"class":35},[25,40298,698],{"class":240},[25,40300,612],{"class":35},[25,40302,698],{"class":240},[25,40304,38528],{"class":35},[25,40306,621],{"class":244},[25,40308,34941],{"class":35},[25,40310,38118],{"class":244},[25,40312,40313],{"class":27,"line":10016},[25,40314,38123],{"class":244},[25,40316,40317,40319,40321,40323,40325],{"class":27,"line":10022},[25,40318,38866],{"class":244},[25,40320,34941],{"class":35},[25,40322,621],{"class":244},[25,40324,32141],{"class":35},[25,40326,38118],{"class":244},[25,40328,40329],{"class":27,"line":10030},[25,40330,38123],{"class":244},[25,40332,40333,40335,40337,40339,40341],{"class":27,"line":10035},[25,40334,38866],{"class":244},[25,40336,32141],{"class":35},[25,40338,621],{"class":244},[25,40340,689],{"class":35},[25,40342,251],{"class":244},[25,40344,40345],{"class":27,"line":16714},[25,40346,38197],{"class":244},[25,40348,40349],{"class":27,"line":16720},[25,40350,2510],{"emptyLinePlaceholder":167},[25,40352,40353],{"class":27,"line":16743},[25,40354,38927],{"class":302},[25,40356,40357],{"class":27,"line":16749},[25,40358,38932],{"class":302},[25,40360,40361,40363,40365,40367,40369],{"class":27,"line":16772},[25,40362,3513],{"class":240},[25,40364,38939],{"class":244},[25,40366,26114],{"class":240},[25,40368,38944],{"class":35},[25,40370,38947],{"class":244},[25,40372,40373],{"class":27,"line":16786},[25,40374,38952],{"class":302},[25,40376,40377,40379,40381],{"class":27,"line":16806},[25,40378,4752],{"class":240},[25,40380,38959],{"class":35},[25,40382,38962],{"class":244},[25,40384,40385],{"class":27,"line":16812},[25,40386,38967],{"class":302},[25,40388,40389,40391,40393,40395,40397],{"class":27,"line":16823},[25,40390,38972],{"class":244},[25,40392,38975],{"class":5326},[25,40394,290],{"class":240},[25,40396,38980],{"class":45},[25,40398,251],{"class":244},[25,40400,40401],{"class":27,"line":16846},[25,40402,38987],{"class":302},[25,40404,40405,40407,40409,40411,40413,40415],{"class":27,"line":16868},[25,40406,38992],{"class":240},[25,40408,38995],{"class":244},[25,40410,38998],{"class":240},[25,40412,39001],{"class":240},[25,40414,39004],{"class":35},[25,40416,3849],{"class":244},[25,40418,40419],{"class":27,"line":16873},[25,40420,39011],{"class":302},[25,40422,40423,40425,40427],{"class":27,"line":16879},[25,40424,39016],{"class":244},[25,40426,434],{"class":35},[25,40428,251],{"class":244},[25,40430,40431],{"class":27,"line":16893},[25,40432,39025],{"class":302},[25,40434,40435,40437,40439],{"class":27,"line":16906},[25,40436,39030],{"class":240},[25,40438,38959],{"class":35},[25,40440,39035],{"class":244},[25,40442,40443],{"class":27,"line":16911},[25,40444,39040],{"class":302},[25,40446,40447],{"class":27,"line":16925},[25,40448,39045],{"class":302},[25,40450,40451,40453,40455,40457,40459],{"class":27,"line":16930},[25,40452,39050],{"class":244},[25,40454,434],{"class":35},[25,40456,621],{"class":244},[25,40458,39057],{"class":35},[25,40460,251],{"class":244},[25,40462,40463],{"class":27,"line":16936},[25,40464,39064],{"class":302},[25,40466,40467,40469,40471,40473,40475,40477],{"class":27,"line":16941},[25,40468,38992],{"class":240},[25,40470,38995],{"class":244},[25,40472,38998],{"class":240},[25,40474,39001],{"class":240},[25,40476,39004],{"class":35},[25,40478,3849],{"class":244},[25,40480,40481,40483,40485],{"class":27,"line":16955},[25,40482,39016],{"class":244},[25,40484,434],{"class":35},[25,40486,251],{"class":244},[25,40488,40489],{"class":27,"line":16960},[25,40490,2510],{"emptyLinePlaceholder":167},[25,40492,40493],{"class":27,"line":16965},[25,40494,35236],{"class":302},[25,40496,40497,40499,40501],{"class":27,"line":16979},[25,40498,30872],{"class":240},[25,40500,31164],{"class":31},[25,40502,31167],{"class":244},[25,40504,40505,40507,40509,40511],{"class":27,"line":16991},[25,40506,31172],{"class":244},[25,40508,290],{"class":240},[25,40510,30894],{"class":35},[25,40512,39113],{"class":244},[25,40514,40515,40517,40519,40521],{"class":27,"line":16996},[25,40516,31172],{"class":244},[25,40518,290],{"class":240},[25,40520,30894],{"class":35},[25,40522,39124],{"class":244},[25,40524,40525,40527,40529,40531],{"class":27,"line":17009},[25,40526,31172],{"class":244},[25,40528,290],{"class":240},[25,40530,30894],{"class":35},[25,40532,39135],{"class":244},[25,40534,40535,40537,40539,40541],{"class":27,"line":17014},[25,40536,31172],{"class":244},[25,40538,290],{"class":240},[25,40540,30894],{"class":35},[25,40542,39146],{"class":244},[25,40544,40545,40547,40549,40551],{"class":27,"line":17019},[25,40546,31172],{"class":244},[25,40548,290],{"class":240},[25,40550,30894],{"class":35},[25,40552,39157],{"class":244},[25,40554,40555,40557,40559,40561],{"class":27,"line":17024},[25,40556,31172],{"class":244},[25,40558,290],{"class":240},[25,40560,30894],{"class":35},[25,40562,39168],{"class":244},[25,40564,40565,40567],{"class":27,"line":17037},[25,40566,14862],{"class":240},[25,40568,31280],{"class":244},[25,40570,40571],{"class":27,"line":17042},[25,40572,2510],{"emptyLinePlaceholder":167},[25,40574,40575],{"class":27,"line":32704},[25,40576,39183],{"class":302},[25,40578,40579,40581,40583,40585,40587],{"class":27,"line":32710},[25,40580,1642],{"class":240},[25,40582,31291],{"class":35},[25,40584,3059],{"class":240},[25,40586,39194],{"class":45},[25,40588,3849],{"class":244},[25,40590,40591,40593,40595,40597,40599,40601,40603,40605,40607],{"class":27,"line":32716},[25,40592,31308],{"class":244},[25,40594,290],{"class":240},[25,40596,30522],{"class":244},[25,40598,31315],{"class":45},[25,40600,1815],{"class":240},[25,40602,31320],{"class":244},[25,40604,1812],{"class":240},[25,40606,30547],{"class":45},[25,40608,251],{"class":244},[25,40610,40611,40613],{"class":27,"line":32722},[25,40612,31370],{"class":35},[25,40614,30556],{"class":244},[25,40616,40617,40619,40621],{"class":27,"line":32728},[25,40618,31360],{"class":244},[25,40620,290],{"class":240},[25,40622,39231],{"class":244},[25,40624,40625,40627,40629,40631,40633,40635,40637,40639],{"class":27,"line":32739},[25,40626,31370],{"class":35},[25,40628,31373],{"class":244},[25,40630,460],{"class":35},[25,40632,621],{"class":244},[25,40634,31572],{"class":35},[25,40636,621],{"class":244},[25,40638,31572],{"class":35},[25,40640,31386],{"class":244},[194,40642,40643],{"start":51},[106,40644,40645],{},"测试代码",[15,40647,40649],{"className":30449,"code":40648,"language":30451,"meta":20,"style":20},"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",[22,40650,40651,40657,40667,40677,40681,40691,40702,40706,40710,40714,40722,40738,40748,40764,40774,40788,40792,40802,40812,40822,40828,40832,40836,40844,40848,40864,40872,40876,40880,40888,40896,40900,40904,40908,40912,40918,40922,40932,40940,40948,40952,40956,40960,40968,40972,40988,40992,40996,41000,41012,41016,41028,41032,41036,41048,41052,41062,41066,41070,41082,41086,41095,41099,41103,41111,41115,41123,41127,41131,41135,41139,41143,41159,41167,41171,41175,41223,41229,41233,41243,41251,41259,41263,41267,41271,41275,41283,41287,41303,41307,41315,41323],{"__ignoreMap":20},[25,40652,40653,40655],{"class":27,"line":28},[25,40654,30463],{"class":240},[25,40656,30466],{"class":244},[25,40658,40659,40661,40663,40665],{"class":27,"line":39},[25,40660,30463],{"class":240},[25,40662,31486],{"class":244},[25,40664,31454],{"class":240},[25,40666,31491],{"class":244},[25,40668,40669,40671,40673,40675],{"class":27,"line":51},[25,40670,30808],{"class":240},[25,40672,31469],{"class":244},[25,40674,30463],{"class":240},[25,40676,31474],{"class":244},[25,40678,40679],{"class":27,"line":59},[25,40680,33993],{"class":302},[25,40682,40683,40685,40687,40689],{"class":27,"line":67},[25,40684,30808],{"class":240},[25,40686,31439],{"class":244},[25,40688,30463],{"class":240},[25,40690,31444],{"class":244},[25,40692,40693,40695,40697,40699],{"class":27,"line":75},[25,40694,30808],{"class":240},[25,40696,31985],{"class":244},[25,40698,30463],{"class":240},[25,40700,40701],{"class":35}," VGG16\n",[25,40703,40704],{"class":27,"line":83},[25,40705,2510],{"emptyLinePlaceholder":167},[25,40707,40708],{"class":27,"line":91},[25,40709,2510],{"emptyLinePlaceholder":167},[25,40711,40712],{"class":27,"line":1429},[25,40713,34022],{"class":302},[25,40715,40716,40718,40720],{"class":27,"line":1441},[25,40717,32018],{"class":240},[25,40719,34029],{"class":31},[25,40721,32024],{"class":244},[25,40723,40724,40726,40728,40730,40732,40734,40736],{"class":27,"line":1723},[25,40725,34036],{"class":244},[25,40727,290],{"class":240},[25,40729,31526],{"class":244},[25,40731,31529],{"class":5326},[25,40733,290],{"class":240},[25,40735,31534],{"class":45},[25,40737,31537],{"class":244},[25,40739,40740,40742,40744,40746],{"class":27,"line":1728},[25,40741,34053],{"class":5326},[25,40743,290],{"class":240},[25,40745,34058],{"class":35},[25,40747,31537],{"class":244},[25,40749,40750,40752,40754,40756,40758,40760,40762],{"class":27,"line":1734},[25,40751,34065],{"class":5326},[25,40753,290],{"class":240},[25,40755,31564],{"class":244},[25,40757,31567],{"class":5326},[25,40759,290],{"class":240},[25,40761,31572],{"class":35},[25,40763,31575],{"class":244},[25,40765,40766,40768,40770,40772],{"class":27,"line":1739},[25,40767,34082],{"class":5326},[25,40769,290],{"class":240},[25,40771,31547],{"class":35},[25,40773,251],{"class":244},[25,40775,40776,40778,40780,40782,40784,40786],{"class":27,"line":1753},[25,40777,34093],{"class":244},[25,40779,290],{"class":240},[25,40781,31605],{"class":244},[25,40783,31608],{"class":5326},[25,40785,290],{"class":240},[25,40787,34104],{"class":244},[25,40789,40790],{"class":27,"line":1758},[25,40791,34109],{"class":302},[25,40793,40794,40796,40798,40800],{"class":27,"line":1764},[25,40795,34114],{"class":5326},[25,40797,290],{"class":240},[25,40799,460],{"class":35},[25,40801,31537],{"class":244},[25,40803,40804,40806,40808,40810],{"class":27,"line":1785},[25,40805,34125],{"class":5326},[25,40807,290],{"class":240},[25,40809,31547],{"class":35},[25,40811,31537],{"class":244},[25,40813,40814,40816,40818,40820],{"class":27,"line":1790},[25,40815,34136],{"class":5326},[25,40817,290],{"class":240},[25,40819,434],{"class":35},[25,40821,251],{"class":244},[25,40823,40824,40826],{"class":27,"line":1804},[25,40825,4200],{"class":240},[25,40827,34149],{"class":244},[25,40829,40830],{"class":27,"line":1809},[25,40831,2510],{"emptyLinePlaceholder":167},[25,40833,40834],{"class":27,"line":1838},[25,40835,34158],{"class":302},[25,40837,40838,40840,40842],{"class":27,"line":1843},[25,40839,32018],{"class":240},[25,40841,34165],{"class":31},[25,40843,34168],{"class":244},[25,40845,40846],{"class":27,"line":1860},[25,40847,34173],{"class":302},[25,40849,40850,40852,40854,40856,40858,40860,40862],{"class":27,"line":1865},[25,40851,31308],{"class":244},[25,40853,290],{"class":240},[25,40855,31315],{"class":45},[25,40857,1815],{"class":240},[25,40859,31320],{"class":244},[25,40861,1812],{"class":240},[25,40863,34190],{"class":45},[25,40865,40866,40868,40870],{"class":27,"line":1870},[25,40867,31360],{"class":244},[25,40869,290],{"class":240},[25,40871,32360],{"class":244},[25,40873,40874],{"class":27,"line":1875},[25,40875,2510],{"emptyLinePlaceholder":167},[25,40877,40878],{"class":27,"line":1889},[25,40879,34207],{"class":302},[25,40881,40882,40884,40886],{"class":27,"line":1894},[25,40883,34212],{"class":244},[25,40885,290],{"class":240},[25,40887,32413],{"class":35},[25,40889,40890,40892,40894],{"class":27,"line":2687},[25,40891,34221],{"class":244},[25,40893,290],{"class":240},[25,40895,3195],{"class":35},[25,40897,40898],{"class":27,"line":2701},[25,40899,2510],{"emptyLinePlaceholder":167},[25,40901,40902],{"class":27,"line":2709},[25,40903,34234],{"class":302},[25,40905,40906],{"class":27,"line":2714},[25,40907,34239],{"class":302},[25,40909,40910],{"class":27,"line":2720},[25,40911,34244],{"class":302},[25,40913,40914,40916],{"class":27,"line":2726},[25,40915,34249],{"class":240},[25,40917,32955],{"class":244},[25,40919,40920],{"class":27,"line":2731},[25,40921,34256],{"class":302},[25,40923,40924,40926,40928,40930],{"class":27,"line":8058},[25,40925,3513],{"class":240},[25,40927,34263],{"class":244},[25,40929,26114],{"class":240},[25,40931,34268],{"class":244},[25,40933,40934,40936,40938],{"class":27,"line":8082},[25,40935,34273],{"class":244},[25,40937,290],{"class":240},[25,40939,34278],{"class":244},[25,40941,40942,40944,40946],{"class":27,"line":8087},[25,40943,34283],{"class":244},[25,40945,290],{"class":240},[25,40947,34288],{"class":244},[25,40949,40950],{"class":27,"line":8093},[25,40951,34293],{"class":302},[25,40953,40954],{"class":27,"line":8120},[25,40955,32946],{"class":244},[25,40957,40958],{"class":27,"line":8125},[25,40959,34302],{"class":302},[25,40961,40962,40964,40966],{"class":27,"line":8131},[25,40963,32731],{"class":244},[25,40965,290],{"class":240},[25,40967,34311],{"class":244},[25,40969,40970],{"class":27,"line":8143},[25,40971,34316],{"class":302},[25,40973,40974,40976,40978,40980,40982,40984,40986],{"class":27,"line":8155},[25,40975,32748],{"class":244},[25,40977,290],{"class":240},[25,40979,32753],{"class":244},[25,40981,32756],{"class":5326},[25,40983,290],{"class":240},[25,40985,460],{"class":35},[25,40987,251],{"class":244},[25,40989,40990],{"class":27,"line":8167},[25,40991,34337],{"class":302},[25,40993,40994],{"class":27,"line":9826},[25,40995,34342],{"class":302},[25,40997,40998],{"class":27,"line":9851},[25,40999,34347],{"class":302},[25,41001,41002,41004,41006,41008,41010],{"class":27,"line":9874},[25,41003,34352],{"class":244},[25,41005,9587],{"class":240},[25,41007,32858],{"class":244},[25,41009,3059],{"class":240},[25,41011,34361],{"class":244},[25,41013,41014],{"class":27,"line":9898},[25,41015,34366],{"class":302},[25,41017,41018,41020,41022,41024,41026],{"class":27,"line":9903},[25,41019,34371],{"class":244},[25,41021,9587],{"class":240},[25,41023,34376],{"class":244},[25,41025,434],{"class":35},[25,41027,251],{"class":244},[25,41029,41030],{"class":27,"line":9908},[25,41031,2510],{"emptyLinePlaceholder":167},[25,41033,41034],{"class":27,"line":9913},[25,41035,34389],{"class":302},[25,41037,41038,41040,41042,41044,41046],{"class":27,"line":9922},[25,41039,34394],{"class":244},[25,41041,290],{"class":240},[25,41043,34399],{"class":244},[25,41045,827],{"class":240},[25,41047,34404],{"class":244},[25,41049,41050],{"class":27,"line":9927},[25,41051,34409],{"class":302},[25,41053,41054,41056,41058,41060],{"class":27,"line":9933},[25,41055,32522],{"class":35},[25,41057,245],{"class":244},[25,41059,34418],{"class":45},[25,41061,34421],{"class":244},[25,41063,41064],{"class":27,"line":9954},[25,41065,2510],{"emptyLinePlaceholder":167},[25,41067,41068],{"class":27,"line":9960},[25,41069,34430],{"class":302},[25,41071,41072,41074,41076,41078,41080],{"class":27,"line":9974},[25,41073,1642],{"class":240},[25,41075,31291],{"class":35},[25,41077,3059],{"class":240},[25,41079,31296],{"class":45},[25,41081,3849],{"class":244},[25,41083,41084],{"class":27,"line":9980},[25,41085,34447],{"class":302},[25,41087,41088,41090,41092],{"class":27,"line":10007},[25,41089,31360],{"class":244},[25,41091,290],{"class":240},[25,41093,41094],{"class":244},"VGG16()\n",[25,41096,41097],{"class":27,"line":10016},[25,41098,34460],{"class":302},[25,41100,41101],{"class":27,"line":10022},[25,41102,34465],{"class":302},[25,41104,41105,41107,41109],{"class":27,"line":10030},[25,41106,34470],{"class":244},[25,41108,34473],{"class":45},[25,41110,30568],{"class":244},[25,41112,41113],{"class":27,"line":10035},[25,41114,34480],{"class":302},[25,41116,41117,41119,41121],{"class":27,"line":16714},[25,41118,34093],{"class":244},[25,41120,290],{"class":240},[25,41122,34489],{"class":244},[25,41124,41125],{"class":27,"line":16720},[25,41126,34494],{"class":302},[25,41128,41129],{"class":27,"line":16743},[25,41130,34499],{"class":244},[25,41132,41133],{"class":27,"line":16749},[25,41134,2510],{"emptyLinePlaceholder":167},[25,41136,41137],{"class":27,"line":16772},[25,41138,34508],{"class":302},[25,41140,41141],{"class":27,"line":16786},[25,41142,34513],{"class":302},[25,41144,41145,41147,41149,41151,41153,41155,41157],{"class":27,"line":16806},[25,41146,31308],{"class":244},[25,41148,290],{"class":240},[25,41150,31315],{"class":45},[25,41152,1815],{"class":240},[25,41154,31320],{"class":244},[25,41156,1812],{"class":240},[25,41158,34190],{"class":45},[25,41160,41161,41163,41165],{"class":27,"line":16812},[25,41162,31360],{"class":244},[25,41164,290],{"class":240},[25,41166,32360],{"class":244},[25,41168,41169],{"class":27,"line":16823},[25,41170,34542],{"class":302},[25,41172,41173],{"class":27,"line":16846},[25,41174,34547],{"class":302},[25,41176,41177,41179,41181,41183,41185,41187,41189,41191,41193,41195,41197,41199,41201,41203,41205,41207,41209,41211,41213,41215,41217,41219,41221],{"class":27,"line":16868},[25,41178,34552],{"class":244},[25,41180,290],{"class":240},[25,41182,1133],{"class":244},[25,41184,34559],{"class":45},[25,41186,621],{"class":244},[25,41188,34564],{"class":45},[25,41190,621],{"class":244},[25,41192,34569],{"class":45},[25,41194,621],{"class":244},[25,41196,34574],{"class":45},[25,41198,621],{"class":244},[25,41200,34579],{"class":45},[25,41202,621],{"class":244},[25,41204,34584],{"class":45},[25,41206,621],{"class":244},[25,41208,34589],{"class":45},[25,41210,621],{"class":244},[25,41212,34594],{"class":45},[25,41214,621],{"class":244},[25,41216,34599],{"class":45},[25,41218,621],{"class":244},[25,41220,34604],{"class":45},[25,41222,33317],{"class":244},[25,41224,41225,41227],{"class":27,"line":16873},[25,41226,34249],{"class":240},[25,41228,32955],{"class":244},[25,41230,41231],{"class":27,"line":16879},[25,41232,34617],{"class":302},[25,41234,41235,41237,41239,41241],{"class":27,"line":16893},[25,41236,3513],{"class":240},[25,41238,34624],{"class":244},[25,41240,26114],{"class":240},[25,41242,34268],{"class":244},[25,41244,41245,41247,41249],{"class":27,"line":16906},[25,41246,32681],{"class":244},[25,41248,290],{"class":240},[25,41250,32686],{"class":244},[25,41252,41253,41255,41257],{"class":27,"line":16911},[25,41254,32696],{"class":244},[25,41256,290],{"class":240},[25,41258,32701],{"class":244},[25,41260,41261],{"class":27,"line":16925},[25,41262,2510],{"emptyLinePlaceholder":167},[25,41264,41265],{"class":27,"line":16930},[25,41266,34653],{"class":302},[25,41268,41269],{"class":27,"line":16936},[25,41270,32946],{"class":244},[25,41272,41273],{"class":27,"line":16941},[25,41274,34662],{"class":302},[25,41276,41277,41279,41281],{"class":27,"line":16955},[25,41278,32731],{"class":244},[25,41280,290],{"class":240},[25,41282,32736],{"class":244},[25,41284,41285],{"class":27,"line":16960},[25,41286,34675],{"class":302},[25,41288,41289,41291,41293,41295,41297,41299,41301],{"class":27,"line":16965},[25,41290,32748],{"class":244},[25,41292,290],{"class":240},[25,41294,32753],{"class":244},[25,41296,32756],{"class":5326},[25,41298,290],{"class":240},[25,41300,460],{"class":35},[25,41302,251],{"class":244},[25,41304,41305],{"class":27,"line":16979},[25,41306,34696],{"class":302},[25,41308,41309,41311,41313],{"class":27,"line":16991},[25,41310,34701],{"class":244},[25,41312,290],{"class":240},[25,41314,34706],{"class":244},[25,41316,41317,41319,41321],{"class":27,"line":16996},[25,41318,34711],{"class":244},[25,41320,290],{"class":240},[25,41322,34716],{"class":244},[25,41324,41325,41327,41329,41331,41333,41335,41337,41339],{"class":27,"line":17009},[25,41326,34721],{"class":35},[25,41328,245],{"class":244},[25,41330,34726],{"class":45},[25,41332,34729],{"class":244},[25,41334,34732],{"class":45},[25,41336,621],{"class":244},[25,41338,34737],{"class":45},[25,41340,34740],{"class":244},[210,41342,41344],{"id":41343},"_23googlenet","2.3.GoogLeNet",[22108,41346,41348],{"id":41347},"_231原理","2.3.1.原理",[194,41350,41351],{},[106,41352,41353],{},"网络结构",[99,41355,41356],{},[155,41357],{"alt":20,"src":41358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[99,41360,41361],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[99,41363,41364],{},[155,41365],{"alt":20,"src":41366},"\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",[99,41368,41369],{},[155,41370],{"alt":20,"src":41371},"\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",[99,41373,41374],{},[155,41375],{"alt":20,"src":41376},"\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",[194,41378,41379],{"start":39},[106,41380,41381],{},"1x1卷积的优点",[99,41383,41384],{},[155,41385],{"alt":20,"src":41386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[194,41388,41389],{"start":51},[106,41390,41391],{},"全局平均池化层优点",[99,41393,41394],{},[155,41395],{"alt":20,"src":41396},"\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",[99,41398,41399],{},[155,41400],{"alt":20,"src":41401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[194,41403,41404],{"start":59},[106,41405,41406],{},"参数详细描述",[99,41408,41409],{},[155,41410],{"alt":20,"src":41411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[99,41413,41414],{},[155,41415],{"alt":20,"src":41416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[99,41418,41419],{},[155,41420],{"alt":20,"src":41421},"\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",[99,41423,41424],{},[155,41425],{"alt":20,"src":41426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[99,41428,41429],{},[155,41430],{"alt":20,"src":41431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[99,41433,41434],{},[155,41435],{"alt":20,"src":41436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[99,41438,41439],{},[155,41440],{"alt":20,"src":41441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[99,41443,41444],{},[155,41445],{"alt":20,"src":41446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[99,41448,41449],{},[155,41450],{"alt":20,"src":41451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[99,41453,41454],{},[155,41455],{"alt":20,"src":41456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[99,41458,41459],{},[155,41460],{"alt":20,"src":41461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[99,41463,41464],{},[155,41465],{"alt":20,"src":41466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[99,41468,41469],{},[155,41470],{"alt":20,"src":41471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[99,41473,41474],{},[155,41475],{"alt":20,"src":41476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[99,41478,41479],{},[155,41480],{"alt":20,"src":41481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[99,41483,41484],{},[155,41485],{"alt":20,"src":41486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[99,41488,41489],{},[155,41490],{"alt":20,"src":41491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[99,41493,41494],{},[155,41495],{"alt":20,"src":41496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[99,41498,41499],{},[155,41500],{"alt":20,"src":41501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[99,41503,41504],{},[155,41505],{"alt":20,"src":41506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[99,41508,41509],{},[155,41510],{"alt":20,"src":41511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[22108,41513,41515],{"id":41514},"_232代码实现","2.3.2.代码实现",[194,41517,41518],{},[106,41519,30782],{},[99,41521,41522],{},"根据原理一步一步搭建即可",[15,41524,41526],{"className":30449,"code":41525,"language":30451,"meta":20,"style":20},"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",[22,41527,41528,41534,41544,41554,41558,41575,41584,41599,41609,41614,41647,41652,41689,41736,41741,41777,41824,41829,41834,41869,41901,41905,41913,41929,41953,41978,41999,42004,42019,42023,42027,42032,42049,42054,42063,42078,42089,42133,42137,42165,42169,42180,42208,42212,42249,42253,42281,42285,42296,42332,42364,42392,42396,42407,42441,42473,42505,42538,42572,42600,42604,42615,42648,42680,42694,42698,42711,42715,42720,42732,42740,42762,42767,42772,42777,42782,42787,42792,42806,42814,42823,42836,42851,42860,42864,42872,42883,42894,42905,42916,42927,42933,42937,42942,42954,42974,42983],{"__ignoreMap":20},[25,41529,41530,41532],{"class":27,"line":28},[25,41531,30463],{"class":240},[25,41533,30466],{"class":244},[25,41535,41536,41538,41540,41542],{"class":27,"line":39},[25,41537,30808],{"class":240},[25,41539,30811],{"class":244},[25,41541,30463],{"class":240},[25,41543,30816],{"class":244},[25,41545,41546,41548,41550,41552],{"class":27,"line":51},[25,41547,30808],{"class":240},[25,41549,30828],{"class":244},[25,41551,30463],{"class":240},[25,41553,30833],{"class":244},[25,41555,41556],{"class":27,"line":59},[25,41557,2510],{"emptyLinePlaceholder":167},[25,41559,41560,41562,41565,41567,41569,41571,41573],{"class":27,"line":67},[25,41561,14804],{"class":240},[25,41563,41564],{"class":31}," Inception",[25,41566,245],{"class":244},[25,41568,30849],{"class":31},[25,41570,801],{"class":244},[25,41572,30854],{"class":31},[25,41574,30857],{"class":244},[25,41576,41577,41579,41581],{"class":27,"line":75},[25,41578,30872],{"class":240},[25,41580,30875],{"class":35},[25,41582,41583],{"class":244},"(self,in_channels,c1,c2,c3,c4):\n",[25,41585,41586,41588,41591,41593,41595,41597],{"class":27,"line":83},[25,41587,30888],{"class":35},[25,41589,41590],{"class":244},"(Inception,",[25,41592,30894],{"class":35},[25,41594,30897],{"class":244},[25,41596,30900],{"class":35},[25,41598,2086],{"class":244},[25,41600,41601,41603,41605,41607],{"class":27,"line":91},[25,41602,30916],{"class":35},[25,41604,34842],{"class":244},[25,41606,290],{"class":240},[25,41608,34847],{"class":244},[25,41610,41611],{"class":27,"line":1429},[25,41612,41613],{"class":302},"        # 路线1：定义1*1卷积\n",[25,41615,41616,41618,41621,41623,41625,41627,41629,41632,41634,41636,41639,41641,41643,41645],{"class":27,"line":1441},[25,41617,30916],{"class":35},[25,41619,41620],{"class":244},".p1_1",[25,41622,290],{"class":240},[25,41624,30924],{"class":244},[25,41626,30927],{"class":5326},[25,41628,290],{"class":240},[25,41630,41631],{"class":244},"in_channels,",[25,41633,30936],{"class":5326},[25,41635,290],{"class":240},[25,41637,41638],{"class":244},"c1,",[25,41640,30945],{"class":5326},[25,41642,290],{"class":240},[25,41644,460],{"class":35},[25,41646,251],{"class":244},[25,41648,41649],{"class":27,"line":1723},[25,41650,41651],{"class":302},"        # 路线2：定义1*1卷积和3*3\n",[25,41653,41654,41656,41659,41661,41663,41665,41667,41669,41671,41673,41676,41678,41681,41683,41685,41687],{"class":27,"line":1728},[25,41655,30916],{"class":35},[25,41657,41658],{"class":244},".p2_1",[25,41660,290],{"class":240},[25,41662,30924],{"class":244},[25,41664,30927],{"class":5326},[25,41666,290],{"class":240},[25,41668,41631],{"class":244},[25,41670,30936],{"class":5326},[25,41672,290],{"class":240},[25,41674,41675],{"class":244},"c2[",[25,41677,434],{"class":35},[25,41679,41680],{"class":244},"],",[25,41682,30945],{"class":5326},[25,41684,290],{"class":240},[25,41686,460],{"class":35},[25,41688,251],{"class":244},[25,41690,41691,41693,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734],{"class":27,"line":1734},[25,41692,30916],{"class":35},[25,41694,41695],{"class":244},".p2_2",[25,41697,290],{"class":240},[25,41699,30924],{"class":244},[25,41701,30927],{"class":5326},[25,41703,290],{"class":240},[25,41705,41675],{"class":244},[25,41707,434],{"class":35},[25,41709,41680],{"class":244},[25,41711,30936],{"class":5326},[25,41713,290],{"class":240},[25,41715,41675],{"class":244},[25,41717,460],{"class":35},[25,41719,41680],{"class":244},[25,41721,30945],{"class":5326},[25,41723,290],{"class":240},[25,41725,315],{"class":35},[25,41727,621],{"class":244},[25,41729,30954],{"class":5326},[25,41731,290],{"class":240},[25,41733,460],{"class":35},[25,41735,251],{"class":244},[25,41737,41738],{"class":27,"line":1739},[25,41739,41740],{"class":302},"        # 路线3：定义1*1卷积和5*5\n",[25,41742,41743,41745,41748,41750,41752,41754,41756,41758,41760,41762,41765,41767,41769,41771,41773,41775],{"class":27,"line":1753},[25,41744,30916],{"class":35},[25,41746,41747],{"class":244},".p3_1",[25,41749,290],{"class":240},[25,41751,30924],{"class":244},[25,41753,30927],{"class":5326},[25,41755,290],{"class":240},[25,41757,41631],{"class":244},[25,41759,30936],{"class":5326},[25,41761,290],{"class":240},[25,41763,41764],{"class":244},"c3[",[25,41766,434],{"class":35},[25,41768,41680],{"class":244},[25,41770,30945],{"class":5326},[25,41772,290],{"class":240},[25,41774,460],{"class":35},[25,41776,251],{"class":244},[25,41778,41779,41781,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802,41804,41806,41808,41810,41812,41814,41816,41818,41820,41822],{"class":27,"line":1758},[25,41780,30916],{"class":35},[25,41782,41783],{"class":244},".p3_2",[25,41785,290],{"class":240},[25,41787,30924],{"class":244},[25,41789,30927],{"class":5326},[25,41791,290],{"class":240},[25,41793,41764],{"class":244},[25,41795,434],{"class":35},[25,41797,41680],{"class":244},[25,41799,30936],{"class":5326},[25,41801,290],{"class":240},[25,41803,41764],{"class":244},[25,41805,460],{"class":35},[25,41807,41680],{"class":244},[25,41809,30945],{"class":5326},[25,41811,290],{"class":240},[25,41813,562],{"class":35},[25,41815,621],{"class":244},[25,41817,30954],{"class":5326},[25,41819,290],{"class":240},[25,41821,321],{"class":35},[25,41823,251],{"class":244},[25,41825,41826],{"class":27,"line":1764},[25,41827,41828],{"class":302},"        # 路线4：定义3*3最大池化和1*1卷积\n",[25,41830,41831],{"class":27,"line":1785},[25,41832,41833],{"class":302},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[25,41835,41836,41838,41841,41843,41845,41847,41849,41851,41853,41855,41857,41859,41861,41863,41865,41867],{"class":27,"line":1790},[25,41837,30916],{"class":35},[25,41839,41840],{"class":244},".p4_1",[25,41842,290],{"class":240},[25,41844,34900],{"class":244},[25,41846,30945],{"class":5326},[25,41848,290],{"class":240},[25,41850,315],{"class":35},[25,41852,621],{"class":244},[25,41854,31000],{"class":5326},[25,41856,290],{"class":240},[25,41858,460],{"class":35},[25,41860,621],{"class":244},[25,41862,30954],{"class":5326},[25,41864,290],{"class":240},[25,41866,460],{"class":35},[25,41868,251],{"class":244},[25,41870,41871,41873,41876,41878,41880,41882,41884,41886,41888,41890,41893,41895,41897,41899],{"class":27,"line":1804},[25,41872,30916],{"class":35},[25,41874,41875],{"class":244},".p4_2",[25,41877,290],{"class":240},[25,41879,30924],{"class":244},[25,41881,30927],{"class":5326},[25,41883,290],{"class":240},[25,41885,41631],{"class":244},[25,41887,30936],{"class":5326},[25,41889,290],{"class":240},[25,41891,41892],{"class":244},"c4,",[25,41894,30945],{"class":5326},[25,41896,290],{"class":240},[25,41898,460],{"class":35},[25,41900,251],{"class":244},[25,41902,41903],{"class":27,"line":1809},[25,41904,2510],{"emptyLinePlaceholder":167},[25,41906,41907,41909,41911],{"class":27,"line":1838},[25,41908,30872],{"class":240},[25,41910,31164],{"class":31},[25,41912,31167],{"class":244},[25,41914,41915,41918,41920,41922,41924,41926],{"class":27,"line":1843},[25,41916,41917],{"class":244},"        p1",[25,41919,290],{"class":240},[25,41921,30894],{"class":35},[25,41923,35255],{"class":244},[25,41925,30894],{"class":35},[25,41927,41928],{"class":244},".p1_1(x))\n",[25,41930,41931,41933,41935,41937,41939,41941,41944,41946,41948,41950],{"class":27,"line":1860},[25,41932,7195],{"class":244},[25,41934,290],{"class":240},[25,41936,30894],{"class":35},[25,41938,35255],{"class":244},[25,41940,30894],{"class":35},[25,41942,41943],{"class":244},".p2_2(",[25,41945,30894],{"class":35},[25,41947,35255],{"class":244},[25,41949,30894],{"class":35},[25,41951,41952],{"class":244},".p2_1(x))))\n",[25,41954,41955,41958,41960,41962,41964,41966,41969,41971,41973,41975],{"class":27,"line":1865},[25,41956,41957],{"class":244},"        p3",[25,41959,290],{"class":240},[25,41961,30894],{"class":35},[25,41963,35255],{"class":244},[25,41965,30894],{"class":35},[25,41967,41968],{"class":244},".p3_2(",[25,41970,30894],{"class":35},[25,41972,35255],{"class":244},[25,41974,30894],{"class":35},[25,41976,41977],{"class":244},".p3_1(x))))\n",[25,41979,41980,41983,41985,41987,41989,41991,41994,41996],{"class":27,"line":1870},[25,41981,41982],{"class":244},"        p4",[25,41984,290],{"class":240},[25,41986,30894],{"class":35},[25,41988,35255],{"class":244},[25,41990,30894],{"class":35},[25,41992,41993],{"class":244},".p4_2(",[25,41995,30894],{"class":35},[25,41997,41998],{"class":244},".p4_1(x)))\n",[25,42000,42001],{"class":27,"line":1875},[25,42002,42003],{"class":302},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[25,42005,42006,42008,42011,42013,42015,42017],{"class":27,"line":1889},[25,42007,14862],{"class":240},[25,42009,42010],{"class":244}," torch.cat((p1,p2,p3,p4),",[25,42012,32756],{"class":5326},[25,42014,290],{"class":240},[25,42016,460],{"class":35},[25,42018,251],{"class":244},[25,42020,42021],{"class":27,"line":1894},[25,42022,2510],{"emptyLinePlaceholder":167},[25,42024,42025],{"class":27,"line":2687},[25,42026,2510],{"emptyLinePlaceholder":167},[25,42028,42029],{"class":27,"line":2701},[25,42030,42031],{"class":302},"# 搭建GoogLeNet网络\n",[25,42033,42034,42036,42039,42041,42043,42045,42047],{"class":27,"line":2709},[25,42035,14804],{"class":240},[25,42037,42038],{"class":31}," GoogLeNet",[25,42040,245],{"class":244},[25,42042,30849],{"class":31},[25,42044,801],{"class":244},[25,42046,30854],{"class":31},[25,42048,30857],{"class":244},[25,42050,42051],{"class":27,"line":2714},[25,42052,42053],{"class":302},"    # 必须把Inception导入到里边\n",[25,42055,42056,42058,42060],{"class":27,"line":2720},[25,42057,30872],{"class":240},[25,42059,30875],{"class":35},[25,42061,42062],{"class":244},"(self,Inception):\n",[25,42064,42065,42067,42070,42072,42074,42076],{"class":27,"line":2726},[25,42066,30888],{"class":35},[25,42068,42069],{"class":244},"(GoogLeNet,",[25,42071,30894],{"class":35},[25,42073,30897],{"class":244},[25,42075,30900],{"class":35},[25,42077,2086],{"class":244},[25,42079,42080,42082,42085,42087],{"class":27,"line":2731},[25,42081,30916],{"class":35},[25,42083,42084],{"class":244},".b1",[25,42086,290],{"class":240},[25,42088,38080],{"class":244},[25,42090,42091,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129,42131],{"class":27,"line":8058},[25,42092,38085],{"class":244},[25,42094,30927],{"class":5326},[25,42096,290],{"class":240},[25,42098,460],{"class":35},[25,42100,621],{"class":244},[25,42102,30936],{"class":5326},[25,42104,290],{"class":240},[25,42106,446],{"class":35},[25,42108,621],{"class":244},[25,42110,30945],{"class":5326},[25,42112,290],{"class":240},[25,42114,612],{"class":35},[25,42116,621],{"class":244},[25,42118,31000],{"class":5326},[25,42120,290],{"class":240},[25,42122,321],{"class":35},[25,42124,621],{"class":244},[25,42126,30954],{"class":5326},[25,42128,290],{"class":240},[25,42130,315],{"class":35},[25,42132,38118],{"class":244},[25,42134,42135],{"class":27,"line":8082},[25,42136,38123],{"class":244},[25,42138,42139,42141,42143,42145,42147,42149,42151,42153,42155,42157,42159,42161,42163],{"class":27,"line":8087},[25,42140,38168],{"class":244},[25,42142,30945],{"class":5326},[25,42144,290],{"class":240},[25,42146,315],{"class":35},[25,42148,621],{"class":244},[25,42150,31000],{"class":5326},[25,42152,290],{"class":240},[25,42154,321],{"class":35},[25,42156,621],{"class":244},[25,42158,30954],{"class":5326},[25,42160,290],{"class":240},[25,42162,460],{"class":35},[25,42164,251],{"class":244},[25,42166,42167],{"class":27,"line":8093},[25,42168,38197],{"class":244},[25,42170,42171,42173,42176,42178],{"class":27,"line":8120},[25,42172,30916],{"class":35},[25,42174,42175],{"class":244},".b2",[25,42177,290],{"class":240},[25,42179,38080],{"class":244},[25,42181,42182,42184,42186,42188,42190,42192,42194,42196,42198,42200,42202,42204,42206],{"class":27,"line":8125},[25,42183,38085],{"class":244},[25,42185,30927],{"class":5326},[25,42187,290],{"class":240},[25,42189,446],{"class":35},[25,42191,621],{"class":244},[25,42193,30936],{"class":5326},[25,42195,290],{"class":240},[25,42197,446],{"class":35},[25,42199,621],{"class":244},[25,42201,30945],{"class":5326},[25,42203,290],{"class":240},[25,42205,460],{"class":35},[25,42207,38118],{"class":244},[25,42209,42210],{"class":27,"line":8131},[25,42211,38123],{"class":244},[25,42213,42214,42216,42218,42220,42222,42224,42226,42228,42231,42233,42235,42237,42239,42241,42243,42245,42247],{"class":27,"line":8143},[25,42215,38085],{"class":244},[25,42217,30927],{"class":5326},[25,42219,290],{"class":240},[25,42221,446],{"class":35},[25,42223,621],{"class":244},[25,42225,30936],{"class":5326},[25,42227,290],{"class":240},[25,42229,42230],{"class":35},"192",[25,42232,621],{"class":244},[25,42234,30945],{"class":5326},[25,42236,290],{"class":240},[25,42238,315],{"class":35},[25,42240,621],{"class":244},[25,42242,30954],{"class":5326},[25,42244,290],{"class":240},[25,42246,460],{"class":35},[25,42248,38118],{"class":244},[25,42250,42251],{"class":27,"line":8155},[25,42252,38123],{"class":244},[25,42254,42255,42257,42259,42261,42263,42265,42267,42269,42271,42273,42275,42277,42279],{"class":27,"line":8167},[25,42256,38168],{"class":244},[25,42258,30945],{"class":5326},[25,42260,290],{"class":240},[25,42262,315],{"class":35},[25,42264,621],{"class":244},[25,42266,31000],{"class":5326},[25,42268,290],{"class":240},[25,42270,321],{"class":35},[25,42272,621],{"class":244},[25,42274,30954],{"class":5326},[25,42276,290],{"class":240},[25,42278,460],{"class":35},[25,42280,251],{"class":244},[25,42282,42283],{"class":27,"line":9826},[25,42284,38197],{"class":244},[25,42286,42287,42289,42292,42294],{"class":27,"line":9851},[25,42288,30916],{"class":35},[25,42290,42291],{"class":244},".b3",[25,42293,290],{"class":240},[25,42295,38080],{"class":244},[25,42297,42298,42301,42303,42305,42307,42310,42312,42314,42316,42319,42321,42323,42325,42328,42330],{"class":27,"line":9874},[25,42299,42300],{"class":244},"            Inception(",[25,42302,42230],{"class":35},[25,42304,621],{"class":244},[25,42306,446],{"class":35},[25,42308,42309],{"class":244},",(",[25,42311,452],{"class":35},[25,42313,621],{"class":244},[25,42315,32141],{"class":35},[25,42317,42318],{"class":244},"),(",[25,42320,844],{"class":35},[25,42322,621],{"class":244},[25,42324,440],{"class":35},[25,42326,42327],{"class":244},"),",[25,42329,440],{"class":35},[25,42331,38118],{"class":244},[25,42333,42334,42336,42338,42340,42342,42344,42346,42348,42350,42352,42354,42356,42358,42360,42362],{"class":27,"line":9898},[25,42335,42300],{"class":244},[25,42337,34941],{"class":35},[25,42339,621],{"class":244},[25,42341,32141],{"class":35},[25,42343,42309],{"class":244},[25,42345,32141],{"class":35},[25,42347,621],{"class":244},[25,42349,42230],{"class":35},[25,42351,42318],{"class":244},[25,42353,440],{"class":35},[25,42355,621],{"class":244},[25,42357,452],{"class":35},[25,42359,42327],{"class":244},[25,42361,446],{"class":35},[25,42363,38118],{"class":244},[25,42365,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390],{"class":27,"line":9903},[25,42367,38168],{"class":244},[25,42369,30945],{"class":5326},[25,42371,290],{"class":240},[25,42373,315],{"class":35},[25,42375,621],{"class":244},[25,42377,31000],{"class":5326},[25,42379,290],{"class":240},[25,42381,321],{"class":35},[25,42383,621],{"class":244},[25,42385,30954],{"class":5326},[25,42387,290],{"class":240},[25,42389,460],{"class":35},[25,42391,251],{"class":244},[25,42393,42394],{"class":27,"line":9908},[25,42395,38197],{"class":244},[25,42397,42398,42400,42403,42405],{"class":27,"line":9913},[25,42399,30916],{"class":35},[25,42401,42402],{"class":244},".b4",[25,42404,290],{"class":240},[25,42406,38080],{"class":244},[25,42408,42409,42411,42414,42416,42418,42420,42422,42424,42427,42429,42431,42433,42435,42437,42439],{"class":27,"line":9922},[25,42410,42300],{"class":244},[25,42412,42413],{"class":35},"480",[25,42415,621],{"class":244},[25,42417,42230],{"class":35},[25,42419,42309],{"class":244},[25,42421,452],{"class":35},[25,42423,621],{"class":244},[25,42425,42426],{"class":35},"208",[25,42428,42318],{"class":244},[25,42430,844],{"class":35},[25,42432,621],{"class":244},[25,42434,850],{"class":35},[25,42436,42327],{"class":244},[25,42438,446],{"class":35},[25,42440,38118],{"class":244},[25,42442,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471],{"class":27,"line":9927},[25,42444,42300],{"class":244},[25,42446,38528],{"class":35},[25,42448,621],{"class":244},[25,42450,21158],{"class":35},[25,42452,42309],{"class":244},[25,42454,861],{"class":35},[25,42456,621],{"class":244},[25,42458,31572],{"class":35},[25,42460,42318],{"class":244},[25,42462,1043],{"class":35},[25,42464,621],{"class":244},[25,42466,446],{"class":35},[25,42468,42327],{"class":244},[25,42470,446],{"class":35},[25,42472,38118],{"class":244},[25,42474,42475,42477,42479,42481,42483,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503],{"class":27,"line":9933},[25,42476,42300],{"class":244},[25,42478,38528],{"class":35},[25,42480,621],{"class":244},[25,42482,32141],{"class":35},[25,42484,42309],{"class":244},[25,42486,32141],{"class":35},[25,42488,621],{"class":244},[25,42490,34941],{"class":35},[25,42492,42318],{"class":244},[25,42494,1043],{"class":35},[25,42496,621],{"class":244},[25,42498,446],{"class":35},[25,42500,42327],{"class":244},[25,42502,446],{"class":35},[25,42504,38118],{"class":244},[25,42506,42507,42509,42511,42513,42515,42517,42519,42521,42524,42526,42528,42530,42532,42534,42536],{"class":27,"line":9954},[25,42508,42300],{"class":244},[25,42510,38528],{"class":35},[25,42512,621],{"class":244},[25,42514,861],{"class":35},[25,42516,42309],{"class":244},[25,42518,32141],{"class":35},[25,42520,621],{"class":244},[25,42522,42523],{"class":35},"288",[25,42525,42318],{"class":244},[25,42527,440],{"class":35},[25,42529,621],{"class":244},[25,42531,446],{"class":35},[25,42533,42327],{"class":244},[25,42535,446],{"class":35},[25,42537,38118],{"class":244},[25,42539,42540,42542,42545,42547,42549,42551,42553,42555,42558,42560,42562,42564,42566,42568,42570],{"class":27,"line":9960},[25,42541,42300],{"class":244},[25,42543,42544],{"class":35},"528",[25,42546,621],{"class":244},[25,42548,34941],{"class":35},[25,42550,42309],{"class":244},[25,42552,21158],{"class":35},[25,42554,621],{"class":244},[25,42556,42557],{"class":35},"320",[25,42559,42318],{"class":244},[25,42561,440],{"class":35},[25,42563,621],{"class":244},[25,42565,32141],{"class":35},[25,42567,42327],{"class":244},[25,42569,32141],{"class":35},[25,42571,38118],{"class":244},[25,42573,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598],{"class":27,"line":9974},[25,42575,38168],{"class":244},[25,42577,30945],{"class":5326},[25,42579,290],{"class":240},[25,42581,315],{"class":35},[25,42583,621],{"class":244},[25,42585,31000],{"class":5326},[25,42587,290],{"class":240},[25,42589,321],{"class":35},[25,42591,621],{"class":244},[25,42593,30954],{"class":5326},[25,42595,290],{"class":240},[25,42597,460],{"class":35},[25,42599,251],{"class":244},[25,42601,42602],{"class":27,"line":9980},[25,42603,38197],{"class":244},[25,42605,42606,42608,42611,42613],{"class":27,"line":10007},[25,42607,30916],{"class":35},[25,42609,42610],{"class":244},".b5",[25,42612,290],{"class":240},[25,42614,38080],{"class":244},[25,42616,42617,42619,42622,42624,42626,42628,42630,42632,42634,42636,42638,42640,42642,42644,42646],{"class":27,"line":10016},[25,42618,42300],{"class":244},[25,42620,42621],{"class":35},"832",[25,42623,621],{"class":244},[25,42625,34941],{"class":35},[25,42627,42309],{"class":244},[25,42629,21158],{"class":35},[25,42631,621],{"class":244},[25,42633,42557],{"class":35},[25,42635,42318],{"class":244},[25,42637,440],{"class":35},[25,42639,621],{"class":244},[25,42641,32141],{"class":35},[25,42643,42327],{"class":244},[25,42645,32141],{"class":35},[25,42647,38118],{"class":244},[25,42649,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672,42674,42676,42678],{"class":27,"line":10022},[25,42651,42300],{"class":244},[25,42653,42621],{"class":35},[25,42655,621],{"class":244},[25,42657,35011],{"class":35},[25,42659,42309],{"class":244},[25,42661,42230],{"class":35},[25,42663,621],{"class":244},[25,42665,35011],{"class":35},[25,42667,42318],{"class":244},[25,42669,850],{"class":35},[25,42671,621],{"class":244},[25,42673,32141],{"class":35},[25,42675,42327],{"class":244},[25,42677,32141],{"class":35},[25,42679,38118],{"class":244},[25,42681,42682,42685,42687,42689,42691],{"class":27,"line":10030},[25,42683,42684],{"class":244},"            nn.AdaptiveAvgPool2d((",[25,42686,460],{"class":35},[25,42688,621],{"class":244},[25,42690,460],{"class":35},[25,42692,42693],{"class":244},")),\n",[25,42695,42696],{"class":27,"line":10035},[25,42697,38861],{"class":244},[25,42699,42700,42702,42705,42707,42709],{"class":27,"line":16714},[25,42701,38866],{"class":244},[25,42703,42704],{"class":35},"1024",[25,42706,621],{"class":244},[25,42708,689],{"class":35},[25,42710,251],{"class":244},[25,42712,42713],{"class":27,"line":16720},[25,42714,38197],{"class":244},[25,42716,42717],{"class":27,"line":16743},[25,42718,42719],{"class":302},"        # 对模型参数初始化\n",[25,42721,42722,42724,42726,42728,42730],{"class":27,"line":16749},[25,42723,3513],{"class":240},[25,42725,38939],{"class":244},[25,42727,26114],{"class":240},[25,42729,38944],{"class":35},[25,42731,38947],{"class":244},[25,42733,42734,42736,42738],{"class":27,"line":16772},[25,42735,4752],{"class":240},[25,42737,38959],{"class":35},[25,42739,38962],{"class":244},[25,42741,42742,42744,42747,42749,42752,42754,42756,42758,42760],{"class":27,"line":16786},[25,42743,38972],{"class":244},[25,42745,42746],{"class":5326},"mode",[25,42748,290],{"class":240},[25,42750,42751],{"class":45},"'fan_out'",[25,42753,621],{"class":244},[25,42755,38975],{"class":5326},[25,42757,290],{"class":240},[25,42759,38980],{"class":45},[25,42761,251],{"class":244},[25,42763,42764],{"class":27,"line":16806},[25,42765,42766],{"class":302},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[25,42768,42769],{"class":27,"line":16812},[25,42770,42771],{"class":302},"                # ② mode = 'fan_out'决定使用的fan值：\n",[25,42773,42774],{"class":27,"line":16823},[25,42775,42776],{"class":302},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[25,42778,42779],{"class":27,"line":16846},[25,42780,42781],{"class":302},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[25,42783,42784],{"class":27,"line":16868},[25,42785,42786],{"class":302},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[25,42788,42789],{"class":27,"line":16873},[25,42790,42791],{"class":302},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[25,42793,42794,42796,42798,42800,42802,42804],{"class":27,"line":16879},[25,42795,38992],{"class":240},[25,42797,38995],{"class":244},[25,42799,38998],{"class":240},[25,42801,39001],{"class":240},[25,42803,39004],{"class":35},[25,42805,3849],{"class":244},[25,42807,42808,42810,42812],{"class":27,"line":16893},[25,42809,39016],{"class":244},[25,42811,434],{"class":35},[25,42813,251],{"class":244},[25,42815,42816,42819,42821],{"class":27,"line":16906},[25,42817,42818],{"class":240},"                elif",[25,42820,38959],{"class":35},[25,42822,39035],{"class":244},[25,42824,42825,42828,42830,42832,42834],{"class":27,"line":16911},[25,42826,42827],{"class":244},"                    nn.init.normal_(m.weight,",[25,42829,434],{"class":35},[25,42831,621],{"class":244},[25,42833,39057],{"class":35},[25,42835,251],{"class":244},[25,42837,42838,42841,42843,42845,42847,42849],{"class":27,"line":16925},[25,42839,42840],{"class":240},"                    if",[25,42842,38995],{"class":244},[25,42844,38998],{"class":240},[25,42846,39001],{"class":240},[25,42848,39004],{"class":35},[25,42850,3849],{"class":244},[25,42852,42853,42856,42858],{"class":27,"line":16930},[25,42854,42855],{"class":244},"                        nn.init.constant_(m.bias,",[25,42857,434],{"class":35},[25,42859,251],{"class":244},[25,42861,42862],{"class":27,"line":16936},[25,42863,35236],{"class":302},[25,42865,42866,42868,42870],{"class":27,"line":16941},[25,42867,30872],{"class":240},[25,42869,31164],{"class":31},[25,42871,31167],{"class":244},[25,42873,42874,42876,42878,42880],{"class":27,"line":16955},[25,42875,31172],{"class":244},[25,42877,290],{"class":240},[25,42879,30894],{"class":35},[25,42881,42882],{"class":244},".b1(x)\n",[25,42884,42885,42887,42889,42891],{"class":27,"line":16960},[25,42886,31172],{"class":244},[25,42888,290],{"class":240},[25,42890,30894],{"class":35},[25,42892,42893],{"class":244},".b2(x)\n",[25,42895,42896,42898,42900,42902],{"class":27,"line":16965},[25,42897,31172],{"class":244},[25,42899,290],{"class":240},[25,42901,30894],{"class":35},[25,42903,42904],{"class":244},".b3(x)\n",[25,42906,42907,42909,42911,42913],{"class":27,"line":16979},[25,42908,31172],{"class":244},[25,42910,290],{"class":240},[25,42912,30894],{"class":35},[25,42914,42915],{"class":244},".b4(x)\n",[25,42917,42918,42920,42922,42924],{"class":27,"line":16991},[25,42919,31172],{"class":244},[25,42921,290],{"class":240},[25,42923,30894],{"class":35},[25,42925,42926],{"class":244},".b5(x)\n",[25,42928,42929,42931],{"class":27,"line":16996},[25,42930,14862],{"class":240},[25,42932,31280],{"class":244},[25,42934,42935],{"class":27,"line":17009},[25,42936,2510],{"emptyLinePlaceholder":167},[25,42938,42939],{"class":27,"line":17014},[25,42940,42941],{"class":302},"# 模型展示\n",[25,42943,42944,42946,42948,42950,42952],{"class":27,"line":17019},[25,42945,1642],{"class":240},[25,42947,31291],{"class":35},[25,42949,3059],{"class":240},[25,42951,31296],{"class":45},[25,42953,3849],{"class":244},[25,42955,42956,42958,42960,42962,42964,42966,42968,42970,42972],{"class":27,"line":17024},[25,42957,31308],{"class":244},[25,42959,290],{"class":240},[25,42961,30522],{"class":244},[25,42963,31315],{"class":45},[25,42965,1815],{"class":240},[25,42967,31320],{"class":244},[25,42969,1812],{"class":240},[25,42971,30547],{"class":45},[25,42973,251],{"class":244},[25,42975,42976,42978,42980],{"class":27,"line":17037},[25,42977,31360],{"class":244},[25,42979,290],{"class":240},[25,42981,42982],{"class":244},"GoogLeNet(Inception).to(device)\n",[25,42984,42985,42987,42989,42991,42993,42995,42997,42999],{"class":27,"line":17042},[25,42986,31370],{"class":35},[25,42988,31373],{"class":244},[25,42990,460],{"class":35},[25,42992,621],{"class":244},[25,42994,31572],{"class":35},[25,42996,621],{"class":244},[25,42998,31572],{"class":35},[25,43000,31386],{"class":244},[194,43002,43003],{"start":39},[106,43004,39254],{},[15,43006,43008],{"className":30449,"code":43007,"language":30451,"meta":20,"style":20},"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",[22,43009,43010,43016,43022,43032,43038,43048,43058,43068,43078,43088,43092,43103,43113,43117,43121,43125,43133,43145,43155,43171,43181,43213,43227,43237,43247,43251,43261,43275,43285,43295,43305,43311,43315,43319,43323,43327,43331,43339,43359,43363,43367,43371,43375,43379,43395,43399,43403,43411,43415,43419,43427,43431,43435,43439,43447,43451,43455,43459,43463,43471,43475,43483,43487,43495,43499,43507,43511,43519,43523,43527,43535,43539,43543,43547,43559,43583,43597,43601,43605,43609,43617,43621,43629,43633,43641,43645,43653,43657,43665,43669,43677,43681,43693,43697,43705,43709,43717,43721,43725,43729,43733,43741,43745,43761,43765,43773,43777,43781,43785,43789,43793,43797,43801,43817,43821,43833,43837,43849,43853,43865,43869,43877,43881,43889,43893,43897,43901,43907,43911,43919,43923,43939,43943,43951,43955,43971,43983,43987,43999,44003,44007,44015,44019,44023,44031,44035,44043,44047,44055,44059,44063,44105,44147,44151,44155,44171,44175,44191,44195,44199,44207,44211,44215,44227,44265,44269,44273,44281,44285,44299,44309,44315,44321,44327,44333,44337,44341,44347,44351,44355,44363,44367,44385,44389,44393,44397,44413,44417,44421,44425,44429,44433,44453,44473,44477,44481,44485,44493,44501,44505,44521,44541,44561,44565,44569,44577,44585,44589,44593,44597,44609,44613,44623,44631,44648],{"__ignoreMap":20},[25,43011,43012,43014],{"class":27,"line":28},[25,43013,30463],{"class":240},[25,43015,31893],{"class":244},[25,43017,43018,43020],{"class":27,"line":39},[25,43019,30463],{"class":240},[25,43021,31900],{"class":244},[25,43023,43024,43026,43028,43030],{"class":27,"line":51},[25,43025,30463],{"class":240},[25,43027,31911],{"class":244},[25,43029,31454],{"class":240},[25,43031,31916],{"class":244},[25,43033,43034,43036],{"class":27,"line":59},[25,43035,30463],{"class":240},[25,43037,30466],{"class":244},[25,43039,43040,43042,43044,43046],{"class":27,"line":67},[25,43041,30808],{"class":240},[25,43043,31486],{"class":244},[25,43045,30463],{"class":240},[25,43047,31933],{"class":244},[25,43049,43050,43052,43054,43056],{"class":27,"line":75},[25,43051,30808],{"class":240},[25,43053,31439],{"class":244},[25,43055,30463],{"class":240},[25,43057,31444],{"class":244},[25,43059,43060,43062,43064,43066],{"class":27,"line":83},[25,43061,30808],{"class":240},[25,43063,31469],{"class":244},[25,43065,30463],{"class":240},[25,43067,31474],{"class":244},[25,43069,43070,43072,43074,43076],{"class":27,"line":91},[25,43071,30463],{"class":240},[25,43073,31486],{"class":244},[25,43075,31454],{"class":240},[25,43077,31491],{"class":244},[25,43079,43080,43082,43084,43086],{"class":27,"line":1429},[25,43081,30463],{"class":240},[25,43083,31503],{"class":244},[25,43085,31454],{"class":240},[25,43087,31508],{"class":244},[25,43089,43090],{"class":27,"line":1441},[25,43091,31978],{"class":302},[25,43093,43094,43096,43098,43100],{"class":27,"line":1723},[25,43095,30808],{"class":240},[25,43097,31985],{"class":244},[25,43099,30463],{"class":240},[25,43101,43102],{"class":244}," GoogLeNet, Inception\n",[25,43104,43105,43107,43109,43111],{"class":27,"line":1728},[25,43106,30808],{"class":240},[25,43108,30811],{"class":244},[25,43110,30463],{"class":240},[25,43112,30816],{"class":244},[25,43114,43115],{"class":27,"line":1734},[25,43116,2510],{"emptyLinePlaceholder":167},[25,43118,43119],{"class":27,"line":1739},[25,43120,2510],{"emptyLinePlaceholder":167},[25,43122,43123],{"class":27,"line":1753},[25,43124,32013],{"class":302},[25,43126,43127,43129,43131],{"class":27,"line":1758},[25,43128,32018],{"class":240},[25,43130,32021],{"class":31},[25,43132,32024],{"class":244},[25,43134,43135,43137,43139,43141,43143],{"class":27,"line":1764},[25,43136,32029],{"class":244},[25,43138,290],{"class":240},[25,43140,31526],{"class":244},[25,43142,31534],{"class":45},[25,43144,31537],{"class":244},[25,43146,43147,43149,43151,43153],{"class":27,"line":1785},[25,43148,32042],{"class":5326},[25,43150,290],{"class":240},[25,43152,31547],{"class":35},[25,43154,31537],{"class":244},[25,43156,43157,43159,43161,43163,43165,43167,43169],{"class":27,"line":1790},[25,43158,32053],{"class":5326},[25,43160,290],{"class":240},[25,43162,31564],{"class":244},[25,43164,31567],{"class":5326},[25,43166,290],{"class":240},[25,43168,35520],{"class":35},[25,43170,31575],{"class":244},[25,43172,43173,43175,43177,43179],{"class":27,"line":1804},[25,43174,32070],{"class":5326},[25,43176,290],{"class":240},[25,43178,31547],{"class":35},[25,43180,251],{"class":244},[25,43182,43183,43185,43187,43189,43191,43193,43195,43197,43199,43201,43203,43205,43207,43209,43211],{"class":27,"line":1809},[25,43184,32081],{"class":244},[25,43186,290],{"class":240},[25,43188,32086],{"class":244},[25,43190,32089],{"class":35},[25,43192,245],{"class":244},[25,43194,32094],{"class":35},[25,43196,698],{"class":240},[25,43198,7468],{"class":35},[25,43200,32101],{"class":244},[25,43202,32089],{"class":35},[25,43204,245],{"class":244},[25,43206,32108],{"class":35},[25,43208,698],{"class":240},[25,43210,7468],{"class":35},[25,43212,32115],{"class":244},[25,43214,43215,43217,43219,43221,43223,43225],{"class":27,"line":1838},[25,43216,32120],{"class":244},[25,43218,290],{"class":240},[25,43220,32125],{"class":244},[25,43222,31608],{"class":5326},[25,43224,290],{"class":240},[25,43226,31613],{"class":244},[25,43228,43229,43231,43233,43235],{"class":27,"line":1843},[25,43230,32136],{"class":5326},[25,43232,290],{"class":240},[25,43234,440],{"class":35},[25,43236,31537],{"class":244},[25,43238,43239,43241,43243,43245],{"class":27,"line":1860},[25,43240,32148],{"class":5326},[25,43242,290],{"class":240},[25,43244,31547],{"class":35},[25,43246,31537],{"class":244},[25,43248,43249],{"class":27,"line":1865},[25,43250,32159],{"class":302},[25,43252,43253,43255,43257,43259],{"class":27,"line":1870},[25,43254,32164],{"class":5326},[25,43256,290],{"class":240},[25,43258,638],{"class":35},[25,43260,251],{"class":244},[25,43262,43263,43265,43267,43269,43271,43273],{"class":27,"line":1875},[25,43264,32175],{"class":244},[25,43266,290],{"class":240},[25,43268,31605],{"class":244},[25,43270,31608],{"class":5326},[25,43272,290],{"class":240},[25,43274,32186],{"class":244},[25,43276,43277,43279,43281,43283],{"class":27,"line":1889},[25,43278,32191],{"class":5326},[25,43280,290],{"class":240},[25,43282,440],{"class":35},[25,43284,31537],{"class":244},[25,43286,43287,43289,43291,43293],{"class":27,"line":1894},[25,43288,32202],{"class":5326},[25,43290,290],{"class":240},[25,43292,31547],{"class":35},[25,43294,31537],{"class":244},[25,43296,43297,43299,43301,43303],{"class":27,"line":2687},[25,43298,32213],{"class":5326},[25,43300,290],{"class":240},[25,43302,638],{"class":35},[25,43304,251],{"class":244},[25,43306,43307,43309],{"class":27,"line":2701},[25,43308,4200],{"class":240},[25,43310,32226],{"class":244},[25,43312,43313],{"class":27,"line":2709},[25,43314,2510],{"emptyLinePlaceholder":167},[25,43316,43317],{"class":27,"line":2714},[25,43318,32235],{"class":302},[25,43320,43321],{"class":27,"line":2720},[25,43322,32240],{"class":302},[25,43324,43325],{"class":27,"line":2726},[25,43326,2510],{"emptyLinePlaceholder":167},[25,43328,43329],{"class":27,"line":2731},[25,43330,32249],{"class":302},[25,43332,43333,43335,43337],{"class":27,"line":8058},[25,43334,32018],{"class":240},[25,43336,32256],{"class":31},[25,43338,32259],{"class":244},[25,43340,43341,43343,43345,43347,43349,43351,43353,43355,43357],{"class":27,"line":8082},[25,43342,31308],{"class":244},[25,43344,290],{"class":240},[25,43346,30522],{"class":244},[25,43348,31315],{"class":45},[25,43350,1815],{"class":240},[25,43352,31320],{"class":244},[25,43354,1812],{"class":240},[25,43356,32278],{"class":45},[25,43358,251],{"class":244},[25,43360,43361],{"class":27,"line":8087},[25,43362,2510],{"emptyLinePlaceholder":167},[25,43364,43365],{"class":27,"line":8093},[25,43366,2510],{"emptyLinePlaceholder":167},[25,43368,43369],{"class":27,"line":8120},[25,43370,32293],{"class":302},[25,43372,43373],{"class":27,"line":8125},[25,43374,32298],{"class":302},[25,43376,43377],{"class":27,"line":8131},[25,43378,32303],{"class":302},[25,43380,43381,43383,43385,43387,43389,43391,43393],{"class":27,"line":8143},[25,43382,32308],{"class":244},[25,43384,290],{"class":240},[25,43386,32313],{"class":244},[25,43388,32316],{"class":5326},[25,43390,290],{"class":240},[25,43392,32321],{"class":35},[25,43394,251],{"class":244},[25,43396,43397],{"class":27,"line":8155},[25,43398,2510],{"emptyLinePlaceholder":167},[25,43400,43401],{"class":27,"line":8167},[25,43402,32332],{"class":302},[25,43404,43405,43407,43409],{"class":27,"line":9826},[25,43406,32337],{"class":244},[25,43408,290],{"class":240},[25,43410,32342],{"class":244},[25,43412,43413],{"class":27,"line":9851},[25,43414,2510],{"emptyLinePlaceholder":167},[25,43416,43417],{"class":27,"line":9874},[25,43418,32351],{"class":302},[25,43420,43421,43423,43425],{"class":27,"line":9898},[25,43422,31360],{"class":244},[25,43424,290],{"class":240},[25,43426,32360],{"class":244},[25,43428,43429],{"class":27,"line":9903},[25,43430,32365],{"class":302},[25,43432,43433],{"class":27,"line":9908},[25,43434,32370],{"class":302},[25,43436,43437],{"class":27,"line":9913},[25,43438,32375],{"class":302},[25,43440,43441,43443,43445],{"class":27,"line":9922},[25,43442,32380],{"class":244},[25,43444,290],{"class":240},[25,43446,32385],{"class":244},[25,43448,43449],{"class":27,"line":9927},[25,43450,2510],{"emptyLinePlaceholder":167},[25,43452,43453],{"class":27,"line":9933},[25,43454,2510],{"emptyLinePlaceholder":167},[25,43456,43457],{"class":27,"line":9954},[25,43458,32398],{"class":302},[25,43460,43461],{"class":27,"line":9960},[25,43462,32403],{"class":302},[25,43464,43465,43467,43469],{"class":27,"line":9974},[25,43466,32408],{"class":244},[25,43468,290],{"class":240},[25,43470,32413],{"class":35},[25,43472,43473],{"class":27,"line":9980},[25,43474,32418],{"class":302},[25,43476,43477,43479,43481],{"class":27,"line":10007},[25,43478,32423],{"class":244},[25,43480,290],{"class":240},[25,43482,32428],{"class":244},[25,43484,43485],{"class":27,"line":10016},[25,43486,32433],{"class":302},[25,43488,43489,43491,43493],{"class":27,"line":10022},[25,43490,32438],{"class":244},[25,43492,290],{"class":240},[25,43494,32428],{"class":244},[25,43496,43497],{"class":27,"line":10030},[25,43498,32447],{"class":302},[25,43500,43501,43503,43505],{"class":27,"line":10035},[25,43502,32452],{"class":244},[25,43504,290],{"class":240},[25,43506,32428],{"class":244},[25,43508,43509],{"class":27,"line":16714},[25,43510,32461],{"class":302},[25,43512,43513,43515,43517],{"class":27,"line":16720},[25,43514,32466],{"class":244},[25,43516,290],{"class":240},[25,43518,32428],{"class":244},[25,43520,43521],{"class":27,"line":16743},[25,43522,2510],{"emptyLinePlaceholder":167},[25,43524,43525],{"class":27,"line":16749},[25,43526,32479],{"class":302},[25,43528,43529,43531,43533],{"class":27,"line":16772},[25,43530,32484],{"class":244},[25,43532,290],{"class":240},[25,43534,32489],{"class":244},[25,43536,43537],{"class":27,"line":16786},[25,43538,2510],{"emptyLinePlaceholder":167},[25,43540,43541],{"class":27,"line":16806},[25,43542,2510],{"emptyLinePlaceholder":167},[25,43544,43545],{"class":27,"line":16812},[25,43546,32502],{"class":302},[25,43548,43549,43551,43553,43555,43557],{"class":27,"line":16823},[25,43550,3311],{"class":240},[25,43552,32509],{"class":244},[25,43554,26114],{"class":240},[25,43556,32514],{"class":35},[25,43558,32517],{"class":244},[25,43560,43561,43563,43565,43567,43569,43571,43573,43575,43577,43579,43581],{"class":27,"line":16846},[25,43562,32522],{"class":35},[25,43564,245],{"class":244},[25,43566,32527],{"class":45},[25,43568,32530],{"class":35},[25,43570,827],{"class":45},[25,43572,32530],{"class":35},[25,43574,494],{"class":45},[25,43576,32539],{"class":244},[25,43578,775],{"class":240},[25,43580,460],{"class":35},[25,43582,30568],{"class":244},[25,43584,43585,43587,43589,43591,43593,43595],{"class":27,"line":16868},[25,43586,32522],{"class":35},[25,43588,245],{"class":244},[25,43590,32554],{"class":45},[25,43592,698],{"class":240},[25,43594,689],{"class":35},[25,43596,251],{"class":244},[25,43598,43599],{"class":27,"line":16873},[25,43600,2510],{"emptyLinePlaceholder":167},[25,43602,43603],{"class":27,"line":16879},[25,43604,32569],{"class":302},[25,43606,43607],{"class":27,"line":16893},[25,43608,32574],{"class":302},[25,43610,43611,43613,43615],{"class":27,"line":16906},[25,43612,32579],{"class":244},[25,43614,290],{"class":240},[25,43616,32413],{"class":35},[25,43618,43619],{"class":27,"line":16911},[25,43620,32588],{"class":302},[25,43622,43623,43625,43627],{"class":27,"line":16925},[25,43624,32593],{"class":244},[25,43626,290],{"class":240},[25,43628,3195],{"class":35},[25,43630,43631],{"class":27,"line":16930},[25,43632,32602],{"class":302},[25,43634,43635,43637,43639],{"class":27,"line":16936},[25,43636,32607],{"class":244},[25,43638,290],{"class":240},[25,43640,32413],{"class":35},[25,43642,43643],{"class":27,"line":16941},[25,43644,32616],{"class":302},[25,43646,43647,43649,43651],{"class":27,"line":16955},[25,43648,32621],{"class":244},[25,43650,290],{"class":240},[25,43652,3195],{"class":35},[25,43654,43655],{"class":27,"line":16960},[25,43656,32630],{"class":302},[25,43658,43659,43661,43663],{"class":27,"line":16965},[25,43660,32635],{"class":244},[25,43662,290],{"class":240},[25,43664,3195],{"class":35},[25,43666,43667],{"class":27,"line":16979},[25,43668,32644],{"class":302},[25,43670,43671,43673,43675],{"class":27,"line":16991},[25,43672,32649],{"class":244},[25,43674,290],{"class":240},[25,43676,3195],{"class":35},[25,43678,43679],{"class":27,"line":16996},[25,43680,32658],{"class":302},[25,43682,43683,43685,43687,43689,43691],{"class":27,"line":17009},[25,43684,3513],{"class":240},[25,43686,31672],{"class":244},[25,43688,26114],{"class":240},[25,43690,31677],{"class":35},[25,43692,32671],{"class":244},[25,43694,43695],{"class":27,"line":17014},[25,43696,32676],{"class":302},[25,43698,43699,43701,43703],{"class":27,"line":17019},[25,43700,32681],{"class":244},[25,43702,290],{"class":240},[25,43704,32686],{"class":244},[25,43706,43707],{"class":27,"line":17024},[25,43708,32691],{"class":302},[25,43710,43711,43713,43715],{"class":27,"line":17037},[25,43712,32696],{"class":244},[25,43714,290],{"class":240},[25,43716,32701],{"class":244},[25,43718,43719],{"class":27,"line":17042},[25,43720,32707],{"class":302},[25,43722,43723],{"class":27,"line":32704},[25,43724,32713],{"class":244},[25,43726,43727],{"class":27,"line":32710},[25,43728,32719],{"class":302},[25,43730,43731],{"class":27,"line":32716},[25,43732,32725],{"class":302},[25,43734,43735,43737,43739],{"class":27,"line":32722},[25,43736,32731],{"class":244},[25,43738,290],{"class":240},[25,43740,32736],{"class":244},[25,43742,43743],{"class":27,"line":32728},[25,43744,32742],{"class":302},[25,43746,43747,43749,43751,43753,43755,43757,43759],{"class":27,"line":32739},[25,43748,32748],{"class":244},[25,43750,290],{"class":240},[25,43752,32753],{"class":244},[25,43754,32756],{"class":5326},[25,43756,290],{"class":240},[25,43758,460],{"class":35},[25,43760,251],{"class":244},[25,43762,43763],{"class":27,"line":32745},[25,43764,32768],{"class":302},[25,43766,43767,43769,43771],{"class":27,"line":32765},[25,43768,32774],{"class":244},[25,43770,290],{"class":240},[25,43772,32779],{"class":244},[25,43774,43775],{"class":27,"line":32771},[25,43776,32785],{"class":302},[25,43778,43779],{"class":27,"line":32782},[25,43780,32791],{"class":244},[25,43782,43783],{"class":27,"line":32788},[25,43784,32797],{"class":302},[25,43786,43787],{"class":27,"line":32794},[25,43788,32803],{"class":244},[25,43790,43791],{"class":27,"line":32800},[25,43792,32809],{"class":302},[25,43794,43795],{"class":27,"line":32806},[25,43796,32815],{"class":244},[25,43798,43799],{"class":27,"line":32812},[25,43800,32821],{"class":302},[25,43802,43803,43805,43807,43809,43811,43813,43815],{"class":27,"line":32818},[25,43804,32827],{"class":244},[25,43806,9587],{"class":240},[25,43808,32832],{"class":244},[25,43810,698],{"class":240},[25,43812,32837],{"class":244},[25,43814,434],{"class":35},[25,43816,251],{"class":244},[25,43818,43819],{"class":27,"line":32824},[25,43820,32847],{"class":302},[25,43822,43823,43825,43827,43829,43831],{"class":27,"line":32844},[25,43824,32853],{"class":244},[25,43826,9587],{"class":240},[25,43828,32858],{"class":244},[25,43830,3059],{"class":240},[25,43832,32863],{"class":244},[25,43834,43835],{"class":27,"line":32850},[25,43836,32869],{"class":302},[25,43838,43839,43841,43843,43845,43847],{"class":27,"line":32866},[25,43840,32875],{"class":244},[25,43842,9587],{"class":240},[25,43844,32837],{"class":244},[25,43846,434],{"class":35},[25,43848,251],{"class":244},[25,43850,43851],{"class":27,"line":32872},[25,43852,32889],{"class":302},[25,43854,43855,43857,43859,43861,43863],{"class":27,"line":32886},[25,43856,3513],{"class":240},[25,43858,32897],{"class":244},[25,43860,26114],{"class":240},[25,43862,31677],{"class":35},[25,43864,32904],{"class":244},[25,43866,43867],{"class":27,"line":32892},[25,43868,32910],{"class":302},[25,43870,43871,43873,43875],{"class":27,"line":32907},[25,43872,32681],{"class":244},[25,43874,290],{"class":240},[25,43876,32686],{"class":244},[25,43878,43879],{"class":27,"line":32913},[25,43880,32925],{"class":302},[25,43882,43883,43885,43887],{"class":27,"line":32922},[25,43884,32696],{"class":244},[25,43886,290],{"class":240},[25,43888,32701],{"class":244},[25,43890,43891],{"class":27,"line":32928},[25,43892,32940],{"class":302},[25,43894,43895],{"class":27,"line":32937},[25,43896,32946],{"class":244},[25,43898,43899],{"class":27,"line":32943},[25,43900,36427],{"class":302},[25,43902,43903,43905],{"class":27,"line":32949},[25,43904,32952],{"class":240},[25,43906,32955],{"class":244},[25,43908,43909],{"class":27,"line":32958},[25,43910,32961],{"class":302},[25,43912,43913,43915,43917],{"class":27,"line":32964},[25,43914,36442],{"class":244},[25,43916,290],{"class":240},[25,43918,32736],{"class":244},[25,43920,43921],{"class":27,"line":32975},[25,43922,32978],{"class":302},[25,43924,43925,43927,43929,43931,43933,43935,43937],{"class":27,"line":32981},[25,43926,36455],{"class":244},[25,43928,290],{"class":240},[25,43930,32753],{"class":244},[25,43932,32756],{"class":5326},[25,43934,290],{"class":240},[25,43936,460],{"class":35},[25,43938,251],{"class":244},[25,43940,43941],{"class":27,"line":33000},[25,43942,33003],{"class":302},[25,43944,43945,43947,43949],{"class":27,"line":33006},[25,43946,36476],{"class":244},[25,43948,290],{"class":240},[25,43950,32779],{"class":244},[25,43952,43953],{"class":27,"line":33017},[25,43954,33020],{"class":302},[25,43956,43957,43959,43961,43963,43965,43967,43969],{"class":27,"line":33023},[25,43958,36489],{"class":244},[25,43960,9587],{"class":240},[25,43962,36494],{"class":244},[25,43964,698],{"class":240},[25,43966,32837],{"class":244},[25,43968,434],{"class":35},[25,43970,251],{"class":244},[25,43972,43973,43975,43977,43979,43981],{"class":27,"line":33043},[25,43974,36507],{"class":244},[25,43976,9587],{"class":240},[25,43978,32858],{"class":244},[25,43980,3059],{"class":240},[25,43982,32863],{"class":244},[25,43984,43985],{"class":27,"line":33059},[25,43986,36520],{"class":302},[25,43988,43989,43991,43993,43995,43997],{"class":27,"line":33065},[25,43990,36525],{"class":244},[25,43992,9587],{"class":240},[25,43994,32837],{"class":244},[25,43996,434],{"class":35},[25,43998,251],{"class":244},[25,44000,44001],{"class":27,"line":33079},[25,44002,33082],{"class":302},[25,44004,44005],{"class":27,"line":33085},[25,44006,33088],{"class":302},[25,44008,44009,44011,44013],{"class":27,"line":33091},[25,44010,33094],{"class":244},[25,44012,827],{"class":240},[25,44014,33099],{"class":244},[25,44016,44017],{"class":27,"line":33102},[25,44018,33105],{"class":302},[25,44020,44021],{"class":27,"line":33108},[25,44022,33111],{"class":302},[25,44024,44025,44027,44029],{"class":27,"line":33114},[25,44026,33117],{"class":244},[25,44028,827],{"class":240},[25,44030,33099],{"class":244},[25,44032,44033],{"class":27,"line":33124},[25,44034,33127],{"class":302},[25,44036,44037,44039,44041],{"class":27,"line":33130},[25,44038,33133],{"class":244},[25,44040,827],{"class":240},[25,44042,33138],{"class":244},[25,44044,44045],{"class":27,"line":33141},[25,44046,33144],{"class":302},[25,44048,44049,44051,44053],{"class":27,"line":33147},[25,44050,33150],{"class":244},[25,44052,827],{"class":240},[25,44054,33138],{"class":244},[25,44056,44057],{"class":27,"line":33157},[25,44058,2510],{"emptyLinePlaceholder":167},[25,44060,44061],{"class":27,"line":33162},[25,44062,33165],{"class":302},[25,44064,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087,44089,44091,44093,44095,44097,44099,44101,44103],{"class":27,"line":33168},[25,44066,32522],{"class":35},[25,44068,245],{"class":244},[25,44070,3702],{"class":45},[25,44072,32530],{"class":35},[25,44074,33179],{"class":45},[25,44076,1139],{"class":35},[25,44078,33184],{"class":240},[25,44080,1189],{"class":35},[25,44082,33189],{"class":45},[25,44084,1139],{"class":35},[25,44086,33184],{"class":240},[25,44088,1189],{"class":35},[25,44090,3702],{"class":45},[25,44092,33200],{"class":244},[25,44094,775],{"class":240},[25,44096,460],{"class":35},[25,44098,33207],{"class":244},[25,44100,775],{"class":240},[25,44102,460],{"class":35},[25,44104,33214],{"class":244},[25,44106,44107,44109,44111,44113,44115,44117,44119,44121,44123,44125,44127,44129,44131,44133,44135,44137,44139,44141,44143,44145],{"class":27,"line":33217},[25,44108,32522],{"class":35},[25,44110,245],{"class":244},[25,44112,3702],{"class":45},[25,44114,32530],{"class":35},[25,44116,33228],{"class":45},[25,44118,1139],{"class":35},[25,44120,33184],{"class":240},[25,44122,1189],{"class":35},[25,44124,33237],{"class":45},[25,44126,1139],{"class":35},[25,44128,33184],{"class":240},[25,44130,1189],{"class":35},[25,44132,3702],{"class":45},[25,44134,33248],{"class":244},[25,44136,775],{"class":240},[25,44138,460],{"class":35},[25,44140,33255],{"class":244},[25,44142,775],{"class":240},[25,44144,460],{"class":35},[25,44146,33214],{"class":244},[25,44148,44149],{"class":27,"line":33264},[25,44150,2510],{"emptyLinePlaceholder":167},[25,44152,44153],{"class":27,"line":33269},[25,44154,33272],{"class":302},[25,44156,44157,44159,44161,44163,44165,44167,44169],{"class":27,"line":33275},[25,44158,2607],{"class":240},[25,44160,33280],{"class":244},[25,44162,775],{"class":240},[25,44164,460],{"class":35},[25,44166,1183],{"class":244},[25,44168,1203],{"class":240},[25,44170,33291],{"class":244},[25,44172,44173],{"class":27,"line":33294},[25,44174,33297],{"class":302},[25,44176,44177,44179,44181,44183,44185,44187,44189],{"class":27,"line":33300},[25,44178,33303],{"class":244},[25,44180,284],{"class":35},[25,44182,290],{"class":240},[25,44184,33310],{"class":244},[25,44186,775],{"class":240},[25,44188,460],{"class":35},[25,44190,33317],{"class":244},[25,44192,44193],{"class":27,"line":33320},[25,44194,33323],{"class":302},[25,44196,44197],{"class":27,"line":33326},[25,44198,33329],{"class":302},[25,44200,44201,44203,44205],{"class":27,"line":33332},[25,44202,33335],{"class":244},[25,44204,290],{"class":240},[25,44206,32385],{"class":244},[25,44208,44209],{"class":27,"line":33342},[25,44210,2510],{"emptyLinePlaceholder":167},[25,44212,44213],{"class":27,"line":33347},[25,44214,33350],{"class":302},[25,44216,44217,44219,44221,44223,44225],{"class":27,"line":33353},[25,44218,33356],{"class":244},[25,44220,290],{"class":240},[25,44222,33361],{"class":244},[25,44224,775],{"class":240},[25,44226,33366],{"class":244},[25,44228,44229,44231,44233,44235,44237,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263],{"class":27,"line":33369},[25,44230,32522],{"class":35},[25,44232,245],{"class":244},[25,44234,33376],{"class":45},[25,44236,1139],{"class":35},[25,44238,33381],{"class":240},[25,44240,1189],{"class":35},[25,44242,787],{"class":45},[25,44244,1139],{"class":35},[25,44246,33381],{"class":240},[25,44248,1189],{"class":35},[25,44250,33394],{"class":45},[25,44252,33397],{"class":244},[25,44254,33400],{"class":240},[25,44256,1150],{"class":35},[25,44258,33405],{"class":244},[25,44260,571],{"class":240},[25,44262,1150],{"class":35},[25,44264,30568],{"class":244},[25,44266,44267],{"class":27,"line":33414},[25,44268,36804],{"class":302},[25,44270,44271],{"class":27,"line":33420},[25,44272,36809],{"class":302},[25,44274,44275,44277,44279],{"class":27,"line":33426},[25,44276,36814],{"class":244},[25,44278,33438],{"class":45},[25,44280,251],{"class":244},[25,44282,44283],{"class":27,"line":33432},[25,44284,33458],{"class":302},[25,44286,44287,44289,44291,44293,44295,44297],{"class":27,"line":33443},[25,44288,33464],{"class":244},[25,44290,290],{"class":240},[25,44292,33469],{"class":244},[25,44294,33472],{"class":5326},[25,44296,290],{"class":240},[25,44298,1657],{"class":244},[25,44300,44301,44303,44305,44307],{"class":27,"line":33449},[25,44302,33482],{"class":45},[25,44304,1102],{"class":244},[25,44306,33487],{"class":35},[25,44308,33490],{"class":244},[25,44310,44311,44313],{"class":27,"line":33455},[25,44312,33496],{"class":45},[25,44314,33499],{"class":244},[25,44316,44317,44319],{"class":27,"line":33461},[25,44318,33505],{"class":45},[25,44320,33508],{"class":244},[25,44322,44323,44325],{"class":27,"line":33479},[25,44324,33514],{"class":45},[25,44326,33517],{"class":244},[25,44328,44329,44331],{"class":27,"line":33493},[25,44330,33523],{"class":45},[25,44332,33526],{"class":244},[25,44334,44335],{"class":27,"line":33502},[25,44336,33532],{"class":244},[25,44338,44339],{"class":27,"line":33511},[25,44340,33538],{"class":302},[25,44342,44343,44345],{"class":27,"line":33520},[25,44344,4200],{"class":240},[25,44346,33546],{"class":244},[25,44348,44349],{"class":27,"line":33529},[25,44350,2510],{"emptyLinePlaceholder":167},[25,44352,44353],{"class":27,"line":33535},[25,44354,33557],{"class":302},[25,44356,44357,44359,44361],{"class":27,"line":33541},[25,44358,32018],{"class":240},[25,44360,33565],{"class":31},[25,44362,33568],{"class":244},[25,44364,44365],{"class":27,"line":33549},[25,44366,33574],{"class":302},[25,44368,44369,44371,44373,44375,44377,44379,44381,44383],{"class":27,"line":33554},[25,44370,33580],{"class":244},[25,44372,31764],{"class":5326},[25,44374,290],{"class":240},[25,44376,245],{"class":244},[25,44378,741],{"class":35},[25,44380,621],{"class":244},[25,44382,536],{"class":35},[25,44384,30568],{"class":244},[25,44386,44387],{"class":27,"line":33560},[25,44388,33600],{"class":302},[25,44390,44391],{"class":27,"line":33571},[25,44392,33606],{"class":302},[25,44394,44395],{"class":27,"line":33577},[25,44396,33612],{"class":302},[25,44398,44399,44401,44403,44405,44407,44409,44411],{"class":27,"line":33597},[25,44400,31798],{"class":244},[25,44402,460],{"class":35},[25,44404,621],{"class":244},[25,44406,321],{"class":35},[25,44408,621],{"class":244},[25,44410,460],{"class":35},[25,44412,251],{"class":244},[25,44414,44415],{"class":27,"line":33603},[25,44416,33635],{"class":302},[25,44418,44419],{"class":27,"line":33609},[25,44420,33641],{"class":302},[25,44422,44423],{"class":27,"line":33615},[25,44424,33647],{"class":302},[25,44426,44427],{"class":27,"line":33632},[25,44428,33653],{"class":302},[25,44430,44431],{"class":27,"line":33638},[25,44432,33659],{"class":302},[25,44434,44435,44437,44439,44441,44443,44445,44447,44449,44451],{"class":27,"line":33644},[25,44436,33665],{"class":244},[25,44438,33668],{"class":45},[25,44440,33671],{"class":244},[25,44442,33674],{"class":45},[25,44444,621],{"class":244},[25,44446,33679],{"class":5326},[25,44448,290],{"class":240},[25,44450,33684],{"class":45},[25,44452,251],{"class":244},[25,44454,44455,44457,44459,44461,44463,44465,44467,44469,44471],{"class":27,"line":33650},[25,44456,33665],{"class":244},[25,44458,33668],{"class":45},[25,44460,33696],{"class":244},[25,44462,33699],{"class":45},[25,44464,621],{"class":244},[25,44466,33679],{"class":5326},[25,44468,290],{"class":240},[25,44470,33708],{"class":45},[25,44472,251],{"class":244},[25,44474,44475],{"class":27,"line":33656},[25,44476,33716],{"class":302},[25,44478,44479],{"class":27,"line":33662},[25,44480,33722],{"class":244},[25,44482,44483],{"class":27,"line":33689},[25,44484,33728],{"class":302},[25,44486,44487,44489,44491],{"class":27,"line":33713},[25,44488,33734],{"class":244},[25,44490,33737],{"class":45},[25,44492,251],{"class":244},[25,44494,44495,44497,44499],{"class":27,"line":33719},[25,44496,33745],{"class":244},[25,44498,33748],{"class":45},[25,44500,251],{"class":244},[25,44502,44503],{"class":27,"line":33725},[25,44504,33756],{"class":302},[25,44506,44507,44509,44511,44513,44515,44517,44519],{"class":27,"line":33731},[25,44508,31798],{"class":244},[25,44510,460],{"class":35},[25,44512,621],{"class":244},[25,44514,321],{"class":35},[25,44516,621],{"class":244},[25,44518,321],{"class":35},[25,44520,251],{"class":244},[25,44522,44523,44525,44527,44529,44531,44533,44535,44537,44539],{"class":27,"line":33742},[25,44524,33665],{"class":244},[25,44526,33668],{"class":45},[25,44528,33783],{"class":244},[25,44530,33674],{"class":45},[25,44532,621],{"class":244},[25,44534,33679],{"class":5326},[25,44536,290],{"class":240},[25,44538,33794],{"class":45},[25,44540,251],{"class":244},[25,44542,44543,44545,44547,44549,44551,44553,44555,44557,44559],{"class":27,"line":33753},[25,44544,33665],{"class":244},[25,44546,33668],{"class":45},[25,44548,33806],{"class":244},[25,44550,33699],{"class":45},[25,44552,621],{"class":244},[25,44554,33679],{"class":5326},[25,44556,290],{"class":240},[25,44558,33817],{"class":45},[25,44560,251],{"class":244},[25,44562,44563],{"class":27,"line":33759},[25,44564,33825],{"class":302},[25,44566,44567],{"class":27,"line":33776},[25,44568,33722],{"class":244},[25,44570,44571,44573,44575],{"class":27,"line":33799},[25,44572,33734],{"class":244},[25,44574,33668],{"class":45},[25,44576,251],{"class":244},[25,44578,44579,44581,44583],{"class":27,"line":33822},[25,44580,33745],{"class":244},[25,44582,33847],{"class":45},[25,44584,251],{"class":244},[25,44586,44587],{"class":27,"line":33828},[25,44588,33855],{"class":244},[25,44590,44591],{"class":27,"line":33833},[25,44592,2510],{"emptyLinePlaceholder":167},[25,44594,44595],{"class":27,"line":33842},[25,44596,33866],{"class":302},[25,44598,44599,44601,44603,44605,44607],{"class":27,"line":33852},[25,44600,1642],{"class":240},[25,44602,31291],{"class":35},[25,44604,3059],{"class":240},[25,44606,31296],{"class":45},[25,44608,3849],{"class":244},[25,44610,44611],{"class":27,"line":33858},[25,44612,33885],{"class":302},[25,44614,44615,44618,44620],{"class":27,"line":33863},[25,44616,44617],{"class":244},"    GoogLeNet",[25,44619,290],{"class":240},[25,44621,44622],{"class":244},"GoogLeNet(Inception)\n",[25,44624,44625,44627,44629],{"class":27,"line":33869},[25,44626,33902],{"class":244},[25,44628,290],{"class":240},[25,44630,33907],{"class":244},[25,44632,44633,44635,44637,44640,44642,44644,44646],{"class":27,"line":33882},[25,44634,33464],{"class":244},[25,44636,290],{"class":240},[25,44638,44639],{"class":244},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[25,44641,33920],{"class":5326},[25,44643,290],{"class":240},[25,44645,1194],{"class":35},[25,44647,251],{"class":244},[25,44649,44650],{"class":27,"line":33888},[25,44651,33932],{"class":244},[194,44653,44654],{"start":51},[106,44655,40645],{},[15,44657,44659],{"className":30449,"code":44658,"language":30451,"meta":20,"style":20},"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",[22,44660,44661,44667,44677,44687,44691,44701,44712,44716,44720,44724,44732,44748,44758,44774,44784,44798,44802,44812,44822,44832,44838,44842,44846,44854,44858,44874,44882,44886,44890,44898,44906,44910,44914,44918,44922,44928,44932,44942,44950,44958,44962,44966,44970,44978,44982,44998,45002,45006,45010,45022,45026,45038,45042,45046,45058,45062,45072,45076,45080,45092,45096,45104,45108,45112,45120,45124,45132,45136,45140,45144,45148,45152,45168,45176,45180,45184,45232,45238,45242,45252,45260,45268,45272,45276,45280,45284,45292,45296,45312,45316,45324,45332],{"__ignoreMap":20},[25,44662,44663,44665],{"class":27,"line":28},[25,44664,30463],{"class":240},[25,44666,30466],{"class":244},[25,44668,44669,44671,44673,44675],{"class":27,"line":39},[25,44670,30463],{"class":240},[25,44672,31486],{"class":244},[25,44674,31454],{"class":240},[25,44676,31491],{"class":244},[25,44678,44679,44681,44683,44685],{"class":27,"line":51},[25,44680,30808],{"class":240},[25,44682,31469],{"class":244},[25,44684,30463],{"class":240},[25,44686,31474],{"class":244},[25,44688,44689],{"class":27,"line":59},[25,44690,33993],{"class":302},[25,44692,44693,44695,44697,44699],{"class":27,"line":67},[25,44694,30808],{"class":240},[25,44696,31439],{"class":244},[25,44698,30463],{"class":240},[25,44700,31444],{"class":244},[25,44702,44703,44705,44707,44709],{"class":27,"line":75},[25,44704,30808],{"class":240},[25,44706,31985],{"class":244},[25,44708,30463],{"class":240},[25,44710,44711],{"class":244}," GoogLeNet,Inception\n",[25,44713,44714],{"class":27,"line":83},[25,44715,2510],{"emptyLinePlaceholder":167},[25,44717,44718],{"class":27,"line":91},[25,44719,2510],{"emptyLinePlaceholder":167},[25,44721,44722],{"class":27,"line":1429},[25,44723,34022],{"class":302},[25,44725,44726,44728,44730],{"class":27,"line":1441},[25,44727,32018],{"class":240},[25,44729,34029],{"class":31},[25,44731,32024],{"class":244},[25,44733,44734,44736,44738,44740,44742,44744,44746],{"class":27,"line":1723},[25,44735,34036],{"class":244},[25,44737,290],{"class":240},[25,44739,31526],{"class":244},[25,44741,31529],{"class":5326},[25,44743,290],{"class":240},[25,44745,31534],{"class":45},[25,44747,31537],{"class":244},[25,44749,44750,44752,44754,44756],{"class":27,"line":1728},[25,44751,34053],{"class":5326},[25,44753,290],{"class":240},[25,44755,34058],{"class":35},[25,44757,31537],{"class":244},[25,44759,44760,44762,44764,44766,44768,44770,44772],{"class":27,"line":1734},[25,44761,34065],{"class":5326},[25,44763,290],{"class":240},[25,44765,31564],{"class":244},[25,44767,31567],{"class":5326},[25,44769,290],{"class":240},[25,44771,35520],{"class":35},[25,44773,31575],{"class":244},[25,44775,44776,44778,44780,44782],{"class":27,"line":1739},[25,44777,34082],{"class":5326},[25,44779,290],{"class":240},[25,44781,31547],{"class":35},[25,44783,251],{"class":244},[25,44785,44786,44788,44790,44792,44794,44796],{"class":27,"line":1753},[25,44787,34093],{"class":244},[25,44789,290],{"class":240},[25,44791,31605],{"class":244},[25,44793,31608],{"class":5326},[25,44795,290],{"class":240},[25,44797,34104],{"class":244},[25,44799,44800],{"class":27,"line":1758},[25,44801,34109],{"class":302},[25,44803,44804,44806,44808,44810],{"class":27,"line":1764},[25,44805,34114],{"class":5326},[25,44807,290],{"class":240},[25,44809,460],{"class":35},[25,44811,31537],{"class":244},[25,44813,44814,44816,44818,44820],{"class":27,"line":1785},[25,44815,34125],{"class":5326},[25,44817,290],{"class":240},[25,44819,31547],{"class":35},[25,44821,31537],{"class":244},[25,44823,44824,44826,44828,44830],{"class":27,"line":1790},[25,44825,34136],{"class":5326},[25,44827,290],{"class":240},[25,44829,434],{"class":35},[25,44831,251],{"class":244},[25,44833,44834,44836],{"class":27,"line":1804},[25,44835,4200],{"class":240},[25,44837,34149],{"class":244},[25,44839,44840],{"class":27,"line":1809},[25,44841,2510],{"emptyLinePlaceholder":167},[25,44843,44844],{"class":27,"line":1838},[25,44845,34158],{"class":302},[25,44847,44848,44850,44852],{"class":27,"line":1843},[25,44849,32018],{"class":240},[25,44851,34165],{"class":31},[25,44853,34168],{"class":244},[25,44855,44856],{"class":27,"line":1860},[25,44857,34173],{"class":302},[25,44859,44860,44862,44864,44866,44868,44870,44872],{"class":27,"line":1865},[25,44861,31308],{"class":244},[25,44863,290],{"class":240},[25,44865,31315],{"class":45},[25,44867,1815],{"class":240},[25,44869,31320],{"class":244},[25,44871,1812],{"class":240},[25,44873,34190],{"class":45},[25,44875,44876,44878,44880],{"class":27,"line":1870},[25,44877,31360],{"class":244},[25,44879,290],{"class":240},[25,44881,32360],{"class":244},[25,44883,44884],{"class":27,"line":1875},[25,44885,2510],{"emptyLinePlaceholder":167},[25,44887,44888],{"class":27,"line":1889},[25,44889,34207],{"class":302},[25,44891,44892,44894,44896],{"class":27,"line":1894},[25,44893,34212],{"class":244},[25,44895,290],{"class":240},[25,44897,32413],{"class":35},[25,44899,44900,44902,44904],{"class":27,"line":2687},[25,44901,34221],{"class":244},[25,44903,290],{"class":240},[25,44905,3195],{"class":35},[25,44907,44908],{"class":27,"line":2701},[25,44909,2510],{"emptyLinePlaceholder":167},[25,44911,44912],{"class":27,"line":2709},[25,44913,34234],{"class":302},[25,44915,44916],{"class":27,"line":2714},[25,44917,34239],{"class":302},[25,44919,44920],{"class":27,"line":2720},[25,44921,34244],{"class":302},[25,44923,44924,44926],{"class":27,"line":2726},[25,44925,34249],{"class":240},[25,44927,32955],{"class":244},[25,44929,44930],{"class":27,"line":2731},[25,44931,34256],{"class":302},[25,44933,44934,44936,44938,44940],{"class":27,"line":8058},[25,44935,3513],{"class":240},[25,44937,34263],{"class":244},[25,44939,26114],{"class":240},[25,44941,34268],{"class":244},[25,44943,44944,44946,44948],{"class":27,"line":8082},[25,44945,34273],{"class":244},[25,44947,290],{"class":240},[25,44949,34278],{"class":244},[25,44951,44952,44954,44956],{"class":27,"line":8087},[25,44953,34283],{"class":244},[25,44955,290],{"class":240},[25,44957,34288],{"class":244},[25,44959,44960],{"class":27,"line":8093},[25,44961,34293],{"class":302},[25,44963,44964],{"class":27,"line":8120},[25,44965,32946],{"class":244},[25,44967,44968],{"class":27,"line":8125},[25,44969,34302],{"class":302},[25,44971,44972,44974,44976],{"class":27,"line":8131},[25,44973,32731],{"class":244},[25,44975,290],{"class":240},[25,44977,34311],{"class":244},[25,44979,44980],{"class":27,"line":8143},[25,44981,34316],{"class":302},[25,44983,44984,44986,44988,44990,44992,44994,44996],{"class":27,"line":8155},[25,44985,32748],{"class":244},[25,44987,290],{"class":240},[25,44989,32753],{"class":244},[25,44991,32756],{"class":5326},[25,44993,290],{"class":240},[25,44995,460],{"class":35},[25,44997,251],{"class":244},[25,44999,45000],{"class":27,"line":8167},[25,45001,34337],{"class":302},[25,45003,45004],{"class":27,"line":9826},[25,45005,34342],{"class":302},[25,45007,45008],{"class":27,"line":9851},[25,45009,34347],{"class":302},[25,45011,45012,45014,45016,45018,45020],{"class":27,"line":9874},[25,45013,34352],{"class":244},[25,45015,9587],{"class":240},[25,45017,32858],{"class":244},[25,45019,3059],{"class":240},[25,45021,34361],{"class":244},[25,45023,45024],{"class":27,"line":9898},[25,45025,34366],{"class":302},[25,45027,45028,45030,45032,45034,45036],{"class":27,"line":9903},[25,45029,34371],{"class":244},[25,45031,9587],{"class":240},[25,45033,34376],{"class":244},[25,45035,434],{"class":35},[25,45037,251],{"class":244},[25,45039,45040],{"class":27,"line":9908},[25,45041,2510],{"emptyLinePlaceholder":167},[25,45043,45044],{"class":27,"line":9913},[25,45045,34389],{"class":302},[25,45047,45048,45050,45052,45054,45056],{"class":27,"line":9922},[25,45049,34394],{"class":244},[25,45051,290],{"class":240},[25,45053,34399],{"class":244},[25,45055,827],{"class":240},[25,45057,34404],{"class":244},[25,45059,45060],{"class":27,"line":9927},[25,45061,34409],{"class":302},[25,45063,45064,45066,45068,45070],{"class":27,"line":9933},[25,45065,32522],{"class":35},[25,45067,245],{"class":244},[25,45069,34418],{"class":45},[25,45071,34421],{"class":244},[25,45073,45074],{"class":27,"line":9954},[25,45075,2510],{"emptyLinePlaceholder":167},[25,45077,45078],{"class":27,"line":9960},[25,45079,34430],{"class":302},[25,45081,45082,45084,45086,45088,45090],{"class":27,"line":9974},[25,45083,1642],{"class":240},[25,45085,31291],{"class":35},[25,45087,3059],{"class":240},[25,45089,31296],{"class":45},[25,45091,3849],{"class":244},[25,45093,45094],{"class":27,"line":9980},[25,45095,34447],{"class":302},[25,45097,45098,45100,45102],{"class":27,"line":10007},[25,45099,31360],{"class":244},[25,45101,290],{"class":240},[25,45103,44622],{"class":244},[25,45105,45106],{"class":27,"line":10016},[25,45107,34460],{"class":302},[25,45109,45110],{"class":27,"line":10022},[25,45111,34465],{"class":302},[25,45113,45114,45116,45118],{"class":27,"line":10030},[25,45115,34470],{"class":244},[25,45117,34473],{"class":45},[25,45119,30568],{"class":244},[25,45121,45122],{"class":27,"line":10035},[25,45123,34480],{"class":302},[25,45125,45126,45128,45130],{"class":27,"line":16714},[25,45127,34093],{"class":244},[25,45129,290],{"class":240},[25,45131,34489],{"class":244},[25,45133,45134],{"class":27,"line":16720},[25,45135,34494],{"class":302},[25,45137,45138],{"class":27,"line":16743},[25,45139,34499],{"class":244},[25,45141,45142],{"class":27,"line":16749},[25,45143,2510],{"emptyLinePlaceholder":167},[25,45145,45146],{"class":27,"line":16772},[25,45147,34508],{"class":302},[25,45149,45150],{"class":27,"line":16786},[25,45151,34513],{"class":302},[25,45153,45154,45156,45158,45160,45162,45164,45166],{"class":27,"line":16806},[25,45155,31308],{"class":244},[25,45157,290],{"class":240},[25,45159,31315],{"class":45},[25,45161,1815],{"class":240},[25,45163,31320],{"class":244},[25,45165,1812],{"class":240},[25,45167,34190],{"class":45},[25,45169,45170,45172,45174],{"class":27,"line":16812},[25,45171,31360],{"class":244},[25,45173,290],{"class":240},[25,45175,32360],{"class":244},[25,45177,45178],{"class":27,"line":16823},[25,45179,34542],{"class":302},[25,45181,45182],{"class":27,"line":16846},[25,45183,34547],{"class":302},[25,45185,45186,45188,45190,45192,45194,45196,45198,45200,45202,45204,45206,45208,45210,45212,45214,45216,45218,45220,45222,45224,45226,45228,45230],{"class":27,"line":16868},[25,45187,34552],{"class":244},[25,45189,290],{"class":240},[25,45191,1133],{"class":244},[25,45193,34559],{"class":45},[25,45195,621],{"class":244},[25,45197,34564],{"class":45},[25,45199,621],{"class":244},[25,45201,34569],{"class":45},[25,45203,621],{"class":244},[25,45205,34574],{"class":45},[25,45207,621],{"class":244},[25,45209,34579],{"class":45},[25,45211,621],{"class":244},[25,45213,34584],{"class":45},[25,45215,621],{"class":244},[25,45217,34589],{"class":45},[25,45219,621],{"class":244},[25,45221,34594],{"class":45},[25,45223,621],{"class":244},[25,45225,34599],{"class":45},[25,45227,621],{"class":244},[25,45229,34604],{"class":45},[25,45231,33317],{"class":244},[25,45233,45234,45236],{"class":27,"line":16873},[25,45235,34249],{"class":240},[25,45237,32955],{"class":244},[25,45239,45240],{"class":27,"line":16879},[25,45241,34617],{"class":302},[25,45243,45244,45246,45248,45250],{"class":27,"line":16893},[25,45245,3513],{"class":240},[25,45247,34624],{"class":244},[25,45249,26114],{"class":240},[25,45251,34268],{"class":244},[25,45253,45254,45256,45258],{"class":27,"line":16906},[25,45255,32681],{"class":244},[25,45257,290],{"class":240},[25,45259,32686],{"class":244},[25,45261,45262,45264,45266],{"class":27,"line":16911},[25,45263,32696],{"class":244},[25,45265,290],{"class":240},[25,45267,32701],{"class":244},[25,45269,45270],{"class":27,"line":16925},[25,45271,2510],{"emptyLinePlaceholder":167},[25,45273,45274],{"class":27,"line":16930},[25,45275,34653],{"class":302},[25,45277,45278],{"class":27,"line":16936},[25,45279,32946],{"class":244},[25,45281,45282],{"class":27,"line":16941},[25,45283,34662],{"class":302},[25,45285,45286,45288,45290],{"class":27,"line":16955},[25,45287,32731],{"class":244},[25,45289,290],{"class":240},[25,45291,32736],{"class":244},[25,45293,45294],{"class":27,"line":16960},[25,45295,34675],{"class":302},[25,45297,45298,45300,45302,45304,45306,45308,45310],{"class":27,"line":16965},[25,45299,32748],{"class":244},[25,45301,290],{"class":240},[25,45303,32753],{"class":244},[25,45305,32756],{"class":5326},[25,45307,290],{"class":240},[25,45309,460],{"class":35},[25,45311,251],{"class":244},[25,45313,45314],{"class":27,"line":16979},[25,45315,34696],{"class":302},[25,45317,45318,45320,45322],{"class":27,"line":16991},[25,45319,34701],{"class":244},[25,45321,290],{"class":240},[25,45323,34706],{"class":244},[25,45325,45326,45328,45330],{"class":27,"line":16996},[25,45327,34711],{"class":244},[25,45329,290],{"class":240},[25,45331,34716],{"class":244},[25,45333,45334,45336,45338,45340,45342,45344,45346,45348],{"class":27,"line":17009},[25,45335,34721],{"class":35},[25,45337,245],{"class":244},[25,45339,34726],{"class":45},[25,45341,34729],{"class":244},[25,45343,34732],{"class":45},[25,45345,621],{"class":244},[25,45347,34737],{"class":45},[25,45349,34740],{"class":244},[210,45351,45353],{"id":45352},"_24训练自己的数据集","2.4.训练自己的数据集",[99,45355,45356],{},"猫狗分类任务",[99,45358,45359],{},"划分数据集和验证集",[15,45361,45363],{"className":30449,"code":45362,"language":30451,"meta":20,"style":20},"# 创建脚本，用于划分数据集和验证集\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",[22,45364,45365,45370,45377,45382,45393,45400,45404,45414,45428,45437,45441,45446,45456,45476,45480,45485,45495,45506,45519,45523,45528,45537,45547,45558,45562,45567,45577,45581,45586,45591,45596,45601,45606,45610,45620,45647,45660,45672,45699,45704,45709,45723,45728,45740,45755,45770,45778,45782,45787,45793,45805,45818,45823,45828,45833,45883,45889,45893],{"__ignoreMap":20},[25,45366,45367],{"class":27,"line":28},[25,45368,45369],{"class":302},"# 创建脚本，用于划分数据集和验证集\n",[25,45371,45372,45374],{"class":27,"line":39},[25,45373,30463],{"class":240},[25,45375,45376],{"class":244}," os\n",[25,45378,45379],{"class":27,"line":51},[25,45380,45381],{"class":302},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[25,45383,45384,45386,45389,45391],{"class":27,"line":59},[25,45385,30808],{"class":240},[25,45387,45388],{"class":244}," shutil ",[25,45390,30463],{"class":240},[25,45392,31893],{"class":244},[25,45394,45395,45397],{"class":27,"line":67},[25,45396,30463],{"class":240},[25,45398,45399],{"class":244}," random\n",[25,45401,45402],{"class":27,"line":75},[25,45403,2510],{"emptyLinePlaceholder":167},[25,45405,45406,45408,45411],{"class":27,"line":83},[25,45407,32018],{"class":240},[25,45409,45410],{"class":31}," mkfile",[25,45412,45413],{"class":244},"(file):\n",[25,45415,45416,45418,45420,45423,45426],{"class":27,"line":91},[25,45417,3211],{"class":240},[25,45419,39001],{"class":240},[25,45421,45422],{"class":244}," os.path.exists(",[25,45424,45425],{"class":5326},"file",[25,45427,30857],{"class":244},[25,45429,45430,45433,45435],{"class":27,"line":1429},[25,45431,45432],{"class":244},"        os.makedirs(",[25,45434,45425],{"class":5326},[25,45436,251],{"class":244},[25,45438,45439],{"class":27,"line":1441},[25,45440,2510],{"emptyLinePlaceholder":167},[25,45442,45443],{"class":27,"line":1723},[25,45444,45445],{"class":302},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[25,45447,45448,45451,45453],{"class":27,"line":1728},[25,45449,45450],{"class":244},"file_path",[25,45452,290],{"class":240},[25,45454,45455],{"class":45},"'data_cat_dog'\n",[25,45457,45458,45461,45463,45466,45468,45471,45473],{"class":27,"line":1734},[25,45459,45460],{"class":244},"flower_class",[25,45462,290],{"class":240},[25,45464,45465],{"class":244},"[cla ",[25,45467,3135],{"class":240},[25,45469,45470],{"class":244}," cla ",[25,45472,26114],{"class":240},[25,45474,45475],{"class":244}," os.listdir(file_path)]\n",[25,45477,45478],{"class":27,"line":1739},[25,45479,2510],{"emptyLinePlaceholder":167},[25,45481,45482],{"class":27,"line":1753},[25,45483,45484],{"class":302},"# 创建训练集train文件夹\n",[25,45486,45487,45490,45493],{"class":27,"line":1758},[25,45488,45489],{"class":244},"mkfile(",[25,45491,45492],{"class":45},"'data\u002Ftrain'",[25,45494,251],{"class":244},[25,45496,45497,45499,45501,45503],{"class":27,"line":1764},[25,45498,3135],{"class":240},[25,45500,45470],{"class":244},[25,45502,26114],{"class":240},[25,45504,45505],{"class":244}," flower_class:\n",[25,45507,45508,45511,45514,45516],{"class":27,"line":1785},[25,45509,45510],{"class":244},"    mkfile(",[25,45512,45513],{"class":45},"'data\u002Ftrain\u002F'",[25,45515,724],{"class":240},[25,45517,45518],{"class":244},"cla)\n",[25,45520,45521],{"class":27,"line":1790},[25,45522,2510],{"emptyLinePlaceholder":167},[25,45524,45525],{"class":27,"line":1804},[25,45526,45527],{"class":302},"# 创建验证集val文件夹\n",[25,45529,45530,45532,45535],{"class":27,"line":1809},[25,45531,45489],{"class":244},[25,45533,45534],{"class":45},"'data\u002Ftest'",[25,45536,251],{"class":244},[25,45538,45539,45541,45543,45545],{"class":27,"line":1838},[25,45540,3135],{"class":240},[25,45542,45470],{"class":244},[25,45544,26114],{"class":240},[25,45546,45505],{"class":244},[25,45548,45549,45551,45554,45556],{"class":27,"line":1843},[25,45550,45510],{"class":244},[25,45552,45553],{"class":45},"'data\u002Ftest\u002F'",[25,45555,724],{"class":240},[25,45557,45518],{"class":244},[25,45559,45560],{"class":27,"line":1860},[25,45561,2510],{"emptyLinePlaceholder":167},[25,45563,45564],{"class":27,"line":1865},[25,45565,45566],{"class":302},"# 划分比例，训练集：测试集=9：1\n",[25,45568,45569,45572,45574],{"class":27,"line":1870},[25,45570,45571],{"class":244},"split_rate",[25,45573,290],{"class":240},[25,45575,45576],{"class":35},"0.1\n",[25,45578,45579],{"class":27,"line":1875},[25,45580,2510],{"emptyLinePlaceholder":167},[25,45582,45583],{"class":27,"line":1889},[25,45584,45585],{"class":302},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[25,45587,45588],{"class":27,"line":1894},[25,45589,45590],{"class":302},"# cla_path：当前类别的原始图片路径\n",[25,45592,45593],{"class":27,"line":2687},[25,45594,45595],{"class":302},"# images：当前类别下所有图片的文件名列表\n",[25,45597,45598],{"class":27,"line":2701},[25,45599,45600],{"class":302},"# num：该类别图片总数\n",[25,45602,45603],{"class":27,"line":2709},[25,45604,45605],{"class":302},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[25,45607,45608],{"class":27,"line":2714},[25,45609,2510],{"emptyLinePlaceholder":167},[25,45611,45612,45614,45616,45618],{"class":27,"line":2720},[25,45613,3135],{"class":240},[25,45615,45470],{"class":244},[25,45617,26114],{"class":240},[25,45619,45505],{"class":244},[25,45621,45622,45625,45627,45630,45632,45635,45638,45640,45642,45644],{"class":27,"line":2726},[25,45623,45624],{"class":244},"    cla_path ",[25,45626,290],{"class":240},[25,45628,45629],{"class":244}," file_path ",[25,45631,724],{"class":240},[25,45633,45634],{"class":45}," '\u002F'",[25,45636,45637],{"class":240}," +",[25,45639,45470],{"class":244},[25,45641,724],{"class":240},[25,45643,45634],{"class":45},[25,45645,45646],{"class":302},"  # 某一类别的子目录\n",[25,45648,45649,45652,45654,45657],{"class":27,"line":2731},[25,45650,45651],{"class":244},"    images ",[25,45653,290],{"class":240},[25,45655,45656],{"class":244}," os.listdir(cla_path)  ",[25,45658,45659],{"class":302},"# iamges 列表存储了该目录下所有图像的名称\n",[25,45661,45662,45665,45667,45669],{"class":27,"line":8058},[25,45663,45664],{"class":244},"    num ",[25,45666,290],{"class":240},[25,45668,7441],{"class":35},[25,45670,45671],{"class":244},"(images)\n",[25,45673,45674,45677,45679,45682,45684,45686,45688,45691,45693,45696],{"class":27,"line":8082},[25,45675,45676],{"class":244},"    eval_index ",[25,45678,290],{"class":240},[25,45680,45681],{"class":244}," random.sample(images, ",[25,45683,736],{"class":5326},[25,45685,290],{"class":240},[25,45687,248],{"class":35},[25,45689,45690],{"class":244},"(num ",[25,45692,698],{"class":240},[25,45694,45695],{"class":244}," split_rate))  ",[25,45697,45698],{"class":302},"# 从images列表中随机抽取 k 个图像名称\n",[25,45700,45701],{"class":27,"line":8087},[25,45702,45703],{"class":302},"    # 遍历该类别下的所有图片\n",[25,45705,45706],{"class":27,"line":8093},[25,45707,45708],{"class":302},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[25,45710,45711,45713,45716,45718,45720],{"class":27,"line":8120},[25,45712,3311],{"class":240},[25,45714,45715],{"class":244}," index, image ",[25,45717,26114],{"class":240},[25,45719,31677],{"class":35},[25,45721,45722],{"class":244},"(images):\n",[25,45724,45725],{"class":27,"line":8125},[25,45726,45727],{"class":302},"        # eval_index 中保存验证集val的图像名称\n",[25,45729,45730,45732,45735,45737],{"class":27,"line":8131},[25,45731,2607],{"class":240},[25,45733,45734],{"class":244}," image ",[25,45736,26114],{"class":240},[25,45738,45739],{"class":244}," eval_index:\n",[25,45741,45742,45745,45747,45750,45752],{"class":27,"line":8143},[25,45743,45744],{"class":244},"            image_path ",[25,45746,290],{"class":240},[25,45748,45749],{"class":244}," cla_path ",[25,45751,724],{"class":240},[25,45753,45754],{"class":244}," image\n",[25,45756,45757,45760,45762,45765,45767],{"class":27,"line":8155},[25,45758,45759],{"class":244},"            new_path ",[25,45761,290],{"class":240},[25,45763,45764],{"class":45}," 'data\u002Ftest\u002F'",[25,45766,45637],{"class":240},[25,45768,45769],{"class":244}," cla\n",[25,45771,45772,45775],{"class":27,"line":8167},[25,45773,45774],{"class":244},"            copy(image_path, new_path)  ",[25,45776,45777],{"class":302},"# 将选中的图像复制到新路径\n",[25,45779,45780],{"class":27,"line":9826},[25,45781,2510],{"emptyLinePlaceholder":167},[25,45783,45784],{"class":27,"line":9851},[25,45785,45786],{"class":302},"        # 其余的图像保存在训练集train中\n",[25,45788,45789,45791],{"class":27,"line":9874},[25,45790,2644],{"class":240},[25,45792,3849],{"class":244},[25,45794,45795,45797,45799,45801,45803],{"class":27,"line":9898},[25,45796,45744],{"class":244},[25,45798,290],{"class":240},[25,45800,45749],{"class":244},[25,45802,724],{"class":240},[25,45804,45754],{"class":244},[25,45806,45807,45809,45811,45814,45816],{"class":27,"line":9903},[25,45808,45759],{"class":244},[25,45810,290],{"class":240},[25,45812,45813],{"class":45}," 'data\u002Ftrain\u002F'",[25,45815,45637],{"class":240},[25,45817,45769],{"class":244},[25,45819,45820],{"class":27,"line":9908},[25,45821,45822],{"class":244},"            copy(image_path, new_path)\n",[25,45824,45825],{"class":27,"line":9913},[25,45826,45827],{"class":302},"            # 打印进度条信息\n",[25,45829,45830],{"class":27,"line":9922},[25,45831,45832],{"class":302},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[25,45834,45835,45837,45839,45841,45844,45846,45848,45851,45853,45855,45857,45860,45863,45865,45867,45870,45873,45875,45877,45880],{"class":27,"line":9927},[25,45836,32522],{"class":35},[25,45838,245],{"class":244},[25,45840,494],{"class":45},[25,45842,45843],{"class":35},"\\r",[25,45845,1133],{"class":45},[25,45847,32530],{"class":35},[25,45849,45850],{"class":45},"] processing [",[25,45852,32530],{"class":35},[25,45854,827],{"class":45},[25,45856,32530],{"class":35},[25,45858,45859],{"class":45},"]\"",[25,45861,45862],{"class":244},".format(cla, index ",[25,45864,724],{"class":240},[25,45866,25225],{"class":35},[25,45868,45869],{"class":244},", num), ",[25,45871,45872],{"class":5326},"end",[25,45874,290],{"class":240},[25,45876,7762],{"class":45},[25,45878,45879],{"class":244},")  ",[25,45881,45882],{"class":302},"# processing bar\n",[25,45884,45885,45887],{"class":27,"line":9933},[25,45886,31370],{"class":35},[25,45888,2086],{"class":244},[25,45890,45891],{"class":27,"line":9954},[25,45892,2510],{"emptyLinePlaceholder":167},[25,45894,45895,45897,45899,45902],{"class":27,"line":9960},[25,45896,30486],{"class":35},[25,45898,245],{"class":244},[25,45900,45901],{"class":45},"\"processing done!\"",[25,45903,251],{"class":244},[99,45905,45906],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22108,45908,45910],{"id":45909},"_242模型代码","2.4.2.模型代码",[99,45912,45913],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[15,45915,45917],{"className":30449,"code":45916,"language":30451,"meta":20,"style":20},"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",[22,45918,45919,45925,45935,45945,45949,45965,45973,45987,45997,46001,46031,46035,46069,46115,46119,46153,46199,46203,46207,46241,46271,46275,46283,46297,46319,46341,46359,46363,46377,46381,46385,46401,46405,46413,46427,46437,46481,46485,46513,46517,46527,46555,46559,46595,46599,46627,46631,46641,46673,46705,46733,46737,46747,46779,46811,46843,46875,46907,46935,46939,46949,46981,47013,47025,47029,47041,47045,47049,47061,47069,47089,47093,47097,47101,47105,47109,47113,47127,47135,47143,47155,47169,47177,47181,47189,47199,47209,47219,47229,47239,47245,47249,47253,47265,47285,47293],{"__ignoreMap":20},[25,45920,45921,45923],{"class":27,"line":28},[25,45922,30463],{"class":240},[25,45924,30466],{"class":244},[25,45926,45927,45929,45931,45933],{"class":27,"line":39},[25,45928,30808],{"class":240},[25,45930,30811],{"class":244},[25,45932,30463],{"class":240},[25,45934,30816],{"class":244},[25,45936,45937,45939,45941,45943],{"class":27,"line":51},[25,45938,30808],{"class":240},[25,45940,30828],{"class":244},[25,45942,30463],{"class":240},[25,45944,30833],{"class":244},[25,45946,45947],{"class":27,"line":59},[25,45948,2510],{"emptyLinePlaceholder":167},[25,45950,45951,45953,45955,45957,45959,45961,45963],{"class":27,"line":67},[25,45952,14804],{"class":240},[25,45954,41564],{"class":31},[25,45956,245],{"class":244},[25,45958,30849],{"class":31},[25,45960,801],{"class":244},[25,45962,30854],{"class":31},[25,45964,30857],{"class":244},[25,45966,45967,45969,45971],{"class":27,"line":75},[25,45968,30872],{"class":240},[25,45970,30875],{"class":35},[25,45972,41583],{"class":244},[25,45974,45975,45977,45979,45981,45983,45985],{"class":27,"line":83},[25,45976,30888],{"class":35},[25,45978,41590],{"class":244},[25,45980,30894],{"class":35},[25,45982,30897],{"class":244},[25,45984,30900],{"class":35},[25,45986,2086],{"class":244},[25,45988,45989,45991,45993,45995],{"class":27,"line":91},[25,45990,30916],{"class":35},[25,45992,34842],{"class":244},[25,45994,290],{"class":240},[25,45996,34847],{"class":244},[25,45998,45999],{"class":27,"line":1429},[25,46000,41613],{"class":302},[25,46002,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027,46029],{"class":27,"line":1441},[25,46004,30916],{"class":35},[25,46006,41620],{"class":244},[25,46008,290],{"class":240},[25,46010,30924],{"class":244},[25,46012,30927],{"class":5326},[25,46014,290],{"class":240},[25,46016,41631],{"class":244},[25,46018,30936],{"class":5326},[25,46020,290],{"class":240},[25,46022,41638],{"class":244},[25,46024,30945],{"class":5326},[25,46026,290],{"class":240},[25,46028,460],{"class":35},[25,46030,251],{"class":244},[25,46032,46033],{"class":27,"line":1723},[25,46034,41651],{"class":302},[25,46036,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067],{"class":27,"line":1728},[25,46038,30916],{"class":35},[25,46040,41658],{"class":244},[25,46042,290],{"class":240},[25,46044,30924],{"class":244},[25,46046,30927],{"class":5326},[25,46048,290],{"class":240},[25,46050,41631],{"class":244},[25,46052,30936],{"class":5326},[25,46054,290],{"class":240},[25,46056,41675],{"class":244},[25,46058,434],{"class":35},[25,46060,41680],{"class":244},[25,46062,30945],{"class":5326},[25,46064,290],{"class":240},[25,46066,460],{"class":35},[25,46068,251],{"class":244},[25,46070,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113],{"class":27,"line":1734},[25,46072,30916],{"class":35},[25,46074,41695],{"class":244},[25,46076,290],{"class":240},[25,46078,30924],{"class":244},[25,46080,30927],{"class":5326},[25,46082,290],{"class":240},[25,46084,41675],{"class":244},[25,46086,434],{"class":35},[25,46088,41680],{"class":244},[25,46090,30936],{"class":5326},[25,46092,290],{"class":240},[25,46094,41675],{"class":244},[25,46096,460],{"class":35},[25,46098,41680],{"class":244},[25,46100,30945],{"class":5326},[25,46102,290],{"class":240},[25,46104,315],{"class":35},[25,46106,621],{"class":244},[25,46108,30954],{"class":5326},[25,46110,290],{"class":240},[25,46112,460],{"class":35},[25,46114,251],{"class":244},[25,46116,46117],{"class":27,"line":1739},[25,46118,41740],{"class":302},[25,46120,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151],{"class":27,"line":1753},[25,46122,30916],{"class":35},[25,46124,41747],{"class":244},[25,46126,290],{"class":240},[25,46128,30924],{"class":244},[25,46130,30927],{"class":5326},[25,46132,290],{"class":240},[25,46134,41631],{"class":244},[25,46136,30936],{"class":5326},[25,46138,290],{"class":240},[25,46140,41764],{"class":244},[25,46142,434],{"class":35},[25,46144,41680],{"class":244},[25,46146,30945],{"class":5326},[25,46148,290],{"class":240},[25,46150,460],{"class":35},[25,46152,251],{"class":244},[25,46154,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197],{"class":27,"line":1758},[25,46156,30916],{"class":35},[25,46158,41783],{"class":244},[25,46160,290],{"class":240},[25,46162,30924],{"class":244},[25,46164,30927],{"class":5326},[25,46166,290],{"class":240},[25,46168,41764],{"class":244},[25,46170,434],{"class":35},[25,46172,41680],{"class":244},[25,46174,30936],{"class":5326},[25,46176,290],{"class":240},[25,46178,41764],{"class":244},[25,46180,460],{"class":35},[25,46182,41680],{"class":244},[25,46184,30945],{"class":5326},[25,46186,290],{"class":240},[25,46188,562],{"class":35},[25,46190,621],{"class":244},[25,46192,30954],{"class":5326},[25,46194,290],{"class":240},[25,46196,321],{"class":35},[25,46198,251],{"class":244},[25,46200,46201],{"class":27,"line":1764},[25,46202,41828],{"class":302},[25,46204,46205],{"class":27,"line":1785},[25,46206,41833],{"class":302},[25,46208,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239],{"class":27,"line":1790},[25,46210,30916],{"class":35},[25,46212,41840],{"class":244},[25,46214,290],{"class":240},[25,46216,34900],{"class":244},[25,46218,30945],{"class":5326},[25,46220,290],{"class":240},[25,46222,315],{"class":35},[25,46224,621],{"class":244},[25,46226,31000],{"class":5326},[25,46228,290],{"class":240},[25,46230,460],{"class":35},[25,46232,621],{"class":244},[25,46234,30954],{"class":5326},[25,46236,290],{"class":240},[25,46238,460],{"class":35},[25,46240,251],{"class":244},[25,46242,46243,46245,46247,46249,46251,46253,46255,46257,46259,46261,46263,46265,46267,46269],{"class":27,"line":1804},[25,46244,30916],{"class":35},[25,46246,41875],{"class":244},[25,46248,290],{"class":240},[25,46250,30924],{"class":244},[25,46252,30927],{"class":5326},[25,46254,290],{"class":240},[25,46256,41631],{"class":244},[25,46258,30936],{"class":5326},[25,46260,290],{"class":240},[25,46262,41892],{"class":244},[25,46264,30945],{"class":5326},[25,46266,290],{"class":240},[25,46268,460],{"class":35},[25,46270,251],{"class":244},[25,46272,46273],{"class":27,"line":1809},[25,46274,2510],{"emptyLinePlaceholder":167},[25,46276,46277,46279,46281],{"class":27,"line":1838},[25,46278,30872],{"class":240},[25,46280,31164],{"class":31},[25,46282,31167],{"class":244},[25,46284,46285,46287,46289,46291,46293,46295],{"class":27,"line":1843},[25,46286,41917],{"class":244},[25,46288,290],{"class":240},[25,46290,30894],{"class":35},[25,46292,35255],{"class":244},[25,46294,30894],{"class":35},[25,46296,41928],{"class":244},[25,46298,46299,46301,46303,46305,46307,46309,46311,46313,46315,46317],{"class":27,"line":1860},[25,46300,7195],{"class":244},[25,46302,290],{"class":240},[25,46304,30894],{"class":35},[25,46306,35255],{"class":244},[25,46308,30894],{"class":35},[25,46310,41943],{"class":244},[25,46312,30894],{"class":35},[25,46314,35255],{"class":244},[25,46316,30894],{"class":35},[25,46318,41952],{"class":244},[25,46320,46321,46323,46325,46327,46329,46331,46333,46335,46337,46339],{"class":27,"line":1865},[25,46322,41957],{"class":244},[25,46324,290],{"class":240},[25,46326,30894],{"class":35},[25,46328,35255],{"class":244},[25,46330,30894],{"class":35},[25,46332,41968],{"class":244},[25,46334,30894],{"class":35},[25,46336,35255],{"class":244},[25,46338,30894],{"class":35},[25,46340,41977],{"class":244},[25,46342,46343,46345,46347,46349,46351,46353,46355,46357],{"class":27,"line":1870},[25,46344,41982],{"class":244},[25,46346,290],{"class":240},[25,46348,30894],{"class":35},[25,46350,35255],{"class":244},[25,46352,30894],{"class":35},[25,46354,41993],{"class":244},[25,46356,30894],{"class":35},[25,46358,41998],{"class":244},[25,46360,46361],{"class":27,"line":1875},[25,46362,42003],{"class":302},[25,46364,46365,46367,46369,46371,46373,46375],{"class":27,"line":1889},[25,46366,14862],{"class":240},[25,46368,42010],{"class":244},[25,46370,32756],{"class":5326},[25,46372,290],{"class":240},[25,46374,460],{"class":35},[25,46376,251],{"class":244},[25,46378,46379],{"class":27,"line":1894},[25,46380,2510],{"emptyLinePlaceholder":167},[25,46382,46383],{"class":27,"line":2687},[25,46384,42031],{"class":302},[25,46386,46387,46389,46391,46393,46395,46397,46399],{"class":27,"line":2701},[25,46388,14804],{"class":240},[25,46390,42038],{"class":31},[25,46392,245],{"class":244},[25,46394,30849],{"class":31},[25,46396,801],{"class":244},[25,46398,30854],{"class":31},[25,46400,30857],{"class":244},[25,46402,46403],{"class":27,"line":2709},[25,46404,42053],{"class":302},[25,46406,46407,46409,46411],{"class":27,"line":2714},[25,46408,30872],{"class":240},[25,46410,30875],{"class":35},[25,46412,42062],{"class":244},[25,46414,46415,46417,46419,46421,46423,46425],{"class":27,"line":2720},[25,46416,30888],{"class":35},[25,46418,42069],{"class":244},[25,46420,30894],{"class":35},[25,46422,30897],{"class":244},[25,46424,30900],{"class":35},[25,46426,2086],{"class":244},[25,46428,46429,46431,46433,46435],{"class":27,"line":2726},[25,46430,30916],{"class":35},[25,46432,42084],{"class":244},[25,46434,290],{"class":240},[25,46436,38080],{"class":244},[25,46438,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471,46473,46475,46477,46479],{"class":27,"line":2731},[25,46440,38085],{"class":244},[25,46442,30927],{"class":5326},[25,46444,290],{"class":240},[25,46446,315],{"class":35},[25,46448,621],{"class":244},[25,46450,30936],{"class":5326},[25,46452,290],{"class":240},[25,46454,446],{"class":35},[25,46456,621],{"class":244},[25,46458,30945],{"class":5326},[25,46460,290],{"class":240},[25,46462,612],{"class":35},[25,46464,621],{"class":244},[25,46466,31000],{"class":5326},[25,46468,290],{"class":240},[25,46470,321],{"class":35},[25,46472,621],{"class":244},[25,46474,30954],{"class":5326},[25,46476,290],{"class":240},[25,46478,315],{"class":35},[25,46480,38118],{"class":244},[25,46482,46483],{"class":27,"line":8058},[25,46484,38123],{"class":244},[25,46486,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511],{"class":27,"line":8082},[25,46488,38168],{"class":244},[25,46490,30945],{"class":5326},[25,46492,290],{"class":240},[25,46494,315],{"class":35},[25,46496,621],{"class":244},[25,46498,31000],{"class":5326},[25,46500,290],{"class":240},[25,46502,321],{"class":35},[25,46504,621],{"class":244},[25,46506,30954],{"class":5326},[25,46508,290],{"class":240},[25,46510,460],{"class":35},[25,46512,251],{"class":244},[25,46514,46515],{"class":27,"line":8087},[25,46516,38197],{"class":244},[25,46518,46519,46521,46523,46525],{"class":27,"line":8093},[25,46520,30916],{"class":35},[25,46522,42175],{"class":244},[25,46524,290],{"class":240},[25,46526,38080],{"class":244},[25,46528,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553],{"class":27,"line":8120},[25,46530,38085],{"class":244},[25,46532,30927],{"class":5326},[25,46534,290],{"class":240},[25,46536,446],{"class":35},[25,46538,621],{"class":244},[25,46540,30936],{"class":5326},[25,46542,290],{"class":240},[25,46544,446],{"class":35},[25,46546,621],{"class":244},[25,46548,30945],{"class":5326},[25,46550,290],{"class":240},[25,46552,460],{"class":35},[25,46554,38118],{"class":244},[25,46556,46557],{"class":27,"line":8125},[25,46558,38123],{"class":244},[25,46560,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593],{"class":27,"line":8131},[25,46562,38085],{"class":244},[25,46564,30927],{"class":5326},[25,46566,290],{"class":240},[25,46568,446],{"class":35},[25,46570,621],{"class":244},[25,46572,30936],{"class":5326},[25,46574,290],{"class":240},[25,46576,42230],{"class":35},[25,46578,621],{"class":244},[25,46580,30945],{"class":5326},[25,46582,290],{"class":240},[25,46584,315],{"class":35},[25,46586,621],{"class":244},[25,46588,30954],{"class":5326},[25,46590,290],{"class":240},[25,46592,460],{"class":35},[25,46594,38118],{"class":244},[25,46596,46597],{"class":27,"line":8143},[25,46598,38123],{"class":244},[25,46600,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625],{"class":27,"line":8155},[25,46602,38168],{"class":244},[25,46604,30945],{"class":5326},[25,46606,290],{"class":240},[25,46608,315],{"class":35},[25,46610,621],{"class":244},[25,46612,31000],{"class":5326},[25,46614,290],{"class":240},[25,46616,321],{"class":35},[25,46618,621],{"class":244},[25,46620,30954],{"class":5326},[25,46622,290],{"class":240},[25,46624,460],{"class":35},[25,46626,251],{"class":244},[25,46628,46629],{"class":27,"line":8167},[25,46630,38197],{"class":244},[25,46632,46633,46635,46637,46639],{"class":27,"line":9826},[25,46634,30916],{"class":35},[25,46636,42291],{"class":244},[25,46638,290],{"class":240},[25,46640,38080],{"class":244},[25,46642,46643,46645,46647,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671],{"class":27,"line":9851},[25,46644,42300],{"class":244},[25,46646,42230],{"class":35},[25,46648,621],{"class":244},[25,46650,446],{"class":35},[25,46652,42309],{"class":244},[25,46654,452],{"class":35},[25,46656,621],{"class":244},[25,46658,32141],{"class":35},[25,46660,42318],{"class":244},[25,46662,844],{"class":35},[25,46664,621],{"class":244},[25,46666,440],{"class":35},[25,46668,42327],{"class":244},[25,46670,440],{"class":35},[25,46672,38118],{"class":244},[25,46674,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703],{"class":27,"line":9874},[25,46676,42300],{"class":244},[25,46678,34941],{"class":35},[25,46680,621],{"class":244},[25,46682,32141],{"class":35},[25,46684,42309],{"class":244},[25,46686,32141],{"class":35},[25,46688,621],{"class":244},[25,46690,42230],{"class":35},[25,46692,42318],{"class":244},[25,46694,440],{"class":35},[25,46696,621],{"class":244},[25,46698,452],{"class":35},[25,46700,42327],{"class":244},[25,46702,446],{"class":35},[25,46704,38118],{"class":244},[25,46706,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731],{"class":27,"line":9898},[25,46708,38168],{"class":244},[25,46710,30945],{"class":5326},[25,46712,290],{"class":240},[25,46714,315],{"class":35},[25,46716,621],{"class":244},[25,46718,31000],{"class":5326},[25,46720,290],{"class":240},[25,46722,321],{"class":35},[25,46724,621],{"class":244},[25,46726,30954],{"class":5326},[25,46728,290],{"class":240},[25,46730,460],{"class":35},[25,46732,251],{"class":244},[25,46734,46735],{"class":27,"line":9903},[25,46736,38197],{"class":244},[25,46738,46739,46741,46743,46745],{"class":27,"line":9908},[25,46740,30916],{"class":35},[25,46742,42402],{"class":244},[25,46744,290],{"class":240},[25,46746,38080],{"class":244},[25,46748,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777],{"class":27,"line":9913},[25,46750,42300],{"class":244},[25,46752,42413],{"class":35},[25,46754,621],{"class":244},[25,46756,42230],{"class":35},[25,46758,42309],{"class":244},[25,46760,452],{"class":35},[25,46762,621],{"class":244},[25,46764,42426],{"class":35},[25,46766,42318],{"class":244},[25,46768,844],{"class":35},[25,46770,621],{"class":244},[25,46772,850],{"class":35},[25,46774,42327],{"class":244},[25,46776,446],{"class":35},[25,46778,38118],{"class":244},[25,46780,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809],{"class":27,"line":9922},[25,46782,42300],{"class":244},[25,46784,38528],{"class":35},[25,46786,621],{"class":244},[25,46788,21158],{"class":35},[25,46790,42309],{"class":244},[25,46792,861],{"class":35},[25,46794,621],{"class":244},[25,46796,31572],{"class":35},[25,46798,42318],{"class":244},[25,46800,1043],{"class":35},[25,46802,621],{"class":244},[25,46804,446],{"class":35},[25,46806,42327],{"class":244},[25,46808,446],{"class":35},[25,46810,38118],{"class":244},[25,46812,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841],{"class":27,"line":9927},[25,46814,42300],{"class":244},[25,46816,38528],{"class":35},[25,46818,621],{"class":244},[25,46820,32141],{"class":35},[25,46822,42309],{"class":244},[25,46824,32141],{"class":35},[25,46826,621],{"class":244},[25,46828,34941],{"class":35},[25,46830,42318],{"class":244},[25,46832,1043],{"class":35},[25,46834,621],{"class":244},[25,46836,446],{"class":35},[25,46838,42327],{"class":244},[25,46840,446],{"class":35},[25,46842,38118],{"class":244},[25,46844,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873],{"class":27,"line":9933},[25,46846,42300],{"class":244},[25,46848,38528],{"class":35},[25,46850,621],{"class":244},[25,46852,861],{"class":35},[25,46854,42309],{"class":244},[25,46856,32141],{"class":35},[25,46858,621],{"class":244},[25,46860,42523],{"class":35},[25,46862,42318],{"class":244},[25,46864,440],{"class":35},[25,46866,621],{"class":244},[25,46868,446],{"class":35},[25,46870,42327],{"class":244},[25,46872,446],{"class":35},[25,46874,38118],{"class":244},[25,46876,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905],{"class":27,"line":9954},[25,46878,42300],{"class":244},[25,46880,42544],{"class":35},[25,46882,621],{"class":244},[25,46884,34941],{"class":35},[25,46886,42309],{"class":244},[25,46888,21158],{"class":35},[25,46890,621],{"class":244},[25,46892,42557],{"class":35},[25,46894,42318],{"class":244},[25,46896,440],{"class":35},[25,46898,621],{"class":244},[25,46900,32141],{"class":35},[25,46902,42327],{"class":244},[25,46904,32141],{"class":35},[25,46906,38118],{"class":244},[25,46908,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933],{"class":27,"line":9960},[25,46910,38168],{"class":244},[25,46912,30945],{"class":5326},[25,46914,290],{"class":240},[25,46916,315],{"class":35},[25,46918,621],{"class":244},[25,46920,31000],{"class":5326},[25,46922,290],{"class":240},[25,46924,321],{"class":35},[25,46926,621],{"class":244},[25,46928,30954],{"class":5326},[25,46930,290],{"class":240},[25,46932,460],{"class":35},[25,46934,251],{"class":244},[25,46936,46937],{"class":27,"line":9974},[25,46938,38197],{"class":244},[25,46940,46941,46943,46945,46947],{"class":27,"line":9980},[25,46942,30916],{"class":35},[25,46944,42610],{"class":244},[25,46946,290],{"class":240},[25,46948,38080],{"class":244},[25,46950,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969,46971,46973,46975,46977,46979],{"class":27,"line":10007},[25,46952,42300],{"class":244},[25,46954,42621],{"class":35},[25,46956,621],{"class":244},[25,46958,34941],{"class":35},[25,46960,42309],{"class":244},[25,46962,21158],{"class":35},[25,46964,621],{"class":244},[25,46966,42557],{"class":35},[25,46968,42318],{"class":244},[25,46970,440],{"class":35},[25,46972,621],{"class":244},[25,46974,32141],{"class":35},[25,46976,42327],{"class":244},[25,46978,32141],{"class":35},[25,46980,38118],{"class":244},[25,46982,46983,46985,46987,46989,46991,46993,46995,46997,46999,47001,47003,47005,47007,47009,47011],{"class":27,"line":10016},[25,46984,42300],{"class":244},[25,46986,42621],{"class":35},[25,46988,621],{"class":244},[25,46990,35011],{"class":35},[25,46992,42309],{"class":244},[25,46994,42230],{"class":35},[25,46996,621],{"class":244},[25,46998,35011],{"class":35},[25,47000,42318],{"class":244},[25,47002,850],{"class":35},[25,47004,621],{"class":244},[25,47006,32141],{"class":35},[25,47008,42327],{"class":244},[25,47010,32141],{"class":35},[25,47012,38118],{"class":244},[25,47014,47015,47017,47019,47021,47023],{"class":27,"line":10022},[25,47016,42684],{"class":244},[25,47018,460],{"class":35},[25,47020,621],{"class":244},[25,47022,460],{"class":35},[25,47024,42693],{"class":244},[25,47026,47027],{"class":27,"line":10030},[25,47028,38861],{"class":244},[25,47030,47031,47033,47035,47037,47039],{"class":27,"line":10035},[25,47032,38866],{"class":244},[25,47034,42704],{"class":35},[25,47036,621],{"class":244},[25,47038,321],{"class":35},[25,47040,251],{"class":244},[25,47042,47043],{"class":27,"line":16714},[25,47044,38197],{"class":244},[25,47046,47047],{"class":27,"line":16720},[25,47048,42719],{"class":302},[25,47050,47051,47053,47055,47057,47059],{"class":27,"line":16743},[25,47052,3513],{"class":240},[25,47054,38939],{"class":244},[25,47056,26114],{"class":240},[25,47058,38944],{"class":35},[25,47060,38947],{"class":244},[25,47062,47063,47065,47067],{"class":27,"line":16749},[25,47064,4752],{"class":240},[25,47066,38959],{"class":35},[25,47068,38962],{"class":244},[25,47070,47071,47073,47075,47077,47079,47081,47083,47085,47087],{"class":27,"line":16772},[25,47072,38972],{"class":244},[25,47074,42746],{"class":5326},[25,47076,290],{"class":240},[25,47078,42751],{"class":45},[25,47080,621],{"class":244},[25,47082,38975],{"class":5326},[25,47084,290],{"class":240},[25,47086,38980],{"class":45},[25,47088,251],{"class":244},[25,47090,47091],{"class":27,"line":16786},[25,47092,42766],{"class":302},[25,47094,47095],{"class":27,"line":16806},[25,47096,42771],{"class":302},[25,47098,47099],{"class":27,"line":16812},[25,47100,42776],{"class":302},[25,47102,47103],{"class":27,"line":16823},[25,47104,42781],{"class":302},[25,47106,47107],{"class":27,"line":16846},[25,47108,42786],{"class":302},[25,47110,47111],{"class":27,"line":16868},[25,47112,42791],{"class":302},[25,47114,47115,47117,47119,47121,47123,47125],{"class":27,"line":16873},[25,47116,38992],{"class":240},[25,47118,38995],{"class":244},[25,47120,38998],{"class":240},[25,47122,39001],{"class":240},[25,47124,39004],{"class":35},[25,47126,3849],{"class":244},[25,47128,47129,47131,47133],{"class":27,"line":16879},[25,47130,39016],{"class":244},[25,47132,434],{"class":35},[25,47134,251],{"class":244},[25,47136,47137,47139,47141],{"class":27,"line":16893},[25,47138,42818],{"class":240},[25,47140,38959],{"class":35},[25,47142,39035],{"class":244},[25,47144,47145,47147,47149,47151,47153],{"class":27,"line":16906},[25,47146,42827],{"class":244},[25,47148,434],{"class":35},[25,47150,621],{"class":244},[25,47152,39057],{"class":35},[25,47154,251],{"class":244},[25,47156,47157,47159,47161,47163,47165,47167],{"class":27,"line":16911},[25,47158,42840],{"class":240},[25,47160,38995],{"class":244},[25,47162,38998],{"class":240},[25,47164,39001],{"class":240},[25,47166,39004],{"class":35},[25,47168,3849],{"class":244},[25,47170,47171,47173,47175],{"class":27,"line":16925},[25,47172,42855],{"class":244},[25,47174,434],{"class":35},[25,47176,251],{"class":244},[25,47178,47179],{"class":27,"line":16930},[25,47180,35236],{"class":302},[25,47182,47183,47185,47187],{"class":27,"line":16936},[25,47184,30872],{"class":240},[25,47186,31164],{"class":31},[25,47188,31167],{"class":244},[25,47190,47191,47193,47195,47197],{"class":27,"line":16941},[25,47192,31172],{"class":244},[25,47194,290],{"class":240},[25,47196,30894],{"class":35},[25,47198,42882],{"class":244},[25,47200,47201,47203,47205,47207],{"class":27,"line":16955},[25,47202,31172],{"class":244},[25,47204,290],{"class":240},[25,47206,30894],{"class":35},[25,47208,42893],{"class":244},[25,47210,47211,47213,47215,47217],{"class":27,"line":16960},[25,47212,31172],{"class":244},[25,47214,290],{"class":240},[25,47216,30894],{"class":35},[25,47218,42904],{"class":244},[25,47220,47221,47223,47225,47227],{"class":27,"line":16965},[25,47222,31172],{"class":244},[25,47224,290],{"class":240},[25,47226,30894],{"class":35},[25,47228,42915],{"class":244},[25,47230,47231,47233,47235,47237],{"class":27,"line":16979},[25,47232,31172],{"class":244},[25,47234,290],{"class":240},[25,47236,30894],{"class":35},[25,47238,42926],{"class":244},[25,47240,47241,47243],{"class":27,"line":16991},[25,47242,14862],{"class":240},[25,47244,31280],{"class":244},[25,47246,47247],{"class":27,"line":16996},[25,47248,2510],{"emptyLinePlaceholder":167},[25,47250,47251],{"class":27,"line":17009},[25,47252,42941],{"class":302},[25,47254,47255,47257,47259,47261,47263],{"class":27,"line":17014},[25,47256,1642],{"class":240},[25,47258,31291],{"class":35},[25,47260,3059],{"class":240},[25,47262,31296],{"class":45},[25,47264,3849],{"class":244},[25,47266,47267,47269,47271,47273,47275,47277,47279,47281,47283],{"class":27,"line":17019},[25,47268,31308],{"class":244},[25,47270,290],{"class":240},[25,47272,30522],{"class":244},[25,47274,31315],{"class":45},[25,47276,1815],{"class":240},[25,47278,31320],{"class":244},[25,47280,1812],{"class":240},[25,47282,30547],{"class":45},[25,47284,251],{"class":244},[25,47286,47287,47289,47291],{"class":27,"line":17024},[25,47288,31360],{"class":244},[25,47290,290],{"class":240},[25,47292,42982],{"class":244},[25,47294,47295,47297,47299,47301,47303,47305,47307,47309],{"class":27,"line":17037},[25,47296,31370],{"class":35},[25,47298,31373],{"class":244},[25,47300,460],{"class":35},[25,47302,621],{"class":244},[25,47304,31572],{"class":35},[25,47306,621],{"class":244},[25,47308,31572],{"class":35},[25,47310,31386],{"class":244},[22108,47312,47314],{"id":47313},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[99,47316,47317],{},"计算图片的均值与方差，用于训练中归一化处理操作",[15,47319,47321],{"className":30449,"code":47320,"language":30451,"meta":20,"style":20},"# 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",[22,47322,47323,47328,47341,47346,47352,47357,47367,47371,47376,47386,47390,47395,47405,47422,47426,47431,47443,47455,47486,47495,47505,47515,47519,47524,47539,47543,47548,47553,47558,47568,47573,47598,47602,47607,47622,47626,47639,47643,47648,47653,47658,47663,47668,47678,47688,47711,47719,47727,47735,47739,47751,47755,47760,47764,47768,47775,47795,47819,47826,47840,47845,47850,47854,47868,47872,47884],{"__ignoreMap":20},[25,47324,47325],{"class":27,"line":28},[25,47326,47327],{"class":302},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[25,47329,47330,47332,47335,47338],{"class":27,"line":39},[25,47331,30808],{"class":240},[25,47333,47334],{"class":35}," PIL",[25,47336,47337],{"class":240}," import",[25,47339,47340],{"class":244}," Image\n",[25,47342,47343],{"class":27,"line":51},[25,47344,47345],{"class":302},"# os 用来处理文件夹和文件路径\n",[25,47347,47348,47350],{"class":27,"line":59},[25,47349,30463],{"class":240},[25,47351,45376],{"class":244},[25,47353,47354],{"class":27,"line":67},[25,47355,47356],{"class":302},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[25,47358,47359,47361,47363,47365],{"class":27,"line":75},[25,47360,30463],{"class":240},[25,47362,31451],{"class":244},[25,47364,31454],{"class":240},[25,47366,31457],{"class":244},[25,47368,47369],{"class":27,"line":83},[25,47370,2510],{"emptyLinePlaceholder":167},[25,47372,47373],{"class":27,"line":91},[25,47374,47375],{"class":302},"# 文件夹路径，包含所有图片文件\n",[25,47377,47378,47381,47383],{"class":27,"line":1429},[25,47379,47380],{"class":244},"folder_path ",[25,47382,290],{"class":240},[25,47384,47385],{"class":45}," 'data_cat_dog'\n",[25,47387,47388],{"class":27,"line":1441},[25,47389,2510],{"emptyLinePlaceholder":167},[25,47391,47392],{"class":27,"line":1723},[25,47393,47394],{"class":302},"# 初始化累积变量\n",[25,47396,47397,47400,47402],{"class":27,"line":1728},[25,47398,47399],{"class":244},"total_pixels ",[25,47401,290],{"class":240},[25,47403,47404],{"class":35}," 0\n",[25,47406,47407,47410,47412,47415,47417,47419],{"class":27,"line":1734},[25,47408,47409],{"class":244},"sum_normalized_pixel_values ",[25,47411,290],{"class":240},[25,47413,47414],{"class":244}," np.zeros(",[25,47416,315],{"class":35},[25,47418,45879],{"class":244},[25,47420,47421],{"class":302},"# 如果是RGB图像，需要三个通道的均值和方差\n",[25,47423,47424],{"class":27,"line":1739},[25,47425,2510],{"emptyLinePlaceholder":167},[25,47427,47428],{"class":27,"line":1753},[25,47429,47430],{"class":302},"# 遍历文件夹中的图片文件\n",[25,47432,47433,47435,47438,47440],{"class":27,"line":1758},[25,47434,3135],{"class":240},[25,47436,47437],{"class":244}," root, dirs, files ",[25,47439,26114],{"class":240},[25,47441,47442],{"class":244}," os.walk(folder_path):\n",[25,47444,47445,47447,47450,47452],{"class":27,"line":1764},[25,47446,3311],{"class":240},[25,47448,47449],{"class":244}," filename ",[25,47451,26114],{"class":240},[25,47453,47454],{"class":244}," files:\n",[25,47456,47457,47459,47462,47465,47467,47470,47472,47475,47477,47480,47483],{"class":27,"line":1785},[25,47458,2607],{"class":240},[25,47460,47461],{"class":244}," filename.endswith((",[25,47463,47464],{"class":45},"'.jpg'",[25,47466,12545],{"class":244},[25,47468,47469],{"class":45},"'.jpeg'",[25,47471,12545],{"class":244},[25,47473,47474],{"class":45},"'.png'",[25,47476,12545],{"class":244},[25,47478,47479],{"class":45},"'.bmp'",[25,47481,47482],{"class":244},")):  ",[25,47484,47485],{"class":302},"# 可根据实际情况添加其他格式\n",[25,47487,47488,47490,47492],{"class":27,"line":1790},[25,47489,45744],{"class":244},[25,47491,290],{"class":240},[25,47493,47494],{"class":244}," os.path.join(root, filename)\n",[25,47496,47497,47500,47502],{"class":27,"line":1804},[25,47498,47499],{"class":244},"            image ",[25,47501,290],{"class":240},[25,47503,47504],{"class":244}," Image.open(image_path)\n",[25,47506,47507,47510,47512],{"class":27,"line":1809},[25,47508,47509],{"class":244},"            image_array ",[25,47511,290],{"class":240},[25,47513,47514],{"class":244}," np.array(image)\n",[25,47516,47517],{"class":27,"line":1838},[25,47518,2510],{"emptyLinePlaceholder":167},[25,47520,47521],{"class":27,"line":1843},[25,47522,47523],{"class":302},"            # 归一化像素值到0-1之间\n",[25,47525,47526,47529,47531,47534,47536],{"class":27,"line":1860},[25,47527,47528],{"class":244},"            normalized_image_array ",[25,47530,290],{"class":240},[25,47532,47533],{"class":244}," image_array ",[25,47535,827],{"class":240},[25,47537,47538],{"class":35}," 255.0\n",[25,47540,47541],{"class":27,"line":1865},[25,47542,2510],{"emptyLinePlaceholder":167},[25,47544,47545],{"class":27,"line":1870},[25,47546,47547],{"class":302},"            # print(image_path)\n",[25,47549,47550],{"class":27,"line":1875},[25,47551,47552],{"class":302},"            # print(normalized_image_array.shape)\n",[25,47554,47555],{"class":27,"line":1889},[25,47556,47557],{"class":302},"            # 累积归一化后的像素值和像素数量\n",[25,47559,47560,47563,47565],{"class":27,"line":1894},[25,47561,47562],{"class":244},"            total_pixels ",[25,47564,9587],{"class":240},[25,47566,47567],{"class":244}," normalized_image_array.size\n",[25,47569,47570],{"class":27,"line":2687},[25,47571,47572],{"class":302},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[25,47574,47575,47578,47580,47583,47586,47588,47590,47592,47594,47596],{"class":27,"line":2701},[25,47576,47577],{"class":244},"            sum_normalized_pixel_values ",[25,47579,9587],{"class":240},[25,47581,47582],{"class":244}," np.sum(normalized_image_array, ",[25,47584,47585],{"class":5326},"axis",[25,47587,290],{"class":240},[25,47589,245],{"class":244},[25,47591,434],{"class":35},[25,47593,12545],{"class":244},[25,47595,460],{"class":35},[25,47597,30568],{"class":244},[25,47599,47600],{"class":27,"line":2709},[25,47601,2510],{"emptyLinePlaceholder":167},[25,47603,47604],{"class":27,"line":2714},[25,47605,47606],{"class":302},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[25,47608,47609,47612,47614,47617,47619],{"class":27,"line":2720},[25,47610,47611],{"class":244},"mean ",[25,47613,290],{"class":240},[25,47615,47616],{"class":244}," sum_normalized_pixel_values ",[25,47618,827],{"class":240},[25,47620,47621],{"class":244}," total_pixels\n",[25,47623,47624],{"class":27,"line":2726},[25,47625,2510],{"emptyLinePlaceholder":167},[25,47627,47628,47631,47633,47635,47637],{"class":27,"line":2731},[25,47629,47630],{"class":244},"sum_squared_diff ",[25,47632,290],{"class":240},[25,47634,47414],{"class":244},[25,47636,315],{"class":35},[25,47638,251],{"class":244},[25,47640,47641],{"class":27,"line":8058},[25,47642,2510],{"emptyLinePlaceholder":167},[25,47644,47645],{"class":27,"line":8082},[25,47646,47647],{"class":302},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[25,47649,47650],{"class":27,"line":8087},[25,47651,47652],{"class":302},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[25,47654,47655],{"class":27,"line":8093},[25,47656,47657],{"class":302},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[25,47659,47660],{"class":27,"line":8120},[25,47661,47662],{"class":302},"# Image.open(image_path)：打开图片\n",[25,47664,47665],{"class":27,"line":8125},[25,47666,47667],{"class":302},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[25,47669,47670,47672,47674,47676],{"class":27,"line":8131},[25,47671,3135],{"class":240},[25,47673,47437],{"class":244},[25,47675,26114],{"class":240},[25,47677,47442],{"class":244},[25,47679,47680,47682,47684,47686],{"class":27,"line":8143},[25,47681,3311],{"class":240},[25,47683,47449],{"class":244},[25,47685,26114],{"class":240},[25,47687,47454],{"class":244},[25,47689,47690,47692,47694,47696,47698,47700,47702,47704,47706,47708],{"class":27,"line":8155},[25,47691,2607],{"class":240},[25,47693,47461],{"class":244},[25,47695,47464],{"class":45},[25,47697,12545],{"class":244},[25,47699,47469],{"class":45},[25,47701,12545],{"class":244},[25,47703,47474],{"class":45},[25,47705,12545],{"class":244},[25,47707,47479],{"class":45},[25,47709,47710],{"class":244},")):\n",[25,47712,47713,47715,47717],{"class":27,"line":8167},[25,47714,45744],{"class":244},[25,47716,290],{"class":240},[25,47718,47494],{"class":244},[25,47720,47721,47723,47725],{"class":27,"line":9826},[25,47722,47499],{"class":244},[25,47724,290],{"class":240},[25,47726,47504],{"class":244},[25,47728,47729,47731,47733],{"class":27,"line":9851},[25,47730,47509],{"class":244},[25,47732,290],{"class":240},[25,47734,47514],{"class":244},[25,47736,47737],{"class":27,"line":9874},[25,47738,47523],{"class":302},[25,47740,47741,47743,47745,47747,47749],{"class":27,"line":9898},[25,47742,47528],{"class":244},[25,47744,290],{"class":240},[25,47746,47533],{"class":244},[25,47748,827],{"class":240},[25,47750,47538],{"class":35},[25,47752,47753],{"class":27,"line":9903},[25,47754,47552],{"class":302},[25,47756,47757],{"class":27,"line":9908},[25,47758,47759],{"class":302},"            # print(mean.shape)\n",[25,47761,47762],{"class":27,"line":9913},[25,47763,47547],{"class":302},[25,47765,47766],{"class":27,"line":9922},[25,47767,2510],{"emptyLinePlaceholder":167},[25,47769,47770,47773],{"class":27,"line":9927},[25,47771,47772],{"class":240},"            try",[25,47774,3849],{"class":244},[25,47776,47777,47780,47782,47785,47787,47790,47792],{"class":27,"line":9933},[25,47778,47779],{"class":244},"                diff ",[25,47781,290],{"class":240},[25,47783,47784],{"class":244}," (normalized_image_array ",[25,47786,775],{"class":240},[25,47788,47789],{"class":244}," mean) ",[25,47791,10771],{"class":240},[25,47793,47794],{"class":35}," 2\n",[25,47796,47797,47800,47802,47805,47807,47809,47811,47813,47815,47817],{"class":27,"line":9954},[25,47798,47799],{"class":244},"                sum_squared_diff ",[25,47801,9587],{"class":240},[25,47803,47804],{"class":244}," np.sum(diff, ",[25,47806,47585],{"class":5326},[25,47808,290],{"class":240},[25,47810,245],{"class":244},[25,47812,434],{"class":35},[25,47814,12545],{"class":244},[25,47816,460],{"class":35},[25,47818,30568],{"class":244},[25,47820,47821,47824],{"class":27,"line":9960},[25,47822,47823],{"class":240},"            except",[25,47825,3849],{"class":244},[25,47827,47828,47831,47833,47835,47838],{"class":27,"line":9974},[25,47829,47830],{"class":35},"                print",[25,47832,245],{"class":244},[25,47834,296],{"class":240},[25,47836,47837],{"class":45},"\"捕获到自定义异常\"",[25,47839,251],{"class":244},[25,47841,47842],{"class":27,"line":9980},[25,47843,47844],{"class":302},"            # diff = (normalized_image_array - mean) ** 2\n",[25,47846,47847],{"class":27,"line":10007},[25,47848,47849],{"class":302},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[25,47851,47852],{"class":27,"line":10016},[25,47853,2510],{"emptyLinePlaceholder":167},[25,47855,47856,47859,47861,47864,47866],{"class":27,"line":10022},[25,47857,47858],{"class":244},"variance ",[25,47860,290],{"class":240},[25,47862,47863],{"class":244}," sum_squared_diff ",[25,47865,827],{"class":240},[25,47867,47621],{"class":244},[25,47869,47870],{"class":27,"line":10030},[25,47871,2510],{"emptyLinePlaceholder":167},[25,47873,47874,47876,47878,47881],{"class":27,"line":10035},[25,47875,30486],{"class":35},[25,47877,245],{"class":244},[25,47879,47880],{"class":45},"\"Mean:\"",[25,47882,47883],{"class":244},", mean)\n",[25,47885,47886,47888,47890,47893],{"class":27,"line":16714},[25,47887,30486],{"class":35},[25,47889,245],{"class":244},[25,47891,47892],{"class":45},"\"Variance:\"",[25,47894,47895],{"class":244},", variance)\n",[15,47897,47899],{"className":30449,"code":47898,"language":30451,"meta":20,"style":20},"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",[22,47900,47901,47907,47913,47923,47929,47939,47953,47963,47973,47983,47987,47997,48007,48011,48015,48023,48028,48033,48052,48056,48061,48066,48071,48076,48117,48122,48132,48137,48150,48155,48160,48165,48170,48175,48179,48184,48189,48211,48215,48247,48261,48271,48281,48285,48295,48309,48319,48329,48339,48345,48349,48353,48357,48361,48365,48373,48393,48397,48401,48405,48409,48425,48429,48433,48441,48445,48449,48457,48461,48465,48469,48477,48481,48485,48489,48497,48501,48509,48513,48521,48525,48533,48537,48545,48549,48553,48561,48565,48569,48581,48605,48619,48623,48627,48631,48639,48643,48651,48655,48663,48667,48675,48679,48687,48691,48699,48703,48715,48719,48727,48731,48739,48743,48747,48751,48755,48763,48767,48783,48787,48795,48799,48803,48807,48811,48815,48819,48823,48839,48843,48855,48859,48871,48875,48887,48891,48899,48903,48911,48915,48919,48923,48929,48933,48941,48945,48961,48965,48973,48977,48993,49005,49009,49021,49025,49029,49037,49041,49045,49053,49057,49065,49069,49077,49081,49085,49127,49169,49173,49177,49193,49197,49213,49217,49221,49229,49233,49237,49249,49287,49291,49295,49303,49307,49321,49331,49337,49343,49349,49355,49359,49363,49369,49373,49377,49385,49389,49407,49411,49415,49419,49435,49439,49443,49447,49451,49455,49475,49495,49499,49503,49507,49515,49523,49527,49543,49563,49583,49587,49592,49601,49610,49615,49620,49625,49638,49643,49652,49661,49678],{"__ignoreMap":20},[25,47902,47903,47905],{"class":27,"line":28},[25,47904,30463],{"class":240},[25,47906,31893],{"class":244},[25,47908,47909,47911],{"class":27,"line":39},[25,47910,30463],{"class":240},[25,47912,31900],{"class":244},[25,47914,47915,47917,47919,47921],{"class":27,"line":51},[25,47916,30463],{"class":240},[25,47918,31911],{"class":244},[25,47920,31454],{"class":240},[25,47922,31916],{"class":244},[25,47924,47925,47927],{"class":27,"line":59},[25,47926,30463],{"class":240},[25,47928,30466],{"class":244},[25,47930,47931,47933,47935,47937],{"class":27,"line":67},[25,47932,30808],{"class":240},[25,47934,31486],{"class":244},[25,47936,30463],{"class":240},[25,47938,31933],{"class":244},[25,47940,47941,47943,47945,47947,47950],{"class":27,"line":75},[25,47942,30808],{"class":240},[25,47944,31439],{"class":244},[25,47946,30463],{"class":240},[25,47948,47949],{"class":244}," ImageFolder ",[25,47951,47952],{"class":302},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[25,47954,47955,47957,47959,47961],{"class":27,"line":83},[25,47956,30808],{"class":240},[25,47958,31469],{"class":244},[25,47960,30463],{"class":240},[25,47962,31474],{"class":244},[25,47964,47965,47967,47969,47971],{"class":27,"line":91},[25,47966,30463],{"class":240},[25,47968,31486],{"class":244},[25,47970,31454],{"class":240},[25,47972,31491],{"class":244},[25,47974,47975,47977,47979,47981],{"class":27,"line":1429},[25,47976,30463],{"class":240},[25,47978,31503],{"class":244},[25,47980,31454],{"class":240},[25,47982,31508],{"class":244},[25,47984,47985],{"class":27,"line":1441},[25,47986,31978],{"class":302},[25,47988,47989,47991,47993,47995],{"class":27,"line":1723},[25,47990,30808],{"class":240},[25,47992,31985],{"class":244},[25,47994,30463],{"class":240},[25,47996,43102],{"class":244},[25,47998,47999,48001,48003,48005],{"class":27,"line":1728},[25,48000,30808],{"class":240},[25,48002,30811],{"class":244},[25,48004,30463],{"class":240},[25,48006,30816],{"class":244},[25,48008,48009],{"class":27,"line":1734},[25,48010,2510],{"emptyLinePlaceholder":167},[25,48012,48013],{"class":27,"line":1739},[25,48014,32013],{"class":302},[25,48016,48017,48019,48021],{"class":27,"line":1753},[25,48018,32018],{"class":240},[25,48020,32021],{"class":31},[25,48022,32024],{"class":244},[25,48024,48025],{"class":27,"line":1758},[25,48026,48027],{"class":302},"    # 导入自己的数据集，并进行数据处理\n",[25,48029,48030],{"class":27,"line":1764},[25,48031,48032],{"class":302},"    # 定义数据集的路径\n",[25,48034,48035,48038,48040,48042,48044,48046,48050],{"class":27,"line":1785},[25,48036,48037],{"class":35},"    ROOT_PATH",[25,48039,290],{"class":240},[25,48041,913],{"class":240},[25,48043,494],{"class":45},[25,48045,801],{"class":35},[25,48047,48049],{"class":48048},"sA_wV","\u002Fdata\u002Ftrain",[25,48051,25240],{"class":45},[25,48053,48054],{"class":27,"line":1790},[25,48055,2510],{"emptyLinePlaceholder":167},[25,48057,48058],{"class":27,"line":1804},[25,48059,48060],{"class":302},"    # 定义归一化方法\n",[25,48062,48063],{"class":27,"line":1809},[25,48064,48065],{"class":302},"    # 这里需要先计算一下数据集的均值和方差\n",[25,48067,48068],{"class":27,"line":1838},[25,48069,48070],{"class":302},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[25,48072,48073],{"class":27,"line":1843},[25,48074,48075],{"class":302},"    # 第一个参数是均值，第二个参数是方差\n",[25,48077,48078,48081,48083,48086,48089,48091,48094,48096,48099,48102,48105,48107,48110,48112,48115],{"class":27,"line":1860},[25,48079,48080],{"class":244},"    normalize",[25,48082,290],{"class":240},[25,48084,48085],{"class":244},"transforms.Normalize([",[25,48087,48088],{"class":35},"0.162",[25,48090,621],{"class":244},[25,48092,48093],{"class":35},"0.151",[25,48095,621],{"class":244},[25,48097,48098],{"class":35},"0.138",[25,48100,48101],{"class":244},"],[",[25,48103,48104],{"class":35},"0.058",[25,48106,621],{"class":244},[25,48108,48109],{"class":35},"0.052",[25,48111,621],{"class":244},[25,48113,48114],{"class":35},"0.048",[25,48116,4767],{"class":244},[25,48118,48119],{"class":27,"line":1865},[25,48120,48121],{"class":302},"    # 定义数据集处理方法变量\n",[25,48123,48124,48127,48129],{"class":27,"line":1870},[25,48125,48126],{"class":244},"    train_transform",[25,48128,290],{"class":240},[25,48130,48131],{"class":244},"transforms.Compose([\n",[25,48133,48134],{"class":27,"line":1875},[25,48135,48136],{"class":302},"        # 调整图像大小为224*224\n",[25,48138,48139,48142,48144,48146,48148],{"class":27,"line":1889},[25,48140,48141],{"class":244},"        transforms.Resize((",[25,48143,31572],{"class":35},[25,48145,621],{"class":244},[25,48147,31572],{"class":35},[25,48149,42693],{"class":244},[25,48151,48152],{"class":27,"line":1894},[25,48153,48154],{"class":302},"        # 将图像转换为张量\n",[25,48156,48157],{"class":27,"line":2687},[25,48158,48159],{"class":244},"        transforms.ToTensor(),\n",[25,48161,48162],{"class":27,"line":2701},[25,48163,48164],{"class":244},"        normalize])\n",[25,48166,48167],{"class":27,"line":2709},[25,48168,48169],{"class":302},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[25,48171,48172],{"class":27,"line":2714},[25,48173,48174],{"class":302},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[25,48176,48177],{"class":27,"line":2720},[25,48178,2510],{"emptyLinePlaceholder":167},[25,48180,48181],{"class":27,"line":2726},[25,48182,48183],{"class":302},"    # 加载数据集\n",[25,48185,48186],{"class":27,"line":2731},[25,48187,48188],{"class":302},"    # 传入数据集路径与处理方法\n",[25,48190,48191,48193,48195,48198,48201,48203,48206,48208],{"class":27,"line":8058},[25,48192,32029],{"class":244},[25,48194,290],{"class":240},[25,48196,48197],{"class":244},"ImageFolder(",[25,48199,48200],{"class":35},"ROOT_PATH",[25,48202,621],{"class":244},[25,48204,48205],{"class":5326},"transform",[25,48207,290],{"class":240},[25,48209,48210],{"class":244},"train_transform)\n",[25,48212,48213],{"class":27,"line":8082},[25,48214,2510],{"emptyLinePlaceholder":167},[25,48216,48217,48219,48221,48223,48225,48227,48229,48231,48233,48235,48237,48239,48241,48243,48245],{"class":27,"line":8087},[25,48218,32081],{"class":244},[25,48220,290],{"class":240},[25,48222,32086],{"class":244},[25,48224,32089],{"class":35},[25,48226,245],{"class":244},[25,48228,32094],{"class":35},[25,48230,698],{"class":240},[25,48232,7468],{"class":35},[25,48234,32101],{"class":244},[25,48236,32089],{"class":35},[25,48238,245],{"class":244},[25,48240,32108],{"class":35},[25,48242,698],{"class":240},[25,48244,7468],{"class":35},[25,48246,32115],{"class":244},[25,48248,48249,48251,48253,48255,48257,48259],{"class":27,"line":8093},[25,48250,32120],{"class":244},[25,48252,290],{"class":240},[25,48254,32125],{"class":244},[25,48256,31608],{"class":5326},[25,48258,290],{"class":240},[25,48260,31613],{"class":244},[25,48262,48263,48265,48267,48269],{"class":27,"line":8120},[25,48264,32136],{"class":5326},[25,48266,290],{"class":240},[25,48268,440],{"class":35},[25,48270,31537],{"class":244},[25,48272,48273,48275,48277,48279],{"class":27,"line":8125},[25,48274,32148],{"class":5326},[25,48276,290],{"class":240},[25,48278,31547],{"class":35},[25,48280,31537],{"class":244},[25,48282,48283],{"class":27,"line":8131},[25,48284,32159],{"class":302},[25,48286,48287,48289,48291,48293],{"class":27,"line":8143},[25,48288,32164],{"class":5326},[25,48290,290],{"class":240},[25,48292,638],{"class":35},[25,48294,251],{"class":244},[25,48296,48297,48299,48301,48303,48305,48307],{"class":27,"line":8155},[25,48298,32175],{"class":244},[25,48300,290],{"class":240},[25,48302,31605],{"class":244},[25,48304,31608],{"class":5326},[25,48306,290],{"class":240},[25,48308,32186],{"class":244},[25,48310,48311,48313,48315,48317],{"class":27,"line":8167},[25,48312,32191],{"class":5326},[25,48314,290],{"class":240},[25,48316,440],{"class":35},[25,48318,31537],{"class":244},[25,48320,48321,48323,48325,48327],{"class":27,"line":9826},[25,48322,32202],{"class":5326},[25,48324,290],{"class":240},[25,48326,31547],{"class":35},[25,48328,31537],{"class":244},[25,48330,48331,48333,48335,48337],{"class":27,"line":9851},[25,48332,32213],{"class":5326},[25,48334,290],{"class":240},[25,48336,638],{"class":35},[25,48338,251],{"class":244},[25,48340,48341,48343],{"class":27,"line":9874},[25,48342,4200],{"class":240},[25,48344,32226],{"class":244},[25,48346,48347],{"class":27,"line":9898},[25,48348,2510],{"emptyLinePlaceholder":167},[25,48350,48351],{"class":27,"line":9903},[25,48352,32235],{"class":302},[25,48354,48355],{"class":27,"line":9908},[25,48356,32240],{"class":302},[25,48358,48359],{"class":27,"line":9913},[25,48360,2510],{"emptyLinePlaceholder":167},[25,48362,48363],{"class":27,"line":9922},[25,48364,32249],{"class":302},[25,48366,48367,48369,48371],{"class":27,"line":9927},[25,48368,32018],{"class":240},[25,48370,32256],{"class":31},[25,48372,32259],{"class":244},[25,48374,48375,48377,48379,48381,48383,48385,48387,48389,48391],{"class":27,"line":9933},[25,48376,31308],{"class":244},[25,48378,290],{"class":240},[25,48380,30522],{"class":244},[25,48382,31315],{"class":45},[25,48384,1815],{"class":240},[25,48386,31320],{"class":244},[25,48388,1812],{"class":240},[25,48390,32278],{"class":45},[25,48392,251],{"class":244},[25,48394,48395],{"class":27,"line":9954},[25,48396,2510],{"emptyLinePlaceholder":167},[25,48398,48399],{"class":27,"line":9960},[25,48400,32293],{"class":302},[25,48402,48403],{"class":27,"line":9974},[25,48404,32298],{"class":302},[25,48406,48407],{"class":27,"line":9980},[25,48408,32303],{"class":302},[25,48410,48411,48413,48415,48417,48419,48421,48423],{"class":27,"line":10007},[25,48412,32308],{"class":244},[25,48414,290],{"class":240},[25,48416,32313],{"class":244},[25,48418,32316],{"class":5326},[25,48420,290],{"class":240},[25,48422,32321],{"class":35},[25,48424,251],{"class":244},[25,48426,48427],{"class":27,"line":10016},[25,48428,2510],{"emptyLinePlaceholder":167},[25,48430,48431],{"class":27,"line":10022},[25,48432,32332],{"class":302},[25,48434,48435,48437,48439],{"class":27,"line":10030},[25,48436,32337],{"class":244},[25,48438,290],{"class":240},[25,48440,32342],{"class":244},[25,48442,48443],{"class":27,"line":10035},[25,48444,2510],{"emptyLinePlaceholder":167},[25,48446,48447],{"class":27,"line":16714},[25,48448,32351],{"class":302},[25,48450,48451,48453,48455],{"class":27,"line":16720},[25,48452,31360],{"class":244},[25,48454,290],{"class":240},[25,48456,32360],{"class":244},[25,48458,48459],{"class":27,"line":16743},[25,48460,32365],{"class":302},[25,48462,48463],{"class":27,"line":16749},[25,48464,32370],{"class":302},[25,48466,48467],{"class":27,"line":16772},[25,48468,32375],{"class":302},[25,48470,48471,48473,48475],{"class":27,"line":16786},[25,48472,32380],{"class":244},[25,48474,290],{"class":240},[25,48476,32385],{"class":244},[25,48478,48479],{"class":27,"line":16806},[25,48480,2510],{"emptyLinePlaceholder":167},[25,48482,48483],{"class":27,"line":16812},[25,48484,32398],{"class":302},[25,48486,48487],{"class":27,"line":16823},[25,48488,32403],{"class":302},[25,48490,48491,48493,48495],{"class":27,"line":16846},[25,48492,32408],{"class":244},[25,48494,290],{"class":240},[25,48496,32413],{"class":35},[25,48498,48499],{"class":27,"line":16868},[25,48500,32418],{"class":302},[25,48502,48503,48505,48507],{"class":27,"line":16873},[25,48504,32423],{"class":244},[25,48506,290],{"class":240},[25,48508,32428],{"class":244},[25,48510,48511],{"class":27,"line":16879},[25,48512,32433],{"class":302},[25,48514,48515,48517,48519],{"class":27,"line":16893},[25,48516,32438],{"class":244},[25,48518,290],{"class":240},[25,48520,32428],{"class":244},[25,48522,48523],{"class":27,"line":16906},[25,48524,32447],{"class":302},[25,48526,48527,48529,48531],{"class":27,"line":16911},[25,48528,32452],{"class":244},[25,48530,290],{"class":240},[25,48532,32428],{"class":244},[25,48534,48535],{"class":27,"line":16925},[25,48536,32461],{"class":302},[25,48538,48539,48541,48543],{"class":27,"line":16930},[25,48540,32466],{"class":244},[25,48542,290],{"class":240},[25,48544,32428],{"class":244},[25,48546,48547],{"class":27,"line":16936},[25,48548,2510],{"emptyLinePlaceholder":167},[25,48550,48551],{"class":27,"line":16941},[25,48552,32479],{"class":302},[25,48554,48555,48557,48559],{"class":27,"line":16955},[25,48556,32484],{"class":244},[25,48558,290],{"class":240},[25,48560,32489],{"class":244},[25,48562,48563],{"class":27,"line":16960},[25,48564,2510],{"emptyLinePlaceholder":167},[25,48566,48567],{"class":27,"line":16965},[25,48568,32502],{"class":302},[25,48570,48571,48573,48575,48577,48579],{"class":27,"line":16979},[25,48572,3311],{"class":240},[25,48574,32509],{"class":244},[25,48576,26114],{"class":240},[25,48578,32514],{"class":35},[25,48580,32517],{"class":244},[25,48582,48583,48585,48587,48589,48591,48593,48595,48597,48599,48601,48603],{"class":27,"line":16991},[25,48584,32522],{"class":35},[25,48586,245],{"class":244},[25,48588,32527],{"class":45},[25,48590,32530],{"class":35},[25,48592,827],{"class":45},[25,48594,32530],{"class":35},[25,48596,494],{"class":45},[25,48598,32539],{"class":244},[25,48600,775],{"class":240},[25,48602,460],{"class":35},[25,48604,30568],{"class":244},[25,48606,48607,48609,48611,48613,48615,48617],{"class":27,"line":16996},[25,48608,32522],{"class":35},[25,48610,245],{"class":244},[25,48612,32554],{"class":45},[25,48614,698],{"class":240},[25,48616,689],{"class":35},[25,48618,251],{"class":244},[25,48620,48621],{"class":27,"line":17009},[25,48622,2510],{"emptyLinePlaceholder":167},[25,48624,48625],{"class":27,"line":17014},[25,48626,32569],{"class":302},[25,48628,48629],{"class":27,"line":17019},[25,48630,32574],{"class":302},[25,48632,48633,48635,48637],{"class":27,"line":17024},[25,48634,32579],{"class":244},[25,48636,290],{"class":240},[25,48638,32413],{"class":35},[25,48640,48641],{"class":27,"line":17037},[25,48642,32588],{"class":302},[25,48644,48645,48647,48649],{"class":27,"line":17042},[25,48646,32593],{"class":244},[25,48648,290],{"class":240},[25,48650,3195],{"class":35},[25,48652,48653],{"class":27,"line":32704},[25,48654,32602],{"class":302},[25,48656,48657,48659,48661],{"class":27,"line":32710},[25,48658,32607],{"class":244},[25,48660,290],{"class":240},[25,48662,32413],{"class":35},[25,48664,48665],{"class":27,"line":32716},[25,48666,32616],{"class":302},[25,48668,48669,48671,48673],{"class":27,"line":32722},[25,48670,32621],{"class":244},[25,48672,290],{"class":240},[25,48674,3195],{"class":35},[25,48676,48677],{"class":27,"line":32728},[25,48678,32630],{"class":302},[25,48680,48681,48683,48685],{"class":27,"line":32739},[25,48682,32635],{"class":244},[25,48684,290],{"class":240},[25,48686,3195],{"class":35},[25,48688,48689],{"class":27,"line":32745},[25,48690,32644],{"class":302},[25,48692,48693,48695,48697],{"class":27,"line":32765},[25,48694,32649],{"class":244},[25,48696,290],{"class":240},[25,48698,3195],{"class":35},[25,48700,48701],{"class":27,"line":32771},[25,48702,32658],{"class":302},[25,48704,48705,48707,48709,48711,48713],{"class":27,"line":32782},[25,48706,3513],{"class":240},[25,48708,31672],{"class":244},[25,48710,26114],{"class":240},[25,48712,31677],{"class":35},[25,48714,32671],{"class":244},[25,48716,48717],{"class":27,"line":32788},[25,48718,32676],{"class":302},[25,48720,48721,48723,48725],{"class":27,"line":32794},[25,48722,32681],{"class":244},[25,48724,290],{"class":240},[25,48726,32686],{"class":244},[25,48728,48729],{"class":27,"line":32800},[25,48730,32691],{"class":302},[25,48732,48733,48735,48737],{"class":27,"line":32806},[25,48734,32696],{"class":244},[25,48736,290],{"class":240},[25,48738,32701],{"class":244},[25,48740,48741],{"class":27,"line":32812},[25,48742,32707],{"class":302},[25,48744,48745],{"class":27,"line":32818},[25,48746,32713],{"class":244},[25,48748,48749],{"class":27,"line":32824},[25,48750,32719],{"class":302},[25,48752,48753],{"class":27,"line":32844},[25,48754,32725],{"class":302},[25,48756,48757,48759,48761],{"class":27,"line":32850},[25,48758,32731],{"class":244},[25,48760,290],{"class":240},[25,48762,32736],{"class":244},[25,48764,48765],{"class":27,"line":32866},[25,48766,32742],{"class":302},[25,48768,48769,48771,48773,48775,48777,48779,48781],{"class":27,"line":32872},[25,48770,32748],{"class":244},[25,48772,290],{"class":240},[25,48774,32753],{"class":244},[25,48776,32756],{"class":5326},[25,48778,290],{"class":240},[25,48780,460],{"class":35},[25,48782,251],{"class":244},[25,48784,48785],{"class":27,"line":32886},[25,48786,32768],{"class":302},[25,48788,48789,48791,48793],{"class":27,"line":32892},[25,48790,32774],{"class":244},[25,48792,290],{"class":240},[25,48794,32779],{"class":244},[25,48796,48797],{"class":27,"line":32907},[25,48798,32785],{"class":302},[25,48800,48801],{"class":27,"line":32913},[25,48802,32791],{"class":244},[25,48804,48805],{"class":27,"line":32922},[25,48806,32797],{"class":302},[25,48808,48809],{"class":27,"line":32928},[25,48810,32803],{"class":244},[25,48812,48813],{"class":27,"line":32937},[25,48814,32809],{"class":302},[25,48816,48817],{"class":27,"line":32943},[25,48818,32815],{"class":244},[25,48820,48821],{"class":27,"line":32949},[25,48822,32821],{"class":302},[25,48824,48825,48827,48829,48831,48833,48835,48837],{"class":27,"line":32958},[25,48826,32827],{"class":244},[25,48828,9587],{"class":240},[25,48830,32832],{"class":244},[25,48832,698],{"class":240},[25,48834,32837],{"class":244},[25,48836,434],{"class":35},[25,48838,251],{"class":244},[25,48840,48841],{"class":27,"line":32964},[25,48842,32847],{"class":302},[25,48844,48845,48847,48849,48851,48853],{"class":27,"line":32975},[25,48846,32853],{"class":244},[25,48848,9587],{"class":240},[25,48850,32858],{"class":244},[25,48852,3059],{"class":240},[25,48854,32863],{"class":244},[25,48856,48857],{"class":27,"line":32981},[25,48858,32869],{"class":302},[25,48860,48861,48863,48865,48867,48869],{"class":27,"line":33000},[25,48862,32875],{"class":244},[25,48864,9587],{"class":240},[25,48866,32837],{"class":244},[25,48868,434],{"class":35},[25,48870,251],{"class":244},[25,48872,48873],{"class":27,"line":33006},[25,48874,32889],{"class":302},[25,48876,48877,48879,48881,48883,48885],{"class":27,"line":33017},[25,48878,3513],{"class":240},[25,48880,32897],{"class":244},[25,48882,26114],{"class":240},[25,48884,31677],{"class":35},[25,48886,32904],{"class":244},[25,48888,48889],{"class":27,"line":33023},[25,48890,32910],{"class":302},[25,48892,48893,48895,48897],{"class":27,"line":33043},[25,48894,32681],{"class":244},[25,48896,290],{"class":240},[25,48898,32686],{"class":244},[25,48900,48901],{"class":27,"line":33059},[25,48902,32925],{"class":302},[25,48904,48905,48907,48909],{"class":27,"line":33065},[25,48906,32696],{"class":244},[25,48908,290],{"class":240},[25,48910,32701],{"class":244},[25,48912,48913],{"class":27,"line":33079},[25,48914,32940],{"class":302},[25,48916,48917],{"class":27,"line":33085},[25,48918,32946],{"class":244},[25,48920,48921],{"class":27,"line":33091},[25,48922,36427],{"class":302},[25,48924,48925,48927],{"class":27,"line":33102},[25,48926,32952],{"class":240},[25,48928,32955],{"class":244},[25,48930,48931],{"class":27,"line":33108},[25,48932,32961],{"class":302},[25,48934,48935,48937,48939],{"class":27,"line":33114},[25,48936,36442],{"class":244},[25,48938,290],{"class":240},[25,48940,32736],{"class":244},[25,48942,48943],{"class":27,"line":33124},[25,48944,32978],{"class":302},[25,48946,48947,48949,48951,48953,48955,48957,48959],{"class":27,"line":33130},[25,48948,36455],{"class":244},[25,48950,290],{"class":240},[25,48952,32753],{"class":244},[25,48954,32756],{"class":5326},[25,48956,290],{"class":240},[25,48958,460],{"class":35},[25,48960,251],{"class":244},[25,48962,48963],{"class":27,"line":33141},[25,48964,33003],{"class":302},[25,48966,48967,48969,48971],{"class":27,"line":33147},[25,48968,36476],{"class":244},[25,48970,290],{"class":240},[25,48972,32779],{"class":244},[25,48974,48975],{"class":27,"line":33157},[25,48976,33020],{"class":302},[25,48978,48979,48981,48983,48985,48987,48989,48991],{"class":27,"line":33162},[25,48980,36489],{"class":244},[25,48982,9587],{"class":240},[25,48984,36494],{"class":244},[25,48986,698],{"class":240},[25,48988,32837],{"class":244},[25,48990,434],{"class":35},[25,48992,251],{"class":244},[25,48994,48995,48997,48999,49001,49003],{"class":27,"line":33168},[25,48996,36507],{"class":244},[25,48998,9587],{"class":240},[25,49000,32858],{"class":244},[25,49002,3059],{"class":240},[25,49004,32863],{"class":244},[25,49006,49007],{"class":27,"line":33217},[25,49008,36520],{"class":302},[25,49010,49011,49013,49015,49017,49019],{"class":27,"line":33264},[25,49012,36525],{"class":244},[25,49014,9587],{"class":240},[25,49016,32837],{"class":244},[25,49018,434],{"class":35},[25,49020,251],{"class":244},[25,49022,49023],{"class":27,"line":33269},[25,49024,33082],{"class":302},[25,49026,49027],{"class":27,"line":33275},[25,49028,33088],{"class":302},[25,49030,49031,49033,49035],{"class":27,"line":33294},[25,49032,33094],{"class":244},[25,49034,827],{"class":240},[25,49036,33099],{"class":244},[25,49038,49039],{"class":27,"line":33300},[25,49040,33105],{"class":302},[25,49042,49043],{"class":27,"line":33320},[25,49044,33111],{"class":302},[25,49046,49047,49049,49051],{"class":27,"line":33326},[25,49048,33117],{"class":244},[25,49050,827],{"class":240},[25,49052,33099],{"class":244},[25,49054,49055],{"class":27,"line":33332},[25,49056,33127],{"class":302},[25,49058,49059,49061,49063],{"class":27,"line":33342},[25,49060,33133],{"class":244},[25,49062,827],{"class":240},[25,49064,33138],{"class":244},[25,49066,49067],{"class":27,"line":33347},[25,49068,33144],{"class":302},[25,49070,49071,49073,49075],{"class":27,"line":33353},[25,49072,33150],{"class":244},[25,49074,827],{"class":240},[25,49076,33138],{"class":244},[25,49078,49079],{"class":27,"line":33369},[25,49080,2510],{"emptyLinePlaceholder":167},[25,49082,49083],{"class":27,"line":33414},[25,49084,33165],{"class":302},[25,49086,49087,49089,49091,49093,49095,49097,49099,49101,49103,49105,49107,49109,49111,49113,49115,49117,49119,49121,49123,49125],{"class":27,"line":33420},[25,49088,32522],{"class":35},[25,49090,245],{"class":244},[25,49092,3702],{"class":45},[25,49094,32530],{"class":35},[25,49096,33179],{"class":45},[25,49098,1139],{"class":35},[25,49100,33184],{"class":240},[25,49102,1189],{"class":35},[25,49104,33189],{"class":45},[25,49106,1139],{"class":35},[25,49108,33184],{"class":240},[25,49110,1189],{"class":35},[25,49112,3702],{"class":45},[25,49114,33200],{"class":244},[25,49116,775],{"class":240},[25,49118,460],{"class":35},[25,49120,33207],{"class":244},[25,49122,775],{"class":240},[25,49124,460],{"class":35},[25,49126,33214],{"class":244},[25,49128,49129,49131,49133,49135,49137,49139,49141,49143,49145,49147,49149,49151,49153,49155,49157,49159,49161,49163,49165,49167],{"class":27,"line":33426},[25,49130,32522],{"class":35},[25,49132,245],{"class":244},[25,49134,3702],{"class":45},[25,49136,32530],{"class":35},[25,49138,33228],{"class":45},[25,49140,1139],{"class":35},[25,49142,33184],{"class":240},[25,49144,1189],{"class":35},[25,49146,33237],{"class":45},[25,49148,1139],{"class":35},[25,49150,33184],{"class":240},[25,49152,1189],{"class":35},[25,49154,3702],{"class":45},[25,49156,33248],{"class":244},[25,49158,775],{"class":240},[25,49160,460],{"class":35},[25,49162,33255],{"class":244},[25,49164,775],{"class":240},[25,49166,460],{"class":35},[25,49168,33214],{"class":244},[25,49170,49171],{"class":27,"line":33432},[25,49172,2510],{"emptyLinePlaceholder":167},[25,49174,49175],{"class":27,"line":33443},[25,49176,33272],{"class":302},[25,49178,49179,49181,49183,49185,49187,49189,49191],{"class":27,"line":33449},[25,49180,2607],{"class":240},[25,49182,33280],{"class":244},[25,49184,775],{"class":240},[25,49186,460],{"class":35},[25,49188,1183],{"class":244},[25,49190,1203],{"class":240},[25,49192,33291],{"class":244},[25,49194,49195],{"class":27,"line":33455},[25,49196,33297],{"class":302},[25,49198,49199,49201,49203,49205,49207,49209,49211],{"class":27,"line":33461},[25,49200,33303],{"class":244},[25,49202,284],{"class":35},[25,49204,290],{"class":240},[25,49206,33310],{"class":244},[25,49208,775],{"class":240},[25,49210,460],{"class":35},[25,49212,33317],{"class":244},[25,49214,49215],{"class":27,"line":33479},[25,49216,33323],{"class":302},[25,49218,49219],{"class":27,"line":33493},[25,49220,33329],{"class":302},[25,49222,49223,49225,49227],{"class":27,"line":33502},[25,49224,33335],{"class":244},[25,49226,290],{"class":240},[25,49228,32385],{"class":244},[25,49230,49231],{"class":27,"line":33511},[25,49232,2510],{"emptyLinePlaceholder":167},[25,49234,49235],{"class":27,"line":33520},[25,49236,33350],{"class":302},[25,49238,49239,49241,49243,49245,49247],{"class":27,"line":33529},[25,49240,33356],{"class":244},[25,49242,290],{"class":240},[25,49244,33361],{"class":244},[25,49246,775],{"class":240},[25,49248,33366],{"class":244},[25,49250,49251,49253,49255,49257,49259,49261,49263,49265,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285],{"class":27,"line":33535},[25,49252,32522],{"class":35},[25,49254,245],{"class":244},[25,49256,33376],{"class":45},[25,49258,1139],{"class":35},[25,49260,33381],{"class":240},[25,49262,1189],{"class":35},[25,49264,787],{"class":45},[25,49266,1139],{"class":35},[25,49268,33381],{"class":240},[25,49270,1189],{"class":35},[25,49272,33394],{"class":45},[25,49274,33397],{"class":244},[25,49276,33400],{"class":240},[25,49278,1150],{"class":35},[25,49280,33405],{"class":244},[25,49282,571],{"class":240},[25,49284,1150],{"class":35},[25,49286,30568],{"class":244},[25,49288,49289],{"class":27,"line":33541},[25,49290,36804],{"class":302},[25,49292,49293],{"class":27,"line":33549},[25,49294,36809],{"class":302},[25,49296,49297,49299,49301],{"class":27,"line":33554},[25,49298,36814],{"class":244},[25,49300,33438],{"class":45},[25,49302,251],{"class":244},[25,49304,49305],{"class":27,"line":33560},[25,49306,33458],{"class":302},[25,49308,49309,49311,49313,49315,49317,49319],{"class":27,"line":33571},[25,49310,33464],{"class":244},[25,49312,290],{"class":240},[25,49314,33469],{"class":244},[25,49316,33472],{"class":5326},[25,49318,290],{"class":240},[25,49320,1657],{"class":244},[25,49322,49323,49325,49327,49329],{"class":27,"line":33577},[25,49324,33482],{"class":45},[25,49326,1102],{"class":244},[25,49328,33487],{"class":35},[25,49330,33490],{"class":244},[25,49332,49333,49335],{"class":27,"line":33597},[25,49334,33496],{"class":45},[25,49336,33499],{"class":244},[25,49338,49339,49341],{"class":27,"line":33603},[25,49340,33505],{"class":45},[25,49342,33508],{"class":244},[25,49344,49345,49347],{"class":27,"line":33609},[25,49346,33514],{"class":45},[25,49348,33517],{"class":244},[25,49350,49351,49353],{"class":27,"line":33615},[25,49352,33523],{"class":45},[25,49354,33526],{"class":244},[25,49356,49357],{"class":27,"line":33632},[25,49358,33532],{"class":244},[25,49360,49361],{"class":27,"line":33638},[25,49362,33538],{"class":302},[25,49364,49365,49367],{"class":27,"line":33644},[25,49366,4200],{"class":240},[25,49368,33546],{"class":244},[25,49370,49371],{"class":27,"line":33650},[25,49372,2510],{"emptyLinePlaceholder":167},[25,49374,49375],{"class":27,"line":33656},[25,49376,33557],{"class":302},[25,49378,49379,49381,49383],{"class":27,"line":33662},[25,49380,32018],{"class":240},[25,49382,33565],{"class":31},[25,49384,33568],{"class":244},[25,49386,49387],{"class":27,"line":33689},[25,49388,33574],{"class":302},[25,49390,49391,49393,49395,49397,49399,49401,49403,49405],{"class":27,"line":33713},[25,49392,33580],{"class":244},[25,49394,31764],{"class":5326},[25,49396,290],{"class":240},[25,49398,245],{"class":244},[25,49400,741],{"class":35},[25,49402,621],{"class":244},[25,49404,536],{"class":35},[25,49406,30568],{"class":244},[25,49408,49409],{"class":27,"line":33719},[25,49410,33600],{"class":302},[25,49412,49413],{"class":27,"line":33725},[25,49414,33606],{"class":302},[25,49416,49417],{"class":27,"line":33731},[25,49418,33612],{"class":302},[25,49420,49421,49423,49425,49427,49429,49431,49433],{"class":27,"line":33742},[25,49422,31798],{"class":244},[25,49424,460],{"class":35},[25,49426,621],{"class":244},[25,49428,321],{"class":35},[25,49430,621],{"class":244},[25,49432,460],{"class":35},[25,49434,251],{"class":244},[25,49436,49437],{"class":27,"line":33753},[25,49438,33635],{"class":302},[25,49440,49441],{"class":27,"line":33759},[25,49442,33641],{"class":302},[25,49444,49445],{"class":27,"line":33776},[25,49446,33647],{"class":302},[25,49448,49449],{"class":27,"line":33799},[25,49450,33653],{"class":302},[25,49452,49453],{"class":27,"line":33822},[25,49454,33659],{"class":302},[25,49456,49457,49459,49461,49463,49465,49467,49469,49471,49473],{"class":27,"line":33828},[25,49458,33665],{"class":244},[25,49460,33668],{"class":45},[25,49462,33671],{"class":244},[25,49464,33674],{"class":45},[25,49466,621],{"class":244},[25,49468,33679],{"class":5326},[25,49470,290],{"class":240},[25,49472,33684],{"class":45},[25,49474,251],{"class":244},[25,49476,49477,49479,49481,49483,49485,49487,49489,49491,49493],{"class":27,"line":33833},[25,49478,33665],{"class":244},[25,49480,33668],{"class":45},[25,49482,33696],{"class":244},[25,49484,33699],{"class":45},[25,49486,621],{"class":244},[25,49488,33679],{"class":5326},[25,49490,290],{"class":240},[25,49492,33708],{"class":45},[25,49494,251],{"class":244},[25,49496,49497],{"class":27,"line":33842},[25,49498,33716],{"class":302},[25,49500,49501],{"class":27,"line":33852},[25,49502,33722],{"class":244},[25,49504,49505],{"class":27,"line":33858},[25,49506,33728],{"class":302},[25,49508,49509,49511,49513],{"class":27,"line":33863},[25,49510,33734],{"class":244},[25,49512,33737],{"class":45},[25,49514,251],{"class":244},[25,49516,49517,49519,49521],{"class":27,"line":33869},[25,49518,33745],{"class":244},[25,49520,33748],{"class":45},[25,49522,251],{"class":244},[25,49524,49525],{"class":27,"line":33882},[25,49526,33756],{"class":302},[25,49528,49529,49531,49533,49535,49537,49539,49541],{"class":27,"line":33888},[25,49530,31798],{"class":244},[25,49532,460],{"class":35},[25,49534,621],{"class":244},[25,49536,321],{"class":35},[25,49538,621],{"class":244},[25,49540,321],{"class":35},[25,49542,251],{"class":244},[25,49544,49545,49547,49549,49551,49553,49555,49557,49559,49561],{"class":27,"line":33899},[25,49546,33665],{"class":244},[25,49548,33668],{"class":45},[25,49550,33783],{"class":244},[25,49552,33674],{"class":45},[25,49554,621],{"class":244},[25,49556,33679],{"class":5326},[25,49558,290],{"class":240},[25,49560,33794],{"class":45},[25,49562,251],{"class":244},[25,49564,49565,49567,49569,49571,49573,49575,49577,49579,49581],{"class":27,"line":33910},[25,49566,33665],{"class":244},[25,49568,33668],{"class":45},[25,49570,33806],{"class":244},[25,49572,33699],{"class":45},[25,49574,621],{"class":244},[25,49576,33679],{"class":5326},[25,49578,290],{"class":240},[25,49580,33817],{"class":45},[25,49582,251],{"class":244},[25,49584,49585],{"class":27,"line":33929},[25,49586,33825],{"class":302},[25,49588,49590],{"class":27,"line":49589},219,[25,49591,33722],{"class":244},[25,49593,49595,49597,49599],{"class":27,"line":49594},220,[25,49596,33734],{"class":244},[25,49598,33668],{"class":45},[25,49600,251],{"class":244},[25,49602,49604,49606,49608],{"class":27,"line":49603},221,[25,49605,33745],{"class":244},[25,49607,33847],{"class":45},[25,49609,251],{"class":244},[25,49611,49613],{"class":27,"line":49612},222,[25,49614,33855],{"class":244},[25,49616,49618],{"class":27,"line":49617},223,[25,49619,2510],{"emptyLinePlaceholder":167},[25,49621,49623],{"class":27,"line":49622},224,[25,49624,33866],{"class":302},[25,49626,49628,49630,49632,49634,49636],{"class":27,"line":49627},225,[25,49629,1642],{"class":240},[25,49631,31291],{"class":35},[25,49633,3059],{"class":240},[25,49635,31296],{"class":45},[25,49637,3849],{"class":244},[25,49639,49641],{"class":27,"line":49640},226,[25,49642,33885],{"class":302},[25,49644,49646,49648,49650],{"class":27,"line":49645},227,[25,49647,44617],{"class":244},[25,49649,290],{"class":240},[25,49651,44622],{"class":244},[25,49653,49655,49657,49659],{"class":27,"line":49654},228,[25,49656,33902],{"class":244},[25,49658,290],{"class":240},[25,49660,33907],{"class":244},[25,49662,49664,49666,49668,49670,49672,49674,49676],{"class":27,"line":49663},229,[25,49665,33464],{"class":244},[25,49667,290],{"class":240},[25,49669,44639],{"class":244},[25,49671,33920],{"class":5326},[25,49673,290],{"class":240},[25,49675,1150],{"class":35},[25,49677,251],{"class":244},[25,49679,49681],{"class":27,"line":49680},230,[25,49682,33932],{"class":244},[22108,49684,49686],{"id":49685},"_242测试代码","2.4.2.测试代码",[99,49688,49689],{},"使用测试集进行测试与推理",[15,49691,49693],{"className":30449,"code":49692,"language":30451,"meta":20,"style":20},"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",[22,49694,49695,49701,49711,49721,49732,49742,49746,49750,49758,49763,49767,49784,49788,49792,49796,49800,49804,49836,49840,49848,49852,49864,49868,49872,49876,49880,49884,49888,49892,49896,49914,49928,49932,49942,49952,49962,49968,49972,49976,49984,49988,50004,50012,50016,50020,50028,50036,50040,50044,50048,50052,50058,50062,50072,50080,50088,50092,50096,50100,50108,50112,50128,50132,50136,50140,50152,50156,50168,50172,50176,50188,50192,50202,50206,50210,50222,50226,50234,50238,50242,50250,50254,50262,50266,50270,50274,50278,50282,50298,50306,50310,50314,50332,50338,50342,50352,50360,50368,50372,50376,50380,50384,50392,50396,50412,50416,50424,50432],{"__ignoreMap":20},[25,49696,49697,49699],{"class":27,"line":28},[25,49698,30463],{"class":240},[25,49700,30466],{"class":244},[25,49702,49703,49705,49707,49709],{"class":27,"line":39},[25,49704,30463],{"class":240},[25,49706,31486],{"class":244},[25,49708,31454],{"class":240},[25,49710,31491],{"class":244},[25,49712,49713,49715,49717,49719],{"class":27,"line":51},[25,49714,30808],{"class":240},[25,49716,31469],{"class":244},[25,49718,30463],{"class":240},[25,49720,31474],{"class":244},[25,49722,49723,49725,49727,49729],{"class":27,"line":59},[25,49724,30808],{"class":240},[25,49726,31439],{"class":244},[25,49728,30463],{"class":240},[25,49730,49731],{"class":244}," ImageFolder\n",[25,49733,49734,49736,49738,49740],{"class":27,"line":67},[25,49735,30808],{"class":240},[25,49737,31985],{"class":244},[25,49739,30463],{"class":240},[25,49741,44711],{"class":244},[25,49743,49744],{"class":27,"line":75},[25,49745,2510],{"emptyLinePlaceholder":167},[25,49747,49748],{"class":27,"line":83},[25,49749,34022],{"class":302},[25,49751,49752,49754,49756],{"class":27,"line":91},[25,49753,32018],{"class":240},[25,49755,34029],{"class":31},[25,49757,32024],{"class":244},[25,49759,49760],{"class":27,"line":1429},[25,49761,49762],{"class":302},"   # 导入自己的数据集，并进行数据处理\n",[25,49764,49765],{"class":27,"line":1441},[25,49766,48032],{"class":302},[25,49768,49769,49771,49773,49775,49777,49779,49782],{"class":27,"line":1723},[25,49770,48037],{"class":35},[25,49772,290],{"class":240},[25,49774,913],{"class":240},[25,49776,494],{"class":45},[25,49778,801],{"class":35},[25,49780,49781],{"class":48048},"\u002Fdata\u002Ftest",[25,49783,25240],{"class":45},[25,49785,49786],{"class":27,"line":1728},[25,49787,2510],{"emptyLinePlaceholder":167},[25,49789,49790],{"class":27,"line":1734},[25,49791,48060],{"class":302},[25,49793,49794],{"class":27,"line":1739},[25,49795,48065],{"class":302},[25,49797,49798],{"class":27,"line":1753},[25,49799,48070],{"class":302},[25,49801,49802],{"class":27,"line":1758},[25,49803,48075],{"class":302},[25,49805,49806,49808,49810,49812,49814,49816,49818,49820,49822,49824,49826,49828,49830,49832,49834],{"class":27,"line":1764},[25,49807,48080],{"class":244},[25,49809,290],{"class":240},[25,49811,48085],{"class":244},[25,49813,48088],{"class":35},[25,49815,621],{"class":244},[25,49817,48093],{"class":35},[25,49819,621],{"class":244},[25,49821,48098],{"class":35},[25,49823,48101],{"class":244},[25,49825,48104],{"class":35},[25,49827,621],{"class":244},[25,49829,48109],{"class":35},[25,49831,621],{"class":244},[25,49833,48114],{"class":35},[25,49835,4767],{"class":244},[25,49837,49838],{"class":27,"line":1785},[25,49839,48121],{"class":302},[25,49841,49842,49844,49846],{"class":27,"line":1790},[25,49843,48126],{"class":244},[25,49845,290],{"class":240},[25,49847,48131],{"class":244},[25,49849,49850],{"class":27,"line":1804},[25,49851,48136],{"class":302},[25,49853,49854,49856,49858,49860,49862],{"class":27,"line":1809},[25,49855,48141],{"class":244},[25,49857,31572],{"class":35},[25,49859,621],{"class":244},[25,49861,31572],{"class":35},[25,49863,42693],{"class":244},[25,49865,49866],{"class":27,"line":1838},[25,49867,48154],{"class":302},[25,49869,49870],{"class":27,"line":1843},[25,49871,48159],{"class":244},[25,49873,49874],{"class":27,"line":1860},[25,49875,48164],{"class":244},[25,49877,49878],{"class":27,"line":1865},[25,49879,48169],{"class":302},[25,49881,49882],{"class":27,"line":1870},[25,49883,48174],{"class":302},[25,49885,49886],{"class":27,"line":1875},[25,49887,2510],{"emptyLinePlaceholder":167},[25,49889,49890],{"class":27,"line":1889},[25,49891,48183],{"class":302},[25,49893,49894],{"class":27,"line":1894},[25,49895,48188],{"class":302},[25,49897,49898,49900,49902,49904,49906,49908,49910,49912],{"class":27,"line":2687},[25,49899,34036],{"class":244},[25,49901,290],{"class":240},[25,49903,48197],{"class":244},[25,49905,48200],{"class":35},[25,49907,621],{"class":244},[25,49909,48205],{"class":5326},[25,49911,290],{"class":240},[25,49913,48210],{"class":244},[25,49915,49916,49918,49920,49922,49924,49926],{"class":27,"line":2701},[25,49917,34093],{"class":244},[25,49919,290],{"class":240},[25,49921,31605],{"class":244},[25,49923,31608],{"class":5326},[25,49925,290],{"class":240},[25,49927,34104],{"class":244},[25,49929,49930],{"class":27,"line":2709},[25,49931,34109],{"class":302},[25,49933,49934,49936,49938,49940],{"class":27,"line":2714},[25,49935,34114],{"class":5326},[25,49937,290],{"class":240},[25,49939,460],{"class":35},[25,49941,31537],{"class":244},[25,49943,49944,49946,49948,49950],{"class":27,"line":2720},[25,49945,34125],{"class":5326},[25,49947,290],{"class":240},[25,49949,31547],{"class":35},[25,49951,31537],{"class":244},[25,49953,49954,49956,49958,49960],{"class":27,"line":2726},[25,49955,34136],{"class":5326},[25,49957,290],{"class":240},[25,49959,434],{"class":35},[25,49961,251],{"class":244},[25,49963,49964,49966],{"class":27,"line":2731},[25,49965,4200],{"class":240},[25,49967,34149],{"class":244},[25,49969,49970],{"class":27,"line":8058},[25,49971,2510],{"emptyLinePlaceholder":167},[25,49973,49974],{"class":27,"line":8082},[25,49975,34158],{"class":302},[25,49977,49978,49980,49982],{"class":27,"line":8087},[25,49979,32018],{"class":240},[25,49981,34165],{"class":31},[25,49983,34168],{"class":244},[25,49985,49986],{"class":27,"line":8093},[25,49987,34173],{"class":302},[25,49989,49990,49992,49994,49996,49998,50000,50002],{"class":27,"line":8120},[25,49991,31308],{"class":244},[25,49993,290],{"class":240},[25,49995,31315],{"class":45},[25,49997,1815],{"class":240},[25,49999,31320],{"class":244},[25,50001,1812],{"class":240},[25,50003,34190],{"class":45},[25,50005,50006,50008,50010],{"class":27,"line":8125},[25,50007,31360],{"class":244},[25,50009,290],{"class":240},[25,50011,32360],{"class":244},[25,50013,50014],{"class":27,"line":8131},[25,50015,2510],{"emptyLinePlaceholder":167},[25,50017,50018],{"class":27,"line":8143},[25,50019,34207],{"class":302},[25,50021,50022,50024,50026],{"class":27,"line":8155},[25,50023,34212],{"class":244},[25,50025,290],{"class":240},[25,50027,32413],{"class":35},[25,50029,50030,50032,50034],{"class":27,"line":8167},[25,50031,34221],{"class":244},[25,50033,290],{"class":240},[25,50035,3195],{"class":35},[25,50037,50038],{"class":27,"line":9826},[25,50039,2510],{"emptyLinePlaceholder":167},[25,50041,50042],{"class":27,"line":9851},[25,50043,34234],{"class":302},[25,50045,50046],{"class":27,"line":9874},[25,50047,34239],{"class":302},[25,50049,50050],{"class":27,"line":9898},[25,50051,34244],{"class":302},[25,50053,50054,50056],{"class":27,"line":9903},[25,50055,34249],{"class":240},[25,50057,32955],{"class":244},[25,50059,50060],{"class":27,"line":9908},[25,50061,34256],{"class":302},[25,50063,50064,50066,50068,50070],{"class":27,"line":9913},[25,50065,3513],{"class":240},[25,50067,34263],{"class":244},[25,50069,26114],{"class":240},[25,50071,34268],{"class":244},[25,50073,50074,50076,50078],{"class":27,"line":9922},[25,50075,34273],{"class":244},[25,50077,290],{"class":240},[25,50079,34278],{"class":244},[25,50081,50082,50084,50086],{"class":27,"line":9927},[25,50083,34283],{"class":244},[25,50085,290],{"class":240},[25,50087,34288],{"class":244},[25,50089,50090],{"class":27,"line":9933},[25,50091,34293],{"class":302},[25,50093,50094],{"class":27,"line":9954},[25,50095,32946],{"class":244},[25,50097,50098],{"class":27,"line":9960},[25,50099,34302],{"class":302},[25,50101,50102,50104,50106],{"class":27,"line":9974},[25,50103,32731],{"class":244},[25,50105,290],{"class":240},[25,50107,34311],{"class":244},[25,50109,50110],{"class":27,"line":9980},[25,50111,34316],{"class":302},[25,50113,50114,50116,50118,50120,50122,50124,50126],{"class":27,"line":10007},[25,50115,32748],{"class":244},[25,50117,290],{"class":240},[25,50119,32753],{"class":244},[25,50121,32756],{"class":5326},[25,50123,290],{"class":240},[25,50125,460],{"class":35},[25,50127,251],{"class":244},[25,50129,50130],{"class":27,"line":10016},[25,50131,34337],{"class":302},[25,50133,50134],{"class":27,"line":10022},[25,50135,34342],{"class":302},[25,50137,50138],{"class":27,"line":10030},[25,50139,34347],{"class":302},[25,50141,50142,50144,50146,50148,50150],{"class":27,"line":10035},[25,50143,34352],{"class":244},[25,50145,9587],{"class":240},[25,50147,32858],{"class":244},[25,50149,3059],{"class":240},[25,50151,34361],{"class":244},[25,50153,50154],{"class":27,"line":16714},[25,50155,34366],{"class":302},[25,50157,50158,50160,50162,50164,50166],{"class":27,"line":16720},[25,50159,34371],{"class":244},[25,50161,9587],{"class":240},[25,50163,34376],{"class":244},[25,50165,434],{"class":35},[25,50167,251],{"class":244},[25,50169,50170],{"class":27,"line":16743},[25,50171,2510],{"emptyLinePlaceholder":167},[25,50173,50174],{"class":27,"line":16749},[25,50175,34389],{"class":302},[25,50177,50178,50180,50182,50184,50186],{"class":27,"line":16772},[25,50179,34394],{"class":244},[25,50181,290],{"class":240},[25,50183,34399],{"class":244},[25,50185,827],{"class":240},[25,50187,34404],{"class":244},[25,50189,50190],{"class":27,"line":16786},[25,50191,34409],{"class":302},[25,50193,50194,50196,50198,50200],{"class":27,"line":16806},[25,50195,32522],{"class":35},[25,50197,245],{"class":244},[25,50199,34418],{"class":45},[25,50201,34421],{"class":244},[25,50203,50204],{"class":27,"line":16812},[25,50205,2510],{"emptyLinePlaceholder":167},[25,50207,50208],{"class":27,"line":16823},[25,50209,34430],{"class":302},[25,50211,50212,50214,50216,50218,50220],{"class":27,"line":16846},[25,50213,1642],{"class":240},[25,50215,31291],{"class":35},[25,50217,3059],{"class":240},[25,50219,31296],{"class":45},[25,50221,3849],{"class":244},[25,50223,50224],{"class":27,"line":16868},[25,50225,34447],{"class":302},[25,50227,50228,50230,50232],{"class":27,"line":16873},[25,50229,31360],{"class":244},[25,50231,290],{"class":240},[25,50233,44622],{"class":244},[25,50235,50236],{"class":27,"line":16879},[25,50237,34460],{"class":302},[25,50239,50240],{"class":27,"line":16893},[25,50241,34465],{"class":302},[25,50243,50244,50246,50248],{"class":27,"line":16906},[25,50245,34470],{"class":244},[25,50247,34473],{"class":45},[25,50249,30568],{"class":244},[25,50251,50252],{"class":27,"line":16911},[25,50253,34480],{"class":302},[25,50255,50256,50258,50260],{"class":27,"line":16925},[25,50257,34093],{"class":244},[25,50259,290],{"class":240},[25,50261,34489],{"class":244},[25,50263,50264],{"class":27,"line":16930},[25,50265,34494],{"class":302},[25,50267,50268],{"class":27,"line":16936},[25,50269,34499],{"class":244},[25,50271,50272],{"class":27,"line":16941},[25,50273,2510],{"emptyLinePlaceholder":167},[25,50275,50276],{"class":27,"line":16955},[25,50277,34508],{"class":302},[25,50279,50280],{"class":27,"line":16960},[25,50281,34513],{"class":302},[25,50283,50284,50286,50288,50290,50292,50294,50296],{"class":27,"line":16965},[25,50285,31308],{"class":244},[25,50287,290],{"class":240},[25,50289,31315],{"class":45},[25,50291,1815],{"class":240},[25,50293,31320],{"class":244},[25,50295,1812],{"class":240},[25,50297,34190],{"class":45},[25,50299,50300,50302,50304],{"class":27,"line":16979},[25,50301,31360],{"class":244},[25,50303,290],{"class":240},[25,50305,32360],{"class":244},[25,50307,50308],{"class":27,"line":16991},[25,50309,34542],{"class":302},[25,50311,50312],{"class":27,"line":16996},[25,50313,34547],{"class":302},[25,50315,50316,50318,50320,50322,50325,50327,50330],{"class":27,"line":17009},[25,50317,34552],{"class":244},[25,50319,290],{"class":240},[25,50321,1133],{"class":244},[25,50323,50324],{"class":45},"'猫'",[25,50326,621],{"class":244},[25,50328,50329],{"class":45},"'狗'",[25,50331,33317],{"class":244},[25,50333,50334,50336],{"class":27,"line":17014},[25,50335,34249],{"class":240},[25,50337,32955],{"class":244},[25,50339,50340],{"class":27,"line":17019},[25,50341,34617],{"class":302},[25,50343,50344,50346,50348,50350],{"class":27,"line":17024},[25,50345,3513],{"class":240},[25,50347,34624],{"class":244},[25,50349,26114],{"class":240},[25,50351,34268],{"class":244},[25,50353,50354,50356,50358],{"class":27,"line":17037},[25,50355,32681],{"class":244},[25,50357,290],{"class":240},[25,50359,32686],{"class":244},[25,50361,50362,50364,50366],{"class":27,"line":17042},[25,50363,32696],{"class":244},[25,50365,290],{"class":240},[25,50367,32701],{"class":244},[25,50369,50370],{"class":27,"line":32704},[25,50371,2510],{"emptyLinePlaceholder":167},[25,50373,50374],{"class":27,"line":32710},[25,50375,34653],{"class":302},[25,50377,50378],{"class":27,"line":32716},[25,50379,32946],{"class":244},[25,50381,50382],{"class":27,"line":32722},[25,50383,34662],{"class":302},[25,50385,50386,50388,50390],{"class":27,"line":32728},[25,50387,32731],{"class":244},[25,50389,290],{"class":240},[25,50391,32736],{"class":244},[25,50393,50394],{"class":27,"line":32739},[25,50395,34675],{"class":302},[25,50397,50398,50400,50402,50404,50406,50408,50410],{"class":27,"line":32745},[25,50399,32748],{"class":244},[25,50401,290],{"class":240},[25,50403,32753],{"class":244},[25,50405,32756],{"class":5326},[25,50407,290],{"class":240},[25,50409,460],{"class":35},[25,50411,251],{"class":244},[25,50413,50414],{"class":27,"line":32765},[25,50415,34696],{"class":302},[25,50417,50418,50420,50422],{"class":27,"line":32771},[25,50419,34701],{"class":244},[25,50421,290],{"class":240},[25,50423,34706],{"class":244},[25,50425,50426,50428,50430],{"class":27,"line":32782},[25,50427,34711],{"class":244},[25,50429,290],{"class":240},[25,50431,34716],{"class":244},[25,50433,50434,50436,50438,50440,50442,50444,50446,50448],{"class":27,"line":32788},[25,50435,34721],{"class":35},[25,50437,245],{"class":244},[25,50439,34726],{"class":45},[25,50441,34729],{"class":244},[25,50443,34732],{"class":45},[25,50445,621],{"class":244},[25,50447,34737],{"class":45},[25,50449,34740],{"class":244},[159,50451,50452],{},"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":20,"searchDepth":39,"depth":39,"links":50454},[50455,50456,50457,50458],{"id":30662,"depth":51,"text":30663},{"id":37910,"depth":51,"text":37911},{"id":41343,"depth":51,"text":41344},{"id":45352,"depth":51,"text":45353},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30654,"description":164},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50465,"title":50466,"body":50467,"description":164,"extension":165,"meta":50474,"navigation":167,"path":50475,"seo":50476,"stem":50477,"__hash__":50478},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50468,"toc":50472},[50469],[10,50470,50466],{"id":50471},"_3yolo模型学习",{"title":20,"searchDepth":39,"depth":39,"links":50473},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50466,"description":164},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50480,"title":50481,"body":50482,"description":50489,"extension":165,"meta":50490,"navigation":167,"path":50492,"seo":50493,"stem":50494,"__hash__":50495},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50483,"toc":50487},[50484],[99,50485,50486],{},"yolo模型还未补充",{"title":20,"searchDepth":39,"depth":39,"links":50488},[],"深度学习学习",{"category":50491},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50481,"description":50489},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50497,"title":50498,"body":50499,"description":164,"extension":165,"meta":50524,"navigation":167,"path":50525,"seo":50526,"stem":50527,"__hash__":50528},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50500,"toc":50522},[50501,50504,50507,50512,50519],[10,50502,50498],{"id":50503},"_1工具",[99,50505,50506],{},"提示错误插件：有问题会提前报错",[99,50508,50509],{},[155,50510],{"alt":20,"src":50511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[99,50513,50514],{},[481,50515,50518],{"href":50516,"rel":50517},"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",[23973],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[99,50520,50521],{},"alt键加上下箭头可以实现语句的移动",{"title":20,"searchDepth":39,"depth":39,"links":50523},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50498,"description":164},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50530,"title":50531,"body":50532,"description":164,"extension":165,"meta":53396,"navigation":167,"path":53397,"seo":53398,"stem":53399,"__hash__":53400},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50533,"toc":53347},[50534,50537,50541,50545,50550,50553,50558,50562,50569,50574,50581,50586,50593,50598,50602,50607,50610,50614,50619,50623,50628,50631,50634,50637,50640,50643,50646,50649,50652,50657,50662,50667,50671,50674,50677,50681,50686,50689,50697,50702,50719,50727,50732,50737,50742,50747,50752,50755,50760,50765,50769,50778,50783,50788,50792,50797,50800,50804,50809,50817,50822,50827,50830,50835,50840,50845,50848,50851,50854,50859,50864,50867,50872,50875,50880,50883,50886,50889,50894,50897,50900,50915,50920,50925,50930,50933,50936,50939,50953,50956,50961,50966,50969,50972,50975,50978,50981,50984,50987,50991,50995,51000,51004,51007,51012,51017,51020,51025,51028,51032,51037,51040,51043,51046,51049,51052,51055,51058,51061,51064,51068,51073,51078,51083,51086,51089,51093,51098,51101,51105,51108,51111,51116,51119,51122,51126,51130,51133,51138,51143,51146,51175,51180,51185,51190,51195,51199,51204,51208,51213,51216,51220,51224,51229,51233,51238,51243,51247,51252,51255,51257,51260,51265,51269,51274,51278,51282,51287,51292,51297,51302,51306,51311,51316,51321,51324,51327,51332,51335,51340,51345,51350,51355,51359,52166,52170,52513,52518,52521,52524,52527,52530,52533,52536,52539,52542,52544,52547,52549,52552,52556,52561,52564,52567,52570,52574,52579,52584,52604,52607,52611,52616,52621,52638,52642,52671,52675,52697,52699,52738,52746,52752,52756,52759,52762,52767,52772,52775,52778,52781,52786,52791,52794,52797,52800,52803,52806,52809,52812,52815,52818,52821,52824,52826,52829,52832,52835,52838,52841,52844,52847,52850,52854,52859,52862,52867,52870,52873,52876,52879,52882,52885,52888,52890,52893,52896,52899,52902,52905,52908,52912,52915,52924,52927,52932,52935,52940,52943,52946,52949,52952,52955,52958,52961,52965,52969,52972,52975,52980,52985,52990,52994,52999,53004,53007,53010,53013,53016,53019,53024,53027,53032,53034,53039,53042,53046,53051,53054,53057,53062,53066,53069,53074,53077,53080,53109,53114,53117,53120,53123,53126,53129,53133,53136,53222,53226,53229,53234,53239,53246,53249,53252,53255,53258,53261,53266,53271,53274,53277,53280,53283,53286,53289,53292,53295,53298,53300,53303,53307,53312,53317,53322,53325,53330,53335,53338,53341,53344],[10,50535,50531],{"id":50536},"_2基础语法",[182,50538,50540],{"id":50539},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[210,50542,50544],{"id":50543},"_211-js组成","2.1.1 js组成",[194,50546,50547],{},[106,50548,50549],{},"js是编程语言，html和css不是编程语言，是标记语言",[99,50551,50552],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[194,50554,50555],{"start":39},[106,50556,50557],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[210,50559,50561],{"id":50560},"_212-js书写位置","2.1.2 js书写位置",[194,50563,50564],{},[106,50565,50566],{},[392,50567,50568],{},"内部 JavaScript",[99,50570,50571],{},[155,50572],{"alt":20,"src":50573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[194,50575,50576],{"start":39},[106,50577,50578],{},[392,50579,50580],{},"外部 JavaScript",[99,50582,50583],{},[155,50584],{"alt":20,"src":50585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[194,50587,50588],{"start":51},[106,50589,50590],{},[392,50591,50592],{},"内联 JavaScript",[99,50594,50595],{},[155,50596],{"alt":20,"src":50597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[210,50599,50601],{"id":50600},"_213-javascript注释","2.1.3 JavaScript注释",[99,50603,50604],{},[155,50605],{"alt":20,"src":50606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[99,50608,50609],{},"alt+shift+a一定要记住！",[210,50611,50613],{"id":50612},"_214-javascript结束符","2.1.4 JavaScript结束符",[99,50615,50616],{},[155,50617],{"alt":20,"src":50618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[210,50620,50622],{"id":50621},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[194,50624,50625],{},[106,50626,50627],{},"输出语法：",[99,50629,50630],{},"①document.write('要出的内容')",[99,50632,50633],{},"向body内输出内容；",[99,50635,50636],{},"如果输出的内容写的是标签，也会被解析cheng",[99,50638,50639],{},"②alert('要出的内容')",[99,50641,50642],{},"页面弹出警告对话框",[99,50644,50645],{},"③console.log('控制台打印')",[99,50647,50648],{},"控制台输出语法，程序员调试使用",[99,50650,50651],{},"输入log就行，自动生成：",[99,50653,50654],{},[155,50655],{"alt":20,"src":50656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[194,50658,50659],{"start":39},[106,50660,50661],{},"输入语法：",[99,50663,50664],{},[155,50665],{"alt":20,"src":50666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[210,50668,50670],{"id":50669},"_2116-字面量","21.1.6 字面量",[99,50672,50673],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[99,50675,50676],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[182,50678,50680],{"id":50679},"_22-变量","2.2 变量",[194,50682,50683],{},[106,50684,50685],{},"变量声明",[99,50687,50688],{},"let 变量名",[103,50690,50691,50694],{},[106,50692,50693],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[106,50695,50696],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[194,50698,50699],{"start":39},[106,50700,50701],{},"变量赋值",[15,50703,50707],{"className":50704,"code":50705,"language":50706,"meta":20,"style":20},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[22,50708,50709,50714],{"__ignoreMap":20},[25,50710,50711],{"class":27,"line":28},[25,50712,50713],{"class":244},"let age\n",[25,50715,50716],{"class":27,"line":39},[25,50717,50718],{"class":244},"age=18\n",[194,50720,50721,50724],{"start":51},[106,50722,50723],{},"连这些（变量的初始化）：let age=18",[106,50725,50726],{},"更新变量",[99,50728,50729],{},[155,50730],{"alt":20,"src":50731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[194,50733,50734],{"start":67},[106,50735,50736],{},"声明多个变量",[99,50738,50739],{},[155,50740],{"alt":20,"src":50741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[194,50743,50744],{"start":75},[106,50745,50746],{},"变量命名规则与规范",[99,50748,50749],{},[155,50750],{"alt":20,"src":50751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[99,50753,50754],{},"遵守小驼峰！",[194,50756,50757],{"start":83},[106,50758,50759],{},"变量拓展-let和var的区别",[99,50761,50762],{},[155,50763],{"alt":20,"src":50764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[182,50766,50768],{"id":50767},"_23-数组","2.3 数组",[15,50770,50772],{"className":50704,"code":50771,"language":50706,"meta":20,"style":20},"let arr = []\n",[22,50773,50774],{"__ignoreMap":20},[25,50775,50776],{"class":27,"line":28},[25,50777,50771],{"class":244},[99,50779,50780],{},[155,50781],{"alt":20,"src":50782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[99,50784,50785],{},[155,50786],{"alt":20,"src":50787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[182,50789,50791],{"id":50790},"_24-常量","2.4 常量",[99,50793,50794],{},[155,50795],{"alt":20,"src":50796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[99,50798,50799],{},"const — 类似于 let ，但是变量的值无法被修改",[182,50801,50803],{"id":50802},"_25-数据类型","2.5 数据类型",[99,50805,50806],{},[155,50807],{"alt":20,"src":50808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[194,50810,50811,50814],{},[106,50812,50813],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[106,50815,50816],{},"算数运算符：",[99,50818,50819],{},[155,50820],{"alt":20,"src":50821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[194,50823,50824],{"start":51},[106,50825,50826],{},"数字类型（Number）",[99,50828,50829],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[99,50831,50832],{},[155,50833],{"alt":20,"src":50834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[194,50836,50837],{"start":59},[106,50838,50839],{},"字符串类型（string）",[99,50841,50842],{},[155,50843],{"alt":20,"src":50844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[99,50846,50847],{},"反引号也是可以使用的",[99,50849,50850],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[99,50852,50853],{},"例如：document.write(\"我今年\"+age+\"岁\")",[194,50855,50856],{"start":67},[106,50857,50858],{},"模板字符串",[99,50860,50861],{},[155,50862],{"alt":20,"src":50863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[99,50865,50866],{},"类似于python的字符串格式化",[194,50868,50869],{"start":75},[106,50870,50871],{},"布尔类型",[99,50873,50874],{},"true 和 false",[194,50876,50877],{"start":83},[106,50878,50879],{},"未定义类型（underfined）",[99,50881,50882],{},"表示没有赋值",[99,50884,50885],{},"未定义类型是比较特殊的类型，只有一个值undefined",[99,50887,50888],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[194,50890,50891],{"start":91},[106,50892,50893],{},"null（空类型）",[99,50895,50896],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[99,50898,50899],{},"赋值了，但是内容为空",[15,50901,50903],{"className":50704,"code":50902,"language":50706,"meta":20,"style":20},"typeof null\n输出的是'object'，是一个对象数据类型\n",[22,50904,50905,50910],{"__ignoreMap":20},[25,50906,50907],{"class":27,"line":28},[25,50908,50909],{"class":244},"typeof null\n",[25,50911,50912],{"class":27,"line":39},[25,50913,50914],{"class":244},"输出的是'object'，是一个对象数据类型\n",[194,50916,50917],{"start":1429},[106,50918,50919],{},"控制台检测数据类型",[99,50921,50922],{},[155,50923],{"alt":20,"src":50924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[194,50926,50927],{"start":1441},[106,50928,50929],{},"类型转换",[99,50931,50932],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[99,50934,50935],{},"转换方式：隐式转换和显示转换",[99,50937,50938],{},"①隐式转换",[103,50940,50941,50944,50947,50950],{},[106,50942,50943],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[106,50945,50946],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[106,50948,50949],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[106,50951,50952],{},"任何数据和字符串相加结果都是字符串",[99,50954,50955],{},"②显示转换",[99,50957,50958],{},[155,50959],{"alt":20,"src":50960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[99,50962,50963],{},[155,50964],{"alt":20,"src":50965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[99,50967,50968],{},"在输入的时候要用好隐式转换，简单写起来",[99,50970,50971],{},"let num = +prompt(’请输入数字：‘)",[99,50973,50974],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[99,50976,50977],{},"console.log(parseInt('12.333px'))",[99,50979,50980],{},"输出为：12",[99,50982,50983],{},"console.log(parseInt('a'a'a12.333px'))",[99,50985,50986],{},"输出：NaN",[182,50988,50990],{"id":50989},"_26-运算符","2.6 运算符",[210,50992,50994],{"id":50993},"_261-赋值运算符","2.6.1 赋值运算符",[99,50996,50997],{},[155,50998],{"alt":20,"src":50999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[210,51001,51003],{"id":51002},"_262-一元运算符","2.6.2 一元运算符",[99,51005,51006],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[99,51008,51009],{},[155,51010],{"alt":20,"src":51011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[99,51013,51014],{},[155,51015],{"alt":20,"src":51016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[99,51018,51019],{},"两者的区别：",[99,51021,51022],{},[155,51023],{"alt":20,"src":51024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[99,51026,51027],{},"前置先自加；后置后加，代码执行完之后再加",[210,51029,51031],{"id":51030},"_263-比较运算符","2.6.3 比较运算符",[99,51033,51034],{},[155,51035],{"alt":20,"src":51036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[99,51038,51039],{},"比较运算符也有隐式转换",[99,51041,51042],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[99,51044,51045],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[99,51047,51048],{},"要使用三等，开发的时候",[99,51050,51051],{},"NaN不等于任何人，包括它自己",[99,51053,51054],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[99,51056,51057],{},"7\u002F10=0.7",[99,51059,51060],{},"最后：0.5+0.2=0.7",[99,51062,51063],{},"字符串比较，比较的是字符对应的ASCII码",[210,51065,51067],{"id":51066},"_264-逻辑运算符","2.6.4 逻辑运算符",[99,51069,51070],{},[155,51071],{"alt":20,"src":51072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[99,51074,51075],{},[155,51076],{"alt":20,"src":51077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[99,51079,51080],{},[155,51081],{"alt":20,"src":51082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[99,51084,51085],{},"上述题目选D",[99,51087,51088],{},"与真2假1；或真1假2",[210,51090,51092],{"id":51091},"_265-运算符优先级","2.6.5 运算符优先级",[99,51094,51095],{},[155,51096],{"alt":20,"src":51097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[99,51099,51100],{},"先算逻辑与，后算逻辑或",[182,51102,51104],{"id":51103},"_27-语句","2.7 语句",[99,51106,51107],{},"表达式：是可以被求值的代码，会有结果给我们",[99,51109,51110],{},"语句：语句是可以被执行的代码，例如prompt()",[99,51112,51113],{},[155,51114],{"alt":20,"src":51115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[99,51117,51118],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[99,51120,51121],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[210,51123,51125],{"id":51124},"_271-分支语句","2.7.1 分支语句",[22108,51127,51129],{"id":51128},"_2711-if分支语句","2.7.1.1 if分支语句",[99,51131,51132],{},"if语句单行简单的话，可以不写{}，写在一行就行",[194,51134,51135],{},[106,51136,51137],{},"单分支语句",[99,51139,51140],{},[155,51141],{"alt":20,"src":51142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[99,51144,51145],{},"除了0，所有数字都为真",[15,51147,51149],{"className":50704,"code":51148,"language":50706,"meta":20,"style":20},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[22,51150,51151,51156,51161,51166,51170],{"__ignoreMap":20},[25,51152,51153],{"class":27,"line":28},[25,51154,51155],{"class":244},"if（0) {\n",[25,51157,51158],{"class":27,"line":39},[25,51159,51160],{"class":244},"    let a=1\n",[25,51162,51163],{"class":27,"line":51},[25,51164,51165],{"class":244},"    alert(typeof a)\n",[25,51167,51168],{"class":27,"line":59},[25,51169,1676],{"class":244},[25,51171,51172],{"class":27,"line":67},[25,51173,51174],{"class":244},"不输出，括号为假\n",[194,51176,51177],{"start":39},[106,51178,51179],{},"双分支语句",[99,51181,51182],{},[155,51183],{"alt":20,"src":51184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[194,51186,51187],{"start":51},[106,51188,51189],{},"多分支语句",[99,51191,51192],{},[155,51193],{"alt":20,"src":51194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22108,51196,51198],{"id":51197},"_2712-三元运算符","2.7.1.2 三元运算符",[99,51200,51201],{},[155,51202],{"alt":20,"src":51203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22108,51205,51207],{"id":51206},"_2713-switch语句","2.7.1.3 switch语句",[99,51209,51210],{},[155,51211],{"alt":20,"src":51212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[99,51214,51215],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[210,51217,51219],{"id":51218},"_272-循环语句","2.7.2 循环语句",[22108,51221,51223],{"id":51222},"_2721-断点演示","2.7.2.1 断点演示",[99,51225,51226],{},[155,51227],{"alt":20,"src":51228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22108,51230,51232],{"id":51231},"_2722-while循环","2.7.2.2 while循环",[99,51234,51235],{},[155,51236],{"alt":20,"src":51237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[99,51239,51240],{},[155,51241],{"alt":20,"src":51242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22108,51244,51246],{"id":51245},"_2723-for循环","2.7.2.3 for循环",[99,51248,51249],{},[155,51250],{"alt":20,"src":51251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[99,51253,51254],{},"for(;;) {",[99,51256,1189],{},[99,51258,51259],{},"表示无限循环",[99,51261,51262],{},[155,51263],{"alt":20,"src":51264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22108,51266,51268],{"id":51267},"_2724-循环的退出","2.7.2.4 循环的退出",[99,51270,51271],{},[155,51272],{"alt":20,"src":51273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[182,51275,51277],{"id":51276},"_28-数组","2.8 数组",[210,51279,51281],{"id":51280},"_281-基础认识","2.8.1 基础认识",[99,51283,51284],{},[155,51285],{"alt":20,"src":51286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[99,51288,51289],{},[155,51290],{"alt":20,"src":51291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[99,51293,51294],{},[155,51295],{"alt":20,"src":51296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[99,51298,51299],{},[155,51300],{"alt":20,"src":51301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[210,51303,51305],{"id":51304},"_282-操作数组","2.8.2 操作数组",[99,51307,51308],{},[155,51309],{"alt":20,"src":51310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[194,51312,51313],{},[106,51314,51315],{},"添加元素",[99,51317,51318],{},[155,51319],{"alt":20,"src":51320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[99,51322,51323],{},"console.log(arr.push('green'))",[99,51325,51326],{},"输出结果：为新数组的长度",[99,51328,51329],{},[155,51330],{"alt":20,"src":51331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[99,51333,51334],{},"push用的非常多，一定要记住",[194,51336,51337],{},[106,51338,51339],{},"删除元素",[99,51341,51342],{},[155,51343],{"alt":20,"src":51344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[99,51346,51347],{},[155,51348],{"alt":20,"src":51349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[99,51351,51352],{},[155,51353],{"alt":20,"src":51354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[210,51356,51358],{"id":51357},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[15,51360,51362],{"className":50704,"code":51361,"language":50706,"meta":20,"style":20},"\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",[22,51363,51364,51379,51395,51399,51408,51426,51450,51472,51486,51494,51501,51513,51524,51528,51532,51539,51551,51566,51579,51598,51615,51630,51642,51654,51666,51670,51674,51685,51695,51707,51719,51731,51742,51746,51750,51762,51766,51780,51784,51788,51799,51813,51825,51839,51843,51852,51861,51865,51874,51878,51887,51892,51897,51910,51938,51943,51948,51973,51978,51982,51987,51992,52007,52011,52016,52046,52058,52074,52090,52104,52109,52116,52120,52125,52138,52146,52154,52158],{"__ignoreMap":20},[25,51365,51366,51369,51373,51376],{"class":27,"line":28},[25,51367,51368],{"class":244},"\u003C!",[25,51370,51372],{"class":51371},"s9eBZ","DOCTYPE",[25,51374,51375],{"class":31}," html",[25,51377,51378],{"class":244},">\n",[25,51380,51381,51383,51385,51388,51390,51393],{"class":27,"line":39},[25,51382,1153],{"class":244},[25,51384,50706],{"class":51371},[25,51386,51387],{"class":31}," lang",[25,51389,290],{"class":244},[25,51391,51392],{"class":45},"\"en\"",[25,51394,51378],{"class":244},[25,51396,51397],{"class":27,"line":51},[25,51398,2510],{"emptyLinePlaceholder":167},[25,51400,51401,51403,51406],{"class":27,"line":59},[25,51402,1153],{"class":244},[25,51404,51405],{"class":51371},"head",[25,51407,51378],{"class":244},[25,51409,51410,51413,51416,51419,51421,51424],{"class":27,"line":67},[25,51411,51412],{"class":244},"    \u003C",[25,51414,51415],{"class":51371},"meta",[25,51417,51418],{"class":31}," charset",[25,51420,290],{"class":244},[25,51422,51423],{"class":45},"\"UTF-8\"",[25,51425,51378],{"class":244},[25,51427,51428,51430,51432,51435,51437,51440,51443,51445,51448],{"class":27,"line":75},[25,51429,51412],{"class":244},[25,51431,51415],{"class":51371},[25,51433,51434],{"class":31}," http-equiv",[25,51436,290],{"class":244},[25,51438,51439],{"class":45},"\"X-UA-Compatible\"",[25,51441,51442],{"class":31}," content",[25,51444,290],{"class":244},[25,51446,51447],{"class":45},"\"IE=edge\"",[25,51449,51378],{"class":244},[25,51451,51452,51454,51456,51458,51460,51463,51465,51467,51470],{"class":27,"line":83},[25,51453,51412],{"class":244},[25,51455,51415],{"class":51371},[25,51457,15030],{"class":31},[25,51459,290],{"class":244},[25,51461,51462],{"class":45},"\"viewport\"",[25,51464,51442],{"class":31},[25,51466,290],{"class":244},[25,51468,51469],{"class":45},"\"width=device-width, initial-scale=1.0\"",[25,51471,51378],{"class":244},[25,51473,51474,51476,51479,51482,51484],{"class":27,"line":91},[25,51475,51412],{"class":244},[25,51477,51478],{"class":51371},"title",[25,51480,51481],{"class":244},">Document\u003C\u002F",[25,51483,51478],{"class":51371},[25,51485,51378],{"class":244},[25,51487,51488,51490,51492],{"class":27,"line":1429},[25,51489,51412],{"class":244},[25,51491,159],{"class":51371},[25,51493,51378],{"class":244},[25,51495,51496,51499],{"class":27,"line":1441},[25,51497,51498],{"class":51371},"        *",[25,51500,15682],{"class":244},[25,51502,51503,51506,51509,51511],{"class":27,"line":1723},[25,51504,51505],{"class":35},"            margin",[25,51507,51508],{"class":244},": ",[25,51510,434],{"class":35},[25,51512,1403],{"class":244},[25,51514,51515,51518,51520,51522],{"class":27,"line":1728},[25,51516,51517],{"class":35},"            padding",[25,51519,51508],{"class":244},[25,51521,434],{"class":35},[25,51523,1403],{"class":244},[25,51525,51526],{"class":27,"line":1734},[25,51527,2639],{"class":244},[25,51529,51530],{"class":27,"line":1739},[25,51531,2510],{"emptyLinePlaceholder":167},[25,51533,51534,51537],{"class":27,"line":1753},[25,51535,51536],{"class":31},"        .box",[25,51538,15682],{"class":244},[25,51540,51541,51544,51546,51549],{"class":27,"line":1758},[25,51542,51543],{"class":35},"            display",[25,51545,51508],{"class":244},[25,51547,51548],{"class":35},"flex",[25,51550,1403],{"class":244},[25,51552,51553,51556,51558,51561,51564],{"class":27,"line":1764},[25,51554,51555],{"class":35},"            width",[25,51557,51508],{"class":244},[25,51559,51560],{"class":35},"700",[25,51562,51563],{"class":240},"px",[25,51565,1403],{"class":244},[25,51567,51568,51571,51573,51575,51577],{"class":27,"line":1785},[25,51569,51570],{"class":35},"            height",[25,51572,51508],{"class":244},[25,51574,4083],{"class":35},[25,51576,51563],{"class":240},[25,51578,1403],{"class":244},[25,51580,51581,51584,51586,51588,51590,51593,51596],{"class":27,"line":1790},[25,51582,51583],{"class":35},"            border-left",[25,51585,51508],{"class":244},[25,51587,460],{"class":35},[25,51589,51563],{"class":240},[25,51591,51592],{"class":35}," solid",[25,51594,51595],{"class":35}," pink",[25,51597,1403],{"class":244},[25,51599,51600,51603,51605,51607,51609,51611,51613],{"class":27,"line":1804},[25,51601,51602],{"class":35},"            border-bottom",[25,51604,51508],{"class":244},[25,51606,460],{"class":35},[25,51608,51563],{"class":240},[25,51610,51592],{"class":35},[25,51612,51595],{"class":35},[25,51614,1403],{"class":244},[25,51616,51617,51619,51621,51623,51625,51628],{"class":27,"line":1809},[25,51618,51505],{"class":35},[25,51620,51508],{"class":244},[25,51622,899],{"class":35},[25,51624,51563],{"class":240},[25,51626,51627],{"class":35}," auto",[25,51629,1403],{"class":244},[25,51631,51632,51635,51637,51640],{"class":27,"line":1838},[25,51633,51634],{"class":35},"            justify-content",[25,51636,51508],{"class":244},[25,51638,51639],{"class":35},"space-around",[25,51641,1403],{"class":244},[25,51643,51644,51647,51649,51652],{"class":27,"line":1843},[25,51645,51646],{"class":35},"            align-items",[25,51648,51508],{"class":244},[25,51650,51651],{"class":35},"flex-end",[25,51653,1403],{"class":244},[25,51655,51656,51659,51661,51664],{"class":27,"line":1860},[25,51657,51658],{"class":35},"            text-align",[25,51660,51508],{"class":244},[25,51662,51663],{"class":35},"center",[25,51665,1403],{"class":244},[25,51667,51668],{"class":27,"line":1865},[25,51669,2639],{"class":244},[25,51671,51672],{"class":27,"line":1870},[25,51673,2510],{"emptyLinePlaceholder":167},[25,51675,51676,51678,51680,51683],{"class":27,"line":1875},[25,51677,51536],{"class":31},[25,51679,1203],{"class":240},[25,51681,51682],{"class":51371},"div",[25,51684,15682],{"class":244},[25,51686,51687,51689,51691,51693],{"class":27,"line":1889},[25,51688,51543],{"class":35},[25,51690,51508],{"class":244},[25,51692,51548],{"class":35},[25,51694,1403],{"class":244},[25,51696,51697,51699,51701,51703,51705],{"class":27,"line":1894},[25,51698,51555],{"class":35},[25,51700,51508],{"class":244},[25,51702,899],{"class":35},[25,51704,51563],{"class":240},[25,51706,1403],{"class":244},[25,51708,51709,51712,51714,51717],{"class":27,"line":2687},[25,51710,51711],{"class":35},"            background-color",[25,51713,51508],{"class":244},[25,51715,51716],{"class":35},"pink",[25,51718,1403],{"class":244},[25,51720,51721,51724,51726,51729],{"class":27,"line":2701},[25,51722,51723],{"class":35},"            flex-direction",[25,51725,51508],{"class":244},[25,51727,51728],{"class":35},"column",[25,51730,1403],{"class":244},[25,51732,51733,51735,51737,51740],{"class":27,"line":2709},[25,51734,51634],{"class":35},[25,51736,51508],{"class":244},[25,51738,51739],{"class":35},"space-between",[25,51741,1403],{"class":244},[25,51743,51744],{"class":27,"line":2714},[25,51745,2639],{"class":244},[25,51747,51748],{"class":27,"line":2720},[25,51749,2510],{"emptyLinePlaceholder":167},[25,51751,51752,51754,51757,51760],{"class":27,"line":2726},[25,51753,51536],{"class":31},[25,51755,51756],{"class":51371}," div",[25,51758,51759],{"class":51371}," span",[25,51761,15682],{"class":244},[25,51763,51764],{"class":27,"line":2731},[25,51765,2510],{"emptyLinePlaceholder":167},[25,51767,51768,51771,51773,51776,51778],{"class":27,"line":8058},[25,51769,51770],{"class":35},"            margin-top",[25,51772,51508],{"class":244},[25,51774,51775],{"class":35},"-20",[25,51777,51563],{"class":240},[25,51779,1403],{"class":244},[25,51781,51782],{"class":27,"line":8082},[25,51783,2639],{"class":244},[25,51785,51786],{"class":27,"line":8087},[25,51787,2510],{"emptyLinePlaceholder":167},[25,51789,51790,51792,51794,51797],{"class":27,"line":8093},[25,51791,51536],{"class":31},[25,51793,51756],{"class":51371},[25,51795,51796],{"class":51371}," h4",[25,51798,15682],{"class":244},[25,51800,51801,51804,51806,51809,51811],{"class":27,"line":8120},[25,51802,51803],{"class":35},"            margin-bottom",[25,51805,51508],{"class":244},[25,51807,51808],{"class":35},"-35",[25,51810,51563],{"class":240},[25,51812,1403],{"class":244},[25,51814,51815,51817,51819,51821,51823],{"class":27,"line":8125},[25,51816,51555],{"class":35},[25,51818,51508],{"class":244},[25,51820,599],{"class":35},[25,51822,51563],{"class":240},[25,51824,1403],{"class":244},[25,51826,51827,51830,51832,51835,51837],{"class":27,"line":8131},[25,51828,51829],{"class":35},"            margin-left",[25,51831,51508],{"class":244},[25,51833,51834],{"class":35},"-10",[25,51836,51563],{"class":240},[25,51838,1403],{"class":244},[25,51840,51841],{"class":27,"line":8143},[25,51842,2639],{"class":244},[25,51844,51845,51848,51850],{"class":27,"line":8155},[25,51846,51847],{"class":244},"    \u003C\u002F",[25,51849,159],{"class":51371},[25,51851,51378],{"class":244},[25,51853,51854,51857,51859],{"class":27,"line":8167},[25,51855,51856],{"class":244},"\u003C\u002F",[25,51858,51405],{"class":51371},[25,51860,51378],{"class":244},[25,51862,51863],{"class":27,"line":9826},[25,51864,2510],{"emptyLinePlaceholder":167},[25,51866,51867,51869,51872],{"class":27,"line":9851},[25,51868,1153],{"class":244},[25,51870,51871],{"class":51371},"body",[25,51873,51378],{"class":244},[25,51875,51876],{"class":27,"line":9874},[25,51877,2510],{"emptyLinePlaceholder":167},[25,51879,51880,51882,51885],{"class":27,"line":9898},[25,51881,51412],{"class":244},[25,51883,51884],{"class":51371},"script",[25,51886,51378],{"class":244},[25,51888,51889],{"class":27,"line":9903},[25,51890,51891],{"class":302},"        \u002F\u002F 1. 四次弹框效果\n",[25,51893,51894],{"class":27,"line":9908},[25,51895,51896],{"class":302},"        \u002F\u002F 声明一个新的数组\n",[25,51898,51899,51902,51905,51907],{"class":27,"line":9913},[25,51900,51901],{"class":240},"        let",[25,51903,51904],{"class":244}," arr ",[25,51906,290],{"class":240},[25,51908,51909],{"class":244}," []\n",[25,51911,51912,51914,51916,51919,51921,51923,51925,51927,51929,51932,51934,51936],{"class":27,"line":9922},[25,51913,3513],{"class":240},[25,51915,1769],{"class":244},[25,51917,51918],{"class":240},"let",[25,51920,9548],{"class":244},[25,51922,290],{"class":240},[25,51924,25225],{"class":35},[25,51926,9555],{"class":244},[25,51928,1699],{"class":240},[25,51930,51931],{"class":35}," 4",[25,51933,3324],{"class":244},[25,51935,2402],{"class":240},[25,51937,12552],{"class":244},[25,51939,51940],{"class":27,"line":9927},[25,51941,51942],{"class":302},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[25,51944,51945],{"class":27,"line":9933},[25,51946,51947],{"class":302},"            \u002F\u002F arr.push(num)\n",[25,51949,51950,51953,51956,51958,51961,51963,51966,51968,51971],{"class":27,"line":9954},[25,51951,51952],{"class":244},"            arr.",[25,51954,51955],{"class":31},"push",[25,51957,245],{"class":244},[25,51959,51960],{"class":31},"prompt",[25,51962,245],{"class":244},[25,51964,51965],{"class":45},"`请输入第${",[25,51967,684],{"class":244},[25,51969,51970],{"class":45},"}季度的数据:`",[25,51972,30568],{"class":244},[25,51974,51975],{"class":27,"line":9960},[25,51976,51977],{"class":302},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[25,51979,51980],{"class":27,"line":9974},[25,51981,2639],{"class":244},[25,51983,51984],{"class":27,"line":9980},[25,51985,51986],{"class":302},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[25,51988,51989],{"class":27,"line":10007},[25,51990,51991],{"class":302},"        \u002F\u002F 盒子开头\n",[25,51993,51994,51997,52000,52002,52005],{"class":27,"line":10016},[25,51995,51996],{"class":244},"        document.",[25,51998,51999],{"class":31},"write",[25,52001,245],{"class":244},[25,52003,52004],{"class":45},"` \u003Cdiv class=\"box\">`",[25,52006,251],{"class":244},[25,52008,52009],{"class":27,"line":10022},[25,52010,2510],{"emptyLinePlaceholder":167},[25,52012,52013],{"class":27,"line":10030},[25,52014,52015],{"class":302},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[25,52017,52018,52020,52022,52024,52026,52028,52030,52032,52034,52037,52040,52042,52044],{"class":27,"line":10035},[25,52019,3513],{"class":240},[25,52021,1769],{"class":244},[25,52023,51918],{"class":240},[25,52025,9548],{"class":244},[25,52027,290],{"class":240},[25,52029,4203],{"class":35},[25,52031,9555],{"class":244},[25,52033,1153],{"class":240},[25,52035,52036],{"class":244}," arr.",[25,52038,52039],{"class":35},"length",[25,52041,3324],{"class":244},[25,52043,2402],{"class":240},[25,52045,12552],{"class":244},[25,52047,52048,52051,52053,52055],{"class":27,"line":16714},[25,52049,52050],{"class":244},"            document.",[25,52052,51999],{"class":31},[25,52054,245],{"class":244},[25,52056,52057],{"class":45},"`\n",[25,52059,52060,52063,52065,52067,52069,52071],{"class":27,"line":16720},[25,52061,52062],{"class":45},"              \u003Cdiv style=\"height: ${",[25,52064,3990],{"class":244},[25,52066,1133],{"class":45},[25,52068,684],{"class":244},[25,52070,1183],{"class":45},[25,52072,52073],{"class":45},"}px;\">\n",[25,52075,52076,52079,52081,52083,52085,52087],{"class":27,"line":16743},[25,52077,52078],{"class":45},"                \u003Cspan>${",[25,52080,3990],{"class":244},[25,52082,1133],{"class":45},[25,52084,684],{"class":244},[25,52086,1183],{"class":45},[25,52088,52089],{"class":45},"}\u003C\u002Fspan>\n",[25,52091,52092,52095,52097,52099,52101],{"class":27,"line":16749},[25,52093,52094],{"class":45},"                \u003Ch4>第${",[25,52096,684],{"class":244},[25,52098,45637],{"class":240},[25,52100,25225],{"class":35},[25,52102,52103],{"class":45},"}季度\u003C\u002Fh4>\n",[25,52105,52106],{"class":27,"line":16772},[25,52107,52108],{"class":45},"              \u003C\u002Fdiv>          \n",[25,52110,52111,52114],{"class":27,"line":16786},[25,52112,52113],{"class":45},"            `",[25,52115,251],{"class":244},[25,52117,52118],{"class":27,"line":16806},[25,52119,2639],{"class":244},[25,52121,52122],{"class":27,"line":16812},[25,52123,52124],{"class":302},"        \u002F\u002F 盒子结尾\n",[25,52126,52127,52129,52131,52133,52136],{"class":27,"line":16823},[25,52128,51996],{"class":244},[25,52130,51999],{"class":31},[25,52132,245],{"class":244},[25,52134,52135],{"class":45},"` \u003C\u002Fdiv>`",[25,52137,251],{"class":244},[25,52139,52140,52142,52144],{"class":27,"line":16846},[25,52141,51847],{"class":244},[25,52143,51884],{"class":51371},[25,52145,51378],{"class":244},[25,52147,52148,52150,52152],{"class":27,"line":16868},[25,52149,51856],{"class":244},[25,52151,51871],{"class":51371},[25,52153,51378],{"class":244},[25,52155,52156],{"class":27,"line":16873},[25,52157,2510],{"emptyLinePlaceholder":167},[25,52159,52160,52162,52164],{"class":27,"line":16879},[25,52161,51856],{"class":244},[25,52163,50706],{"class":51371},[25,52165,51378],{"class":244},[210,52167,52169],{"id":52168},"_284-冒泡排序","2.8.4 冒泡排序",[15,52171,52173],{"className":50704,"code":52172,"language":50706,"meta":20,"style":20},"\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",[22,52174,52175,52185,52199,52203,52211,52226,52246,52258,52266,52270,52278,52286,52318,52351,52388,52393,52412,52417,52430,52445,52461,52465,52470,52474,52484,52493,52501,52505],{"__ignoreMap":20},[25,52176,52177,52179,52181,52183],{"class":27,"line":28},[25,52178,51368],{"class":244},[25,52180,51372],{"class":51371},[25,52182,51375],{"class":31},[25,52184,51378],{"class":244},[25,52186,52187,52189,52191,52193,52195,52197],{"class":27,"line":39},[25,52188,1153],{"class":244},[25,52190,50706],{"class":51371},[25,52192,51387],{"class":31},[25,52194,290],{"class":244},[25,52196,51392],{"class":45},[25,52198,51378],{"class":244},[25,52200,52201],{"class":27,"line":51},[25,52202,2510],{"emptyLinePlaceholder":167},[25,52204,52205,52207,52209],{"class":27,"line":59},[25,52206,1153],{"class":244},[25,52208,51405],{"class":51371},[25,52210,51378],{"class":244},[25,52212,52213,52216,52218,52220,52222,52224],{"class":27,"line":67},[25,52214,52215],{"class":244},"  \u003C",[25,52217,51415],{"class":51371},[25,52219,51418],{"class":31},[25,52221,290],{"class":244},[25,52223,51423],{"class":45},[25,52225,51378],{"class":244},[25,52227,52228,52230,52232,52234,52236,52238,52240,52242,52244],{"class":27,"line":75},[25,52229,52215],{"class":244},[25,52231,51415],{"class":51371},[25,52233,15030],{"class":31},[25,52235,290],{"class":244},[25,52237,51462],{"class":45},[25,52239,51442],{"class":31},[25,52241,290],{"class":244},[25,52243,51469],{"class":45},[25,52245,51378],{"class":244},[25,52247,52248,52250,52252,52254,52256],{"class":27,"line":83},[25,52249,52215],{"class":244},[25,52251,51478],{"class":51371},[25,52253,51481],{"class":244},[25,52255,51478],{"class":51371},[25,52257,51378],{"class":244},[25,52259,52260,52262,52264],{"class":27,"line":91},[25,52261,51856],{"class":244},[25,52263,51405],{"class":51371},[25,52265,51378],{"class":244},[25,52267,52268],{"class":27,"line":1429},[25,52269,2510],{"emptyLinePlaceholder":167},[25,52271,52272,52274,52276],{"class":27,"line":1441},[25,52273,1153],{"class":244},[25,52275,51871],{"class":51371},[25,52277,51378],{"class":244},[25,52279,52280,52282,52284],{"class":27,"line":1723},[25,52281,52215],{"class":244},[25,52283,51884],{"class":51371},[25,52285,51378],{"class":244},[25,52287,52288,52291,52293,52295,52298,52300,52302,52304,52306,52308,52310,52312,52314,52316],{"class":27,"line":1728},[25,52289,52290],{"class":240},"    let",[25,52292,51904],{"class":244},[25,52294,290],{"class":240},[25,52296,52297],{"class":244}," [",[25,52299,562],{"class":35},[25,52301,12545],{"class":244},[25,52303,536],{"class":35},[25,52305,12545],{"class":244},[25,52307,315],{"class":35},[25,52309,12545],{"class":244},[25,52311,321],{"class":35},[25,52313,12545],{"class":244},[25,52315,460],{"class":35},[25,52317,33317],{"class":244},[25,52319,52320,52322,52324,52326,52328,52330,52332,52334,52336,52338,52340,52343,52345,52347,52349],{"class":27,"line":1734},[25,52321,3311],{"class":240},[25,52323,1769],{"class":244},[25,52325,51918],{"class":240},[25,52327,9548],{"class":244},[25,52329,290],{"class":240},[25,52331,4203],{"class":35},[25,52333,9555],{"class":244},[25,52335,1153],{"class":240},[25,52337,52036],{"class":244},[25,52339,52039],{"class":35},[25,52341,52342],{"class":240}," -",[25,52344,25225],{"class":35},[25,52346,3324],{"class":244},[25,52348,2402],{"class":240},[25,52350,12552],{"class":244},[25,52352,52353,52356,52358,52360,52362,52364,52366,52368,52370,52372,52374,52376,52378,52380,52382,52384,52386],{"class":27,"line":1739},[25,52354,52355],{"class":240},"      for",[25,52357,1769],{"class":244},[25,52359,51918],{"class":240},[25,52361,9610],{"class":244},[25,52363,290],{"class":240},[25,52365,4203],{"class":35},[25,52367,9617],{"class":244},[25,52369,1153],{"class":240},[25,52371,52036],{"class":244},[25,52373,52039],{"class":35},[25,52375,52342],{"class":240},[25,52377,9548],{"class":244},[25,52379,775],{"class":240},[25,52381,25225],{"class":35},[25,52383,9624],{"class":244},[25,52385,2402],{"class":240},[25,52387,12552],{"class":244},[25,52389,52390],{"class":27,"line":1753},[25,52391,52392],{"class":302},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[25,52394,52395,52397,52400,52402,52405,52407,52409],{"class":27,"line":1758},[25,52396,2607],{"class":240},[25,52398,52399],{"class":244}," (arr[j] ",[25,52401,1203],{"class":240},[25,52403,52404],{"class":244}," arr[j ",[25,52406,724],{"class":240},[25,52408,25225],{"class":35},[25,52410,52411],{"class":244},"]) {\n",[25,52413,52414],{"class":27,"line":1764},[25,52415,52416],{"class":302},"          \u002F\u002F 交换两个变量\n",[25,52418,52419,52422,52425,52427],{"class":27,"line":1785},[25,52420,52421],{"class":240},"          let",[25,52423,52424],{"class":244}," tmp ",[25,52426,290],{"class":240},[25,52428,52429],{"class":244}," arr[j]\n",[25,52431,52432,52435,52437,52439,52441,52443],{"class":27,"line":1790},[25,52433,52434],{"class":244},"          arr[j] ",[25,52436,290],{"class":240},[25,52438,52404],{"class":244},[25,52440,724],{"class":240},[25,52442,25225],{"class":35},[25,52444,33317],{"class":244},[25,52446,52447,52450,52452,52454,52456,52458],{"class":27,"line":1804},[25,52448,52449],{"class":244},"          arr[j ",[25,52451,724],{"class":240},[25,52453,25225],{"class":35},[25,52455,4553],{"class":244},[25,52457,290],{"class":240},[25,52459,52460],{"class":244}," tmp\n",[25,52462,52463],{"class":27,"line":1809},[25,52464,2639],{"class":244},[25,52466,52467],{"class":27,"line":1838},[25,52468,52469],{"class":244},"      }\n",[25,52471,52472],{"class":27,"line":1843},[25,52473,2297],{"class":244},[25,52475,52476,52479,52481],{"class":27,"line":1860},[25,52477,52478],{"class":244},"    document.",[25,52480,51999],{"class":31},[25,52482,52483],{"class":244},"(arr)\n",[25,52485,52486,52489,52491],{"class":27,"line":1865},[25,52487,52488],{"class":244},"  \u003C\u002F",[25,52490,51884],{"class":51371},[25,52492,51378],{"class":244},[25,52494,52495,52497,52499],{"class":27,"line":1870},[25,52496,51856],{"class":244},[25,52498,51871],{"class":51371},[25,52500,51378],{"class":244},[25,52502,52503],{"class":27,"line":1875},[25,52504,2510],{"emptyLinePlaceholder":167},[25,52506,52507,52509,52511],{"class":27,"line":1889},[25,52508,51856],{"class":244},[25,52510,50706],{"class":51371},[25,52512,51378],{"class":244},[99,52514,52515],{},[155,52516],{"alt":20,"src":52517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[99,52519,52520],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[99,52522,52523],{},"let arr = [4, 2, 5, 1, 3]",[99,52525,52526],{},"\u002F\u002F 1.升序排列写法",[99,52528,52529],{},"arr.sort(function (a, b) {",[99,52531,52532],{},"return a - b",[99,52534,52535],{},"})",[99,52537,52538],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[99,52540,52541],{},"\u002F\u002F 降序排列写法",[99,52543,52529],{},[99,52545,52546],{},"return b - a",[99,52548,52535],{},[99,52550,52551],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[182,52553,52555],{"id":52554},"_29-函数","2.9 函数",[99,52557,52558],{},[155,52559],{"alt":20,"src":52560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[99,52562,52563],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[99,52565,52566],{},"函数的声明用function",[99,52568,52569],{},"函数里边可以嵌套函数",[210,52571,52573],{"id":52572},"_291-函数传参","2.9.1 函数传参",[99,52575,52576],{},[155,52577],{"alt":20,"src":52578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[99,52580,52581],{},[155,52582],{"alt":20,"src":52583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[103,52585,52586,52589,52592,52595,52598,52601],{},[106,52587,52588],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[106,52590,52591],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[106,52593,52594],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[106,52596,52597],{},"开发中尽量保持形参和实参个数一致",[106,52599,52600],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[106,52602,52603],{},"形参只在函数中有用，所以不需要进行声明这个变量",[99,52605,52606],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[210,52608,52610],{"id":52609},"_292-函数的返回值","2.9.2 函数的返回值",[99,52612,52613],{},[155,52614],{"alt":20,"src":52615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[99,52617,52618],{},[155,52619],{"alt":20,"src":52620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[103,52622,52623,52626,52629,52632,52635],{},[106,52624,52625],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[106,52627,52628],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[106,52630,52631],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[106,52633,52634],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[106,52636,52637],{},"断点调试:进入函数内部看执行过程F11",[210,52639,52641],{"id":52640},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[15,52643,52645],{"className":50704,"code":52644,"language":50706,"meta":20,"style":20},"    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",[22,52646,52647,52652,52657,52661,52666],{"__ignoreMap":20},[25,52648,52649],{"class":27,"line":28},[25,52650,52651],{"class":244},"    function fn(a, b) {\n",[25,52653,52654],{"class":27,"line":39},[25,52655,52656],{"class":244},"      console.log(a + b);\n",[25,52658,52659],{"class":27,"line":51},[25,52660,2297],{"class":244},[25,52662,52663],{"class":27,"line":59},[25,52664,52665],{"class":244},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[25,52667,52668],{"class":27,"line":67},[25,52669,52670],{"class":244},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[210,52672,52674],{"id":52673},"_294-作用域","2.9.4 作用域",[103,52676,52677,52683,52688,52691,52694],{},[106,52678,52679,52680],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[392,52681,52682],{},"作用域",[106,52684,52685],{},[392,52686,52687],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[106,52689,52690],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[106,52692,52693],{},"函数内部可以直接所使用全局变量",[106,52695,52696],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[99,52698,14743],{},[15,52700,52702],{"className":50704,"code":52701,"language":50706,"meta":20,"style":20},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[22,52703,52704,52709,52714,52718,52723,52728,52733],{"__ignoreMap":20},[25,52705,52706],{"class":27,"line":28},[25,52707,52708],{"class":244},"    function fun() {\n",[25,52710,52711],{"class":27,"line":39},[25,52712,52713],{"class":244},"      num = 10\n",[25,52715,52716],{"class":27,"line":51},[25,52717,2297],{"class":244},[25,52719,52720],{"class":27,"line":59},[25,52721,52722],{"class":244},"    fun()\n",[25,52724,52725],{"class":27,"line":67},[25,52726,52727],{"class":244},"    console.log(num)\n",[25,52729,52730],{"class":27,"line":75},[25,52731,52732],{"class":244},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[25,52734,52735],{"class":27,"line":83},[25,52736,52737],{"class":244},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[103,52739,52740,52743],{},[106,52741,52742],{},"函数内部的形参可以看做是局部变量",[106,52744,52745],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[99,52747,52748,52749],{},"变量访问原则： ",[392,52750,52751],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[210,52753,52755],{"id":52754},"_295-匿名函数","2.9.5 匿名函数",[99,52757,52758],{},"函数可以分为具名函数和匿名函数",[99,52760,52761],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[194,52763,52764],{},[106,52765,52766],{},"函数表达式",[99,52768,52769],{},[155,52770],{"alt":20,"src":52771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[99,52773,52774],{},"里边也可以写参数",[99,52776,52777],{},"具名函数调用位置可以随意调整；",[99,52779,52780],{},"匿名函数函数表达式形式只能在声明后才可以使用",[194,52782,52783],{"start":39},[106,52784,52785],{},"立即执行函数",[99,52787,52788],{},[155,52789],{"alt":20,"src":52790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[99,52792,52793],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[99,52795,52796],{},"写法：两个小括号，然后在第一个小括号中写function",[99,52798,52799],{},"(function () {})();",[99,52801,52802],{},"不要落下最后的;",[99,52804,52805],{},"立即执行函数必须要加;",[99,52807,52808],{},"分号写前写后都没问题",[99,52810,52811],{},"写前：",[99,52813,52814],{},"(function() {})()",[99,52816,52817],{},";(function () {})();",[99,52819,52820],{},"写后:",[99,52822,52823],{},"(function() {})();",[99,52825,52799],{},[99,52827,52828],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[99,52830,52831],{},"还有一种写法：",[99,52833,52834],{},"(function(){}());",[99,52836,52837],{},"或者:",[99,52839,52840],{},"!function(){}();",[99,52842,52843],{},"立即执行函数有时候也是可以加名字的：",[99,52845,52846],{},"(function flexible(window,document) {}(window,document));",[99,52848,52849],{},"省一些调用方法",[210,52851,52853],{"id":52852},"_296-逻辑中断","2.9.6 逻辑中断!!!",[99,52855,52856],{},[155,52857],{"alt":20,"src":52858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[99,52860,52861],{},"这样就不用非得给x,y初始化了",[99,52863,52864],{},[155,52865],{"alt":20,"src":52866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[99,52868,52869],{},"代码执行时先看左边",[99,52871,52872],{},"例如：console.log(false && 3+5)",[99,52874,52875],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[99,52877,52878],{},"&&都是真时，就返回最后一个真值",[99,52880,52881],{},"console.log(11 && 22)",[99,52883,52884],{},"输出22",[99,52886,52887],{},"逻辑与：遇真则真",[99,52889,14743],{},[99,52891,52892],{},"let age=1",[99,52894,52895],{},"console.log(11 || age++)",[99,52897,52898],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[99,52900,52901],{},"console.log(11 || 22)",[99,52903,52904],{},"||逻辑或遇到真就直接输出，输出结果为11",[99,52906,52907],{},"||如果都是假的话，就取最后一个假的值了",[210,52909,52911],{"id":52910},"_297-转换为boolean型","2.9.7 转换为Boolean型",[99,52913,52914],{},"显示转换：",[99,52916,52917,52920,52921],{},[392,52918,52919],{},"记忆","： ",[392,52922,52923],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[99,52925,52926],{},"空字符串为假，其他字符串全为真",[99,52928,52929],{},[155,52930],{"alt":20,"src":52931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[99,52933,52934],{},"隐式转换：",[99,52936,52937],{},[155,52938],{"alt":20,"src":52939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[99,52941,52942],{},"隐式转换:",[99,52944,52945],{},"null+3=3",[99,52947,52948],{},"undefined+3=NaN",[99,52950,52951],{},"null==undefined 输出true,他两个都当0看",[99,52953,52954],{},"null===undefined 输出false",[99,52956,52957],{},"undefined做任何操作都是NaN",[99,52959,52960],{},"NaN不等于NaN，NaN表示计算错误",[182,52962,52964],{"id":52963},"_210-对象","2.10 对象",[210,52966,52968],{"id":52967},"_2101-对象的介绍","2.10.1 对象的介绍",[99,52970,52971],{},"对象也是一种数据类型，里边的数据是无序的",[99,52973,52974],{},"对象由属性和方法组成",[99,52976,52977],{},[155,52978],{"alt":20,"src":52979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[99,52981,52982],{},[155,52983],{"alt":20,"src":52984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[99,52986,52987],{},[155,52988],{"alt":20,"src":52989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[210,52991,52993],{"id":52992},"_2102-对象属性","2.10.2 对象属性",[99,52995,52996],{},[155,52997],{"alt":20,"src":52998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[194,53000,53001],{},[106,53002,53003],{},"查询对象",[99,53005,53006],{},"对象名.属性 goods.uname",[99,53008,53009],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[99,53011,53012],{},"不带字符串的属性名也可以使用 对象名['属性名']",[99,53014,53015],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[99,53017,53018],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[194,53020,53021],{"start":39},[106,53022,53023],{},"重新赋值",[99,53025,53026],{},"对象名.属性=新值",[194,53028,53029],{"start":51},[106,53030,53031],{},"增加新数据",[99,53033,53026],{},[194,53035,53036],{"start":59},[106,53037,53038],{},"删除对象中的属性",[99,53040,53041],{},"delete 对象名.属性",[210,53043,53045],{"id":53044},"_2103-对象方法","2.10.3 对象方法",[99,53047,53048],{},[155,53049],{"alt":20,"src":53050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[99,53052,53053],{},"后边跟的是匿名函数",[99,53055,53056],{},"对象外面的叫函数；对象内部的叫方法",[99,53058,53059],{},[155,53060],{"alt":20,"src":53061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[210,53063,53065],{"id":53064},"_2104-遍历对象","2.10.4 遍历对象",[99,53067,53068],{},"理解为加括号的python字典遍历",[99,53070,53071],{},[155,53072],{"alt":20,"src":53073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[99,53075,53076],{},"k是字符串类型",[99,53078,53079],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[15,53081,53083],{"className":50704,"code":53082,"language":50706,"meta":20,"style":20},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[22,53084,53085,53090,53095,53100,53105],{"__ignoreMap":20},[25,53086,53087],{"class":27,"line":28},[25,53088,53089],{"class":244},"   let arr = [1, 2, 3]\n",[25,53091,53092],{"class":27,"line":39},[25,53093,53094],{"class":244},"    for (let k in arr) {\n",[25,53096,53097],{"class":27,"line":51},[25,53098,53099],{"class":244},"      console.log(k)\n",[25,53101,53102],{"class":27,"line":59},[25,53103,53104],{"class":244},"      console.log(arr[k])\n",[25,53106,53107],{"class":27,"line":67},[25,53108,2297],{"class":244},[99,53110,53111],{},[155,53112],{"alt":20,"src":53113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[99,53115,53116],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[99,53118,53119],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[99,53121,53122],{},"for in 得到的k是属性名",[51884,53124,53125],{},"\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",[99,53127,53128],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[210,53130,53132],{"id":53131},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[99,53134,53135],{},"数组中放对象信息",[15,53137,53141],{"className":53138,"code":53139,"language":53140,"meta":20,"style":20},"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",[22,53142,53143,53151,53156,53161,53166,53171,53176,53181,53186,53191,53196,53201,53206,53210,53214],{"__ignoreMap":20},[25,53144,53145,53147,53149],{"class":27,"line":28},[25,53146,1153],{"class":244},[25,53148,51884],{"class":51371},[25,53150,51378],{"class":244},[25,53152,53153],{"class":27,"line":39},[25,53154,53155],{"class":244},"    let students = [\n",[25,53157,53158],{"class":27,"line":51},[25,53159,53160],{"class":244},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[25,53162,53163],{"class":27,"line":59},[25,53164,53165],{"class":244},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[25,53167,53168],{"class":27,"line":67},[25,53169,53170],{"class":244},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[25,53172,53173],{"class":27,"line":75},[25,53174,53175],{"class":244},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[25,53177,53178],{"class":27,"line":83},[25,53179,53180],{"class":244},"    ]\n",[25,53182,53183],{"class":27,"line":91},[25,53184,53185],{"class":244},"    for (let i = 0; i \u003C students.length; i++) {\n",[25,53187,53188],{"class":27,"line":1429},[25,53189,53190],{"class":244},"      for (let k in students[i]) {\n",[25,53192,53193],{"class":27,"line":1441},[25,53194,53195],{"class":244},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[25,53197,53198],{"class":27,"line":1723},[25,53199,53200],{"class":244},"        \u002F\u002F输出每个人的名字：\n",[25,53202,53203],{"class":27,"line":1728},[25,53204,53205],{"class":244},"        \u002F\u002Fconsole.log(students[i].name)\n",[25,53207,53208],{"class":27,"line":1734},[25,53209,52469],{"class":244},[25,53211,53212],{"class":27,"line":1739},[25,53213,2297],{"class":244},[25,53215,53216,53218,53220],{"class":27,"line":1753},[25,53217,52488],{"class":244},[25,53219,51884],{"class":51371},[25,53221,51378],{"class":244},[210,53223,53225],{"id":53224},"_2106-内置对象","2.10.6 内置对象",[99,53227,53228],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[194,53230,53231],{},[106,53232,53233],{},"数学对象Math",[99,53235,53236],{},[155,53237],{"alt":20,"src":53238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[99,53240,53241],{},[481,53242,53245],{"href":53243,"rel":53244},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23973],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[99,53247,53248],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[99,53250,53251],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[99,53253,53254],{},"数组不可以使用Math中的max,min来求最大值与最小值",[99,53256,53257],{},"null是一个空对象，可以认为：null类似于let obj={}",[99,53259,53260],{},"null属于对象数据类型",[194,53262,53263],{"start":39},[106,53264,53265],{},"生成任意范围随机数",[99,53267,53268],{},[155,53269],{"alt":20,"src":53270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[99,53272,53273],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[99,53275,53276],{},"乘以几就取不到几",[99,53278,53279],{},"取数组中的随机元素：",[99,53281,53282],{},"let arr = ['red', 'green', 'blue']",[99,53284,53285],{},"let random = Math.floor(Math.random() * arr.length)",[99,53287,53288],{},"console.log(arr[random])",[99,53290,53291],{},"这个函数得到的是全闭区间",[99,53293,53294],{},"function getRandom(N, M) {",[99,53296,53297],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[99,53299,1189],{},[99,53301,53302],{},"console.log(getRandom(4, 8))",[210,53304,53306],{"id":53305},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[99,53308,53309],{},[155,53310],{"alt":20,"src":53311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[99,53313,53314],{},[155,53315],{"alt":20,"src":53316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[99,53318,53319],{},[155,53320],{"alt":20,"src":53321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[99,53323,53324],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[99,53326,53327],{},[155,53328],{"alt":20,"src":53329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[99,53331,53332],{},[155,53333],{"alt":20,"src":53334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[99,53336,53337],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[99,53339,53340],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[99,53342,53343],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[159,53345,53346],{},"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":20,"searchDepth":39,"depth":39,"links":53348},[53349,53357,53358,53359,53360,53361,53368,53372,53378,53387],{"id":50539,"depth":39,"text":50540,"children":53350},[53351,53352,53353,53354,53355,53356],{"id":50543,"depth":51,"text":50544},{"id":50560,"depth":51,"text":50561},{"id":50600,"depth":51,"text":50601},{"id":50612,"depth":51,"text":50613},{"id":50621,"depth":51,"text":50622},{"id":50669,"depth":51,"text":50670},{"id":50679,"depth":39,"text":50680},{"id":50767,"depth":39,"text":50768},{"id":50790,"depth":39,"text":50791},{"id":50802,"depth":39,"text":50803},{"id":50989,"depth":39,"text":50990,"children":53362},[53363,53364,53365,53366,53367],{"id":50993,"depth":51,"text":50994},{"id":51002,"depth":51,"text":51003},{"id":51030,"depth":51,"text":51031},{"id":51066,"depth":51,"text":51067},{"id":51091,"depth":51,"text":51092},{"id":51103,"depth":39,"text":51104,"children":53369},[53370,53371],{"id":51124,"depth":51,"text":51125},{"id":51218,"depth":51,"text":51219},{"id":51276,"depth":39,"text":51277,"children":53373},[53374,53375,53376,53377],{"id":51280,"depth":51,"text":51281},{"id":51304,"depth":51,"text":51305},{"id":51357,"depth":51,"text":51358},{"id":52168,"depth":51,"text":52169},{"id":52554,"depth":39,"text":52555,"children":53379},[53380,53381,53382,53383,53384,53385,53386],{"id":52572,"depth":51,"text":52573},{"id":52609,"depth":51,"text":52610},{"id":52640,"depth":51,"text":52641},{"id":52673,"depth":51,"text":52674},{"id":52754,"depth":51,"text":52755},{"id":52852,"depth":51,"text":52853},{"id":52910,"depth":51,"text":52911},{"id":52963,"depth":39,"text":52964,"children":53388},[53389,53390,53391,53392,53393,53394,53395],{"id":52967,"depth":51,"text":52968},{"id":52992,"depth":51,"text":52993},{"id":53044,"depth":51,"text":53045},{"id":53064,"depth":51,"text":53065},{"id":53131,"depth":51,"text":53132},{"id":53224,"depth":51,"text":53225},{"id":53305,"depth":51,"text":53306},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50531,"description":164},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53402,"title":53403,"body":53404,"description":164,"extension":165,"meta":76744,"navigation":167,"path":76745,"seo":76746,"stem":76747,"__hash__":76748},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53405,"toc":76684},[53406,53409,53412,53415,53420,53423,53426,53429,53433,53437,53443,53448,53456,53463,53466,53470,53475,53480,53485,53488,53491,53502,53505,53509,53512,53515,53520,53525,53530,53533,53536,53628,53631,53636,53639,53644,53647,53650,53655,53658,53663,53667,53670,53684,53688,53693,53696,53699,53703,53708,53711,53715,53719,53724,53728,53733,53736,53739,53742,53745,53748,53751,53756,53761,53789,53792,53795,53798,53803,53806,53809,53812,53815,53819,53848,53852,53857,53862,53865,53868,53871,53876,53991,53996,54001,54162,54167,54170,54174,54179,54184,54187,54190,54193,54196,54199,54202,54205,54208,54211,54214,54217,54220,54223,54226,54228,54231,54234,54237,54242,54246,54643,54646,54652,54656,54661,55943,55948,55951,55954,55957,55962,57158,57162,57168,57173,57176,57181,57186,57190,57194,57199,57202,57207,57210,57213,57217,58125,58128,58132,58353,58356,58359,58362,58588,58591,58815,58818,58822,58827,58830,58833,59061,59064,59097,59100,59104,59109,59113,59116,59119,59122,59125,59128,59131,59134,59139,60419,60423,60426,61519,61523,61526,61529,61532,61535,61539,61542,61545,61547,61555,63036,63040,63043,63046,63049,63258,63261,63265,63269,63274,63279,63282,63285,63290,63294,63299,63302,63411,63415,63420,63425,63428,63431,63435,63440,63445,63450,63453,63456,63467,63470,63475,63480,63483,63486,63559,63563,63568,63571,63573,63584,63588,63593,64919,64922,64925,64928,64930,64933,64936,64939,64942,64945,64948,64951,64954,64957,64960,64963,64966,64968,64970,64973,64977,66071,66074,66077,66093,66107,66110,66115,66121,66126,66130,66134,66139,66143,66148,66590,66595,66598,66602,66607,66610,66613,66617,66622,66626,66631,66636,66640,66645,66650,66653,66658,66663,66667,66672,66677,66781,66784,66788,66793,67159,67162,67165,67168,67171,67174,67177,67180,67183,68479,68483,68488,68493,68496,68499,68502,68505,68507,68512,68517,68520,68524,68529,68534,68539,68542,68545,68548,68551,68554,68559,68562,68566,68571,68576,68580,68585,68588,68593,68596,68599,68602,68605,68608,68613,68616,68619,68622,68625,68629,68634,68637,68641,68646,68649,68652,68656,68685,68688,68692,68696,68701,68705,68710,68713,68716,68719,68722,68725,68728,68731,68734,68737,68740,68743,68746,68749,68752,68756,68761,68766,68769,68773,68777,68782,68785,68789,68792,68795,68800,68805,68810,68815,68820,68823,68826,68831,68836,68840,68845,68848,68853,68856,68859,68862,68865,68870,68873,68882,68886,68891,68894,68897,68901,68904,68909,68913,68916,68922,68928,68932,68958,68961,70522,70525,71021,71024,71029,71034,71039,71043,71048,71053,71058,71062,71067,71070,71073,71076,71079,71083,71086,71091,71094,71099,71103,71108,71111,71116,71121,71126,71129,71132,71137,71142,71145,71148,71152,71155,71160,71163,71168,71171,71176,71181,71186,71189,71194,71259,71262,71273,71277,71282,71454,71458,71463,71466,71469,71472,71476,71487,71491,71494,71499,71504,71507,71510,71513,71516,71519,71521,71524,71527,71530,71535,71538,71543,71546,71550,71553,71556,71570,71574,71577,71632,71637,71640,71643,71648,71651,71655,71660,71790,71794,71799,71804,71885,71890,71894,71897,71902,71907,71913,71916,71919,71922,71926,71931,71934,71945,71949,71966,75013,75017,75020,75023,75026,75047,75051,75054,75062,75065,75070,75073,75076,75081,75086,75090,75111,75115,75120,75123,75126,75129,75132,75136,75141,75144,75148,75153,75156,75161,75164,75169,75172,75177,76380,76384,76389,76392,76397,76681],[10,53407,53403],{"id":53408},"_3web-apis",[99,53410,53411],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[99,53413,53414],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[99,53416,53417],{},[155,53418],{"alt":20,"src":53419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[99,53421,53422],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[99,53424,53425],{},"建议数组和对象使用 const 来声明",[99,53427,53428],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[182,53430,53432],{"id":53431},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[210,53434,53436],{"id":53435},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[99,53438,53439,53442],{},[22,53440,53441],{},"document"," = HTML 文件解析后的对象化表示；",[99,53444,53445,53447],{},[22,53446,53441],{}," ≠ HTML 文件本身",[99,53449,53450,53455],{},[392,53451,53452],{},[22,53453,53454],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[99,53457,53458,53462],{},[392,53459,53460],{},[22,53461,53441],{}," ：容器里的内容，代表当前加载的网页（DOM）",[99,53464,53465],{},"document实际上为window.document的简写",[210,53467,53469],{"id":53468},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[99,53471,53472],{},[155,53473],{"alt":20,"src":53474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[99,53476,53477],{},[155,53478],{"alt":20,"src":53479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[99,53481,53482],{},[155,53483],{"alt":20,"src":53484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[99,53486,53487],{},"console.dir()",[99,53489,53490],{},"dir用来打印对象",[103,53492,53493,53496,53499],{},[106,53494,53495],{},"任何一个标签，都是一个对象",[106,53497,53498],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[106,53500,53501],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[99,53503,53504],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[210,53506,53508],{"id":53507},"_312-获取dom对象","3.1.2 获取DoM对象",[99,53510,53511],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[99,53513,53514],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[99,53516,53517],{},[392,53518,53519],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[194,53521,53522],{},[106,53523,53524],{},"利用CSS选择器来获取标签元素",[99,53526,53527],{},[155,53528],{"alt":20,"src":53529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[99,53531,53532],{},"里边的选择器必须必须加引号！！！",[99,53534,53535],{},"只选择第一个元素",[15,53537,53539],{"className":53138,"code":53538,"language":53140,"meta":20,"style":20},"\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",[22,53540,53541,53549,53570,53589,53597,53602,53607,53612,53620],{"__ignoreMap":20},[25,53542,53543,53545,53547],{"class":27,"line":28},[25,53544,1153],{"class":244},[25,53546,51871],{"class":51371},[25,53548,51378],{"class":244},[25,53550,53551,53553,53555,53558,53560,53563,53566,53568],{"class":27,"line":39},[25,53552,52215],{"class":244},[25,53554,51682],{"class":51371},[25,53556,53557],{"class":31}," class",[25,53559,290],{"class":244},[25,53561,53562],{"class":45},"\"box\"",[25,53564,53565],{"class":244},">123\u003C\u002F",[25,53567,51682],{"class":51371},[25,53569,51378],{"class":244},[25,53571,53572,53574,53576,53578,53580,53582,53585,53587],{"class":27,"line":51},[25,53573,52215],{"class":244},[25,53575,51682],{"class":51371},[25,53577,53557],{"class":31},[25,53579,290],{"class":244},[25,53581,53562],{"class":45},[25,53583,53584],{"class":244},">456\u003C\u002F",[25,53586,51682],{"class":51371},[25,53588,51378],{"class":244},[25,53590,53591,53593,53595],{"class":27,"line":59},[25,53592,52215],{"class":244},[25,53594,51884],{"class":51371},[25,53596,51378],{"class":244},[25,53598,53599],{"class":27,"line":67},[25,53600,53601],{"class":244},"    \u002F\u002F 1.获取匹配的第一个元素\n",[25,53603,53604],{"class":27,"line":75},[25,53605,53606],{"class":244},"    const box = document.querySelector('div')\n",[25,53608,53609],{"class":27,"line":83},[25,53610,53611],{"class":244},"    console.dir(box)\n",[25,53613,53614,53616,53618],{"class":27,"line":91},[25,53615,52488],{"class":244},[25,53617,51884],{"class":51371},[25,53619,51378],{"class":244},[25,53621,53622,53624,53626],{"class":27,"line":1429},[25,53623,51856],{"class":244},[25,53625,51871],{"class":51371},[25,53627,51378],{"class":244},[99,53629,53630],{},"只选123，不选456",[99,53632,53633],{},[155,53634],{"alt":20,"src":53635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[99,53637,53638],{},"返回的是一个数组的集合，不能对其进行直接修改",[99,53640,53641],{},[155,53642],{"alt":20,"src":53643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[99,53645,53646],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[99,53648,53649],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[194,53651,53652],{"start":39},[106,53653,53654],{},"其他方法来获取标签元素",[99,53656,53657],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[99,53659,53660],{},[155,53661],{"alt":20,"src":53662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[210,53664,53666],{"id":53665},"_313-操作元素的内容","3.1.3 操作元素的内容",[99,53668,53669],{},"设置修改DOM元素内容有两种方式：",[103,53671,53672,53675,53678,53681],{},[106,53673,53674],{},"元素.innerText=''",[106,53676,53677],{},"元素.innerHTML=''",[106,53679,53680],{},"不写字符串输出数字也是可以的",[106,53682,53683],{},"元素.innerHtml=1",[22108,53685,53687],{"id":53686},"_3131-innertext","3.1.3.1 innerText",[99,53689,53690],{},[155,53691],{"alt":20,"src":53692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[99,53694,53695],{},"思路：实现了修改盒子中的内容！",[99,53697,53698],{},"它只显示纯文本，不解析标签",[22108,53700,53702],{"id":53701},"_3132-innerhtml","3.1.3.2 innerHTML",[99,53704,53705],{},[155,53706],{"alt":20,"src":53707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[99,53709,53710],{},"相比于innerText，他的强大之处在于可以解析标签",[210,53712,53714],{"id":53713},"_314-操作元素属性","3.1.4 操作元素属性",[22108,53716,53718],{"id":53717},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[99,53720,53721],{},[155,53722],{"alt":20,"src":53723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22108,53725,53727],{"id":53726},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[99,53729,53730],{},[155,53731],{"alt":20,"src":53732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[99,53734,53735],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[99,53737,53738],{},"div.style.backgroundColor = 'hotpink'",[99,53740,53741],{},"如果按照css的写法，-表示减，就会出错",[99,53743,53744],{},"body元素不需要再获取，直接用就行！！！！！！",[99,53746,53747],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[99,53749,53750],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[99,53752,53753],{},[155,53754],{"alt":20,"src":53755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[99,53757,53758],{},[155,53759],{"alt":20,"src":53760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[194,53762,53763,53766,53769,53772,53775,53778],{},[106,53764,53765],{},"className这个方式就是修改很多样式的时候来使用的！",[106,53767,53768],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[106,53770,53771],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[106,53773,53774],{},"className为属性名，如果还用class的话就导致与关键字冲突",[106,53776,53777],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[106,53779,53780,53781,53786],{},"解析标签的时候就变为了",[51682,53782],{"className":53783},[53784,53785],"nav","box",[53787,53788],"br",{},[99,53790,53791],{},"例子：",[51682,53793],{"className":53794},[53784],[51884,53796,53797],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[99,53799,53800],{},[155,53801],{"alt":20,"src":53802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[99,53804,53805],{},"追加和删除类名用classList",[99,53807,53808],{},"常用于类似于开关的操作",[99,53810,53811],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[99,53813,53814],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22108,53816,53818],{"id":53817},"_3143-牢记点","3.1.4.3 牢记点",[194,53820,53821,53824,53827,53830,53833,53836,53839,53842,53845],{},[106,53822,53823],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[106,53825,53826],{},"使用style属性操作css时不要忘记引号",[106,53828,53829],{},"使用className或者classList时也不要忘记引号",[106,53831,53832],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[106,53834,53835],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[106,53837,53838],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[106,53840,53841],{},"若： let arr=['1','2',3] arr[0]=1",[106,53843,53844],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[106,53846,53847],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[210,53849,53851],{"id":53850},"_315-操作表单元素","3.1.5 操作表单元素",[194,53853,53854],{},[106,53855,53856],{},"天生的属性",[99,53858,53859],{},[155,53860],{"alt":20,"src":53861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[99,53863,53864],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[99,53866,53867],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[99,53869,53870],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[99,53872,53873],{},[155,53874],{"alt":20,"src":53875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[15,53877,53879],{"className":50704,"code":53878,"language":50706,"meta":20,"style":20},"在复选框中如果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",[22,53880,53881,53886,53918,53923,53928,53933,53938,53942,53947,53952,53969,53981,53986],{"__ignoreMap":20},[25,53882,53883],{"class":27,"line":28},[25,53884,53885],{"class":244},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[25,53887,53888,53890,53893,53896,53898,53901,53903,53905,53907,53909,53911,53913,53916],{"class":27,"line":39},[25,53889,1153],{"class":244},[25,53891,53892],{"class":51371},"input",[25,53894,53895],{"class":31}," type",[25,53897,290],{"class":244},[25,53899,53900],{"class":45},"\"checkbox\"",[25,53902,15030],{"class":31},[25,53904,290],{"class":244},[25,53906,7762],{"class":45},[25,53908,15069],{"class":31},[25,53910,290],{"class":244},[25,53912,7762],{"class":45},[25,53914,53915],{"class":31}," checked",[25,53917,51378],{"class":244},[25,53919,53920],{"class":27,"line":51},[25,53921,53922],{"class":244},"不选的话：\n",[25,53924,53925],{"class":27,"line":59},[25,53926,53927],{"class":244},"const input = document.querySelector('input')\n",[25,53929,53930],{"class":27,"line":67},[25,53931,53932],{"class":244},"input.checked=false\n",[25,53934,53935],{"class":27,"line":75},[25,53936,53937],{"class":244},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[25,53939,53940],{"class":27,"line":83},[25,53941,2510],{"emptyLinePlaceholder":167},[25,53943,53944],{"class":27,"line":91},[25,53945,53946],{"class":244},"禁用按钮：\n",[25,53948,53949],{"class":27,"line":1429},[25,53950,53951],{"class":244},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[25,53953,53954,53956,53959,53962,53965,53967],{"class":27,"line":1441},[25,53955,1153],{"class":244},[25,53957,53958],{"class":51371},"button",[25,53960,53961],{"class":31}," disabled",[25,53963,53964],{"class":244},">点击\u003C\u002F",[25,53966,53958],{"class":51371},[25,53968,51378],{"class":244},[25,53970,53971,53973,53975,53977,53979],{"class":27,"line":1723},[25,53972,1153],{"class":244},[25,53974,53958],{"class":51371},[25,53976,53964],{"class":244},[25,53978,53958],{"class":51371},[25,53980,51378],{"class":244},[25,53982,53983],{"class":27,"line":1728},[25,53984,53985],{"class":244},"const bt = document.querySelector('button')\n",[25,53987,53988],{"class":27,"line":1734},[25,53989,53990],{"class":244},"bt.disabled = false\n",[194,53992,53993],{"start":39},[106,53994,53995],{},"自定义属性",[99,53997,53998],{},[155,53999],{"alt":20,"src":54000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[15,54002,54004],{"className":53138,"code":54003,"language":53140,"meta":20,"style":20},"\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",[22,54005,54006,54014,54042,54061,54080,54099,54118,54126,54131,54136,54141,54146,54154],{"__ignoreMap":20},[25,54007,54008,54010,54012],{"class":27,"line":28},[25,54009,1153],{"class":244},[25,54011,51871],{"class":51371},[25,54013,51378],{"class":244},[25,54015,54016,54018,54020,54023,54025,54027,54030,54032,54035,54038,54040],{"class":27,"line":39},[25,54017,52215],{"class":244},[25,54019,51682],{"class":51371},[25,54021,54022],{"class":31}," data-id",[25,54024,290],{"class":244},[25,54026,3788],{"class":45},[25,54028,54029],{"class":31}," data-spm",[25,54031,290],{"class":244},[25,54033,54034],{"class":45},"\"我不知道\"",[25,54036,54037],{"class":244},">1\u003C\u002F",[25,54039,51682],{"class":51371},[25,54041,51378],{"class":244},[25,54043,54044,54046,54048,54050,54052,54054,54057,54059],{"class":27,"line":51},[25,54045,52215],{"class":244},[25,54047,51682],{"class":51371},[25,54049,54022],{"class":31},[25,54051,290],{"class":244},[25,54053,3811],{"class":45},[25,54055,54056],{"class":244},">2\u003C\u002F",[25,54058,51682],{"class":51371},[25,54060,51378],{"class":244},[25,54062,54063,54065,54067,54069,54071,54073,54076,54078],{"class":27,"line":59},[25,54064,52215],{"class":244},[25,54066,51682],{"class":51371},[25,54068,54022],{"class":31},[25,54070,290],{"class":244},[25,54072,3824],{"class":45},[25,54074,54075],{"class":244},">3\u003C\u002F",[25,54077,51682],{"class":51371},[25,54079,51378],{"class":244},[25,54081,54082,54084,54086,54088,54090,54092,54095,54097],{"class":27,"line":67},[25,54083,52215],{"class":244},[25,54085,51682],{"class":51371},[25,54087,54022],{"class":31},[25,54089,290],{"class":244},[25,54091,3837],{"class":45},[25,54093,54094],{"class":244},">4\u003C\u002F",[25,54096,51682],{"class":51371},[25,54098,51378],{"class":244},[25,54100,54101,54103,54105,54107,54109,54111,54114,54116],{"class":27,"line":75},[25,54102,52215],{"class":244},[25,54104,51682],{"class":51371},[25,54106,54022],{"class":31},[25,54108,290],{"class":244},[25,54110,3858],{"class":45},[25,54112,54113],{"class":244},">5\u003C\u002F",[25,54115,51682],{"class":51371},[25,54117,51378],{"class":244},[25,54119,54120,54122,54124],{"class":27,"line":83},[25,54121,52215],{"class":244},[25,54123,51884],{"class":51371},[25,54125,51378],{"class":244},[25,54127,54128],{"class":27,"line":91},[25,54129,54130],{"class":244},"    const one = document.querySelector('div')\n",[25,54132,54133],{"class":27,"line":1429},[25,54134,54135],{"class":244},"    console.log(one.dataset)\n",[25,54137,54138],{"class":27,"line":1441},[25,54139,54140],{"class":244},"    console.log(one.dataset.id)\n",[25,54142,54143],{"class":27,"line":1723},[25,54144,54145],{"class":244},"    console.log(one.dataset.spm)\n",[25,54147,54148,54150,54152],{"class":27,"line":1728},[25,54149,52488],{"class":244},[25,54151,51884],{"class":51371},[25,54153,51378],{"class":244},[25,54155,54156,54158,54160],{"class":27,"line":1734},[25,54157,51856],{"class":244},[25,54159,51871],{"class":51371},[25,54161,51378],{"class":244},[99,54163,54164],{},[155,54165],{"alt":20,"src":54166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[99,54168,54169],{},"document.querySelector选择的是第一个对象（元素）",[210,54171,54173],{"id":54172},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[99,54175,54176],{},[155,54177],{"alt":20,"src":54178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[99,54180,54181],{},[155,54182],{"alt":20,"src":54183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[99,54185,54186],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51884,54188,54189],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[99,54191,54192],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51884,54194,54195],{},"\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",[99,54197,54198],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[99,54200,54201],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[99,54203,54204],{},"单位为毫秒！！！",[99,54206,54207],{},"可以搭配匿名函数来用！！！",[99,54209,54210],{},"setInterval(function () {",[99,54212,54213],{},"alert('两秒执行一次')",[99,54215,54216],{},"}, 2000)",[99,54218,54219],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[99,54221,54222],{},"function fn() {",[99,54224,54225],{},"document.write(1)",[99,54227,1189],{},[99,54229,54230],{},"setInterval(fn, 1000)",[99,54232,54233],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[99,54235,54236],{},"setInterval('fn()', 1000)",[99,54238,54239],{},[155,54240],{"alt":20,"src":54241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22108,54243,54245],{"id":54244},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[15,54247,54249],{"className":50704,"code":54248,"language":50706,"meta":20,"style":20},"\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",[22,54250,54251,54261,54275,54279,54287,54301,54321,54333,54341,54345,54353,54390,54395,54400,54405,54413,54421,54443,54451,54456,54478,54483,54488,54499,54504,54524,54532,54547,54562,54573,54578,54588,54598,54602,54611,54615,54623,54631,54635],{"__ignoreMap":20},[25,54252,54253,54255,54257,54259],{"class":27,"line":28},[25,54254,51368],{"class":244},[25,54256,51372],{"class":51371},[25,54258,51375],{"class":31},[25,54260,51378],{"class":244},[25,54262,54263,54265,54267,54269,54271,54273],{"class":27,"line":39},[25,54264,1153],{"class":244},[25,54266,50706],{"class":51371},[25,54268,51387],{"class":31},[25,54270,290],{"class":244},[25,54272,51392],{"class":45},[25,54274,51378],{"class":244},[25,54276,54277],{"class":27,"line":51},[25,54278,2510],{"emptyLinePlaceholder":167},[25,54280,54281,54283,54285],{"class":27,"line":59},[25,54282,1153],{"class":244},[25,54284,51405],{"class":51371},[25,54286,51378],{"class":244},[25,54288,54289,54291,54293,54295,54297,54299],{"class":27,"line":67},[25,54290,52215],{"class":244},[25,54292,51415],{"class":51371},[25,54294,51418],{"class":31},[25,54296,290],{"class":244},[25,54298,51423],{"class":45},[25,54300,51378],{"class":244},[25,54302,54303,54305,54307,54309,54311,54313,54315,54317,54319],{"class":27,"line":75},[25,54304,52215],{"class":244},[25,54306,51415],{"class":51371},[25,54308,15030],{"class":31},[25,54310,290],{"class":244},[25,54312,51462],{"class":45},[25,54314,51442],{"class":31},[25,54316,290],{"class":244},[25,54318,51469],{"class":45},[25,54320,51378],{"class":244},[25,54322,54323,54325,54327,54329,54331],{"class":27,"line":83},[25,54324,52215],{"class":244},[25,54326,51478],{"class":51371},[25,54328,51481],{"class":244},[25,54330,51478],{"class":51371},[25,54332,51378],{"class":244},[25,54334,54335,54337,54339],{"class":27,"line":91},[25,54336,51856],{"class":244},[25,54338,51405],{"class":51371},[25,54340,51378],{"class":244},[25,54342,54343],{"class":27,"line":1429},[25,54344,2510],{"emptyLinePlaceholder":167},[25,54346,54347,54349,54351],{"class":27,"line":1441},[25,54348,1153],{"class":244},[25,54350,51871],{"class":51371},[25,54352,51378],{"class":244},[25,54354,54355,54357,54360,54362,54364,54366,54368,54370,54372,54375,54377,54380,54383,54385,54388],{"class":27,"line":1723},[25,54356,52215],{"class":244},[25,54358,54359],{"class":51371},"textarea",[25,54361,15030],{"class":31},[25,54363,290],{"class":244},[25,54365,7762],{"class":45},[25,54367,15069],{"class":31},[25,54369,290],{"class":244},[25,54371,7762],{"class":45},[25,54373,54374],{"class":31}," cols",[25,54376,290],{"class":244},[25,54378,54379],{"class":45},"\"30\"",[25,54381,54382],{"class":31}," rows",[25,54384,290],{"class":244},[25,54386,54387],{"class":45},"\"10\"",[25,54389,51378],{"class":244},[25,54391,54392],{"class":27,"line":1728},[25,54393,54394],{"class":244},"        用户注册协议\n",[25,54396,54397],{"class":27,"line":1734},[25,54398,54399],{"class":244},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[25,54401,54402],{"class":27,"line":1739},[25,54403,54404],{"class":244},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[25,54406,54407,54409,54411],{"class":27,"line":1753},[25,54408,51847],{"class":244},[25,54410,54359],{"class":51371},[25,54412,51378],{"class":244},[25,54414,54415,54417,54419],{"class":27,"line":1758},[25,54416,52215],{"class":244},[25,54418,53787],{"class":51371},[25,54420,51378],{"class":244},[25,54422,54423,54425,54427,54429,54431,54434,54436,54439,54441],{"class":27,"line":1764},[25,54424,52215],{"class":244},[25,54426,53958],{"class":51371},[25,54428,53557],{"class":31},[25,54430,290],{"class":244},[25,54432,54433],{"class":45},"\"btn\"",[25,54435,53961],{"class":31},[25,54437,54438],{"class":244},">我已经阅读用户协议(5)\u003C\u002F",[25,54440,53958],{"class":51371},[25,54442,51378],{"class":244},[25,54444,54445,54447,54449],{"class":27,"line":1785},[25,54446,52215],{"class":244},[25,54448,51884],{"class":51371},[25,54450,51378],{"class":244},[25,54452,54453],{"class":27,"line":1790},[25,54454,54455],{"class":302},"    \u002F\u002F 1. 获取元素\n",[25,54457,54458,54460,54463,54465,54468,54471,54473,54476],{"class":27,"line":1804},[25,54459,11331],{"class":240},[25,54461,54462],{"class":35}," btn",[25,54464,13674],{"class":240},[25,54466,54467],{"class":244}," document.",[25,54469,54470],{"class":31},"querySelector",[25,54472,245],{"class":244},[25,54474,54475],{"class":45},"'.btn'",[25,54477,251],{"class":244},[25,54479,54480],{"class":27,"line":1809},[25,54481,54482],{"class":302},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[25,54484,54485],{"class":27,"line":1838},[25,54486,54487],{"class":302},"    \u002F\u002F 2. 倒计时\n",[25,54489,54490,54492,54494,54496],{"class":27,"line":1843},[25,54491,52290],{"class":240},[25,54493,9548],{"class":244},[25,54495,290],{"class":240},[25,54497,54498],{"class":35}," 5\n",[25,54500,54501],{"class":27,"line":1860},[25,54502,54503],{"class":302},"    \u002F\u002F 2.1 开启定时器\n",[25,54505,54506,54508,54511,54513,54516,54518,54521],{"class":27,"line":1865},[25,54507,52290],{"class":240},[25,54509,54510],{"class":244}," n ",[25,54512,290],{"class":240},[25,54514,54515],{"class":31}," setInterval",[25,54517,245],{"class":244},[25,54519,54520],{"class":240},"function",[25,54522,54523],{"class":244}," () {\n",[25,54525,54526,54529],{"class":27,"line":1870},[25,54527,54528],{"class":244},"      i",[25,54530,54531],{"class":240},"--\n",[25,54533,54534,54537,54539,54542,54544],{"class":27,"line":1875},[25,54535,54536],{"class":244},"      btn.innerHTML ",[25,54538,290],{"class":240},[25,54540,54541],{"class":45}," `我已经阅读用户协议(${",[25,54543,684],{"class":244},[25,54545,54546],{"class":45},"})`\n",[25,54548,54549,54552,54555,54558,54560],{"class":27,"line":1889},[25,54550,54551],{"class":240},"      if",[25,54553,54554],{"class":244}," (i ",[25,54556,54557],{"class":240},"===",[25,54559,4203],{"class":35},[25,54561,12552],{"class":244},[25,54563,54564,54567,54570],{"class":27,"line":1894},[25,54565,54566],{"class":31},"        clearInterval",[25,54568,54569],{"class":244},"(n)  ",[25,54571,54572],{"class":302},"\u002F\u002F 关闭定时器\n",[25,54574,54575],{"class":27,"line":2687},[25,54576,54577],{"class":302},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[25,54579,54580,54583,54585],{"class":27,"line":2701},[25,54581,54582],{"class":244},"        btn.disabled ",[25,54584,290],{"class":240},[25,54586,54587],{"class":35}," false\n",[25,54589,54590,54593,54595],{"class":27,"line":2709},[25,54591,54592],{"class":244},"        btn.innerHTML ",[25,54594,290],{"class":240},[25,54596,54597],{"class":45}," '同意'\n",[25,54599,54600],{"class":27,"line":2714},[25,54601,52469],{"class":244},[25,54603,54604,54607,54609],{"class":27,"line":2720},[25,54605,54606],{"class":244},"    }, ",[25,54608,6520],{"class":35},[25,54610,251],{"class":244},[25,54612,54613],{"class":27,"line":2726},[25,54614,2510],{"emptyLinePlaceholder":167},[25,54616,54617,54619,54621],{"class":27,"line":2731},[25,54618,52488],{"class":244},[25,54620,51884],{"class":51371},[25,54622,51378],{"class":244},[25,54624,54625,54627,54629],{"class":27,"line":8058},[25,54626,51856],{"class":244},[25,54628,51871],{"class":51371},[25,54630,51378],{"class":244},[25,54632,54633],{"class":27,"line":8082},[25,54634,2510],{"emptyLinePlaceholder":167},[25,54636,54637,54639,54641],{"class":27,"line":8087},[25,54638,51856],{"class":244},[25,54640,50706],{"class":51371},[25,54642,51378],{"class":244},[99,54644,54645],{},"不要一直想着用死循环,避免死循环",[99,54647,54648,54651],{},[22,54649,54650],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22108,54653,54655],{"id":54654},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[194,54657,54658],{},[106,54659,54660],{},"法1",[15,54662,54664],{"className":50704,"code":54663,"language":50706,"meta":20,"style":20},"\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",[22,54665,54666,54676,54690,54694,54702,54716,54736,54748,54756,54762,54773,54784,54788,54792,54799,54811,54815,54819,54826,54838,54852,54865,54879,54883,54887,54894,54905,54916,54927,54939,54951,54963,54967,54971,54979,54989,55002,55014,55027,55031,55035,55042,55052,55064,55076,55087,55098,55108,55120,55132,55136,55140,55149,55161,55173,55201,55214,55218,55222,55229,55240,55244,55252,55260,55264,55272,55286,55301,55325,55333,55348,55361,55369,55390,55402,55414,55426,55438,55450,55462,55474,55483,55491,55499,55507,55519,55542,55561,55580,55599,55618,55637,55656,55676,55680,55700,55719,55739,55760,55771,55788,55798,55808,55818,55823,55828,55833,55838,55863,55876,55880,55903,55907,55915,55923,55931,55935],{"__ignoreMap":20},[25,54667,54668,54670,54672,54674],{"class":27,"line":28},[25,54669,51368],{"class":244},[25,54671,51372],{"class":51371},[25,54673,51375],{"class":31},[25,54675,51378],{"class":244},[25,54677,54678,54680,54682,54684,54686,54688],{"class":27,"line":39},[25,54679,1153],{"class":244},[25,54681,50706],{"class":51371},[25,54683,51387],{"class":31},[25,54685,290],{"class":244},[25,54687,51392],{"class":45},[25,54689,51378],{"class":244},[25,54691,54692],{"class":27,"line":51},[25,54693,2510],{"emptyLinePlaceholder":167},[25,54695,54696,54698,54700],{"class":27,"line":59},[25,54697,1153],{"class":244},[25,54699,51405],{"class":51371},[25,54701,51378],{"class":244},[25,54703,54704,54706,54708,54710,54712,54714],{"class":27,"line":67},[25,54705,52215],{"class":244},[25,54707,51415],{"class":51371},[25,54709,51418],{"class":31},[25,54711,290],{"class":244},[25,54713,51423],{"class":45},[25,54715,51378],{"class":244},[25,54717,54718,54720,54722,54724,54726,54728,54730,54732,54734],{"class":27,"line":75},[25,54719,52215],{"class":244},[25,54721,51415],{"class":51371},[25,54723,15030],{"class":31},[25,54725,290],{"class":244},[25,54727,51462],{"class":45},[25,54729,51442],{"class":31},[25,54731,290],{"class":244},[25,54733,51469],{"class":45},[25,54735,51378],{"class":244},[25,54737,54738,54740,54742,54744,54746],{"class":27,"line":83},[25,54739,52215],{"class":244},[25,54741,51478],{"class":51371},[25,54743,51481],{"class":244},[25,54745,51478],{"class":51371},[25,54747,51378],{"class":244},[25,54749,54750,54752,54754],{"class":27,"line":91},[25,54751,52215],{"class":244},[25,54753,159],{"class":51371},[25,54755,51378],{"class":244},[25,54757,54758,54760],{"class":27,"line":1429},[25,54759,6513],{"class":51371},[25,54761,15682],{"class":244},[25,54763,54764,54767,54769,54771],{"class":27,"line":1441},[25,54765,54766],{"class":35},"      padding",[25,54768,51508],{"class":244},[25,54770,434],{"class":35},[25,54772,1403],{"class":244},[25,54774,54775,54778,54780,54782],{"class":27,"line":1723},[25,54776,54777],{"class":35},"      margin",[25,54779,51508],{"class":244},[25,54781,434],{"class":35},[25,54783,1403],{"class":244},[25,54785,54786],{"class":27,"line":1728},[25,54787,2297],{"class":244},[25,54789,54790],{"class":27,"line":1734},[25,54791,2510],{"emptyLinePlaceholder":167},[25,54793,54794,54797],{"class":27,"line":1739},[25,54795,54796],{"class":51371},"    li",[25,54798,15682],{"class":244},[25,54800,54801,54804,54806,54809],{"class":27,"line":1753},[25,54802,54803],{"class":35},"      list-style",[25,54805,51508],{"class":244},[25,54807,54808],{"class":35},"none",[25,54810,1403],{"class":244},[25,54812,54813],{"class":27,"line":1758},[25,54814,2297],{"class":244},[25,54816,54817],{"class":27,"line":1764},[25,54818,2510],{"emptyLinePlaceholder":167},[25,54820,54821,54824],{"class":27,"line":1785},[25,54822,54823],{"class":31},"    .box",[25,54825,15682],{"class":244},[25,54827,54828,54831,54833,54836],{"class":27,"line":1790},[25,54829,54830],{"class":35},"      position",[25,54832,51508],{"class":244},[25,54834,54835],{"class":35},"relative",[25,54837,1403],{"class":244},[25,54839,54840,54843,54845,54848,54850],{"class":27,"line":1804},[25,54841,54842],{"class":35},"      width",[25,54844,51508],{"class":244},[25,54846,54847],{"class":35},"976",[25,54849,51563],{"class":240},[25,54851,1403],{"class":244},[25,54853,54854,54857,54859,54861,54863],{"class":27,"line":1809},[25,54855,54856],{"class":35},"      height",[25,54858,51508],{"class":244},[25,54860,1650],{"class":35},[25,54862,51563],{"class":240},[25,54864,1403],{"class":244},[25,54866,54867,54869,54871,54873,54875,54877],{"class":27,"line":1838},[25,54868,54777],{"class":35},[25,54870,51508],{"class":244},[25,54872,554],{"class":35},[25,54874,51563],{"class":240},[25,54876,51627],{"class":35},[25,54878,1403],{"class":244},[25,54880,54881],{"class":27,"line":1843},[25,54882,2297],{"class":244},[25,54884,54885],{"class":27,"line":1860},[25,54886,2510],{"emptyLinePlaceholder":167},[25,54888,54889,54892],{"class":27,"line":1865},[25,54890,54891],{"class":31},"    .slider-footer",[25,54893,15682],{"class":244},[25,54895,54896,54898,54900,54903],{"class":27,"line":1870},[25,54897,54830],{"class":35},[25,54899,51508],{"class":244},[25,54901,54902],{"class":35},"absolute",[25,54904,1403],{"class":244},[25,54906,54907,54910,54912,54914],{"class":27,"line":1875},[25,54908,54909],{"class":35},"      left",[25,54911,51508],{"class":244},[25,54913,434],{"class":35},[25,54915,1403],{"class":244},[25,54917,54918,54921,54923,54925],{"class":27,"line":1889},[25,54919,54920],{"class":35},"      bottom",[25,54922,51508],{"class":244},[25,54924,434],{"class":35},[25,54926,1403],{"class":244},[25,54928,54929,54931,54933,54935,54937],{"class":27,"line":1894},[25,54930,54842],{"class":35},[25,54932,51508],{"class":244},[25,54934,554],{"class":35},[25,54936,571],{"class":240},[25,54938,1403],{"class":244},[25,54940,54941,54943,54945,54947,54949],{"class":27,"line":2687},[25,54942,54856],{"class":35},[25,54944,51508],{"class":244},[25,54946,818],{"class":35},[25,54948,571],{"class":240},[25,54950,1403],{"class":244},[25,54952,54953,54956,54958,54961],{"class":27,"line":2701},[25,54954,54955],{"class":35},"      background-color",[25,54957,51508],{"class":244},[25,54959,54960],{"class":35},"skyblue",[25,54962,1403],{"class":244},[25,54964,54965],{"class":27,"line":2709},[25,54966,2297],{"class":244},[25,54968,54969],{"class":27,"line":2714},[25,54970,2510],{"emptyLinePlaceholder":167},[25,54972,54973,54975,54977],{"class":27,"line":2720},[25,54974,54891],{"class":31},[25,54976,6935],{"class":51371},[25,54978,15682],{"class":244},[25,54980,54981,54983,54985,54987],{"class":27,"line":2726},[25,54982,54830],{"class":35},[25,54984,51508],{"class":244},[25,54986,54902],{"class":35},[25,54988,1403],{"class":244},[25,54990,54991,54994,54996,54998,55000],{"class":27,"line":2731},[25,54992,54993],{"class":35},"      font-size",[25,54995,51508],{"class":244},[25,54997,1144],{"class":35},[25,54999,51563],{"class":240},[25,55001,1403],{"class":244},[25,55003,55004,55006,55008,55010,55012],{"class":27,"line":8058},[25,55005,54909],{"class":35},[25,55007,51508],{"class":244},[25,55009,943],{"class":35},[25,55011,51563],{"class":240},[25,55013,1403],{"class":244},[25,55015,55016,55019,55021,55023,55025],{"class":27,"line":8082},[25,55017,55018],{"class":35},"      top",[25,55020,51508],{"class":244},[25,55022,562],{"class":35},[25,55024,51563],{"class":240},[25,55026,1403],{"class":244},[25,55028,55029],{"class":27,"line":8087},[25,55030,2297],{"class":244},[25,55032,55033],{"class":27,"line":8093},[25,55034,2510],{"emptyLinePlaceholder":167},[25,55036,55037,55040],{"class":27,"line":8120},[25,55038,55039],{"class":51371},"    ul",[25,55041,15682],{"class":244},[25,55043,55044,55046,55048,55050],{"class":27,"line":8125},[25,55045,54830],{"class":35},[25,55047,51508],{"class":244},[25,55049,54902],{"class":35},[25,55051,1403],{"class":244},[25,55053,55054,55056,55058,55060,55062],{"class":27,"line":8131},[25,55055,55018],{"class":35},[25,55057,51508],{"class":244},[25,55059,1024],{"class":35},[25,55061,51563],{"class":240},[25,55063,1403],{"class":244},[25,55065,55066,55068,55070,55072,55074],{"class":27,"line":8143},[25,55067,54909],{"class":35},[25,55069,51508],{"class":244},[25,55071,943],{"class":35},[25,55073,51563],{"class":240},[25,55075,1403],{"class":244},[25,55077,55078,55081,55083,55085],{"class":27,"line":8155},[25,55079,55080],{"class":35},"      display",[25,55082,51508],{"class":244},[25,55084,51548],{"class":35},[25,55086,1403],{"class":244},[25,55088,55089,55092,55094,55096],{"class":27,"line":8167},[25,55090,55091],{"class":35},"      justify-content",[25,55093,51508],{"class":244},[25,55095,51739],{"class":35},[25,55097,1403],{"class":244},[25,55099,55100,55102,55104,55106],{"class":27,"line":9826},[25,55101,54830],{"class":35},[25,55103,51508],{"class":244},[25,55105,54902],{"class":35},[25,55107,1403],{"class":244},[25,55109,55110,55112,55114,55116,55118],{"class":27,"line":9851},[25,55111,54842],{"class":35},[25,55113,51508],{"class":244},[25,55115,4102],{"class":35},[25,55117,51563],{"class":240},[25,55119,1403],{"class":244},[25,55121,55122,55124,55126,55128,55130],{"class":27,"line":9874},[25,55123,54856],{"class":35},[25,55125,51508],{"class":244},[25,55127,943],{"class":35},[25,55129,51563],{"class":240},[25,55131,1403],{"class":244},[25,55133,55134],{"class":27,"line":9898},[25,55135,2297],{"class":244},[25,55137,55138],{"class":27,"line":9903},[25,55139,2510],{"emptyLinePlaceholder":167},[25,55141,55142,55144,55147],{"class":27,"line":9908},[25,55143,55039],{"class":51371},[25,55145,55146],{"class":51371}," li",[25,55148,15682],{"class":244},[25,55150,55151,55153,55155,55157,55159],{"class":27,"line":9913},[25,55152,54842],{"class":35},[25,55154,51508],{"class":244},[25,55156,943],{"class":35},[25,55158,51563],{"class":240},[25,55160,1403],{"class":244},[25,55162,55163,55165,55167,55169,55171],{"class":27,"line":9922},[25,55164,54856],{"class":35},[25,55166,51508],{"class":244},[25,55168,943],{"class":35},[25,55170,51563],{"class":240},[25,55172,1403],{"class":244},[25,55174,55175,55177,55179,55182,55184,55186,55188,55190,55192,55194,55196,55199],{"class":27,"line":9927},[25,55176,54955],{"class":35},[25,55178,51508],{"class":244},[25,55180,55181],{"class":35},"rgba",[25,55183,245],{"class":244},[25,55185,434],{"class":35},[25,55187,12545],{"class":244},[25,55189,434],{"class":35},[25,55191,12545],{"class":244},[25,55193,434],{"class":35},[25,55195,12545],{"class":244},[25,55197,55198],{"class":35},".4",[25,55200,2829],{"class":244},[25,55202,55203,55206,55208,55210,55212],{"class":27,"line":9933},[25,55204,55205],{"class":35},"      border-radius",[25,55207,51508],{"class":244},[25,55209,689],{"class":35},[25,55211,51563],{"class":240},[25,55213,1403],{"class":244},[25,55215,55216],{"class":27,"line":9954},[25,55217,2297],{"class":244},[25,55219,55220],{"class":27,"line":9960},[25,55221,2510],{"emptyLinePlaceholder":167},[25,55223,55224,55227],{"class":27,"line":9974},[25,55225,55226],{"class":31},"    .activate",[25,55228,15682],{"class":244},[25,55230,55231,55233,55235,55238],{"class":27,"line":9980},[25,55232,54955],{"class":35},[25,55234,51508],{"class":244},[25,55236,55237],{"class":35},"#f7f7f7",[25,55239,1403],{"class":244},[25,55241,55242],{"class":27,"line":10007},[25,55243,2297],{"class":244},[25,55245,55246,55248,55250],{"class":27,"line":10016},[25,55247,52488],{"class":244},[25,55249,159],{"class":51371},[25,55251,51378],{"class":244},[25,55253,55254,55256,55258],{"class":27,"line":10022},[25,55255,51856],{"class":244},[25,55257,51405],{"class":51371},[25,55259,51378],{"class":244},[25,55261,55262],{"class":27,"line":10030},[25,55263,2510],{"emptyLinePlaceholder":167},[25,55265,55266,55268,55270],{"class":27,"line":10035},[25,55267,1153],{"class":244},[25,55269,51871],{"class":51371},[25,55271,51378],{"class":244},[25,55273,55274,55276,55278,55280,55282,55284],{"class":27,"line":16714},[25,55275,52215],{"class":244},[25,55277,51682],{"class":51371},[25,55279,53557],{"class":31},[25,55281,290],{"class":244},[25,55283,53562],{"class":45},[25,55285,51378],{"class":244},[25,55287,55288,55290,55292,55294,55296,55299],{"class":27,"line":16720},[25,55289,51412],{"class":244},[25,55291,51682],{"class":51371},[25,55293,53557],{"class":31},[25,55295,290],{"class":244},[25,55297,55298],{"class":45},"\"slider-wrapper\"",[25,55300,51378],{"class":244},[25,55302,55303,55306,55308,55311,55313,55316,55319,55321,55323],{"class":27,"line":16743},[25,55304,55305],{"class":244},"      \u003C",[25,55307,155],{"class":51371},[25,55309,55310],{"class":31}," src",[25,55312,290],{"class":244},[25,55314,55315],{"class":45},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[25,55317,55318],{"class":31}," alt",[25,55320,290],{"class":244},[25,55322,7762],{"class":45},[25,55324,51378],{"class":244},[25,55326,55327,55329,55331],{"class":27,"line":16749},[25,55328,51847],{"class":244},[25,55330,51682],{"class":51371},[25,55332,51378],{"class":244},[25,55334,55335,55337,55339,55341,55343,55346],{"class":27,"line":16772},[25,55336,51412],{"class":244},[25,55338,51682],{"class":51371},[25,55340,53557],{"class":31},[25,55342,290],{"class":244},[25,55344,55345],{"class":45},"\"slider-footer\"",[25,55347,51378],{"class":244},[25,55349,55350,55352,55354,55357,55359],{"class":27,"line":16786},[25,55351,55305],{"class":244},[25,55353,99],{"class":51371},[25,55355,55356],{"class":244},">对人类来说会不会太超前了?\u003C\u002F",[25,55358,99],{"class":51371},[25,55360,51378],{"class":244},[25,55362,55363,55365,55367],{"class":27,"line":16806},[25,55364,55305],{"class":244},[25,55366,103],{"class":51371},[25,55368,51378],{"class":244},[25,55370,55371,55374,55376,55378,55380,55383,55386,55388],{"class":27,"line":16812},[25,55372,55373],{"class":244},"        \u003C",[25,55375,106],{"class":51371},[25,55377,53557],{"class":31},[25,55379,290],{"class":244},[25,55381,55382],{"class":45},"\"activate\"",[25,55384,55385],{"class":244},">\u003C\u002F",[25,55387,106],{"class":51371},[25,55389,51378],{"class":244},[25,55391,55392,55394,55396,55398,55400],{"class":27,"line":16823},[25,55393,55373],{"class":244},[25,55395,106],{"class":51371},[25,55397,55385],{"class":244},[25,55399,106],{"class":51371},[25,55401,51378],{"class":244},[25,55403,55404,55406,55408,55410,55412],{"class":27,"line":16846},[25,55405,55373],{"class":244},[25,55407,106],{"class":51371},[25,55409,55385],{"class":244},[25,55411,106],{"class":51371},[25,55413,51378],{"class":244},[25,55415,55416,55418,55420,55422,55424],{"class":27,"line":16868},[25,55417,55373],{"class":244},[25,55419,106],{"class":51371},[25,55421,55385],{"class":244},[25,55423,106],{"class":51371},[25,55425,51378],{"class":244},[25,55427,55428,55430,55432,55434,55436],{"class":27,"line":16873},[25,55429,55373],{"class":244},[25,55431,106],{"class":51371},[25,55433,55385],{"class":244},[25,55435,106],{"class":51371},[25,55437,51378],{"class":244},[25,55439,55440,55442,55444,55446,55448],{"class":27,"line":16879},[25,55441,55373],{"class":244},[25,55443,106],{"class":51371},[25,55445,55385],{"class":244},[25,55447,106],{"class":51371},[25,55449,51378],{"class":244},[25,55451,55452,55454,55456,55458,55460],{"class":27,"line":16893},[25,55453,55373],{"class":244},[25,55455,106],{"class":51371},[25,55457,55385],{"class":244},[25,55459,106],{"class":51371},[25,55461,51378],{"class":244},[25,55463,55464,55466,55468,55470,55472],{"class":27,"line":16906},[25,55465,55373],{"class":244},[25,55467,106],{"class":51371},[25,55469,55385],{"class":244},[25,55471,106],{"class":51371},[25,55473,51378],{"class":244},[25,55475,55476,55479,55481],{"class":27,"line":16911},[25,55477,55478],{"class":244},"      \u003C\u002F",[25,55480,103],{"class":51371},[25,55482,51378],{"class":244},[25,55484,55485,55487,55489],{"class":27,"line":16925},[25,55486,51847],{"class":244},[25,55488,51682],{"class":51371},[25,55490,51378],{"class":244},[25,55492,55493,55495,55497],{"class":27,"line":16930},[25,55494,52488],{"class":244},[25,55496,51682],{"class":51371},[25,55498,51378],{"class":244},[25,55500,55501,55503,55505],{"class":27,"line":16936},[25,55502,52215],{"class":244},[25,55504,51884],{"class":51371},[25,55506,51378],{"class":244},[25,55508,55509,55511,55514,55516],{"class":27,"line":16941},[25,55510,11331],{"class":240},[25,55512,55513],{"class":35}," arrImage",[25,55515,13674],{"class":240},[25,55517,55518],{"class":244}," [\n",[25,55520,55521,55524,55527,55530,55533,55536,55539],{"class":27,"line":16955},[25,55522,55523],{"class":244},"      { url: ",[25,55525,55526],{"class":45},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[25,55528,55529],{"class":244},", title: ",[25,55531,55532],{"class":45},"'对人类来说会不会太超前了?'",[25,55534,55535],{"class":244},", color: ",[25,55537,55538],{"class":45},"'rgba(100,67,68)'",[25,55540,55541],{"class":244}," },\n",[25,55543,55544,55546,55549,55551,55554,55556,55559],{"class":27,"line":16960},[25,55545,55523],{"class":244},[25,55547,55548],{"class":45},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[25,55550,55529],{"class":244},[25,55552,55553],{"class":45},"'开启剑与雪的黑暗传说!'",[25,55555,55535],{"class":244},[25,55557,55558],{"class":45},"'rgba(43,35,26)'",[25,55560,55541],{"class":244},[25,55562,55563,55565,55568,55570,55573,55575,55578],{"class":27,"line":16965},[25,55564,55523],{"class":244},[25,55566,55567],{"class":45},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[25,55569,55529],{"class":244},[25,55571,55572],{"class":45},"'真正的jo厨出现了!'",[25,55574,55535],{"class":244},[25,55576,55577],{"class":45},"'rgba(36,31,33)'",[25,55579,55541],{"class":244},[25,55581,55582,55584,55587,55589,55592,55594,55597],{"class":27,"line":16979},[25,55583,55523],{"class":244},[25,55585,55586],{"class":45},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[25,55588,55529],{"class":244},[25,55590,55591],{"class":45},"'李玉刚:让世界通过b站看到东方大国文化'",[25,55593,55535],{"class":244},[25,55595,55596],{"class":45},"'rgba(139,98,66)'",[25,55598,55541],{"class":244},[25,55600,55601,55603,55606,55608,55611,55613,55616],{"class":27,"line":16991},[25,55602,55523],{"class":244},[25,55604,55605],{"class":45},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[25,55607,55529],{"class":244},[25,55609,55610],{"class":45},"'快来分享你的寒假日常吧'",[25,55612,55535],{"class":244},[25,55614,55615],{"class":45},"'rgba(67,90,92)'",[25,55617,55541],{"class":244},[25,55619,55620,55622,55625,55627,55630,55632,55635],{"class":27,"line":16996},[25,55621,55523],{"class":244},[25,55623,55624],{"class":45},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[25,55626,55529],{"class":244},[25,55628,55629],{"class":45},"'哔哩哔哩小年YEAR'",[25,55631,55535],{"class":244},[25,55633,55634],{"class":45},"'rgba(166,131,143)'",[25,55636,55541],{"class":244},[25,55638,55639,55641,55644,55646,55649,55651,55654],{"class":27,"line":17009},[25,55640,55523],{"class":244},[25,55642,55643],{"class":45},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[25,55645,55529],{"class":244},[25,55647,55648],{"class":45},"'一站式解决你的电脑配置问题'",[25,55650,55535],{"class":244},[25,55652,55653],{"class":45},"'rgba(53,29,25)'",[25,55655,55541],{"class":244},[25,55657,55658,55660,55663,55665,55668,55670,55673],{"class":27,"line":17014},[25,55659,55523],{"class":244},[25,55661,55662],{"class":45},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[25,55664,55529],{"class":244},[25,55666,55667],{"class":45},"'谁不想和小猫咪贴贴呢?'",[25,55669,55535],{"class":244},[25,55671,55672],{"class":45},"'rgba(99,72,114)'",[25,55674,55675],{"class":244}," }\n",[25,55677,55678],{"class":27,"line":17019},[25,55679,53180],{"class":244},[25,55681,55682,55684,55687,55689,55691,55693,55695,55698],{"class":27,"line":17024},[25,55683,11331],{"class":240},[25,55685,55686],{"class":35}," img",[25,55688,13674],{"class":240},[25,55690,54467],{"class":244},[25,55692,54470],{"class":31},[25,55694,245],{"class":244},[25,55696,55697],{"class":45},"'.slider-wrapper img'",[25,55699,251],{"class":244},[25,55701,55702,55704,55706,55708,55710,55712,55714,55717],{"class":27,"line":17037},[25,55703,11331],{"class":240},[25,55705,6935],{"class":35},[25,55707,13674],{"class":240},[25,55709,54467],{"class":244},[25,55711,54470],{"class":31},[25,55713,245],{"class":244},[25,55715,55716],{"class":45},"'.slider-footer p'",[25,55718,251],{"class":244},[25,55720,55721,55723,55726,55728,55730,55732,55734,55737],{"class":27,"line":17042},[25,55722,11331],{"class":240},[25,55724,55725],{"class":35}," color",[25,55727,13674],{"class":240},[25,55729,54467],{"class":244},[25,55731,54470],{"class":31},[25,55733,245],{"class":244},[25,55735,55736],{"class":45},"'.slider-footer'",[25,55738,251],{"class":244},[25,55740,55741,55743,55746,55748,55750,55753,55755,55758],{"class":27,"line":32704},[25,55742,11331],{"class":240},[25,55744,55745],{"class":35}," lis",[25,55747,13674],{"class":240},[25,55749,54467],{"class":244},[25,55751,55752],{"class":31},"querySelectorAll",[25,55754,245],{"class":244},[25,55756,55757],{"class":45},"'.slider-footer ul li'",[25,55759,251],{"class":244},[25,55761,55762,55764,55766,55768],{"class":27,"line":32710},[25,55763,52290],{"class":240},[25,55765,9548],{"class":244},[25,55767,290],{"class":240},[25,55769,55770],{"class":35}," 1\n",[25,55772,55773,55775,55778,55780,55782,55784,55786],{"class":27,"line":32716},[25,55774,52290],{"class":240},[25,55776,55777],{"class":244}," timer ",[25,55779,290],{"class":240},[25,55781,54515],{"class":31},[25,55783,245],{"class":244},[25,55785,54520],{"class":240},[25,55787,54523],{"class":244},[25,55789,55790,55793,55795],{"class":27,"line":32722},[25,55791,55792],{"class":244},"      img.src ",[25,55794,290],{"class":240},[25,55796,55797],{"class":244}," arrImage[i].url\n",[25,55799,55800,55803,55805],{"class":27,"line":32728},[25,55801,55802],{"class":244},"      p.innerHTML ",[25,55804,290],{"class":240},[25,55806,55807],{"class":244}," arrImage[i].title\n",[25,55809,55810,55813,55815],{"class":27,"line":32739},[25,55811,55812],{"class":244},"      color.style.backgroundColor ",[25,55814,290],{"class":240},[25,55816,55817],{"class":244}," arrImage[i].color\n",[25,55819,55820],{"class":27,"line":32745},[25,55821,55822],{"class":302},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[25,55824,55825],{"class":27,"line":32765},[25,55826,55827],{"class":302},"      \u002F\u002F li.classList.add('activate')\n",[25,55829,55830],{"class":27,"line":32771},[25,55831,55832],{"class":302},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[25,55834,55835],{"class":27,"line":32782},[25,55836,55837],{"class":302},"      \u002F\u002F lis[i].classList.remove('activate')\n",[25,55839,55840,55843,55845,55847,55850,55853,55856,55858,55861],{"class":27,"line":32788},[25,55841,55842],{"class":244},"      document.",[25,55844,54470],{"class":31},[25,55846,245],{"class":244},[25,55848,55849],{"class":45},"'.activate'",[25,55851,55852],{"class":244},")?.classList.",[25,55854,55855],{"class":31},"toggle",[25,55857,245],{"class":244},[25,55859,55860],{"class":45},"'activate'",[25,55862,251],{"class":244},[25,55864,55865,55868,55870,55872,55874],{"class":27,"line":32794},[25,55866,55867],{"class":244},"      lis[i].classList.",[25,55869,5444],{"class":31},[25,55871,245],{"class":244},[25,55873,55860],{"class":45},[25,55875,251],{"class":244},[25,55877,55878],{"class":27,"line":32800},[25,55879,2510],{"emptyLinePlaceholder":167},[25,55881,55882,55885,55887,55889,55891,55893,55895,55897,55900],{"class":27,"line":32806},[25,55883,55884],{"class":244},"      i ",[25,55886,290],{"class":240},[25,55888,54554],{"class":244},[25,55890,724],{"class":240},[25,55892,25225],{"class":35},[25,55894,13824],{"class":244},[25,55896,571],{"class":240},[25,55898,55899],{"class":244}," arrImage.",[25,55901,55902],{"class":35},"length\n",[25,55904,55905],{"class":27,"line":32812},[25,55906,2510],{"emptyLinePlaceholder":167},[25,55908,55909,55911,55913],{"class":27,"line":32818},[25,55910,54606],{"class":244},[25,55912,6520],{"class":35},[25,55914,251],{"class":244},[25,55916,55917,55919,55921],{"class":27,"line":32824},[25,55918,52488],{"class":244},[25,55920,51884],{"class":51371},[25,55922,51378],{"class":244},[25,55924,55925,55927,55929],{"class":27,"line":32844},[25,55926,51856],{"class":244},[25,55928,51871],{"class":51371},[25,55930,51378],{"class":244},[25,55932,55933],{"class":27,"line":32850},[25,55934,2510],{"emptyLinePlaceholder":167},[25,55936,55937,55939,55941],{"class":27,"line":32866},[25,55938,51856],{"class":244},[25,55940,50706],{"class":51371},[25,55942,51378],{"class":244},[99,55944,55945],{},[155,55946],{"alt":20,"src":55947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[99,55949,55950],{},"?.就是短路保护,确保输出正常进行",[99,55952,55953],{},"不要忘记取余%,有时候可以用",[99,55955,55956],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[194,55958,55959],{"start":39},[106,55960,55961],{},"法2",[15,55963,55965],{"className":50704,"code":55964,"language":50706,"meta":20,"style":20},"\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",[22,55966,55967,55977,55991,55995,56003,56017,56037,56049,56057,56063,56073,56083,56087,56091,56097,56107,56111,56115,56121,56131,56143,56155,56169,56173,56177,56183,56193,56203,56213,56225,56237,56247,56251,56255,56263,56273,56285,56297,56309,56313,56317,56323,56333,56345,56357,56367,56377,56387,56399,56411,56415,56419,56427,56439,56451,56477,56489,56493,56497,56503,56513,56517,56525,56533,56537,56545,56559,56573,56593,56601,56615,56627,56635,56653,56665,56677,56689,56701,56713,56725,56737,56745,56753,56761,56769,56780,56796,56812,56828,56844,56860,56876,56892,56908,56912,56917,56935,56953,56963,56968,56973,56984,56990,57005,57014,57018,57023,57032,57037,57046,57051,57056,57061,57084,57114,57118,57126,57130,57138,57146,57150],{"__ignoreMap":20},[25,55968,55969,55971,55973,55975],{"class":27,"line":28},[25,55970,51368],{"class":244},[25,55972,51372],{"class":51371},[25,55974,51375],{"class":31},[25,55976,51378],{"class":244},[25,55978,55979,55981,55983,55985,55987,55989],{"class":27,"line":39},[25,55980,1153],{"class":244},[25,55982,50706],{"class":51371},[25,55984,51387],{"class":31},[25,55986,290],{"class":244},[25,55988,51392],{"class":45},[25,55990,51378],{"class":244},[25,55992,55993],{"class":27,"line":51},[25,55994,2510],{"emptyLinePlaceholder":167},[25,55996,55997,55999,56001],{"class":27,"line":59},[25,55998,1153],{"class":244},[25,56000,51405],{"class":51371},[25,56002,51378],{"class":244},[25,56004,56005,56007,56009,56011,56013,56015],{"class":27,"line":67},[25,56006,52215],{"class":244},[25,56008,51415],{"class":51371},[25,56010,51418],{"class":31},[25,56012,290],{"class":244},[25,56014,51423],{"class":45},[25,56016,51378],{"class":244},[25,56018,56019,56021,56023,56025,56027,56029,56031,56033,56035],{"class":27,"line":75},[25,56020,52215],{"class":244},[25,56022,51415],{"class":51371},[25,56024,15030],{"class":31},[25,56026,290],{"class":244},[25,56028,51462],{"class":45},[25,56030,51442],{"class":31},[25,56032,290],{"class":244},[25,56034,51469],{"class":45},[25,56036,51378],{"class":244},[25,56038,56039,56041,56043,56045,56047],{"class":27,"line":83},[25,56040,52215],{"class":244},[25,56042,51478],{"class":51371},[25,56044,51481],{"class":244},[25,56046,51478],{"class":51371},[25,56048,51378],{"class":244},[25,56050,56051,56053,56055],{"class":27,"line":91},[25,56052,52215],{"class":244},[25,56054,159],{"class":51371},[25,56056,51378],{"class":244},[25,56058,56059,56061],{"class":27,"line":1429},[25,56060,6513],{"class":51371},[25,56062,15682],{"class":244},[25,56064,56065,56067,56069,56071],{"class":27,"line":1441},[25,56066,54766],{"class":35},[25,56068,51508],{"class":244},[25,56070,434],{"class":35},[25,56072,1403],{"class":244},[25,56074,56075,56077,56079,56081],{"class":27,"line":1723},[25,56076,54777],{"class":35},[25,56078,51508],{"class":244},[25,56080,434],{"class":35},[25,56082,1403],{"class":244},[25,56084,56085],{"class":27,"line":1728},[25,56086,2297],{"class":244},[25,56088,56089],{"class":27,"line":1734},[25,56090,2510],{"emptyLinePlaceholder":167},[25,56092,56093,56095],{"class":27,"line":1739},[25,56094,54796],{"class":51371},[25,56096,15682],{"class":244},[25,56098,56099,56101,56103,56105],{"class":27,"line":1753},[25,56100,54803],{"class":35},[25,56102,51508],{"class":244},[25,56104,54808],{"class":35},[25,56106,1403],{"class":244},[25,56108,56109],{"class":27,"line":1758},[25,56110,2297],{"class":244},[25,56112,56113],{"class":27,"line":1764},[25,56114,2510],{"emptyLinePlaceholder":167},[25,56116,56117,56119],{"class":27,"line":1785},[25,56118,54823],{"class":31},[25,56120,15682],{"class":244},[25,56122,56123,56125,56127,56129],{"class":27,"line":1790},[25,56124,54830],{"class":35},[25,56126,51508],{"class":244},[25,56128,54835],{"class":35},[25,56130,1403],{"class":244},[25,56132,56133,56135,56137,56139,56141],{"class":27,"line":1804},[25,56134,54842],{"class":35},[25,56136,51508],{"class":244},[25,56138,54847],{"class":35},[25,56140,51563],{"class":240},[25,56142,1403],{"class":244},[25,56144,56145,56147,56149,56151,56153],{"class":27,"line":1809},[25,56146,54856],{"class":35},[25,56148,51508],{"class":244},[25,56150,1650],{"class":35},[25,56152,51563],{"class":240},[25,56154,1403],{"class":244},[25,56156,56157,56159,56161,56163,56165,56167],{"class":27,"line":1838},[25,56158,54777],{"class":35},[25,56160,51508],{"class":244},[25,56162,554],{"class":35},[25,56164,51563],{"class":240},[25,56166,51627],{"class":35},[25,56168,1403],{"class":244},[25,56170,56171],{"class":27,"line":1843},[25,56172,2297],{"class":244},[25,56174,56175],{"class":27,"line":1860},[25,56176,2510],{"emptyLinePlaceholder":167},[25,56178,56179,56181],{"class":27,"line":1865},[25,56180,54891],{"class":31},[25,56182,15682],{"class":244},[25,56184,56185,56187,56189,56191],{"class":27,"line":1870},[25,56186,54830],{"class":35},[25,56188,51508],{"class":244},[25,56190,54902],{"class":35},[25,56192,1403],{"class":244},[25,56194,56195,56197,56199,56201],{"class":27,"line":1875},[25,56196,54909],{"class":35},[25,56198,51508],{"class":244},[25,56200,434],{"class":35},[25,56202,1403],{"class":244},[25,56204,56205,56207,56209,56211],{"class":27,"line":1889},[25,56206,54920],{"class":35},[25,56208,51508],{"class":244},[25,56210,434],{"class":35},[25,56212,1403],{"class":244},[25,56214,56215,56217,56219,56221,56223],{"class":27,"line":1894},[25,56216,54842],{"class":35},[25,56218,51508],{"class":244},[25,56220,554],{"class":35},[25,56222,571],{"class":240},[25,56224,1403],{"class":244},[25,56226,56227,56229,56231,56233,56235],{"class":27,"line":2687},[25,56228,54856],{"class":35},[25,56230,51508],{"class":244},[25,56232,818],{"class":35},[25,56234,571],{"class":240},[25,56236,1403],{"class":244},[25,56238,56239,56241,56243,56245],{"class":27,"line":2701},[25,56240,54955],{"class":35},[25,56242,51508],{"class":244},[25,56244,54960],{"class":35},[25,56246,1403],{"class":244},[25,56248,56249],{"class":27,"line":2709},[25,56250,2297],{"class":244},[25,56252,56253],{"class":27,"line":2714},[25,56254,2510],{"emptyLinePlaceholder":167},[25,56256,56257,56259,56261],{"class":27,"line":2720},[25,56258,54891],{"class":31},[25,56260,6935],{"class":51371},[25,56262,15682],{"class":244},[25,56264,56265,56267,56269,56271],{"class":27,"line":2726},[25,56266,54830],{"class":35},[25,56268,51508],{"class":244},[25,56270,54902],{"class":35},[25,56272,1403],{"class":244},[25,56274,56275,56277,56279,56281,56283],{"class":27,"line":2731},[25,56276,54993],{"class":35},[25,56278,51508],{"class":244},[25,56280,1144],{"class":35},[25,56282,51563],{"class":240},[25,56284,1403],{"class":244},[25,56286,56287,56289,56291,56293,56295],{"class":27,"line":8058},[25,56288,54909],{"class":35},[25,56290,51508],{"class":244},[25,56292,943],{"class":35},[25,56294,51563],{"class":240},[25,56296,1403],{"class":244},[25,56298,56299,56301,56303,56305,56307],{"class":27,"line":8082},[25,56300,55018],{"class":35},[25,56302,51508],{"class":244},[25,56304,562],{"class":35},[25,56306,51563],{"class":240},[25,56308,1403],{"class":244},[25,56310,56311],{"class":27,"line":8087},[25,56312,2297],{"class":244},[25,56314,56315],{"class":27,"line":8093},[25,56316,2510],{"emptyLinePlaceholder":167},[25,56318,56319,56321],{"class":27,"line":8120},[25,56320,55039],{"class":51371},[25,56322,15682],{"class":244},[25,56324,56325,56327,56329,56331],{"class":27,"line":8125},[25,56326,54830],{"class":35},[25,56328,51508],{"class":244},[25,56330,54902],{"class":35},[25,56332,1403],{"class":244},[25,56334,56335,56337,56339,56341,56343],{"class":27,"line":8131},[25,56336,55018],{"class":35},[25,56338,51508],{"class":244},[25,56340,1024],{"class":35},[25,56342,51563],{"class":240},[25,56344,1403],{"class":244},[25,56346,56347,56349,56351,56353,56355],{"class":27,"line":8143},[25,56348,54909],{"class":35},[25,56350,51508],{"class":244},[25,56352,943],{"class":35},[25,56354,51563],{"class":240},[25,56356,1403],{"class":244},[25,56358,56359,56361,56363,56365],{"class":27,"line":8155},[25,56360,55080],{"class":35},[25,56362,51508],{"class":244},[25,56364,51548],{"class":35},[25,56366,1403],{"class":244},[25,56368,56369,56371,56373,56375],{"class":27,"line":8167},[25,56370,55091],{"class":35},[25,56372,51508],{"class":244},[25,56374,51739],{"class":35},[25,56376,1403],{"class":244},[25,56378,56379,56381,56383,56385],{"class":27,"line":9826},[25,56380,54830],{"class":35},[25,56382,51508],{"class":244},[25,56384,54902],{"class":35},[25,56386,1403],{"class":244},[25,56388,56389,56391,56393,56395,56397],{"class":27,"line":9851},[25,56390,54842],{"class":35},[25,56392,51508],{"class":244},[25,56394,4102],{"class":35},[25,56396,51563],{"class":240},[25,56398,1403],{"class":244},[25,56400,56401,56403,56405,56407,56409],{"class":27,"line":9874},[25,56402,54856],{"class":35},[25,56404,51508],{"class":244},[25,56406,943],{"class":35},[25,56408,51563],{"class":240},[25,56410,1403],{"class":244},[25,56412,56413],{"class":27,"line":9898},[25,56414,2297],{"class":244},[25,56416,56417],{"class":27,"line":9903},[25,56418,2510],{"emptyLinePlaceholder":167},[25,56420,56421,56423,56425],{"class":27,"line":9908},[25,56422,55039],{"class":51371},[25,56424,55146],{"class":51371},[25,56426,15682],{"class":244},[25,56428,56429,56431,56433,56435,56437],{"class":27,"line":9913},[25,56430,54842],{"class":35},[25,56432,51508],{"class":244},[25,56434,943],{"class":35},[25,56436,51563],{"class":240},[25,56438,1403],{"class":244},[25,56440,56441,56443,56445,56447,56449],{"class":27,"line":9922},[25,56442,54856],{"class":35},[25,56444,51508],{"class":244},[25,56446,943],{"class":35},[25,56448,51563],{"class":240},[25,56450,1403],{"class":244},[25,56452,56453,56455,56457,56459,56461,56463,56465,56467,56469,56471,56473,56475],{"class":27,"line":9927},[25,56454,54955],{"class":35},[25,56456,51508],{"class":244},[25,56458,55181],{"class":35},[25,56460,245],{"class":244},[25,56462,434],{"class":35},[25,56464,12545],{"class":244},[25,56466,434],{"class":35},[25,56468,12545],{"class":244},[25,56470,434],{"class":35},[25,56472,12545],{"class":244},[25,56474,55198],{"class":35},[25,56476,2829],{"class":244},[25,56478,56479,56481,56483,56485,56487],{"class":27,"line":9933},[25,56480,55205],{"class":35},[25,56482,51508],{"class":244},[25,56484,689],{"class":35},[25,56486,51563],{"class":240},[25,56488,1403],{"class":244},[25,56490,56491],{"class":27,"line":9954},[25,56492,2297],{"class":244},[25,56494,56495],{"class":27,"line":9960},[25,56496,2510],{"emptyLinePlaceholder":167},[25,56498,56499,56501],{"class":27,"line":9974},[25,56500,55226],{"class":31},[25,56502,15682],{"class":244},[25,56504,56505,56507,56509,56511],{"class":27,"line":9980},[25,56506,54955],{"class":35},[25,56508,51508],{"class":244},[25,56510,55237],{"class":35},[25,56512,1403],{"class":244},[25,56514,56515],{"class":27,"line":10007},[25,56516,2297],{"class":244},[25,56518,56519,56521,56523],{"class":27,"line":10016},[25,56520,52488],{"class":244},[25,56522,159],{"class":51371},[25,56524,51378],{"class":244},[25,56526,56527,56529,56531],{"class":27,"line":10022},[25,56528,51856],{"class":244},[25,56530,51405],{"class":51371},[25,56532,51378],{"class":244},[25,56534,56535],{"class":27,"line":10030},[25,56536,2510],{"emptyLinePlaceholder":167},[25,56538,56539,56541,56543],{"class":27,"line":10035},[25,56540,1153],{"class":244},[25,56542,51871],{"class":51371},[25,56544,51378],{"class":244},[25,56546,56547,56549,56551,56553,56555,56557],{"class":27,"line":16714},[25,56548,52215],{"class":244},[25,56550,51682],{"class":51371},[25,56552,53557],{"class":31},[25,56554,290],{"class":244},[25,56556,53562],{"class":45},[25,56558,51378],{"class":244},[25,56560,56561,56563,56565,56567,56569,56571],{"class":27,"line":16720},[25,56562,51412],{"class":244},[25,56564,51682],{"class":51371},[25,56566,53557],{"class":31},[25,56568,290],{"class":244},[25,56570,55298],{"class":45},[25,56572,51378],{"class":244},[25,56574,56575,56577,56579,56581,56583,56585,56587,56589,56591],{"class":27,"line":16743},[25,56576,55305],{"class":244},[25,56578,155],{"class":51371},[25,56580,55310],{"class":31},[25,56582,290],{"class":244},[25,56584,55315],{"class":45},[25,56586,55318],{"class":31},[25,56588,290],{"class":244},[25,56590,7762],{"class":45},[25,56592,51378],{"class":244},[25,56594,56595,56597,56599],{"class":27,"line":16749},[25,56596,51847],{"class":244},[25,56598,51682],{"class":51371},[25,56600,51378],{"class":244},[25,56602,56603,56605,56607,56609,56611,56613],{"class":27,"line":16772},[25,56604,51412],{"class":244},[25,56606,51682],{"class":51371},[25,56608,53557],{"class":31},[25,56610,290],{"class":244},[25,56612,55345],{"class":45},[25,56614,51378],{"class":244},[25,56616,56617,56619,56621,56623,56625],{"class":27,"line":16786},[25,56618,55305],{"class":244},[25,56620,99],{"class":51371},[25,56622,55356],{"class":244},[25,56624,99],{"class":51371},[25,56626,51378],{"class":244},[25,56628,56629,56631,56633],{"class":27,"line":16806},[25,56630,55305],{"class":244},[25,56632,103],{"class":51371},[25,56634,51378],{"class":244},[25,56636,56637,56639,56641,56643,56645,56647,56649,56651],{"class":27,"line":16812},[25,56638,55373],{"class":244},[25,56640,106],{"class":51371},[25,56642,53557],{"class":31},[25,56644,290],{"class":244},[25,56646,55382],{"class":45},[25,56648,55385],{"class":244},[25,56650,106],{"class":51371},[25,56652,51378],{"class":244},[25,56654,56655,56657,56659,56661,56663],{"class":27,"line":16823},[25,56656,55373],{"class":244},[25,56658,106],{"class":51371},[25,56660,55385],{"class":244},[25,56662,106],{"class":51371},[25,56664,51378],{"class":244},[25,56666,56667,56669,56671,56673,56675],{"class":27,"line":16846},[25,56668,55373],{"class":244},[25,56670,106],{"class":51371},[25,56672,55385],{"class":244},[25,56674,106],{"class":51371},[25,56676,51378],{"class":244},[25,56678,56679,56681,56683,56685,56687],{"class":27,"line":16868},[25,56680,55373],{"class":244},[25,56682,106],{"class":51371},[25,56684,55385],{"class":244},[25,56686,106],{"class":51371},[25,56688,51378],{"class":244},[25,56690,56691,56693,56695,56697,56699],{"class":27,"line":16873},[25,56692,55373],{"class":244},[25,56694,106],{"class":51371},[25,56696,55385],{"class":244},[25,56698,106],{"class":51371},[25,56700,51378],{"class":244},[25,56702,56703,56705,56707,56709,56711],{"class":27,"line":16879},[25,56704,55373],{"class":244},[25,56706,106],{"class":51371},[25,56708,55385],{"class":244},[25,56710,106],{"class":51371},[25,56712,51378],{"class":244},[25,56714,56715,56717,56719,56721,56723],{"class":27,"line":16893},[25,56716,55373],{"class":244},[25,56718,106],{"class":51371},[25,56720,55385],{"class":244},[25,56722,106],{"class":51371},[25,56724,51378],{"class":244},[25,56726,56727,56729,56731,56733,56735],{"class":27,"line":16906},[25,56728,55373],{"class":244},[25,56730,106],{"class":51371},[25,56732,55385],{"class":244},[25,56734,106],{"class":51371},[25,56736,51378],{"class":244},[25,56738,56739,56741,56743],{"class":27,"line":16911},[25,56740,55478],{"class":244},[25,56742,103],{"class":51371},[25,56744,51378],{"class":244},[25,56746,56747,56749,56751],{"class":27,"line":16925},[25,56748,51847],{"class":244},[25,56750,51682],{"class":51371},[25,56752,51378],{"class":244},[25,56754,56755,56757,56759],{"class":27,"line":16930},[25,56756,52488],{"class":244},[25,56758,51682],{"class":51371},[25,56760,51378],{"class":244},[25,56762,56763,56765,56767],{"class":27,"line":16936},[25,56764,52215],{"class":244},[25,56766,51884],{"class":51371},[25,56768,51378],{"class":244},[25,56770,56771,56773,56776,56778],{"class":27,"line":16941},[25,56772,11331],{"class":240},[25,56774,56775],{"class":35}," sliderData",[25,56777,13674],{"class":240},[25,56779,55518],{"class":244},[25,56781,56782,56784,56786,56788,56790,56792,56794],{"class":27,"line":16955},[25,56783,55523],{"class":244},[25,56785,55526],{"class":45},[25,56787,55529],{"class":244},[25,56789,55532],{"class":45},[25,56791,55535],{"class":244},[25,56793,55538],{"class":45},[25,56795,55541],{"class":244},[25,56797,56798,56800,56802,56804,56806,56808,56810],{"class":27,"line":16960},[25,56799,55523],{"class":244},[25,56801,55548],{"class":45},[25,56803,55529],{"class":244},[25,56805,55553],{"class":45},[25,56807,55535],{"class":244},[25,56809,55558],{"class":45},[25,56811,55541],{"class":244},[25,56813,56814,56816,56818,56820,56822,56824,56826],{"class":27,"line":16965},[25,56815,55523],{"class":244},[25,56817,55567],{"class":45},[25,56819,55529],{"class":244},[25,56821,55572],{"class":45},[25,56823,55535],{"class":244},[25,56825,55577],{"class":45},[25,56827,55541],{"class":244},[25,56829,56830,56832,56834,56836,56838,56840,56842],{"class":27,"line":16979},[25,56831,55523],{"class":244},[25,56833,55586],{"class":45},[25,56835,55529],{"class":244},[25,56837,55591],{"class":45},[25,56839,55535],{"class":244},[25,56841,55596],{"class":45},[25,56843,55541],{"class":244},[25,56845,56846,56848,56850,56852,56854,56856,56858],{"class":27,"line":16991},[25,56847,55523],{"class":244},[25,56849,55605],{"class":45},[25,56851,55529],{"class":244},[25,56853,55610],{"class":45},[25,56855,55535],{"class":244},[25,56857,55615],{"class":45},[25,56859,55541],{"class":244},[25,56861,56862,56864,56866,56868,56870,56872,56874],{"class":27,"line":16996},[25,56863,55523],{"class":244},[25,56865,55624],{"class":45},[25,56867,55529],{"class":244},[25,56869,55629],{"class":45},[25,56871,55535],{"class":244},[25,56873,55634],{"class":45},[25,56875,55541],{"class":244},[25,56877,56878,56880,56882,56884,56886,56888,56890],{"class":27,"line":17009},[25,56879,55523],{"class":244},[25,56881,55643],{"class":45},[25,56883,55529],{"class":244},[25,56885,55648],{"class":45},[25,56887,55535],{"class":244},[25,56889,55653],{"class":45},[25,56891,55541],{"class":244},[25,56893,56894,56896,56898,56900,56902,56904,56906],{"class":27,"line":17014},[25,56895,55523],{"class":244},[25,56897,55662],{"class":45},[25,56899,55529],{"class":244},[25,56901,55667],{"class":45},[25,56903,55535],{"class":244},[25,56905,55672],{"class":45},[25,56907,55675],{"class":244},[25,56909,56910],{"class":27,"line":17019},[25,56911,53180],{"class":244},[25,56913,56914],{"class":27,"line":17024},[25,56915,56916],{"class":302},"    \u002F\u002F 1.获取元素\n",[25,56918,56919,56921,56923,56925,56927,56929,56931,56933],{"class":27,"line":17037},[25,56920,11331],{"class":240},[25,56922,55686],{"class":35},[25,56924,13674],{"class":240},[25,56926,54467],{"class":244},[25,56928,54470],{"class":31},[25,56930,245],{"class":244},[25,56932,55697],{"class":45},[25,56934,251],{"class":244},[25,56936,56937,56939,56941,56943,56945,56947,56949,56951],{"class":27,"line":17042},[25,56938,11331],{"class":240},[25,56940,6935],{"class":35},[25,56942,13674],{"class":240},[25,56944,54467],{"class":244},[25,56946,54470],{"class":31},[25,56948,245],{"class":244},[25,56950,55716],{"class":45},[25,56952,251],{"class":244},[25,56954,56955,56957,56959,56961],{"class":27,"line":32704},[25,56956,52290],{"class":240},[25,56958,9548],{"class":244},[25,56960,290],{"class":240},[25,56962,47404],{"class":35},[25,56964,56965],{"class":27,"line":32710},[25,56966,56967],{"class":302},"    \u002F\u002F 2.开启定时器\n",[25,56969,56970],{"class":27,"line":32716},[25,56971,56972],{"class":302},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[25,56974,56975,56978,56980,56982],{"class":27,"line":32722},[25,56976,56977],{"class":31},"    setInterval",[25,56979,245],{"class":244},[25,56981,54520],{"class":240},[25,56983,54523],{"class":244},[25,56985,56986,56988],{"class":27,"line":32728},[25,56987,54528],{"class":244},[25,56989,2812],{"class":240},[25,56991,56992,56994,56996,56998,57001,57003],{"class":27,"line":32739},[25,56993,54551],{"class":240},[25,56995,54554],{"class":244},[25,56997,1821],{"class":240},[25,56999,57000],{"class":244}," sliderData.",[25,57002,52039],{"class":35},[25,57004,12552],{"class":244},[25,57006,57007,57010,57012],{"class":27,"line":32745},[25,57008,57009],{"class":244},"        i ",[25,57011,290],{"class":240},[25,57013,47404],{"class":35},[25,57015,57016],{"class":27,"line":32765},[25,57017,52469],{"class":244},[25,57019,57020],{"class":27,"line":32771},[25,57021,57022],{"class":302},"      \u002F\u002F 更换图片路径\n",[25,57024,57025,57027,57029],{"class":27,"line":32782},[25,57026,55792],{"class":244},[25,57028,290],{"class":240},[25,57030,57031],{"class":244}," sliderData[i].url\n",[25,57033,57034],{"class":27,"line":32788},[25,57035,57036],{"class":302},"      \u002F\u002F 把文字写到p里面\n",[25,57038,57039,57041,57043],{"class":27,"line":32794},[25,57040,55802],{"class":244},[25,57042,290],{"class":240},[25,57044,57045],{"class":244}," sliderData[i].title\n",[25,57047,57048],{"class":27,"line":32800},[25,57049,57050],{"class":302},"      \u002F\u002F 小圆点\n",[25,57052,57053],{"class":27,"line":32806},[25,57054,57055],{"class":302},"      \u002F\u002F 先删除以前的active\n",[25,57057,57058],{"class":27,"line":32812},[25,57059,57060],{"class":302},"      \u002F\u002F 只让当前li添加active\n",[25,57062,57063,57065,57067,57069,57072,57075,57078,57080,57082],{"class":27,"line":32818},[25,57064,55842],{"class":244},[25,57066,54470],{"class":31},[25,57068,245],{"class":244},[25,57070,57071],{"class":45},"'.slider-footer .activate'",[25,57073,57074],{"class":244},").classList.",[25,57076,57077],{"class":31},"remove",[25,57079,245],{"class":244},[25,57081,55860],{"class":45},[25,57083,251],{"class":244},[25,57085,57086,57088,57090,57092,57095,57097,57099,57101,57104,57106,57108,57110,57112],{"class":27,"line":32824},[25,57087,55842],{"class":244},[25,57089,54470],{"class":31},[25,57091,245],{"class":244},[25,57093,57094],{"class":45},"`.slider-footer ul li:nth-child(${",[25,57096,684],{"class":244},[25,57098,45637],{"class":240},[25,57100,25225],{"class":35},[25,57102,57103],{"class":45},"})`",[25,57105,57074],{"class":244},[25,57107,5444],{"class":31},[25,57109,245],{"class":244},[25,57111,55860],{"class":45},[25,57113,251],{"class":244},[25,57115,57116],{"class":27,"line":32844},[25,57117,2510],{"emptyLinePlaceholder":167},[25,57119,57120,57122,57124],{"class":27,"line":32850},[25,57121,54606],{"class":244},[25,57123,6520],{"class":35},[25,57125,251],{"class":244},[25,57127,57128],{"class":27,"line":32866},[25,57129,2510],{"emptyLinePlaceholder":167},[25,57131,57132,57134,57136],{"class":27,"line":32872},[25,57133,52488],{"class":244},[25,57135,51884],{"class":51371},[25,57137,51378],{"class":244},[25,57139,57140,57142,57144],{"class":27,"line":32886},[25,57141,51856],{"class":244},[25,57143,51871],{"class":51371},[25,57145,51378],{"class":244},[25,57147,57148],{"class":27,"line":32892},[25,57149,2510],{"emptyLinePlaceholder":167},[25,57151,57152,57154,57156],{"class":27,"line":32907},[25,57153,51856],{"class":244},[25,57155,50706],{"class":51371},[25,57157,51378],{"class":244},[210,57159,57161],{"id":57160},"_317-重要知识点","3.1.7 重要知识点",[99,57163,57164,57165],{},"浏览器在渲染文本时， ",[392,57166,57167],{},"没有空格或换行符就没有“断行点”",[99,57169,57170],{},[155,57171],{"alt":20,"src":57172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[99,57174,57175],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[99,57177,57178],{},[155,57179],{"alt":20,"src":57180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[99,57182,57183],{},[155,57184],{"alt":20,"src":57185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[182,57187,57189],{"id":57188},"_32-dom事件基础","3.2 DOM事件基础",[210,57191,57193],{"id":57192},"_321-事件监听","3.2.1 事件监听",[99,57195,57196],{},[155,57197],{"alt":20,"src":57198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[99,57200,57201],{},"事件监听有响应的发生",[99,57203,57204],{},[155,57205],{"alt":20,"src":57206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[99,57208,57209],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[99,57211,57212],{},"对于有名函数,要执行的函数名后边不要加()",[210,57214,57216],{"id":57215},"_322-随机点名案例","3.2.2 随机点名案例",[15,57218,57220],{"className":50704,"code":57219,"language":50706,"meta":20,"style":20},"\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",[22,57221,57222,57232,57246,57250,57258,57272,57292,57304,57312,57318,57328,57338,57342,57346,57353,57364,57368,57372,57378,57390,57404,57414,57426,57439,57443,57447,57454,57458,57471,57483,57495,57499,57503,57507,57514,57524,57528,57532,57541,57553,57565,57580,57584,57592,57600,57604,57612,57625,57639,57652,57672,57680,57695,57715,57735,57743,57747,57755,57760,57796,57816,57821,57840,57845,57856,57861,57872,57877,57896,57911,57916,57942,57952,57961,57966,57982,57987,57992,57997,58012,58016,58020,58025,58044,58061,58069,58074,58089,58093,58097,58105,58113,58117],{"__ignoreMap":20},[25,57223,57224,57226,57228,57230],{"class":27,"line":28},[25,57225,51368],{"class":244},[25,57227,51372],{"class":51371},[25,57229,51375],{"class":31},[25,57231,51378],{"class":244},[25,57233,57234,57236,57238,57240,57242,57244],{"class":27,"line":39},[25,57235,1153],{"class":244},[25,57237,50706],{"class":51371},[25,57239,51387],{"class":31},[25,57241,290],{"class":244},[25,57243,51392],{"class":45},[25,57245,51378],{"class":244},[25,57247,57248],{"class":27,"line":51},[25,57249,2510],{"emptyLinePlaceholder":167},[25,57251,57252,57254,57256],{"class":27,"line":59},[25,57253,1153],{"class":244},[25,57255,51405],{"class":51371},[25,57257,51378],{"class":244},[25,57259,57260,57262,57264,57266,57268,57270],{"class":27,"line":67},[25,57261,52215],{"class":244},[25,57263,51415],{"class":51371},[25,57265,51418],{"class":31},[25,57267,290],{"class":244},[25,57269,51423],{"class":45},[25,57271,51378],{"class":244},[25,57273,57274,57276,57278,57280,57282,57284,57286,57288,57290],{"class":27,"line":75},[25,57275,52215],{"class":244},[25,57277,51415],{"class":51371},[25,57279,15030],{"class":31},[25,57281,290],{"class":244},[25,57283,51462],{"class":45},[25,57285,51442],{"class":31},[25,57287,290],{"class":244},[25,57289,51469],{"class":45},[25,57291,51378],{"class":244},[25,57293,57294,57296,57298,57300,57302],{"class":27,"line":83},[25,57295,52215],{"class":244},[25,57297,51478],{"class":51371},[25,57299,51481],{"class":244},[25,57301,51478],{"class":51371},[25,57303,51378],{"class":244},[25,57305,57306,57308,57310],{"class":27,"line":91},[25,57307,52215],{"class":244},[25,57309,159],{"class":51371},[25,57311,51378],{"class":244},[25,57313,57314,57316],{"class":27,"line":1429},[25,57315,6513],{"class":51371},[25,57317,15682],{"class":244},[25,57319,57320,57322,57324,57326],{"class":27,"line":1441},[25,57321,54777],{"class":35},[25,57323,51508],{"class":244},[25,57325,434],{"class":35},[25,57327,1403],{"class":244},[25,57329,57330,57332,57334,57336],{"class":27,"line":1723},[25,57331,54766],{"class":35},[25,57333,51508],{"class":244},[25,57335,434],{"class":35},[25,57337,1403],{"class":244},[25,57339,57340],{"class":27,"line":1728},[25,57341,2297],{"class":244},[25,57343,57344],{"class":27,"line":1734},[25,57345,2510],{"emptyLinePlaceholder":167},[25,57347,57348,57351],{"class":27,"line":1739},[25,57349,57350],{"class":51371},"    h2",[25,57352,15682],{"class":244},[25,57354,57355,57358,57360,57362],{"class":27,"line":1753},[25,57356,57357],{"class":35},"      text-align",[25,57359,51508],{"class":244},[25,57361,51663],{"class":35},[25,57363,1403],{"class":244},[25,57365,57366],{"class":27,"line":1758},[25,57367,2297],{"class":244},[25,57369,57370],{"class":27,"line":1764},[25,57371,2510],{"emptyLinePlaceholder":167},[25,57373,57374,57376],{"class":27,"line":1785},[25,57375,54823],{"class":31},[25,57377,15682],{"class":244},[25,57379,57380,57382,57384,57386,57388],{"class":27,"line":1790},[25,57381,54842],{"class":35},[25,57383,51508],{"class":244},[25,57385,1650],{"class":35},[25,57387,51563],{"class":240},[25,57389,1403],{"class":244},[25,57391,57392,57394,57396,57398,57400,57402],{"class":27,"line":1804},[25,57393,54777],{"class":35},[25,57395,51508],{"class":244},[25,57397,899],{"class":35},[25,57399,51563],{"class":240},[25,57401,51627],{"class":35},[25,57403,1403],{"class":244},[25,57405,57406,57408,57410,57412],{"class":27,"line":1809},[25,57407,55080],{"class":35},[25,57409,51508],{"class":244},[25,57411,51548],{"class":35},[25,57413,1403],{"class":244},[25,57415,57416,57418,57420,57422,57424],{"class":27,"line":1838},[25,57417,54993],{"class":35},[25,57419,51508],{"class":244},[25,57421,1068],{"class":35},[25,57423,51563],{"class":240},[25,57425,1403],{"class":244},[25,57427,57428,57431,57433,57435,57437],{"class":27,"line":1843},[25,57429,57430],{"class":35},"      line-height",[25,57432,51508],{"class":244},[25,57434,644],{"class":35},[25,57436,51563],{"class":240},[25,57438,1403],{"class":244},[25,57440,57441],{"class":27,"line":1860},[25,57442,2297],{"class":244},[25,57444,57445],{"class":27,"line":1865},[25,57446,2510],{"emptyLinePlaceholder":167},[25,57448,57449,57452],{"class":27,"line":1870},[25,57450,57451],{"class":31},"    .qs",[25,57453,15682],{"class":244},[25,57455,57456],{"class":27,"line":1875},[25,57457,2510],{"emptyLinePlaceholder":167},[25,57459,57460,57462,57464,57467,57469],{"class":27,"line":1889},[25,57461,54842],{"class":35},[25,57463,51508],{"class":244},[25,57465,57466],{"class":35},"450",[25,57468,51563],{"class":240},[25,57470,1403],{"class":244},[25,57472,57473,57475,57477,57479,57481],{"class":27,"line":1894},[25,57474,54856],{"class":35},[25,57476,51508],{"class":244},[25,57478,644],{"class":35},[25,57480,51563],{"class":240},[25,57482,1403],{"class":244},[25,57484,57485,57488,57490,57493],{"class":27,"line":2687},[25,57486,57487],{"class":35},"      color",[25,57489,51508],{"class":244},[25,57491,57492],{"class":35},"red",[25,57494,1403],{"class":244},[25,57496,57497],{"class":27,"line":2701},[25,57498,2510],{"emptyLinePlaceholder":167},[25,57500,57501],{"class":27,"line":2709},[25,57502,2297],{"class":244},[25,57504,57505],{"class":27,"line":2714},[25,57506,2510],{"emptyLinePlaceholder":167},[25,57508,57509,57512],{"class":27,"line":2720},[25,57510,57511],{"class":31},"    .btns",[25,57513,15682],{"class":244},[25,57515,57516,57518,57520,57522],{"class":27,"line":2726},[25,57517,57357],{"class":35},[25,57519,51508],{"class":244},[25,57521,51663],{"class":35},[25,57523,1403],{"class":244},[25,57525,57526],{"class":27,"line":2731},[25,57527,2297],{"class":244},[25,57529,57530],{"class":27,"line":8058},[25,57531,2510],{"emptyLinePlaceholder":167},[25,57533,57534,57536,57539],{"class":27,"line":8082},[25,57535,57511],{"class":31},[25,57537,57538],{"class":51371}," button",[25,57540,15682],{"class":244},[25,57542,57543,57545,57547,57549,57551],{"class":27,"line":8087},[25,57544,54842],{"class":35},[25,57546,51508],{"class":244},[25,57548,1060],{"class":35},[25,57550,51563],{"class":240},[25,57552,1403],{"class":244},[25,57554,57555,57557,57559,57561,57563],{"class":27,"line":8093},[25,57556,54856],{"class":35},[25,57558,51508],{"class":244},[25,57560,516],{"class":35},[25,57562,51563],{"class":240},[25,57564,1403],{"class":244},[25,57566,57567,57569,57571,57573,57576,57578],{"class":27,"line":8120},[25,57568,54777],{"class":35},[25,57570,51508],{"class":244},[25,57572,434],{"class":35},[25,57574,57575],{"class":35}," 50",[25,57577,51563],{"class":240},[25,57579,1403],{"class":244},[25,57581,57582],{"class":27,"line":8125},[25,57583,2297],{"class":244},[25,57585,57586,57588,57590],{"class":27,"line":8131},[25,57587,52488],{"class":244},[25,57589,159],{"class":51371},[25,57591,51378],{"class":244},[25,57593,57594,57596,57598],{"class":27,"line":8143},[25,57595,51856],{"class":244},[25,57597,51405],{"class":51371},[25,57599,51378],{"class":244},[25,57601,57602],{"class":27,"line":8155},[25,57603,2510],{"emptyLinePlaceholder":167},[25,57605,57606,57608,57610],{"class":27,"line":8167},[25,57607,1153],{"class":244},[25,57609,51871],{"class":51371},[25,57611,51378],{"class":244},[25,57613,57614,57616,57618,57621,57623],{"class":27,"line":9826},[25,57615,52215],{"class":244},[25,57617,182],{"class":51371},[25,57619,57620],{"class":244},">随机点名\u003C\u002F",[25,57622,182],{"class":51371},[25,57624,51378],{"class":244},[25,57626,57627,57629,57631,57633,57635,57637],{"class":27,"line":9851},[25,57628,52215],{"class":244},[25,57630,51682],{"class":51371},[25,57632,53557],{"class":31},[25,57634,290],{"class":244},[25,57636,53562],{"class":45},[25,57638,51378],{"class":244},[25,57640,57641,57643,57645,57648,57650],{"class":27,"line":9874},[25,57642,51412],{"class":244},[25,57644,25],{"class":51371},[25,57646,57647],{"class":244},">名字是：\u003C\u002F",[25,57649,25],{"class":51371},[25,57651,51378],{"class":244},[25,57653,57654,57656,57658,57660,57662,57665,57668,57670],{"class":27,"line":9898},[25,57655,51412],{"class":244},[25,57657,51682],{"class":51371},[25,57659,53557],{"class":31},[25,57661,290],{"class":244},[25,57663,57664],{"class":45},"\"qs\"",[25,57666,57667],{"class":244},">这里显示姓名\u003C\u002F",[25,57669,51682],{"class":51371},[25,57671,51378],{"class":244},[25,57673,57674,57676,57678],{"class":27,"line":9903},[25,57675,52488],{"class":244},[25,57677,51682],{"class":51371},[25,57679,51378],{"class":244},[25,57681,57682,57684,57686,57688,57690,57693],{"class":27,"line":9908},[25,57683,52215],{"class":244},[25,57685,51682],{"class":51371},[25,57687,53557],{"class":31},[25,57689,290],{"class":244},[25,57691,57692],{"class":45},"\"btns\"",[25,57694,51378],{"class":244},[25,57696,57697,57699,57701,57703,57705,57708,57711,57713],{"class":27,"line":9913},[25,57698,51412],{"class":244},[25,57700,53958],{"class":51371},[25,57702,53557],{"class":31},[25,57704,290],{"class":244},[25,57706,57707],{"class":45},"\"start\"",[25,57709,57710],{"class":244},">开始\u003C\u002F",[25,57712,53958],{"class":51371},[25,57714,51378],{"class":244},[25,57716,57717,57719,57721,57723,57725,57728,57731,57733],{"class":27,"line":9922},[25,57718,51412],{"class":244},[25,57720,53958],{"class":51371},[25,57722,53557],{"class":31},[25,57724,290],{"class":244},[25,57726,57727],{"class":45},"\"end\"",[25,57729,57730],{"class":244},">结束\u003C\u002F",[25,57732,53958],{"class":51371},[25,57734,51378],{"class":244},[25,57736,57737,57739,57741],{"class":27,"line":9927},[25,57738,52488],{"class":244},[25,57740,51682],{"class":51371},[25,57742,51378],{"class":244},[25,57744,57745],{"class":27,"line":9933},[25,57746,2510],{"emptyLinePlaceholder":167},[25,57748,57749,57751,57753],{"class":27,"line":9954},[25,57750,52215],{"class":244},[25,57752,51884],{"class":51371},[25,57754,51378],{"class":244},[25,57756,57757],{"class":27,"line":9960},[25,57758,57759],{"class":302},"    \u002F\u002F 数据数组\n",[25,57761,57762,57764,57767,57769,57771,57774,57776,57779,57781,57784,57786,57789,57791,57794],{"class":27,"line":9974},[25,57763,11331],{"class":240},[25,57765,57766],{"class":35}," arr",[25,57768,13674],{"class":240},[25,57770,52297],{"class":244},[25,57772,57773],{"class":45},"'马超'",[25,57775,12545],{"class":244},[25,57777,57778],{"class":45},"'黄忠'",[25,57780,12545],{"class":244},[25,57782,57783],{"class":45},"'赵云'",[25,57785,12545],{"class":244},[25,57787,57788],{"class":45},"'关羽'",[25,57790,12545],{"class":244},[25,57792,57793],{"class":45},"'张飞'",[25,57795,33317],{"class":244},[25,57797,57798,57800,57803,57805,57807,57809,57811,57814],{"class":27,"line":9980},[25,57799,11331],{"class":240},[25,57801,57802],{"class":35}," qs",[25,57804,13674],{"class":240},[25,57806,54467],{"class":244},[25,57808,54470],{"class":31},[25,57810,245],{"class":244},[25,57812,57813],{"class":45},"'.qs'",[25,57815,251],{"class":244},[25,57817,57818],{"class":27,"line":10007},[25,57819,57820],{"class":302},"    \u002F\u002F 1.业务1.开始按钮模块\n",[25,57822,57823,57825,57827,57829,57831,57833,57835,57838],{"class":27,"line":10016},[25,57824,11331],{"class":240},[25,57826,4294],{"class":35},[25,57828,13674],{"class":240},[25,57830,54467],{"class":244},[25,57832,54470],{"class":31},[25,57834,245],{"class":244},[25,57836,57837],{"class":45},"'.start'",[25,57839,251],{"class":244},[25,57841,57842],{"class":27,"line":10022},[25,57843,57844],{"class":302},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[25,57846,57847,57849,57852,57854],{"class":27,"line":10030},[25,57848,52290],{"class":240},[25,57850,57851],{"class":244}," timerId ",[25,57853,290],{"class":240},[25,57855,47404],{"class":35},[25,57857,57858],{"class":27,"line":10035},[25,57859,57860],{"class":302},"    \u002F\u002F 随机号要全局变量\n",[25,57862,57863,57865,57868,57870],{"class":27,"line":16714},[25,57864,52290],{"class":240},[25,57866,57867],{"class":244}," random ",[25,57869,290],{"class":240},[25,57871,47404],{"class":35},[25,57873,57874],{"class":27,"line":16720},[25,57875,57876],{"class":302},"    \u002F\u002F 1.1 添加点击事件\n",[25,57878,57879,57882,57885,57887,57890,57892,57894],{"class":27,"line":16743},[25,57880,57881],{"class":244},"    start.",[25,57883,57884],{"class":31},"addEventListener",[25,57886,245],{"class":244},[25,57888,57889],{"class":45},"'click'",[25,57891,12545],{"class":244},[25,57893,54520],{"class":240},[25,57895,54523],{"class":244},[25,57897,57898,57901,57903,57905,57907,57909],{"class":27,"line":16749},[25,57899,57900],{"class":244},"      timerId ",[25,57902,290],{"class":240},[25,57904,54515],{"class":31},[25,57906,245],{"class":244},[25,57908,54520],{"class":240},[25,57910,54523],{"class":244},[25,57912,57913],{"class":27,"line":16772},[25,57914,57915],{"class":302},"        \u002F\u002F 随机数\n",[25,57917,57918,57921,57923,57926,57929,57932,57934,57936,57938,57940],{"class":27,"line":16786},[25,57919,57920],{"class":244},"        random ",[25,57922,290],{"class":240},[25,57924,57925],{"class":31}," parseInt",[25,57927,57928],{"class":244},"(Math.",[25,57930,57931],{"class":31},"random",[25,57933,13160],{"class":244},[25,57935,698],{"class":240},[25,57937,52036],{"class":244},[25,57939,52039],{"class":35},[25,57941,251],{"class":244},[25,57943,57944,57947,57949],{"class":27,"line":16806},[25,57945,57946],{"class":244},"        qs.innerHTML ",[25,57948,290],{"class":240},[25,57950,57951],{"class":244}," arr[random]\n",[25,57953,57954,57957,57959],{"class":27,"line":16812},[25,57955,57956],{"class":244},"      }, ",[25,57958,516],{"class":35},[25,57960,251],{"class":244},[25,57962,57963],{"class":27,"line":16823},[25,57964,57965],{"class":302},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[25,57967,57968,57970,57973,57975,57978,57980],{"class":27,"line":16846},[25,57969,54551],{"class":240},[25,57971,57972],{"class":244}," (arr.",[25,57974,52039],{"class":35},[25,57976,57977],{"class":240}," ===",[25,57979,25225],{"class":35},[25,57981,12552],{"class":244},[25,57983,57984],{"class":27,"line":16868},[25,57985,57986],{"class":302},"        \u002F\u002F start.disabled = true\n",[25,57988,57989],{"class":27,"line":16873},[25,57990,57991],{"class":302},"        \u002F\u002F end.disabled = true\n",[25,57993,57994],{"class":27,"line":16879},[25,57995,57996],{"class":302},"        \u002F\u002F 可以合起来写\n",[25,57998,57999,58002,58004,58007,58009],{"class":27,"line":16893},[25,58000,58001],{"class":244},"        start.disabled ",[25,58003,290],{"class":240},[25,58005,58006],{"class":244}," end.disabled ",[25,58008,290],{"class":240},[25,58010,58011],{"class":35}," true\n",[25,58013,58014],{"class":27,"line":16906},[25,58015,52469],{"class":244},[25,58017,58018],{"class":27,"line":16911},[25,58019,33532],{"class":244},[25,58021,58022],{"class":27,"line":16925},[25,58023,58024],{"class":302},"    \u002F\u002F 1.2 关闭按钮模块\n",[25,58026,58027,58029,58031,58033,58035,58037,58039,58042],{"class":27,"line":16930},[25,58028,11331],{"class":240},[25,58030,4310],{"class":35},[25,58032,13674],{"class":240},[25,58034,54467],{"class":244},[25,58036,54470],{"class":31},[25,58038,245],{"class":244},[25,58040,58041],{"class":45},"'.end'",[25,58043,251],{"class":244},[25,58045,58046,58049,58051,58053,58055,58057,58059],{"class":27,"line":16936},[25,58047,58048],{"class":244},"    end.",[25,58050,57884],{"class":31},[25,58052,245],{"class":244},[25,58054,57889],{"class":45},[25,58056,12545],{"class":244},[25,58058,54520],{"class":240},[25,58060,54523],{"class":244},[25,58062,58063,58066],{"class":27,"line":16941},[25,58064,58065],{"class":31},"      clearInterval",[25,58067,58068],{"class":244},"(timerId)\n",[25,58070,58071],{"class":27,"line":16955},[25,58072,58073],{"class":302},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[25,58075,58076,58079,58082,58085,58087],{"class":27,"line":16960},[25,58077,58078],{"class":244},"      arr.",[25,58080,58081],{"class":31},"splice",[25,58083,58084],{"class":244},"(random, ",[25,58086,460],{"class":35},[25,58088,251],{"class":244},[25,58090,58091],{"class":27,"line":16965},[25,58092,33532],{"class":244},[25,58094,58095],{"class":27,"line":16979},[25,58096,2510],{"emptyLinePlaceholder":167},[25,58098,58099,58101,58103],{"class":27,"line":16991},[25,58100,52488],{"class":244},[25,58102,51884],{"class":51371},[25,58104,51378],{"class":244},[25,58106,58107,58109,58111],{"class":27,"line":16996},[25,58108,51856],{"class":244},[25,58110,51871],{"class":51371},[25,58112,51378],{"class":244},[25,58114,58115],{"class":27,"line":17009},[25,58116,2510],{"emptyLinePlaceholder":167},[25,58118,58119,58121,58123],{"class":27,"line":17014},[25,58120,51856],{"class":244},[25,58122,50706],{"class":51371},[25,58124,51378],{"class":244},[99,58126,58127],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[210,58129,58131],{"id":58130},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[15,58133,58135],{"className":50704,"code":58134,"language":50706,"meta":20,"style":20},"\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",[22,58136,58137,58147,58161,58165,58173,58187,58207,58219,58227,58231,58239,58251,58259,58278,58295,58311,58321,58325,58333,58341,58345],{"__ignoreMap":20},[25,58138,58139,58141,58143,58145],{"class":27,"line":28},[25,58140,51368],{"class":244},[25,58142,51372],{"class":51371},[25,58144,51375],{"class":31},[25,58146,51378],{"class":244},[25,58148,58149,58151,58153,58155,58157,58159],{"class":27,"line":39},[25,58150,1153],{"class":244},[25,58152,50706],{"class":51371},[25,58154,51387],{"class":31},[25,58156,290],{"class":244},[25,58158,51392],{"class":45},[25,58160,51378],{"class":244},[25,58162,58163],{"class":27,"line":51},[25,58164,2510],{"emptyLinePlaceholder":167},[25,58166,58167,58169,58171],{"class":27,"line":59},[25,58168,1153],{"class":244},[25,58170,51405],{"class":51371},[25,58172,51378],{"class":244},[25,58174,58175,58177,58179,58181,58183,58185],{"class":27,"line":67},[25,58176,52215],{"class":244},[25,58178,51415],{"class":51371},[25,58180,51418],{"class":31},[25,58182,290],{"class":244},[25,58184,51423],{"class":45},[25,58186,51378],{"class":244},[25,58188,58189,58191,58193,58195,58197,58199,58201,58203,58205],{"class":27,"line":75},[25,58190,52215],{"class":244},[25,58192,51415],{"class":51371},[25,58194,15030],{"class":31},[25,58196,290],{"class":244},[25,58198,51462],{"class":45},[25,58200,51442],{"class":31},[25,58202,290],{"class":244},[25,58204,51469],{"class":45},[25,58206,51378],{"class":244},[25,58208,58209,58211,58213,58215,58217],{"class":27,"line":83},[25,58210,52215],{"class":244},[25,58212,51478],{"class":51371},[25,58214,51481],{"class":244},[25,58216,51478],{"class":51371},[25,58218,51378],{"class":244},[25,58220,58221,58223,58225],{"class":27,"line":91},[25,58222,51856],{"class":244},[25,58224,51405],{"class":51371},[25,58226,51378],{"class":244},[25,58228,58229],{"class":27,"line":1429},[25,58230,2510],{"emptyLinePlaceholder":167},[25,58232,58233,58235,58237],{"class":27,"line":1441},[25,58234,1153],{"class":244},[25,58236,51871],{"class":51371},[25,58238,51378],{"class":244},[25,58240,58241,58243,58245,58247,58249],{"class":27,"line":1723},[25,58242,52215],{"class":244},[25,58244,53958],{"class":51371},[25,58246,53964],{"class":244},[25,58248,53958],{"class":51371},[25,58250,51378],{"class":244},[25,58252,58253,58255,58257],{"class":27,"line":1728},[25,58254,52215],{"class":244},[25,58256,51884],{"class":51371},[25,58258,51378],{"class":244},[25,58260,58261,58263,58265,58267,58269,58271,58273,58276],{"class":27,"line":1734},[25,58262,11331],{"class":240},[25,58264,54462],{"class":35},[25,58266,13674],{"class":240},[25,58268,54467],{"class":244},[25,58270,54470],{"class":31},[25,58272,245],{"class":244},[25,58274,58275],{"class":45},"'button'",[25,58277,251],{"class":244},[25,58279,58280,58283,58285,58287,58289,58291,58293],{"class":27,"line":1739},[25,58281,58282],{"class":244},"    btn.",[25,58284,57884],{"class":31},[25,58286,245],{"class":244},[25,58288,57889],{"class":45},[25,58290,12545],{"class":244},[25,58292,54520],{"class":240},[25,58294,54523],{"class":244},[25,58296,58297,58300,58302,58304,58307,58309],{"class":27,"line":1753},[25,58298,58299],{"class":240},"      const",[25,58301,2350],{"class":35},[25,58303,13674],{"class":240},[25,58305,58306],{"class":244}," Math.",[25,58308,57931],{"class":31},[25,58310,2086],{"class":244},[25,58312,58313,58316,58319],{"class":27,"line":1758},[25,58314,58315],{"class":244},"      console.",[25,58317,58318],{"class":31},"log",[25,58320,258],{"class":244},[25,58322,58323],{"class":27,"line":1764},[25,58324,33532],{"class":244},[25,58326,58327,58329,58331],{"class":27,"line":1785},[25,58328,52488],{"class":244},[25,58330,51884],{"class":51371},[25,58332,51378],{"class":244},[25,58334,58335,58337,58339],{"class":27,"line":1790},[25,58336,51856],{"class":244},[25,58338,51871],{"class":51371},[25,58340,51378],{"class":244},[25,58342,58343],{"class":27,"line":1804},[25,58344,2510],{"emptyLinePlaceholder":167},[25,58346,58347,58349,58351],{"class":27,"line":1809},[25,58348,51856],{"class":244},[25,58350,50706],{"class":51371},[25,58352,51378],{"class":244},[99,58354,58355],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[99,58357,58358],{},"常量不可以重新赋值",[99,58360,58361],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[15,58363,58365],{"className":50704,"code":58364,"language":50706,"meta":20,"style":20},"\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",[22,58366,58367,58377,58391,58395,58403,58417,58437,58449,58457,58461,58469,58481,58489,58500,58518,58534,58548,58556,58560,58568,58576,58580],{"__ignoreMap":20},[25,58368,58369,58371,58373,58375],{"class":27,"line":28},[25,58370,51368],{"class":244},[25,58372,51372],{"class":51371},[25,58374,51375],{"class":31},[25,58376,51378],{"class":244},[25,58378,58379,58381,58383,58385,58387,58389],{"class":27,"line":39},[25,58380,1153],{"class":244},[25,58382,50706],{"class":51371},[25,58384,51387],{"class":31},[25,58386,290],{"class":244},[25,58388,51392],{"class":45},[25,58390,51378],{"class":244},[25,58392,58393],{"class":27,"line":51},[25,58394,2510],{"emptyLinePlaceholder":167},[25,58396,58397,58399,58401],{"class":27,"line":59},[25,58398,1153],{"class":244},[25,58400,51405],{"class":51371},[25,58402,51378],{"class":244},[25,58404,58405,58407,58409,58411,58413,58415],{"class":27,"line":67},[25,58406,52215],{"class":244},[25,58408,51415],{"class":51371},[25,58410,51418],{"class":31},[25,58412,290],{"class":244},[25,58414,51423],{"class":45},[25,58416,51378],{"class":244},[25,58418,58419,58421,58423,58425,58427,58429,58431,58433,58435],{"class":27,"line":75},[25,58420,52215],{"class":244},[25,58422,51415],{"class":51371},[25,58424,15030],{"class":31},[25,58426,290],{"class":244},[25,58428,51462],{"class":45},[25,58430,51442],{"class":31},[25,58432,290],{"class":244},[25,58434,51469],{"class":45},[25,58436,51378],{"class":244},[25,58438,58439,58441,58443,58445,58447],{"class":27,"line":83},[25,58440,52215],{"class":244},[25,58442,51478],{"class":51371},[25,58444,51481],{"class":244},[25,58446,51478],{"class":51371},[25,58448,51378],{"class":244},[25,58450,58451,58453,58455],{"class":27,"line":91},[25,58452,51856],{"class":244},[25,58454,51405],{"class":51371},[25,58456,51378],{"class":244},[25,58458,58459],{"class":27,"line":1429},[25,58460,2510],{"emptyLinePlaceholder":167},[25,58462,58463,58465,58467],{"class":27,"line":1441},[25,58464,1153],{"class":244},[25,58466,51871],{"class":51371},[25,58468,51378],{"class":244},[25,58470,58471,58473,58475,58477,58479],{"class":27,"line":1723},[25,58472,52215],{"class":244},[25,58474,53958],{"class":51371},[25,58476,53964],{"class":244},[25,58478,53958],{"class":51371},[25,58480,51378],{"class":244},[25,58482,58483,58485,58487],{"class":27,"line":1728},[25,58484,52215],{"class":244},[25,58486,51884],{"class":51371},[25,58488,51378],{"class":244},[25,58490,58491,58493,58495,58497],{"class":27,"line":1734},[25,58492,11331],{"class":240},[25,58494,2350],{"class":35},[25,58496,13674],{"class":240},[25,58498,58499],{"class":35}," 10\n",[25,58501,58502,58504,58506,58508,58510,58512,58514,58516],{"class":27,"line":1739},[25,58503,11331],{"class":240},[25,58505,54462],{"class":35},[25,58507,13674],{"class":240},[25,58509,54467],{"class":244},[25,58511,54470],{"class":31},[25,58513,245],{"class":244},[25,58515,58275],{"class":45},[25,58517,251],{"class":244},[25,58519,58520,58522,58524,58526,58528,58530,58532],{"class":27,"line":1753},[25,58521,58282],{"class":244},[25,58523,57884],{"class":31},[25,58525,245],{"class":244},[25,58527,57889],{"class":45},[25,58529,12545],{"class":244},[25,58531,54520],{"class":240},[25,58533,54523],{"class":244},[25,58535,58536,58538,58540,58542,58544,58546],{"class":27,"line":1758},[25,58537,58299],{"class":240},[25,58539,2350],{"class":35},[25,58541,13674],{"class":240},[25,58543,58306],{"class":244},[25,58545,57931],{"class":31},[25,58547,2086],{"class":244},[25,58549,58550,58552,58554],{"class":27,"line":1764},[25,58551,58315],{"class":244},[25,58553,58318],{"class":31},[25,58555,258],{"class":244},[25,58557,58558],{"class":27,"line":1785},[25,58559,33532],{"class":244},[25,58561,58562,58564,58566],{"class":27,"line":1790},[25,58563,52488],{"class":244},[25,58565,51884],{"class":51371},[25,58567,51378],{"class":244},[25,58569,58570,58572,58574],{"class":27,"line":1804},[25,58571,51856],{"class":244},[25,58573,51871],{"class":51371},[25,58575,51378],{"class":244},[25,58577,58578],{"class":27,"line":1809},[25,58579,2510],{"emptyLinePlaceholder":167},[25,58581,58582,58584,58586],{"class":27,"line":1838},[25,58583,51856],{"class":244},[25,58585,50706],{"class":51371},[25,58587,51378],{"class":244},[99,58589,58590],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[15,58592,58594],{"className":50704,"code":58593,"language":50706,"meta":20,"style":20},"\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",[22,58595,58596,58606,58620,58624,58632,58646,58666,58678,58686,58690,58698,58710,58718,58728,58746,58762,58775,58783,58787,58795,58803,58807],{"__ignoreMap":20},[25,58597,58598,58600,58602,58604],{"class":27,"line":28},[25,58599,51368],{"class":244},[25,58601,51372],{"class":51371},[25,58603,51375],{"class":31},[25,58605,51378],{"class":244},[25,58607,58608,58610,58612,58614,58616,58618],{"class":27,"line":39},[25,58609,1153],{"class":244},[25,58611,50706],{"class":51371},[25,58613,51387],{"class":31},[25,58615,290],{"class":244},[25,58617,51392],{"class":45},[25,58619,51378],{"class":244},[25,58621,58622],{"class":27,"line":51},[25,58623,2510],{"emptyLinePlaceholder":167},[25,58625,58626,58628,58630],{"class":27,"line":59},[25,58627,1153],{"class":244},[25,58629,51405],{"class":51371},[25,58631,51378],{"class":244},[25,58633,58634,58636,58638,58640,58642,58644],{"class":27,"line":67},[25,58635,52215],{"class":244},[25,58637,51415],{"class":51371},[25,58639,51418],{"class":31},[25,58641,290],{"class":244},[25,58643,51423],{"class":45},[25,58645,51378],{"class":244},[25,58647,58648,58650,58652,58654,58656,58658,58660,58662,58664],{"class":27,"line":75},[25,58649,52215],{"class":244},[25,58651,51415],{"class":51371},[25,58653,15030],{"class":31},[25,58655,290],{"class":244},[25,58657,51462],{"class":45},[25,58659,51442],{"class":31},[25,58661,290],{"class":244},[25,58663,51469],{"class":45},[25,58665,51378],{"class":244},[25,58667,58668,58670,58672,58674,58676],{"class":27,"line":83},[25,58669,52215],{"class":244},[25,58671,51478],{"class":51371},[25,58673,51481],{"class":244},[25,58675,51478],{"class":51371},[25,58677,51378],{"class":244},[25,58679,58680,58682,58684],{"class":27,"line":91},[25,58681,51856],{"class":244},[25,58683,51405],{"class":51371},[25,58685,51378],{"class":244},[25,58687,58688],{"class":27,"line":1429},[25,58689,2510],{"emptyLinePlaceholder":167},[25,58691,58692,58694,58696],{"class":27,"line":1441},[25,58693,1153],{"class":244},[25,58695,51871],{"class":51371},[25,58697,51378],{"class":244},[25,58699,58700,58702,58704,58706,58708],{"class":27,"line":1723},[25,58701,52215],{"class":244},[25,58703,53958],{"class":51371},[25,58705,53964],{"class":244},[25,58707,53958],{"class":51371},[25,58709,51378],{"class":244},[25,58711,58712,58714,58716],{"class":27,"line":1728},[25,58713,52215],{"class":244},[25,58715,51884],{"class":51371},[25,58717,51378],{"class":244},[25,58719,58720,58722,58724,58726],{"class":27,"line":1734},[25,58721,11331],{"class":240},[25,58723,2350],{"class":35},[25,58725,13674],{"class":240},[25,58727,58499],{"class":35},[25,58729,58730,58732,58734,58736,58738,58740,58742,58744],{"class":27,"line":1739},[25,58731,11331],{"class":240},[25,58733,54462],{"class":35},[25,58735,13674],{"class":240},[25,58737,54467],{"class":244},[25,58739,54470],{"class":31},[25,58741,245],{"class":244},[25,58743,58275],{"class":45},[25,58745,251],{"class":244},[25,58747,58748,58750,58752,58754,58756,58758,58760],{"class":27,"line":1753},[25,58749,58282],{"class":244},[25,58751,57884],{"class":31},[25,58753,245],{"class":244},[25,58755,57889],{"class":45},[25,58757,12545],{"class":244},[25,58759,54520],{"class":240},[25,58761,54523],{"class":244},[25,58763,58764,58767,58769,58771,58773],{"class":27,"line":1758},[25,58765,58766],{"class":244},"      num ",[25,58768,290],{"class":240},[25,58770,58306],{"class":244},[25,58772,57931],{"class":31},[25,58774,2086],{"class":244},[25,58776,58777,58779,58781],{"class":27,"line":1764},[25,58778,58315],{"class":244},[25,58780,58318],{"class":31},[25,58782,258],{"class":244},[25,58784,58785],{"class":27,"line":1785},[25,58786,33532],{"class":244},[25,58788,58789,58791,58793],{"class":27,"line":1790},[25,58790,52488],{"class":244},[25,58792,51884],{"class":51371},[25,58794,51378],{"class":244},[25,58796,58797,58799,58801],{"class":27,"line":1804},[25,58798,51856],{"class":244},[25,58800,51871],{"class":51371},[25,58802,51378],{"class":244},[25,58804,58805],{"class":27,"line":1809},[25,58806,2510],{"emptyLinePlaceholder":167},[25,58808,58809,58811,58813],{"class":27,"line":1838},[25,58810,51856],{"class":244},[25,58812,50706],{"class":51371},[25,58814,51378],{"class":244},[99,58816,58817],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[210,58819,58821],{"id":58820},"_324-事件监听版本","3.2.4 事件监听版本",[99,58823,58824],{},[155,58825],{"alt":20,"src":58826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[99,58828,58829],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[99,58831,58832],{},"这种方式会覆盖前边的事件监听:",[15,58834,58836],{"className":50704,"code":58835,"language":50706,"meta":20,"style":20},"\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",[22,58837,58838,58848,58862,58866,58874,58888,58908,58920,58928,58932,58940,58952,58960,58978,58992,59003,59007,59019,59029,59033,59041,59049,59053],{"__ignoreMap":20},[25,58839,58840,58842,58844,58846],{"class":27,"line":28},[25,58841,51368],{"class":244},[25,58843,51372],{"class":51371},[25,58845,51375],{"class":31},[25,58847,51378],{"class":244},[25,58849,58850,58852,58854,58856,58858,58860],{"class":27,"line":39},[25,58851,1153],{"class":244},[25,58853,50706],{"class":51371},[25,58855,51387],{"class":31},[25,58857,290],{"class":244},[25,58859,51392],{"class":45},[25,58861,51378],{"class":244},[25,58863,58864],{"class":27,"line":51},[25,58865,2510],{"emptyLinePlaceholder":167},[25,58867,58868,58870,58872],{"class":27,"line":59},[25,58869,1153],{"class":244},[25,58871,51405],{"class":51371},[25,58873,51378],{"class":244},[25,58875,58876,58878,58880,58882,58884,58886],{"class":27,"line":67},[25,58877,52215],{"class":244},[25,58879,51415],{"class":51371},[25,58881,51418],{"class":31},[25,58883,290],{"class":244},[25,58885,51423],{"class":45},[25,58887,51378],{"class":244},[25,58889,58890,58892,58894,58896,58898,58900,58902,58904,58906],{"class":27,"line":75},[25,58891,52215],{"class":244},[25,58893,51415],{"class":51371},[25,58895,15030],{"class":31},[25,58897,290],{"class":244},[25,58899,51462],{"class":45},[25,58901,51442],{"class":31},[25,58903,290],{"class":244},[25,58905,51469],{"class":45},[25,58907,51378],{"class":244},[25,58909,58910,58912,58914,58916,58918],{"class":27,"line":83},[25,58911,52215],{"class":244},[25,58913,51478],{"class":51371},[25,58915,51481],{"class":244},[25,58917,51478],{"class":51371},[25,58919,51378],{"class":244},[25,58921,58922,58924,58926],{"class":27,"line":91},[25,58923,51856],{"class":244},[25,58925,51405],{"class":51371},[25,58927,51378],{"class":244},[25,58929,58930],{"class":27,"line":1429},[25,58931,2510],{"emptyLinePlaceholder":167},[25,58933,58934,58936,58938],{"class":27,"line":1441},[25,58935,1153],{"class":244},[25,58937,51871],{"class":51371},[25,58939,51378],{"class":244},[25,58941,58942,58944,58946,58948,58950],{"class":27,"line":1723},[25,58943,52215],{"class":244},[25,58945,53958],{"class":51371},[25,58947,53964],{"class":244},[25,58949,53958],{"class":51371},[25,58951,51378],{"class":244},[25,58953,58954,58956,58958],{"class":27,"line":1728},[25,58955,52215],{"class":244},[25,58957,51884],{"class":51371},[25,58959,51378],{"class":244},[25,58961,58962,58964,58966,58968,58970,58972,58974,58976],{"class":27,"line":1734},[25,58963,11331],{"class":240},[25,58965,54462],{"class":35},[25,58967,13674],{"class":240},[25,58969,54467],{"class":244},[25,58971,54470],{"class":31},[25,58973,245],{"class":244},[25,58975,58275],{"class":45},[25,58977,251],{"class":244},[25,58979,58980,58982,58985,58987,58990],{"class":27,"line":1739},[25,58981,58282],{"class":244},[25,58983,58984],{"class":31},"onclick",[25,58986,13674],{"class":240},[25,58988,58989],{"class":240}," function",[25,58991,54523],{"class":244},[25,58993,58994,58997,58999,59001],{"class":27,"line":1753},[25,58995,58996],{"class":31},"      alert",[25,58998,245],{"class":244},[25,59000,715],{"class":35},[25,59002,251],{"class":244},[25,59004,59005],{"class":27,"line":1758},[25,59006,2297],{"class":244},[25,59008,59009,59011,59013,59015,59017],{"class":27,"line":1764},[25,59010,58282],{"class":244},[25,59012,58984],{"class":31},[25,59014,13674],{"class":240},[25,59016,58989],{"class":240},[25,59018,54523],{"class":244},[25,59020,59021,59023,59025,59027],{"class":27,"line":1785},[25,59022,58996],{"class":31},[25,59024,245],{"class":244},[25,59026,993],{"class":35},[25,59028,251],{"class":244},[25,59030,59031],{"class":27,"line":1790},[25,59032,2297],{"class":244},[25,59034,59035,59037,59039],{"class":27,"line":1804},[25,59036,52488],{"class":244},[25,59038,51884],{"class":51371},[25,59040,51378],{"class":244},[25,59042,59043,59045,59047],{"class":27,"line":1809},[25,59044,51856],{"class":244},[25,59046,51871],{"class":51371},[25,59048,51378],{"class":244},[25,59050,59051],{"class":27,"line":1838},[25,59052,2510],{"emptyLinePlaceholder":167},[25,59054,59055,59057,59059],{"class":27,"line":1843},[25,59056,51856],{"class":244},[25,59058,50706],{"class":51371},[25,59060,51378],{"class":244},[99,59062,59063],{},"只要点击就输出结果为22,前边11被覆盖了",[15,59065,59067],{"className":50704,"code":59066,"language":50706,"meta":20,"style":20},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[22,59068,59069,59074,59079,59083,59088,59093],{"__ignoreMap":20},[25,59070,59071],{"class":27,"line":28},[25,59072,59073],{"class":244},"  btn.addEventListener('click', function () {\n",[25,59075,59076],{"class":27,"line":39},[25,59077,59078],{"class":244},"      alert(11)\n",[25,59080,59081],{"class":27,"line":51},[25,59082,33532],{"class":244},[25,59084,59085],{"class":27,"line":59},[25,59086,59087],{"class":244},"    btn.addEventListener('click', function () {\n",[25,59089,59090],{"class":27,"line":67},[25,59091,59092],{"class":244},"      alert(22)\n",[25,59094,59095],{"class":27,"line":75},[25,59096,33532],{"class":244},[99,59098,59099],{},"点击第一次输出11,第二次点击为22",[210,59101,59103],{"id":59102},"_325-事件类型","3.2.5 事件类型",[99,59105,59106],{},[155,59107],{"alt":20,"src":59108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22108,59110,59112],{"id":59111},"_3251-鼠标事件","3.2.5.1 鼠标事件",[99,59114,59115],{},"补充知识:",[99,59117,59118],{},"轮播图自动播放模块,可以使用",[99,59120,59121],{},"let timerId = setInterval(function () {",[99,59123,59124],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[99,59126,59127],{},"用js方法模拟进行点击事件,click必须加()",[99,59129,59130],{},"next.click()",[99,59132,59133],{},"}, 1000)",[99,59135,59136],{},[155,59137],{"alt":20,"src":59138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[15,59140,59142],{"className":53138,"code":59141,"language":53140,"meta":20,"style":20},"\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",[22,59143,59144,59148,59158,59172,59176,59184,59199,59219,59239,59252,59260,59265,59270,59274,59278,59283,59288,59293,59298,59302,59306,59311,59316,59321,59325,59329,59334,59338,59343,59348,59352,59356,59361,59366,59371,59376,59381,59385,59389,59394,59399,59404,59409,59414,59418,59422,59427,59432,59437,59442,59447,59452,59457,59462,59467,59472,59476,59480,59485,59490,59494,59498,59503,59508,59512,59517,59522,59526,59530,59535,59539,59544,59549,59553,59558,59562,59566,59571,59576,59581,59586,59591,59596,59601,59605,59609,59613,59618,59623,59628,59633,59637,59645,59653,59657,59665,59680,59694,59715,59723,59737,59750,59765,59784,59796,59808,59820,59832,59844,59856,59868,59876,59891,59915,59939,59947,59955,59963,59971,59976,59981,59986,59991,59996,60001,60006,60011,60016,60021,60025,60030,60035,60040,60045,60050,60055,60060,60065,60070,60074,60079,60084,60089,60094,60099,60104,60109,60114,60119,60124,60129,60134,60138,60142,60147,60152,60157,60161,60166,60171,60176,60181,60186,60190,60195,60199,60203,60207,60211,60215,60219,60224,60229,60234,60239,60244,60249,60254,60259,60264,60268,60272,60277,60282,60287,60292,60297,60301,60306,60311,60316,60321,60326,60331,60335,60339,60344,60348,60353,60357,60362,60367,60372,60377,60382,60387,60391,60399,60407,60411],{"__ignoreMap":20},[25,59145,59146],{"class":27,"line":28},[25,59147,2510],{"emptyLinePlaceholder":167},[25,59149,59150,59152,59154,59156],{"class":27,"line":39},[25,59151,51368],{"class":244},[25,59153,51372],{"class":240},[25,59155,51375],{"class":35},[25,59157,51378],{"class":244},[25,59159,59160,59162,59164,59166,59168,59170],{"class":27,"line":51},[25,59161,1153],{"class":244},[25,59163,50706],{"class":51371},[25,59165,51387],{"class":31},[25,59167,290],{"class":244},[25,59169,51392],{"class":45},[25,59171,51378],{"class":244},[25,59173,59174],{"class":27,"line":59},[25,59175,2510],{"emptyLinePlaceholder":167},[25,59177,59178,59180,59182],{"class":27,"line":67},[25,59179,1153],{"class":244},[25,59181,51405],{"class":51371},[25,59183,51378],{"class":244},[25,59185,59186,59188,59190,59192,59194,59196],{"class":27,"line":75},[25,59187,52215],{"class":244},[25,59189,51415],{"class":51371},[25,59191,51418],{"class":31},[25,59193,290],{"class":244},[25,59195,51423],{"class":45},[25,59197,59198],{"class":244}," \u002F>\n",[25,59200,59201,59203,59205,59207,59209,59211,59213,59215,59217],{"class":27,"line":83},[25,59202,52215],{"class":244},[25,59204,51415],{"class":51371},[25,59206,51434],{"class":31},[25,59208,290],{"class":244},[25,59210,51439],{"class":45},[25,59212,51442],{"class":31},[25,59214,290],{"class":244},[25,59216,51447],{"class":45},[25,59218,59198],{"class":244},[25,59220,59221,59223,59225,59227,59229,59231,59233,59235,59237],{"class":27,"line":91},[25,59222,52215],{"class":244},[25,59224,51415],{"class":51371},[25,59226,15030],{"class":31},[25,59228,290],{"class":244},[25,59230,51462],{"class":45},[25,59232,51442],{"class":31},[25,59234,290],{"class":244},[25,59236,51469],{"class":45},[25,59238,59198],{"class":244},[25,59240,59241,59243,59245,59248,59250],{"class":27,"line":1429},[25,59242,52215],{"class":244},[25,59244,51478],{"class":51371},[25,59246,59247],{"class":244},">轮播图点击切换\u003C\u002F",[25,59249,51478],{"class":51371},[25,59251,51378],{"class":244},[25,59253,59254,59256,59258],{"class":27,"line":1441},[25,59255,52215],{"class":244},[25,59257,159],{"class":51371},[25,59259,51378],{"class":244},[25,59261,59262],{"class":27,"line":1723},[25,59263,59264],{"class":244},"    * {\n",[25,59266,59267],{"class":27,"line":1728},[25,59268,59269],{"class":244},"      box-sizing: border-box;\n",[25,59271,59272],{"class":27,"line":1734},[25,59273,2297],{"class":244},[25,59275,59276],{"class":27,"line":1739},[25,59277,2510],{"emptyLinePlaceholder":167},[25,59279,59280],{"class":27,"line":1753},[25,59281,59282],{"class":244},"    .slider {\n",[25,59284,59285],{"class":27,"line":1758},[25,59286,59287],{"class":244},"      width: 560px;\n",[25,59289,59290],{"class":27,"line":1764},[25,59291,59292],{"class":244},"      height: 400px;\n",[25,59294,59295],{"class":27,"line":1785},[25,59296,59297],{"class":244},"      overflow: hidden;\n",[25,59299,59300],{"class":27,"line":1790},[25,59301,2297],{"class":244},[25,59303,59304],{"class":27,"line":1804},[25,59305,2510],{"emptyLinePlaceholder":167},[25,59307,59308],{"class":27,"line":1809},[25,59309,59310],{"class":244},"    .slider-wrapper {\n",[25,59312,59313],{"class":27,"line":1838},[25,59314,59315],{"class":244},"      width: 100%;\n",[25,59317,59318],{"class":27,"line":1843},[25,59319,59320],{"class":244},"      height: 320px;\n",[25,59322,59323],{"class":27,"line":1860},[25,59324,2297],{"class":244},[25,59326,59327],{"class":27,"line":1865},[25,59328,2510],{"emptyLinePlaceholder":167},[25,59330,59331],{"class":27,"line":1870},[25,59332,59333],{"class":244},"    .slider-wrapper img {\n",[25,59335,59336],{"class":27,"line":1875},[25,59337,59315],{"class":244},[25,59339,59340],{"class":27,"line":1889},[25,59341,59342],{"class":244},"      height: 100%;\n",[25,59344,59345],{"class":27,"line":1894},[25,59346,59347],{"class":244},"      display: block;\n",[25,59349,59350],{"class":27,"line":2687},[25,59351,2297],{"class":244},[25,59353,59354],{"class":27,"line":2701},[25,59355,2510],{"emptyLinePlaceholder":167},[25,59357,59358],{"class":27,"line":2709},[25,59359,59360],{"class":244},"    .slider-footer {\n",[25,59362,59363],{"class":27,"line":2714},[25,59364,59365],{"class":244},"      height: 80px;\n",[25,59367,59368],{"class":27,"line":2720},[25,59369,59370],{"class":244},"      background-color: rgb(100, 67, 68);\n",[25,59372,59373],{"class":27,"line":2726},[25,59374,59375],{"class":244},"      padding: 12px 12px 0 12px;\n",[25,59377,59378],{"class":27,"line":2731},[25,59379,59380],{"class":244},"      position: relative;\n",[25,59382,59383],{"class":27,"line":8058},[25,59384,2297],{"class":244},[25,59386,59387],{"class":27,"line":8082},[25,59388,2510],{"emptyLinePlaceholder":167},[25,59390,59391],{"class":27,"line":8087},[25,59392,59393],{"class":244},"    .slider-footer .toggle {\n",[25,59395,59396],{"class":27,"line":8093},[25,59397,59398],{"class":244},"      position: absolute;\n",[25,59400,59401],{"class":27,"line":8120},[25,59402,59403],{"class":244},"      right: 0;\n",[25,59405,59406],{"class":27,"line":8125},[25,59407,59408],{"class":244},"      top: 12px;\n",[25,59410,59411],{"class":27,"line":8131},[25,59412,59413],{"class":244},"      display: flex;\n",[25,59415,59416],{"class":27,"line":8143},[25,59417,2297],{"class":244},[25,59419,59420],{"class":27,"line":8155},[25,59421,2510],{"emptyLinePlaceholder":167},[25,59423,59424],{"class":27,"line":8167},[25,59425,59426],{"class":244},"    .slider-footer .toggle button {\n",[25,59428,59429],{"class":27,"line":9826},[25,59430,59431],{"class":244},"      margin-right: 12px;\n",[25,59433,59434],{"class":27,"line":9851},[25,59435,59436],{"class":244},"      width: 28px;\n",[25,59438,59439],{"class":27,"line":9874},[25,59440,59441],{"class":244},"      height: 28px;\n",[25,59443,59444],{"class":27,"line":9898},[25,59445,59446],{"class":244},"      appearance: none;\n",[25,59448,59449],{"class":27,"line":9903},[25,59450,59451],{"class":244},"      border: none;\n",[25,59453,59454],{"class":27,"line":9908},[25,59455,59456],{"class":244},"      background: rgba(255, 255, 255, 0.1);\n",[25,59458,59459],{"class":27,"line":9913},[25,59460,59461],{"class":244},"      color: #fff;\n",[25,59463,59464],{"class":27,"line":9922},[25,59465,59466],{"class":244},"      border-radius: 4px;\n",[25,59468,59469],{"class":27,"line":9927},[25,59470,59471],{"class":244},"      cursor: pointer;\n",[25,59473,59474],{"class":27,"line":9933},[25,59475,2297],{"class":244},[25,59477,59478],{"class":27,"line":9954},[25,59479,2510],{"emptyLinePlaceholder":167},[25,59481,59482],{"class":27,"line":9960},[25,59483,59484],{"class":244},"    .slider-footer .toggle button:hover {\n",[25,59486,59487],{"class":27,"line":9974},[25,59488,59489],{"class":244},"      background: rgba(255, 255, 255, 0.2);\n",[25,59491,59492],{"class":27,"line":9980},[25,59493,2297],{"class":244},[25,59495,59496],{"class":27,"line":10007},[25,59497,2510],{"emptyLinePlaceholder":167},[25,59499,59500],{"class":27,"line":10016},[25,59501,59502],{"class":244},"    .slider-footer p {\n",[25,59504,59505],{"class":27,"line":10022},[25,59506,59507],{"class":244},"      margin: 0;\n",[25,59509,59510],{"class":27,"line":10030},[25,59511,59461],{"class":244},[25,59513,59514],{"class":27,"line":10035},[25,59515,59516],{"class":244},"      font-size: 18px;\n",[25,59518,59519],{"class":27,"line":16714},[25,59520,59521],{"class":244},"      margin-bottom: 10px;\n",[25,59523,59524],{"class":27,"line":16720},[25,59525,2297],{"class":244},[25,59527,59528],{"class":27,"line":16743},[25,59529,2510],{"emptyLinePlaceholder":167},[25,59531,59532],{"class":27,"line":16749},[25,59533,59534],{"class":244},"    .slider-indicator {\n",[25,59536,59537],{"class":27,"line":16772},[25,59538,59507],{"class":244},[25,59540,59541],{"class":27,"line":16786},[25,59542,59543],{"class":244},"      padding: 0;\n",[25,59545,59546],{"class":27,"line":16806},[25,59547,59548],{"class":244},"      list-style: none;\n",[25,59550,59551],{"class":27,"line":16812},[25,59552,59413],{"class":244},[25,59554,59555],{"class":27,"line":16823},[25,59556,59557],{"class":244},"      align-items: center;\n",[25,59559,59560],{"class":27,"line":16846},[25,59561,2297],{"class":244},[25,59563,59564],{"class":27,"line":16868},[25,59565,2510],{"emptyLinePlaceholder":167},[25,59567,59568],{"class":27,"line":16873},[25,59569,59570],{"class":244},"    .slider-indicator li {\n",[25,59572,59573],{"class":27,"line":16879},[25,59574,59575],{"class":244},"      width: 8px;\n",[25,59577,59578],{"class":27,"line":16893},[25,59579,59580],{"class":244},"      height: 8px;\n",[25,59582,59583],{"class":27,"line":16906},[25,59584,59585],{"class":244},"      margin: 4px;\n",[25,59587,59588],{"class":27,"line":16911},[25,59589,59590],{"class":244},"      border-radius: 50%;\n",[25,59592,59593],{"class":27,"line":16925},[25,59594,59595],{"class":244},"      background: #fff;\n",[25,59597,59598],{"class":27,"line":16930},[25,59599,59600],{"class":244},"      opacity: 0.4;\n",[25,59602,59603],{"class":27,"line":16936},[25,59604,59471],{"class":244},[25,59606,59607],{"class":27,"line":16941},[25,59608,2297],{"class":244},[25,59610,59611],{"class":27,"line":16955},[25,59612,2510],{"emptyLinePlaceholder":167},[25,59614,59615],{"class":27,"line":16960},[25,59616,59617],{"class":244},"    .slider-indicator li.active {\n",[25,59619,59620],{"class":27,"line":16965},[25,59621,59622],{"class":244},"      width: 12px;\n",[25,59624,59625],{"class":27,"line":16979},[25,59626,59627],{"class":244},"      height: 12px;\n",[25,59629,59630],{"class":27,"line":16991},[25,59631,59632],{"class":244},"      opacity: 1;\n",[25,59634,59635],{"class":27,"line":16996},[25,59636,2297],{"class":244},[25,59638,59639,59641,59643],{"class":27,"line":17009},[25,59640,52488],{"class":244},[25,59642,159],{"class":51371},[25,59644,51378],{"class":244},[25,59646,59647,59649,59651],{"class":27,"line":17014},[25,59648,51856],{"class":244},[25,59650,51405],{"class":51371},[25,59652,51378],{"class":244},[25,59654,59655],{"class":27,"line":17019},[25,59656,2510],{"emptyLinePlaceholder":167},[25,59658,59659,59661,59663],{"class":27,"line":17024},[25,59660,1153],{"class":244},[25,59662,51871],{"class":51371},[25,59664,51378],{"class":244},[25,59666,59667,59669,59671,59673,59675,59678],{"class":27,"line":17037},[25,59668,52215],{"class":244},[25,59670,51682],{"class":51371},[25,59672,53557],{"class":31},[25,59674,290],{"class":244},[25,59676,59677],{"class":45},"\"slider\"",[25,59679,51378],{"class":244},[25,59681,59682,59684,59686,59688,59690,59692],{"class":27,"line":17042},[25,59683,51412],{"class":244},[25,59685,51682],{"class":51371},[25,59687,53557],{"class":31},[25,59689,290],{"class":244},[25,59691,55298],{"class":45},[25,59693,51378],{"class":244},[25,59695,59696,59698,59700,59702,59704,59707,59709,59711,59713],{"class":27,"line":32704},[25,59697,55305],{"class":244},[25,59699,155],{"class":51371},[25,59701,55310],{"class":31},[25,59703,290],{"class":244},[25,59705,59706],{"class":45},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[25,59708,55318],{"class":31},[25,59710,290],{"class":244},[25,59712,7762],{"class":45},[25,59714,59198],{"class":244},[25,59716,59717,59719,59721],{"class":27,"line":32710},[25,59718,51847],{"class":244},[25,59720,51682],{"class":51371},[25,59722,51378],{"class":244},[25,59724,59725,59727,59729,59731,59733,59735],{"class":27,"line":32716},[25,59726,51412],{"class":244},[25,59728,51682],{"class":51371},[25,59730,53557],{"class":31},[25,59732,290],{"class":244},[25,59734,55345],{"class":45},[25,59736,51378],{"class":244},[25,59738,59739,59741,59743,59746,59748],{"class":27,"line":32722},[25,59740,55305],{"class":244},[25,59742,99],{"class":51371},[25,59744,59745],{"class":244},">对人类来说会不会太超前了？\u003C\u002F",[25,59747,99],{"class":51371},[25,59749,51378],{"class":244},[25,59751,59752,59754,59756,59758,59760,59763],{"class":27,"line":32728},[25,59753,55305],{"class":244},[25,59755,103],{"class":51371},[25,59757,53557],{"class":31},[25,59759,290],{"class":244},[25,59761,59762],{"class":45},"\"slider-indicator\"",[25,59764,51378],{"class":244},[25,59766,59767,59769,59771,59773,59775,59778,59780,59782],{"class":27,"line":32739},[25,59768,55373],{"class":244},[25,59770,106],{"class":51371},[25,59772,53557],{"class":31},[25,59774,290],{"class":244},[25,59776,59777],{"class":45},"\"active\"",[25,59779,55385],{"class":244},[25,59781,106],{"class":51371},[25,59783,51378],{"class":244},[25,59785,59786,59788,59790,59792,59794],{"class":27,"line":32745},[25,59787,55373],{"class":244},[25,59789,106],{"class":51371},[25,59791,55385],{"class":244},[25,59793,106],{"class":51371},[25,59795,51378],{"class":244},[25,59797,59798,59800,59802,59804,59806],{"class":27,"line":32765},[25,59799,55373],{"class":244},[25,59801,106],{"class":51371},[25,59803,55385],{"class":244},[25,59805,106],{"class":51371},[25,59807,51378],{"class":244},[25,59809,59810,59812,59814,59816,59818],{"class":27,"line":32771},[25,59811,55373],{"class":244},[25,59813,106],{"class":51371},[25,59815,55385],{"class":244},[25,59817,106],{"class":51371},[25,59819,51378],{"class":244},[25,59821,59822,59824,59826,59828,59830],{"class":27,"line":32782},[25,59823,55373],{"class":244},[25,59825,106],{"class":51371},[25,59827,55385],{"class":244},[25,59829,106],{"class":51371},[25,59831,51378],{"class":244},[25,59833,59834,59836,59838,59840,59842],{"class":27,"line":32788},[25,59835,55373],{"class":244},[25,59837,106],{"class":51371},[25,59839,55385],{"class":244},[25,59841,106],{"class":51371},[25,59843,51378],{"class":244},[25,59845,59846,59848,59850,59852,59854],{"class":27,"line":32794},[25,59847,55373],{"class":244},[25,59849,106],{"class":51371},[25,59851,55385],{"class":244},[25,59853,106],{"class":51371},[25,59855,51378],{"class":244},[25,59857,59858,59860,59862,59864,59866],{"class":27,"line":32800},[25,59859,55373],{"class":244},[25,59861,106],{"class":51371},[25,59863,55385],{"class":244},[25,59865,106],{"class":51371},[25,59867,51378],{"class":244},[25,59869,59870,59872,59874],{"class":27,"line":32806},[25,59871,55478],{"class":244},[25,59873,103],{"class":51371},[25,59875,51378],{"class":244},[25,59877,59878,59880,59882,59884,59886,59889],{"class":27,"line":32812},[25,59879,55305],{"class":244},[25,59881,51682],{"class":51371},[25,59883,53557],{"class":31},[25,59885,290],{"class":244},[25,59887,59888],{"class":45},"\"toggle\"",[25,59890,51378],{"class":244},[25,59892,59893,59895,59897,59899,59901,59904,59906,59909,59911,59913],{"class":27,"line":32818},[25,59894,55373],{"class":244},[25,59896,53958],{"class":51371},[25,59898,53557],{"class":31},[25,59900,290],{"class":244},[25,59902,59903],{"class":45},"\"prev\"",[25,59905,1203],{"class":244},[25,59907,59908],{"class":35},"&lt;",[25,59910,51856],{"class":244},[25,59912,53958],{"class":51371},[25,59914,51378],{"class":244},[25,59916,59917,59919,59921,59923,59925,59928,59930,59933,59935,59937],{"class":27,"line":32824},[25,59918,55373],{"class":244},[25,59920,53958],{"class":51371},[25,59922,53557],{"class":31},[25,59924,290],{"class":244},[25,59926,59927],{"class":45},"\"next\"",[25,59929,1203],{"class":244},[25,59931,59932],{"class":35},"&gt;",[25,59934,51856],{"class":244},[25,59936,53958],{"class":51371},[25,59938,51378],{"class":244},[25,59940,59941,59943,59945],{"class":27,"line":32844},[25,59942,55478],{"class":244},[25,59944,51682],{"class":51371},[25,59946,51378],{"class":244},[25,59948,59949,59951,59953],{"class":27,"line":32850},[25,59950,51847],{"class":244},[25,59952,51682],{"class":51371},[25,59954,51378],{"class":244},[25,59956,59957,59959,59961],{"class":27,"line":32866},[25,59958,52488],{"class":244},[25,59960,51682],{"class":51371},[25,59962,51378],{"class":244},[25,59964,59965,59967,59969],{"class":27,"line":32872},[25,59966,52215],{"class":244},[25,59968,51884],{"class":51371},[25,59970,51378],{"class":244},[25,59972,59973],{"class":27,"line":32886},[25,59974,59975],{"class":244},"    \u002F\u002F 1. 初始数据\n",[25,59977,59978],{"class":27,"line":32892},[25,59979,59980],{"class":244},"    const data = [\n",[25,59982,59983],{"class":27,"line":32907},[25,59984,59985],{"class":244},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[25,59987,59988],{"class":27,"line":32913},[25,59989,59990],{"class":244},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[25,59992,59993],{"class":27,"line":32922},[25,59994,59995],{"class":244},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[25,59997,59998],{"class":27,"line":32928},[25,59999,60000],{"class":244},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[25,60002,60003],{"class":27,"line":32937},[25,60004,60005],{"class":244},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[25,60007,60008],{"class":27,"line":32943},[25,60009,60010],{"class":244},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[25,60012,60013],{"class":27,"line":32949},[25,60014,60015],{"class":244},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[25,60017,60018],{"class":27,"line":32958},[25,60019,60020],{"class":244},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[25,60022,60023],{"class":27,"line":32964},[25,60024,53180],{"class":244},[25,60026,60027],{"class":27,"line":32975},[25,60028,60029],{"class":244},"    \u002F\u002F 获取元素\n",[25,60031,60032],{"class":27,"line":32981},[25,60033,60034],{"class":244},"    const img = document.querySelector('.slider-wrapper img')\n",[25,60036,60037],{"class":27,"line":33000},[25,60038,60039],{"class":244},"    const p = document.querySelector('.slider-footer p')\n",[25,60041,60042],{"class":27,"line":33006},[25,60043,60044],{"class":244},"    const footer = document.querySelector('.slider-footer')\n",[25,60046,60047],{"class":27,"line":33017},[25,60048,60049],{"class":244},"    \u002F\u002F 1. 右按钮业务\n",[25,60051,60052],{"class":27,"line":33023},[25,60053,60054],{"class":244},"    \u002F\u002F 1.1 获取右侧按钮 \n",[25,60056,60057],{"class":27,"line":33043},[25,60058,60059],{"class":244},"    const next = document.querySelector('.next')\n",[25,60061,60062],{"class":27,"line":33059},[25,60063,60064],{"class":244},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[25,60066,60067],{"class":27,"line":33065},[25,60068,60069],{"class":244},"    \u002F\u002F 1.2 注册点击事件\n",[25,60071,60072],{"class":27,"line":33079},[25,60073,2510],{"emptyLinePlaceholder":167},[25,60075,60076],{"class":27,"line":33085},[25,60077,60078],{"class":244},"    next.addEventListener('click', function () {\n",[25,60080,60081],{"class":27,"line":33091},[25,60082,60083],{"class":244},"      \u002F\u002F console.log(11)\n",[25,60085,60086],{"class":27,"line":33102},[25,60087,60088],{"class":244},"      i++\n",[25,60090,60091],{"class":27,"line":33108},[25,60092,60093],{"class":244},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[25,60095,60096],{"class":27,"line":33114},[25,60097,60098],{"class":244},"      \u002F\u002F if (i >= 8) {\n",[25,60100,60101],{"class":27,"line":33124},[25,60102,60103],{"class":244},"      \u002F\u002F   i = 0\n",[25,60105,60106],{"class":27,"line":33130},[25,60107,60108],{"class":244},"      \u002F\u002F }\n",[25,60110,60111],{"class":27,"line":33141},[25,60112,60113],{"class":244},"      i = i >= data.length ? 0 : i\n",[25,60115,60116],{"class":27,"line":33147},[25,60117,60118],{"class":244},"      \u002F\u002F 1.3 得到对应的对象\n",[25,60120,60121],{"class":27,"line":33157},[25,60122,60123],{"class":244},"      \u002F\u002F console.log(data[i])\n",[25,60125,60126],{"class":27,"line":33162},[25,60127,60128],{"class":244},"      \u002F\u002F 调用函数\n",[25,60130,60131],{"class":27,"line":33168},[25,60132,60133],{"class":244},"      toggle()\n",[25,60135,60136],{"class":27,"line":33217},[25,60137,33532],{"class":244},[25,60139,60140],{"class":27,"line":33264},[25,60141,2510],{"emptyLinePlaceholder":167},[25,60143,60144],{"class":27,"line":33269},[25,60145,60146],{"class":244},"    \u002F\u002F 2. 左侧按钮业务\n",[25,60148,60149],{"class":27,"line":33275},[25,60150,60151],{"class":244},"    \u002F\u002F 2.1 获取左侧按钮 \n",[25,60153,60154],{"class":27,"line":33294},[25,60155,60156],{"class":244},"    const prev = document.querySelector('.prev')\n",[25,60158,60159],{"class":27,"line":33300},[25,60160,60069],{"class":244},[25,60162,60163],{"class":27,"line":33320},[25,60164,60165],{"class":244},"    prev.addEventListener('click', function () {\n",[25,60167,60168],{"class":27,"line":33326},[25,60169,60170],{"class":244},"      i--\n",[25,60172,60173],{"class":27,"line":33332},[25,60174,60175],{"class":244},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[25,60177,60178],{"class":27,"line":33342},[25,60179,60180],{"class":244},"      \u002F\u002F if (i \u003C 0) {\n",[25,60182,60183],{"class":27,"line":33347},[25,60184,60185],{"class":244},"      \u002F\u002F   i = 7\n",[25,60187,60188],{"class":27,"line":33353},[25,60189,60108],{"class":244},[25,60191,60192],{"class":27,"line":33369},[25,60193,60194],{"class":244},"      i = i \u003C 0 ? data.length - 1 : i\n",[25,60196,60197],{"class":27,"line":33414},[25,60198,60118],{"class":244},[25,60200,60201],{"class":27,"line":33420},[25,60202,60123],{"class":244},[25,60204,60205],{"class":27,"line":33426},[25,60206,60128],{"class":244},[25,60208,60209],{"class":27,"line":33432},[25,60210,60133],{"class":244},[25,60212,60213],{"class":27,"line":33443},[25,60214,33532],{"class":244},[25,60216,60217],{"class":27,"line":33449},[25,60218,2510],{"emptyLinePlaceholder":167},[25,60220,60221],{"class":27,"line":33455},[25,60222,60223],{"class":244},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[25,60225,60226],{"class":27,"line":33461},[25,60227,60228],{"class":244},"    function toggle() {\n",[25,60230,60231],{"class":27,"line":33479},[25,60232,60233],{"class":244},"      \u002F\u002F 1.4 渲染对应的数据\n",[25,60235,60236],{"class":27,"line":33493},[25,60237,60238],{"class":244},"      img.src = data[i].url\n",[25,60240,60241],{"class":27,"line":33502},[25,60242,60243],{"class":244},"      p.innerHTML = data[i].title\n",[25,60245,60246],{"class":27,"line":33511},[25,60247,60248],{"class":244},"      footer.style.backgroundColor = data[i].color\n",[25,60250,60251],{"class":27,"line":33520},[25,60252,60253],{"class":244},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[25,60255,60256],{"class":27,"line":33529},[25,60257,60258],{"class":244},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[25,60260,60261],{"class":27,"line":33535},[25,60262,60263],{"class":244},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[25,60265,60266],{"class":27,"line":33541},[25,60267,2297],{"class":244},[25,60269,60270],{"class":27,"line":33549},[25,60271,2510],{"emptyLinePlaceholder":167},[25,60273,60274],{"class":27,"line":33554},[25,60275,60276],{"class":244},"    \u002F\u002F 3. 自动播放模块\n",[25,60278,60279],{"class":27,"line":33560},[25,60280,60281],{"class":244},"    let timerId = setInterval(function () {\n",[25,60283,60284],{"class":27,"line":33571},[25,60285,60286],{"class":244},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[25,60288,60289],{"class":27,"line":33577},[25,60290,60291],{"class":244},"      next.click()\n",[25,60293,60294],{"class":27,"line":33597},[25,60295,60296],{"class":244},"    }, 1000)\n",[25,60298,60299],{"class":27,"line":33603},[25,60300,2510],{"emptyLinePlaceholder":167},[25,60302,60303],{"class":27,"line":33609},[25,60304,60305],{"class":244},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[25,60307,60308],{"class":27,"line":33615},[25,60309,60310],{"class":244},"    const slider = document.querySelector('.slider')\n",[25,60312,60313],{"class":27,"line":33632},[25,60314,60315],{"class":244},"    \u002F\u002F 注册事件\n",[25,60317,60318],{"class":27,"line":33638},[25,60319,60320],{"class":244},"    slider.addEventListener('mouseenter', function () {\n",[25,60322,60323],{"class":27,"line":33644},[25,60324,60325],{"class":244},"      \u002F\u002F 停止定时器\n",[25,60327,60328],{"class":27,"line":33650},[25,60329,60330],{"class":244},"      clearInterval(timerId)\n",[25,60332,60333],{"class":27,"line":33656},[25,60334,33532],{"class":244},[25,60336,60337],{"class":27,"line":33662},[25,60338,2510],{"emptyLinePlaceholder":167},[25,60340,60341],{"class":27,"line":33689},[25,60342,60343],{"class":244},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[25,60345,60346],{"class":27,"line":33713},[25,60347,60315],{"class":244},[25,60349,60350],{"class":27,"line":33719},[25,60351,60352],{"class":244},"    slider.addEventListener('mouseleave', function () {\n",[25,60354,60355],{"class":27,"line":33725},[25,60356,60325],{"class":244},[25,60358,60359],{"class":27,"line":33731},[25,60360,60361],{"class":244},"      if (timerId) clearInterval(timerId)\n",[25,60363,60364],{"class":27,"line":33742},[25,60365,60366],{"class":244},"      \u002F\u002F 开启定时器\n",[25,60368,60369],{"class":27,"line":33753},[25,60370,60371],{"class":244},"      timerId = setInterval(function () {\n",[25,60373,60374],{"class":27,"line":33759},[25,60375,60376],{"class":244},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[25,60378,60379],{"class":27,"line":33776},[25,60380,60381],{"class":244},"        next.click()\n",[25,60383,60384],{"class":27,"line":33799},[25,60385,60386],{"class":244},"      }, 1000)\n",[25,60388,60389],{"class":27,"line":33822},[25,60390,33532],{"class":244},[25,60392,60393,60395,60397],{"class":27,"line":33828},[25,60394,52488],{"class":244},[25,60396,51884],{"class":51371},[25,60398,51378],{"class":244},[25,60400,60401,60403,60405],{"class":27,"line":33833},[25,60402,51856],{"class":244},[25,60404,51871],{"class":51371},[25,60406,51378],{"class":244},[25,60408,60409],{"class":27,"line":33842},[25,60410,2510],{"emptyLinePlaceholder":167},[25,60412,60413,60415,60417],{"class":27,"line":33852},[25,60414,51856],{"class":244},[25,60416,50706],{"class":51371},[25,60418,51378],{"class":244},[22108,60420,60422],{"id":60421},"_3252-焦点事件","3.2.5.2 焦点事件",[99,60424,60425],{},"小米搜索框案例：",[15,60427,60429],{"className":50704,"code":60428,"language":50706,"meta":20,"style":20},"\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",[22,60430,60431,60441,60455,60459,60467,60481,60501,60521,60533,60541,60547,60557,60567,60579,60583,60587,60594,60598,60609,60613,60617,60624,60635,60648,60662,60666,60670,60679,60691,60703,60717,60730,60743,60761,60772,60776,60780,60789,60806,60810,60814,60821,60831,60841,60852,60865,60877,60893,60904,60916,60920,60924,60932,60943,60960,60972,60984,60995,60999,61003,61014,61025,61029,61037,61041,61049,61053,61061,61076,61099,61114,61145,61172,61199,61226,61253,61280,61307,61316,61324,61332,61337,61357,61377,61382,61387,61405,61410,61420,61425,61439,61444,61449,61466,61475,61487,61491,61499,61507,61511],{"__ignoreMap":20},[25,60432,60433,60435,60437,60439],{"class":27,"line":28},[25,60434,51368],{"class":244},[25,60436,51372],{"class":51371},[25,60438,51375],{"class":31},[25,60440,51378],{"class":244},[25,60442,60443,60445,60447,60449,60451,60453],{"class":27,"line":39},[25,60444,1153],{"class":244},[25,60446,50706],{"class":51371},[25,60448,51387],{"class":31},[25,60450,290],{"class":244},[25,60452,51392],{"class":45},[25,60454,51378],{"class":244},[25,60456,60457],{"class":27,"line":51},[25,60458,2510],{"emptyLinePlaceholder":167},[25,60460,60461,60463,60465],{"class":27,"line":59},[25,60462,1153],{"class":244},[25,60464,51405],{"class":51371},[25,60466,51378],{"class":244},[25,60468,60469,60471,60473,60475,60477,60479],{"class":27,"line":67},[25,60470,51412],{"class":244},[25,60472,51415],{"class":51371},[25,60474,51418],{"class":31},[25,60476,290],{"class":244},[25,60478,51423],{"class":45},[25,60480,51378],{"class":244},[25,60482,60483,60485,60487,60489,60491,60493,60495,60497,60499],{"class":27,"line":75},[25,60484,51412],{"class":244},[25,60486,51415],{"class":51371},[25,60488,51434],{"class":31},[25,60490,290],{"class":244},[25,60492,51439],{"class":45},[25,60494,51442],{"class":31},[25,60496,290],{"class":244},[25,60498,51447],{"class":45},[25,60500,51378],{"class":244},[25,60502,60503,60505,60507,60509,60511,60513,60515,60517,60519],{"class":27,"line":83},[25,60504,51412],{"class":244},[25,60506,51415],{"class":51371},[25,60508,15030],{"class":31},[25,60510,290],{"class":244},[25,60512,51462],{"class":45},[25,60514,51442],{"class":31},[25,60516,290],{"class":244},[25,60518,51469],{"class":45},[25,60520,51378],{"class":244},[25,60522,60523,60525,60527,60529,60531],{"class":27,"line":91},[25,60524,51412],{"class":244},[25,60526,51478],{"class":51371},[25,60528,51481],{"class":244},[25,60530,51478],{"class":51371},[25,60532,51378],{"class":244},[25,60534,60535,60537,60539],{"class":27,"line":1429},[25,60536,51412],{"class":244},[25,60538,159],{"class":51371},[25,60540,51378],{"class":244},[25,60542,60543,60545],{"class":27,"line":1441},[25,60544,51498],{"class":51371},[25,60546,15682],{"class":244},[25,60548,60549,60551,60553,60555],{"class":27,"line":1723},[25,60550,51505],{"class":35},[25,60552,51508],{"class":244},[25,60554,434],{"class":35},[25,60556,1403],{"class":244},[25,60558,60559,60561,60563,60565],{"class":27,"line":1728},[25,60560,51517],{"class":35},[25,60562,51508],{"class":244},[25,60564,434],{"class":35},[25,60566,1403],{"class":244},[25,60568,60569,60572,60574,60577],{"class":27,"line":1734},[25,60570,60571],{"class":35},"            box-sizing",[25,60573,51508],{"class":244},[25,60575,60576],{"class":35},"border-box",[25,60578,1403],{"class":244},[25,60580,60581],{"class":27,"line":1739},[25,60582,2639],{"class":244},[25,60584,60585],{"class":27,"line":1753},[25,60586,2510],{"emptyLinePlaceholder":167},[25,60588,60589,60592],{"class":27,"line":1758},[25,60590,60591],{"class":51371},"        ul",[25,60593,15682],{"class":244},[25,60595,60596],{"class":27,"line":1764},[25,60597,2510],{"emptyLinePlaceholder":167},[25,60599,60600,60603,60605,60607],{"class":27,"line":1785},[25,60601,60602],{"class":35},"            list-style",[25,60604,51508],{"class":244},[25,60606,54808],{"class":35},[25,60608,1403],{"class":244},[25,60610,60611],{"class":27,"line":1790},[25,60612,2639],{"class":244},[25,60614,60615],{"class":27,"line":1804},[25,60616,2510],{"emptyLinePlaceholder":167},[25,60618,60619,60622],{"class":27,"line":1809},[25,60620,60621],{"class":31},"        .mi",[25,60623,15682],{"class":244},[25,60625,60626,60629,60631,60633],{"class":27,"line":1838},[25,60627,60628],{"class":35},"            position",[25,60630,51508],{"class":244},[25,60632,54835],{"class":35},[25,60634,1403],{"class":244},[25,60636,60637,60639,60641,60644,60646],{"class":27,"line":1843},[25,60638,51555],{"class":35},[25,60640,51508],{"class":244},[25,60642,60643],{"class":35},"223",[25,60645,51563],{"class":240},[25,60647,1403],{"class":244},[25,60649,60650,60652,60654,60656,60658,60660],{"class":27,"line":1860},[25,60651,51505],{"class":35},[25,60653,51508],{"class":244},[25,60655,554],{"class":35},[25,60657,51563],{"class":240},[25,60659,51627],{"class":35},[25,60661,1403],{"class":244},[25,60663,60664],{"class":27,"line":1865},[25,60665,2639],{"class":244},[25,60667,60668],{"class":27,"line":1870},[25,60669,2510],{"emptyLinePlaceholder":167},[25,60671,60672,60674,60677],{"class":27,"line":1875},[25,60673,60621],{"class":31},[25,60675,60676],{"class":51371}," input",[25,60678,15682],{"class":244},[25,60680,60681,60683,60685,60687,60689],{"class":27,"line":1889},[25,60682,51555],{"class":35},[25,60684,51508],{"class":244},[25,60686,60643],{"class":35},[25,60688,51563],{"class":240},[25,60690,1403],{"class":244},[25,60692,60693,60695,60697,60699,60701],{"class":27,"line":1894},[25,60694,51570],{"class":35},[25,60696,51508],{"class":244},[25,60698,850],{"class":35},[25,60700,51563],{"class":240},[25,60702,1403],{"class":244},[25,60704,60705,60707,60709,60711,60713,60715],{"class":27,"line":2687},[25,60706,51517],{"class":35},[25,60708,51508],{"class":244},[25,60710,434],{"class":35},[25,60712,2148],{"class":35},[25,60714,51563],{"class":240},[25,60716,1403],{"class":244},[25,60718,60719,60722,60724,60726,60728],{"class":27,"line":2701},[25,60720,60721],{"class":35},"            font-size",[25,60723,51508],{"class":244},[25,60725,792],{"class":35},[25,60727,51563],{"class":240},[25,60729,1403],{"class":244},[25,60731,60732,60735,60737,60739,60741],{"class":27,"line":2709},[25,60733,60734],{"class":35},"            line-height",[25,60736,51508],{"class":244},[25,60738,850],{"class":35},[25,60740,51563],{"class":240},[25,60742,1403],{"class":244},[25,60744,60745,60748,60750,60752,60754,60756,60759],{"class":27,"line":2714},[25,60746,60747],{"class":35},"            border",[25,60749,51508],{"class":244},[25,60751,460],{"class":35},[25,60753,51563],{"class":240},[25,60755,51592],{"class":35},[25,60757,60758],{"class":35}," #e0e0e0",[25,60760,1403],{"class":244},[25,60762,60763,60766,60768,60770],{"class":27,"line":2720},[25,60764,60765],{"class":35},"            outline",[25,60767,51508],{"class":244},[25,60769,54808],{"class":35},[25,60771,1403],{"class":244},[25,60773,60774],{"class":27,"line":2726},[25,60775,2639],{"class":244},[25,60777,60778],{"class":27,"line":2731},[25,60779,2510],{"emptyLinePlaceholder":167},[25,60781,60782,60784,60787],{"class":27,"line":8058},[25,60783,60621],{"class":31},[25,60785,60786],{"class":31}," .search",[25,60788,15682],{"class":244},[25,60790,60791,60793,60795,60797,60799,60801,60804],{"class":27,"line":8082},[25,60792,60747],{"class":35},[25,60794,51508],{"class":244},[25,60796,460],{"class":35},[25,60798,51563],{"class":240},[25,60800,51592],{"class":35},[25,60802,60803],{"class":35}," #ff6700",[25,60805,1403],{"class":244},[25,60807,60808],{"class":27,"line":8087},[25,60809,2639],{"class":244},[25,60811,60812],{"class":27,"line":8093},[25,60813,2510],{"emptyLinePlaceholder":167},[25,60815,60816,60819],{"class":27,"line":8120},[25,60817,60818],{"class":31},"        .result-list",[25,60820,15682],{"class":244},[25,60822,60823,60825,60827,60829],{"class":27,"line":8125},[25,60824,51543],{"class":35},[25,60826,51508],{"class":244},[25,60828,54808],{"class":35},[25,60830,1403],{"class":244},[25,60832,60833,60835,60837,60839],{"class":27,"line":8131},[25,60834,60628],{"class":35},[25,60836,51508],{"class":244},[25,60838,54902],{"class":35},[25,60840,1403],{"class":244},[25,60842,60843,60846,60848,60850],{"class":27,"line":8143},[25,60844,60845],{"class":35},"            left",[25,60847,51508],{"class":244},[25,60849,434],{"class":35},[25,60851,1403],{"class":244},[25,60853,60854,60857,60859,60861,60863],{"class":27,"line":8155},[25,60855,60856],{"class":35},"            top",[25,60858,51508],{"class":244},[25,60860,850],{"class":35},[25,60862,51563],{"class":240},[25,60864,1403],{"class":244},[25,60866,60867,60869,60871,60873,60875],{"class":27,"line":8167},[25,60868,51555],{"class":35},[25,60870,51508],{"class":244},[25,60872,60643],{"class":35},[25,60874,51563],{"class":240},[25,60876,1403],{"class":244},[25,60878,60879,60881,60883,60885,60887,60889,60891],{"class":27,"line":9826},[25,60880,60747],{"class":35},[25,60882,51508],{"class":244},[25,60884,460],{"class":35},[25,60886,51563],{"class":240},[25,60888,51592],{"class":35},[25,60890,60803],{"class":35},[25,60892,1403],{"class":244},[25,60894,60895,60898,60900,60902],{"class":27,"line":9851},[25,60896,60897],{"class":35},"            border-top",[25,60899,51508],{"class":244},[25,60901,434],{"class":35},[25,60903,1403],{"class":244},[25,60905,60906,60909,60911,60914],{"class":27,"line":9874},[25,60907,60908],{"class":35},"            background",[25,60910,51508],{"class":244},[25,60912,60913],{"class":35},"#fff",[25,60915,1403],{"class":244},[25,60917,60918],{"class":27,"line":9898},[25,60919,2639],{"class":244},[25,60921,60922],{"class":27,"line":9903},[25,60923,2510],{"emptyLinePlaceholder":167},[25,60925,60926,60928,60930],{"class":27,"line":9908},[25,60927,60818],{"class":31},[25,60929,1510],{"class":51371},[25,60931,15682],{"class":244},[25,60933,60934,60936,60938,60941],{"class":27,"line":9913},[25,60935,51543],{"class":35},[25,60937,51508],{"class":244},[25,60939,60940],{"class":35},"block",[25,60942,1403],{"class":244},[25,60944,60945,60947,60949,60951,60953,60956,60958],{"class":27,"line":9922},[25,60946,51517],{"class":35},[25,60948,51508],{"class":244},[25,60950,587],{"class":35},[25,60952,51563],{"class":240},[25,60954,60955],{"class":35}," 15",[25,60957,51563],{"class":240},[25,60959,1403],{"class":244},[25,60961,60962,60964,60966,60968,60970],{"class":27,"line":9927},[25,60963,60721],{"class":35},[25,60965,51508],{"class":244},[25,60967,741],{"class":35},[25,60969,51563],{"class":240},[25,60971,1403],{"class":244},[25,60973,60974,60977,60979,60982],{"class":27,"line":9933},[25,60975,60976],{"class":35},"            color",[25,60978,51508],{"class":244},[25,60980,60981],{"class":35},"#424242",[25,60983,1403],{"class":244},[25,60985,60986,60989,60991,60993],{"class":27,"line":9954},[25,60987,60988],{"class":35},"            text-decoration",[25,60990,51508],{"class":244},[25,60992,54808],{"class":35},[25,60994,1403],{"class":244},[25,60996,60997],{"class":27,"line":9960},[25,60998,2639],{"class":244},[25,61000,61001],{"class":27,"line":9974},[25,61002,2510],{"emptyLinePlaceholder":167},[25,61004,61005,61007,61009,61012],{"class":27,"line":9980},[25,61006,60818],{"class":31},[25,61008,1510],{"class":51371},[25,61010,61011],{"class":31},":hover",[25,61013,15682],{"class":244},[25,61015,61016,61018,61020,61023],{"class":27,"line":10007},[25,61017,51711],{"class":35},[25,61019,51508],{"class":244},[25,61021,61022],{"class":35},"#eee",[25,61024,1403],{"class":244},[25,61026,61027],{"class":27,"line":10016},[25,61028,2639],{"class":244},[25,61030,61031,61033,61035],{"class":27,"line":10022},[25,61032,51847],{"class":244},[25,61034,159],{"class":51371},[25,61036,51378],{"class":244},[25,61038,61039],{"class":27,"line":10030},[25,61040,2510],{"emptyLinePlaceholder":167},[25,61042,61043,61045,61047],{"class":27,"line":10035},[25,61044,51856],{"class":244},[25,61046,51405],{"class":51371},[25,61048,51378],{"class":244},[25,61050,61051],{"class":27,"line":16714},[25,61052,2510],{"emptyLinePlaceholder":167},[25,61054,61055,61057,61059],{"class":27,"line":16720},[25,61056,1153],{"class":244},[25,61058,51871],{"class":51371},[25,61060,51378],{"class":244},[25,61062,61063,61065,61067,61069,61071,61074],{"class":27,"line":16743},[25,61064,51412],{"class":244},[25,61066,51682],{"class":51371},[25,61068,53557],{"class":31},[25,61070,290],{"class":244},[25,61072,61073],{"class":45},"\"mi\"",[25,61075,51378],{"class":244},[25,61077,61078,61080,61082,61084,61086,61089,61092,61094,61097],{"class":27,"line":16749},[25,61079,55373],{"class":244},[25,61081,53892],{"class":51371},[25,61083,53895],{"class":31},[25,61085,290],{"class":244},[25,61087,61088],{"class":45},"\"search\"",[25,61090,61091],{"class":31}," placeholder",[25,61093,290],{"class":244},[25,61095,61096],{"class":45},"\"小米笔记本\"",[25,61098,51378],{"class":244},[25,61100,61101,61103,61105,61107,61109,61112],{"class":27,"line":16772},[25,61102,55373],{"class":244},[25,61104,103],{"class":51371},[25,61106,53557],{"class":31},[25,61108,290],{"class":244},[25,61110,61111],{"class":45},"\"result-list\"",[25,61113,51378],{"class":244},[25,61115,61116,61119,61121,61124,61126,61129,61131,61134,61137,61139,61141,61143],{"class":27,"line":16786},[25,61117,61118],{"class":244},"            \u003C",[25,61120,106],{"class":51371},[25,61122,61123],{"class":244},">\u003C",[25,61125,481],{"class":51371},[25,61127,61128],{"class":31}," href",[25,61130,290],{"class":244},[25,61132,61133],{"class":45},"\"#\"",[25,61135,61136],{"class":244},">全部商品\u003C\u002F",[25,61138,481],{"class":51371},[25,61140,55385],{"class":244},[25,61142,106],{"class":51371},[25,61144,51378],{"class":244},[25,61146,61147,61149,61151,61153,61155,61157,61159,61161,61164,61166,61168,61170],{"class":27,"line":16806},[25,61148,61118],{"class":244},[25,61150,106],{"class":51371},[25,61152,61123],{"class":244},[25,61154,481],{"class":51371},[25,61156,61128],{"class":31},[25,61158,290],{"class":244},[25,61160,61133],{"class":45},[25,61162,61163],{"class":244},">小米11\u003C\u002F",[25,61165,481],{"class":51371},[25,61167,55385],{"class":244},[25,61169,106],{"class":51371},[25,61171,51378],{"class":244},[25,61173,61174,61176,61178,61180,61182,61184,61186,61188,61191,61193,61195,61197],{"class":27,"line":16812},[25,61175,61118],{"class":244},[25,61177,106],{"class":51371},[25,61179,61123],{"class":244},[25,61181,481],{"class":51371},[25,61183,61128],{"class":31},[25,61185,290],{"class":244},[25,61187,61133],{"class":45},[25,61189,61190],{"class":244},">小米10S\u003C\u002F",[25,61192,481],{"class":51371},[25,61194,55385],{"class":244},[25,61196,106],{"class":51371},[25,61198,51378],{"class":244},[25,61200,61201,61203,61205,61207,61209,61211,61213,61215,61218,61220,61222,61224],{"class":27,"line":16823},[25,61202,61118],{"class":244},[25,61204,106],{"class":51371},[25,61206,61123],{"class":244},[25,61208,481],{"class":51371},[25,61210,61128],{"class":31},[25,61212,290],{"class":244},[25,61214,61133],{"class":45},[25,61216,61217],{"class":244},">小米笔记本\u003C\u002F",[25,61219,481],{"class":51371},[25,61221,55385],{"class":244},[25,61223,106],{"class":51371},[25,61225,51378],{"class":244},[25,61227,61228,61230,61232,61234,61236,61238,61240,61242,61245,61247,61249,61251],{"class":27,"line":16846},[25,61229,61118],{"class":244},[25,61231,106],{"class":51371},[25,61233,61123],{"class":244},[25,61235,481],{"class":51371},[25,61237,61128],{"class":31},[25,61239,290],{"class":244},[25,61241,61133],{"class":45},[25,61243,61244],{"class":244},">小米手机\u003C\u002F",[25,61246,481],{"class":51371},[25,61248,55385],{"class":244},[25,61250,106],{"class":51371},[25,61252,51378],{"class":244},[25,61254,61255,61257,61259,61261,61263,61265,61267,61269,61272,61274,61276,61278],{"class":27,"line":16868},[25,61256,61118],{"class":244},[25,61258,106],{"class":51371},[25,61260,61123],{"class":244},[25,61262,481],{"class":51371},[25,61264,61128],{"class":31},[25,61266,290],{"class":244},[25,61268,61133],{"class":45},[25,61270,61271],{"class":244},">黑鲨4\u003C\u002F",[25,61273,481],{"class":51371},[25,61275,55385],{"class":244},[25,61277,106],{"class":51371},[25,61279,51378],{"class":244},[25,61281,61282,61284,61286,61288,61290,61292,61294,61296,61299,61301,61303,61305],{"class":27,"line":16873},[25,61283,61118],{"class":244},[25,61285,106],{"class":51371},[25,61287,61123],{"class":244},[25,61289,481],{"class":51371},[25,61291,61128],{"class":31},[25,61293,290],{"class":244},[25,61295,61133],{"class":45},[25,61297,61298],{"class":244},">空调\u003C\u002F",[25,61300,481],{"class":51371},[25,61302,55385],{"class":244},[25,61304,106],{"class":51371},[25,61306,51378],{"class":244},[25,61308,61309,61312,61314],{"class":27,"line":16879},[25,61310,61311],{"class":244},"        \u003C\u002F",[25,61313,103],{"class":51371},[25,61315,51378],{"class":244},[25,61317,61318,61320,61322],{"class":27,"line":16893},[25,61319,51847],{"class":244},[25,61321,51682],{"class":51371},[25,61323,51378],{"class":244},[25,61325,61326,61328,61330],{"class":27,"line":16906},[25,61327,51412],{"class":244},[25,61329,51884],{"class":51371},[25,61331,51378],{"class":244},[25,61333,61334],{"class":27,"line":16911},[25,61335,61336],{"class":302},"        \u002F\u002F 1. 获取元素\n",[25,61338,61339,61342,61344,61346,61348,61350,61352,61355],{"class":27,"line":16925},[25,61340,61341],{"class":240},"        const",[25,61343,60676],{"class":35},[25,61345,13674],{"class":240},[25,61347,54467],{"class":244},[25,61349,54470],{"class":31},[25,61351,245],{"class":244},[25,61353,61354],{"class":45},"'[type=search]'",[25,61356,251],{"class":244},[25,61358,61359,61361,61364,61366,61368,61370,61372,61375],{"class":27,"line":16930},[25,61360,61341],{"class":240},[25,61362,61363],{"class":35}," ul",[25,61365,13674],{"class":240},[25,61367,54467],{"class":244},[25,61369,54470],{"class":31},[25,61371,245],{"class":244},[25,61373,61374],{"class":45},"'.result-list'",[25,61376,251],{"class":244},[25,61378,61379],{"class":27,"line":16936},[25,61380,61381],{"class":302},"        \u002F\u002F console.log(input)\n",[25,61383,61384],{"class":27,"line":16941},[25,61385,61386],{"class":302},"        \u002F\u002F 2. 监听事件 获得焦点\n",[25,61388,61389,61392,61394,61396,61399,61401,61403],{"class":27,"line":16955},[25,61390,61391],{"class":244},"        input.",[25,61393,57884],{"class":31},[25,61395,245],{"class":244},[25,61397,61398],{"class":45},"'focus'",[25,61400,12545],{"class":244},[25,61402,54520],{"class":240},[25,61404,54523],{"class":244},[25,61406,61407],{"class":27,"line":16960},[25,61408,61409],{"class":302},"            \u002F\u002F ul显示\n",[25,61411,61412,61415,61417],{"class":27,"line":16965},[25,61413,61414],{"class":244},"            ul.style.display ",[25,61416,290],{"class":240},[25,61418,61419],{"class":45}," 'block'\n",[25,61421,61422],{"class":27,"line":16979},[25,61423,61424],{"class":302},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[25,61426,61427,61430,61432,61434,61437],{"class":27,"line":16991},[25,61428,61429],{"class":244},"            input.classList.",[25,61431,5444],{"class":31},[25,61433,245],{"class":244},[25,61435,61436],{"class":45},"'search'",[25,61438,251],{"class":244},[25,61440,61441],{"class":27,"line":16996},[25,61442,61443],{"class":244},"        })\n",[25,61445,61446],{"class":27,"line":17009},[25,61447,61448],{"class":302},"        \u002F\u002F 3. 监听事件 失去焦点\n",[25,61450,61451,61453,61455,61457,61460,61462,61464],{"class":27,"line":17014},[25,61452,61391],{"class":244},[25,61454,57884],{"class":31},[25,61456,245],{"class":244},[25,61458,61459],{"class":45},"'blur'",[25,61461,12545],{"class":244},[25,61463,54520],{"class":240},[25,61465,54523],{"class":244},[25,61467,61468,61470,61472],{"class":27,"line":17019},[25,61469,61414],{"class":244},[25,61471,290],{"class":240},[25,61473,61474],{"class":45}," 'none'\n",[25,61476,61477,61479,61481,61483,61485],{"class":27,"line":17024},[25,61478,61429],{"class":244},[25,61480,57077],{"class":31},[25,61482,245],{"class":244},[25,61484,61436],{"class":45},[25,61486,251],{"class":244},[25,61488,61489],{"class":27,"line":17037},[25,61490,61443],{"class":244},[25,61492,61493,61495,61497],{"class":27,"line":17042},[25,61494,51847],{"class":244},[25,61496,51884],{"class":51371},[25,61498,51378],{"class":244},[25,61500,61501,61503,61505],{"class":27,"line":32704},[25,61502,51856],{"class":244},[25,61504,51871],{"class":51371},[25,61506,51378],{"class":244},[25,61508,61509],{"class":27,"line":32710},[25,61510,2510],{"emptyLinePlaceholder":167},[25,61512,61513,61515,61517],{"class":27,"line":32716},[25,61514,51856],{"class":244},[25,61516,50706],{"class":51371},[25,61518,51378],{"class":244},[22108,61520,61522],{"id":61521},"_3253-键盘事件","3.2.5.3 键盘事件",[99,61524,61525],{},"评论字数统计案例",[99,61527,61528],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[99,61530,61531],{},"牢记focus伪类选择器",[51415,61533],{"charSet":61534},"UTF-8",[51415,61536],{"name":61537,"content":61538},"viewport","width=device-width, initial-scale=1.0",[51478,61540,61541],{},"Document",[159,61543,61544],{},"\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",[53892,61546],{"type":5297},[103,61548,61549,61552],{},[106,61550,61551],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[106,61553,61554],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[15,61556,61558],{"className":50704,"code":61557,"language":50706,"meta":20,"style":20},"\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",[22,61559,61560,61570,61584,61588,61596,61610,61630,61650,61663,61671,61678,61691,61705,61715,61725,61729,61733,61740,61752,61764,61776,61788,61817,61830,61834,61838,61847,61858,61870,61881,61892,61904,61915,61927,61943,61955,61959,61963,61974,61985,61995,62007,62011,62015,62023,62034,62044,62055,62067,62080,62092,62104,62108,62112,62121,62133,62144,62157,62168,62182,62186,62190,62197,62209,62221,62231,62235,62239,62248,62260,62270,62274,62278,62289,62299,62318,62331,62335,62339,62349,62359,62363,62367,62378,62389,62401,62413,62417,62421,62432,62443,62457,62461,62465,62476,62486,62498,62502,62510,62518,62522,62530,62545,62564,62604,62617,62625,62639,62659,62667,62682,62705,62723,62738,62758,62778,62798,62806,62814,62822,62830,62850,62870,62875,62892,62901,62905,62910,62926,62934,62938,62943,62960,62965,62990,62994,62998,63003,63008,63016,63024,63028],{"__ignoreMap":20},[25,61561,61562,61564,61566,61568],{"class":27,"line":28},[25,61563,51368],{"class":244},[25,61565,51372],{"class":51371},[25,61567,51375],{"class":31},[25,61569,51378],{"class":244},[25,61571,61572,61574,61576,61578,61580,61582],{"class":27,"line":39},[25,61573,1153],{"class":244},[25,61575,50706],{"class":51371},[25,61577,51387],{"class":31},[25,61579,290],{"class":244},[25,61581,51392],{"class":45},[25,61583,51378],{"class":244},[25,61585,61586],{"class":27,"line":51},[25,61587,2510],{"emptyLinePlaceholder":167},[25,61589,61590,61592,61594],{"class":27,"line":59},[25,61591,1153],{"class":244},[25,61593,51405],{"class":51371},[25,61595,51378],{"class":244},[25,61597,61598,61600,61602,61604,61606,61608],{"class":27,"line":67},[25,61599,52215],{"class":244},[25,61601,51415],{"class":51371},[25,61603,51418],{"class":31},[25,61605,290],{"class":244},[25,61607,51423],{"class":45},[25,61609,51378],{"class":244},[25,61611,61612,61614,61616,61618,61620,61622,61624,61626,61628],{"class":27,"line":75},[25,61613,52215],{"class":244},[25,61615,51415],{"class":51371},[25,61617,51434],{"class":31},[25,61619,290],{"class":244},[25,61621,51439],{"class":45},[25,61623,51442],{"class":31},[25,61625,290],{"class":244},[25,61627,51447],{"class":45},[25,61629,51378],{"class":244},[25,61631,61632,61634,61636,61638,61640,61642,61644,61646,61648],{"class":27,"line":83},[25,61633,52215],{"class":244},[25,61635,51415],{"class":51371},[25,61637,15030],{"class":31},[25,61639,290],{"class":244},[25,61641,51462],{"class":45},[25,61643,51442],{"class":31},[25,61645,290],{"class":244},[25,61647,51469],{"class":45},[25,61649,51378],{"class":244},[25,61651,61652,61654,61656,61659,61661],{"class":27,"line":91},[25,61653,52215],{"class":244},[25,61655,51478],{"class":51371},[25,61657,61658],{"class":244},">评论回车发布\u003C\u002F",[25,61660,51478],{"class":51371},[25,61662,51378],{"class":244},[25,61664,61665,61667,61669],{"class":27,"line":1429},[25,61666,52215],{"class":244},[25,61668,159],{"class":51371},[25,61670,51378],{"class":244},[25,61672,61673,61676],{"class":27,"line":1441},[25,61674,61675],{"class":31},"    .wrapper",[25,61677,15682],{"class":244},[25,61679,61680,61683,61685,61687,61689],{"class":27,"line":1723},[25,61681,61682],{"class":35},"      min-width",[25,61684,51508],{"class":244},[25,61686,4097],{"class":35},[25,61688,51563],{"class":240},[25,61690,1403],{"class":244},[25,61692,61693,61696,61698,61701,61703],{"class":27,"line":1728},[25,61694,61695],{"class":35},"      max-width",[25,61697,51508],{"class":244},[25,61699,61700],{"class":35},"800",[25,61702,51563],{"class":240},[25,61704,1403],{"class":244},[25,61706,61707,61709,61711,61713],{"class":27,"line":1734},[25,61708,55080],{"class":35},[25,61710,51508],{"class":244},[25,61712,51548],{"class":35},[25,61714,1403],{"class":244},[25,61716,61717,61719,61721,61723],{"class":27,"line":1739},[25,61718,55091],{"class":35},[25,61720,51508],{"class":244},[25,61722,51651],{"class":35},[25,61724,1403],{"class":244},[25,61726,61727],{"class":27,"line":1753},[25,61728,2297],{"class":244},[25,61730,61731],{"class":27,"line":1758},[25,61732,2510],{"emptyLinePlaceholder":167},[25,61734,61735,61738],{"class":27,"line":1764},[25,61736,61737],{"class":31},"    .avatar",[25,61739,15682],{"class":244},[25,61741,61742,61744,61746,61748,61750],{"class":27,"line":1785},[25,61743,54842],{"class":35},[25,61745,51508],{"class":244},[25,61747,850],{"class":35},[25,61749,51563],{"class":240},[25,61751,1403],{"class":244},[25,61753,61754,61756,61758,61760,61762],{"class":27,"line":1790},[25,61755,54856],{"class":35},[25,61757,51508],{"class":244},[25,61759,850],{"class":35},[25,61761,51563],{"class":240},[25,61763,1403],{"class":244},[25,61765,61766,61768,61770,61772,61774],{"class":27,"line":1804},[25,61767,55205],{"class":35},[25,61769,51508],{"class":244},[25,61771,899],{"class":35},[25,61773,571],{"class":240},[25,61775,1403],{"class":244},[25,61777,61778,61781,61783,61786],{"class":27,"line":1809},[25,61779,61780],{"class":35},"      overflow",[25,61782,51508],{"class":244},[25,61784,61785],{"class":35},"hidden",[25,61787,1403],{"class":244},[25,61789,61790,61793,61795,61798,61800,61803,61805,61808,61810,61812,61815],{"class":27,"line":1838},[25,61791,61792],{"class":35},"      background",[25,61794,51508],{"class":244},[25,61796,61797],{"class":35},"url",[25,61799,245],{"class":244},[25,61801,61802],{"class":5326},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[25,61804,13824],{"class":244},[25,61806,61807],{"class":35},"no-repeat",[25,61809,17254],{"class":35},[25,61811,25085],{"class":244},[25,61813,61814],{"class":35},"cover",[25,61816,1403],{"class":244},[25,61818,61819,61822,61824,61826,61828],{"class":27,"line":1843},[25,61820,61821],{"class":35},"      margin-right",[25,61823,51508],{"class":244},[25,61825,943],{"class":35},[25,61827,51563],{"class":240},[25,61829,1403],{"class":244},[25,61831,61832],{"class":27,"line":1860},[25,61833,2297],{"class":244},[25,61835,61836],{"class":27,"line":1865},[25,61837,2510],{"emptyLinePlaceholder":167},[25,61839,61840,61842,61845],{"class":27,"line":1870},[25,61841,61675],{"class":31},[25,61843,61844],{"class":51371}," textarea",[25,61846,15682],{"class":244},[25,61848,61849,61852,61854,61856],{"class":27,"line":1875},[25,61850,61851],{"class":35},"      outline",[25,61853,51508],{"class":244},[25,61855,54808],{"class":35},[25,61857,1403],{"class":244},[25,61859,61860,61863,61865,61868],{"class":27,"line":1889},[25,61861,61862],{"class":35},"      border-color",[25,61864,51508],{"class":244},[25,61866,61867],{"class":35},"transparent",[25,61869,1403],{"class":244},[25,61871,61872,61875,61877,61879],{"class":27,"line":1894},[25,61873,61874],{"class":35},"      resize",[25,61876,51508],{"class":244},[25,61878,54808],{"class":35},[25,61880,1403],{"class":244},[25,61882,61883,61885,61887,61890],{"class":27,"line":2687},[25,61884,61792],{"class":35},[25,61886,51508],{"class":244},[25,61888,61889],{"class":35},"#f5f5f5",[25,61891,1403],{"class":244},[25,61893,61894,61896,61898,61900,61902],{"class":27,"line":2701},[25,61895,55205],{"class":35},[25,61897,51508],{"class":244},[25,61899,536],{"class":35},[25,61901,51563],{"class":240},[25,61903,1403],{"class":244},[25,61905,61906,61909,61911,61913],{"class":27,"line":2709},[25,61907,61908],{"class":35},"      flex",[25,61910,51508],{"class":244},[25,61912,460],{"class":35},[25,61914,1403],{"class":244},[25,61916,61917,61919,61921,61923,61925],{"class":27,"line":2714},[25,61918,54766],{"class":35},[25,61920,51508],{"class":244},[25,61922,689],{"class":35},[25,61924,51563],{"class":240},[25,61926,1403],{"class":244},[25,61928,61929,61932,61934,61936,61939,61941],{"class":27,"line":2720},[25,61930,61931],{"class":35},"      transition",[25,61933,51508],{"class":244},[25,61935,28192],{"class":35},[25,61937,61938],{"class":35}," 0.5",[25,61940,938],{"class":240},[25,61942,1403],{"class":244},[25,61944,61945,61947,61949,61951,61953],{"class":27,"line":2726},[25,61946,54856],{"class":35},[25,61948,51508],{"class":244},[25,61950,1194],{"class":35},[25,61952,51563],{"class":240},[25,61954,1403],{"class":244},[25,61956,61957],{"class":27,"line":2731},[25,61958,2297],{"class":244},[25,61960,61961],{"class":27,"line":8058},[25,61962,2510],{"emptyLinePlaceholder":167},[25,61964,61965,61967,61969,61972],{"class":27,"line":8082},[25,61966,61675],{"class":31},[25,61968,61844],{"class":51371},[25,61970,61971],{"class":31},":focus",[25,61973,15682],{"class":244},[25,61975,61976,61978,61980,61983],{"class":27,"line":8087},[25,61977,61862],{"class":35},[25,61979,51508],{"class":244},[25,61981,61982],{"class":35},"#e4e4e4",[25,61984,1403],{"class":244},[25,61986,61987,61989,61991,61993],{"class":27,"line":8093},[25,61988,61792],{"class":35},[25,61990,51508],{"class":244},[25,61992,60913],{"class":35},[25,61994,1403],{"class":244},[25,61996,61997,61999,62001,62003,62005],{"class":27,"line":8120},[25,61998,54856],{"class":35},[25,62000,51508],{"class":244},[25,62002,899],{"class":35},[25,62004,51563],{"class":240},[25,62006,1403],{"class":244},[25,62008,62009],{"class":27,"line":8125},[25,62010,2297],{"class":244},[25,62012,62013],{"class":27,"line":8131},[25,62014,2510],{"emptyLinePlaceholder":167},[25,62016,62017,62019,62021],{"class":27,"line":8143},[25,62018,61675],{"class":31},[25,62020,57538],{"class":51371},[25,62022,15682],{"class":244},[25,62024,62025,62027,62029,62032],{"class":27,"line":8155},[25,62026,61792],{"class":35},[25,62028,51508],{"class":244},[25,62030,62031],{"class":35},"#00aeec",[25,62033,1403],{"class":244},[25,62035,62036,62038,62040,62042],{"class":27,"line":8167},[25,62037,57487],{"class":35},[25,62039,51508],{"class":244},[25,62041,60913],{"class":35},[25,62043,1403],{"class":244},[25,62045,62046,62049,62051,62053],{"class":27,"line":9826},[25,62047,62048],{"class":35},"      border",[25,62050,51508],{"class":244},[25,62052,54808],{"class":35},[25,62054,1403],{"class":244},[25,62056,62057,62059,62061,62063,62065],{"class":27,"line":9851},[25,62058,55205],{"class":35},[25,62060,51508],{"class":244},[25,62062,536],{"class":35},[25,62064,51563],{"class":240},[25,62066,1403],{"class":244},[25,62068,62069,62072,62074,62076,62078],{"class":27,"line":9874},[25,62070,62071],{"class":35},"      margin-left",[25,62073,51508],{"class":244},[25,62075,689],{"class":35},[25,62077,51563],{"class":240},[25,62079,1403],{"class":244},[25,62081,62082,62084,62086,62088,62090],{"class":27,"line":9898},[25,62083,54842],{"class":35},[25,62085,51508],{"class":244},[25,62087,599],{"class":35},[25,62089,51563],{"class":240},[25,62091,1403],{"class":244},[25,62093,62094,62097,62099,62102],{"class":27,"line":9903},[25,62095,62096],{"class":35},"      cursor",[25,62098,51508],{"class":244},[25,62100,62101],{"class":35},"pointer",[25,62103,1403],{"class":244},[25,62105,62106],{"class":27,"line":9908},[25,62107,2297],{"class":244},[25,62109,62110],{"class":27,"line":9913},[25,62111,2510],{"emptyLinePlaceholder":167},[25,62113,62114,62116,62119],{"class":27,"line":9922},[25,62115,61675],{"class":31},[25,62117,62118],{"class":31}," .total",[25,62120,15682],{"class":244},[25,62122,62123,62125,62127,62129,62131],{"class":27,"line":9927},[25,62124,61821],{"class":35},[25,62126,51508],{"class":244},[25,62128,855],{"class":35},[25,62130,51563],{"class":240},[25,62132,1403],{"class":244},[25,62134,62135,62137,62139,62142],{"class":27,"line":9933},[25,62136,57487],{"class":35},[25,62138,51508],{"class":244},[25,62140,62141],{"class":35},"#999",[25,62143,1403],{"class":244},[25,62145,62146,62149,62151,62153,62155],{"class":27,"line":9954},[25,62147,62148],{"class":35},"      margin-top",[25,62150,51508],{"class":244},[25,62152,562],{"class":35},[25,62154,51563],{"class":240},[25,62156,1403],{"class":244},[25,62158,62159,62162,62164,62166],{"class":27,"line":9960},[25,62160,62161],{"class":35},"      opacity",[25,62163,51508],{"class":244},[25,62165,434],{"class":35},[25,62167,1403],{"class":244},[25,62169,62170,62172,62174,62176,62178,62180],{"class":27,"line":9974},[25,62171,61931],{"class":35},[25,62173,51508],{"class":244},[25,62175,28192],{"class":35},[25,62177,61938],{"class":35},[25,62179,938],{"class":240},[25,62181,1403],{"class":244},[25,62183,62184],{"class":27,"line":9980},[25,62185,2297],{"class":244},[25,62187,62188],{"class":27,"line":10007},[25,62189,2510],{"emptyLinePlaceholder":167},[25,62191,62192,62195],{"class":27,"line":10016},[25,62193,62194],{"class":31},"    .list",[25,62196,15682],{"class":244},[25,62198,62199,62201,62203,62205,62207],{"class":27,"line":10022},[25,62200,61682],{"class":35},[25,62202,51508],{"class":244},[25,62204,4097],{"class":35},[25,62206,51563],{"class":240},[25,62208,1403],{"class":244},[25,62210,62211,62213,62215,62217,62219],{"class":27,"line":10030},[25,62212,61695],{"class":35},[25,62214,51508],{"class":244},[25,62216,61700],{"class":35},[25,62218,51563],{"class":240},[25,62220,1403],{"class":244},[25,62222,62223,62225,62227,62229],{"class":27,"line":10035},[25,62224,55080],{"class":35},[25,62226,51508],{"class":244},[25,62228,51548],{"class":35},[25,62230,1403],{"class":244},[25,62232,62233],{"class":27,"line":16714},[25,62234,2297],{"class":244},[25,62236,62237],{"class":27,"line":16720},[25,62238,2510],{"emptyLinePlaceholder":167},[25,62240,62241,62243,62246],{"class":27,"line":16743},[25,62242,62194],{"class":31},[25,62244,62245],{"class":31}," .item",[25,62247,15682],{"class":244},[25,62249,62250,62252,62254,62256,62258],{"class":27,"line":16749},[25,62251,54842],{"class":35},[25,62253,51508],{"class":244},[25,62255,554],{"class":35},[25,62257,571],{"class":240},[25,62259,1403],{"class":244},[25,62261,62262,62264,62266,62268],{"class":27,"line":16772},[25,62263,55080],{"class":35},[25,62265,51508],{"class":244},[25,62267,51548],{"class":35},[25,62269,1403],{"class":244},[25,62271,62272],{"class":27,"line":16786},[25,62273,2297],{"class":244},[25,62275,62276],{"class":27,"line":16806},[25,62277,2510],{"emptyLinePlaceholder":167},[25,62279,62280,62282,62284,62287],{"class":27,"line":16812},[25,62281,62194],{"class":31},[25,62283,62245],{"class":31},[25,62285,62286],{"class":31}," .info",[25,62288,15682],{"class":244},[25,62290,62291,62293,62295,62297],{"class":27,"line":16823},[25,62292,61908],{"class":35},[25,62294,51508],{"class":244},[25,62296,460],{"class":35},[25,62298,1403],{"class":244},[25,62300,62301,62304,62306,62308,62310,62313,62316],{"class":27,"line":16846},[25,62302,62303],{"class":35},"      border-bottom",[25,62305,51508],{"class":244},[25,62307,460],{"class":35},[25,62309,51563],{"class":240},[25,62311,62312],{"class":35}," dashed",[25,62314,62315],{"class":35}," #e4e4e4",[25,62317,1403],{"class":244},[25,62319,62320,62323,62325,62327,62329],{"class":27,"line":16868},[25,62321,62322],{"class":35},"      padding-bottom",[25,62324,51508],{"class":244},[25,62326,689],{"class":35},[25,62328,51563],{"class":240},[25,62330,1403],{"class":244},[25,62332,62333],{"class":27,"line":16873},[25,62334,2297],{"class":244},[25,62336,62337],{"class":27,"line":16879},[25,62338,2510],{"emptyLinePlaceholder":167},[25,62340,62341,62343,62345,62347],{"class":27,"line":16893},[25,62342,62194],{"class":31},[25,62344,62245],{"class":31},[25,62346,6935],{"class":51371},[25,62348,15682],{"class":244},[25,62350,62351,62353,62355,62357],{"class":27,"line":16906},[25,62352,54777],{"class":35},[25,62354,51508],{"class":244},[25,62356,434],{"class":35},[25,62358,1403],{"class":244},[25,62360,62361],{"class":27,"line":16911},[25,62362,2297],{"class":244},[25,62364,62365],{"class":27,"line":16925},[25,62366,2510],{"emptyLinePlaceholder":167},[25,62368,62369,62371,62373,62376],{"class":27,"line":16930},[25,62370,62194],{"class":31},[25,62372,62245],{"class":31},[25,62374,62375],{"class":31}," .name",[25,62377,15682],{"class":244},[25,62379,62380,62382,62384,62387],{"class":27,"line":16936},[25,62381,57487],{"class":35},[25,62383,51508],{"class":244},[25,62385,62386],{"class":35},"#FB7299",[25,62388,1403],{"class":244},[25,62390,62391,62393,62395,62397,62399],{"class":27,"line":16941},[25,62392,54993],{"class":35},[25,62394,51508],{"class":244},[25,62396,792],{"class":35},[25,62398,51563],{"class":240},[25,62400,1403],{"class":244},[25,62402,62403,62406,62408,62411],{"class":27,"line":16955},[25,62404,62405],{"class":35},"      font-weight",[25,62407,51508],{"class":244},[25,62409,62410],{"class":35},"bold",[25,62412,1403],{"class":244},[25,62414,62415],{"class":27,"line":16960},[25,62416,2297],{"class":244},[25,62418,62419],{"class":27,"line":16965},[25,62420,2510],{"emptyLinePlaceholder":167},[25,62422,62423,62425,62427,62430],{"class":27,"line":16979},[25,62424,62194],{"class":31},[25,62426,62245],{"class":31},[25,62428,62429],{"class":31}," .text",[25,62431,15682],{"class":244},[25,62433,62434,62436,62438,62441],{"class":27,"line":16991},[25,62435,57487],{"class":35},[25,62437,51508],{"class":244},[25,62439,62440],{"class":35},"#333",[25,62442,1403],{"class":244},[25,62444,62445,62447,62449,62451,62453,62455],{"class":27,"line":16996},[25,62446,54766],{"class":35},[25,62448,51508],{"class":244},[25,62450,689],{"class":35},[25,62452,51563],{"class":240},[25,62454,4203],{"class":35},[25,62456,1403],{"class":244},[25,62458,62459],{"class":27,"line":17009},[25,62460,2297],{"class":244},[25,62462,62463],{"class":27,"line":17014},[25,62464,2510],{"emptyLinePlaceholder":167},[25,62466,62467,62469,62471,62474],{"class":27,"line":17019},[25,62468,62194],{"class":31},[25,62470,62245],{"class":31},[25,62472,62473],{"class":31}," .time",[25,62475,15682],{"class":244},[25,62477,62478,62480,62482,62484],{"class":27,"line":17024},[25,62479,57487],{"class":35},[25,62481,51508],{"class":244},[25,62483,62141],{"class":35},[25,62485,1403],{"class":244},[25,62487,62488,62490,62492,62494,62496],{"class":27,"line":17037},[25,62489,54993],{"class":35},[25,62491,51508],{"class":244},[25,62493,741],{"class":35},[25,62495,51563],{"class":240},[25,62497,1403],{"class":244},[25,62499,62500],{"class":27,"line":17042},[25,62501,2297],{"class":244},[25,62503,62504,62506,62508],{"class":27,"line":32704},[25,62505,52488],{"class":244},[25,62507,159],{"class":51371},[25,62509,51378],{"class":244},[25,62511,62512,62514,62516],{"class":27,"line":32710},[25,62513,51856],{"class":244},[25,62515,51405],{"class":51371},[25,62517,51378],{"class":244},[25,62519,62520],{"class":27,"line":32716},[25,62521,2510],{"emptyLinePlaceholder":167},[25,62523,62524,62526,62528],{"class":27,"line":32722},[25,62525,1153],{"class":244},[25,62527,51871],{"class":51371},[25,62529,51378],{"class":244},[25,62531,62532,62534,62536,62538,62540,62543],{"class":27,"line":32728},[25,62533,52215],{"class":244},[25,62535,51682],{"class":51371},[25,62537,53557],{"class":31},[25,62539,290],{"class":244},[25,62541,62542],{"class":45},"\"wrapper\"",[25,62544,51378],{"class":244},[25,62546,62547,62549,62551,62553,62555,62558,62560,62562],{"class":27,"line":32739},[25,62548,51412],{"class":244},[25,62550,684],{"class":51371},[25,62552,53557],{"class":31},[25,62554,290],{"class":244},[25,62556,62557],{"class":45},"\"avatar\"",[25,62559,55385],{"class":244},[25,62561,684],{"class":51371},[25,62563,51378],{"class":244},[25,62565,62566,62568,62570,62572,62574,62577,62579,62581,62584,62586,62588,62590,62593,62595,62598,62600,62602],{"class":27,"line":32745},[25,62567,51412],{"class":244},[25,62569,54359],{"class":51371},[25,62571,15069],{"class":31},[25,62573,290],{"class":244},[25,62575,62576],{"class":45},"\"tx\"",[25,62578,61091],{"class":31},[25,62580,290],{"class":244},[25,62582,62583],{"class":45},"\"发一条友善的评论\"",[25,62585,54382],{"class":31},[25,62587,290],{"class":244},[25,62589,3811],{"class":45},[25,62591,62592],{"class":31}," maxlength",[25,62594,290],{"class":244},[25,62596,62597],{"class":45},"\"200\"",[25,62599,55385],{"class":244},[25,62601,54359],{"class":51371},[25,62603,51378],{"class":244},[25,62605,62606,62608,62610,62613,62615],{"class":27,"line":32765},[25,62607,51412],{"class":244},[25,62609,53958],{"class":51371},[25,62611,62612],{"class":244},">发布\u003C\u002F",[25,62614,53958],{"class":51371},[25,62616,51378],{"class":244},[25,62618,62619,62621,62623],{"class":27,"line":32771},[25,62620,52488],{"class":244},[25,62622,51682],{"class":51371},[25,62624,51378],{"class":244},[25,62626,62627,62629,62631,62633,62635,62637],{"class":27,"line":32782},[25,62628,52215],{"class":244},[25,62630,51682],{"class":51371},[25,62632,53557],{"class":31},[25,62634,290],{"class":244},[25,62636,62542],{"class":45},[25,62638,51378],{"class":244},[25,62640,62641,62643,62645,62647,62649,62652,62655,62657],{"class":27,"line":32788},[25,62642,51412],{"class":244},[25,62644,25],{"class":51371},[25,62646,53557],{"class":31},[25,62648,290],{"class":244},[25,62650,62651],{"class":45},"\"total\"",[25,62653,62654],{"class":244},">0\u002F200字\u003C\u002F",[25,62656,25],{"class":51371},[25,62658,51378],{"class":244},[25,62660,62661,62663,62665],{"class":27,"line":32794},[25,62662,52488],{"class":244},[25,62664,51682],{"class":51371},[25,62666,51378],{"class":244},[25,62668,62669,62671,62673,62675,62677,62680],{"class":27,"line":32800},[25,62670,52215],{"class":244},[25,62672,51682],{"class":51371},[25,62674,53557],{"class":31},[25,62676,290],{"class":244},[25,62678,62679],{"class":45},"\"list\"",[25,62681,51378],{"class":244},[25,62683,62684,62686,62688,62690,62692,62695,62698,62700,62703],{"class":27,"line":32806},[25,62685,51412],{"class":244},[25,62687,51682],{"class":51371},[25,62689,53557],{"class":31},[25,62691,290],{"class":244},[25,62693,62694],{"class":45},"\"item\"",[25,62696,62697],{"class":31}," style",[25,62699,290],{"class":244},[25,62701,62702],{"class":45},"\"display: none;\"",[25,62704,51378],{"class":244},[25,62706,62707,62709,62711,62713,62715,62717,62719,62721],{"class":27,"line":32812},[25,62708,55305],{"class":244},[25,62710,684],{"class":51371},[25,62712,53557],{"class":31},[25,62714,290],{"class":244},[25,62716,62557],{"class":45},[25,62718,55385],{"class":244},[25,62720,684],{"class":51371},[25,62722,51378],{"class":244},[25,62724,62725,62727,62729,62731,62733,62736],{"class":27,"line":32818},[25,62726,55305],{"class":244},[25,62728,51682],{"class":51371},[25,62730,53557],{"class":31},[25,62732,290],{"class":244},[25,62734,62735],{"class":45},"\"info\"",[25,62737,51378],{"class":244},[25,62739,62740,62742,62744,62746,62748,62751,62754,62756],{"class":27,"line":32824},[25,62741,55373],{"class":244},[25,62743,99],{"class":51371},[25,62745,53557],{"class":31},[25,62747,290],{"class":244},[25,62749,62750],{"class":45},"\"name\"",[25,62752,62753],{"class":244},">清风徐来\u003C\u002F",[25,62755,99],{"class":51371},[25,62757,51378],{"class":244},[25,62759,62760,62762,62764,62766,62768,62771,62774,62776],{"class":27,"line":32844},[25,62761,55373],{"class":244},[25,62763,99],{"class":51371},[25,62765,53557],{"class":31},[25,62767,290],{"class":244},[25,62769,62770],{"class":45},"\"text\"",[25,62772,62773],{"class":244},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[25,62775,99],{"class":51371},[25,62777,51378],{"class":244},[25,62779,62780,62782,62784,62786,62788,62791,62794,62796],{"class":27,"line":32850},[25,62781,55373],{"class":244},[25,62783,99],{"class":51371},[25,62785,53557],{"class":31},[25,62787,290],{"class":244},[25,62789,62790],{"class":45},"\"time\"",[25,62792,62793],{"class":244},">2022-10-10 20:29:21\u003C\u002F",[25,62795,99],{"class":51371},[25,62797,51378],{"class":244},[25,62799,62800,62802,62804],{"class":27,"line":32866},[25,62801,55478],{"class":244},[25,62803,51682],{"class":51371},[25,62805,51378],{"class":244},[25,62807,62808,62810,62812],{"class":27,"line":32872},[25,62809,51847],{"class":244},[25,62811,51682],{"class":51371},[25,62813,51378],{"class":244},[25,62815,62816,62818,62820],{"class":27,"line":32886},[25,62817,52488],{"class":244},[25,62819,51682],{"class":51371},[25,62821,51378],{"class":244},[25,62823,62824,62826,62828],{"class":27,"line":32892},[25,62825,52215],{"class":244},[25,62827,51884],{"class":51371},[25,62829,51378],{"class":244},[25,62831,62832,62834,62837,62839,62841,62843,62845,62848],{"class":27,"line":32907},[25,62833,11331],{"class":240},[25,62835,62836],{"class":35}," tx",[25,62838,13674],{"class":240},[25,62840,54467],{"class":244},[25,62842,54470],{"class":31},[25,62844,245],{"class":244},[25,62846,62847],{"class":45},"'#tx'",[25,62849,251],{"class":244},[25,62851,62852,62854,62857,62859,62861,62863,62865,62868],{"class":27,"line":32913},[25,62853,11331],{"class":240},[25,62855,62856],{"class":35}," total",[25,62858,13674],{"class":240},[25,62860,54467],{"class":244},[25,62862,54470],{"class":31},[25,62864,245],{"class":244},[25,62866,62867],{"class":45},"'.total'",[25,62869,251],{"class":244},[25,62871,62872],{"class":27,"line":32922},[25,62873,62874],{"class":302},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[25,62876,62877,62880,62882,62884,62886,62888,62890],{"class":27,"line":32928},[25,62878,62879],{"class":244},"    tx.",[25,62881,57884],{"class":31},[25,62883,245],{"class":244},[25,62885,61398],{"class":45},[25,62887,12545],{"class":244},[25,62889,54520],{"class":240},[25,62891,54523],{"class":244},[25,62893,62894,62897,62899],{"class":27,"line":32937},[25,62895,62896],{"class":244},"      total.style.opacity ",[25,62898,290],{"class":240},[25,62900,55770],{"class":35},[25,62902,62903],{"class":27,"line":32943},[25,62904,33532],{"class":244},[25,62906,62907],{"class":27,"line":32949},[25,62908,62909],{"class":302},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[25,62911,62912,62914,62916,62918,62920,62922,62924],{"class":27,"line":32958},[25,62913,62879],{"class":244},[25,62915,57884],{"class":31},[25,62917,245],{"class":244},[25,62919,61459],{"class":45},[25,62921,12545],{"class":244},[25,62923,54520],{"class":240},[25,62925,54523],{"class":244},[25,62927,62928,62930,62932],{"class":27,"line":32964},[25,62929,62896],{"class":244},[25,62931,290],{"class":240},[25,62933,47404],{"class":35},[25,62935,62936],{"class":27,"line":32975},[25,62937,33532],{"class":244},[25,62939,62940],{"class":27,"line":32981},[25,62941,62942],{"class":302},"    \u002F\u002F 3. 检测用户输入\n",[25,62944,62945,62947,62949,62951,62954,62956,62958],{"class":27,"line":33000},[25,62946,62879],{"class":244},[25,62948,57884],{"class":31},[25,62950,245],{"class":244},[25,62952,62953],{"class":45},"'input'",[25,62955,12545],{"class":244},[25,62957,54520],{"class":240},[25,62959,54523],{"class":244},[25,62961,62962],{"class":27,"line":33006},[25,62963,62964],{"class":302},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[25,62966,62967,62970,62972,62975,62978,62980,62983,62985,62987],{"class":27,"line":33017},[25,62968,62969],{"class":244},"      total.innerHTML ",[25,62971,290],{"class":240},[25,62973,62974],{"class":45}," `${",[25,62976,62977],{"class":244},"tx",[25,62979,801],{"class":45},[25,62981,62982],{"class":244},"value",[25,62984,801],{"class":45},[25,62986,52039],{"class":35},[25,62988,62989],{"class":45},"}\u002F200字`\n",[25,62991,62992],{"class":27,"line":33023},[25,62993,33532],{"class":244},[25,62995,62996],{"class":27,"line":33043},[25,62997,2510],{"emptyLinePlaceholder":167},[25,62999,63000],{"class":27,"line":33059},[25,63001,63002],{"class":302},"    \u002F\u002F const str = 'andy'\n",[25,63004,63005],{"class":27,"line":33065},[25,63006,63007],{"class":302},"    \u002F\u002F console.log(str.length)\n",[25,63009,63010,63012,63014],{"class":27,"line":33079},[25,63011,52488],{"class":244},[25,63013,51884],{"class":51371},[25,63015,51378],{"class":244},[25,63017,63018,63020,63022],{"class":27,"line":33085},[25,63019,51856],{"class":244},[25,63021,51871],{"class":51371},[25,63023,51378],{"class":244},[25,63025,63026],{"class":27,"line":33091},[25,63027,2510],{"emptyLinePlaceholder":167},[25,63029,63030,63032,63034],{"class":27,"line":33102},[25,63031,51856],{"class":244},[25,63033,50706],{"class":51371},[25,63035,51378],{"class":244},[22108,63037,63039],{"id":63038},"_3254-change事件","3.2.5.4 change事件",[99,63041,63042],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[99,63044,63045],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[99,63047,63048],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[15,63050,63052],{"className":50704,"code":63051,"language":50706,"meta":20,"style":20},"\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",[22,63053,63054,63064,63078,63082,63090,63104,63124,63136,63144,63148,63156,63170,63178,63196,63214,63226,63230,63238,63246,63250],{"__ignoreMap":20},[25,63055,63056,63058,63060,63062],{"class":27,"line":28},[25,63057,51368],{"class":244},[25,63059,51372],{"class":51371},[25,63061,51375],{"class":31},[25,63063,51378],{"class":244},[25,63065,63066,63068,63070,63072,63074,63076],{"class":27,"line":39},[25,63067,1153],{"class":244},[25,63069,50706],{"class":51371},[25,63071,51387],{"class":31},[25,63073,290],{"class":244},[25,63075,51392],{"class":45},[25,63077,51378],{"class":244},[25,63079,63080],{"class":27,"line":51},[25,63081,2510],{"emptyLinePlaceholder":167},[25,63083,63084,63086,63088],{"class":27,"line":59},[25,63085,1153],{"class":244},[25,63087,51405],{"class":51371},[25,63089,51378],{"class":244},[25,63091,63092,63094,63096,63098,63100,63102],{"class":27,"line":67},[25,63093,52215],{"class":244},[25,63095,51415],{"class":51371},[25,63097,51418],{"class":31},[25,63099,290],{"class":244},[25,63101,51423],{"class":45},[25,63103,51378],{"class":244},[25,63105,63106,63108,63110,63112,63114,63116,63118,63120,63122],{"class":27,"line":75},[25,63107,52215],{"class":244},[25,63109,51415],{"class":51371},[25,63111,15030],{"class":31},[25,63113,290],{"class":244},[25,63115,51462],{"class":45},[25,63117,51442],{"class":31},[25,63119,290],{"class":244},[25,63121,51469],{"class":45},[25,63123,51378],{"class":244},[25,63125,63126,63128,63130,63132,63134],{"class":27,"line":83},[25,63127,52215],{"class":244},[25,63129,51478],{"class":51371},[25,63131,51481],{"class":244},[25,63133,51478],{"class":51371},[25,63135,51378],{"class":244},[25,63137,63138,63140,63142],{"class":27,"line":91},[25,63139,51856],{"class":244},[25,63141,51405],{"class":51371},[25,63143,51378],{"class":244},[25,63145,63146],{"class":27,"line":1429},[25,63147,2510],{"emptyLinePlaceholder":167},[25,63149,63150,63152,63154],{"class":27,"line":1441},[25,63151,1153],{"class":244},[25,63153,51871],{"class":51371},[25,63155,51378],{"class":244},[25,63157,63158,63160,63162,63164,63166,63168],{"class":27,"line":1723},[25,63159,52215],{"class":244},[25,63161,53892],{"class":51371},[25,63163,53895],{"class":31},[25,63165,290],{"class":244},[25,63167,62770],{"class":45},[25,63169,51378],{"class":244},[25,63171,63172,63174,63176],{"class":27,"line":1728},[25,63173,52215],{"class":244},[25,63175,51884],{"class":51371},[25,63177,51378],{"class":244},[25,63179,63180,63182,63184,63186,63188,63190,63192,63194],{"class":27,"line":1734},[25,63181,11331],{"class":240},[25,63183,60676],{"class":35},[25,63185,13674],{"class":240},[25,63187,54467],{"class":244},[25,63189,54470],{"class":31},[25,63191,245],{"class":244},[25,63193,62953],{"class":45},[25,63195,251],{"class":244},[25,63197,63198,63201,63203,63205,63208,63210,63212],{"class":27,"line":1739},[25,63199,63200],{"class":244},"    input.",[25,63202,57884],{"class":31},[25,63204,245],{"class":244},[25,63206,63207],{"class":45},"'change'",[25,63209,12545],{"class":244},[25,63211,54520],{"class":240},[25,63213,54523],{"class":244},[25,63215,63216,63218,63220,63222,63224],{"class":27,"line":1753},[25,63217,58315],{"class":244},[25,63219,58318],{"class":31},[25,63221,245],{"class":244},[25,63223,836],{"class":35},[25,63225,251],{"class":244},[25,63227,63228],{"class":27,"line":1758},[25,63229,33532],{"class":244},[25,63231,63232,63234,63236],{"class":27,"line":1764},[25,63233,52488],{"class":244},[25,63235,51884],{"class":51371},[25,63237,51378],{"class":244},[25,63239,63240,63242,63244],{"class":27,"line":1785},[25,63241,51856],{"class":244},[25,63243,51871],{"class":51371},[25,63245,51378],{"class":244},[25,63247,63248],{"class":27,"line":1790},[25,63249,2510],{"emptyLinePlaceholder":167},[25,63251,63252,63254,63256],{"class":27,"line":1804},[25,63253,51856],{"class":244},[25,63255,50706],{"class":51371},[25,63257,51378],{"class":244},[99,63259,63260],{},"总结：内容发生改变才回去触发",[210,63262,63264],{"id":63263},"_326-事件对象","3.2.6 事件对象",[22108,63266,63268],{"id":63267},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[99,63270,63271],{},[155,63272],{"alt":20,"src":63273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[99,63275,63276],{},[155,63277],{"alt":20,"src":63278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[99,63280,63281],{},"点击一次，就输出了事件对象，它是个对象",[99,63283,63284],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[99,63286,63287],{},[155,63288],{"alt":20,"src":63289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22108,63291,63293],{"id":63292},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[99,63295,63296],{},[155,63297],{"alt":20,"src":63298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[99,63300,63301],{},"实现按特殊字符才是实现打印输出效果：",[15,63303,63305],{"className":53138,"code":63304,"language":53140,"meta":20,"style":20},"\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",[22,63306,63307,63315,63320,63334,63342,63347,63352,63357,63362,63367,63372,63377,63382,63387,63391,63395,63403],{"__ignoreMap":20},[25,63308,63309,63311,63313],{"class":27,"line":28},[25,63310,1153],{"class":244},[25,63312,51871],{"class":51371},[25,63314,51378],{"class":244},[25,63316,63317],{"class":27,"line":39},[25,63318,63319],{"class":302},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[25,63321,63322,63324,63326,63328,63330,63332],{"class":27,"line":51},[25,63323,52215],{"class":244},[25,63325,53892],{"class":51371},[25,63327,53895],{"class":31},[25,63329,290],{"class":244},[25,63331,62770],{"class":45},[25,63333,51378],{"class":244},[25,63335,63336,63338,63340],{"class":27,"line":59},[25,63337,52215],{"class":244},[25,63339,51884],{"class":51371},[25,63341,51378],{"class":244},[25,63343,63344],{"class":27,"line":67},[25,63345,63346],{"class":244},"    \u002F\u002F const btn = document.querySelector('button')\n",[25,63348,63349],{"class":27,"line":75},[25,63350,63351],{"class":244},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[25,63353,63354],{"class":27,"line":83},[25,63355,63356],{"class":244},"    \u002F\u002F   console.log(e);\n",[25,63358,63359],{"class":27,"line":91},[25,63360,63361],{"class":244},"    \u002F\u002F })\n",[25,63363,63364],{"class":27,"line":1429},[25,63365,63366],{"class":244},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[25,63368,63369],{"class":27,"line":1441},[25,63370,63371],{"class":244},"    const input = document.querySelector('input')\n",[25,63373,63374],{"class":27,"line":1723},[25,63375,63376],{"class":244},"    input.addEventListener('keyup', function (e) {\n",[25,63378,63379],{"class":27,"line":1728},[25,63380,63381],{"class":244},"      if (e.key === 'Enter') {\n",[25,63383,63384],{"class":27,"line":1734},[25,63385,63386],{"class":244},"        console.log('我按下了回车键')\n",[25,63388,63389],{"class":27,"line":1739},[25,63390,52469],{"class":244},[25,63392,63393],{"class":27,"line":1753},[25,63394,33532],{"class":244},[25,63396,63397,63399,63401],{"class":27,"line":1758},[25,63398,52488],{"class":244},[25,63400,51884],{"class":51371},[25,63402,51378],{"class":244},[25,63404,63405,63407,63409],{"class":27,"line":1764},[25,63406,51856],{"class":244},[25,63408,51871],{"class":51371},[25,63410,51378],{"class":244},[22108,63412,63414],{"id":63413},"_3263-trim方法","3.2.6.3 trim方法",[99,63416,63417],{},[155,63418],{"alt":20,"src":63419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[99,63421,63422],{},[155,63423],{"alt":20,"src":63424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[99,63426,63427],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[99,63429,63430],{},"str.trim()",[210,63432,63434],{"id":63433},"_327-环境对象","3.2.7 环境对象",[99,63436,63437],{},[155,63438],{"alt":20,"src":63439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[99,63441,63442],{},[155,63443],{"alt":20,"src":63444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[99,63446,63447],{},[155,63448],{"alt":20,"src":63449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[99,63451,63452],{},"实际函数调用是window.fn()",[99,63454,63455],{},"普通函数里面this指向的是window",[103,63457,63458,63461,63464],{},[106,63459,63460],{},"在普通函数下，this指向的是window",[106,63462,63463],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[106,63465,63466],{},"箭头函数没有this",[99,63468,63469],{},"粗略记法就是：谁调用，this就指向谁",[99,63471,63472],{},[155,63473],{"alt":20,"src":63474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[99,63476,63477],{},[155,63478],{"alt":20,"src":63479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[99,63481,63482],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[99,63484,63485],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[15,63487,63489],{"className":53138,"code":63488,"language":53140,"meta":20,"style":20},"\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",[22,63490,63491,63499,63511,63519,63524,63529,63534,63539,63543,63551],{"__ignoreMap":20},[25,63492,63493,63495,63497],{"class":27,"line":28},[25,63494,1153],{"class":244},[25,63496,51871],{"class":51371},[25,63498,51378],{"class":244},[25,63500,63501,63503,63505,63507,63509],{"class":27,"line":39},[25,63502,52215],{"class":244},[25,63504,53958],{"class":51371},[25,63506,53964],{"class":244},[25,63508,53958],{"class":51371},[25,63510,51378],{"class":244},[25,63512,63513,63515,63517],{"class":27,"line":51},[25,63514,52215],{"class":244},[25,63516,51884],{"class":51371},[25,63518,51378],{"class":244},[25,63520,63521],{"class":27,"line":59},[25,63522,63523],{"class":244},"    const button = document.querySelector('button')\n",[25,63525,63526],{"class":27,"line":67},[25,63527,63528],{"class":244},"    button.addEventListener('click', function () {\n",[25,63530,63531],{"class":27,"line":75},[25,63532,63533],{"class":244},"      \u002F\u002F console.log(this);\n",[25,63535,63536],{"class":27,"line":83},[25,63537,63538],{"class":244},"      this.style.color = 'pink'\n",[25,63540,63541],{"class":27,"line":91},[25,63542,33532],{"class":244},[25,63544,63545,63547,63549],{"class":27,"line":1429},[25,63546,52488],{"class":244},[25,63548,51884],{"class":51371},[25,63550,51378],{"class":244},[25,63552,63553,63555,63557],{"class":27,"line":1441},[25,63554,51856],{"class":244},[25,63556,51871],{"class":51371},[25,63558,51378],{"class":244},[210,63560,63562],{"id":63561},"_328-回调函数","3.2.8 回调函数",[99,63564,63565],{},[155,63566],{"alt":20,"src":63567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[99,63569,63570],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[99,63572,11442],{},[103,63574,63575,63578,63581],{},[106,63576,63577],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[106,63579,63580],{},"回调函数本质还是函数，只不过把它当成参数使用",[106,63582,63583],{},"使用匿名函数做为回调函数比较常见",[210,63585,63587],{"id":63586},"_329-tab栏切换","3.2.9 tab栏切换",[99,63589,63590],{},[155,63591],{"alt":20,"src":63592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[15,63594,63596],{"className":50704,"code":63595,"language":50706,"meta":20,"style":20},"\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",[22,63597,63598,63608,63622,63626,63634,63648,63668,63688,63701,63709,63715,63725,63735,63739,63743,63750,63763,63776,63788,63804,63808,63812,63819,63831,63843,63855,63865,63875,63879,63883,63892,63904,63915,63927,63931,63935,63943,63953,63963,63973,63977,63981,63991,64005,64017,64021,64025,64037,64048,64065,64075,64079,64083,64098,64109,64119,64123,64127,64134,64149,64153,64157,64165,64175,64179,64183,64192,64202,64206,64214,64222,64226,64234,64249,64264,64277,64285,64319,64346,64373,64400,64427,64435,64443,64458,64495,64530,64565,64600,64635,64643,64651,64659,64664,64669,64689,64694,64723,64728,64733,64751,64756,64761,64766,64788,64793,64809,64813,64818,64823,64844,64849,64878,64882,64887,64891,64899,64907,64911],{"__ignoreMap":20},[25,63599,63600,63602,63604,63606],{"class":27,"line":28},[25,63601,51368],{"class":244},[25,63603,51372],{"class":51371},[25,63605,51375],{"class":31},[25,63607,51378],{"class":244},[25,63609,63610,63612,63614,63616,63618,63620],{"class":27,"line":39},[25,63611,1153],{"class":244},[25,63613,50706],{"class":51371},[25,63615,51387],{"class":31},[25,63617,290],{"class":244},[25,63619,51392],{"class":45},[25,63621,51378],{"class":244},[25,63623,63624],{"class":27,"line":51},[25,63625,2510],{"emptyLinePlaceholder":167},[25,63627,63628,63630,63632],{"class":27,"line":59},[25,63629,1153],{"class":244},[25,63631,51405],{"class":51371},[25,63633,51378],{"class":244},[25,63635,63636,63638,63640,63642,63644,63646],{"class":27,"line":67},[25,63637,52215],{"class":244},[25,63639,51415],{"class":51371},[25,63641,51418],{"class":31},[25,63643,290],{"class":244},[25,63645,51423],{"class":45},[25,63647,59198],{"class":244},[25,63649,63650,63652,63654,63656,63658,63660,63662,63664,63666],{"class":27,"line":75},[25,63651,52215],{"class":244},[25,63653,51415],{"class":51371},[25,63655,51434],{"class":31},[25,63657,290],{"class":244},[25,63659,51439],{"class":45},[25,63661,51442],{"class":31},[25,63663,290],{"class":244},[25,63665,51447],{"class":45},[25,63667,59198],{"class":244},[25,63669,63670,63672,63674,63676,63678,63680,63682,63684,63686],{"class":27,"line":83},[25,63671,52215],{"class":244},[25,63673,51415],{"class":51371},[25,63675,15030],{"class":31},[25,63677,290],{"class":244},[25,63679,51462],{"class":45},[25,63681,51442],{"class":31},[25,63683,290],{"class":244},[25,63685,51469],{"class":45},[25,63687,59198],{"class":244},[25,63689,63690,63692,63694,63697,63699],{"class":27,"line":91},[25,63691,52215],{"class":244},[25,63693,51478],{"class":51371},[25,63695,63696],{"class":244},">tab栏切换\u003C\u002F",[25,63698,51478],{"class":51371},[25,63700,51378],{"class":244},[25,63702,63703,63705,63707],{"class":27,"line":1429},[25,63704,52215],{"class":244},[25,63706,159],{"class":51371},[25,63708,51378],{"class":244},[25,63710,63711,63713],{"class":27,"line":1441},[25,63712,6513],{"class":51371},[25,63714,15682],{"class":244},[25,63716,63717,63719,63721,63723],{"class":27,"line":1723},[25,63718,54777],{"class":35},[25,63720,51508],{"class":244},[25,63722,434],{"class":35},[25,63724,1403],{"class":244},[25,63726,63727,63729,63731,63733],{"class":27,"line":1728},[25,63728,54766],{"class":35},[25,63730,51508],{"class":244},[25,63732,434],{"class":35},[25,63734,1403],{"class":244},[25,63736,63737],{"class":27,"line":1734},[25,63738,2297],{"class":244},[25,63740,63741],{"class":27,"line":1739},[25,63742,2510],{"emptyLinePlaceholder":167},[25,63744,63745,63748],{"class":27,"line":1753},[25,63746,63747],{"class":31},"    .tab",[25,63749,15682],{"class":244},[25,63751,63752,63754,63756,63759,63761],{"class":27,"line":1758},[25,63753,54842],{"class":35},[25,63755,51508],{"class":244},[25,63757,63758],{"class":35},"590",[25,63760,51563],{"class":240},[25,63762,1403],{"class":244},[25,63764,63765,63767,63769,63772,63774],{"class":27,"line":1764},[25,63766,54856],{"class":35},[25,63768,51508],{"class":244},[25,63770,63771],{"class":35},"340",[25,63773,51563],{"class":240},[25,63775,1403],{"class":244},[25,63777,63778,63780,63782,63784,63786],{"class":27,"line":1785},[25,63779,54777],{"class":35},[25,63781,51508],{"class":244},[25,63783,943],{"class":35},[25,63785,51563],{"class":240},[25,63787,1403],{"class":244},[25,63789,63790,63792,63794,63796,63798,63800,63802],{"class":27,"line":1790},[25,63791,62048],{"class":35},[25,63793,51508],{"class":244},[25,63795,460],{"class":35},[25,63797,51563],{"class":240},[25,63799,51592],{"class":35},[25,63801,62315],{"class":35},[25,63803,1403],{"class":244},[25,63805,63806],{"class":27,"line":1804},[25,63807,2297],{"class":244},[25,63809,63810],{"class":27,"line":1809},[25,63811,2510],{"emptyLinePlaceholder":167},[25,63813,63814,63817],{"class":27,"line":1838},[25,63815,63816],{"class":31},"    .tab-nav",[25,63818,15682],{"class":244},[25,63820,63821,63823,63825,63827,63829],{"class":27,"line":1843},[25,63822,54842],{"class":35},[25,63824,51508],{"class":244},[25,63826,554],{"class":35},[25,63828,571],{"class":240},[25,63830,1403],{"class":244},[25,63832,63833,63835,63837,63839,63841],{"class":27,"line":1860},[25,63834,54856],{"class":35},[25,63836,51508],{"class":244},[25,63838,1150],{"class":35},[25,63840,51563],{"class":240},[25,63842,1403],{"class":244},[25,63844,63845,63847,63849,63851,63853],{"class":27,"line":1865},[25,63846,57430],{"class":35},[25,63848,51508],{"class":244},[25,63850,1150],{"class":35},[25,63852,51563],{"class":240},[25,63854,1403],{"class":244},[25,63856,63857,63859,63861,63863],{"class":27,"line":1870},[25,63858,55080],{"class":35},[25,63860,51508],{"class":244},[25,63862,51548],{"class":35},[25,63864,1403],{"class":244},[25,63866,63867,63869,63871,63873],{"class":27,"line":1875},[25,63868,55091],{"class":35},[25,63870,51508],{"class":244},[25,63872,51739],{"class":35},[25,63874,1403],{"class":244},[25,63876,63877],{"class":27,"line":1889},[25,63878,2297],{"class":244},[25,63880,63881],{"class":27,"line":1894},[25,63882,2510],{"emptyLinePlaceholder":167},[25,63884,63885,63887,63890],{"class":27,"line":2687},[25,63886,63816],{"class":31},[25,63888,63889],{"class":51371}," h3",[25,63891,15682],{"class":244},[25,63893,63894,63896,63898,63900,63902],{"class":27,"line":2701},[25,63895,54993],{"class":35},[25,63897,51508],{"class":244},[25,63899,1043],{"class":35},[25,63901,51563],{"class":240},[25,63903,1403],{"class":244},[25,63905,63906,63908,63910,63913],{"class":27,"line":2709},[25,63907,62405],{"class":35},[25,63909,51508],{"class":244},[25,63911,63912],{"class":35},"normal",[25,63914,1403],{"class":244},[25,63916,63917,63919,63921,63923,63925],{"class":27,"line":2714},[25,63918,62071],{"class":35},[25,63920,51508],{"class":244},[25,63922,943],{"class":35},[25,63924,51563],{"class":240},[25,63926,1403],{"class":244},[25,63928,63929],{"class":27,"line":2720},[25,63930,2297],{"class":244},[25,63932,63933],{"class":27,"line":2726},[25,63934,2510],{"emptyLinePlaceholder":167},[25,63936,63937,63939,63941],{"class":27,"line":2731},[25,63938,63816],{"class":31},[25,63940,61363],{"class":51371},[25,63942,15682],{"class":244},[25,63944,63945,63947,63949,63951],{"class":27,"line":8058},[25,63946,54803],{"class":35},[25,63948,51508],{"class":244},[25,63950,54808],{"class":35},[25,63952,1403],{"class":244},[25,63954,63955,63957,63959,63961],{"class":27,"line":8082},[25,63956,55080],{"class":35},[25,63958,51508],{"class":244},[25,63960,51548],{"class":35},[25,63962,1403],{"class":244},[25,63964,63965,63967,63969,63971],{"class":27,"line":8087},[25,63966,55091],{"class":35},[25,63968,51508],{"class":244},[25,63970,51651],{"class":35},[25,63972,1403],{"class":244},[25,63974,63975],{"class":27,"line":8093},[25,63976,2297],{"class":244},[25,63978,63979],{"class":27,"line":8120},[25,63980,2510],{"emptyLinePlaceholder":167},[25,63982,63983,63985,63987,63989],{"class":27,"line":8125},[25,63984,63816],{"class":31},[25,63986,61363],{"class":51371},[25,63988,55146],{"class":51371},[25,63990,15682],{"class":244},[25,63992,63993,63995,63997,63999,64001,64003],{"class":27,"line":8131},[25,63994,54777],{"class":35},[25,63996,51508],{"class":244},[25,63998,434],{"class":35},[25,64000,9060],{"class":35},[25,64002,51563],{"class":240},[25,64004,1403],{"class":244},[25,64006,64007,64009,64011,64013,64015],{"class":27,"line":8143},[25,64008,54993],{"class":35},[25,64010,51508],{"class":244},[25,64012,792],{"class":35},[25,64014,51563],{"class":240},[25,64016,1403],{"class":244},[25,64018,64019],{"class":27,"line":8155},[25,64020,2297],{"class":244},[25,64022,64023],{"class":27,"line":8167},[25,64024,2510],{"emptyLinePlaceholder":167},[25,64026,64027,64029,64031,64033,64035],{"class":27,"line":9826},[25,64028,63816],{"class":31},[25,64030,61363],{"class":51371},[25,64032,55146],{"class":51371},[25,64034,1510],{"class":51371},[25,64036,15682],{"class":244},[25,64038,64039,64042,64044,64046],{"class":27,"line":9851},[25,64040,64041],{"class":35},"      text-decoration",[25,64043,51508],{"class":244},[25,64045,54808],{"class":35},[25,64047,1403],{"class":244},[25,64049,64050,64052,64054,64056,64058,64060,64063],{"class":27,"line":9874},[25,64051,62303],{"class":35},[25,64053,51508],{"class":244},[25,64055,321],{"class":35},[25,64057,51563],{"class":240},[25,64059,51592],{"class":35},[25,64061,64062],{"class":35}," transparent",[25,64064,1403],{"class":244},[25,64066,64067,64069,64071,64073],{"class":27,"line":9898},[25,64068,57487],{"class":35},[25,64070,51508],{"class":244},[25,64072,62440],{"class":35},[25,64074,1403],{"class":244},[25,64076,64077],{"class":27,"line":9903},[25,64078,2297],{"class":244},[25,64080,64081],{"class":27,"line":9908},[25,64082,2510],{"emptyLinePlaceholder":167},[25,64084,64085,64087,64089,64091,64093,64096],{"class":27,"line":9913},[25,64086,63816],{"class":31},[25,64088,61363],{"class":51371},[25,64090,55146],{"class":51371},[25,64092,1510],{"class":51371},[25,64094,64095],{"class":31},".active",[25,64097,15682],{"class":244},[25,64099,64100,64102,64104,64107],{"class":27,"line":9922},[25,64101,61862],{"class":35},[25,64103,51508],{"class":244},[25,64105,64106],{"class":35},"#e1251b",[25,64108,1403],{"class":244},[25,64110,64111,64113,64115,64117],{"class":27,"line":9927},[25,64112,57487],{"class":35},[25,64114,51508],{"class":244},[25,64116,64106],{"class":35},[25,64118,1403],{"class":244},[25,64120,64121],{"class":27,"line":9933},[25,64122,2297],{"class":244},[25,64124,64125],{"class":27,"line":9954},[25,64126,2510],{"emptyLinePlaceholder":167},[25,64128,64129,64132],{"class":27,"line":9960},[25,64130,64131],{"class":31},"    .tab-content",[25,64133,15682],{"class":244},[25,64135,64136,64138,64140,64142,64145,64147],{"class":27,"line":9974},[25,64137,54766],{"class":35},[25,64139,51508],{"class":244},[25,64141,434],{"class":35},[25,64143,64144],{"class":35}," 16",[25,64146,51563],{"class":240},[25,64148,1403],{"class":244},[25,64150,64151],{"class":27,"line":9980},[25,64152,2297],{"class":244},[25,64154,64155],{"class":27,"line":10007},[25,64156,2510],{"emptyLinePlaceholder":167},[25,64158,64159,64161,64163],{"class":27,"line":10016},[25,64160,64131],{"class":31},[25,64162,62245],{"class":31},[25,64164,15682],{"class":244},[25,64166,64167,64169,64171,64173],{"class":27,"line":10022},[25,64168,55080],{"class":35},[25,64170,51508],{"class":244},[25,64172,54808],{"class":35},[25,64174,1403],{"class":244},[25,64176,64177],{"class":27,"line":10030},[25,64178,2297],{"class":244},[25,64180,64181],{"class":27,"line":10035},[25,64182,2510],{"emptyLinePlaceholder":167},[25,64184,64185,64187,64190],{"class":27,"line":16714},[25,64186,64131],{"class":31},[25,64188,64189],{"class":31}," .item.active",[25,64191,15682],{"class":244},[25,64193,64194,64196,64198,64200],{"class":27,"line":16720},[25,64195,55080],{"class":35},[25,64197,51508],{"class":244},[25,64199,60940],{"class":35},[25,64201,1403],{"class":244},[25,64203,64204],{"class":27,"line":16743},[25,64205,2297],{"class":244},[25,64207,64208,64210,64212],{"class":27,"line":16749},[25,64209,52488],{"class":244},[25,64211,159],{"class":51371},[25,64213,51378],{"class":244},[25,64215,64216,64218,64220],{"class":27,"line":16772},[25,64217,51856],{"class":244},[25,64219,51405],{"class":51371},[25,64221,51378],{"class":244},[25,64223,64224],{"class":27,"line":16786},[25,64225,2510],{"emptyLinePlaceholder":167},[25,64227,64228,64230,64232],{"class":27,"line":16806},[25,64229,1153],{"class":244},[25,64231,51871],{"class":51371},[25,64233,51378],{"class":244},[25,64235,64236,64238,64240,64242,64244,64247],{"class":27,"line":16812},[25,64237,52215],{"class":244},[25,64239,51682],{"class":51371},[25,64241,53557],{"class":31},[25,64243,290],{"class":244},[25,64245,64246],{"class":45},"\"tab\"",[25,64248,51378],{"class":244},[25,64250,64251,64253,64255,64257,64259,64262],{"class":27,"line":16823},[25,64252,51412],{"class":244},[25,64254,51682],{"class":51371},[25,64256,53557],{"class":31},[25,64258,290],{"class":244},[25,64260,64261],{"class":45},"\"tab-nav\"",[25,64263,51378],{"class":244},[25,64265,64266,64268,64270,64273,64275],{"class":27,"line":16846},[25,64267,55305],{"class":244},[25,64269,210],{"class":51371},[25,64271,64272],{"class":244},">每日特价\u003C\u002F",[25,64274,210],{"class":51371},[25,64276,51378],{"class":244},[25,64278,64279,64281,64283],{"class":27,"line":16868},[25,64280,55305],{"class":244},[25,64282,103],{"class":51371},[25,64284,51378],{"class":244},[25,64286,64287,64289,64291,64293,64295,64297,64299,64301,64303,64305,64308,64311,64313,64315,64317],{"class":27,"line":16873},[25,64288,55373],{"class":244},[25,64290,106],{"class":51371},[25,64292,61123],{"class":244},[25,64294,481],{"class":51371},[25,64296,53557],{"class":31},[25,64298,290],{"class":244},[25,64300,59777],{"class":45},[25,64302,61128],{"class":31},[25,64304,290],{"class":244},[25,64306,64307],{"class":45},"\"javascript:;\"",[25,64309,64310],{"class":244},">精选\u003C\u002F",[25,64312,481],{"class":51371},[25,64314,55385],{"class":244},[25,64316,106],{"class":51371},[25,64318,51378],{"class":244},[25,64320,64321,64323,64325,64327,64329,64331,64333,64335,64338,64340,64342,64344],{"class":27,"line":16879},[25,64322,55373],{"class":244},[25,64324,106],{"class":51371},[25,64326,61123],{"class":244},[25,64328,481],{"class":51371},[25,64330,61128],{"class":31},[25,64332,290],{"class":244},[25,64334,64307],{"class":45},[25,64336,64337],{"class":244},">美食\u003C\u002F",[25,64339,481],{"class":51371},[25,64341,55385],{"class":244},[25,64343,106],{"class":51371},[25,64345,51378],{"class":244},[25,64347,64348,64350,64352,64354,64356,64358,64360,64362,64365,64367,64369,64371],{"class":27,"line":16893},[25,64349,55373],{"class":244},[25,64351,106],{"class":51371},[25,64353,61123],{"class":244},[25,64355,481],{"class":51371},[25,64357,61128],{"class":31},[25,64359,290],{"class":244},[25,64361,64307],{"class":45},[25,64363,64364],{"class":244},">百货\u003C\u002F",[25,64366,481],{"class":51371},[25,64368,55385],{"class":244},[25,64370,106],{"class":51371},[25,64372,51378],{"class":244},[25,64374,64375,64377,64379,64381,64383,64385,64387,64389,64392,64394,64396,64398],{"class":27,"line":16906},[25,64376,55373],{"class":244},[25,64378,106],{"class":51371},[25,64380,61123],{"class":244},[25,64382,481],{"class":51371},[25,64384,61128],{"class":31},[25,64386,290],{"class":244},[25,64388,64307],{"class":45},[25,64390,64391],{"class":244},">个护\u003C\u002F",[25,64393,481],{"class":51371},[25,64395,55385],{"class":244},[25,64397,106],{"class":51371},[25,64399,51378],{"class":244},[25,64401,64402,64404,64406,64408,64410,64412,64414,64416,64419,64421,64423,64425],{"class":27,"line":16911},[25,64403,55373],{"class":244},[25,64405,106],{"class":51371},[25,64407,61123],{"class":244},[25,64409,481],{"class":51371},[25,64411,61128],{"class":31},[25,64413,290],{"class":244},[25,64415,64307],{"class":45},[25,64417,64418],{"class":244},">预告\u003C\u002F",[25,64420,481],{"class":51371},[25,64422,55385],{"class":244},[25,64424,106],{"class":51371},[25,64426,51378],{"class":244},[25,64428,64429,64431,64433],{"class":27,"line":16925},[25,64430,55478],{"class":244},[25,64432,103],{"class":51371},[25,64434,51378],{"class":244},[25,64436,64437,64439,64441],{"class":27,"line":16930},[25,64438,51847],{"class":244},[25,64440,51682],{"class":51371},[25,64442,51378],{"class":244},[25,64444,64445,64447,64449,64451,64453,64456],{"class":27,"line":16936},[25,64446,51412],{"class":244},[25,64448,51682],{"class":51371},[25,64450,53557],{"class":31},[25,64452,290],{"class":244},[25,64454,64455],{"class":45},"\"tab-content\"",[25,64457,51378],{"class":244},[25,64459,64460,64462,64464,64466,64468,64471,64473,64475,64477,64479,64482,64484,64486,64488,64491,64493],{"class":27,"line":16941},[25,64461,55305],{"class":244},[25,64463,51682],{"class":51371},[25,64465,53557],{"class":31},[25,64467,290],{"class":244},[25,64469,64470],{"class":45},"\"item active\"",[25,64472,61123],{"class":244},[25,64474,155],{"class":51371},[25,64476,55310],{"class":31},[25,64478,290],{"class":244},[25,64480,64481],{"class":45},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[25,64483,55318],{"class":31},[25,64485,290],{"class":244},[25,64487,7762],{"class":45},[25,64489,64490],{"class":244}," \u002F>\u003C\u002F",[25,64492,51682],{"class":51371},[25,64494,51378],{"class":244},[25,64496,64497,64499,64501,64503,64505,64507,64509,64511,64513,64515,64518,64520,64522,64524,64526,64528],{"class":27,"line":16955},[25,64498,55305],{"class":244},[25,64500,51682],{"class":51371},[25,64502,53557],{"class":31},[25,64504,290],{"class":244},[25,64506,62694],{"class":45},[25,64508,61123],{"class":244},[25,64510,155],{"class":51371},[25,64512,55310],{"class":31},[25,64514,290],{"class":244},[25,64516,64517],{"class":45},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[25,64519,55318],{"class":31},[25,64521,290],{"class":244},[25,64523,7762],{"class":45},[25,64525,64490],{"class":244},[25,64527,51682],{"class":51371},[25,64529,51378],{"class":244},[25,64531,64532,64534,64536,64538,64540,64542,64544,64546,64548,64550,64553,64555,64557,64559,64561,64563],{"class":27,"line":16960},[25,64533,55305],{"class":244},[25,64535,51682],{"class":51371},[25,64537,53557],{"class":31},[25,64539,290],{"class":244},[25,64541,62694],{"class":45},[25,64543,61123],{"class":244},[25,64545,155],{"class":51371},[25,64547,55310],{"class":31},[25,64549,290],{"class":244},[25,64551,64552],{"class":45},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[25,64554,55318],{"class":31},[25,64556,290],{"class":244},[25,64558,7762],{"class":45},[25,64560,64490],{"class":244},[25,64562,51682],{"class":51371},[25,64564,51378],{"class":244},[25,64566,64567,64569,64571,64573,64575,64577,64579,64581,64583,64585,64588,64590,64592,64594,64596,64598],{"class":27,"line":16965},[25,64568,55305],{"class":244},[25,64570,51682],{"class":51371},[25,64572,53557],{"class":31},[25,64574,290],{"class":244},[25,64576,62694],{"class":45},[25,64578,61123],{"class":244},[25,64580,155],{"class":51371},[25,64582,55310],{"class":31},[25,64584,290],{"class":244},[25,64586,64587],{"class":45},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[25,64589,55318],{"class":31},[25,64591,290],{"class":244},[25,64593,7762],{"class":45},[25,64595,64490],{"class":244},[25,64597,51682],{"class":51371},[25,64599,51378],{"class":244},[25,64601,64602,64604,64606,64608,64610,64612,64614,64616,64618,64620,64623,64625,64627,64629,64631,64633],{"class":27,"line":16979},[25,64603,55305],{"class":244},[25,64605,51682],{"class":51371},[25,64607,53557],{"class":31},[25,64609,290],{"class":244},[25,64611,62694],{"class":45},[25,64613,61123],{"class":244},[25,64615,155],{"class":51371},[25,64617,55310],{"class":31},[25,64619,290],{"class":244},[25,64621,64622],{"class":45},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[25,64624,55318],{"class":31},[25,64626,290],{"class":244},[25,64628,7762],{"class":45},[25,64630,64490],{"class":244},[25,64632,51682],{"class":51371},[25,64634,51378],{"class":244},[25,64636,64637,64639,64641],{"class":27,"line":16991},[25,64638,51847],{"class":244},[25,64640,51682],{"class":51371},[25,64642,51378],{"class":244},[25,64644,64645,64647,64649],{"class":27,"line":16996},[25,64646,52488],{"class":244},[25,64648,51682],{"class":51371},[25,64650,51378],{"class":244},[25,64652,64653,64655,64657],{"class":27,"line":17009},[25,64654,52215],{"class":244},[25,64656,51884],{"class":51371},[25,64658,51378],{"class":244},[25,64660,64661],{"class":27,"line":17014},[25,64662,64663],{"class":302},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[25,64665,64666],{"class":27,"line":17019},[25,64667,64668],{"class":302},"    \u002F\u002F 1.1 获取 a 元素 \n",[25,64670,64671,64673,64676,64678,64680,64682,64684,64687],{"class":27,"line":17024},[25,64672,11331],{"class":240},[25,64674,64675],{"class":35}," as",[25,64677,13674],{"class":240},[25,64679,54467],{"class":244},[25,64681,55752],{"class":31},[25,64683,245],{"class":244},[25,64685,64686],{"class":45},"'.tab-nav a'",[25,64688,251],{"class":244},[25,64690,64691],{"class":27,"line":17037},[25,64692,64693],{"class":302},"    \u002F\u002F console.log(as) \n",[25,64695,64696,64698,64700,64702,64704,64706,64708,64710,64712,64715,64717,64719,64721],{"class":27,"line":17042},[25,64697,3311],{"class":240},[25,64699,1769],{"class":244},[25,64701,51918],{"class":240},[25,64703,9548],{"class":244},[25,64705,290],{"class":240},[25,64707,4203],{"class":35},[25,64709,9555],{"class":244},[25,64711,1153],{"class":240},[25,64713,64714],{"class":244}," as.",[25,64716,52039],{"class":35},[25,64718,3324],{"class":244},[25,64720,2402],{"class":240},[25,64722,12552],{"class":244},[25,64724,64725],{"class":27,"line":32704},[25,64726,64727],{"class":302},"      \u002F\u002F console.log(as[i])\n",[25,64729,64730],{"class":27,"line":32710},[25,64731,64732],{"class":302},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[25,64734,64735,64738,64740,64742,64745,64747,64749],{"class":27,"line":32716},[25,64736,64737],{"class":244},"      as[i].",[25,64739,57884],{"class":31},[25,64741,245],{"class":244},[25,64743,64744],{"class":45},"'mouseenter'",[25,64746,12545],{"class":244},[25,64748,54520],{"class":240},[25,64750,54523],{"class":244},[25,64752,64753],{"class":27,"line":32722},[25,64754,64755],{"class":302},"        \u002F\u002F console.log('鼠标经过')\n",[25,64757,64758],{"class":27,"line":32728},[25,64759,64760],{"class":302},"        \u002F\u002F 排他思想  \n",[25,64762,64763],{"class":27,"line":32739},[25,64764,64765],{"class":302},"        \u002F\u002F 干掉别人 移除类active\n",[25,64767,64768,64770,64772,64774,64777,64779,64781,64783,64786],{"class":27,"line":32745},[25,64769,51996],{"class":244},[25,64771,54470],{"class":31},[25,64773,245],{"class":244},[25,64775,64776],{"class":45},"'.tab-nav .active'",[25,64778,57074],{"class":244},[25,64780,57077],{"class":31},[25,64782,245],{"class":244},[25,64784,64785],{"class":45},"'active'",[25,64787,251],{"class":244},[25,64789,64790],{"class":27,"line":32765},[25,64791,64792],{"class":302},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[25,64794,64795,64798,64801,64803,64805,64807],{"class":27,"line":32771},[25,64796,64797],{"class":35},"        this",[25,64799,64800],{"class":244},".classList.",[25,64802,5444],{"class":31},[25,64804,245],{"class":244},[25,64806,64785],{"class":45},[25,64808,251],{"class":244},[25,64810,64811],{"class":27,"line":32782},[25,64812,2510],{"emptyLinePlaceholder":167},[25,64814,64815],{"class":27,"line":32788},[25,64816,64817],{"class":302},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[25,64819,64820],{"class":27,"line":32794},[25,64821,64822],{"class":302},"        \u002F\u002F 干掉别人\n",[25,64824,64825,64827,64829,64831,64834,64836,64838,64840,64842],{"class":27,"line":32800},[25,64826,51996],{"class":244},[25,64828,54470],{"class":31},[25,64830,245],{"class":244},[25,64832,64833],{"class":45},"'.tab-content .active'",[25,64835,57074],{"class":244},[25,64837,57077],{"class":31},[25,64839,245],{"class":244},[25,64841,64785],{"class":45},[25,64843,251],{"class":244},[25,64845,64846],{"class":27,"line":32806},[25,64847,64848],{"class":302},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[25,64850,64851,64853,64855,64857,64860,64862,64864,64866,64868,64870,64872,64874,64876],{"class":27,"line":32812},[25,64852,51996],{"class":244},[25,64854,54470],{"class":31},[25,64856,245],{"class":244},[25,64858,64859],{"class":45},"`.tab-content .item:nth-child(${",[25,64861,684],{"class":244},[25,64863,45637],{"class":240},[25,64865,25225],{"class":35},[25,64867,57103],{"class":45},[25,64869,57074],{"class":244},[25,64871,5444],{"class":31},[25,64873,245],{"class":244},[25,64875,64785],{"class":45},[25,64877,251],{"class":244},[25,64879,64880],{"class":27,"line":32818},[25,64881,2510],{"emptyLinePlaceholder":167},[25,64883,64884],{"class":27,"line":32824},[25,64885,64886],{"class":244},"      })\n",[25,64888,64889],{"class":27,"line":32844},[25,64890,2297],{"class":244},[25,64892,64893,64895,64897],{"class":27,"line":32850},[25,64894,52488],{"class":244},[25,64896,51884],{"class":51371},[25,64898,51378],{"class":244},[25,64900,64901,64903,64905],{"class":27,"line":32866},[25,64902,51856],{"class":244},[25,64904,51871],{"class":51371},[25,64906,51378],{"class":244},[25,64908,64909],{"class":27,"line":32872},[25,64910,2510],{"emptyLinePlaceholder":167},[25,64912,64913,64915,64917],{"class":27,"line":32886},[25,64914,51856],{"class":244},[25,64916,50706],{"class":51371},[25,64918,51378],{"class":244},[99,64920,64921],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[99,64923,64924],{},"在监听事件中，this指向的就是他的调用者",[99,64926,64927],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[99,64929,53791],{},[99,64931,64932],{},"(function () {",[99,64934,64935],{},"const list = document.querySelector('.xtx-elevator-list')",[99,64937,64938],{},"list.addEventListener('click', function (e) {",[99,64940,64941],{},"if (e.target.tagName === 'A') {",[99,64943,64944],{},"\u002F\u002F 排他思想",[99,64946,64947],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[99,64949,64950],{},"const old = document.querySelector('.xtx-elevator-list .active')",[99,64952,64953],{},"\u002F\u002F console.log(old);",[99,64955,64956],{},"\u002F\u002F 判断",[99,64958,64959],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[99,64961,64962],{},"if (old) old.classList.remove('active')",[99,64964,64965],{},"e.target.classList.add('active')",[99,64967,1189],{},[99,64969,52535],{},[99,64971,64972],{},"})();",[210,64974,64976],{"id":64975},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[15,64978,64980],{"className":50704,"code":64979,"language":50706,"meta":20,"style":20},"\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",[22,64981,64982,64992,64996,65004,65008,65022,65036,65048,65056,65062,65072,65082,65086,65090,65097,65109,65120,65137,65150,65164,65174,65178,65182,65189,65200,65218,65228,65240,65244,65248,65255,65272,65283,65295,65299,65303,65310,65322,65326,65334,65342,65346,65354,65362,65370,65385,65429,65437,65450,65463,65476,65484,65492,65500,65528,65536,65548,65561,65574,65582,65590,65598,65624,65632,65645,65657,65670,65678,65686,65694,65720,65728,65741,65753,65766,65774,65782,65790,65795,65815,65820,65840,65845,65862,65867,65875,65880,65909,65922,65926,65930,65935,65939,65967,65972,65989,65994,65999,66004,66009,66035,66039,66043,66051,66059,66063],{"__ignoreMap":20},[25,64983,64984,64986,64988,64990],{"class":27,"line":28},[25,64985,51368],{"class":244},[25,64987,51372],{"class":51371},[25,64989,51375],{"class":31},[25,64991,51378],{"class":244},[25,64993,64994],{"class":27,"line":39},[25,64995,2510],{"emptyLinePlaceholder":167},[25,64997,64998,65000,65002],{"class":27,"line":51},[25,64999,1153],{"class":244},[25,65001,50706],{"class":51371},[25,65003,51378],{"class":244},[25,65005,65006],{"class":27,"line":59},[25,65007,2510],{"emptyLinePlaceholder":167},[25,65009,65010,65012,65014,65016,65018,65020],{"class":27,"line":67},[25,65011,1153],{"class":244},[25,65013,51405],{"class":51371},[25,65015,51387],{"class":31},[25,65017,290],{"class":244},[25,65019,51392],{"class":45},[25,65021,51378],{"class":244},[25,65023,65024,65026,65028,65030,65032,65034],{"class":27,"line":75},[25,65025,52215],{"class":244},[25,65027,51415],{"class":51371},[25,65029,51418],{"class":31},[25,65031,290],{"class":244},[25,65033,51423],{"class":45},[25,65035,51378],{"class":244},[25,65037,65038,65040,65042,65044,65046],{"class":27,"line":83},[25,65039,52215],{"class":244},[25,65041,51478],{"class":51371},[25,65043,55385],{"class":244},[25,65045,51478],{"class":51371},[25,65047,51378],{"class":244},[25,65049,65050,65052,65054],{"class":27,"line":91},[25,65051,52215],{"class":244},[25,65053,159],{"class":51371},[25,65055,51378],{"class":244},[25,65057,65058,65060],{"class":27,"line":1429},[25,65059,6513],{"class":51371},[25,65061,15682],{"class":244},[25,65063,65064,65066,65068,65070],{"class":27,"line":1441},[25,65065,54777],{"class":35},[25,65067,51508],{"class":244},[25,65069,434],{"class":35},[25,65071,1403],{"class":244},[25,65073,65074,65076,65078,65080],{"class":27,"line":1723},[25,65075,54766],{"class":35},[25,65077,51508],{"class":244},[25,65079,434],{"class":35},[25,65081,1403],{"class":244},[25,65083,65084],{"class":27,"line":1728},[25,65085,2297],{"class":244},[25,65087,65088],{"class":27,"line":1734},[25,65089,2510],{"emptyLinePlaceholder":167},[25,65091,65092,65095],{"class":27,"line":1739},[25,65093,65094],{"class":51371},"    table",[25,65096,15682],{"class":244},[25,65098,65099,65102,65104,65107],{"class":27,"line":1753},[25,65100,65101],{"class":35},"      border-collapse",[25,65103,51508],{"class":244},[25,65105,65106],{"class":35},"collapse",[25,65108,1403],{"class":244},[25,65110,65111,65114,65116,65118],{"class":27,"line":1758},[25,65112,65113],{"class":35},"      border-spacing",[25,65115,51508],{"class":244},[25,65117,434],{"class":35},[25,65119,1403],{"class":244},[25,65121,65122,65124,65126,65128,65130,65132,65135],{"class":27,"line":1764},[25,65123,62048],{"class":35},[25,65125,51508],{"class":244},[25,65127,460],{"class":35},[25,65129,51563],{"class":240},[25,65131,51592],{"class":35},[25,65133,65134],{"class":35}," #c0c0c0",[25,65136,1403],{"class":244},[25,65138,65139,65141,65143,65146,65148],{"class":27,"line":1785},[25,65140,54842],{"class":35},[25,65142,51508],{"class":244},[25,65144,65145],{"class":35},"500",[25,65147,51563],{"class":240},[25,65149,1403],{"class":244},[25,65151,65152,65154,65156,65158,65160,65162],{"class":27,"line":1790},[25,65153,54777],{"class":35},[25,65155,51508],{"class":244},[25,65157,554],{"class":35},[25,65159,51563],{"class":240},[25,65161,51627],{"class":35},[25,65163,1403],{"class":244},[25,65165,65166,65168,65170,65172],{"class":27,"line":1804},[25,65167,57357],{"class":35},[25,65169,51508],{"class":244},[25,65171,51663],{"class":35},[25,65173,1403],{"class":244},[25,65175,65176],{"class":27,"line":1809},[25,65177,2297],{"class":244},[25,65179,65180],{"class":27,"line":1838},[25,65181,2510],{"emptyLinePlaceholder":167},[25,65183,65184,65187],{"class":27,"line":1843},[25,65185,65186],{"class":51371},"    th",[25,65188,15682],{"class":244},[25,65190,65191,65193,65195,65198],{"class":27,"line":1860},[25,65192,54955],{"class":35},[25,65194,51508],{"class":244},[25,65196,65197],{"class":35},"#09c",[25,65199,1403],{"class":244},[25,65201,65202,65205,65207,65209,65211,65213,65216],{"class":27,"line":1865},[25,65203,65204],{"class":35},"      font",[25,65206,51508],{"class":244},[25,65208,62410],{"class":35},[25,65210,64144],{"class":35},[25,65212,51563],{"class":240},[25,65214,65215],{"class":45}," \"微软雅黑\"",[25,65217,1403],{"class":244},[25,65219,65220,65222,65224,65226],{"class":27,"line":1870},[25,65221,57487],{"class":35},[25,65223,51508],{"class":244},[25,65225,60913],{"class":35},[25,65227,1403],{"class":244},[25,65229,65230,65232,65234,65236,65238],{"class":27,"line":1875},[25,65231,54856],{"class":35},[25,65233,51508],{"class":244},[25,65235,1043],{"class":35},[25,65237,51563],{"class":240},[25,65239,1403],{"class":244},[25,65241,65242],{"class":27,"line":1889},[25,65243,2297],{"class":244},[25,65245,65246],{"class":27,"line":1894},[25,65247,2510],{"emptyLinePlaceholder":167},[25,65249,65250,65253],{"class":27,"line":2687},[25,65251,65252],{"class":51371},"    td",[25,65254,15682],{"class":244},[25,65256,65257,65259,65261,65263,65265,65267,65270],{"class":27,"line":2701},[25,65258,62048],{"class":35},[25,65260,51508],{"class":244},[25,65262,460],{"class":35},[25,65264,51563],{"class":240},[25,65266,51592],{"class":35},[25,65268,65269],{"class":35}," #d0d0d0",[25,65271,1403],{"class":244},[25,65273,65274,65276,65278,65281],{"class":27,"line":2709},[25,65275,57487],{"class":35},[25,65277,51508],{"class":244},[25,65279,65280],{"class":35},"#404060",[25,65282,1403],{"class":244},[25,65284,65285,65287,65289,65291,65293],{"class":27,"line":2714},[25,65286,54766],{"class":35},[25,65288,51508],{"class":244},[25,65290,689],{"class":35},[25,65292,51563],{"class":240},[25,65294,1403],{"class":244},[25,65296,65297],{"class":27,"line":2720},[25,65298,2297],{"class":244},[25,65300,65301],{"class":27,"line":2726},[25,65302,2510],{"emptyLinePlaceholder":167},[25,65304,65305,65308],{"class":27,"line":2731},[25,65306,65307],{"class":31},"    .allCheck",[25,65309,15682],{"class":244},[25,65311,65312,65314,65316,65318,65320],{"class":27,"line":8058},[25,65313,54842],{"class":35},[25,65315,51508],{"class":244},[25,65317,855],{"class":35},[25,65319,51563],{"class":240},[25,65321,1403],{"class":244},[25,65323,65324],{"class":27,"line":8082},[25,65325,2297],{"class":244},[25,65327,65328,65330,65332],{"class":27,"line":8087},[25,65329,52488],{"class":244},[25,65331,159],{"class":51371},[25,65333,51378],{"class":244},[25,65335,65336,65338,65340],{"class":27,"line":8093},[25,65337,51856],{"class":244},[25,65339,51405],{"class":51371},[25,65341,51378],{"class":244},[25,65343,65344],{"class":27,"line":8120},[25,65345,2510],{"emptyLinePlaceholder":167},[25,65347,65348,65350,65352],{"class":27,"line":8125},[25,65349,1153],{"class":244},[25,65351,51871],{"class":51371},[25,65353,51378],{"class":244},[25,65355,65356,65358,65360],{"class":27,"line":8131},[25,65357,52215],{"class":244},[25,65359,380],{"class":51371},[25,65361,51378],{"class":244},[25,65363,65364,65366,65368],{"class":27,"line":8143},[25,65365,51412],{"class":244},[25,65367,386],{"class":51371},[25,65369,51378],{"class":244},[25,65371,65372,65374,65376,65378,65380,65383],{"class":27,"line":8155},[25,65373,55305],{"class":244},[25,65375,389],{"class":51371},[25,65377,53557],{"class":31},[25,65379,290],{"class":244},[25,65381,65382],{"class":45},"\"allCheck\"",[25,65384,51378],{"class":244},[25,65386,65387,65389,65391,65393,65395,65397,65399,65401,65403,65405,65407,65410,65413,65415,65417,65419,65422,65425,65427],{"class":27,"line":8167},[25,65388,55373],{"class":244},[25,65390,53892],{"class":51371},[25,65392,53895],{"class":31},[25,65394,290],{"class":244},[25,65396,53900],{"class":45},[25,65398,15030],{"class":31},[25,65400,290],{"class":244},[25,65402,7762],{"class":45},[25,65404,15069],{"class":31},[25,65406,290],{"class":244},[25,65408,65409],{"class":45},"\"checkAll\"",[25,65411,65412],{"class":244},"> \u003C",[25,65414,25],{"class":51371},[25,65416,53557],{"class":31},[25,65418,290],{"class":244},[25,65420,65421],{"class":45},"\"all\"",[25,65423,65424],{"class":244},">全选\u003C\u002F",[25,65426,25],{"class":51371},[25,65428,51378],{"class":244},[25,65430,65431,65433,65435],{"class":27,"line":9826},[25,65432,55478],{"class":244},[25,65434,389],{"class":51371},[25,65436,51378],{"class":244},[25,65438,65439,65441,65443,65446,65448],{"class":27,"line":9851},[25,65440,55305],{"class":244},[25,65442,389],{"class":51371},[25,65444,65445],{"class":244},">商品\u003C\u002F",[25,65447,389],{"class":51371},[25,65449,51378],{"class":244},[25,65451,65452,65454,65456,65459,65461],{"class":27,"line":9874},[25,65453,55305],{"class":244},[25,65455,389],{"class":51371},[25,65457,65458],{"class":244},">商家\u003C\u002F",[25,65460,389],{"class":51371},[25,65462,51378],{"class":244},[25,65464,65465,65467,65469,65472,65474],{"class":27,"line":9898},[25,65466,55305],{"class":244},[25,65468,389],{"class":51371},[25,65470,65471],{"class":244},">价格\u003C\u002F",[25,65473,389],{"class":51371},[25,65475,51378],{"class":244},[25,65477,65478,65480,65482],{"class":27,"line":9903},[25,65479,51847],{"class":244},[25,65481,386],{"class":51371},[25,65483,51378],{"class":244},[25,65485,65486,65488,65490],{"class":27,"line":9908},[25,65487,51412],{"class":244},[25,65489,386],{"class":51371},[25,65491,51378],{"class":244},[25,65493,65494,65496,65498],{"class":27,"line":9913},[25,65495,55305],{"class":244},[25,65497,432],{"class":51371},[25,65499,51378],{"class":244},[25,65501,65502,65504,65506,65508,65510,65512,65514,65516,65519,65521,65523,65526],{"class":27,"line":9922},[25,65503,55373],{"class":244},[25,65505,53892],{"class":51371},[25,65507,53895],{"class":31},[25,65509,290],{"class":244},[25,65511,53900],{"class":45},[25,65513,15030],{"class":31},[25,65515,290],{"class":244},[25,65517,65518],{"class":45},"\"check\"",[25,65520,53557],{"class":31},[25,65522,290],{"class":244},[25,65524,65525],{"class":45},"\"ck\"",[25,65527,51378],{"class":244},[25,65529,65530,65532,65534],{"class":27,"line":9927},[25,65531,55478],{"class":244},[25,65533,432],{"class":51371},[25,65535,51378],{"class":244},[25,65537,65538,65540,65542,65544,65546],{"class":27,"line":9933},[25,65539,55305],{"class":244},[25,65541,432],{"class":51371},[25,65543,61244],{"class":244},[25,65545,432],{"class":51371},[25,65547,51378],{"class":244},[25,65549,65550,65552,65554,65557,65559],{"class":27,"line":9954},[25,65551,55305],{"class":244},[25,65553,432],{"class":51371},[25,65555,65556],{"class":244},">小米\u003C\u002F",[25,65558,432],{"class":51371},[25,65560,51378],{"class":244},[25,65562,65563,65565,65567,65570,65572],{"class":27,"line":9960},[25,65564,55305],{"class":244},[25,65566,432],{"class":51371},[25,65568,65569],{"class":244},">￥1999\u003C\u002F",[25,65571,432],{"class":51371},[25,65573,51378],{"class":244},[25,65575,65576,65578,65580],{"class":27,"line":9974},[25,65577,51847],{"class":244},[25,65579,386],{"class":51371},[25,65581,51378],{"class":244},[25,65583,65584,65586,65588],{"class":27,"line":9980},[25,65585,51412],{"class":244},[25,65587,386],{"class":51371},[25,65589,51378],{"class":244},[25,65591,65592,65594,65596],{"class":27,"line":10007},[25,65593,55305],{"class":244},[25,65595,432],{"class":51371},[25,65597,51378],{"class":244},[25,65599,65600,65602,65604,65606,65608,65610,65612,65614,65616,65618,65620,65622],{"class":27,"line":10016},[25,65601,55373],{"class":244},[25,65603,53892],{"class":51371},[25,65605,53895],{"class":31},[25,65607,290],{"class":244},[25,65609,53900],{"class":45},[25,65611,15030],{"class":31},[25,65613,290],{"class":244},[25,65615,65518],{"class":45},[25,65617,53557],{"class":31},[25,65619,290],{"class":244},[25,65621,65525],{"class":45},[25,65623,51378],{"class":244},[25,65625,65626,65628,65630],{"class":27,"line":10022},[25,65627,55478],{"class":244},[25,65629,432],{"class":51371},[25,65631,51378],{"class":244},[25,65633,65634,65636,65638,65641,65643],{"class":27,"line":10030},[25,65635,55305],{"class":244},[25,65637,432],{"class":51371},[25,65639,65640],{"class":244},">小米净水器\u003C\u002F",[25,65642,432],{"class":51371},[25,65644,51378],{"class":244},[25,65646,65647,65649,65651,65653,65655],{"class":27,"line":10035},[25,65648,55305],{"class":244},[25,65650,432],{"class":51371},[25,65652,65556],{"class":244},[25,65654,432],{"class":51371},[25,65656,51378],{"class":244},[25,65658,65659,65661,65663,65666,65668],{"class":27,"line":16714},[25,65660,55305],{"class":244},[25,65662,432],{"class":51371},[25,65664,65665],{"class":244},">￥4999\u003C\u002F",[25,65667,432],{"class":51371},[25,65669,51378],{"class":244},[25,65671,65672,65674,65676],{"class":27,"line":16720},[25,65673,51847],{"class":244},[25,65675,386],{"class":51371},[25,65677,51378],{"class":244},[25,65679,65680,65682,65684],{"class":27,"line":16743},[25,65681,51412],{"class":244},[25,65683,386],{"class":51371},[25,65685,51378],{"class":244},[25,65687,65688,65690,65692],{"class":27,"line":16749},[25,65689,55305],{"class":244},[25,65691,432],{"class":51371},[25,65693,51378],{"class":244},[25,65695,65696,65698,65700,65702,65704,65706,65708,65710,65712,65714,65716,65718],{"class":27,"line":16772},[25,65697,55373],{"class":244},[25,65699,53892],{"class":51371},[25,65701,53895],{"class":31},[25,65703,290],{"class":244},[25,65705,53900],{"class":45},[25,65707,15030],{"class":31},[25,65709,290],{"class":244},[25,65711,65518],{"class":45},[25,65713,53557],{"class":31},[25,65715,290],{"class":244},[25,65717,65525],{"class":45},[25,65719,51378],{"class":244},[25,65721,65722,65724,65726],{"class":27,"line":16786},[25,65723,55478],{"class":244},[25,65725,432],{"class":51371},[25,65727,51378],{"class":244},[25,65729,65730,65732,65734,65737,65739],{"class":27,"line":16806},[25,65731,55305],{"class":244},[25,65733,432],{"class":51371},[25,65735,65736],{"class":244},">小米电视\u003C\u002F",[25,65738,432],{"class":51371},[25,65740,51378],{"class":244},[25,65742,65743,65745,65747,65749,65751],{"class":27,"line":16812},[25,65744,55305],{"class":244},[25,65746,432],{"class":51371},[25,65748,65556],{"class":244},[25,65750,432],{"class":51371},[25,65752,51378],{"class":244},[25,65754,65755,65757,65759,65762,65764],{"class":27,"line":16823},[25,65756,55305],{"class":244},[25,65758,432],{"class":51371},[25,65760,65761],{"class":244},">￥5999\u003C\u002F",[25,65763,432],{"class":51371},[25,65765,51378],{"class":244},[25,65767,65768,65770,65772],{"class":27,"line":16846},[25,65769,51847],{"class":244},[25,65771,386],{"class":51371},[25,65773,51378],{"class":244},[25,65775,65776,65778,65780],{"class":27,"line":16868},[25,65777,52488],{"class":244},[25,65779,380],{"class":51371},[25,65781,51378],{"class":244},[25,65783,65784,65786,65788],{"class":27,"line":16873},[25,65785,52215],{"class":244},[25,65787,51884],{"class":51371},[25,65789,51378],{"class":244},[25,65791,65792],{"class":27,"line":16879},[25,65793,65794],{"class":302},"    \u002F\u002F 1. 获取大复选框\n",[25,65796,65797,65799,65802,65804,65806,65808,65810,65813],{"class":27,"line":16893},[25,65798,11331],{"class":240},[25,65800,65801],{"class":35}," checkAll",[25,65803,13674],{"class":240},[25,65805,54467],{"class":244},[25,65807,54470],{"class":31},[25,65809,245],{"class":244},[25,65811,65812],{"class":45},"'#checkAll'",[25,65814,251],{"class":244},[25,65816,65817],{"class":27,"line":16906},[25,65818,65819],{"class":302},"    \u002F\u002F 2. 获取所有的小复选框\n",[25,65821,65822,65824,65827,65829,65831,65833,65835,65838],{"class":27,"line":16911},[25,65823,11331],{"class":240},[25,65825,65826],{"class":35}," cks",[25,65828,13674],{"class":240},[25,65830,54467],{"class":244},[25,65832,55752],{"class":31},[25,65834,245],{"class":244},[25,65836,65837],{"class":45},"'.ck'",[25,65839,251],{"class":244},[25,65841,65842],{"class":27,"line":16925},[25,65843,65844],{"class":302},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[25,65846,65847,65850,65852,65854,65856,65858,65860],{"class":27,"line":16930},[25,65848,65849],{"class":244},"    checkAll.",[25,65851,57884],{"class":31},[25,65853,245],{"class":244},[25,65855,57889],{"class":45},[25,65857,12545],{"class":244},[25,65859,54520],{"class":240},[25,65861,54523],{"class":244},[25,65863,65864],{"class":27,"line":16936},[25,65865,65866],{"class":302},"      \u002F\u002F 得到当前大复选框的选中状态\n",[25,65868,65869,65872],{"class":27,"line":16941},[25,65870,65871],{"class":302},"      \u002F\u002F console.log(checkAll.checked)",[25,65873,65874],{"class":302},"  \u002F\u002F 得到 是 true 或者是 false\n",[25,65876,65877],{"class":27,"line":16955},[25,65878,65879],{"class":302},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[25,65881,65882,65884,65886,65888,65890,65892,65894,65896,65898,65901,65903,65905,65907],{"class":27,"line":16960},[25,65883,52355],{"class":240},[25,65885,1769],{"class":244},[25,65887,51918],{"class":240},[25,65889,9548],{"class":244},[25,65891,290],{"class":240},[25,65893,4203],{"class":35},[25,65895,9555],{"class":244},[25,65897,1153],{"class":240},[25,65899,65900],{"class":244}," cks.",[25,65902,52039],{"class":35},[25,65904,3324],{"class":244},[25,65906,2402],{"class":240},[25,65908,12552],{"class":244},[25,65910,65911,65914,65916,65919],{"class":27,"line":16965},[25,65912,65913],{"class":244},"        cks[i].checked ",[25,65915,290],{"class":240},[25,65917,65918],{"class":35}," this",[25,65920,65921],{"class":244},".checked\n",[25,65923,65924],{"class":27,"line":16979},[25,65925,52469],{"class":244},[25,65927,65928],{"class":27,"line":16991},[25,65929,33532],{"class":244},[25,65931,65932],{"class":27,"line":16996},[25,65933,65934],{"class":302},"    \u002F\u002F 5. 小复选框控制大复选框\n",[25,65936,65937],{"class":27,"line":17009},[25,65938,2510],{"emptyLinePlaceholder":167},[25,65940,65941,65943,65945,65947,65949,65951,65953,65955,65957,65959,65961,65963,65965],{"class":27,"line":17014},[25,65942,3311],{"class":240},[25,65944,1769],{"class":244},[25,65946,51918],{"class":240},[25,65948,9548],{"class":244},[25,65950,290],{"class":240},[25,65952,4203],{"class":35},[25,65954,9555],{"class":244},[25,65956,1153],{"class":240},[25,65958,65900],{"class":244},[25,65960,52039],{"class":35},[25,65962,3324],{"class":244},[25,65964,2402],{"class":240},[25,65966,12552],{"class":244},[25,65968,65969],{"class":27,"line":17019},[25,65970,65971],{"class":302},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[25,65973,65974,65977,65979,65981,65983,65985,65987],{"class":27,"line":17024},[25,65975,65976],{"class":244},"      cks[i].",[25,65978,57884],{"class":31},[25,65980,245],{"class":244},[25,65982,57889],{"class":45},[25,65984,12545],{"class":244},[25,65986,54520],{"class":240},[25,65988,54523],{"class":244},[25,65990,65991],{"class":27,"line":17037},[25,65992,65993],{"class":302},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[25,65995,65996],{"class":27,"line":17042},[25,65997,65998],{"class":302},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[25,66000,66001],{"class":27,"line":32704},[25,66002,66003],{"class":302},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[25,66005,66006],{"class":27,"line":32710},[25,66007,66008],{"class":302},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[25,66010,66011,66014,66016,66018,66020,66022,66025,66027,66029,66031,66033],{"class":27,"line":32716},[25,66012,66013],{"class":244},"        checkAll.checked ",[25,66015,290],{"class":240},[25,66017,54467],{"class":244},[25,66019,55752],{"class":31},[25,66021,245],{"class":244},[25,66023,66024],{"class":45},"'.ck:checked'",[25,66026,30897],{"class":244},[25,66028,52039],{"class":35},[25,66030,57977],{"class":240},[25,66032,65900],{"class":244},[25,66034,55902],{"class":35},[25,66036,66037],{"class":27,"line":32722},[25,66038,64886],{"class":244},[25,66040,66041],{"class":27,"line":32728},[25,66042,2297],{"class":244},[25,66044,66045,66047,66049],{"class":27,"line":32739},[25,66046,52488],{"class":244},[25,66048,51884],{"class":51371},[25,66050,51378],{"class":244},[25,66052,66053,66055,66057],{"class":27,"line":32745},[25,66054,51856],{"class":244},[25,66056,51871],{"class":51371},[25,66058,51378],{"class":244},[25,66060,66061],{"class":27,"line":32765},[25,66062,2510],{"emptyLinePlaceholder":167},[25,66064,66065,66067,66069],{"class":27,"line":32771},[25,66066,51856],{"class":244},[25,66068,50706],{"class":51371},[25,66070,51378],{"class":244},[99,66072,66073],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[99,66075,66076],{},"用好之间比较得到的布尔值！！！",[99,66078,66079,66080,66083,66084,1769,66087,827,66089,66092],{},"在 JS 里访问的时候，",[22,66081,66082],{},"checkbox.checked"," 是一个 ",[392,66085,66086],{},"布尔值",[22,66088,1474],{},[22,66090,66091],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[99,66094,66095,66096,66099,66100],{},"HTML 的 ",[22,66097,66098],{},"checked=\"checked\""," 只是 ",[392,66101,66102,66103,66106],{},"初始值；JS 的 ",[22,66104,66105],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[99,66108,66109],{},"：checked是一个伪类选择器",[99,66111,66112],{},[155,66113],{"alt":20,"src":66114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[99,66116,66117,66120],{},[66118,66119],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[99,66122,66123],{},[155,66124],{"alt":20,"src":66125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[182,66127,66129],{"id":66128},"_33-dom事件进阶","3.3 DOM事件进阶",[210,66131,66133],{"id":66132},"_331-事件流","3.3.1 事件流",[99,66135,66136],{},[155,66137],{"alt":20,"src":66138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22108,66140,66142],{"id":66141},"_3311-事件捕获","3.3.1.1 事件捕获",[99,66144,66145],{},[155,66146],{"alt":20,"src":66147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[15,66149,66151],{"className":50704,"code":66150,"language":50706,"meta":20,"style":20},"\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",[22,66152,66153,66163,66177,66181,66189,66203,66223,66235,66243,66250,66262,66274,66284,66288,66292,66299,66311,66323,66333,66337,66345,66353,66357,66365,66380,66399,66407,66415,66435,66455,66471,66482,66490,66507,66518,66526,66543,66554,66562,66570,66578,66582],{"__ignoreMap":20},[25,66154,66155,66157,66159,66161],{"class":27,"line":28},[25,66156,51368],{"class":244},[25,66158,51372],{"class":51371},[25,66160,51375],{"class":31},[25,66162,51378],{"class":244},[25,66164,66165,66167,66169,66171,66173,66175],{"class":27,"line":39},[25,66166,1153],{"class":244},[25,66168,50706],{"class":51371},[25,66170,51387],{"class":31},[25,66172,290],{"class":244},[25,66174,51392],{"class":45},[25,66176,51378],{"class":244},[25,66178,66179],{"class":27,"line":51},[25,66180,2510],{"emptyLinePlaceholder":167},[25,66182,66183,66185,66187],{"class":27,"line":59},[25,66184,1153],{"class":244},[25,66186,51405],{"class":51371},[25,66188,51378],{"class":244},[25,66190,66191,66193,66195,66197,66199,66201],{"class":27,"line":67},[25,66192,52215],{"class":244},[25,66194,51415],{"class":51371},[25,66196,51418],{"class":31},[25,66198,290],{"class":244},[25,66200,51423],{"class":45},[25,66202,51378],{"class":244},[25,66204,66205,66207,66209,66211,66213,66215,66217,66219,66221],{"class":27,"line":75},[25,66206,52215],{"class":244},[25,66208,51415],{"class":51371},[25,66210,15030],{"class":31},[25,66212,290],{"class":244},[25,66214,51462],{"class":45},[25,66216,51442],{"class":31},[25,66218,290],{"class":244},[25,66220,51469],{"class":45},[25,66222,51378],{"class":244},[25,66224,66225,66227,66229,66231,66233],{"class":27,"line":83},[25,66226,52215],{"class":244},[25,66228,51478],{"class":51371},[25,66230,51481],{"class":244},[25,66232,51478],{"class":51371},[25,66234,51378],{"class":244},[25,66236,66237,66239,66241],{"class":27,"line":91},[25,66238,52215],{"class":244},[25,66240,159],{"class":51371},[25,66242,51378],{"class":244},[25,66244,66245,66248],{"class":27,"line":1429},[25,66246,66247],{"class":31},"    .father",[25,66249,15682],{"class":244},[25,66251,66252,66254,66256,66258,66260],{"class":27,"line":1441},[25,66253,54842],{"class":35},[25,66255,51508],{"class":244},[25,66257,65145],{"class":35},[25,66259,51563],{"class":240},[25,66261,1403],{"class":244},[25,66263,66264,66266,66268,66270,66272],{"class":27,"line":1723},[25,66265,54856],{"class":35},[25,66267,51508],{"class":244},[25,66269,65145],{"class":35},[25,66271,51563],{"class":240},[25,66273,1403],{"class":244},[25,66275,66276,66278,66280,66282],{"class":27,"line":1728},[25,66277,54955],{"class":35},[25,66279,51508],{"class":244},[25,66281,51716],{"class":35},[25,66283,1403],{"class":244},[25,66285,66286],{"class":27,"line":1734},[25,66287,2297],{"class":244},[25,66289,66290],{"class":27,"line":1739},[25,66291,2510],{"emptyLinePlaceholder":167},[25,66293,66294,66297],{"class":27,"line":1753},[25,66295,66296],{"class":31},"    .son",[25,66298,15682],{"class":244},[25,66300,66301,66303,66305,66307,66309],{"class":27,"line":1758},[25,66302,54842],{"class":35},[25,66304,51508],{"class":244},[25,66306,1833],{"class":35},[25,66308,51563],{"class":240},[25,66310,1403],{"class":244},[25,66312,66313,66315,66317,66319,66321],{"class":27,"line":1764},[25,66314,54856],{"class":35},[25,66316,51508],{"class":244},[25,66318,1833],{"class":35},[25,66320,51563],{"class":240},[25,66322,1403],{"class":244},[25,66324,66325,66327,66329,66331],{"class":27,"line":1785},[25,66326,54955],{"class":35},[25,66328,51508],{"class":244},[25,66330,54960],{"class":35},[25,66332,1403],{"class":244},[25,66334,66335],{"class":27,"line":1790},[25,66336,2297],{"class":244},[25,66338,66339,66341,66343],{"class":27,"line":1804},[25,66340,52488],{"class":244},[25,66342,159],{"class":51371},[25,66344,51378],{"class":244},[25,66346,66347,66349,66351],{"class":27,"line":1809},[25,66348,51856],{"class":244},[25,66350,51405],{"class":51371},[25,66352,51378],{"class":244},[25,66354,66355],{"class":27,"line":1838},[25,66356,2510],{"emptyLinePlaceholder":167},[25,66358,66359,66361,66363],{"class":27,"line":1843},[25,66360,1153],{"class":244},[25,66362,51871],{"class":51371},[25,66364,51378],{"class":244},[25,66366,66367,66369,66371,66373,66375,66378],{"class":27,"line":1860},[25,66368,52215],{"class":244},[25,66370,51682],{"class":51371},[25,66372,53557],{"class":31},[25,66374,290],{"class":244},[25,66376,66377],{"class":45},"\"father\"",[25,66379,51378],{"class":244},[25,66381,66382,66384,66386,66388,66390,66393,66395,66397],{"class":27,"line":1865},[25,66383,51412],{"class":244},[25,66385,51682],{"class":51371},[25,66387,53557],{"class":31},[25,66389,290],{"class":244},[25,66391,66392],{"class":45},"\"son\"",[25,66394,55385],{"class":244},[25,66396,51682],{"class":51371},[25,66398,51378],{"class":244},[25,66400,66401,66403,66405],{"class":27,"line":1870},[25,66402,52488],{"class":244},[25,66404,51682],{"class":51371},[25,66406,51378],{"class":244},[25,66408,66409,66411,66413],{"class":27,"line":1875},[25,66410,52215],{"class":244},[25,66412,51884],{"class":51371},[25,66414,51378],{"class":244},[25,66416,66417,66419,66422,66424,66426,66428,66430,66433],{"class":27,"line":1889},[25,66418,11331],{"class":240},[25,66420,66421],{"class":35}," fa",[25,66423,13674],{"class":240},[25,66425,54467],{"class":244},[25,66427,54470],{"class":31},[25,66429,245],{"class":244},[25,66431,66432],{"class":45},"'.father'",[25,66434,251],{"class":244},[25,66436,66437,66439,66442,66444,66446,66448,66450,66453],{"class":27,"line":1894},[25,66438,11331],{"class":240},[25,66440,66441],{"class":35}," son",[25,66443,13674],{"class":240},[25,66445,54467],{"class":244},[25,66447,54470],{"class":31},[25,66449,245],{"class":244},[25,66451,66452],{"class":45},"'.son'",[25,66454,251],{"class":244},[25,66456,66457,66459,66461,66463,66465,66467,66469],{"class":27,"line":2687},[25,66458,52478],{"class":244},[25,66460,57884],{"class":31},[25,66462,245],{"class":244},[25,66464,57889],{"class":45},[25,66466,12545],{"class":244},[25,66468,54520],{"class":240},[25,66470,54523],{"class":244},[25,66472,66473,66475,66477,66480],{"class":27,"line":2701},[25,66474,58996],{"class":31},[25,66476,245],{"class":244},[25,66478,66479],{"class":45},"'woshiu1'",[25,66481,251],{"class":244},[25,66483,66484,66486,66488],{"class":27,"line":2709},[25,66485,54606],{"class":244},[25,66487,1474],{"class":35},[25,66489,251],{"class":244},[25,66491,66492,66495,66497,66499,66501,66503,66505],{"class":27,"line":2714},[25,66493,66494],{"class":244},"    fa.",[25,66496,57884],{"class":31},[25,66498,245],{"class":244},[25,66500,57889],{"class":45},[25,66502,12545],{"class":244},[25,66504,54520],{"class":240},[25,66506,54523],{"class":244},[25,66508,66509,66511,66513,66516],{"class":27,"line":2720},[25,66510,58996],{"class":31},[25,66512,245],{"class":244},[25,66514,66515],{"class":45},"'1'",[25,66517,251],{"class":244},[25,66519,66520,66522,66524],{"class":27,"line":2726},[25,66521,54606],{"class":244},[25,66523,1474],{"class":35},[25,66525,251],{"class":244},[25,66527,66528,66531,66533,66535,66537,66539,66541],{"class":27,"line":2731},[25,66529,66530],{"class":244},"    son.",[25,66532,57884],{"class":31},[25,66534,245],{"class":244},[25,66536,57889],{"class":45},[25,66538,12545],{"class":244},[25,66540,54520],{"class":240},[25,66542,54523],{"class":244},[25,66544,66545,66547,66549,66552],{"class":27,"line":8058},[25,66546,58996],{"class":31},[25,66548,245],{"class":244},[25,66550,66551],{"class":45},"'2'",[25,66553,251],{"class":244},[25,66555,66556,66558,66560],{"class":27,"line":8082},[25,66557,54606],{"class":244},[25,66559,1474],{"class":35},[25,66561,251],{"class":244},[25,66563,66564,66566,66568],{"class":27,"line":8087},[25,66565,52488],{"class":244},[25,66567,51884],{"class":51371},[25,66569,51378],{"class":244},[25,66571,66572,66574,66576],{"class":27,"line":8093},[25,66573,51856],{"class":244},[25,66575,51871],{"class":51371},[25,66577,51378],{"class":244},[25,66579,66580],{"class":27,"line":8120},[25,66581,2510],{"emptyLinePlaceholder":167},[25,66583,66584,66586,66588],{"class":27,"line":8125},[25,66585,51856],{"class":244},[25,66587,50706],{"class":51371},[25,66589,51378],{"class":244},[99,66591,66592],{},[155,66593],{"alt":20,"src":66594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[99,66596,66597],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22108,66599,66601],{"id":66600},"_3312-事件冒泡","3.3.1.2 事件冒泡",[99,66603,66604],{},[155,66605],{"alt":20,"src":66606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[99,66608,66609],{},"反着来",[99,66611,66612],{},"注意是同名事件，比如都是‘click’",[22108,66614,66616],{"id":66615},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[99,66618,66619],{},[155,66620],{"alt":20,"src":66621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22108,66623,66625],{"id":66624},"_3314-解绑事件","3.3.1.4 解绑事件",[99,66627,66628],{},[155,66629],{"alt":20,"src":66630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[99,66632,66633],{},[155,66634],{"alt":20,"src":66635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22108,66637,66639],{"id":66638},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[194,66641,66642],{},[106,66643,66644],{},"事件类型的区别",[99,66646,66647],{},[155,66648],{"alt":20,"src":66649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[99,66651,66652],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[194,66654,66655],{"start":39},[106,66656,66657],{},"注册事件的区别",[99,66659,66660],{},[155,66661],{"alt":20,"src":66662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22108,66664,66666],{"id":66665},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[99,66668,66669],{},[155,66670],{"alt":20,"src":66671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[99,66673,66674],{},[155,66675],{"alt":20,"src":66676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[15,66678,66680],{"className":53138,"code":66679,"language":53140,"meta":20,"style":20},"\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",[22,66681,66682,66690,66707,66730,66738,66743,66748,66753,66757,66765,66773],{"__ignoreMap":20},[25,66683,66684,66686,66688],{"class":27,"line":28},[25,66685,1153],{"class":244},[25,66687,51871],{"class":51371},[25,66689,51378],{"class":244},[25,66691,66692,66694,66697,66700,66702,66705],{"class":27,"line":39},[25,66693,52215],{"class":244},[25,66695,66696],{"class":51371},"form",[25,66698,66699],{"class":31}," action",[25,66701,290],{"class":244},[25,66703,66704],{"class":45},"\"http:\u002F\u002Fwww.itcast.cn\"",[25,66706,51378],{"class":244},[25,66708,66709,66711,66713,66715,66717,66720,66723,66725,66728],{"class":27,"line":51},[25,66710,51412],{"class":244},[25,66712,53892],{"class":51371},[25,66714,53895],{"class":31},[25,66716,290],{"class":244},[25,66718,66719],{"class":45},"\"submit\"",[25,66721,66722],{"class":31}," value",[25,66724,290],{"class":244},[25,66726,66727],{"class":45},"\"免费注册\"",[25,66729,51378],{"class":244},[25,66731,66732,66734,66736],{"class":27,"line":59},[25,66733,51412],{"class":244},[25,66735,51884],{"class":51371},[25,66737,51378],{"class":244},[25,66739,66740],{"class":27,"line":67},[25,66741,66742],{"class":244},"      const form = document.querySelector('form')\n",[25,66744,66745],{"class":27,"line":75},[25,66746,66747],{"class":244},"      form.addEventListener('submit', function (e) {\n",[25,66749,66750],{"class":27,"line":83},[25,66751,66752],{"class":244},"        e.preventDefault()\n",[25,66754,66755],{"class":27,"line":91},[25,66756,64886],{"class":244},[25,66758,66759,66761,66763],{"class":27,"line":1429},[25,66760,51847],{"class":244},[25,66762,51884],{"class":51371},[25,66764,51378],{"class":244},[25,66766,66767,66769,66771],{"class":27,"line":1441},[25,66768,52488],{"class":244},[25,66770,66696],{"class":51371},[25,66772,51378],{"class":244},[25,66774,66775,66777,66779],{"class":27,"line":1723},[25,66776,51856],{"class":244},[25,66778,51871],{"class":51371},[25,66780,51378],{"class":244},[99,66782,66783],{},"点击不在跳转！！！",[210,66785,66787],{"id":66786},"_332-事件委托","3.3.2 事件委托",[99,66789,66790],{},[155,66791],{"alt":20,"src":66792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[15,66794,66796],{"className":50704,"code":66795,"language":50706,"meta":20,"style":20},"\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",[22,66797,66798,66808,66822,66826,66834,66848,66868,66880,66888,66892,66900,66908,66920,66932,66944,66956,66968,66981,66989,66997,67002,67021,67042,67047,67052,67057,67062,67071,67075,67085,67089,67094,67099,67113,67123,67127,67131,67139,67147,67151],{"__ignoreMap":20},[25,66799,66800,66802,66804,66806],{"class":27,"line":28},[25,66801,51368],{"class":244},[25,66803,51372],{"class":51371},[25,66805,51375],{"class":31},[25,66807,51378],{"class":244},[25,66809,66810,66812,66814,66816,66818,66820],{"class":27,"line":39},[25,66811,1153],{"class":244},[25,66813,50706],{"class":51371},[25,66815,51387],{"class":31},[25,66817,290],{"class":244},[25,66819,51392],{"class":45},[25,66821,51378],{"class":244},[25,66823,66824],{"class":27,"line":51},[25,66825,2510],{"emptyLinePlaceholder":167},[25,66827,66828,66830,66832],{"class":27,"line":59},[25,66829,1153],{"class":244},[25,66831,51405],{"class":51371},[25,66833,51378],{"class":244},[25,66835,66836,66838,66840,66842,66844,66846],{"class":27,"line":67},[25,66837,52215],{"class":244},[25,66839,51415],{"class":51371},[25,66841,51418],{"class":31},[25,66843,290],{"class":244},[25,66845,51423],{"class":45},[25,66847,51378],{"class":244},[25,66849,66850,66852,66854,66856,66858,66860,66862,66864,66866],{"class":27,"line":75},[25,66851,52215],{"class":244},[25,66853,51415],{"class":51371},[25,66855,15030],{"class":31},[25,66857,290],{"class":244},[25,66859,51462],{"class":45},[25,66861,51442],{"class":31},[25,66863,290],{"class":244},[25,66865,51469],{"class":45},[25,66867,51378],{"class":244},[25,66869,66870,66872,66874,66876,66878],{"class":27,"line":83},[25,66871,52215],{"class":244},[25,66873,51478],{"class":51371},[25,66875,51481],{"class":244},[25,66877,51478],{"class":51371},[25,66879,51378],{"class":244},[25,66881,66882,66884,66886],{"class":27,"line":91},[25,66883,51856],{"class":244},[25,66885,51405],{"class":51371},[25,66887,51378],{"class":244},[25,66889,66890],{"class":27,"line":1429},[25,66891,2510],{"emptyLinePlaceholder":167},[25,66893,66894,66896,66898],{"class":27,"line":1441},[25,66895,1153],{"class":244},[25,66897,51871],{"class":51371},[25,66899,51378],{"class":244},[25,66901,66902,66904,66906],{"class":27,"line":1723},[25,66903,52215],{"class":244},[25,66905,103],{"class":51371},[25,66907,51378],{"class":244},[25,66909,66910,66912,66914,66916,66918],{"class":27,"line":1728},[25,66911,51412],{"class":244},[25,66913,106],{"class":51371},[25,66915,54037],{"class":244},[25,66917,106],{"class":51371},[25,66919,51378],{"class":244},[25,66921,66922,66924,66926,66928,66930],{"class":27,"line":1734},[25,66923,51412],{"class":244},[25,66925,106],{"class":51371},[25,66927,54056],{"class":244},[25,66929,106],{"class":51371},[25,66931,51378],{"class":244},[25,66933,66934,66936,66938,66940,66942],{"class":27,"line":1739},[25,66935,51412],{"class":244},[25,66937,106],{"class":51371},[25,66939,54075],{"class":244},[25,66941,106],{"class":51371},[25,66943,51378],{"class":244},[25,66945,66946,66948,66950,66952,66954],{"class":27,"line":1753},[25,66947,51412],{"class":244},[25,66949,106],{"class":51371},[25,66951,54094],{"class":244},[25,66953,106],{"class":51371},[25,66955,51378],{"class":244},[25,66957,66958,66960,66962,66964,66966],{"class":27,"line":1758},[25,66959,51412],{"class":244},[25,66961,106],{"class":51371},[25,66963,54113],{"class":244},[25,66965,106],{"class":51371},[25,66967,51378],{"class":244},[25,66969,66970,66972,66974,66977,66979],{"class":27,"line":1764},[25,66971,51412],{"class":244},[25,66973,99],{"class":51371},[25,66975,66976],{"class":244},">我不需要变色\u003C\u002F",[25,66978,99],{"class":51371},[25,66980,51378],{"class":244},[25,66982,66983,66985,66987],{"class":27,"line":1785},[25,66984,52488],{"class":244},[25,66986,103],{"class":51371},[25,66988,51378],{"class":244},[25,66990,66991,66993,66995],{"class":27,"line":1790},[25,66992,52215],{"class":244},[25,66994,51884],{"class":51371},[25,66996,51378],{"class":244},[25,66998,66999],{"class":27,"line":1804},[25,67000,67001],{"class":302},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[25,67003,67004,67006,67008,67010,67012,67014,67016,67019],{"class":27,"line":1809},[25,67005,11331],{"class":240},[25,67007,61363],{"class":35},[25,67009,13674],{"class":240},[25,67011,54467],{"class":244},[25,67013,54470],{"class":31},[25,67015,245],{"class":244},[25,67017,67018],{"class":45},"'ul'",[25,67020,251],{"class":244},[25,67022,67023,67026,67028,67030,67032,67034,67036,67038,67040],{"class":27,"line":1838},[25,67024,67025],{"class":244},"    ul.",[25,67027,57884],{"class":31},[25,67029,245],{"class":244},[25,67031,57889],{"class":45},[25,67033,12545],{"class":244},[25,67035,54520],{"class":240},[25,67037,1769],{"class":244},[25,67039,318],{"class":5326},[25,67041,12552],{"class":244},[25,67043,67044],{"class":27,"line":1843},[25,67045,67046],{"class":302},"      \u002F\u002F alert(1)\n",[25,67048,67049],{"class":27,"line":1860},[25,67050,67051],{"class":302},"      \u002F\u002F e.target就是我们点击的对象\n",[25,67053,67054],{"class":27,"line":1865},[25,67055,67056],{"class":302},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[25,67058,67059],{"class":27,"line":1870},[25,67060,67061],{"class":302},"      \u002F\u002F e.target.style.color = 'red'\n",[25,67063,67064,67066,67068],{"class":27,"line":1875},[25,67065,58315],{"class":244},[25,67067,58318],{"class":31},[25,67069,67070],{"class":244},"(e)\n",[25,67072,67073],{"class":27,"line":1889},[25,67074,2510],{"emptyLinePlaceholder":167},[25,67076,67077,67079,67082],{"class":27,"line":1894},[25,67078,58315],{"class":244},[25,67080,67081],{"class":31},"dir",[25,67083,67084],{"class":244},"(e.target)\n",[25,67086,67087],{"class":27,"line":2687},[25,67088,2510],{"emptyLinePlaceholder":167},[25,67090,67091],{"class":27,"line":2701},[25,67092,67093],{"class":302},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[25,67095,67096],{"class":27,"line":2709},[25,67097,67098],{"class":302},"      \u002F\u002F 通过tagName来进行判断\n",[25,67100,67101,67103,67106,67108,67111],{"class":27,"line":2714},[25,67102,54551],{"class":240},[25,67104,67105],{"class":244}," (e.target.tagName ",[25,67107,54557],{"class":240},[25,67109,67110],{"class":45}," 'LI'",[25,67112,12552],{"class":244},[25,67114,67115,67118,67120],{"class":27,"line":2720},[25,67116,67117],{"class":244},"        e.target.style.color ",[25,67119,290],{"class":240},[25,67121,67122],{"class":45}," 'red'\n",[25,67124,67125],{"class":27,"line":2726},[25,67126,52469],{"class":244},[25,67128,67129],{"class":27,"line":2731},[25,67130,33532],{"class":244},[25,67132,67133,67135,67137],{"class":27,"line":8058},[25,67134,52488],{"class":244},[25,67136,51884],{"class":51371},[25,67138,51378],{"class":244},[25,67140,67141,67143,67145],{"class":27,"line":8082},[25,67142,51856],{"class":244},[25,67144,51871],{"class":51371},[25,67146,51378],{"class":244},[25,67148,67149],{"class":27,"line":8087},[25,67150,2510],{"emptyLinePlaceholder":167},[25,67152,67153,67155,67157],{"class":27,"line":8093},[25,67154,51856],{"class":244},[25,67156,50706],{"class":51371},[25,67158,51378],{"class":244},[99,67160,67161],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[99,67163,67164],{},"if(e.target.ragName==='P') {}",[99,67166,67167],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[99,67169,67170],{},"通过事件委托的方式实现tab栏切换改造：",[99,67172,67173],{},"一定要记住自定义属性！！！！！！",[99,67175,67176],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[99,67178,67179],{},"id是自定义的属性名",[99,67181,67182],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[15,67184,67186],{"className":50704,"code":67185,"language":50706,"meta":20,"style":20},"\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",[22,67187,67188,67198,67212,67216,67224,67238,67258,67278,67290,67298,67304,67314,67324,67328,67332,67338,67350,67362,67374,67390,67394,67398,67404,67416,67428,67440,67450,67460,67464,67468,67476,67488,67498,67510,67514,67518,67526,67536,67546,67556,67560,67564,67574,67588,67600,67604,67608,67620,67630,67646,67656,67660,67664,67678,67688,67698,67702,67706,67712,67726,67730,67734,67742,67752,67756,67760,67769,67779,67783,67791,67799,67803,67811,67825,67839,67851,67859,67898,67930,67962,67994,68026,68034,68042,68056,68090,68124,68158,68192,68226,68234,68242,68250,68255,68260,68279,68284,68304,68312,68317,68330,68351,68364,68368,68373,68378,68391,68411,68439,68443,68447,68451,68459,68467,68471],{"__ignoreMap":20},[25,67189,67190,67192,67194,67196],{"class":27,"line":28},[25,67191,51368],{"class":244},[25,67193,51372],{"class":51371},[25,67195,51375],{"class":31},[25,67197,51378],{"class":244},[25,67199,67200,67202,67204,67206,67208,67210],{"class":27,"line":39},[25,67201,1153],{"class":244},[25,67203,50706],{"class":51371},[25,67205,51387],{"class":31},[25,67207,290],{"class":244},[25,67209,51392],{"class":45},[25,67211,51378],{"class":244},[25,67213,67214],{"class":27,"line":51},[25,67215,2510],{"emptyLinePlaceholder":167},[25,67217,67218,67220,67222],{"class":27,"line":59},[25,67219,1153],{"class":244},[25,67221,51405],{"class":51371},[25,67223,51378],{"class":244},[25,67225,67226,67228,67230,67232,67234,67236],{"class":27,"line":67},[25,67227,52215],{"class":244},[25,67229,51415],{"class":51371},[25,67231,51418],{"class":31},[25,67233,290],{"class":244},[25,67235,51423],{"class":45},[25,67237,59198],{"class":244},[25,67239,67240,67242,67244,67246,67248,67250,67252,67254,67256],{"class":27,"line":75},[25,67241,52215],{"class":244},[25,67243,51415],{"class":51371},[25,67245,51434],{"class":31},[25,67247,290],{"class":244},[25,67249,51439],{"class":45},[25,67251,51442],{"class":31},[25,67253,290],{"class":244},[25,67255,51447],{"class":45},[25,67257,59198],{"class":244},[25,67259,67260,67262,67264,67266,67268,67270,67272,67274,67276],{"class":27,"line":83},[25,67261,52215],{"class":244},[25,67263,51415],{"class":51371},[25,67265,15030],{"class":31},[25,67267,290],{"class":244},[25,67269,51462],{"class":45},[25,67271,51442],{"class":31},[25,67273,290],{"class":244},[25,67275,51469],{"class":45},[25,67277,59198],{"class":244},[25,67279,67280,67282,67284,67286,67288],{"class":27,"line":91},[25,67281,52215],{"class":244},[25,67283,51478],{"class":51371},[25,67285,63696],{"class":244},[25,67287,51478],{"class":51371},[25,67289,51378],{"class":244},[25,67291,67292,67294,67296],{"class":27,"line":1429},[25,67293,52215],{"class":244},[25,67295,159],{"class":51371},[25,67297,51378],{"class":244},[25,67299,67300,67302],{"class":27,"line":1441},[25,67301,6513],{"class":51371},[25,67303,15682],{"class":244},[25,67305,67306,67308,67310,67312],{"class":27,"line":1723},[25,67307,54777],{"class":35},[25,67309,51508],{"class":244},[25,67311,434],{"class":35},[25,67313,1403],{"class":244},[25,67315,67316,67318,67320,67322],{"class":27,"line":1728},[25,67317,54766],{"class":35},[25,67319,51508],{"class":244},[25,67321,434],{"class":35},[25,67323,1403],{"class":244},[25,67325,67326],{"class":27,"line":1734},[25,67327,2297],{"class":244},[25,67329,67330],{"class":27,"line":1739},[25,67331,2510],{"emptyLinePlaceholder":167},[25,67333,67334,67336],{"class":27,"line":1753},[25,67335,63747],{"class":31},[25,67337,15682],{"class":244},[25,67339,67340,67342,67344,67346,67348],{"class":27,"line":1758},[25,67341,54842],{"class":35},[25,67343,51508],{"class":244},[25,67345,63758],{"class":35},[25,67347,51563],{"class":240},[25,67349,1403],{"class":244},[25,67351,67352,67354,67356,67358,67360],{"class":27,"line":1764},[25,67353,54856],{"class":35},[25,67355,51508],{"class":244},[25,67357,63771],{"class":35},[25,67359,51563],{"class":240},[25,67361,1403],{"class":244},[25,67363,67364,67366,67368,67370,67372],{"class":27,"line":1785},[25,67365,54777],{"class":35},[25,67367,51508],{"class":244},[25,67369,943],{"class":35},[25,67371,51563],{"class":240},[25,67373,1403],{"class":244},[25,67375,67376,67378,67380,67382,67384,67386,67388],{"class":27,"line":1790},[25,67377,62048],{"class":35},[25,67379,51508],{"class":244},[25,67381,460],{"class":35},[25,67383,51563],{"class":240},[25,67385,51592],{"class":35},[25,67387,62315],{"class":35},[25,67389,1403],{"class":244},[25,67391,67392],{"class":27,"line":1804},[25,67393,2297],{"class":244},[25,67395,67396],{"class":27,"line":1809},[25,67397,2510],{"emptyLinePlaceholder":167},[25,67399,67400,67402],{"class":27,"line":1838},[25,67401,63816],{"class":31},[25,67403,15682],{"class":244},[25,67405,67406,67408,67410,67412,67414],{"class":27,"line":1843},[25,67407,54842],{"class":35},[25,67409,51508],{"class":244},[25,67411,554],{"class":35},[25,67413,571],{"class":240},[25,67415,1403],{"class":244},[25,67417,67418,67420,67422,67424,67426],{"class":27,"line":1860},[25,67419,54856],{"class":35},[25,67421,51508],{"class":244},[25,67423,1150],{"class":35},[25,67425,51563],{"class":240},[25,67427,1403],{"class":244},[25,67429,67430,67432,67434,67436,67438],{"class":27,"line":1865},[25,67431,57430],{"class":35},[25,67433,51508],{"class":244},[25,67435,1150],{"class":35},[25,67437,51563],{"class":240},[25,67439,1403],{"class":244},[25,67441,67442,67444,67446,67448],{"class":27,"line":1870},[25,67443,55080],{"class":35},[25,67445,51508],{"class":244},[25,67447,51548],{"class":35},[25,67449,1403],{"class":244},[25,67451,67452,67454,67456,67458],{"class":27,"line":1875},[25,67453,55091],{"class":35},[25,67455,51508],{"class":244},[25,67457,51739],{"class":35},[25,67459,1403],{"class":244},[25,67461,67462],{"class":27,"line":1889},[25,67463,2297],{"class":244},[25,67465,67466],{"class":27,"line":1894},[25,67467,2510],{"emptyLinePlaceholder":167},[25,67469,67470,67472,67474],{"class":27,"line":2687},[25,67471,63816],{"class":31},[25,67473,63889],{"class":51371},[25,67475,15682],{"class":244},[25,67477,67478,67480,67482,67484,67486],{"class":27,"line":2701},[25,67479,54993],{"class":35},[25,67481,51508],{"class":244},[25,67483,1043],{"class":35},[25,67485,51563],{"class":240},[25,67487,1403],{"class":244},[25,67489,67490,67492,67494,67496],{"class":27,"line":2709},[25,67491,62405],{"class":35},[25,67493,51508],{"class":244},[25,67495,63912],{"class":35},[25,67497,1403],{"class":244},[25,67499,67500,67502,67504,67506,67508],{"class":27,"line":2714},[25,67501,62071],{"class":35},[25,67503,51508],{"class":244},[25,67505,943],{"class":35},[25,67507,51563],{"class":240},[25,67509,1403],{"class":244},[25,67511,67512],{"class":27,"line":2720},[25,67513,2297],{"class":244},[25,67515,67516],{"class":27,"line":2726},[25,67517,2510],{"emptyLinePlaceholder":167},[25,67519,67520,67522,67524],{"class":27,"line":2731},[25,67521,63816],{"class":31},[25,67523,61363],{"class":51371},[25,67525,15682],{"class":244},[25,67527,67528,67530,67532,67534],{"class":27,"line":8058},[25,67529,54803],{"class":35},[25,67531,51508],{"class":244},[25,67533,54808],{"class":35},[25,67535,1403],{"class":244},[25,67537,67538,67540,67542,67544],{"class":27,"line":8082},[25,67539,55080],{"class":35},[25,67541,51508],{"class":244},[25,67543,51548],{"class":35},[25,67545,1403],{"class":244},[25,67547,67548,67550,67552,67554],{"class":27,"line":8087},[25,67549,55091],{"class":35},[25,67551,51508],{"class":244},[25,67553,51651],{"class":35},[25,67555,1403],{"class":244},[25,67557,67558],{"class":27,"line":8093},[25,67559,2297],{"class":244},[25,67561,67562],{"class":27,"line":8120},[25,67563,2510],{"emptyLinePlaceholder":167},[25,67565,67566,67568,67570,67572],{"class":27,"line":8125},[25,67567,63816],{"class":31},[25,67569,61363],{"class":51371},[25,67571,55146],{"class":51371},[25,67573,15682],{"class":244},[25,67575,67576,67578,67580,67582,67584,67586],{"class":27,"line":8131},[25,67577,54777],{"class":35},[25,67579,51508],{"class":244},[25,67581,434],{"class":35},[25,67583,9060],{"class":35},[25,67585,51563],{"class":240},[25,67587,1403],{"class":244},[25,67589,67590,67592,67594,67596,67598],{"class":27,"line":8143},[25,67591,54993],{"class":35},[25,67593,51508],{"class":244},[25,67595,792],{"class":35},[25,67597,51563],{"class":240},[25,67599,1403],{"class":244},[25,67601,67602],{"class":27,"line":8155},[25,67603,2297],{"class":244},[25,67605,67606],{"class":27,"line":8167},[25,67607,2510],{"emptyLinePlaceholder":167},[25,67609,67610,67612,67614,67616,67618],{"class":27,"line":9826},[25,67611,63816],{"class":31},[25,67613,61363],{"class":51371},[25,67615,55146],{"class":51371},[25,67617,1510],{"class":51371},[25,67619,15682],{"class":244},[25,67621,67622,67624,67626,67628],{"class":27,"line":9851},[25,67623,64041],{"class":35},[25,67625,51508],{"class":244},[25,67627,54808],{"class":35},[25,67629,1403],{"class":244},[25,67631,67632,67634,67636,67638,67640,67642,67644],{"class":27,"line":9874},[25,67633,62303],{"class":35},[25,67635,51508],{"class":244},[25,67637,321],{"class":35},[25,67639,51563],{"class":240},[25,67641,51592],{"class":35},[25,67643,64062],{"class":35},[25,67645,1403],{"class":244},[25,67647,67648,67650,67652,67654],{"class":27,"line":9898},[25,67649,57487],{"class":35},[25,67651,51508],{"class":244},[25,67653,62440],{"class":35},[25,67655,1403],{"class":244},[25,67657,67658],{"class":27,"line":9903},[25,67659,2297],{"class":244},[25,67661,67662],{"class":27,"line":9908},[25,67663,2510],{"emptyLinePlaceholder":167},[25,67665,67666,67668,67670,67672,67674,67676],{"class":27,"line":9913},[25,67667,63816],{"class":31},[25,67669,61363],{"class":51371},[25,67671,55146],{"class":51371},[25,67673,1510],{"class":51371},[25,67675,64095],{"class":31},[25,67677,15682],{"class":244},[25,67679,67680,67682,67684,67686],{"class":27,"line":9922},[25,67681,61862],{"class":35},[25,67683,51508],{"class":244},[25,67685,64106],{"class":35},[25,67687,1403],{"class":244},[25,67689,67690,67692,67694,67696],{"class":27,"line":9927},[25,67691,57487],{"class":35},[25,67693,51508],{"class":244},[25,67695,64106],{"class":35},[25,67697,1403],{"class":244},[25,67699,67700],{"class":27,"line":9933},[25,67701,2297],{"class":244},[25,67703,67704],{"class":27,"line":9954},[25,67705,2510],{"emptyLinePlaceholder":167},[25,67707,67708,67710],{"class":27,"line":9960},[25,67709,64131],{"class":31},[25,67711,15682],{"class":244},[25,67713,67714,67716,67718,67720,67722,67724],{"class":27,"line":9974},[25,67715,54766],{"class":35},[25,67717,51508],{"class":244},[25,67719,434],{"class":35},[25,67721,64144],{"class":35},[25,67723,51563],{"class":240},[25,67725,1403],{"class":244},[25,67727,67728],{"class":27,"line":9980},[25,67729,2297],{"class":244},[25,67731,67732],{"class":27,"line":10007},[25,67733,2510],{"emptyLinePlaceholder":167},[25,67735,67736,67738,67740],{"class":27,"line":10016},[25,67737,64131],{"class":31},[25,67739,62245],{"class":31},[25,67741,15682],{"class":244},[25,67743,67744,67746,67748,67750],{"class":27,"line":10022},[25,67745,55080],{"class":35},[25,67747,51508],{"class":244},[25,67749,54808],{"class":35},[25,67751,1403],{"class":244},[25,67753,67754],{"class":27,"line":10030},[25,67755,2297],{"class":244},[25,67757,67758],{"class":27,"line":10035},[25,67759,2510],{"emptyLinePlaceholder":167},[25,67761,67762,67764,67767],{"class":27,"line":16714},[25,67763,64131],{"class":31},[25,67765,67766],{"class":31}," .active",[25,67768,15682],{"class":244},[25,67770,67771,67773,67775,67777],{"class":27,"line":16720},[25,67772,55080],{"class":35},[25,67774,51508],{"class":244},[25,67776,60940],{"class":35},[25,67778,1403],{"class":244},[25,67780,67781],{"class":27,"line":16743},[25,67782,2297],{"class":244},[25,67784,67785,67787,67789],{"class":27,"line":16749},[25,67786,52488],{"class":244},[25,67788,159],{"class":51371},[25,67790,51378],{"class":244},[25,67792,67793,67795,67797],{"class":27,"line":16772},[25,67794,51856],{"class":244},[25,67796,51405],{"class":51371},[25,67798,51378],{"class":244},[25,67800,67801],{"class":27,"line":16786},[25,67802,2510],{"emptyLinePlaceholder":167},[25,67804,67805,67807,67809],{"class":27,"line":16806},[25,67806,1153],{"class":244},[25,67808,51871],{"class":51371},[25,67810,51378],{"class":244},[25,67812,67813,67815,67817,67819,67821,67823],{"class":27,"line":16812},[25,67814,52215],{"class":244},[25,67816,51682],{"class":51371},[25,67818,53557],{"class":31},[25,67820,290],{"class":244},[25,67822,64246],{"class":45},[25,67824,51378],{"class":244},[25,67826,67827,67829,67831,67833,67835,67837],{"class":27,"line":16823},[25,67828,51412],{"class":244},[25,67830,51682],{"class":51371},[25,67832,53557],{"class":31},[25,67834,290],{"class":244},[25,67836,64261],{"class":45},[25,67838,51378],{"class":244},[25,67840,67841,67843,67845,67847,67849],{"class":27,"line":16846},[25,67842,55305],{"class":244},[25,67844,210],{"class":51371},[25,67846,64272],{"class":244},[25,67848,210],{"class":51371},[25,67850,51378],{"class":244},[25,67852,67853,67855,67857],{"class":27,"line":16868},[25,67854,55305],{"class":244},[25,67856,103],{"class":51371},[25,67858,51378],{"class":244},[25,67860,67861,67863,67865,67867,67869,67871,67873,67875,67877,67879,67881,67883,67885,67888,67890,67892,67894,67896],{"class":27,"line":16873},[25,67862,55373],{"class":244},[25,67864,106],{"class":51371},[25,67866,61123],{"class":244},[25,67868,481],{"class":51371},[25,67870,53557],{"class":31},[25,67872,290],{"class":244},[25,67874,59777],{"class":45},[25,67876,61128],{"class":31},[25,67878,290],{"class":244},[25,67880,64307],{"class":45},[25,67882,54022],{"class":31},[25,67884,290],{"class":244},[25,67886,67887],{"class":45},"\"0\"",[25,67889,64310],{"class":244},[25,67891,481],{"class":51371},[25,67893,55385],{"class":244},[25,67895,106],{"class":51371},[25,67897,51378],{"class":244},[25,67899,67900,67902,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928],{"class":27,"line":16879},[25,67901,55373],{"class":244},[25,67903,106],{"class":51371},[25,67905,61123],{"class":244},[25,67907,481],{"class":51371},[25,67909,61128],{"class":31},[25,67911,290],{"class":244},[25,67913,64307],{"class":45},[25,67915,54022],{"class":31},[25,67917,290],{"class":244},[25,67919,3788],{"class":45},[25,67921,64337],{"class":244},[25,67923,481],{"class":51371},[25,67925,55385],{"class":244},[25,67927,106],{"class":51371},[25,67929,51378],{"class":244},[25,67931,67932,67934,67936,67938,67940,67942,67944,67946,67948,67950,67952,67954,67956,67958,67960],{"class":27,"line":16893},[25,67933,55373],{"class":244},[25,67935,106],{"class":51371},[25,67937,61123],{"class":244},[25,67939,481],{"class":51371},[25,67941,61128],{"class":31},[25,67943,290],{"class":244},[25,67945,64307],{"class":45},[25,67947,54022],{"class":31},[25,67949,290],{"class":244},[25,67951,3811],{"class":45},[25,67953,64364],{"class":244},[25,67955,481],{"class":51371},[25,67957,55385],{"class":244},[25,67959,106],{"class":51371},[25,67961,51378],{"class":244},[25,67963,67964,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992],{"class":27,"line":16906},[25,67965,55373],{"class":244},[25,67967,106],{"class":51371},[25,67969,61123],{"class":244},[25,67971,481],{"class":51371},[25,67973,61128],{"class":31},[25,67975,290],{"class":244},[25,67977,64307],{"class":45},[25,67979,54022],{"class":31},[25,67981,290],{"class":244},[25,67983,3824],{"class":45},[25,67985,64391],{"class":244},[25,67987,481],{"class":51371},[25,67989,55385],{"class":244},[25,67991,106],{"class":51371},[25,67993,51378],{"class":244},[25,67995,67996,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024],{"class":27,"line":16911},[25,67997,55373],{"class":244},[25,67999,106],{"class":51371},[25,68001,61123],{"class":244},[25,68003,481],{"class":51371},[25,68005,61128],{"class":31},[25,68007,290],{"class":244},[25,68009,64307],{"class":45},[25,68011,54022],{"class":31},[25,68013,290],{"class":244},[25,68015,3837],{"class":45},[25,68017,64418],{"class":244},[25,68019,481],{"class":51371},[25,68021,55385],{"class":244},[25,68023,106],{"class":51371},[25,68025,51378],{"class":244},[25,68027,68028,68030,68032],{"class":27,"line":16925},[25,68029,55478],{"class":244},[25,68031,103],{"class":51371},[25,68033,51378],{"class":244},[25,68035,68036,68038,68040],{"class":27,"line":16930},[25,68037,51847],{"class":244},[25,68039,51682],{"class":51371},[25,68041,51378],{"class":244},[25,68043,68044,68046,68048,68050,68052,68054],{"class":27,"line":16936},[25,68045,51412],{"class":244},[25,68047,51682],{"class":51371},[25,68049,53557],{"class":31},[25,68051,290],{"class":244},[25,68053,64455],{"class":45},[25,68055,51378],{"class":244},[25,68057,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088],{"class":27,"line":16941},[25,68059,55305],{"class":244},[25,68061,51682],{"class":51371},[25,68063,53557],{"class":31},[25,68065,290],{"class":244},[25,68067,64470],{"class":45},[25,68069,61123],{"class":244},[25,68071,155],{"class":51371},[25,68073,55310],{"class":31},[25,68075,290],{"class":244},[25,68077,64481],{"class":45},[25,68079,55318],{"class":31},[25,68081,290],{"class":244},[25,68083,7762],{"class":45},[25,68085,64490],{"class":244},[25,68087,51682],{"class":51371},[25,68089,51378],{"class":244},[25,68091,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122],{"class":27,"line":16955},[25,68093,55305],{"class":244},[25,68095,51682],{"class":51371},[25,68097,53557],{"class":31},[25,68099,290],{"class":244},[25,68101,62694],{"class":45},[25,68103,61123],{"class":244},[25,68105,155],{"class":51371},[25,68107,55310],{"class":31},[25,68109,290],{"class":244},[25,68111,64517],{"class":45},[25,68113,55318],{"class":31},[25,68115,290],{"class":244},[25,68117,7762],{"class":45},[25,68119,64490],{"class":244},[25,68121,51682],{"class":51371},[25,68123,51378],{"class":244},[25,68125,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156],{"class":27,"line":16960},[25,68127,55305],{"class":244},[25,68129,51682],{"class":51371},[25,68131,53557],{"class":31},[25,68133,290],{"class":244},[25,68135,62694],{"class":45},[25,68137,61123],{"class":244},[25,68139,155],{"class":51371},[25,68141,55310],{"class":31},[25,68143,290],{"class":244},[25,68145,64552],{"class":45},[25,68147,55318],{"class":31},[25,68149,290],{"class":244},[25,68151,7762],{"class":45},[25,68153,64490],{"class":244},[25,68155,51682],{"class":51371},[25,68157,51378],{"class":244},[25,68159,68160,68162,68164,68166,68168,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190],{"class":27,"line":16965},[25,68161,55305],{"class":244},[25,68163,51682],{"class":51371},[25,68165,53557],{"class":31},[25,68167,290],{"class":244},[25,68169,62694],{"class":45},[25,68171,61123],{"class":244},[25,68173,155],{"class":51371},[25,68175,55310],{"class":31},[25,68177,290],{"class":244},[25,68179,64587],{"class":45},[25,68181,55318],{"class":31},[25,68183,290],{"class":244},[25,68185,7762],{"class":45},[25,68187,64490],{"class":244},[25,68189,51682],{"class":51371},[25,68191,51378],{"class":244},[25,68193,68194,68196,68198,68200,68202,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224],{"class":27,"line":16979},[25,68195,55305],{"class":244},[25,68197,51682],{"class":51371},[25,68199,53557],{"class":31},[25,68201,290],{"class":244},[25,68203,62694],{"class":45},[25,68205,61123],{"class":244},[25,68207,155],{"class":51371},[25,68209,55310],{"class":31},[25,68211,290],{"class":244},[25,68213,64622],{"class":45},[25,68215,55318],{"class":31},[25,68217,290],{"class":244},[25,68219,7762],{"class":45},[25,68221,64490],{"class":244},[25,68223,51682],{"class":51371},[25,68225,51378],{"class":244},[25,68227,68228,68230,68232],{"class":27,"line":16991},[25,68229,51847],{"class":244},[25,68231,51682],{"class":51371},[25,68233,51378],{"class":244},[25,68235,68236,68238,68240],{"class":27,"line":16996},[25,68237,52488],{"class":244},[25,68239,51682],{"class":51371},[25,68241,51378],{"class":244},[25,68243,68244,68246,68248],{"class":27,"line":17009},[25,68245,52215],{"class":244},[25,68247,51884],{"class":51371},[25,68249,51378],{"class":244},[25,68251,68252],{"class":27,"line":17014},[25,68253,68254],{"class":302},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[25,68256,68257],{"class":27,"line":17019},[25,68258,68259],{"class":302},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[25,68261,68262,68264,68266,68268,68270,68272,68274,68277],{"class":27,"line":17024},[25,68263,11331],{"class":240},[25,68265,61363],{"class":35},[25,68267,13674],{"class":240},[25,68269,54467],{"class":244},[25,68271,54470],{"class":31},[25,68273,245],{"class":244},[25,68275,68276],{"class":45},"'.tab-nav ul'",[25,68278,251],{"class":244},[25,68280,68281],{"class":27,"line":17037},[25,68282,68283],{"class":302},"    \u002F\u002F 2.添加事件\n",[25,68285,68286,68288,68290,68292,68294,68296,68298,68300,68302],{"class":27,"line":17042},[25,68287,67025],{"class":244},[25,68289,57884],{"class":31},[25,68291,245],{"class":244},[25,68293,57889],{"class":45},[25,68295,12545],{"class":244},[25,68297,54520],{"class":240},[25,68299,1769],{"class":244},[25,68301,318],{"class":5326},[25,68303,12552],{"class":244},[25,68305,68306,68308,68310],{"class":27,"line":32704},[25,68307,58315],{"class":244},[25,68309,67081],{"class":31},[25,68311,67084],{"class":244},[25,68313,68314],{"class":27,"line":32710},[25,68315,68316],{"class":302},"      \u002F\u002Fe.targer是我们点击的对象\n",[25,68318,68319,68321,68323,68325,68328],{"class":27,"line":32716},[25,68320,54551],{"class":240},[25,68322,67105],{"class":244},[25,68324,54557],{"class":240},[25,68326,68327],{"class":45}," 'A'",[25,68329,12552],{"class":244},[25,68331,68332,68334,68336,68338,68341,68343,68345,68347,68349],{"class":27,"line":32722},[25,68333,51996],{"class":244},[25,68335,54470],{"class":31},[25,68337,245],{"class":244},[25,68339,68340],{"class":45},"'.active'",[25,68342,57074],{"class":244},[25,68344,57077],{"class":31},[25,68346,245],{"class":244},[25,68348,64785],{"class":45},[25,68350,251],{"class":244},[25,68352,68353,68356,68358,68360,68362],{"class":27,"line":32728},[25,68354,68355],{"class":244},"        e.target.classList.",[25,68357,5444],{"class":31},[25,68359,245],{"class":244},[25,68361,64785],{"class":45},[25,68363,251],{"class":244},[25,68365,68366],{"class":27,"line":32739},[25,68367,2510],{"emptyLinePlaceholder":167},[25,68369,68370],{"class":27,"line":32745},[25,68371,68372],{"class":302},"        \u002F\u002F 下面大盒子模块\n",[25,68374,68375],{"class":27,"line":32765},[25,68376,68377],{"class":302},"        \u002F\u002F console.log(e.target.dataset.id)\n",[25,68379,68380,68382,68384,68386,68388],{"class":27,"line":32771},[25,68381,61341],{"class":240},[25,68383,3142],{"class":35},[25,68385,13674],{"class":240},[25,68387,45637],{"class":240},[25,68389,68390],{"class":244},"e.target.dataset.id\n",[25,68392,68393,68395,68397,68399,68401,68403,68405,68407,68409],{"class":27,"line":32782},[25,68394,51996],{"class":244},[25,68396,54470],{"class":31},[25,68398,245],{"class":244},[25,68400,64833],{"class":45},[25,68402,57074],{"class":244},[25,68404,57077],{"class":31},[25,68406,245],{"class":244},[25,68408,64785],{"class":45},[25,68410,251],{"class":244},[25,68412,68413,68415,68417,68419,68421,68423,68425,68427,68429,68431,68433,68435,68437],{"class":27,"line":32788},[25,68414,51996],{"class":244},[25,68416,54470],{"class":31},[25,68418,245],{"class":244},[25,68420,64859],{"class":45},[25,68422,684],{"class":244},[25,68424,45637],{"class":240},[25,68426,25225],{"class":35},[25,68428,57103],{"class":45},[25,68430,57074],{"class":244},[25,68432,5444],{"class":31},[25,68434,245],{"class":244},[25,68436,64785],{"class":45},[25,68438,251],{"class":244},[25,68440,68441],{"class":27,"line":32794},[25,68442,2510],{"emptyLinePlaceholder":167},[25,68444,68445],{"class":27,"line":32800},[25,68446,52469],{"class":244},[25,68448,68449],{"class":27,"line":32806},[25,68450,33532],{"class":244},[25,68452,68453,68455,68457],{"class":27,"line":32812},[25,68454,52488],{"class":244},[25,68456,51884],{"class":51371},[25,68458,51378],{"class":244},[25,68460,68461,68463,68465],{"class":27,"line":32818},[25,68462,51856],{"class":244},[25,68464,51871],{"class":51371},[25,68466,51378],{"class":244},[25,68468,68469],{"class":27,"line":32824},[25,68470,2510],{"emptyLinePlaceholder":167},[25,68472,68473,68475,68477],{"class":27,"line":32844},[25,68474,51856],{"class":244},[25,68476,50706],{"class":51371},[25,68478,51378],{"class":244},[210,68480,68482],{"id":68481},"_333-页面加载事件","3.3.3 页面加载事件",[194,68484,68485],{},[106,68486,68487],{},"load",[99,68489,68490],{},[155,68491],{"alt":20,"src":68492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[99,68494,68495],{},"window代表整个窗口，比document还要大",[99,68497,68498],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[99,68500,68501],{},"img.addEventListener('load', function () {",[99,68503,68504],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[99,68506,52535],{},[194,68508,68509],{"start":39},[106,68510,68511],{},"DOMContentLoaded",[99,68513,68514],{},[155,68515],{"alt":20,"src":68516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[99,68518,68519],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[210,68521,68523],{"id":68522},"_334-元素滚动事件","3.3.4 元素滚动事件",[99,68525,68526],{},[155,68527],{"alt":20,"src":68528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[99,68530,68531],{},[155,68532],{"alt":20,"src":68533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[99,68535,68536],{},[155,68537],{"alt":20,"src":68538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[99,68540,68541],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[99,68543,68544],{},"获得的是数字型数据，不带单位",[99,68546,68547],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[99,68549,68550],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[99,68552,68553],{},"它是通过document.documentElement来获取",[99,68555,68556],{},[155,68557],{"alt":20,"src":68558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[99,68560,68561],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[210,68563,68565],{"id":68564},"_335-页面缩放事件","3.3.5 页面缩放事件",[99,68567,68568],{},[155,68569],{"alt":20,"src":68570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[99,68572,68573],{},[155,68574],{"alt":20,"src":68575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[210,68577,68579],{"id":68578},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[99,68581,68582],{},[155,68583],{"alt":20,"src":68584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[99,68586,68587],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[99,68589,68590],{},[155,68591],{"alt":20,"src":68592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[99,68594,68595],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[99,68597,68598],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[99,68600,68601],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[99,68603,68604],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[99,68606,68607],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[99,68609,68610],{},[155,68611],{"alt":20,"src":68612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[99,68614,68615],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[99,68617,68618],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[99,68620,68621],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[99,68623,68624],{},"e.pageX-box.getBoundingClientRect()",[210,68626,68628],{"id":68627},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[99,68630,68631],{},[155,68632],{"alt":20,"src":68633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[99,68635,68636],{},"这个是相对于视口来说的，它是个方法，不是属性值",[210,68638,68640],{"id":68639},"_338-总结","3.3.8 总结",[99,68642,68643],{},[155,68644],{"alt":20,"src":68645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[99,68647,68648],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[99,68650,68651],{},"修改盒子的宽高只能通过width和height来实现",[210,68653,68655],{"id":68654},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[15,68657,68659],{"className":50704,"code":68658,"language":50706,"meta":20,"style":20},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[22,68660,68661,68666,68671,68676,68681],{"__ignoreMap":20},[25,68662,68663],{"class":27,"line":28},[25,68664,68665],{"class":244},"\u002F* 页面滑动 *\u002F\n",[25,68667,68668],{"class":27,"line":39},[25,68669,68670],{"class":244},"html {\n",[25,68672,68673],{"class":27,"line":51},[25,68674,68675],{"class":244},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[25,68677,68678],{"class":27,"line":59},[25,68679,68680],{"class":244},"  scroll-behavior: smooth;\n",[25,68682,68683],{"class":27,"line":67},[25,68684,1676],{"class":244},[99,68686,68687],{},"默认是auto",[210,68689,68691],{"id":68690},"_3310-日期对象","3.3.10 日期对象",[22108,68693,68695],{"id":68694},"_33101-实例化","3.3.10.1 实例化",[99,68697,68698],{},[155,68699],{"alt":20,"src":68700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22108,68702,68704],{"id":68703},"_33102-时期对象方法","3.3.10.2 时期对象方法",[99,68706,68707],{},[155,68708],{"alt":20,"src":68709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[99,68711,68712],{},"月份+1",[99,68714,68715],{},"老外认为第一天为0，星期天",[99,68717,68718],{},"方法使用的时候必须要跟括号",[99,68720,68721],{},"快速获得日期",[99,68723,68724],{},"\u002F\u002F 得到年月日",[99,68726,68727],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[99,68729,68730],{},"\u002F\u002F 得到当地日期",[99,68732,68733],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[99,68735,68736],{},"\u002F\u002F 得到当地时间",[99,68738,68739],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[99,68741,68742],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[99,68744,68745],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51884,68747,68748],{},"\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",[99,68750,68751],{},"学会去封装函数！",[22108,68753,68755],{"id":68754},"_33103-时间戳","3.3.10.3 时间戳",[99,68757,68758],{},[155,68759],{"alt":20,"src":68760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[99,68762,68763],{},[155,68764],{"alt":20,"src":68765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[99,68767,68768],{},"三种方法记住一个就可以",[210,68770,68772],{"id":68771},"_3311-节点操作","3.3.11 节点操作",[22108,68774,68776],{"id":68775},"_33111-dom节点","3.3.11.1 DOM节点",[99,68778,68779],{},[155,68780],{"alt":20,"src":68781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[99,68783,68784],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22108,68786,68788],{"id":68787},"_33112-查找节点","3.3.11.2 查找节点",[99,68790,68791],{},"前边的document.querySelector()是获取的元素",[99,68793,68794],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[99,68796,68797],{},[155,68798],{"alt":20,"src":68799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[194,68801,68802],{},[106,68803,68804],{},"父节点",[99,68806,68807],{},[155,68808],{"alt":20,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[194,68811,68812],{"start":39},[106,68813,68814],{},"子节点",[99,68816,68817],{},[155,68818],{"alt":20,"src":68819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[99,68821,68822],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[99,68824,68825],{},"children获得的是伪数组，是亲儿子",[194,68827,68828],{"start":51},[106,68829,68830],{},"兄弟节点",[99,68832,68833],{},[155,68834],{"alt":20,"src":68835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22108,68837,68839],{"id":68838},"_33113-增加节点","3.3.11.3 增加节点",[99,68841,68842],{},[155,68843],{"alt":20,"src":68844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[99,68846,68847],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[99,68849,68850],{},[155,68851],{"alt":20,"src":68852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[99,68854,68855],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[99,68857,68858],{},"下面是写法的部分展示，就按照下边的格式来写",[99,68860,68861],{},"例：",[51884,68863,68864],{},"\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",[99,68866,68867],{},[155,68868],{"alt":20,"src":68869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[99,68871,68872],{},"false只克隆标签，里边的内容不会克隆过来",[15,68874,68876],{"className":50704,"code":68875,"language":50706,"meta":20,"style":20},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[22,68877,68878],{"__ignoreMap":20},[25,68879,68880],{"class":27,"line":28},[25,68881,68875],{"class":244},[22108,68883,68885],{"id":68884},"_33114-删除节点","3.3.11.4 删除节点",[99,68887,68888],{},[155,68889],{"alt":20,"src":68890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[99,68892,68893],{},"父亲删儿子",[99,68895,68896],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[210,68898,68900],{"id":68899},"_3312-m端事件","3.3.12 M端事件",[99,68902,68903],{},"M端就是移动端",[99,68905,68906],{},[155,68907],{"alt":20,"src":68908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[210,68910,68912],{"id":68911},"_3313-插件","3.3.13 插件",[99,68914,68915],{},"要熟悉官网！！！",[99,68917,68918],{},[481,68919,68920],{"href":68920,"rel":68921},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23973],[99,68923,68924],{},[481,68925,68926],{"href":68926,"rel":68927},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23973],[210,68929,68931],{"id":68930},"_3314-学生信息表","3.3.14 学生信息表",[194,68933,68934,68937,68940,68943,68946,68949,68952,68955],{},[106,68935,68936],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[106,68938,68939],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[106,68941,68942],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[106,68944,68945],{},"用好表单元素自带的属性，value,name等",[106,68947,68948],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[106,68950,68951],{},"不要忘记事件对象",[106,68953,68954],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[106,68956,68957],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[99,68959,68960],{},"结构：",[15,68962,68964],{"className":50704,"code":68963,"language":50706,"meta":20,"style":20},"\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",[22,68965,68966,68976,68990,68994,69002,69016,69036,69057,69070,69094,69102,69106,69114,69127,69148,69176,69204,69209,69231,69251,69270,69278,69306,69328,69348,69368,69388,69408,69428,69436,69456,69464,69468,69481,69489,69497,69505,69518,69531,69544,69557,69570,69583,69596,69604,69612,69620,69625,69630,69635,69640,69645,69650,69655,69660,69665,69670,69675,69680,69685,69693,69701,69709,69713,69733,69752,69772,69792,69812,69832,69836,69841,69861,69866,69876,69881,69886,69906,69928,69933,69943,69947,69951,69956,69961,69990,70004,70019,70023,70027,70031,70036,70047,70060,70065,70070,70075,70080,70085,70089,70094,70099,70108,70113,70118,70130,70135,70142,70146,70151,70161,70166,70176,70181,70209,70230,70240,70260,70278,70295,70312,70329,70346,70350,70360,70365,70370,70375,70386,70390,70394,70398,70403,70408,70429,70441,70446,70451,70456,70470,70475,70482,70486,70490,70498,70502,70510,70514],{"__ignoreMap":20},[25,68967,68968,68970,68972,68974],{"class":27,"line":28},[25,68969,51368],{"class":244},[25,68971,51372],{"class":51371},[25,68973,51375],{"class":31},[25,68975,51378],{"class":244},[25,68977,68978,68980,68982,68984,68986,68988],{"class":27,"line":39},[25,68979,1153],{"class":244},[25,68981,50706],{"class":51371},[25,68983,51387],{"class":31},[25,68985,290],{"class":244},[25,68987,51392],{"class":45},[25,68989,51378],{"class":244},[25,68991,68992],{"class":27,"line":51},[25,68993,2510],{"emptyLinePlaceholder":167},[25,68995,68996,68998,69000],{"class":27,"line":59},[25,68997,1153],{"class":244},[25,68999,51405],{"class":51371},[25,69001,51378],{"class":244},[25,69003,69004,69006,69008,69010,69012,69014],{"class":27,"line":67},[25,69005,52215],{"class":244},[25,69007,51415],{"class":51371},[25,69009,51418],{"class":31},[25,69011,290],{"class":244},[25,69013,51423],{"class":45},[25,69015,59198],{"class":244},[25,69017,69018,69020,69022,69024,69026,69028,69030,69032,69034],{"class":27,"line":75},[25,69019,52215],{"class":244},[25,69021,51415],{"class":51371},[25,69023,15030],{"class":31},[25,69025,290],{"class":244},[25,69027,51462],{"class":45},[25,69029,51442],{"class":31},[25,69031,290],{"class":244},[25,69033,51469],{"class":45},[25,69035,59198],{"class":244},[25,69037,69038,69040,69042,69044,69046,69048,69050,69052,69055],{"class":27,"line":83},[25,69039,52215],{"class":244},[25,69041,51415],{"class":51371},[25,69043,51434],{"class":31},[25,69045,290],{"class":244},[25,69047,51439],{"class":45},[25,69049,51442],{"class":31},[25,69051,290],{"class":244},[25,69053,69054],{"class":45},"\"ie=edge\"",[25,69056,59198],{"class":244},[25,69058,69059,69061,69063,69066,69068],{"class":27,"line":91},[25,69060,52215],{"class":244},[25,69062,51478],{"class":51371},[25,69064,69065],{"class":244},">学生信息管理\u003C\u002F",[25,69067,51478],{"class":51371},[25,69069,51378],{"class":244},[25,69071,69072,69074,69077,69080,69082,69085,69087,69089,69092],{"class":27,"line":1429},[25,69073,52215],{"class":244},[25,69075,69076],{"class":51371},"link",[25,69078,69079],{"class":31}," rel",[25,69081,290],{"class":244},[25,69083,69084],{"class":45},"\"stylesheet\"",[25,69086,61128],{"class":31},[25,69088,290],{"class":244},[25,69090,69091],{"class":45},"\"css\u002Findex.css\"",[25,69093,59198],{"class":244},[25,69095,69096,69098,69100],{"class":27,"line":1441},[25,69097,51856],{"class":244},[25,69099,51405],{"class":51371},[25,69101,51378],{"class":244},[25,69103,69104],{"class":27,"line":1723},[25,69105,2510],{"emptyLinePlaceholder":167},[25,69107,69108,69110,69112],{"class":27,"line":1728},[25,69109,1153],{"class":244},[25,69111,51871],{"class":51371},[25,69113,51378],{"class":244},[25,69115,69116,69118,69120,69123,69125],{"class":27,"line":1734},[25,69117,52215],{"class":244},[25,69119,10],{"class":51371},[25,69121,69122],{"class":244},">新增学员\u003C\u002F",[25,69124,10],{"class":51371},[25,69126,51378],{"class":244},[25,69128,69129,69131,69133,69135,69137,69139,69142,69144,69146],{"class":27,"line":1739},[25,69130,52215],{"class":244},[25,69132,66696],{"class":51371},[25,69134,53557],{"class":31},[25,69136,290],{"class":244},[25,69138,62735],{"class":45},[25,69140,69141],{"class":31}," autocomplete",[25,69143,290],{"class":244},[25,69145,31847],{"class":45},[25,69147,51378],{"class":244},[25,69149,69150,69153,69155,69157,69159,69161,69163,69165,69168,69170,69172,69174],{"class":27,"line":1753},[25,69151,69152],{"class":244},"    姓名：\u003C",[25,69154,53892],{"class":51371},[25,69156,53895],{"class":31},[25,69158,290],{"class":244},[25,69160,62770],{"class":45},[25,69162,53557],{"class":31},[25,69164,290],{"class":244},[25,69166,69167],{"class":45},"\"uname\"",[25,69169,15030],{"class":31},[25,69171,290],{"class":244},[25,69173,69167],{"class":45},[25,69175,59198],{"class":244},[25,69177,69178,69181,69183,69185,69187,69189,69191,69193,69196,69198,69200,69202],{"class":27,"line":1758},[25,69179,69180],{"class":244},"    年龄：\u003C",[25,69182,53892],{"class":51371},[25,69184,53895],{"class":31},[25,69186,290],{"class":244},[25,69188,62770],{"class":45},[25,69190,53557],{"class":31},[25,69192,290],{"class":244},[25,69194,69195],{"class":45},"\"age\"",[25,69197,15030],{"class":31},[25,69199,290],{"class":244},[25,69201,69195],{"class":45},[25,69203,59198],{"class":244},[25,69205,69206],{"class":27,"line":1764},[25,69207,69208],{"class":244},"    性别:\n",[25,69210,69211,69213,69216,69218,69220,69223,69225,69227,69229],{"class":27,"line":1785},[25,69212,51412],{"class":244},[25,69214,69215],{"class":51371},"select",[25,69217,15030],{"class":31},[25,69219,290],{"class":244},[25,69221,69222],{"class":45},"\"gender\"",[25,69224,53557],{"class":31},[25,69226,290],{"class":244},[25,69228,69222],{"class":45},[25,69230,51378],{"class":244},[25,69232,69233,69235,69238,69240,69242,69244,69247,69249],{"class":27,"line":1790},[25,69234,55305],{"class":244},[25,69236,69237],{"class":51371},"option",[25,69239,66722],{"class":31},[25,69241,290],{"class":244},[25,69243,10071],{"class":45},[25,69245,69246],{"class":244},">男\u003C\u002F",[25,69248,69237],{"class":51371},[25,69250,51378],{"class":244},[25,69252,69253,69255,69257,69259,69261,69263,69266,69268],{"class":27,"line":1804},[25,69254,55305],{"class":244},[25,69256,69237],{"class":51371},[25,69258,66722],{"class":31},[25,69260,290],{"class":244},[25,69262,10140],{"class":45},[25,69264,69265],{"class":244},">女\u003C\u002F",[25,69267,69237],{"class":51371},[25,69269,51378],{"class":244},[25,69271,69272,69274,69276],{"class":27,"line":1809},[25,69273,51847],{"class":244},[25,69275,69215],{"class":51371},[25,69277,51378],{"class":244},[25,69279,69280,69283,69285,69287,69289,69291,69293,69295,69298,69300,69302,69304],{"class":27,"line":1838},[25,69281,69282],{"class":244},"    薪资：\u003C",[25,69284,53892],{"class":51371},[25,69286,53895],{"class":31},[25,69288,290],{"class":244},[25,69290,62770],{"class":45},[25,69292,53557],{"class":31},[25,69294,290],{"class":244},[25,69296,69297],{"class":45},"\"salary\"",[25,69299,15030],{"class":31},[25,69301,290],{"class":244},[25,69303,69297],{"class":45},[25,69305,59198],{"class":244},[25,69307,69308,69311,69313,69315,69317,69320,69322,69324,69326],{"class":27,"line":1843},[25,69309,69310],{"class":244},"    就业城市：\u003C",[25,69312,69215],{"class":51371},[25,69314,15030],{"class":31},[25,69316,290],{"class":244},[25,69318,69319],{"class":45},"\"city\"",[25,69321,53557],{"class":31},[25,69323,290],{"class":244},[25,69325,69319],{"class":45},[25,69327,51378],{"class":244},[25,69329,69330,69332,69334,69336,69338,69341,69344,69346],{"class":27,"line":1860},[25,69331,55305],{"class":244},[25,69333,69237],{"class":51371},[25,69335,66722],{"class":31},[25,69337,290],{"class":244},[25,69339,69340],{"class":45},"\"北京\"",[25,69342,69343],{"class":244},">北京\u003C\u002F",[25,69345,69237],{"class":51371},[25,69347,51378],{"class":244},[25,69349,69350,69352,69354,69356,69358,69361,69364,69366],{"class":27,"line":1865},[25,69351,55305],{"class":244},[25,69353,69237],{"class":51371},[25,69355,66722],{"class":31},[25,69357,290],{"class":244},[25,69359,69360],{"class":45},"\"上海\"",[25,69362,69363],{"class":244},">上海\u003C\u002F",[25,69365,69237],{"class":51371},[25,69367,51378],{"class":244},[25,69369,69370,69372,69374,69376,69378,69381,69384,69386],{"class":27,"line":1870},[25,69371,55305],{"class":244},[25,69373,69237],{"class":51371},[25,69375,66722],{"class":31},[25,69377,290],{"class":244},[25,69379,69380],{"class":45},"\"广州\"",[25,69382,69383],{"class":244},">广州\u003C\u002F",[25,69385,69237],{"class":51371},[25,69387,51378],{"class":244},[25,69389,69390,69392,69394,69396,69398,69401,69404,69406],{"class":27,"line":1875},[25,69391,55305],{"class":244},[25,69393,69237],{"class":51371},[25,69395,66722],{"class":31},[25,69397,290],{"class":244},[25,69399,69400],{"class":45},"\"深圳\"",[25,69402,69403],{"class":244},">深圳\u003C\u002F",[25,69405,69237],{"class":51371},[25,69407,51378],{"class":244},[25,69409,69410,69412,69414,69416,69418,69421,69424,69426],{"class":27,"line":1889},[25,69411,55305],{"class":244},[25,69413,69237],{"class":51371},[25,69415,66722],{"class":31},[25,69417,290],{"class":244},[25,69419,69420],{"class":45},"\"曹县\"",[25,69422,69423],{"class":244},">曹县\u003C\u002F",[25,69425,69237],{"class":51371},[25,69427,51378],{"class":244},[25,69429,69430,69432,69434],{"class":27,"line":1894},[25,69431,51847],{"class":244},[25,69433,69215],{"class":51371},[25,69435,51378],{"class":244},[25,69437,69438,69440,69442,69444,69446,69449,69452,69454],{"class":27,"line":2687},[25,69439,51412],{"class":244},[25,69441,53958],{"class":51371},[25,69443,53557],{"class":31},[25,69445,290],{"class":244},[25,69447,69448],{"class":45},"\"add\"",[25,69450,69451],{"class":244},">录入\u003C\u002F",[25,69453,53958],{"class":51371},[25,69455,51378],{"class":244},[25,69457,69458,69460,69462],{"class":27,"line":2701},[25,69459,52488],{"class":244},[25,69461,66696],{"class":51371},[25,69463,51378],{"class":244},[25,69465,69466],{"class":27,"line":2709},[25,69467,2510],{"emptyLinePlaceholder":167},[25,69469,69470,69472,69474,69477,69479],{"class":27,"line":2714},[25,69471,52215],{"class":244},[25,69473,10],{"class":51371},[25,69475,69476],{"class":244},">就业榜\u003C\u002F",[25,69478,10],{"class":51371},[25,69480,51378],{"class":244},[25,69482,69483,69485,69487],{"class":27,"line":2720},[25,69484,52215],{"class":244},[25,69486,380],{"class":51371},[25,69488,51378],{"class":244},[25,69490,69491,69493,69495],{"class":27,"line":2726},[25,69492,51412],{"class":244},[25,69494,383],{"class":51371},[25,69496,51378],{"class":244},[25,69498,69499,69501,69503],{"class":27,"line":2731},[25,69500,55305],{"class":244},[25,69502,386],{"class":51371},[25,69504,51378],{"class":244},[25,69506,69507,69509,69511,69514,69516],{"class":27,"line":8058},[25,69508,55373],{"class":244},[25,69510,389],{"class":51371},[25,69512,69513],{"class":244},">序号\u003C\u002F",[25,69515,389],{"class":51371},[25,69517,51378],{"class":244},[25,69519,69520,69522,69524,69527,69529],{"class":27,"line":8082},[25,69521,55373],{"class":244},[25,69523,389],{"class":51371},[25,69525,69526],{"class":244},">姓名\u003C\u002F",[25,69528,389],{"class":51371},[25,69530,51378],{"class":244},[25,69532,69533,69535,69537,69540,69542],{"class":27,"line":8087},[25,69534,55373],{"class":244},[25,69536,389],{"class":51371},[25,69538,69539],{"class":244},">年龄\u003C\u002F",[25,69541,389],{"class":51371},[25,69543,51378],{"class":244},[25,69545,69546,69548,69550,69553,69555],{"class":27,"line":8093},[25,69547,55373],{"class":244},[25,69549,389],{"class":51371},[25,69551,69552],{"class":244},">性别\u003C\u002F",[25,69554,389],{"class":51371},[25,69556,51378],{"class":244},[25,69558,69559,69561,69563,69566,69568],{"class":27,"line":8120},[25,69560,55373],{"class":244},[25,69562,389],{"class":51371},[25,69564,69565],{"class":244},">薪资\u003C\u002F",[25,69567,389],{"class":51371},[25,69569,51378],{"class":244},[25,69571,69572,69574,69576,69579,69581],{"class":27,"line":8125},[25,69573,55373],{"class":244},[25,69575,389],{"class":51371},[25,69577,69578],{"class":244},">就业城市\u003C\u002F",[25,69580,389],{"class":51371},[25,69582,51378],{"class":244},[25,69584,69585,69587,69589,69592,69594],{"class":27,"line":8131},[25,69586,55373],{"class":244},[25,69588,389],{"class":51371},[25,69590,69591],{"class":244},">操作\u003C\u002F",[25,69593,389],{"class":51371},[25,69595,51378],{"class":244},[25,69597,69598,69600,69602],{"class":27,"line":8143},[25,69599,55478],{"class":244},[25,69601,386],{"class":51371},[25,69603,51378],{"class":244},[25,69605,69606,69608,69610],{"class":27,"line":8155},[25,69607,51847],{"class":244},[25,69609,383],{"class":51371},[25,69611,51378],{"class":244},[25,69613,69614,69616,69618],{"class":27,"line":8167},[25,69615,51412],{"class":244},[25,69617,427],{"class":51371},[25,69619,51378],{"class":244},[25,69621,69622],{"class":27,"line":9826},[25,69623,69624],{"class":302},"      \u003C!-- \n",[25,69626,69627],{"class":27,"line":9851},[25,69628,69629],{"class":302},"        \u003Ctr>\n",[25,69631,69632],{"class":27,"line":9874},[25,69633,69634],{"class":302},"          \u003Ctd>1001\u003C\u002Ftd>\n",[25,69636,69637],{"class":27,"line":9898},[25,69638,69639],{"class":302},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[25,69641,69642],{"class":27,"line":9903},[25,69643,69644],{"class":302},"          \u003Ctd>19\u003C\u002Ftd>\n",[25,69646,69647],{"class":27,"line":9908},[25,69648,69649],{"class":302},"          \u003Ctd>男\u003C\u002Ftd>\n",[25,69651,69652],{"class":27,"line":9913},[25,69653,69654],{"class":302},"          \u003Ctd>15000\u003C\u002Ftd>\n",[25,69656,69657],{"class":27,"line":9922},[25,69658,69659],{"class":302},"          \u003Ctd>上海\u003C\u002Ftd>\n",[25,69661,69662],{"class":27,"line":9927},[25,69663,69664],{"class":302},"          \u003Ctd>\n",[25,69666,69667],{"class":27,"line":9933},[25,69668,69669],{"class":302},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[25,69671,69672],{"class":27,"line":9954},[25,69673,69674],{"class":302},"          \u003C\u002Ftd>\n",[25,69676,69677],{"class":27,"line":9960},[25,69678,69679],{"class":302},"        \u003C\u002Ftr> \n",[25,69681,69682],{"class":27,"line":9974},[25,69683,69684],{"class":302},"        -->\n",[25,69686,69687,69689,69691],{"class":27,"line":9980},[25,69688,51847],{"class":244},[25,69690,427],{"class":51371},[25,69692,51378],{"class":244},[25,69694,69695,69697,69699],{"class":27,"line":10007},[25,69696,52488],{"class":244},[25,69698,380],{"class":51371},[25,69700,51378],{"class":244},[25,69702,69703,69705,69707],{"class":27,"line":10016},[25,69704,52215],{"class":244},[25,69706,51884],{"class":51371},[25,69708,51378],{"class":244},[25,69710,69711],{"class":27,"line":10022},[25,69712,60029],{"class":302},[25,69714,69715,69717,69720,69722,69724,69726,69728,69731],{"class":27,"line":10030},[25,69716,11331],{"class":240},[25,69718,69719],{"class":35}," uname",[25,69721,13674],{"class":240},[25,69723,54467],{"class":244},[25,69725,54470],{"class":31},[25,69727,245],{"class":244},[25,69729,69730],{"class":45},"'.uname'",[25,69732,251],{"class":244},[25,69734,69735,69737,69739,69741,69743,69745,69747,69750],{"class":27,"line":10035},[25,69736,11331],{"class":240},[25,69738,15799],{"class":35},[25,69740,13674],{"class":240},[25,69742,54467],{"class":244},[25,69744,54470],{"class":31},[25,69746,245],{"class":244},[25,69748,69749],{"class":45},"'.age'",[25,69751,251],{"class":244},[25,69753,69754,69756,69759,69761,69763,69765,69767,69770],{"class":27,"line":16714},[25,69755,11331],{"class":240},[25,69757,69758],{"class":35}," gender",[25,69760,13674],{"class":240},[25,69762,54467],{"class":244},[25,69764,54470],{"class":31},[25,69766,245],{"class":244},[25,69768,69769],{"class":45},"'.gender'",[25,69771,251],{"class":244},[25,69773,69774,69776,69779,69781,69783,69785,69787,69790],{"class":27,"line":16720},[25,69775,11331],{"class":240},[25,69777,69778],{"class":35}," salary",[25,69780,13674],{"class":240},[25,69782,54467],{"class":244},[25,69784,54470],{"class":31},[25,69786,245],{"class":244},[25,69788,69789],{"class":45},"'.salary'",[25,69791,251],{"class":244},[25,69793,69794,69796,69799,69801,69803,69805,69807,69810],{"class":27,"line":16743},[25,69795,11331],{"class":240},[25,69797,69798],{"class":35}," city",[25,69800,13674],{"class":240},[25,69802,54467],{"class":244},[25,69804,54470],{"class":31},[25,69806,245],{"class":244},[25,69808,69809],{"class":45},"'.city'",[25,69811,251],{"class":244},[25,69813,69814,69816,69819,69821,69823,69825,69827,69830],{"class":27,"line":16749},[25,69815,11331],{"class":240},[25,69817,69818],{"class":35}," tbody",[25,69820,13674],{"class":240},[25,69822,54467],{"class":244},[25,69824,54470],{"class":31},[25,69826,245],{"class":244},[25,69828,69829],{"class":45},"'tbody'",[25,69831,251],{"class":244},[25,69833,69834],{"class":27,"line":16772},[25,69835,2510],{"emptyLinePlaceholder":167},[25,69837,69838],{"class":27,"line":16786},[25,69839,69840],{"class":302},"    \u002F\u002F 获取所有带有name属性的元素\n",[25,69842,69843,69845,69848,69850,69852,69854,69856,69859],{"class":27,"line":16806},[25,69844,11331],{"class":240},[25,69846,69847],{"class":35}," items",[25,69849,13674],{"class":240},[25,69851,54467],{"class":244},[25,69853,55752],{"class":31},[25,69855,245],{"class":244},[25,69857,69858],{"class":45},"'[name]'",[25,69860,251],{"class":244},[25,69862,69863],{"class":27,"line":16812},[25,69864,69865],{"class":302},"    \u002F\u002F 声明一个空的数组\n",[25,69867,69868,69870,69872,69874],{"class":27,"line":16823},[25,69869,11331],{"class":240},[25,69871,57766],{"class":35},[25,69873,13674],{"class":240},[25,69875,51909],{"class":244},[25,69877,69878],{"class":27,"line":16846},[25,69879,69880],{"class":302},"    \u002F\u002F 1.录入模块\n",[25,69882,69883],{"class":27,"line":16868},[25,69884,69885],{"class":302},"    \u002F\u002F 1.1这是一个表单提交事件\n",[25,69887,69888,69890,69893,69895,69897,69899,69901,69904],{"class":27,"line":16873},[25,69889,11331],{"class":240},[25,69891,69892],{"class":35}," info",[25,69894,13674],{"class":240},[25,69896,54467],{"class":244},[25,69898,54470],{"class":31},[25,69900,245],{"class":244},[25,69902,69903],{"class":45},"'.info'",[25,69905,251],{"class":244},[25,69907,69908,69911,69913,69915,69918,69920,69922,69924,69926],{"class":27,"line":16879},[25,69909,69910],{"class":244},"    info.",[25,69912,57884],{"class":31},[25,69914,245],{"class":244},[25,69916,69917],{"class":45},"'submit'",[25,69919,12545],{"class":244},[25,69921,54520],{"class":240},[25,69923,1769],{"class":244},[25,69925,318],{"class":5326},[25,69927,12552],{"class":244},[25,69929,69930],{"class":27,"line":16893},[25,69931,69932],{"class":302},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[25,69934,69935,69938,69941],{"class":27,"line":16906},[25,69936,69937],{"class":244},"      e.",[25,69939,69940],{"class":31},"preventDefault",[25,69942,2086],{"class":244},[25,69944,69945],{"class":27,"line":16911},[25,69946,60083],{"class":302},[25,69948,69949],{"class":27,"line":16925},[25,69950,2510],{"emptyLinePlaceholder":167},[25,69952,69953],{"class":27,"line":16930},[25,69954,69955],{"class":302},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[25,69957,69958],{"class":27,"line":16936},[25,69959,69960],{"class":302},"      \u002F\u002F 先遍历循环\n",[25,69962,69963,69965,69967,69969,69971,69973,69975,69977,69979,69982,69984,69986,69988],{"class":27,"line":16941},[25,69964,52355],{"class":240},[25,69966,1769],{"class":244},[25,69968,51918],{"class":240},[25,69970,9548],{"class":244},[25,69972,290],{"class":240},[25,69974,4203],{"class":35},[25,69976,9555],{"class":244},[25,69978,1153],{"class":240},[25,69980,69981],{"class":244}," items.",[25,69983,52039],{"class":35},[25,69985,3324],{"class":244},[25,69987,2402],{"class":240},[25,69989,12552],{"class":244},[25,69991,69992,69994,69997,69999,70002],{"class":27,"line":16955},[25,69993,2607],{"class":240},[25,69995,69996],{"class":244}," (items[i].value ",[25,69998,54557],{"class":240},[25,70000,70001],{"class":45}," ''",[25,70003,12552],{"class":244},[25,70005,70006,70009,70012,70014,70017],{"class":27,"line":16960},[25,70007,70008],{"class":240},"          return",[25,70010,70011],{"class":31}," alert",[25,70013,245],{"class":244},[25,70015,70016],{"class":45},"'输入内容不能为空'",[25,70018,251],{"class":244},[25,70020,70021],{"class":27,"line":16965},[25,70022,2639],{"class":244},[25,70024,70025],{"class":27,"line":16979},[25,70026,52469],{"class":244},[25,70028,70029],{"class":27,"line":16991},[25,70030,2510],{"emptyLinePlaceholder":167},[25,70032,70033],{"class":27,"line":16996},[25,70034,70035],{"class":302},"      \u002F\u002F 创建新的对象\n",[25,70037,70038,70040,70043,70045],{"class":27,"line":17009},[25,70039,58299],{"class":240},[25,70041,70042],{"class":35}," obj",[25,70044,13674],{"class":240},[25,70046,15682],{"class":244},[25,70048,70049,70052,70054,70056,70058],{"class":27,"line":17014},[25,70050,70051],{"class":244},"        stuID: arr.",[25,70053,52039],{"class":35},[25,70055,45637],{"class":240},[25,70057,25225],{"class":35},[25,70059,31537],{"class":244},[25,70061,70062],{"class":27,"line":17019},[25,70063,70064],{"class":244},"        uname: uname.value,\n",[25,70066,70067],{"class":27,"line":17024},[25,70068,70069],{"class":244},"        age: age.value,\n",[25,70071,70072],{"class":27,"line":17037},[25,70073,70074],{"class":244},"        gender: gender.value,\n",[25,70076,70077],{"class":27,"line":17042},[25,70078,70079],{"class":244},"        salary: salary.value,\n",[25,70081,70082],{"class":27,"line":32704},[25,70083,70084],{"class":244},"        city: city.value\n",[25,70086,70087],{"class":27,"line":32710},[25,70088,52469],{"class":244},[25,70090,70091],{"class":27,"line":32716},[25,70092,70093],{"class":302},"      \u002F\u002F console.log(obj);\n",[25,70095,70096],{"class":27,"line":32722},[25,70097,70098],{"class":302},"      \u002F\u002F 追加到数组里面\n",[25,70100,70101,70103,70105],{"class":27,"line":32728},[25,70102,58078],{"class":244},[25,70104,51955],{"class":31},[25,70106,70107],{"class":244},"(obj)\n",[25,70109,70110],{"class":27,"line":32739},[25,70111,70112],{"class":302},"      \u002F\u002F console.log(arr);\n",[25,70114,70115],{"class":27,"line":32745},[25,70116,70117],{"class":302},"      \u002F\u002F 清空表单  reset重置表单\n",[25,70119,70120,70123,70125,70128],{"class":27,"line":32765},[25,70121,70122],{"class":35},"      this",[25,70124,801],{"class":244},[25,70126,70127],{"class":31},"reset",[25,70129,2086],{"class":244},[25,70131,70132],{"class":27,"line":32771},[25,70133,70134],{"class":302},"      \u002F\u002F 调用渲染函数\n",[25,70136,70137,70140],{"class":27,"line":32782},[25,70138,70139],{"class":31},"      render",[25,70141,2086],{"class":244},[25,70143,70144],{"class":27,"line":32788},[25,70145,33532],{"class":244},[25,70147,70148],{"class":27,"line":32794},[25,70149,70150],{"class":302},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[25,70152,70153,70156,70159],{"class":27,"line":32800},[25,70154,70155],{"class":240},"    function",[25,70157,70158],{"class":31}," render",[25,70160,10963],{"class":244},[25,70162,70163],{"class":27,"line":32806},[25,70164,70165],{"class":302},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[25,70167,70168,70171,70173],{"class":27,"line":32812},[25,70169,70170],{"class":244},"      tbody.innerHTML ",[25,70172,290],{"class":240},[25,70174,70175],{"class":45}," ''\n",[25,70177,70178],{"class":27,"line":32818},[25,70179,70180],{"class":302},"      \u002F\u002F 遍历数组\n",[25,70182,70183,70185,70187,70189,70191,70193,70195,70197,70199,70201,70203,70205,70207],{"class":27,"line":32824},[25,70184,52355],{"class":240},[25,70186,1769],{"class":244},[25,70188,51918],{"class":240},[25,70190,9548],{"class":244},[25,70192,290],{"class":240},[25,70194,4203],{"class":35},[25,70196,9555],{"class":244},[25,70198,1153],{"class":240},[25,70200,52036],{"class":244},[25,70202,52039],{"class":35},[25,70204,3324],{"class":244},[25,70206,2402],{"class":240},[25,70208,12552],{"class":244},[25,70210,70211,70213,70216,70218,70220,70223,70225,70228],{"class":27,"line":32844},[25,70212,61341],{"class":240},[25,70214,70215],{"class":35}," tr",[25,70217,13674],{"class":240},[25,70219,54467],{"class":244},[25,70221,70222],{"class":31},"createElement",[25,70224,245],{"class":244},[25,70226,70227],{"class":45},"'tr'",[25,70229,251],{"class":244},[25,70231,70232,70235,70237],{"class":27,"line":32850},[25,70233,70234],{"class":244},"        tr.innerHTML ",[25,70236,290],{"class":240},[25,70238,70239],{"class":45}," `\n",[25,70241,70242,70245,70247,70249,70251,70254,70257],{"class":27,"line":32866},[25,70243,70244],{"class":45},"        \u003Ctd>${",[25,70246,3990],{"class":244},[25,70248,1133],{"class":45},[25,70250,684],{"class":244},[25,70252,70253],{"class":45},"].",[25,70255,70256],{"class":244},"stuID",[25,70258,70259],{"class":45},"}\u003C\u002Ftd>\n",[25,70261,70262,70265,70267,70269,70271,70273,70276],{"class":27,"line":32872},[25,70263,70264],{"class":45},"          \u003Ctd>${",[25,70266,3990],{"class":244},[25,70268,1133],{"class":45},[25,70270,684],{"class":244},[25,70272,70253],{"class":45},[25,70274,70275],{"class":244},"uname",[25,70277,70259],{"class":45},[25,70279,70280,70282,70284,70286,70288,70290,70293],{"class":27,"line":32886},[25,70281,70264],{"class":45},[25,70283,3990],{"class":244},[25,70285,1133],{"class":45},[25,70287,684],{"class":244},[25,70289,70253],{"class":45},[25,70291,70292],{"class":244},"age",[25,70294,70259],{"class":45},[25,70296,70297,70299,70301,70303,70305,70307,70310],{"class":27,"line":32892},[25,70298,70264],{"class":45},[25,70300,3990],{"class":244},[25,70302,1133],{"class":45},[25,70304,684],{"class":244},[25,70306,70253],{"class":45},[25,70308,70309],{"class":244},"gender",[25,70311,70259],{"class":45},[25,70313,70314,70316,70318,70320,70322,70324,70327],{"class":27,"line":32907},[25,70315,70264],{"class":45},[25,70317,3990],{"class":244},[25,70319,1133],{"class":45},[25,70321,684],{"class":244},[25,70323,70253],{"class":45},[25,70325,70326],{"class":244},"salary",[25,70328,70259],{"class":45},[25,70330,70331,70333,70335,70337,70339,70341,70344],{"class":27,"line":32913},[25,70332,70264],{"class":45},[25,70334,3990],{"class":244},[25,70336,1133],{"class":45},[25,70338,684],{"class":244},[25,70340,70253],{"class":45},[25,70342,70343],{"class":244},"city",[25,70345,70259],{"class":45},[25,70347,70348],{"class":27,"line":32922},[25,70349,69664],{"class":45},[25,70351,70352,70355,70357],{"class":27,"line":32928},[25,70353,70354],{"class":45},"            \u003Ca href=\"javascript:\" data-id=${",[25,70356,684],{"class":244},[25,70358,70359],{"class":45},"}>删除\u003C\u002Fa>\n",[25,70361,70362],{"class":27,"line":32937},[25,70363,70364],{"class":45},"          \u003C\u002Ftd> \n",[25,70366,70367],{"class":27,"line":32943},[25,70368,70369],{"class":45},"          `\n",[25,70371,70372],{"class":27,"line":32949},[25,70373,70374],{"class":302},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[25,70376,70377,70380,70383],{"class":27,"line":32958},[25,70378,70379],{"class":244},"        tbody.",[25,70381,70382],{"class":31},"appendChild",[25,70384,70385],{"class":244},"(tr)\n",[25,70387,70388],{"class":27,"line":32964},[25,70389,52469],{"class":244},[25,70391,70392],{"class":27,"line":32975},[25,70393,2297],{"class":244},[25,70395,70396],{"class":27,"line":32981},[25,70397,2510],{"emptyLinePlaceholder":167},[25,70399,70400],{"class":27,"line":33000},[25,70401,70402],{"class":302},"    \u002F\u002F 3.删除委托\n",[25,70404,70405],{"class":27,"line":33006},[25,70406,70407],{"class":302},"    \u002F\u002F 3.1 事件委托 tbody\n",[25,70409,70410,70413,70415,70417,70419,70421,70423,70425,70427],{"class":27,"line":33017},[25,70411,70412],{"class":244},"    tbody.",[25,70414,57884],{"class":31},[25,70416,245],{"class":244},[25,70418,57889],{"class":45},[25,70420,12545],{"class":244},[25,70422,54520],{"class":240},[25,70424,1769],{"class":244},[25,70426,318],{"class":5326},[25,70428,12552],{"class":244},[25,70430,70431,70433,70435,70437,70439],{"class":27,"line":33023},[25,70432,54551],{"class":240},[25,70434,67105],{"class":244},[25,70436,54557],{"class":240},[25,70438,68327],{"class":45},[25,70440,12552],{"class":244},[25,70442,70443],{"class":27,"line":33043},[25,70444,70445],{"class":302},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[25,70447,70448],{"class":27,"line":33059},[25,70449,70450],{"class":302},"        \u002F\u002F console.log(e.target.dataset.id);\n",[25,70452,70453],{"class":27,"line":33065},[25,70454,70455],{"class":302},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[25,70457,70458,70461,70463,70466,70468],{"class":27,"line":33079},[25,70459,70460],{"class":244},"        arr.",[25,70462,58081],{"class":31},[25,70464,70465],{"class":244},"(e.target.dataset.id, ",[25,70467,460],{"class":35},[25,70469,251],{"class":244},[25,70471,70472],{"class":27,"line":33085},[25,70473,70474],{"class":302},"        \u002F\u002F 重新渲染一次\n",[25,70476,70477,70480],{"class":27,"line":33091},[25,70478,70479],{"class":31},"        render",[25,70481,2086],{"class":244},[25,70483,70484],{"class":27,"line":33102},[25,70485,52469],{"class":244},[25,70487,70488],{"class":27,"line":33108},[25,70489,33532],{"class":244},[25,70491,70492,70494,70496],{"class":27,"line":33114},[25,70493,52488],{"class":244},[25,70495,51884],{"class":51371},[25,70497,51378],{"class":244},[25,70499,70500],{"class":27,"line":33124},[25,70501,2510],{"emptyLinePlaceholder":167},[25,70503,70504,70506,70508],{"class":27,"line":33130},[25,70505,51856],{"class":244},[25,70507,51871],{"class":51371},[25,70509,51378],{"class":244},[25,70511,70512],{"class":27,"line":33141},[25,70513,2510],{"emptyLinePlaceholder":167},[25,70515,70516,70518,70520],{"class":27,"line":33147},[25,70517,51856],{"class":244},[25,70519,50706],{"class":51371},[25,70521,51378],{"class":244},[99,70523,70524],{},"样式：",[15,70526,70530],{"className":70527,"code":70528,"language":70529,"meta":20,"style":20},"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",[22,70531,70532,70537,70547,70556,70560,70564,70569,70579,70584,70588,70593,70603,70608,70617,70621,70625,70630,70635,70645,70655,70660,70664,70669,70678,70688,70693,70703,70713,70717,70722,70730,70734,70739,70744,70749,70757,70766,70770,70775,70784,70788,70793,70802,70806,70811,70820,70829,70837,70841,70846,70855,70865,70874,70884,70890,70899,70909,70919,70923,70928,70937,70945,70955,70963,70972,70981,70991,70999,71003,71008,71017],{"__ignoreMap":20},[25,70533,70534],{"class":27,"line":28},[25,70535,70536],{"class":244},"* {\n",[25,70538,70539,70542,70544],{"class":27,"line":39},[25,70540,70541],{"class":51371},"  margin",[25,70543,51508],{"class":244},[25,70545,70546],{"class":45},"0;\n",[25,70548,70549,70552,70554],{"class":27,"line":51},[25,70550,70551],{"class":45},"  padding",[25,70553,51508],{"class":244},[25,70555,70546],{"class":45},[25,70557,70558],{"class":27,"line":59},[25,70559,1676],{"class":244},[25,70561,70562],{"class":27,"line":67},[25,70563,2510],{"emptyLinePlaceholder":167},[25,70565,70566],{"class":27,"line":75},[25,70567,70568],{"class":45},"a {\n",[25,70570,70571,70574,70576],{"class":27,"line":83},[25,70572,70573],{"class":51371},"  text-decoration",[25,70575,51508],{"class":244},[25,70577,70578],{"class":45},"none;\n",[25,70580,70581],{"class":27,"line":91},[25,70582,70583],{"class":45},"  color:#721c24;\n",[25,70585,70586],{"class":27,"line":1429},[25,70587,1676],{"class":244},[25,70589,70590],{"class":27,"line":1441},[25,70591,70592],{"class":45},"h1 {\n",[25,70594,70595,70598,70600],{"class":27,"line":1723},[25,70596,70597],{"class":51371},"  text-align",[25,70599,51508],{"class":244},[25,70601,70602],{"class":45},"center;\n",[25,70604,70605],{"class":27,"line":1728},[25,70606,70607],{"class":45},"  color:#333;\n",[25,70609,70610,70612,70614],{"class":27,"line":1734},[25,70611,70541],{"class":51371},[25,70613,51508],{"class":244},[25,70615,70616],{"class":45},"20px 0;\n",[25,70618,70619],{"class":27,"line":1739},[25,70620,2784],{"class":244},[25,70622,70623],{"class":27,"line":1753},[25,70624,1676],{"class":244},[25,70626,70627],{"class":27,"line":1758},[25,70628,70629],{"class":45},"table {\n",[25,70631,70632],{"class":27,"line":1764},[25,70633,70634],{"class":45},"  margin:0 auto;\n",[25,70636,70637,70640,70642],{"class":27,"line":1785},[25,70638,70639],{"class":51371},"  width",[25,70641,51508],{"class":244},[25,70643,70644],{"class":45},"800px;\n",[25,70646,70647,70650,70652],{"class":27,"line":1790},[25,70648,70649],{"class":51371},"  border-collapse",[25,70651,51508],{"class":244},[25,70653,70654],{"class":45},"collapse;\n",[25,70656,70657],{"class":27,"line":1804},[25,70658,70659],{"class":45},"  color:#004085;\n",[25,70661,70662],{"class":27,"line":1809},[25,70663,1676],{"class":244},[25,70665,70666],{"class":27,"line":1838},[25,70667,70668],{"class":45},"th {\n",[25,70670,70671,70673,70675],{"class":27,"line":1843},[25,70672,70551],{"class":51371},[25,70674,51508],{"class":244},[25,70676,70677],{"class":45},"10px;\n",[25,70679,70680,70683,70685],{"class":27,"line":1860},[25,70681,70682],{"class":51371},"  background",[25,70684,51508],{"class":244},[25,70686,70687],{"class":302},"#cfe5ff;\n",[25,70689,70690],{"class":27,"line":1865},[25,70691,70692],{"class":244},"  \n",[25,70694,70695,70698,70700],{"class":27,"line":1870},[25,70696,70697],{"class":51371},"  font-size",[25,70699,51508],{"class":244},[25,70701,70702],{"class":45},"20px;\n",[25,70704,70705,70708,70710],{"class":27,"line":1875},[25,70706,70707],{"class":51371},"  font-weight",[25,70709,51508],{"class":244},[25,70711,70712],{"class":45},"400;\n",[25,70714,70715],{"class":27,"line":1889},[25,70716,1676],{"class":244},[25,70718,70719],{"class":27,"line":1894},[25,70720,70721],{"class":45},"td,th {\n",[25,70723,70724,70727],{"class":27,"line":2687},[25,70725,70726],{"class":45},"  border:1px solid",[25,70728,70729],{"class":302}," #b8daff;\n",[25,70731,70732],{"class":27,"line":2701},[25,70733,1676],{"class":244},[25,70735,70736],{"class":27,"line":2709},[25,70737,70738],{"class":45},"td {\n",[25,70740,70741],{"class":27,"line":2714},[25,70742,70743],{"class":45},"  padding:10px;\n",[25,70745,70746],{"class":27,"line":2720},[25,70747,70748],{"class":45},"  color:#666;\n",[25,70750,70751,70753,70755],{"class":27,"line":2726},[25,70752,70597],{"class":51371},[25,70754,51508],{"class":244},[25,70756,70602],{"class":45},[25,70758,70759,70761,70763],{"class":27,"line":2731},[25,70760,70697],{"class":51371},[25,70762,51508],{"class":244},[25,70764,70765],{"class":45},"16px;\n",[25,70767,70768],{"class":27,"line":8058},[25,70769,1676],{"class":244},[25,70771,70772],{"class":27,"line":8082},[25,70773,70774],{"class":45},"tbody tr {\n",[25,70776,70777,70779,70781],{"class":27,"line":8087},[25,70778,70682],{"class":51371},[25,70780,51508],{"class":244},[25,70782,70783],{"class":302},"#fff;\n",[25,70785,70786],{"class":27,"line":8093},[25,70787,1676],{"class":244},[25,70789,70790],{"class":27,"line":8120},[25,70791,70792],{"class":45},"tbody tr:hover {\n",[25,70794,70795,70797,70799],{"class":27,"line":8125},[25,70796,70682],{"class":51371},[25,70798,51508],{"class":244},[25,70800,70801],{"class":302},"#e1ecf8;\n",[25,70803,70804],{"class":27,"line":8131},[25,70805,1676],{"class":244},[25,70807,70808],{"class":27,"line":8143},[25,70809,70810],{"class":45},".info {\n",[25,70812,70813,70815,70817],{"class":27,"line":8155},[25,70814,70639],{"class":51371},[25,70816,51508],{"class":244},[25,70818,70819],{"class":45},"900px;\n",[25,70821,70822,70824,70826],{"class":27,"line":8167},[25,70823,70541],{"class":51371},[25,70825,51508],{"class":244},[25,70827,70828],{"class":45},"50px auto;\n",[25,70830,70831,70833,70835],{"class":27,"line":9826},[25,70832,70597],{"class":51371},[25,70834,51508],{"class":244},[25,70836,70602],{"class":45},[25,70838,70839],{"class":27,"line":9851},[25,70840,1676],{"class":244},[25,70842,70843],{"class":27,"line":9874},[25,70844,70845],{"class":45},".info  input, .info select {\n",[25,70847,70848,70850,70852],{"class":27,"line":9898},[25,70849,70639],{"class":51371},[25,70851,51508],{"class":244},[25,70853,70854],{"class":45},"80px;\n",[25,70856,70857,70860,70862],{"class":27,"line":9903},[25,70858,70859],{"class":51371},"  height",[25,70861,51508],{"class":244},[25,70863,70864],{"class":45},"27px;\n",[25,70866,70867,70870,70872],{"class":27,"line":9908},[25,70868,70869],{"class":51371},"  outline",[25,70871,51508],{"class":244},[25,70873,70578],{"class":45},[25,70875,70876,70879,70881],{"class":27,"line":9913},[25,70877,70878],{"class":51371},"  border-radius",[25,70880,51508],{"class":244},[25,70882,70883],{"class":45},"5px;\n",[25,70885,70886,70888],{"class":27,"line":9922},[25,70887,70726],{"class":45},[25,70889,70729],{"class":302},[25,70891,70892,70895,70897],{"class":27,"line":9927},[25,70893,70894],{"class":51371},"  padding-left",[25,70896,51508],{"class":244},[25,70898,70883],{"class":45},[25,70900,70901,70904,70906],{"class":27,"line":9933},[25,70902,70903],{"class":51371},"  box-sizing",[25,70905,51508],{"class":244},[25,70907,70908],{"class":45},"border-box;\n",[25,70910,70911,70914,70916],{"class":27,"line":9954},[25,70912,70913],{"class":51371},"  margin-right",[25,70915,51508],{"class":244},[25,70917,70918],{"class":45},"15px;\n",[25,70920,70921],{"class":27,"line":9960},[25,70922,1676],{"class":244},[25,70924,70925],{"class":27,"line":9974},[25,70926,70927],{"class":45},".info button {\n",[25,70929,70930,70932,70934],{"class":27,"line":9980},[25,70931,70639],{"class":51371},[25,70933,51508],{"class":244},[25,70935,70936],{"class":45},"60px;\n",[25,70938,70939,70941,70943],{"class":27,"line":10007},[25,70940,70859],{"class":51371},[25,70942,51508],{"class":244},[25,70944,70864],{"class":45},[25,70946,70947,70950,70952],{"class":27,"line":10016},[25,70948,70949],{"class":51371},"  background-color",[25,70951,51508],{"class":244},[25,70953,70954],{"class":302},"#004085;\n",[25,70956,70957,70959,70961],{"class":27,"line":10022},[25,70958,70869],{"class":51371},[25,70960,51508],{"class":244},[25,70962,70578],{"class":45},[25,70964,70965,70968,70970],{"class":27,"line":10030},[25,70966,70967],{"class":51371},"  border",[25,70969,51508],{"class":244},[25,70971,70546],{"class":45},[25,70973,70974,70977,70979],{"class":27,"line":10035},[25,70975,70976],{"class":51371},"  color",[25,70978,51508],{"class":244},[25,70980,70783],{"class":302},[25,70982,70983,70986,70988],{"class":27,"line":16714},[25,70984,70985],{"class":51371},"  cursor",[25,70987,51508],{"class":244},[25,70989,70990],{"class":45},"pointer;\n",[25,70992,70993,70995,70997],{"class":27,"line":16720},[25,70994,70878],{"class":51371},[25,70996,51508],{"class":244},[25,70998,70883],{"class":45},[25,71000,71001],{"class":27,"line":16743},[25,71002,1676],{"class":244},[25,71004,71005],{"class":27,"line":16749},[25,71006,71007],{"class":45},".info .age {\n",[25,71009,71010,71012,71014],{"class":27,"line":16772},[25,71011,70639],{"class":51371},[25,71013,51508],{"class":244},[25,71015,71016],{"class":45},"50px;\n",[25,71018,71019],{"class":27,"line":16786},[25,71020,1676],{"class":244},[99,71022,71023],{},"思路：",[99,71025,71026],{},[155,71027],{"alt":20,"src":71028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[99,71030,71031],{},[155,71032],{"alt":20,"src":71033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[99,71035,71036],{},[155,71037],{"alt":20,"src":71038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[210,71040,71042],{"id":71041},"_3315-重绘回流","3.3.15 重绘回流",[99,71044,71045],{},[155,71046],{"alt":20,"src":71047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[99,71049,71050],{},[155,71051],{"alt":20,"src":71052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[99,71054,71055],{},[155,71056],{"alt":20,"src":71057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[182,71059,71061],{"id":71060},"_34-bom","3.4 BOM",[99,71063,71064],{},[155,71065],{"alt":20,"src":71066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[99,71068,71069],{},"平时写的document省略了window而已，实际上是window.document",[99,71071,71072],{},"函数也是这样，调用的时候实际为window.fn()",[99,71074,71075],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[99,71077,71078],{},"window大部分情况下可以省略",[210,71080,71082],{"id":71081},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[99,71084,71085],{},"只执行一次",[99,71087,71088],{},[155,71089],{"alt":20,"src":71090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[99,71092,71093],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[99,71095,71096],{},[155,71097],{"alt":20,"src":71098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[210,71100,71102],{"id":71101},"_342-js执行机制","3.4.2 JS执行机制",[99,71104,71105],{},[155,71106],{"alt":20,"src":71107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[99,71109,71110],{},"两个的结果都是1111 3333 2222",[99,71112,71113],{},[155,71114],{"alt":20,"src":71115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[99,71117,71118],{},[155,71119],{"alt":20,"src":71120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[99,71122,71123],{},[155,71124],{"alt":20,"src":71125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[99,71127,71128],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[99,71130,71131],{},"工作流程：",[99,71133,71134],{},[155,71135],{"alt":20,"src":71136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[99,71138,71139],{},[155,71140],{"alt":20,"src":71141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[99,71143,71144],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[99,71146,71147],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[210,71149,71151],{"id":71150},"_343-location对象","3.4.3 location对象",[99,71153,71154],{},"location对象属于window这个全局对象下的，可以 省略window",[99,71156,71157],{},[155,71158],{"alt":20,"src":71159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[99,71161,71162],{},"href可以跳转页面",[194,71164,71165],{},[106,71166,71167],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[99,71169,71170],{},"search得到提交信息之后网站后边的地址",[99,71172,71173],{},[155,71174],{"alt":20,"src":71175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[99,71177,71178],{},[155,71179],{"alt":20,"src":71180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[194,71182,71183],{"start":39},[106,71184,71185],{},"hash:这个获取单页面应用#后边的地址",[99,71187,71188],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[99,71190,71191],{},[155,71192],{"alt":20,"src":71193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[15,71195,71197],{"className":53138,"code":71196,"language":53140,"meta":20,"style":20},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[22,71198,71199,71219,71239],{"__ignoreMap":20},[25,71200,71201,71203,71205,71207,71209,71212,71215,71217],{"class":27,"line":28},[25,71202,52215],{"class":244},[25,71204,481],{"class":51371},[25,71206,61128],{"class":31},[25,71208,290],{"class":244},[25,71210,71211],{"class":45},"\"#\u002Fmy\"",[25,71213,71214],{"class":244},">我的\u003C\u002F",[25,71216,481],{"class":51371},[25,71218,51378],{"class":244},[25,71220,71221,71223,71225,71227,71229,71232,71235,71237],{"class":27,"line":39},[25,71222,52215],{"class":244},[25,71224,481],{"class":51371},[25,71226,61128],{"class":31},[25,71228,290],{"class":244},[25,71230,71231],{"class":45},"\"#\u002Ffriend\"",[25,71233,71234],{"class":244},">关注\u003C\u002F",[25,71236,481],{"class":51371},[25,71238,51378],{"class":244},[25,71240,71241,71243,71245,71247,71249,71252,71255,71257],{"class":27,"line":51},[25,71242,52215],{"class":244},[25,71244,481],{"class":51371},[25,71246,61128],{"class":31},[25,71248,290],{"class":244},[25,71250,71251],{"class":45},"\"#\u002Fdownload\"",[25,71253,71254],{"class":244},">下载\u003C\u002F",[25,71256,481],{"class":51371},[25,71258,51378],{"class":244},[99,71260,71261],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[194,71263,71264],{"start":51},[106,71265,71266,71267,71269,71270,71272],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53787,71268],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53787,71271],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[210,71274,71276],{"id":71275},"_345-navigator对象","3.4.5 navigator对象",[99,71278,71279],{},[155,71280],{"alt":20,"src":71281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[15,71283,71287],{"className":71284,"code":71285,"language":71286,"meta":20,"style":20},"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",[22,71288,71289,71294,71305,71317,71322,71373,71414,71419,71432,71444,71449],{"__ignoreMap":20},[25,71290,71291],{"class":27,"line":28},[25,71292,71293],{"class":302},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[25,71295,71296,71298,71300,71302],{"class":27,"line":39},[25,71297,469],{"class":240},[25,71299,245],{"class":244},[25,71301,54520],{"class":240},[25,71303,71304],{"class":244}," () { \n",[25,71306,71307,71309,71312,71314],{"class":27,"line":51},[25,71308,6902],{"class":240},[25,71310,71311],{"class":35}," userAgent",[25,71313,13674],{"class":240},[25,71315,71316],{"class":244}," navigator.userAgent \n",[25,71318,71319],{"class":27,"line":59},[25,71320,71321],{"class":302},"\u002F\u002F 验证是否为Android或iPhone \n",[25,71323,71324,71326,71329,71331,71334,71337,71339,71341,71344,71346,71349,71353,71355,71357,71359,71362,71364,71366,71368,71370],{"class":27,"line":67},[25,71325,6902],{"class":240},[25,71327,71328],{"class":35}," android",[25,71330,13674],{"class":240},[25,71332,71333],{"class":244}," userAgent.",[25,71335,71336],{"class":31},"match",[25,71338,245],{"class":244},[25,71340,827],{"class":45},[25,71342,71343],{"class":48048},"(Android);",[25,71345,1229],{"class":240},[25,71347,71348],{"class":35},"[\\s",[25,71350,71352],{"class":71351},"snhLl","\\\u002F",[25,71354,1183],{"class":35},[25,71356,724],{"class":240},[25,71358,245],{"class":48048},[25,71360,71361],{"class":35},"[\\d.]",[25,71363,724],{"class":240},[25,71365,672],{"class":48048},[25,71367,1229],{"class":240},[25,71369,827],{"class":45},[25,71371,71372],{"class":244},") \n",[25,71374,71375,71377,71380,71382,71384,71386,71388,71390,71393,71396,71399,71401,71403,71406,71408,71410,71412],{"class":27,"line":75},[25,71376,6902],{"class":240},[25,71378,71379],{"class":35}," iphone",[25,71381,13674],{"class":240},[25,71383,71333],{"class":244},[25,71385,71336],{"class":31},[25,71387,245],{"class":244},[25,71389,827],{"class":45},[25,71391,71392],{"class":48048},"(iPhone",[25,71394,71395],{"class":35},"\\s",[25,71397,71398],{"class":48048},"OS)",[25,71400,71395],{"class":35},[25,71402,245],{"class":48048},[25,71404,71405],{"class":35},"[\\d_]",[25,71407,724],{"class":240},[25,71409,672],{"class":48048},[25,71411,827],{"class":45},[25,71413,71372],{"class":244},[25,71415,71416],{"class":27,"line":83},[25,71417,71418],{"class":302},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[25,71420,71421,71423,71426,71429],{"class":27,"line":91},[25,71422,1642],{"class":240},[25,71424,71425],{"class":244}," (android ",[25,71427,71428],{"class":240},"||",[25,71430,71431],{"class":244}," iphone) { \n",[25,71433,71434,71437,71439,71442],{"class":27,"line":1429},[25,71435,71436],{"class":244},"location.href ",[25,71438,290],{"class":240},[25,71440,71441],{"class":45}," 'http:\u002F\u002Fm.itcast.cn'",[25,71443,2784],{"class":244},[25,71445,71446],{"class":27,"line":1441},[25,71447,71448],{"class":244},"} \n",[25,71450,71451],{"class":27,"line":1723},[25,71452,71453],{"class":244},"})()\n",[210,71455,71457],{"id":71456},"_346-histroy对象","3.4.6 histroy对象",[99,71459,71460],{},[155,71461],{"alt":20,"src":71462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[99,71464,71465],{},"浏览器地址的前进与后退!!!",[99,71467,71468],{},"history.back() 等效于 history.go(-1)",[99,71470,71471],{},"history.forward() 等效于 history.go(1)",[182,71473,71475],{"id":71474},"_35-本地存储","3.5 本地存储",[194,71477,71478,71481,71484],{},[106,71479,71480],{},"数据存储在用户浏览器中",[106,71482,71483],{},"设置、读取方便、甚至页面刷新不丢失数据",[106,71485,71486],{},"容量较大，sessionStorage和localStorage约 5M 左右",[210,71488,71490],{"id":71489},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[99,71492,71493],{},"只能存储字符串",[99,71495,71496],{},[155,71497],{"alt":20,"src":71498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[99,71500,71501],{},[155,71502],{"alt":20,"src":71503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[99,71505,71506],{},"键值对要加引号,不然就会当变量来看了",[99,71508,71509],{},"localStorage.setItem('uname', 'pink')",[99,71511,71512],{},"刷新之后信息不再丢失",[99,71514,71515],{},"操作key,value会跟着变",[99,71517,71518],{},"删除只删除键就可以,即名字",[99,71520,71509],{},[99,71522,71523],{},"改:",[99,71525,71526],{},"localStorage.setItem('uname','red')",[99,71528,71529],{},"有这个键就是改,没有这个键就是改",[99,71531,71532],{},[155,71533],{"alt":20,"src":71534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[99,71536,71537],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[99,71539,71540],{},[155,71541],{"alt":20,"src":71542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[99,71544,71545],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[210,71547,71549],{"id":71548},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[99,71551,71552],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[99,71554,71555],{},"特性:",[194,71557,71558,71561,71564,71567],{},[106,71559,71560],{},"生命周期为关闭浏览器窗口",[106,71562,71563],{},"在同一个窗口(页面)下数据可以共享",[106,71565,71566],{},"以键值对的形式存储使用",[106,71568,71569],{},"用法跟localStorage 基本相同",[210,71571,71573],{"id":71572},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[99,71575,71576],{},"本地只能存储字符串,无法直接存储复杂数据类型",[15,71578,71580],{"className":53138,"code":71579,"language":53140,"meta":20,"style":20},"\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",[22,71581,71582,71590,71595,71600,71605,71610,71614,71619,71624],{"__ignoreMap":20},[25,71583,71584,71586,71588],{"class":27,"line":28},[25,71585,1153],{"class":244},[25,71587,51884],{"class":51371},[25,71589,51378],{"class":244},[25,71591,71592],{"class":27,"line":39},[25,71593,71594],{"class":244},"    const obj = {\n",[25,71596,71597],{"class":27,"line":51},[25,71598,71599],{"class":244},"      uname: 'pink老师',\n",[25,71601,71602],{"class":27,"line":59},[25,71603,71604],{"class":244},"      age: 18,\n",[25,71606,71607],{"class":27,"line":67},[25,71608,71609],{"class":244},"      gender: '女'\n",[25,71611,71612],{"class":27,"line":75},[25,71613,2297],{"class":244},[25,71615,71616],{"class":27,"line":83},[25,71617,71618],{"class":244},"    \u002F\u002F 存储复杂数据类型\n",[25,71620,71621],{"class":27,"line":91},[25,71622,71623],{"class":244},"    localStorage.setItem('obj', obj)\n",[25,71625,71626,71628,71630],{"class":27,"line":1429},[25,71627,52488],{"class":244},[25,71629,51884],{"class":51371},[25,71631,51378],{"class":244},[99,71633,71634],{},[155,71635],{"alt":20,"src":71636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[99,71638,71639],{},"如果获取一下数据:",[99,71641,71642],{},"log(localStorage.getItem('obj'))",[99,71644,71645],{},[155,71646],{"alt":20,"src":71647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[99,71649,71650],{},"发现直接存对象是使用不了的!!!",[22108,71652,71654],{"id":71653},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[99,71656,71657],{},[155,71658],{"alt":20,"src":71659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[15,71661,71663],{"className":50704,"code":71662,"language":50706,"meta":20,"style":20},"\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",[22,71664,71665,71673,71683,71693,71702,71710,71714,71718,71744,71763,71771,71775,71780,71785],{"__ignoreMap":20},[25,71666,71667,71669,71671],{"class":27,"line":28},[25,71668,1153],{"class":244},[25,71670,51884],{"class":51371},[25,71672,51378],{"class":244},[25,71674,71675,71677,71679,71681],{"class":27,"line":39},[25,71676,11331],{"class":240},[25,71678,70042],{"class":35},[25,71680,13674],{"class":240},[25,71682,15682],{"class":244},[25,71684,71685,71688,71691],{"class":27,"line":51},[25,71686,71687],{"class":244},"      uname: ",[25,71689,71690],{"class":45},"'pink老师'",[25,71692,31537],{"class":244},[25,71694,71695,71698,71700],{"class":27,"line":59},[25,71696,71697],{"class":244},"      age: ",[25,71699,893],{"class":35},[25,71701,31537],{"class":244},[25,71703,71704,71707],{"class":27,"line":67},[25,71705,71706],{"class":244},"      gender: ",[25,71708,71709],{"class":45},"'女'\n",[25,71711,71712],{"class":27,"line":75},[25,71713,2297],{"class":244},[25,71715,71716],{"class":27,"line":83},[25,71717,71618],{"class":302},[25,71719,71720,71723,71726,71728,71731,71733,71736,71738,71741],{"class":27,"line":91},[25,71721,71722],{"class":244},"  localStorage.",[25,71724,71725],{"class":31},"setItem",[25,71727,245],{"class":244},[25,71729,71730],{"class":45},"'obj'",[25,71732,12545],{"class":244},[25,71734,71735],{"class":35},"JSON",[25,71737,801],{"class":244},[25,71739,71740],{"class":31},"stringify",[25,71742,71743],{"class":244},"(obj))\n",[25,71745,71746,71749,71751,71754,71757,71759,71761],{"class":27,"line":1429},[25,71747,71748],{"class":244},"  console.",[25,71750,58318],{"class":31},[25,71752,71753],{"class":244},"(localStorage.",[25,71755,71756],{"class":31},"getItem",[25,71758,245],{"class":244},[25,71760,71730],{"class":45},[25,71762,30568],{"class":244},[25,71764,71765,71767,71769],{"class":27,"line":1441},[25,71766,52488],{"class":244},[25,71768,51884],{"class":51371},[25,71770,51378],{"class":244},[25,71772,71773],{"class":27,"line":1723},[25,71774,70692],{"class":244},[25,71776,71777],{"class":27,"line":1728},[25,71778,71779],{"class":244},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[25,71781,71782],{"class":27,"line":1734},[25,71783,71784],{"class":244},"  类型是字符串的\n",[25,71786,71787],{"class":27,"line":1739},[25,71788,71789],{"class":244},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22108,71791,71793],{"id":71792},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[99,71795,71796],{},[155,71797],{"alt":20,"src":71798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[99,71800,71801],{},[155,71802],{"alt":20,"src":71803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[15,71805,71807],{"className":53138,"code":71806,"language":53140,"meta":20,"style":20},"  \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",[22,71808,71809,71817,71821,71825,71829,71833,71837,71842,71847,71852,71857,71862,71867,71872,71877],{"__ignoreMap":20},[25,71810,71811,71813,71815],{"class":27,"line":28},[25,71812,52215],{"class":244},[25,71814,51884],{"class":51371},[25,71816,51378],{"class":244},[25,71818,71819],{"class":27,"line":39},[25,71820,71594],{"class":244},[25,71822,71823],{"class":27,"line":51},[25,71824,71599],{"class":244},[25,71826,71827],{"class":27,"line":59},[25,71828,71604],{"class":244},[25,71830,71831],{"class":27,"line":67},[25,71832,71609],{"class":244},[25,71834,71835],{"class":27,"line":75},[25,71836,2297],{"class":244},[25,71838,71839],{"class":27,"line":83},[25,71840,71841],{"class":244},"    \u002F\u002F 1.存储复杂数据类型\n",[25,71843,71844],{"class":27,"line":91},[25,71845,71846],{"class":244},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[25,71848,71849],{"class":27,"line":1429},[25,71850,71851],{"class":244},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[25,71853,71854],{"class":27,"line":1441},[25,71855,71856],{"class":244},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[25,71858,71859],{"class":27,"line":1723},[25,71860,71861],{"class":244},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[25,71863,71864],{"class":27,"line":1728},[25,71865,71866],{"class":244},"    \u002F\u002F 取\n",[25,71868,71869],{"class":27,"line":1734},[25,71870,71871],{"class":244},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[25,71873,71874],{"class":27,"line":1739},[25,71875,71876],{"class":244},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[25,71878,71879,71881,71883],{"class":27,"line":1753},[25,71880,52488],{"class":244},[25,71882,51884],{"class":51371},[25,71884,51378],{"class":244},[99,71886,71887],{},[155,71888],{"alt":20,"src":71889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[210,71891,71893],{"id":71892},"_356-数组map方法","3.5.6 数组map方法",[99,71895,71896],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[99,71898,71899],{},[155,71900],{"alt":20,"src":71901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[99,71903,71904],{},[155,71905],{"alt":20,"src":71906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[99,71908,71909,71912],{},[392,71910,71911],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[99,71914,71915],{},"map有返回值，但是forEach没有返回值",[99,71917,71918],{},"map是个方法。用的时候要加 ()",[99,71920,71921],{},"map返回的是一个数组",[210,71923,71925],{"id":71924},"_357-数组中join方法","3.5.7 数组中join方法",[99,71927,71928],{},[155,71929],{"alt":20,"src":71930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[99,71932,71933],{},"类似于python中拼接字符串一样！",[194,71935,71936,71939,71942],{},[106,71937,71938],{},"小括号为空则逗号分开",[106,71940,71941],{},"小括号为空字符串 ''，则元素之间没有分隔符",[106,71943,71944],{},"小括号用啥符号就用进行分割",[210,71946,71948],{"id":71947},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[194,71950,71951,71954,71957,71960,71963],{},[106,71952,71953],{},"记住本地时间获取快速方式：new Date().toDateString()",[106,71955,71956],{},"尽量减少DOM操作，用好map+join的渲染方式",[106,71958,71959],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[106,71961,71962],{},"return可以实现函数的结束",[106,71964,71965],{},"禁止跳转是 preventDefault() 不要忘记",[15,71967,71969],{"className":50704,"code":71968,"language":50706,"meta":20,"style":20},"\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",[22,71970,71971,71981,71995,71999,72007,72021,72041,72053,72061,72067,72077,72087,72091,72095,72101,72111,72123,72127,72131,72138,72150,72164,72174,72178,72182,72189,72196,72203,72215,72227,72237,72249,72253,72257,72264,72271,72283,72295,72305,72317,72347,72351,72355,72362,72374,72386,72410,72420,72430,72434,72438,72446,72457,72469,72481,72493,72510,72522,72534,72538,72542,72549,72561,72573,72585,72596,72614,72627,72639,72663,72674,72678,72682,72690,72700,72704,72708,72714,72726,72737,72747,72751,72755,72761,72783,72787,72791,72797,72803,72815,72825,72837,72867,72880,72897,72901,72905,72916,72938,72948,72952,72956,72969,72979,72991,73003,73015,73027,73037,73047,73057,73068,73081,73085,73093,73101,73105,73113,73126,73146,73179,73212,73245,73271,73289,73307,73315,73341,73359,73377,73395,73413,73431,73439,73447,73465,73473,73502,73510,73518,73526,73539,73551,73563,73575,73587,73599,73612,73624,73632,73640,73648,73653,73658,73662,73666,73670,73674,73678,73682,73687,73692,73697,73702,73710,73718,73726,73731,73736,73741,73746,73751,73756,73761,73766,73771,73776,73781,73786,73791,73796,73800,73805,73810,73820,73829,73833,73838,73847,73863,73905,73945,73984,74049,74057,74061,74066,74084,74092,74097,74102,74132,74138,74143,74156,74168,74180,74192,74204,74216,74228,74232,74242,74246,74251,74256,74260,74269,74273,74278,74283,74302,74307,74327,74331,74336,74340,74345,74363,74381,74399,74418,74437,74456,74461,74467,74488,74494,74503,74509,74515,74521,74548,74561,74566,74576,74582,74588,74594,74600,74605,74611,74617,74623,74629,74662,74667,74672,74677,74682,74688,74694,74700,74711,74716,74722,74729,74743,74749,74773,74778,74783,74789,74795,74816,74822,74835,74841,74847,74853,74859,74864,74870,74876,74882,74900,74914,74920,74928,74934,74956,74961,74966,74971,74976,74981,74990,74999,75004],{"__ignoreMap":20},[25,71972,71973,71975,71977,71979],{"class":27,"line":28},[25,71974,51368],{"class":244},[25,71976,51372],{"class":51371},[25,71978,51375],{"class":31},[25,71980,51378],{"class":244},[25,71982,71983,71985,71987,71989,71991,71993],{"class":27,"line":39},[25,71984,1153],{"class":244},[25,71986,50706],{"class":51371},[25,71988,51387],{"class":31},[25,71990,290],{"class":244},[25,71992,51392],{"class":45},[25,71994,51378],{"class":244},[25,71996,71997],{"class":27,"line":51},[25,71998,2510],{"emptyLinePlaceholder":167},[25,72000,72001,72003,72005],{"class":27,"line":59},[25,72002,1153],{"class":244},[25,72004,51405],{"class":51371},[25,72006,51378],{"class":244},[25,72008,72009,72011,72013,72015,72017,72019],{"class":27,"line":67},[25,72010,52215],{"class":244},[25,72012,51415],{"class":51371},[25,72014,51418],{"class":31},[25,72016,290],{"class":244},[25,72018,51423],{"class":45},[25,72020,51378],{"class":244},[25,72022,72023,72025,72027,72029,72031,72033,72035,72037,72039],{"class":27,"line":75},[25,72024,52215],{"class":244},[25,72026,51415],{"class":51371},[25,72028,15030],{"class":31},[25,72030,290],{"class":244},[25,72032,51462],{"class":45},[25,72034,51442],{"class":31},[25,72036,290],{"class":244},[25,72038,51469],{"class":45},[25,72040,51378],{"class":244},[25,72042,72043,72045,72047,72049,72051],{"class":27,"line":83},[25,72044,52215],{"class":244},[25,72046,51478],{"class":51371},[25,72048,51481],{"class":244},[25,72050,51478],{"class":51371},[25,72052,51378],{"class":244},[25,72054,72055,72057,72059],{"class":27,"line":91},[25,72056,52215],{"class":244},[25,72058,159],{"class":51371},[25,72060,51378],{"class":244},[25,72062,72063,72065],{"class":27,"line":1429},[25,72064,6513],{"class":51371},[25,72066,15682],{"class":244},[25,72068,72069,72071,72073,72075],{"class":27,"line":1441},[25,72070,54766],{"class":35},[25,72072,51508],{"class":244},[25,72074,434],{"class":35},[25,72076,1403],{"class":244},[25,72078,72079,72081,72083,72085],{"class":27,"line":1723},[25,72080,54777],{"class":35},[25,72082,51508],{"class":244},[25,72084,434],{"class":35},[25,72086,1403],{"class":244},[25,72088,72089],{"class":27,"line":1728},[25,72090,2297],{"class":244},[25,72092,72093],{"class":27,"line":1734},[25,72094,2510],{"emptyLinePlaceholder":167},[25,72096,72097,72099],{"class":27,"line":1739},[25,72098,57350],{"class":51371},[25,72100,15682],{"class":244},[25,72102,72103,72105,72107,72109],{"class":27,"line":1753},[25,72104,57357],{"class":35},[25,72106,51508],{"class":244},[25,72108,51663],{"class":35},[25,72110,1403],{"class":244},[25,72112,72113,72115,72117,72119,72121],{"class":27,"line":1758},[25,72114,62148],{"class":35},[25,72116,51508],{"class":244},[25,72118,943],{"class":35},[25,72120,51563],{"class":240},[25,72122,1403],{"class":244},[25,72124,72125],{"class":27,"line":1764},[25,72126,2297],{"class":244},[25,72128,72129],{"class":27,"line":1785},[25,72130,2510],{"emptyLinePlaceholder":167},[25,72132,72133,72136],{"class":27,"line":1790},[25,72134,72135],{"class":31},"    .info",[25,72137,15682],{"class":244},[25,72139,72140,72142,72144,72146,72148],{"class":27,"line":1804},[25,72141,54842],{"class":35},[25,72143,51508],{"class":244},[25,72145,51560],{"class":35},[25,72147,51563],{"class":240},[25,72149,1403],{"class":244},[25,72151,72152,72154,72156,72158,72160,72162],{"class":27,"line":1809},[25,72153,54777],{"class":35},[25,72155,51508],{"class":244},[25,72157,689],{"class":35},[25,72159,51563],{"class":240},[25,72161,51627],{"class":35},[25,72163,1403],{"class":244},[25,72165,72166,72168,72170,72172],{"class":27,"line":1838},[25,72167,57357],{"class":35},[25,72169,51508],{"class":244},[25,72171,51663],{"class":35},[25,72173,1403],{"class":244},[25,72175,72176],{"class":27,"line":1843},[25,72177,2297],{"class":244},[25,72179,72180],{"class":27,"line":1860},[25,72181,2510],{"emptyLinePlaceholder":167},[25,72183,72184,72187],{"class":27,"line":1865},[25,72185,72186],{"class":31},"    .uname",[25,72188,31537],{"class":244},[25,72190,72191,72194],{"class":27,"line":1870},[25,72192,72193],{"class":31},"    .age",[25,72195,31537],{"class":244},[25,72197,72198,72201],{"class":27,"line":1875},[25,72199,72200],{"class":31},"    .salary",[25,72202,15682],{"class":244},[25,72204,72205,72207,72209,72211,72213],{"class":27,"line":1889},[25,72206,54842],{"class":35},[25,72208,51508],{"class":244},[25,72210,554],{"class":35},[25,72212,51563],{"class":240},[25,72214,1403],{"class":244},[25,72216,72217,72219,72221,72223,72225],{"class":27,"line":1894},[25,72218,54856],{"class":35},[25,72220,51508],{"class":244},[25,72222,943],{"class":35},[25,72224,51563],{"class":240},[25,72226,1403],{"class":244},[25,72228,72229,72231,72233,72235],{"class":27,"line":2687},[25,72230,61851],{"class":35},[25,72232,51508],{"class":244},[25,72234,54808],{"class":35},[25,72236,1403],{"class":244},[25,72238,72239,72241,72243,72245,72247],{"class":27,"line":2701},[25,72240,61821],{"class":35},[25,72242,51508],{"class":244},[25,72244,818],{"class":35},[25,72246,51563],{"class":240},[25,72248,1403],{"class":244},[25,72250,72251],{"class":27,"line":2709},[25,72252,2297],{"class":244},[25,72254,72255],{"class":27,"line":2714},[25,72256,2510],{"emptyLinePlaceholder":167},[25,72258,72259,72262],{"class":27,"line":2720},[25,72260,72261],{"class":31},"    .gender",[25,72263,31537],{"class":244},[25,72265,72266,72269],{"class":27,"line":2726},[25,72267,72268],{"class":31},"    .city",[25,72270,15682],{"class":244},[25,72272,72273,72275,72277,72279,72281],{"class":27,"line":2731},[25,72274,54842],{"class":35},[25,72276,51508],{"class":244},[25,72278,554],{"class":35},[25,72280,51563],{"class":240},[25,72282,1403],{"class":244},[25,72284,72285,72287,72289,72291,72293],{"class":27,"line":8058},[25,72286,54856],{"class":35},[25,72288,51508],{"class":244},[25,72290,1068],{"class":35},[25,72292,51563],{"class":240},[25,72294,1403],{"class":244},[25,72296,72297,72299,72301,72303],{"class":27,"line":8082},[25,72298,61851],{"class":35},[25,72300,51508],{"class":244},[25,72302,54808],{"class":35},[25,72304,1403],{"class":244},[25,72306,72307,72309,72311,72313,72315],{"class":27,"line":8087},[25,72308,61821],{"class":35},[25,72310,51508],{"class":244},[25,72312,818],{"class":35},[25,72314,51563],{"class":240},[25,72316,1403],{"class":244},[25,72318,72319,72321,72323,72325,72327,72329,72332,72334,72336,72338,72341,72343,72345],{"class":27,"line":8093},[25,72320,62048],{"class":35},[25,72322,51508],{"class":244},[25,72324,460],{"class":35},[25,72326,51563],{"class":240},[25,72328,51592],{"class":35},[25,72330,72331],{"class":35}," rgb",[25,72333,245],{"class":244},[25,72335,1833],{"class":35},[25,72337,12545],{"class":244},[25,72339,72340],{"class":35},"197",[25,72342,12545],{"class":244},[25,72344,72340],{"class":35},[25,72346,2829],{"class":244},[25,72348,72349],{"class":27,"line":8120},[25,72350,2297],{"class":244},[25,72352,72353],{"class":27,"line":8125},[25,72354,2510],{"emptyLinePlaceholder":167},[25,72356,72357,72360],{"class":27,"line":8131},[25,72358,72359],{"class":51371},"    button",[25,72361,15682],{"class":244},[25,72363,72364,72366,72368,72370,72372],{"class":27,"line":8143},[25,72365,54856],{"class":35},[25,72367,51508],{"class":244},[25,72369,1068],{"class":35},[25,72371,51563],{"class":240},[25,72373,1403],{"class":244},[25,72375,72376,72378,72380,72382,72384],{"class":27,"line":8155},[25,72377,54842],{"class":35},[25,72379,51508],{"class":244},[25,72381,727],{"class":35},[25,72383,51563],{"class":240},[25,72385,1403],{"class":244},[25,72387,72388,72390,72392,72395,72397,72399,72401,72404,72406,72408],{"class":27,"line":8167},[25,72389,54955],{"class":35},[25,72391,51508],{"class":244},[25,72393,72394],{"class":35},"rgb",[25,72396,245],{"class":244},[25,72398,1212],{"class":35},[25,72400,12545],{"class":244},[25,72402,72403],{"class":35},"187",[25,72405,12545],{"class":244},[25,72407,542],{"class":35},[25,72409,2829],{"class":244},[25,72411,72412,72414,72416,72418],{"class":27,"line":9826},[25,72413,57487],{"class":35},[25,72415,51508],{"class":244},[25,72417,60913],{"class":35},[25,72419,1403],{"class":244},[25,72421,72422,72424,72426,72428],{"class":27,"line":9851},[25,72423,62048],{"class":35},[25,72425,51508],{"class":244},[25,72427,434],{"class":35},[25,72429,1403],{"class":244},[25,72431,72432],{"class":27,"line":9874},[25,72433,2297],{"class":244},[25,72435,72436],{"class":27,"line":9898},[25,72437,2510],{"emptyLinePlaceholder":167},[25,72439,72440,72442,72444],{"class":27,"line":9903},[25,72441,72359],{"class":51371},[25,72443,51759],{"class":51371},[25,72445,15682],{"class":244},[25,72447,72448,72450,72452,72455],{"class":27,"line":9908},[25,72449,55080],{"class":35},[25,72451,51508],{"class":244},[25,72453,72454],{"class":35},"inline-block",[25,72456,1403],{"class":244},[25,72458,72459,72461,72463,72465,72467],{"class":27,"line":9913},[25,72460,54842],{"class":35},[25,72462,51508],{"class":244},[25,72464,689],{"class":35},[25,72466,51563],{"class":240},[25,72468,1403],{"class":244},[25,72470,72471,72473,72475,72477,72479],{"class":27,"line":9922},[25,72472,54856],{"class":35},[25,72474,51508],{"class":244},[25,72476,689],{"class":35},[25,72478,51563],{"class":240},[25,72480,1403],{"class":244},[25,72482,72483,72485,72487,72489,72491],{"class":27,"line":9927},[25,72484,57430],{"class":35},[25,72486,51508],{"class":244},[25,72488,715],{"class":35},[25,72490,51563],{"class":240},[25,72492,1403],{"class":244},[25,72494,72495,72497,72499,72501,72503,72505,72508],{"class":27,"line":9933},[25,72496,62048],{"class":35},[25,72498,51508],{"class":244},[25,72500,460],{"class":35},[25,72502,51563],{"class":240},[25,72504,51592],{"class":35},[25,72506,72507],{"class":35}," #fff",[25,72509,1403],{"class":244},[25,72511,72512,72514,72516,72518,72520],{"class":27,"line":9954},[25,72513,55205],{"class":35},[25,72515,51508],{"class":244},[25,72517,562],{"class":35},[25,72519,51563],{"class":240},[25,72521,1403],{"class":244},[25,72523,72524,72526,72528,72530,72532],{"class":27,"line":9960},[25,72525,61821],{"class":35},[25,72527,51508],{"class":244},[25,72529,460],{"class":35},[25,72531,51563],{"class":240},[25,72533,1403],{"class":244},[25,72535,72536],{"class":27,"line":9974},[25,72537,2297],{"class":244},[25,72539,72540],{"class":27,"line":9980},[25,72541,2510],{"emptyLinePlaceholder":167},[25,72543,72544,72547],{"class":27,"line":10007},[25,72545,72546],{"class":31},"    .total",[25,72548,15682],{"class":244},[25,72550,72551,72553,72555,72557,72559],{"class":27,"line":10016},[25,72552,54842],{"class":35},[25,72554,51508],{"class":244},[25,72556,61700],{"class":35},[25,72558,51563],{"class":240},[25,72560,1403],{"class":244},[25,72562,72563,72565,72567,72569,72571],{"class":27,"line":10022},[25,72564,54856],{"class":35},[25,72566,51508],{"class":244},[25,72568,644],{"class":35},[25,72570,51563],{"class":240},[25,72572,1403],{"class":244},[25,72574,72575,72577,72579,72581,72583],{"class":27,"line":10030},[25,72576,57430],{"class":35},[25,72578,51508],{"class":244},[25,72580,644],{"class":35},[25,72582,51563],{"class":240},[25,72584,1403],{"class":244},[25,72586,72587,72589,72591,72594],{"class":27,"line":10035},[25,72588,57357],{"class":35},[25,72590,51508],{"class":244},[25,72592,72593],{"class":35},"right",[25,72595,1403],{"class":244},[25,72597,72598,72600,72602,72604,72606,72608,72610,72612],{"class":27,"line":16714},[25,72599,54777],{"class":35},[25,72601,51508],{"class":244},[25,72603,644],{"class":35},[25,72605,51563],{"class":240},[25,72607,51627],{"class":35},[25,72609,2148],{"class":35},[25,72611,51563],{"class":240},[25,72613,1403],{"class":244},[25,72615,72616,72619,72621,72623,72625],{"class":27,"line":16720},[25,72617,72618],{"class":35},"      padding-right",[25,72620,51508],{"class":244},[25,72622,689],{"class":35},[25,72624,51563],{"class":240},[25,72626,1403],{"class":244},[25,72628,72629,72631,72633,72635,72637],{"class":27,"line":16743},[25,72630,54993],{"class":35},[25,72632,51508],{"class":244},[25,72634,766],{"class":35},[25,72636,51563],{"class":240},[25,72638,1403],{"class":244},[25,72640,72641,72643,72645,72647,72649,72652,72654,72657,72659,72661],{"class":27,"line":16749},[25,72642,54955],{"class":35},[25,72644,51508],{"class":244},[25,72646,72394],{"class":35},[25,72648,245],{"class":244},[25,72650,72651],{"class":35},"237",[25,72653,12545],{"class":244},[25,72655,72656],{"class":35},"235",[25,72658,12545],{"class":244},[25,72660,72656],{"class":35},[25,72662,2829],{"class":244},[25,72664,72665,72668,72670,72672],{"class":27,"line":16772},[25,72666,72667],{"class":35},"      box-sizing",[25,72669,51508],{"class":244},[25,72671,60576],{"class":35},[25,72673,1403],{"class":244},[25,72675,72676],{"class":27,"line":16786},[25,72677,2297],{"class":244},[25,72679,72680],{"class":27,"line":16806},[25,72681,2510],{"emptyLinePlaceholder":167},[25,72683,72684,72686,72688],{"class":27,"line":16812},[25,72685,72546],{"class":31},[25,72687,51759],{"class":51371},[25,72689,15682],{"class":244},[25,72691,72692,72694,72696,72698],{"class":27,"line":16823},[25,72693,57487],{"class":35},[25,72695,51508],{"class":244},[25,72697,57492],{"class":35},[25,72699,1403],{"class":244},[25,72701,72702],{"class":27,"line":16846},[25,72703,2297],{"class":244},[25,72705,72706],{"class":27,"line":16868},[25,72707,2510],{"emptyLinePlaceholder":167},[25,72709,72710,72712],{"class":27,"line":16873},[25,72711,65094],{"class":51371},[25,72713,15682],{"class":244},[25,72715,72716,72718,72720,72722,72724],{"class":27,"line":16879},[25,72717,54842],{"class":35},[25,72719,51508],{"class":244},[25,72721,61700],{"class":35},[25,72723,51563],{"class":240},[25,72725,1403],{"class":244},[25,72727,72728,72730,72732,72735],{"class":27,"line":16893},[25,72729,54777],{"class":35},[25,72731,51508],{"class":244},[25,72733,72734],{"class":35},"auto",[25,72736,1403],{"class":244},[25,72738,72739,72741,72743,72745],{"class":27,"line":16906},[25,72740,65101],{"class":35},[25,72742,51508],{"class":244},[25,72744,65106],{"class":35},[25,72746,1403],{"class":244},[25,72748,72749],{"class":27,"line":16911},[25,72750,2297],{"class":244},[25,72752,72753],{"class":27,"line":16925},[25,72754,2510],{"emptyLinePlaceholder":167},[25,72756,72757,72759],{"class":27,"line":16930},[25,72758,65186],{"class":51371},[25,72760,15682],{"class":244},[25,72762,72763,72765,72767,72769,72771,72773,72775,72777,72779,72781],{"class":27,"line":16936},[25,72764,54955],{"class":35},[25,72766,51508],{"class":244},[25,72768,72394],{"class":35},[25,72770,245],{"class":244},[25,72772,72651],{"class":35},[25,72774,12545],{"class":244},[25,72776,72656],{"class":35},[25,72778,12545],{"class":244},[25,72780,72656],{"class":35},[25,72782,2829],{"class":244},[25,72784,72785],{"class":27,"line":16941},[25,72786,2297],{"class":244},[25,72788,72789],{"class":27,"line":16955},[25,72790,2510],{"emptyLinePlaceholder":167},[25,72792,72793,72795],{"class":27,"line":16960},[25,72794,65186],{"class":51371},[25,72796,31537],{"class":244},[25,72798,72799,72801],{"class":27,"line":16965},[25,72800,65252],{"class":51371},[25,72802,15682],{"class":244},[25,72804,72805,72807,72809,72811,72813],{"class":27,"line":16979},[25,72806,54856],{"class":35},[25,72808,51508],{"class":244},[25,72810,516],{"class":35},[25,72812,51563],{"class":240},[25,72814,1403],{"class":244},[25,72816,72817,72819,72821,72823],{"class":27,"line":16991},[25,72818,57357],{"class":35},[25,72820,51508],{"class":244},[25,72822,23846],{"class":35},[25,72824,1403],{"class":244},[25,72826,72827,72829,72831,72833,72835],{"class":27,"line":16996},[25,72828,54993],{"class":35},[25,72830,51508],{"class":244},[25,72832,792],{"class":35},[25,72834,51563],{"class":240},[25,72836,1403],{"class":244},[25,72838,72839,72841,72843,72845,72847,72849,72851,72853,72856,72858,72861,72863,72865],{"class":27,"line":17009},[25,72840,62048],{"class":35},[25,72842,51508],{"class":244},[25,72844,460],{"class":35},[25,72846,51563],{"class":240},[25,72848,51592],{"class":35},[25,72850,72331],{"class":35},[25,72852,245],{"class":244},[25,72854,72855],{"class":35},"228",[25,72857,12545],{"class":244},[25,72859,72860],{"class":35},"225",[25,72862,12545],{"class":244},[25,72864,72860],{"class":35},[25,72866,2829],{"class":244},[25,72868,72869,72872,72874,72876,72878],{"class":27,"line":17014},[25,72870,72871],{"class":35},"      padding-left",[25,72873,51508],{"class":244},[25,72875,562],{"class":35},[25,72877,51563],{"class":240},[25,72879,1403],{"class":244},[25,72881,72882,72884,72886,72888,72891,72893,72895],{"class":27,"line":17019},[25,72883,61931],{"class":35},[25,72885,51508],{"class":244},[25,72887,28192],{"class":35},[25,72889,72890],{"class":35}," linear",[25,72892,61938],{"class":35},[25,72894,938],{"class":240},[25,72896,1403],{"class":244},[25,72898,72899],{"class":27,"line":17024},[25,72900,2297],{"class":244},[25,72902,72903],{"class":27,"line":17037},[25,72904,2510],{"emptyLinePlaceholder":167},[25,72906,72907,72910,72912,72914],{"class":27,"line":17042},[25,72908,72909],{"class":51371},"    tbody",[25,72911,70215],{"class":51371},[25,72913,61011],{"class":31},[25,72915,15682],{"class":244},[25,72917,72918,72920,72922,72924,72926,72928,72930,72932,72934,72936],{"class":27,"line":32704},[25,72919,54955],{"class":35},[25,72921,51508],{"class":244},[25,72923,72394],{"class":35},[25,72925,245],{"class":244},[25,72927,72651],{"class":35},[25,72929,12545],{"class":244},[25,72931,72656],{"class":35},[25,72933,12545],{"class":244},[25,72935,72656],{"class":35},[25,72937,2829],{"class":244},[25,72939,72940,72942,72944,72946],{"class":27,"line":32710},[25,72941,62096],{"class":35},[25,72943,51508],{"class":244},[25,72945,62101],{"class":35},[25,72947,1403],{"class":244},[25,72949,72950],{"class":27,"line":32716},[25,72951,2297],{"class":244},[25,72953,72954],{"class":27,"line":32722},[25,72955,2510],{"emptyLinePlaceholder":167},[25,72957,72958,72960,72962,72965,72967],{"class":27,"line":32728},[25,72959,72909],{"class":51371},[25,72961,70215],{"class":51371},[25,72963,72964],{"class":51371}," td",[25,72966,1510],{"class":51371},[25,72968,15682],{"class":244},[25,72970,72971,72973,72975,72977],{"class":27,"line":32739},[25,72972,55080],{"class":35},[25,72974,51508],{"class":244},[25,72976,60940],{"class":35},[25,72978,1403],{"class":244},[25,72980,72981,72983,72985,72987,72989],{"class":27,"line":32745},[25,72982,54842],{"class":35},[25,72984,51508],{"class":244},[25,72986,1150],{"class":35},[25,72988,51563],{"class":240},[25,72990,1403],{"class":244},[25,72992,72993,72995,72997,72999,73001],{"class":27,"line":32765},[25,72994,54856],{"class":35},[25,72996,51508],{"class":244},[25,72998,1068],{"class":35},[25,73000,51563],{"class":240},[25,73002,1403],{"class":244},[25,73004,73005,73007,73009,73011,73013],{"class":27,"line":32771},[25,73006,57430],{"class":35},[25,73008,51508],{"class":244},[25,73010,1068],{"class":35},[25,73012,51563],{"class":240},[25,73014,1403],{"class":244},[25,73016,73017,73019,73021,73023,73025],{"class":27,"line":32782},[25,73018,62148],{"class":35},[25,73020,51508],{"class":244},[25,73022,321],{"class":35},[25,73024,51563],{"class":240},[25,73026,1403],{"class":244},[25,73028,73029,73031,73033,73035],{"class":27,"line":32788},[25,73030,57487],{"class":35},[25,73032,51508],{"class":244},[25,73034,60913],{"class":35},[25,73036,1403],{"class":244},[25,73038,73039,73041,73043,73045],{"class":27,"line":32794},[25,73040,57357],{"class":35},[25,73042,51508],{"class":244},[25,73044,51663],{"class":35},[25,73046,1403],{"class":244},[25,73048,73049,73051,73053,73055],{"class":27,"line":32800},[25,73050,64041],{"class":35},[25,73052,51508],{"class":244},[25,73054,54808],{"class":35},[25,73056,1403],{"class":244},[25,73058,73059,73061,73063,73066],{"class":27,"line":32806},[25,73060,54955],{"class":35},[25,73062,51508],{"class":244},[25,73064,73065],{"class":35},"orange",[25,73067,1403],{"class":244},[25,73069,73070,73072,73074,73077,73079],{"class":27,"line":32812},[25,73071,55205],{"class":35},[25,73073,51508],{"class":244},[25,73075,73076],{"class":35},"12.5",[25,73078,51563],{"class":240},[25,73080,1403],{"class":244},[25,73082,73083],{"class":27,"line":32818},[25,73084,2297],{"class":244},[25,73086,73087,73089,73091],{"class":27,"line":32824},[25,73088,52488],{"class":244},[25,73090,159],{"class":51371},[25,73092,51378],{"class":244},[25,73094,73095,73097,73099],{"class":27,"line":32844},[25,73096,51856],{"class":244},[25,73098,51405],{"class":51371},[25,73100,51378],{"class":244},[25,73102,73103],{"class":27,"line":32850},[25,73104,2510],{"emptyLinePlaceholder":167},[25,73106,73107,73109,73111],{"class":27,"line":32866},[25,73108,1153],{"class":244},[25,73110,51871],{"class":51371},[25,73112,51378],{"class":244},[25,73114,73115,73117,73119,73122,73124],{"class":27,"line":32872},[25,73116,52215],{"class":244},[25,73118,182],{"class":51371},[25,73120,73121],{"class":244},">学生就业统计表\u003C\u002F",[25,73123,182],{"class":51371},[25,73125,51378],{"class":244},[25,73127,73128,73130,73132,73134,73136,73138,73140,73142,73144],{"class":27,"line":32886},[25,73129,52215],{"class":244},[25,73131,66696],{"class":51371},[25,73133,53557],{"class":31},[25,73135,290],{"class":244},[25,73137,62735],{"class":45},[25,73139,69141],{"class":31},[25,73141,290],{"class":244},[25,73143,31847],{"class":45},[25,73145,51378],{"class":244},[25,73147,73148,73150,73152,73154,73156,73158,73160,73162,73164,73166,73168,73171,73173,73175,73177],{"class":27,"line":32892},[25,73149,51412],{"class":244},[25,73151,53892],{"class":51371},[25,73153,53895],{"class":31},[25,73155,290],{"class":244},[25,73157,62770],{"class":45},[25,73159,15030],{"class":31},[25,73161,290],{"class":244},[25,73163,69167],{"class":45},[25,73165,61091],{"class":31},[25,73167,290],{"class":244},[25,73169,73170],{"class":45},"\"姓名\"",[25,73172,53557],{"class":31},[25,73174,290],{"class":244},[25,73176,69167],{"class":45},[25,73178,51378],{"class":244},[25,73180,73181,73183,73185,73187,73189,73191,73193,73195,73197,73199,73201,73204,73206,73208,73210],{"class":27,"line":32907},[25,73182,51412],{"class":244},[25,73184,53892],{"class":51371},[25,73186,53895],{"class":31},[25,73188,290],{"class":244},[25,73190,62770],{"class":45},[25,73192,15030],{"class":31},[25,73194,290],{"class":244},[25,73196,69195],{"class":45},[25,73198,61091],{"class":31},[25,73200,290],{"class":244},[25,73202,73203],{"class":45},"\"年龄\"",[25,73205,53557],{"class":31},[25,73207,290],{"class":244},[25,73209,69195],{"class":45},[25,73211,51378],{"class":244},[25,73213,73214,73216,73218,73220,73222,73224,73226,73228,73230,73232,73234,73237,73239,73241,73243],{"class":27,"line":32913},[25,73215,51412],{"class":244},[25,73217,53892],{"class":51371},[25,73219,53895],{"class":31},[25,73221,290],{"class":244},[25,73223,62770],{"class":45},[25,73225,15030],{"class":31},[25,73227,290],{"class":244},[25,73229,69297],{"class":45},[25,73231,61091],{"class":31},[25,73233,290],{"class":244},[25,73235,73236],{"class":45},"\"薪资\"",[25,73238,53557],{"class":31},[25,73240,290],{"class":244},[25,73242,69297],{"class":45},[25,73244,51378],{"class":244},[25,73246,73247,73249,73251,73253,73255,73257,73259,73261,73263,73265,73267,73269],{"class":27,"line":32922},[25,73248,51412],{"class":244},[25,73250,69215],{"class":51371},[25,73252,15030],{"class":31},[25,73254,290],{"class":244},[25,73256,69222],{"class":45},[25,73258,15069],{"class":31},[25,73260,290],{"class":244},[25,73262,7762],{"class":45},[25,73264,53557],{"class":31},[25,73266,290],{"class":244},[25,73268,69222],{"class":45},[25,73270,51378],{"class":244},[25,73272,73273,73275,73277,73279,73281,73283,73285,73287],{"class":27,"line":32928},[25,73274,55305],{"class":244},[25,73276,69237],{"class":51371},[25,73278,66722],{"class":31},[25,73280,290],{"class":244},[25,73282,10071],{"class":45},[25,73284,69246],{"class":244},[25,73286,69237],{"class":51371},[25,73288,51378],{"class":244},[25,73290,73291,73293,73295,73297,73299,73301,73303,73305],{"class":27,"line":32937},[25,73292,55305],{"class":244},[25,73294,69237],{"class":51371},[25,73296,66722],{"class":31},[25,73298,290],{"class":244},[25,73300,10140],{"class":45},[25,73302,69265],{"class":244},[25,73304,69237],{"class":51371},[25,73306,51378],{"class":244},[25,73308,73309,73311,73313],{"class":27,"line":32943},[25,73310,51847],{"class":244},[25,73312,69215],{"class":51371},[25,73314,51378],{"class":244},[25,73316,73317,73319,73321,73323,73325,73327,73329,73331,73333,73335,73337,73339],{"class":27,"line":32949},[25,73318,51412],{"class":244},[25,73320,69215],{"class":51371},[25,73322,15030],{"class":31},[25,73324,290],{"class":244},[25,73326,69319],{"class":45},[25,73328,15069],{"class":31},[25,73330,290],{"class":244},[25,73332,7762],{"class":45},[25,73334,53557],{"class":31},[25,73336,290],{"class":244},[25,73338,69319],{"class":45},[25,73340,51378],{"class":244},[25,73342,73343,73345,73347,73349,73351,73353,73355,73357],{"class":27,"line":32958},[25,73344,55305],{"class":244},[25,73346,69237],{"class":51371},[25,73348,66722],{"class":31},[25,73350,290],{"class":244},[25,73352,69340],{"class":45},[25,73354,69343],{"class":244},[25,73356,69237],{"class":51371},[25,73358,51378],{"class":244},[25,73360,73361,73363,73365,73367,73369,73371,73373,73375],{"class":27,"line":32964},[25,73362,55305],{"class":244},[25,73364,69237],{"class":51371},[25,73366,66722],{"class":31},[25,73368,290],{"class":244},[25,73370,69360],{"class":45},[25,73372,69363],{"class":244},[25,73374,69237],{"class":51371},[25,73376,51378],{"class":244},[25,73378,73379,73381,73383,73385,73387,73389,73391,73393],{"class":27,"line":32975},[25,73380,55305],{"class":244},[25,73382,69237],{"class":51371},[25,73384,66722],{"class":31},[25,73386,290],{"class":244},[25,73388,69380],{"class":45},[25,73390,69383],{"class":244},[25,73392,69237],{"class":51371},[25,73394,51378],{"class":244},[25,73396,73397,73399,73401,73403,73405,73407,73409,73411],{"class":27,"line":32981},[25,73398,55305],{"class":244},[25,73400,69237],{"class":51371},[25,73402,66722],{"class":31},[25,73404,290],{"class":244},[25,73406,69400],{"class":45},[25,73408,69403],{"class":244},[25,73410,69237],{"class":51371},[25,73412,51378],{"class":244},[25,73414,73415,73417,73419,73421,73423,73425,73427,73429],{"class":27,"line":33000},[25,73416,55305],{"class":244},[25,73418,69237],{"class":51371},[25,73420,66722],{"class":31},[25,73422,290],{"class":244},[25,73424,69420],{"class":45},[25,73426,69423],{"class":244},[25,73428,69237],{"class":51371},[25,73430,51378],{"class":244},[25,73432,73433,73435,73437],{"class":27,"line":33006},[25,73434,51847],{"class":244},[25,73436,69215],{"class":51371},[25,73438,51378],{"class":244},[25,73440,73441,73443,73445],{"class":27,"line":33017},[25,73442,51412],{"class":244},[25,73444,53958],{"class":51371},[25,73446,51378],{"class":244},[25,73448,73449,73451,73453,73456,73458,73461,73463],{"class":27,"line":33023},[25,73450,55305],{"class":244},[25,73452,25],{"class":51371},[25,73454,73455],{"class":244},">+\u003C\u002F",[25,73457,25],{"class":51371},[25,73459,73460],{"class":244},">添加\u003C\u002F",[25,73462,53958],{"class":51371},[25,73464,51378],{"class":244},[25,73466,73467,73469,73471],{"class":27,"line":33043},[25,73468,52488],{"class":244},[25,73470,66696],{"class":51371},[25,73472,51378],{"class":244},[25,73474,73475,73477,73479,73481,73483,73485,73488,73490,73493,73495,73498,73500],{"class":27,"line":33059},[25,73476,52215],{"class":244},[25,73478,51682],{"class":51371},[25,73480,53557],{"class":31},[25,73482,290],{"class":244},[25,73484,62651],{"class":45},[25,73486,73487],{"class":244},">共有数据 \u003C",[25,73489,25],{"class":51371},[25,73491,73492],{"class":244},">0\u003C\u002F",[25,73494,25],{"class":51371},[25,73496,73497],{"class":244},"> 条\u003C\u002F",[25,73499,51682],{"class":51371},[25,73501,51378],{"class":244},[25,73503,73504,73506,73508],{"class":27,"line":33065},[25,73505,52215],{"class":244},[25,73507,380],{"class":51371},[25,73509,51378],{"class":244},[25,73511,73512,73514,73516],{"class":27,"line":33079},[25,73513,51412],{"class":244},[25,73515,383],{"class":51371},[25,73517,51378],{"class":244},[25,73519,73520,73522,73524],{"class":27,"line":33085},[25,73521,55305],{"class":244},[25,73523,386],{"class":51371},[25,73525,51378],{"class":244},[25,73527,73528,73530,73532,73535,73537],{"class":27,"line":33091},[25,73529,55373],{"class":244},[25,73531,389],{"class":51371},[25,73533,73534],{"class":244},">ID\u003C\u002F",[25,73536,389],{"class":51371},[25,73538,51378],{"class":244},[25,73540,73541,73543,73545,73547,73549],{"class":27,"line":33102},[25,73542,55373],{"class":244},[25,73544,389],{"class":51371},[25,73546,69526],{"class":244},[25,73548,389],{"class":51371},[25,73550,51378],{"class":244},[25,73552,73553,73555,73557,73559,73561],{"class":27,"line":33108},[25,73554,55373],{"class":244},[25,73556,389],{"class":51371},[25,73558,69539],{"class":244},[25,73560,389],{"class":51371},[25,73562,51378],{"class":244},[25,73564,73565,73567,73569,73571,73573],{"class":27,"line":33114},[25,73566,55373],{"class":244},[25,73568,389],{"class":51371},[25,73570,69552],{"class":244},[25,73572,389],{"class":51371},[25,73574,51378],{"class":244},[25,73576,73577,73579,73581,73583,73585],{"class":27,"line":33124},[25,73578,55373],{"class":244},[25,73580,389],{"class":51371},[25,73582,69565],{"class":244},[25,73584,389],{"class":51371},[25,73586,51378],{"class":244},[25,73588,73589,73591,73593,73595,73597],{"class":27,"line":33130},[25,73590,55373],{"class":244},[25,73592,389],{"class":51371},[25,73594,69578],{"class":244},[25,73596,389],{"class":51371},[25,73598,51378],{"class":244},[25,73600,73601,73603,73605,73608,73610],{"class":27,"line":33141},[25,73602,55373],{"class":244},[25,73604,389],{"class":51371},[25,73606,73607],{"class":244},">录入时间\u003C\u002F",[25,73609,389],{"class":51371},[25,73611,51378],{"class":244},[25,73613,73614,73616,73618,73620,73622],{"class":27,"line":33147},[25,73615,55373],{"class":244},[25,73617,389],{"class":51371},[25,73619,69591],{"class":244},[25,73621,389],{"class":51371},[25,73623,51378],{"class":244},[25,73625,73626,73628,73630],{"class":27,"line":33157},[25,73627,55478],{"class":244},[25,73629,386],{"class":51371},[25,73631,51378],{"class":244},[25,73633,73634,73636,73638],{"class":27,"line":33162},[25,73635,51847],{"class":244},[25,73637,383],{"class":51371},[25,73639,51378],{"class":244},[25,73641,73642,73644,73646],{"class":27,"line":33168},[25,73643,51412],{"class":244},[25,73645,427],{"class":51371},[25,73647,51378],{"class":244},[25,73649,73650],{"class":27,"line":33217},[25,73651,73652],{"class":302},"      \u003C!-- \u003Ctr>\n",[25,73654,73655],{"class":27,"line":33264},[25,73656,73657],{"class":302},"        \u003Ctd>1\u003C\u002Ftd>\n",[25,73659,73660],{"class":27,"line":33269},[25,73661,73657],{"class":302},[25,73663,73664],{"class":27,"line":33275},[25,73665,73657],{"class":302},[25,73667,73668],{"class":27,"line":33294},[25,73669,73657],{"class":302},[25,73671,73672],{"class":27,"line":33300},[25,73673,73657],{"class":302},[25,73675,73676],{"class":27,"line":33320},[25,73677,73657],{"class":302},[25,73679,73680],{"class":27,"line":33326},[25,73681,73657],{"class":302},[25,73683,73684],{"class":27,"line":33332},[25,73685,73686],{"class":302},"        \u003Ctd>\n",[25,73688,73689],{"class":27,"line":33342},[25,73690,73691],{"class":302},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[25,73693,73694],{"class":27,"line":33347},[25,73695,73696],{"class":302},"        \u003C\u002Ftd>\n",[25,73698,73699],{"class":27,"line":33353},[25,73700,73701],{"class":302},"      \u003C\u002Ftr> -->\n",[25,73703,73704,73706,73708],{"class":27,"line":33369},[25,73705,51847],{"class":244},[25,73707,427],{"class":51371},[25,73709,51378],{"class":244},[25,73711,73712,73714,73716],{"class":27,"line":33414},[25,73713,52488],{"class":244},[25,73715,380],{"class":51371},[25,73717,51378],{"class":244},[25,73719,73720,73722,73724],{"class":27,"line":33420},[25,73721,52215],{"class":244},[25,73723,51884],{"class":51371},[25,73725,51378],{"class":244},[25,73727,73728],{"class":27,"line":33426},[25,73729,73730],{"class":302},"    \u002F\u002F const initData = [{\n",[25,73732,73733],{"class":27,"line":33432},[25,73734,73735],{"class":302},"    \u002F\u002F   unameId: 1,\n",[25,73737,73738],{"class":27,"line":33443},[25,73739,73740],{"class":302},"    \u002F\u002F   uname: '华晨宇',\n",[25,73742,73743],{"class":27,"line":33449},[25,73744,73745],{"class":302},"    \u002F\u002F   age: 22,\n",[25,73747,73748],{"class":27,"line":33455},[25,73749,73750],{"class":302},"    \u002F\u002F   salary: 12000,\n",[25,73752,73753],{"class":27,"line":33461},[25,73754,73755],{"class":302},"    \u002F\u002F   gender: '男',\n",[25,73757,73758],{"class":27,"line":33479},[25,73759,73760],{"class":302},"    \u002F\u002F   city: '北京',\n",[25,73762,73763],{"class":27,"line":33493},[25,73764,73765],{"class":302},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[25,73767,73768],{"class":27,"line":33502},[25,73769,73770],{"class":302},"    \u002F\u002F }]\n",[25,73772,73773],{"class":27,"line":33511},[25,73774,73775],{"class":302},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[25,73777,73778],{"class":27,"line":33520},[25,73779,73780],{"class":302},"    \u002F\u002F 1.渲染业务\n",[25,73782,73783],{"class":27,"line":33529},[25,73784,73785],{"class":302},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[25,73787,73788],{"class":27,"line":33535},[25,73789,73790],{"class":302},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[25,73792,73793],{"class":27,"line":33541},[25,73794,73795],{"class":302},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[25,73797,73798],{"class":27,"line":33549},[25,73799,2510],{"emptyLinePlaceholder":167},[25,73801,73802],{"class":27,"line":33554},[25,73803,73804],{"class":302},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[25,73806,73807],{"class":27,"line":33560},[25,73808,73809],{"class":302},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[25,73811,73812,73814,73816,73818],{"class":27,"line":33571},[25,73813,11331],{"class":240},[25,73815,57766],{"class":35},[25,73817,13674],{"class":240},[25,73819,51909],{"class":244},[25,73821,73822,73825,73827],{"class":27,"line":33577},[25,73823,73824],{"class":244},"    console.",[25,73826,58318],{"class":31},[25,73828,52483],{"class":244},[25,73830,73831],{"class":27,"line":33597},[25,73832,2510],{"emptyLinePlaceholder":167},[25,73834,73835],{"class":27,"line":33603},[25,73836,73837],{"class":302},"    \u002F\u002F 时间函数\n",[25,73839,73840,73842,73845],{"class":27,"line":33609},[25,73841,70155],{"class":240},[25,73843,73844],{"class":31}," getTime",[25,73846,10963],{"class":244},[25,73848,73849,73851,73854,73856,73858,73861],{"class":27,"line":33615},[25,73850,58299],{"class":240},[25,73852,73853],{"class":35}," date",[25,73855,13674],{"class":240},[25,73857,11688],{"class":240},[25,73859,73860],{"class":31}," Date",[25,73862,2086],{"class":244},[25,73864,73865,73867,73869,73871,73874,73877,73879,73881,73883,73886,73889,73891,73893,73895,73897,73899,73901,73903],{"class":27,"line":33632},[25,73866,58299],{"class":240},[25,73868,16201],{"class":35},[25,73870,13674],{"class":240},[25,73872,73873],{"class":244}," date.",[25,73875,73876],{"class":31},"getHours",[25,73878,13160],{"class":244},[25,73880,1153],{"class":240},[25,73882,2148],{"class":35},[25,73884,73885],{"class":240}," ?",[25,73887,73888],{"class":45}," '0'",[25,73890,45637],{"class":240},[25,73892,73873],{"class":244},[25,73894,73876],{"class":31},[25,73896,13160],{"class":244},[25,73898,1102],{"class":240},[25,73900,73873],{"class":244},[25,73902,73876],{"class":31},[25,73904,2086],{"class":244},[25,73906,73907,73909,73912,73914,73916,73919,73921,73923,73925,73927,73929,73931,73933,73935,73937,73939,73941,73943],{"class":27,"line":33638},[25,73908,58299],{"class":240},[25,73910,73911],{"class":35}," m",[25,73913,13674],{"class":240},[25,73915,73873],{"class":244},[25,73917,73918],{"class":31},"getMinutes",[25,73920,13160],{"class":244},[25,73922,1153],{"class":240},[25,73924,2148],{"class":35},[25,73926,73885],{"class":240},[25,73928,73888],{"class":45},[25,73930,45637],{"class":240},[25,73932,73873],{"class":244},[25,73934,73918],{"class":31},[25,73936,13160],{"class":244},[25,73938,1102],{"class":240},[25,73940,73873],{"class":244},[25,73942,73918],{"class":31},[25,73944,2086],{"class":244},[25,73946,73947,73949,73951,73953,73955,73958,73960,73962,73964,73966,73968,73970,73972,73974,73976,73978,73980,73982],{"class":27,"line":33644},[25,73948,58299],{"class":240},[25,73950,8538],{"class":35},[25,73952,13674],{"class":240},[25,73954,73873],{"class":244},[25,73956,73957],{"class":31},"getSeconds",[25,73959,13160],{"class":244},[25,73961,1153],{"class":240},[25,73963,2148],{"class":35},[25,73965,73885],{"class":240},[25,73967,73888],{"class":45},[25,73969,45637],{"class":240},[25,73971,73873],{"class":244},[25,73973,73957],{"class":31},[25,73975,13160],{"class":244},[25,73977,1102],{"class":240},[25,73979,73873],{"class":244},[25,73981,73957],{"class":31},[25,73983,2086],{"class":244},[25,73985,73986,73988,73991,73993,73995,73998,74000,74003,74005,74008,74010,74012,74015,74017,74019,74021,74023,74025,74027,74030,74032,74035,74037,74040,74042,74044,74046],{"class":27,"line":33650},[25,73987,58299],{"class":240},[25,73989,73990],{"class":35}," str",[25,73992,13674],{"class":240},[25,73994,62974],{"class":45},[25,73996,73997],{"class":244},"date",[25,73999,801],{"class":45},[25,74001,74002],{"class":31},"getFullYear",[25,74004,2537],{"class":45},[25,74006,74007],{"class":45},"}\u002F${",[25,74009,73997],{"class":244},[25,74011,801],{"class":45},[25,74013,74014],{"class":31},"getMonth",[25,74016,13160],{"class":45},[25,74018,724],{"class":240},[25,74020,25225],{"class":35},[25,74022,74007],{"class":45},[25,74024,73997],{"class":244},[25,74026,801],{"class":45},[25,74028,74029],{"class":31},"getDate",[25,74031,2537],{"class":45},[25,74033,74034],{"class":45},"} ${",[25,74036,658],{"class":244},[25,74038,74039],{"class":45},"}:${",[25,74041,787],{"class":244},[25,74043,74039],{"class":45},[25,74045,938],{"class":244},[25,74047,74048],{"class":45},"}`\n",[25,74050,74051,74054],{"class":27,"line":33656},[25,74052,74053],{"class":240},"      return",[25,74055,74056],{"class":244}," str\n",[25,74058,74059],{"class":27,"line":33662},[25,74060,2297],{"class":244},[25,74062,74063],{"class":27,"line":33689},[25,74064,74065],{"class":302},"    \u002F\u002F 渲染函数\n",[25,74067,74068,74070,74072,74074,74076,74078,74080,74082],{"class":27,"line":33713},[25,74069,11331],{"class":240},[25,74071,69818],{"class":35},[25,74073,13674],{"class":240},[25,74075,54467],{"class":244},[25,74077,54470],{"class":31},[25,74079,245],{"class":244},[25,74081,69829],{"class":45},[25,74083,251],{"class":244},[25,74085,74086,74088,74090],{"class":27,"line":33719},[25,74087,70155],{"class":240},[25,74089,70158],{"class":31},[25,74091,10963],{"class":244},[25,74093,74094],{"class":27,"line":33725},[25,74095,74096],{"class":302},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[25,74098,74099],{"class":27,"line":33731},[25,74100,74101],{"class":302},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[25,74103,74104,74106,74109,74111,74113,74116,74118,74120,74122,74125,74127,74130],{"class":27,"line":33742},[25,74105,58299],{"class":240},[25,74107,74108],{"class":35}," trArr",[25,74110,13674],{"class":240},[25,74112,52036],{"class":244},[25,74114,74115],{"class":31},"map",[25,74117,245],{"class":244},[25,74119,54520],{"class":240},[25,74121,1769],{"class":244},[25,74123,74124],{"class":5326},"ele",[25,74126,12545],{"class":244},[25,74128,74129],{"class":5326},"index",[25,74131,12552],{"class":244},[25,74133,74134,74136],{"class":27,"line":33753},[25,74135,14862],{"class":240},[25,74137,70239],{"class":45},[25,74139,74140],{"class":27,"line":33759},[25,74141,74142],{"class":45},"      \u003Ctr>\n",[25,74144,74145,74147,74149,74151,74154],{"class":27,"line":33776},[25,74146,70244],{"class":45},[25,74148,74124],{"class":244},[25,74150,801],{"class":45},[25,74152,74153],{"class":244},"unameId",[25,74155,70259],{"class":45},[25,74157,74158,74160,74162,74164,74166],{"class":27,"line":33799},[25,74159,70244],{"class":45},[25,74161,74124],{"class":244},[25,74163,801],{"class":45},[25,74165,70275],{"class":244},[25,74167,70259],{"class":45},[25,74169,74170,74172,74174,74176,74178],{"class":27,"line":33822},[25,74171,70244],{"class":45},[25,74173,74124],{"class":244},[25,74175,801],{"class":45},[25,74177,70292],{"class":244},[25,74179,70259],{"class":45},[25,74181,74182,74184,74186,74188,74190],{"class":27,"line":33828},[25,74183,70244],{"class":45},[25,74185,74124],{"class":244},[25,74187,801],{"class":45},[25,74189,70309],{"class":244},[25,74191,70259],{"class":45},[25,74193,74194,74196,74198,74200,74202],{"class":27,"line":33833},[25,74195,70244],{"class":45},[25,74197,74124],{"class":244},[25,74199,801],{"class":45},[25,74201,70326],{"class":244},[25,74203,70259],{"class":45},[25,74205,74206,74208,74210,74212,74214],{"class":27,"line":33842},[25,74207,70244],{"class":45},[25,74209,74124],{"class":244},[25,74211,801],{"class":45},[25,74213,70343],{"class":244},[25,74215,70259],{"class":45},[25,74217,74218,74220,74222,74224,74226],{"class":27,"line":33852},[25,74219,70244],{"class":45},[25,74221,74124],{"class":244},[25,74223,801],{"class":45},[25,74225,2497],{"class":244},[25,74227,70259],{"class":45},[25,74229,74230],{"class":27,"line":33858},[25,74231,73686],{"class":45},[25,74233,74234,74237,74239],{"class":27,"line":33863},[25,74235,74236],{"class":45},"          \u003Ca href=\"#\" data-id=\"${",[25,74238,74129],{"class":244},[25,74240,74241],{"class":45},"}\">删除\u003C\u002Fa>\n",[25,74243,74244],{"class":27,"line":33869},[25,74245,73696],{"class":45},[25,74247,74248],{"class":27,"line":33882},[25,74249,74250],{"class":45},"      \u003C\u002Ftr>\n",[25,74252,74253],{"class":27,"line":33888},[25,74254,74255],{"class":45},"  `\n",[25,74257,74258],{"class":27,"line":33899},[25,74259,64886],{"class":244},[25,74261,74262,74264,74266],{"class":27,"line":33910},[25,74263,58315],{"class":244},[25,74265,58318],{"class":31},[25,74267,74268],{"class":244},"(trArr)\n",[25,74270,74271],{"class":27,"line":33929},[25,74272,2510],{"emptyLinePlaceholder":167},[25,74274,74275],{"class":27,"line":49589},[25,74276,74277],{"class":302},"      \u002F\u002F (2) 把数组转换为字符串join\n",[25,74279,74280],{"class":27,"line":49594},[25,74281,74282],{"class":302},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[25,74284,74285,74287,74289,74292,74295,74297,74300],{"class":27,"line":49603},[25,74286,70170],{"class":244},[25,74288,290],{"class":240},[25,74290,74291],{"class":244}," trArr.",[25,74293,74294],{"class":31},"join",[25,74296,245],{"class":244},[25,74298,74299],{"class":45},"''",[25,74301,251],{"class":244},[25,74303,74304],{"class":27,"line":49612},[25,74305,74306],{"class":302},"      \u002F\u002F 显示共有几条\n",[25,74308,74309,74311,74313,74315,74318,74321,74323,74325],{"class":27,"line":49617},[25,74310,55842],{"class":244},[25,74312,54470],{"class":31},[25,74314,245],{"class":244},[25,74316,74317],{"class":45},"'.total span'",[25,74319,74320],{"class":244},").innerHTML ",[25,74322,290],{"class":240},[25,74324,52036],{"class":244},[25,74326,55902],{"class":35},[25,74328,74329],{"class":27,"line":49622},[25,74330,2297],{"class":244},[25,74332,74333],{"class":27,"line":49627},[25,74334,74335],{"class":302},"    \u002F\u002F render()\n",[25,74337,74338],{"class":27,"line":49640},[25,74339,2510],{"emptyLinePlaceholder":167},[25,74341,74342],{"class":27,"line":49645},[25,74343,74344],{"class":302},"    \u002F\u002F 获取DOM对象\n",[25,74346,74347,74349,74351,74353,74355,74357,74359,74361],{"class":27,"line":49654},[25,74348,11331],{"class":240},[25,74350,69892],{"class":35},[25,74352,13674],{"class":240},[25,74354,54467],{"class":244},[25,74356,54470],{"class":31},[25,74358,245],{"class":244},[25,74360,69903],{"class":45},[25,74362,251],{"class":244},[25,74364,74365,74367,74369,74371,74373,74375,74377,74379],{"class":27,"line":49663},[25,74366,11331],{"class":240},[25,74368,69719],{"class":35},[25,74370,13674],{"class":240},[25,74372,54467],{"class":244},[25,74374,54470],{"class":31},[25,74376,245],{"class":244},[25,74378,69730],{"class":45},[25,74380,251],{"class":244},[25,74382,74383,74385,74387,74389,74391,74393,74395,74397],{"class":27,"line":49680},[25,74384,11331],{"class":240},[25,74386,15799],{"class":35},[25,74388,13674],{"class":240},[25,74390,54467],{"class":244},[25,74392,54470],{"class":31},[25,74394,245],{"class":244},[25,74396,69749],{"class":45},[25,74398,251],{"class":244},[25,74400,74402,74404,74406,74408,74410,74412,74414,74416],{"class":27,"line":74401},231,[25,74403,11331],{"class":240},[25,74405,69778],{"class":35},[25,74407,13674],{"class":240},[25,74409,54467],{"class":244},[25,74411,54470],{"class":31},[25,74413,245],{"class":244},[25,74415,69789],{"class":45},[25,74417,251],{"class":244},[25,74419,74421,74423,74425,74427,74429,74431,74433,74435],{"class":27,"line":74420},232,[25,74422,11331],{"class":240},[25,74424,69758],{"class":35},[25,74426,13674],{"class":240},[25,74428,54467],{"class":244},[25,74430,54470],{"class":31},[25,74432,245],{"class":244},[25,74434,69769],{"class":45},[25,74436,251],{"class":244},[25,74438,74440,74442,74444,74446,74448,74450,74452,74454],{"class":27,"line":74439},233,[25,74441,11331],{"class":240},[25,74443,69798],{"class":35},[25,74445,13674],{"class":240},[25,74447,54467],{"class":244},[25,74449,54470],{"class":31},[25,74451,245],{"class":244},[25,74453,69809],{"class":45},[25,74455,251],{"class":244},[25,74457,74459],{"class":27,"line":74458},234,[25,74460,2510],{"emptyLinePlaceholder":167},[25,74462,74464],{"class":27,"line":74463},235,[25,74465,74466],{"class":302},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[25,74468,74470,74472,74474,74476,74478,74480,74482,74484,74486],{"class":27,"line":74469},236,[25,74471,69910],{"class":244},[25,74473,57884],{"class":31},[25,74475,245],{"class":244},[25,74477,69917],{"class":45},[25,74479,12545],{"class":244},[25,74481,54520],{"class":240},[25,74483,1769],{"class":244},[25,74485,318],{"class":5326},[25,74487,12552],{"class":244},[25,74489,74491],{"class":27,"line":74490},237,[25,74492,74493],{"class":302},"      \u002F\u002F 禁止浏览器跳转\n",[25,74495,74497,74499,74501],{"class":27,"line":74496},238,[25,74498,69937],{"class":244},[25,74500,69940],{"class":31},[25,74502,2086],{"class":244},[25,74504,74506],{"class":27,"line":74505},239,[25,74507,74508],{"class":302},"      \u002F\u002F 非空判断\n",[25,74510,74512],{"class":27,"line":74511},240,[25,74513,74514],{"class":302},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[25,74516,74518],{"class":27,"line":74517},241,[25,74519,74520],{"class":302},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[25,74522,74524,74526,74528,74530,74533,74535,74538,74541,74543,74545],{"class":27,"line":74523},242,[25,74525,54551],{"class":240},[25,74527,1769],{"class":244},[25,74529,469],{"class":240},[25,74531,74532],{"class":244},"uname.value ",[25,74534,71428],{"class":240},[25,74536,74537],{"class":240}," !",[25,74539,74540],{"class":244},"age.value ",[25,74542,71428],{"class":240},[25,74544,74537],{"class":240},[25,74546,74547],{"class":244},"salary.value) {\n",[25,74549,74551,74553,74555,74557,74559],{"class":27,"line":74550},243,[25,74552,14862],{"class":240},[25,74554,70011],{"class":31},[25,74556,245],{"class":244},[25,74558,70016],{"class":45},[25,74560,251],{"class":244},[25,74562,74564],{"class":27,"line":74563},244,[25,74565,52469],{"class":244},[25,74567,74569,74571,74573],{"class":27,"line":74568},245,[25,74570,58078],{"class":244},[25,74572,51955],{"class":31},[25,74574,74575],{"class":244},"({\n",[25,74577,74579],{"class":27,"line":74578},246,[25,74580,74581],{"class":302},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[25,74583,74585],{"class":27,"line":74584},247,[25,74586,74587],{"class":302},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[25,74589,74591],{"class":27,"line":74590},248,[25,74592,74593],{"class":302},"        \u002F\u002F 对象的序号应为数组长度+1\n",[25,74595,74597],{"class":27,"line":74596},249,[25,74598,74599],{"class":302},"        \u002F\u002F unameId: arr.length + 1,\n",[25,74601,74603],{"class":27,"line":74602},250,[25,74604,2510],{"emptyLinePlaceholder":167},[25,74606,74608],{"class":27,"line":74607},251,[25,74609,74610],{"class":302},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[25,74612,74614],{"class":27,"line":74613},252,[25,74615,74616],{"class":302},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[25,74618,74620],{"class":27,"line":74619},253,[25,74621,74622],{"class":302},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[25,74624,74626],{"class":27,"line":74625},254,[25,74627,74628],{"class":302},"        \u002F\u002F 0当假看\n",[25,74630,74632,74635,74637,74639,74642,74644,74646,74648,74651,74653,74655,74658,74660],{"class":27,"line":74631},255,[25,74633,74634],{"class":244},"        unameId: arr.",[25,74636,52039],{"class":35},[25,74638,73885],{"class":240},[25,74640,74641],{"class":244}," arr[arr.",[25,74643,52039],{"class":35},[25,74645,52342],{"class":240},[25,74647,25225],{"class":35},[25,74649,74650],{"class":244},"].unameId ",[25,74652,724],{"class":240},[25,74654,25225],{"class":35},[25,74656,74657],{"class":240}," :",[25,74659,25225],{"class":35},[25,74661,31537],{"class":244},[25,74663,74665],{"class":27,"line":74664},256,[25,74666,70064],{"class":244},[25,74668,74670],{"class":27,"line":74669},257,[25,74671,70069],{"class":244},[25,74673,74675],{"class":27,"line":74674},258,[25,74676,70079],{"class":244},[25,74678,74680],{"class":27,"line":74679},259,[25,74681,70074],{"class":244},[25,74683,74685],{"class":27,"line":74684},260,[25,74686,74687],{"class":244},"        city: city.value,\n",[25,74689,74691],{"class":27,"line":74690},261,[25,74692,74693],{"class":302},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[25,74695,74697],{"class":27,"line":74696},262,[25,74698,74699],{"class":302},"        \u002F\u002F time: new Date().toDateString()\n",[25,74701,74703,74706,74709],{"class":27,"line":74702},263,[25,74704,74705],{"class":244},"        time: ",[25,74707,74708],{"class":31},"getTime",[25,74710,2086],{"class":244},[25,74712,74714],{"class":27,"line":74713},264,[25,74715,64886],{"class":244},[25,74717,74719],{"class":27,"line":74718},265,[25,74720,74721],{"class":302},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[25,74723,74725,74727],{"class":27,"line":74724},266,[25,74726,70139],{"class":31},[25,74728,2086],{"class":244},[25,74730,74732,74734,74736,74738,74740],{"class":27,"line":74731},267,[25,74733,70122],{"class":35},[25,74735,801],{"class":244},[25,74737,70127],{"class":31},[25,74739,13160],{"class":244},[25,74741,74742],{"class":302},"\u002F\u002F重置表单\n",[25,74744,74746],{"class":27,"line":74745},268,[25,74747,74748],{"class":302},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[25,74750,74752,74755,74757,74759,74762,74764,74766,74768,74770],{"class":27,"line":74751},269,[25,74753,74754],{"class":244},"      localStorage.",[25,74756,71725],{"class":31},[25,74758,245],{"class":244},[25,74760,74761],{"class":45},"'data'",[25,74763,12545],{"class":244},[25,74765,71735],{"class":35},[25,74767,801],{"class":244},[25,74769,71740],{"class":31},[25,74771,74772],{"class":244},"(arr))\n",[25,74774,74776],{"class":27,"line":74775},270,[25,74777,33532],{"class":244},[25,74779,74781],{"class":27,"line":74780},271,[25,74782,2510],{"emptyLinePlaceholder":167},[25,74784,74786],{"class":27,"line":74785},272,[25,74787,74788],{"class":302},"    \u002F\u002F 3.删除业务\n",[25,74790,74792],{"class":27,"line":74791},273,[25,74793,74794],{"class":302},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[25,74796,74798,74800,74802,74804,74806,74808,74810,74812,74814],{"class":27,"line":74797},274,[25,74799,70412],{"class":244},[25,74801,57884],{"class":31},[25,74803,245],{"class":244},[25,74805,57889],{"class":45},[25,74807,12545],{"class":244},[25,74809,54520],{"class":240},[25,74811,1769],{"class":244},[25,74813,318],{"class":5326},[25,74815,12552],{"class":244},[25,74817,74819],{"class":27,"line":74818},275,[25,74820,74821],{"class":302},"      \u002F\u002F 判断是否点击的是删除按钮\n",[25,74823,74825,74827,74829,74831,74833],{"class":27,"line":74824},276,[25,74826,54551],{"class":240},[25,74828,67105],{"class":244},[25,74830,54557],{"class":240},[25,74832,68327],{"class":45},[25,74834,12552],{"class":244},[25,74836,74838],{"class":27,"line":74837},277,[25,74839,74840],{"class":302},"        \u002F\u002F alert(1)\n",[25,74842,74844],{"class":27,"line":74843},278,[25,74845,74846],{"class":302},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[25,74848,74850],{"class":27,"line":74849},279,[25,74851,74852],{"class":302},"        \u002F\u002F console.log(e.target)\n",[25,74854,74856],{"class":27,"line":74855},280,[25,74857,74858],{"class":302},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[25,74860,74862],{"class":27,"line":74861},281,[25,74863,2510],{"emptyLinePlaceholder":167},[25,74865,74867],{"class":27,"line":74866},282,[25,74868,74869],{"class":302},"        \u002F\u002F 确认框，确然是否真的要删除\n",[25,74871,74873],{"class":27,"line":74872},283,[25,74874,74875],{"class":302},"        \u002F\u002F confirm()为确认框\n",[25,74877,74879],{"class":27,"line":74878},284,[25,74880,74881],{"class":302},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[25,74883,74885,74887,74889,74892,74894,74897],{"class":27,"line":74884},285,[25,74886,2607],{"class":240},[25,74888,1769],{"class":244},[25,74890,74891],{"class":31},"confirm",[25,74893,245],{"class":244},[25,74895,74896],{"class":45},"'您确定要删除这条数据吗？'",[25,74898,74899],{"class":244},")) {\n",[25,74901,74903,74906,74908,74910,74912],{"class":27,"line":74902},286,[25,74904,74905],{"class":244},"          arr.",[25,74907,58081],{"class":31},[25,74909,70465],{"class":244},[25,74911,460],{"class":35},[25,74913,251],{"class":244},[25,74915,74917],{"class":27,"line":74916},287,[25,74918,74919],{"class":302},"          \u002F\u002F 3.4 重新渲染页面\n",[25,74921,74923,74926],{"class":27,"line":74922},288,[25,74924,74925],{"class":31},"          render",[25,74927,2086],{"class":244},[25,74929,74931],{"class":27,"line":74930},289,[25,74932,74933],{"class":302},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[25,74935,74937,74940,74942,74944,74946,74948,74950,74952,74954],{"class":27,"line":74936},290,[25,74938,74939],{"class":244},"          localStorage.",[25,74941,71725],{"class":31},[25,74943,245],{"class":244},[25,74945,74761],{"class":45},[25,74947,12545],{"class":244},[25,74949,71735],{"class":35},[25,74951,801],{"class":244},[25,74953,71740],{"class":31},[25,74955,74772],{"class":244},[25,74957,74959],{"class":27,"line":74958},291,[25,74960,2639],{"class":244},[25,74962,74964],{"class":27,"line":74963},292,[25,74965,52469],{"class":244},[25,74967,74969],{"class":27,"line":74968},293,[25,74970,2510],{"emptyLinePlaceholder":167},[25,74972,74974],{"class":27,"line":74973},294,[25,74975,33532],{"class":244},[25,74977,74979],{"class":27,"line":74978},295,[25,74980,2510],{"emptyLinePlaceholder":167},[25,74982,74984,74986,74988],{"class":27,"line":74983},296,[25,74985,52488],{"class":244},[25,74987,51884],{"class":51371},[25,74989,51378],{"class":244},[25,74991,74993,74995,74997],{"class":27,"line":74992},297,[25,74994,51856],{"class":244},[25,74996,51871],{"class":51371},[25,74998,51378],{"class":244},[25,75000,75002],{"class":27,"line":75001},298,[25,75003,2510],{"emptyLinePlaceholder":167},[25,75005,75007,75009,75011],{"class":27,"line":75006},299,[25,75008,51856],{"class":244},[25,75010,50706],{"class":51371},[25,75012,51378],{"class":244},[182,75014,75016],{"id":75015},"_36-正则表达式","3.6 正则表达式",[99,75018,75019],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[99,75021,75022],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[99,75024,75025],{},"正则表达式的作用：",[103,75027,75028,75035,75041],{},[106,75029,75030,75031,75034],{},"表单验证（ ",[392,75032,75033],{},"匹配"," ）",[106,75036,75037,75038,75034],{},"过滤敏感词（ ",[392,75039,75040],{},"替换",[106,75042,75043,75044,75034],{},"字符串中提取我们想要的部分（ ",[392,75045,75046],{},"提取",[210,75048,75050],{"id":75049},"_361-语法","3.6.1 语法",[99,75052,75053],{},"正则表达式使用步骤：",[194,75055,75056,75059],{},[106,75057,75058],{},"定义规则",[106,75060,75061],{},"查找是否匹配",[99,75063,75064],{},"正则表达式里边不需要写引号",[99,75066,75067],{},[155,75068],{"alt":20,"src":75069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[99,75071,75072],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[99,75074,75075],{},"reg.test(str)",[99,75077,75078],{},[155,75079],{"alt":20,"src":75080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[99,75082,75083],{},[155,75084],{"alt":20,"src":75085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[210,75087,75089],{"id":75088},"_362-元字符","3.6.2 元字符",[194,75091,75092,75095,75098,75101,75108],{},[106,75093,75094],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[106,75096,75097],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[106,75099,75100],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[106,75102,75103,75104],{},"正则验证工具：",[481,75105,75106],{"href":75106,"rel":75107},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23973],[106,75109,75110],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22108,75112,75114],{"id":75113},"_3621-边界符","3.6.2.1 边界符",[99,75116,75117],{},[155,75118],{"alt":20,"src":75119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[99,75121,75122],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[99,75124,75125],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[99,75127,75128],{},"只匹配一次",[99,75130,75131],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22108,75133,75135],{"id":75134},"_3622-量词","3.6.2.2 量词",[99,75137,75138],{},[155,75139],{"alt":20,"src":75140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[99,75142,75143],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22108,75145,75147],{"id":75146},"_3623-元字符","3.6.2.3 元字符",[99,75149,75150],{},[155,75151],{"alt":20,"src":75152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[99,75154,75155],{},"匹配的是a或b或c []只选一个",[99,75157,75158],{},[155,75159],{"alt":20,"src":75160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[99,75162,75163],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[99,75165,75166],{},[155,75167],{"alt":20,"src":75168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[99,75170,75171],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[99,75173,75174],{},[155,75175],{"alt":20,"src":75176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[15,75178,75180],{"className":50704,"code":75179,"language":50706,"meta":20,"style":20},"\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",[22,75181,75182,75192,75206,75210,75218,75232,75252,75264,75272,75276,75284,75292,75297,75328,75355,75383,75387,75392,75420,75451,75456,75461,75492,75524,75556,75560,75565,75596,75626,75656,75660,75665,75696,75727,75757,75787,75791,75796,75829,75833,75838,75869,75900,75904,75909,75940,75970,76001,76005,76010,76042,76073,76104,76131,76162,76194,76227,76258,76289,76321,76352,76360,76368,76372],{"__ignoreMap":20},[25,75183,75184,75186,75188,75190],{"class":27,"line":28},[25,75185,51368],{"class":244},[25,75187,51372],{"class":51371},[25,75189,51375],{"class":31},[25,75191,51378],{"class":244},[25,75193,75194,75196,75198,75200,75202,75204],{"class":27,"line":39},[25,75195,1153],{"class":244},[25,75197,50706],{"class":51371},[25,75199,51387],{"class":31},[25,75201,290],{"class":244},[25,75203,51392],{"class":45},[25,75205,51378],{"class":244},[25,75207,75208],{"class":27,"line":51},[25,75209,2510],{"emptyLinePlaceholder":167},[25,75211,75212,75214,75216],{"class":27,"line":59},[25,75213,1153],{"class":244},[25,75215,51405],{"class":51371},[25,75217,51378],{"class":244},[25,75219,75220,75222,75224,75226,75228,75230],{"class":27,"line":67},[25,75221,52215],{"class":244},[25,75223,51415],{"class":51371},[25,75225,51418],{"class":31},[25,75227,290],{"class":244},[25,75229,51423],{"class":45},[25,75231,51378],{"class":244},[25,75233,75234,75236,75238,75240,75242,75244,75246,75248,75250],{"class":27,"line":75},[25,75235,52215],{"class":244},[25,75237,51415],{"class":51371},[25,75239,15030],{"class":31},[25,75241,290],{"class":244},[25,75243,51462],{"class":45},[25,75245,51442],{"class":31},[25,75247,290],{"class":244},[25,75249,51469],{"class":45},[25,75251,51378],{"class":244},[25,75253,75254,75256,75258,75260,75262],{"class":27,"line":83},[25,75255,52215],{"class":244},[25,75257,51478],{"class":51371},[25,75259,51481],{"class":244},[25,75261,51478],{"class":51371},[25,75263,51378],{"class":244},[25,75265,75266,75268,75270],{"class":27,"line":91},[25,75267,51856],{"class":244},[25,75269,51405],{"class":51371},[25,75271,51378],{"class":244},[25,75273,75274],{"class":27,"line":1429},[25,75275,2510],{"emptyLinePlaceholder":167},[25,75277,75278,75280,75282],{"class":27,"line":1441},[25,75279,1153],{"class":244},[25,75281,51871],{"class":51371},[25,75283,51378],{"class":244},[25,75285,75286,75288,75290],{"class":27,"line":1723},[25,75287,52215],{"class":244},[25,75289,51884],{"class":51371},[25,75291,51378],{"class":244},[25,75293,75294],{"class":27,"line":1728},[25,75295,75296],{"class":302},"    \u002F\u002F 元字符中\n",[25,75298,75299,75301,75303,75305,75307,75310,75312,75314,75317,75319,75322,75325],{"class":27,"line":1734},[25,75300,73824],{"class":244},[25,75302,58318],{"class":31},[25,75304,245],{"class":244},[25,75306,827],{"class":45},[25,75308,75309],{"class":48048},"哈",[25,75311,827],{"class":45},[25,75313,801],{"class":244},[25,75315,75316],{"class":31},"test",[25,75318,245],{"class":244},[25,75320,75321],{"class":45},"'哈'",[25,75323,75324],{"class":244},"))  ",[25,75326,75327],{"class":302},"\u002F\u002Ftrue\n",[25,75329,75330,75332,75334,75336,75338,75340,75342,75344,75346,75348,75351,75353],{"class":27,"line":1739},[25,75331,73824],{"class":244},[25,75333,58318],{"class":31},[25,75335,245],{"class":244},[25,75337,827],{"class":45},[25,75339,75309],{"class":48048},[25,75341,827],{"class":45},[25,75343,801],{"class":244},[25,75345,75316],{"class":31},[25,75347,245],{"class":244},[25,75349,75350],{"class":45},"'哈哈'",[25,75352,75324],{"class":244},[25,75354,75327],{"class":302},[25,75356,75357,75359,75361,75363,75365,75367,75369,75371,75373,75375,75378,75381],{"class":27,"line":1753},[25,75358,73824],{"class":244},[25,75360,58318],{"class":31},[25,75362,245],{"class":244},[25,75364,827],{"class":45},[25,75366,75309],{"class":48048},[25,75368,827],{"class":45},[25,75370,801],{"class":244},[25,75372,75316],{"class":31},[25,75374,245],{"class":244},[25,75376,75377],{"class":45},"'二哈'",[25,75379,75380],{"class":244},"))   ",[25,75382,75327],{"class":302},[25,75384,75385],{"class":27,"line":1758},[25,75386,2510],{"emptyLinePlaceholder":167},[25,75388,75389],{"class":27,"line":1764},[25,75390,75391],{"class":302},"    \u002F\u002F 1.边界符\n",[25,75393,75394,75396,75398,75400,75402,75404,75406,75408,75410,75412,75414,75416,75418],{"class":27,"line":1785},[25,75395,73824],{"class":244},[25,75397,58318],{"class":31},[25,75399,245],{"class":244},[25,75401,827],{"class":45},[25,75403,1209],{"class":240},[25,75405,75309],{"class":48048},[25,75407,827],{"class":45},[25,75409,801],{"class":244},[25,75411,75316],{"class":31},[25,75413,245],{"class":244},[25,75415,75321],{"class":45},[25,75417,75324],{"class":244},[25,75419,75327],{"class":302},[25,75421,75422,75424,75426,75428,75430,75432,75434,75436,75438,75440,75442,75444,75446,75448],{"class":27,"line":1790},[25,75423,73824],{"class":244},[25,75425,58318],{"class":31},[25,75427,245],{"class":244},[25,75429,827],{"class":45},[25,75431,1209],{"class":240},[25,75433,75309],{"class":48048},[25,75435,545],{"class":240},[25,75437,827],{"class":45},[25,75439,801],{"class":244},[25,75441,75316],{"class":31},[25,75443,245],{"class":244},[25,75445,75350],{"class":45},[25,75447,75324],{"class":244},[25,75449,75450],{"class":302},"\u002F\u002Ffalse\n",[25,75452,75453],{"class":27,"line":1804},[25,75454,75455],{"class":302},"    \u002F\u002F 2.量词\n",[25,75457,75458],{"class":27,"line":1809},[25,75459,75460],{"class":302},"    \u002F\u002F 量词 * 类似于 >= 0\n",[25,75462,75463,75465,75467,75469,75471,75473,75475,75478,75480,75482,75484,75486,75488,75490],{"class":27,"line":1838},[25,75464,73824],{"class":244},[25,75466,58318],{"class":31},[25,75468,245],{"class":244},[25,75470,827],{"class":45},[25,75472,1209],{"class":240},[25,75474,75309],{"class":48048},[25,75476,75477],{"class":240},"*$",[25,75479,827],{"class":45},[25,75481,801],{"class":244},[25,75483,75316],{"class":31},[25,75485,245],{"class":244},[25,75487,75350],{"class":45},[25,75489,75324],{"class":244},[25,75491,75327],{"class":302},[25,75493,75494,75496,75498,75500,75502,75504,75506,75508,75510,75512,75514,75516,75519,75521],{"class":27,"line":1843},[25,75495,73824],{"class":244},[25,75497,58318],{"class":31},[25,75499,245],{"class":244},[25,75501,827],{"class":45},[25,75503,1209],{"class":240},[25,75505,75309],{"class":48048},[25,75507,75477],{"class":240},[25,75509,827],{"class":45},[25,75511,801],{"class":244},[25,75513,75316],{"class":31},[25,75515,245],{"class":244},[25,75517,75518],{"class":45},"'二哈好傻'",[25,75520,75324],{"class":244},[25,75522,75523],{"class":302},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[25,75525,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75551,75553],{"class":27,"line":1860},[25,75527,73824],{"class":244},[25,75529,58318],{"class":31},[25,75531,245],{"class":244},[25,75533,827],{"class":45},[25,75535,1209],{"class":240},[25,75537,75309],{"class":48048},[25,75539,75477],{"class":240},[25,75541,827],{"class":45},[25,75543,801],{"class":244},[25,75545,75316],{"class":31},[25,75547,245],{"class":244},[25,75549,75550],{"class":45},"'哈好哈'",[25,75552,75380],{"class":244},[25,75554,75555],{"class":302},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[25,75557,75558],{"class":27,"line":1865},[25,75559,2510],{"emptyLinePlaceholder":167},[25,75561,75562],{"class":27,"line":1870},[25,75563,75564],{"class":302},"    \u002F\u002F +类似于>=1\n",[25,75566,75567,75569,75571,75573,75575,75577,75579,75582,75584,75586,75588,75590,75592,75594],{"class":27,"line":1875},[25,75568,73824],{"class":244},[25,75570,58318],{"class":31},[25,75572,245],{"class":244},[25,75574,827],{"class":45},[25,75576,1209],{"class":240},[25,75578,75309],{"class":48048},[25,75580,75581],{"class":240},"+$",[25,75583,827],{"class":45},[25,75585,801],{"class":244},[25,75587,75316],{"class":31},[25,75589,245],{"class":244},[25,75591,75350],{"class":45},[25,75593,75324],{"class":244},[25,75595,75327],{"class":302},[25,75597,75598,75600,75602,75604,75606,75608,75610,75612,75614,75616,75618,75620,75622,75624],{"class":27,"line":1889},[25,75599,73824],{"class":244},[25,75601,58318],{"class":31},[25,75603,245],{"class":244},[25,75605,827],{"class":45},[25,75607,1209],{"class":240},[25,75609,75309],{"class":48048},[25,75611,75581],{"class":240},[25,75613,827],{"class":45},[25,75615,801],{"class":244},[25,75617,75316],{"class":31},[25,75619,245],{"class":244},[25,75621,75518],{"class":45},[25,75623,75324],{"class":244},[25,75625,75523],{"class":302},[25,75627,75628,75630,75632,75634,75636,75638,75640,75642,75644,75646,75648,75650,75652,75654],{"class":27,"line":1894},[25,75629,73824],{"class":244},[25,75631,58318],{"class":31},[25,75633,245],{"class":244},[25,75635,827],{"class":45},[25,75637,1209],{"class":240},[25,75639,75309],{"class":48048},[25,75641,75581],{"class":240},[25,75643,827],{"class":45},[25,75645,801],{"class":244},[25,75647,75316],{"class":31},[25,75649,245],{"class":244},[25,75651,75550],{"class":45},[25,75653,75380],{"class":244},[25,75655,75450],{"class":302},[25,75657,75658],{"class":27,"line":2687},[25,75659,2510],{"emptyLinePlaceholder":167},[25,75661,75662],{"class":27,"line":2701},[25,75663,75664],{"class":302},"    \u002F\u002F ?类似于0次或一次\n",[25,75666,75667,75669,75671,75673,75675,75677,75680,75682,75684,75686,75688,75690,75692,75694],{"class":27,"line":2709},[25,75668,73824],{"class":244},[25,75670,58318],{"class":31},[25,75672,245],{"class":244},[25,75674,827],{"class":45},[25,75676,1209],{"class":240},[25,75678,75679],{"class":48048},"哈？",[25,75681,545],{"class":240},[25,75683,827],{"class":45},[25,75685,801],{"class":244},[25,75687,75316],{"class":31},[25,75689,245],{"class":244},[25,75691,74299],{"class":45},[25,75693,75380],{"class":244},[25,75695,75327],{"class":302},[25,75697,75698,75700,75702,75704,75706,75708,75710,75713,75715,75717,75719,75721,75723,75725],{"class":27,"line":2714},[25,75699,73824],{"class":244},[25,75701,58318],{"class":31},[25,75703,245],{"class":244},[25,75705,827],{"class":45},[25,75707,1209],{"class":240},[25,75709,75309],{"class":48048},[25,75711,75712],{"class":240},"?$",[25,75714,827],{"class":45},[25,75716,801],{"class":244},[25,75718,75316],{"class":31},[25,75720,245],{"class":244},[25,75722,75350],{"class":45},[25,75724,75324],{"class":244},[25,75726,75450],{"class":302},[25,75728,75729,75731,75733,75735,75737,75739,75741,75743,75745,75747,75749,75751,75753,75755],{"class":27,"line":2720},[25,75730,73824],{"class":244},[25,75732,58318],{"class":31},[25,75734,245],{"class":244},[25,75736,827],{"class":45},[25,75738,1209],{"class":240},[25,75740,75309],{"class":48048},[25,75742,75712],{"class":240},[25,75744,827],{"class":45},[25,75746,801],{"class":244},[25,75748,75316],{"class":31},[25,75750,245],{"class":244},[25,75752,75518],{"class":45},[25,75754,75324],{"class":244},[25,75756,75523],{"class":302},[25,75758,75759,75761,75763,75765,75767,75769,75771,75773,75775,75777,75779,75781,75783,75785],{"class":27,"line":2726},[25,75760,73824],{"class":244},[25,75762,58318],{"class":31},[25,75764,245],{"class":244},[25,75766,827],{"class":45},[25,75768,1209],{"class":240},[25,75770,75309],{"class":48048},[25,75772,75712],{"class":240},[25,75774,827],{"class":45},[25,75776,801],{"class":244},[25,75778,75316],{"class":31},[25,75780,245],{"class":244},[25,75782,75550],{"class":45},[25,75784,75324],{"class":244},[25,75786,75450],{"class":302},[25,75788,75789],{"class":27,"line":2731},[25,75790,2510],{"emptyLinePlaceholder":167},[25,75792,75793],{"class":27,"line":8058},[25,75794,75795],{"class":302},"    \u002F\u002F {n}写几，就必须出现几次\n",[25,75797,75798,75800,75802,75804,75806,75808,75810,75813,75815,75817,75819,75821,75824,75827],{"class":27,"line":8082},[25,75799,73824],{"class":244},[25,75801,58318],{"class":31},[25,75803,245],{"class":244},[25,75805,827],{"class":45},[25,75807,1209],{"class":240},[25,75809,75309],{"class":48048},[25,75811,75812],{"class":240},"{4}$",[25,75814,827],{"class":45},[25,75816,801],{"class":244},[25,75818,75316],{"class":31},[25,75820,245],{"class":244},[25,75822,75823],{"class":45},"'哈哈哈哈'",[25,75825,75826],{"class":244},")) ",[25,75828,75327],{"class":302},[25,75830,75831],{"class":27,"line":8087},[25,75832,2510],{"emptyLinePlaceholder":167},[25,75834,75835],{"class":27,"line":8093},[25,75836,75837],{"class":302},"    \u002F\u002F {n,}大于等于n次\n",[25,75839,75840,75842,75844,75846,75848,75850,75852,75855,75857,75859,75861,75863,75865,75867],{"class":27,"line":8120},[25,75841,73824],{"class":244},[25,75843,58318],{"class":31},[25,75845,245],{"class":244},[25,75847,827],{"class":45},[25,75849,1209],{"class":240},[25,75851,75309],{"class":48048},[25,75853,75854],{"class":240},"{4,}$",[25,75856,827],{"class":45},[25,75858,801],{"class":244},[25,75860,75316],{"class":31},[25,75862,245],{"class":244},[25,75864,75823],{"class":45},[25,75866,75826],{"class":244},[25,75868,75327],{"class":302},[25,75870,75871,75873,75875,75877,75879,75881,75883,75885,75887,75889,75891,75893,75896,75898],{"class":27,"line":8125},[25,75872,73824],{"class":244},[25,75874,58318],{"class":31},[25,75876,245],{"class":244},[25,75878,827],{"class":45},[25,75880,1209],{"class":240},[25,75882,75309],{"class":48048},[25,75884,75854],{"class":240},[25,75886,827],{"class":45},[25,75888,801],{"class":244},[25,75890,75316],{"class":31},[25,75892,245],{"class":244},[25,75894,75895],{"class":45},"'哈哈哈哈哈'",[25,75897,75826],{"class":244},[25,75899,75327],{"class":302},[25,75901,75902],{"class":27,"line":8131},[25,75903,2510],{"emptyLinePlaceholder":167},[25,75905,75906],{"class":27,"line":8143},[25,75907,75908],{"class":302},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[25,75910,75911,75913,75915,75917,75919,75921,75923,75926,75928,75930,75932,75934,75936,75938],{"class":27,"line":8155},[25,75912,73824],{"class":244},[25,75914,58318],{"class":31},[25,75916,245],{"class":244},[25,75918,827],{"class":45},[25,75920,1209],{"class":240},[25,75922,75309],{"class":48048},[25,75924,75925],{"class":240},"{4,6}$",[25,75927,827],{"class":45},[25,75929,801],{"class":244},[25,75931,75316],{"class":31},[25,75933,245],{"class":244},[25,75935,75823],{"class":45},[25,75937,75826],{"class":244},[25,75939,75327],{"class":302},[25,75941,75942,75944,75946,75948,75950,75952,75954,75956,75958,75960,75962,75964,75966,75968],{"class":27,"line":8167},[25,75943,73824],{"class":244},[25,75945,58318],{"class":31},[25,75947,245],{"class":244},[25,75949,827],{"class":45},[25,75951,1209],{"class":240},[25,75953,75309],{"class":48048},[25,75955,75925],{"class":240},[25,75957,827],{"class":45},[25,75959,801],{"class":244},[25,75961,75316],{"class":31},[25,75963,245],{"class":244},[25,75965,75895],{"class":45},[25,75967,75826],{"class":244},[25,75969,75327],{"class":302},[25,75971,75972,75974,75976,75978,75980,75982,75984,75986,75988,75990,75992,75994,75997,75999],{"class":27,"line":9826},[25,75973,73824],{"class":244},[25,75975,58318],{"class":31},[25,75977,245],{"class":244},[25,75979,827],{"class":45},[25,75981,1209],{"class":240},[25,75983,75309],{"class":48048},[25,75985,75925],{"class":240},[25,75987,827],{"class":45},[25,75989,801],{"class":244},[25,75991,75316],{"class":31},[25,75993,245],{"class":244},[25,75995,75996],{"class":45},"'哈哈哈哈哈哈哈'",[25,75998,75826],{"class":244},[25,76000,75450],{"class":302},[25,76002,76003],{"class":27,"line":9851},[25,76004,2510],{"emptyLinePlaceholder":167},[25,76006,76007],{"class":27,"line":9874},[25,76008,76009],{"class":302},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[25,76011,76012,76014,76016,76018,76020,76022,76025,76027,76029,76031,76033,76035,76038,76040],{"class":27,"line":9898},[25,76013,73824],{"class":244},[25,76015,58318],{"class":31},[25,76017,245],{"class":244},[25,76019,827],{"class":45},[25,76021,1209],{"class":240},[25,76023,76024],{"class":35},"[abc]",[25,76026,545],{"class":240},[25,76028,827],{"class":45},[25,76030,801],{"class":244},[25,76032,75316],{"class":31},[25,76034,245],{"class":244},[25,76036,76037],{"class":45},"'a'",[25,76039,75324],{"class":244},[25,76041,75327],{"class":302},[25,76043,76044,76046,76048,76050,76052,76054,76056,76058,76060,76062,76064,76066,76069,76071],{"class":27,"line":9903},[25,76045,73824],{"class":244},[25,76047,58318],{"class":31},[25,76049,245],{"class":244},[25,76051,827],{"class":45},[25,76053,1209],{"class":240},[25,76055,76024],{"class":35},[25,76057,545],{"class":240},[25,76059,827],{"class":45},[25,76061,801],{"class":244},[25,76063,75316],{"class":31},[25,76065,245],{"class":244},[25,76067,76068],{"class":45},"'b'",[25,76070,75324],{"class":244},[25,76072,75327],{"class":302},[25,76074,76075,76077,76079,76081,76083,76085,76087,76089,76091,76093,76095,76097,76100,76102],{"class":27,"line":9908},[25,76076,73824],{"class":244},[25,76078,58318],{"class":31},[25,76080,245],{"class":244},[25,76082,827],{"class":45},[25,76084,1209],{"class":240},[25,76086,76024],{"class":35},[25,76088,545],{"class":240},[25,76090,827],{"class":45},[25,76092,801],{"class":244},[25,76094,75316],{"class":31},[25,76096,245],{"class":244},[25,76098,76099],{"class":45},"'c'",[25,76101,75324],{"class":244},[25,76103,75327],{"class":302},[25,76105,76106,76108,76110,76112,76114,76116,76118,76120,76122,76124,76127,76129],{"class":27,"line":9913},[25,76107,73824],{"class":244},[25,76109,58318],{"class":31},[25,76111,245],{"class":244},[25,76113,827],{"class":45},[25,76115,76024],{"class":35},[25,76117,827],{"class":45},[25,76119,801],{"class":244},[25,76121,75316],{"class":31},[25,76123,245],{"class":244},[25,76125,76126],{"class":45},"'ab'",[25,76128,75324],{"class":244},[25,76130,75327],{"class":302},[25,76132,76133,76135,76137,76139,76141,76143,76145,76147,76149,76151,76153,76155,76157,76159],{"class":27,"line":9922},[25,76134,73824],{"class":244},[25,76136,58318],{"class":31},[25,76138,245],{"class":244},[25,76140,827],{"class":45},[25,76142,1209],{"class":240},[25,76144,76024],{"class":35},[25,76146,545],{"class":240},[25,76148,827],{"class":45},[25,76150,801],{"class":244},[25,76152,75316],{"class":31},[25,76154,245],{"class":244},[25,76156,76126],{"class":45},[25,76158,75324],{"class":244},[25,76160,76161],{"class":302},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[25,76163,76164,76166,76168,76170,76172,76174,76176,76179,76181,76183,76185,76187,76189,76191],{"class":27,"line":9927},[25,76165,73824],{"class":244},[25,76167,58318],{"class":31},[25,76169,245],{"class":244},[25,76171,827],{"class":45},[25,76173,1209],{"class":240},[25,76175,76024],{"class":35},[25,76177,76178],{"class":240},"{2}$",[25,76180,827],{"class":45},[25,76182,801],{"class":244},[25,76184,75316],{"class":31},[25,76186,245],{"class":244},[25,76188,76126],{"class":45},[25,76190,75324],{"class":244},[25,76192,76193],{"class":302},"\u002F\u002Ftrue   可以选两个\n",[25,76195,76196,76198,76200,76202,76204,76206,76209,76211,76213,76215,76217,76219,76222,76224],{"class":27,"line":9933},[25,76197,73824],{"class":244},[25,76199,58318],{"class":31},[25,76201,245],{"class":244},[25,76203,827],{"class":45},[25,76205,1209],{"class":240},[25,76207,76208],{"class":35},"[a-z]",[25,76210,545],{"class":240},[25,76212,827],{"class":45},[25,76214,801],{"class":244},[25,76216,75316],{"class":31},[25,76218,245],{"class":244},[25,76220,76221],{"class":45},"'p'",[25,76223,75380],{"class":244},[25,76225,76226],{"class":302},"\u002F\u002Ftrue   依然只能选一个\n",[25,76228,76229,76231,76233,76235,76237,76239,76242,76244,76246,76248,76250,76252,76254,76256],{"class":27,"line":9954},[25,76230,73824],{"class":244},[25,76232,58318],{"class":31},[25,76234,245],{"class":244},[25,76236,827],{"class":45},[25,76238,1209],{"class":240},[25,76240,76241],{"class":35},"[A-Z]",[25,76243,545],{"class":240},[25,76245,827],{"class":45},[25,76247,801],{"class":244},[25,76249,75316],{"class":31},[25,76251,245],{"class":244},[25,76253,76221],{"class":45},[25,76255,75380],{"class":244},[25,76257,75450],{"class":302},[25,76259,76260,76262,76264,76266,76268,76270,76272,76274,76276,76278,76280,76282,76285,76287],{"class":27,"line":9960},[25,76261,73824],{"class":244},[25,76263,58318],{"class":31},[25,76265,245],{"class":244},[25,76267,827],{"class":45},[25,76269,1209],{"class":240},[25,76271,76241],{"class":35},[25,76273,545],{"class":240},[25,76275,827],{"class":45},[25,76277,801],{"class":244},[25,76279,75316],{"class":31},[25,76281,245],{"class":244},[25,76283,76284],{"class":45},"'P'",[25,76286,75380],{"class":244},[25,76288,75327],{"class":302},[25,76290,76291,76293,76295,76297,76299,76301,76304,76306,76308,76310,76312,76314,76317,76319],{"class":27,"line":9974},[25,76292,73824],{"class":244},[25,76294,58318],{"class":31},[25,76296,245],{"class":244},[25,76298,827],{"class":45},[25,76300,1209],{"class":240},[25,76302,76303],{"class":35},"[0-9]",[25,76305,545],{"class":240},[25,76307,827],{"class":45},[25,76309,801],{"class":244},[25,76311,75316],{"class":31},[25,76313,245],{"class":244},[25,76315,76316],{"class":45},"'0'",[25,76318,75380],{"class":244},[25,76320,75327],{"class":302},[25,76322,76323,76325,76327,76329,76331,76333,76336,76338,76340,76342,76344,76346,76348,76350],{"class":27,"line":9980},[25,76324,73824],{"class":244},[25,76326,58318],{"class":31},[25,76328,245],{"class":244},[25,76330,827],{"class":45},[25,76332,1209],{"class":240},[25,76334,76335],{"class":35},"[a-zA-Z0-9]",[25,76337,545],{"class":240},[25,76339,827],{"class":45},[25,76341,801],{"class":244},[25,76343,75316],{"class":31},[25,76345,245],{"class":244},[25,76347,76221],{"class":45},[25,76349,75324],{"class":244},[25,76351,75327],{"class":302},[25,76353,76354,76356,76358],{"class":27,"line":10007},[25,76355,52488],{"class":244},[25,76357,51884],{"class":51371},[25,76359,51378],{"class":244},[25,76361,76362,76364,76366],{"class":27,"line":10016},[25,76363,51856],{"class":244},[25,76365,51871],{"class":51371},[25,76367,51378],{"class":244},[25,76369,76370],{"class":27,"line":10022},[25,76371,2510],{"emptyLinePlaceholder":167},[25,76373,76374,76376,76378],{"class":27,"line":10030},[25,76375,51856],{"class":244},[25,76377,50706],{"class":51371},[25,76379,51378],{"class":244},[22108,76381,76383],{"id":76382},"_3624-修饰符","3.6.2.4 修饰符",[99,76385,76386],{},[155,76387],{"alt":20,"src":76388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[99,76390,76391],{},"replace是个方法，使用的时候一定不要忘记括号()",[99,76393,76394],{},[155,76395],{"alt":20,"src":76396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[15,76398,76400],{"className":50704,"code":76399,"language":50706,"meta":20,"style":20},"\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",[22,76401,76402,76412,76426,76434,76448,76468,76480,76488,76496,76504,76536,76567,76572,76604,76615,76648,76657,76665,76673],{"__ignoreMap":20},[25,76403,76404,76406,76408,76410],{"class":27,"line":28},[25,76405,51368],{"class":244},[25,76407,51372],{"class":51371},[25,76409,51375],{"class":31},[25,76411,51378],{"class":244},[25,76413,76414,76416,76418,76420,76422,76424],{"class":27,"line":39},[25,76415,1153],{"class":244},[25,76417,50706],{"class":51371},[25,76419,51387],{"class":31},[25,76421,290],{"class":244},[25,76423,51392],{"class":45},[25,76425,51378],{"class":244},[25,76427,76428,76430,76432],{"class":27,"line":51},[25,76429,1153],{"class":244},[25,76431,51405],{"class":51371},[25,76433,51378],{"class":244},[25,76435,76436,76438,76440,76442,76444,76446],{"class":27,"line":59},[25,76437,52215],{"class":244},[25,76439,51415],{"class":51371},[25,76441,51418],{"class":31},[25,76443,290],{"class":244},[25,76445,51423],{"class":45},[25,76447,51378],{"class":244},[25,76449,76450,76452,76454,76456,76458,76460,76462,76464,76466],{"class":27,"line":67},[25,76451,52215],{"class":244},[25,76453,51415],{"class":51371},[25,76455,15030],{"class":31},[25,76457,290],{"class":244},[25,76459,51462],{"class":45},[25,76461,51442],{"class":31},[25,76463,290],{"class":244},[25,76465,51469],{"class":45},[25,76467,51378],{"class":244},[25,76469,76470,76472,76474,76476,76478],{"class":27,"line":75},[25,76471,52215],{"class":244},[25,76473,51478],{"class":51371},[25,76475,51481],{"class":244},[25,76477,51478],{"class":51371},[25,76479,51378],{"class":244},[25,76481,76482,76484,76486],{"class":27,"line":83},[25,76483,51856],{"class":244},[25,76485,51405],{"class":51371},[25,76487,51378],{"class":244},[25,76489,76490,76492,76494],{"class":27,"line":91},[25,76491,1153],{"class":244},[25,76493,51871],{"class":51371},[25,76495,51378],{"class":244},[25,76497,76498,76500,76502],{"class":27,"line":1429},[25,76499,52215],{"class":244},[25,76501,51884],{"class":51371},[25,76503,51378],{"class":244},[25,76505,76506,76508,76510,76512,76514,76516,76519,76521,76523,76525,76527,76529,76532,76534],{"class":27,"line":1441},[25,76507,73824],{"class":244},[25,76509,58318],{"class":31},[25,76511,245],{"class":244},[25,76513,827],{"class":45},[25,76515,1209],{"class":240},[25,76517,76518],{"class":48048},"java",[25,76520,545],{"class":240},[25,76522,827],{"class":45},[25,76524,801],{"class":244},[25,76526,75316],{"class":31},[25,76528,245],{"class":244},[25,76530,76531],{"class":45},"'java'",[25,76533,75826],{"class":244},[25,76535,75327],{"class":302},[25,76537,76538,76540,76542,76544,76546,76548,76550,76552,76554,76556,76558,76560,76563,76565],{"class":27,"line":1723},[25,76539,73824],{"class":244},[25,76541,58318],{"class":31},[25,76543,245],{"class":244},[25,76545,827],{"class":45},[25,76547,1209],{"class":240},[25,76549,76518],{"class":48048},[25,76551,545],{"class":240},[25,76553,827],{"class":45},[25,76555,801],{"class":244},[25,76557,75316],{"class":31},[25,76559,245],{"class":244},[25,76561,76562],{"class":45},"'Java'",[25,76564,75826],{"class":244},[25,76566,75450],{"class":302},[25,76568,76569],{"class":27,"line":1728},[25,76570,76571],{"class":302},"    \u002F\u002F 不区分大小写、\n",[25,76573,76574,76576,76578,76580,76582,76584,76586,76588,76590,76592,76594,76596,76598,76600,76602],{"class":27,"line":1734},[25,76575,73824],{"class":244},[25,76577,58318],{"class":31},[25,76579,245],{"class":244},[25,76581,827],{"class":45},[25,76583,1209],{"class":240},[25,76585,76518],{"class":48048},[25,76587,545],{"class":240},[25,76589,827],{"class":45},[25,76591,684],{"class":240},[25,76593,801],{"class":244},[25,76595,75316],{"class":31},[25,76597,245],{"class":244},[25,76599,76562],{"class":45},[25,76601,75826],{"class":244},[25,76603,75327],{"class":302},[25,76605,76606,76608,76610,76612],{"class":27,"line":1739},[25,76607,11331],{"class":240},[25,76609,73990],{"class":35},[25,76611,13674],{"class":240},[25,76613,76614],{"class":45}," 'java是一门编程语言，学完java工资很高'\n",[25,76616,76617,76619,76622,76624,76627,76630,76632,76634,76636,76638,76641,76643,76646],{"class":27,"line":1753},[25,76618,11331],{"class":240},[25,76620,76621],{"class":35}," result",[25,76623,13674],{"class":240},[25,76625,76626],{"class":244}," str.",[25,76628,76629],{"class":31},"replace",[25,76631,245],{"class":244},[25,76633,827],{"class":45},[25,76635,76518],{"class":48048},[25,76637,827],{"class":45},[25,76639,76640],{"class":240},"ig",[25,76642,12545],{"class":244},[25,76644,76645],{"class":45},"'前端'",[25,76647,251],{"class":244},[25,76649,76650,76652,76654],{"class":27,"line":1758},[25,76651,73824],{"class":244},[25,76653,58318],{"class":31},[25,76655,76656],{"class":244},"(result)\n",[25,76658,76659,76661,76663],{"class":27,"line":1764},[25,76660,52488],{"class":244},[25,76662,51884],{"class":51371},[25,76664,51378],{"class":244},[25,76666,76667,76669,76671],{"class":27,"line":1785},[25,76668,51856],{"class":244},[25,76670,51871],{"class":51371},[25,76672,51378],{"class":244},[25,76674,76675,76677,76679],{"class":27,"line":1790},[25,76676,51856],{"class":244},[25,76678,50706],{"class":51371},[25,76680,51378],{"class":244},[159,76682,76683],{},"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":20,"searchDepth":39,"depth":39,"links":76685},[76686,76696,76708,76725,76732,76740],{"id":53431,"depth":39,"text":53432,"children":76687},[76688,76689,76690,76691,76692,76693,76694,76695],{"id":53435,"depth":51,"text":53436},{"id":53468,"depth":51,"text":53469},{"id":53507,"depth":51,"text":53508},{"id":53665,"depth":51,"text":53666},{"id":53713,"depth":51,"text":53714},{"id":53850,"depth":51,"text":53851},{"id":54172,"depth":51,"text":54173},{"id":57160,"depth":51,"text":57161},{"id":57188,"depth":39,"text":57189,"children":76697},[76698,76699,76700,76701,76702,76703,76704,76705,76706,76707],{"id":57192,"depth":51,"text":57193},{"id":57215,"depth":51,"text":57216},{"id":58130,"depth":51,"text":58131},{"id":58820,"depth":51,"text":58821},{"id":59102,"depth":51,"text":59103},{"id":63263,"depth":51,"text":63264},{"id":63433,"depth":51,"text":63434},{"id":63561,"depth":51,"text":63562},{"id":63586,"depth":51,"text":63587},{"id":64975,"depth":51,"text":64976},{"id":66128,"depth":39,"text":66129,"children":76709},[76710,76711,76712,76713,76714,76715,76716,76717,76718,76719,76720,76721,76722,76723,76724],{"id":66132,"depth":51,"text":66133},{"id":66786,"depth":51,"text":66787},{"id":68481,"depth":51,"text":68482},{"id":68522,"depth":51,"text":68523},{"id":68564,"depth":51,"text":68565},{"id":68578,"depth":51,"text":68579},{"id":68627,"depth":51,"text":68628},{"id":68639,"depth":51,"text":68640},{"id":68654,"depth":51,"text":68655},{"id":68690,"depth":51,"text":68691},{"id":68771,"depth":51,"text":68772},{"id":68899,"depth":51,"text":68900},{"id":68911,"depth":51,"text":68912},{"id":68930,"depth":51,"text":68931},{"id":71041,"depth":51,"text":71042},{"id":71060,"depth":39,"text":71061,"children":76726},[76727,76728,76729,76730,76731],{"id":71081,"depth":51,"text":71082},{"id":71101,"depth":51,"text":71102},{"id":71150,"depth":51,"text":71151},{"id":71275,"depth":51,"text":71276},{"id":71456,"depth":51,"text":71457},{"id":71474,"depth":39,"text":71475,"children":76733},[76734,76735,76736,76737,76738,76739],{"id":71489,"depth":51,"text":71490},{"id":71548,"depth":51,"text":71549},{"id":71572,"depth":51,"text":71573},{"id":71892,"depth":51,"text":71893},{"id":71924,"depth":51,"text":71925},{"id":71947,"depth":51,"text":71948},{"id":75015,"depth":39,"text":75016,"children":76741},[76742,76743],{"id":75049,"depth":51,"text":75050},{"id":75088,"depth":51,"text":75089},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53403,"description":164},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76750,"title":76751,"body":76752,"description":164,"extension":165,"meta":92889,"navigation":167,"path":92890,"seo":92891,"stem":92892,"__hash__":92893},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76753,"toc":92825},[76754,76757,76760,76764,76768,76773,76778,76789,76793,76798,76801,76805,76808,76813,76817,76821,76824,76829,76832,76836,76839,76847,76850,76854,76859,76864,76867,76871,76876,76881,76884,76888,76893,76896,76901,76904,76909,76912,76917,76922,76925,76928,76932,76937,76942,76945,76949,76953,76956,76959,76962,76966,76970,76975,76980,76983,76987,76992,76997,77000,77003,77006,77009,77012,77015,77018,77021,77024,77029,77033,77038,77043,77046,77049,77052,77055,77058,77061,77064,77067,77071,77075,77078,77081,77084,77089,77091,77094,77097,77100,77103,77106,77109,77112,77115,77118,77121,77124,77127,77130,77135,77140,77145,77148,77152,77155,77160,77164,77166,77177,77182,77283,77286,77289,77292,77295,77298,77301,77304,77307,77309,77312,77315,77318,77321,77324,77326,77329,77332,77335,77338,77341,77344,77346,77349,77351,77353,77356,77360,77364,77367,77370,77373,77376,77379,77382,77385,77388,77391,77396,77516,77519,77522,77527,77530,77533,77536,77539,77544,77547,77550,77553,77556,77561,77564,77664,77729,77803,77807,77810,77813,77817,77820,77834,77863,77866,77869,77872,77875,77878,77881,77884,77886,77889,77892,77895,77898,77902,77907,77911,77916,77991,77994,78177,78180,78183,78186,78189,78192,78194,78197,78200,78203,78206,78209,78212,78214,78218,78221,78226,78229,78232,78235,78238,78240,78245,78248,78251,78254,78257,78259,78264,78267,78270,78272,78274,78277,78281,78284,78287,78292,78295,78298,78301,78351,78356,78360,78365,78368,78437,78440,78449,78453,78458,78461,78464,78472,78475,78492,80294,80298,80302,80307,80310,80314,80320,80326,80478,80483,80488,80491,80494,80497,80500,80503,80506,80509,80512,80515,80518,80521,80524,80529,80533,80536,80547,80551,80556,80559,80562,80565,80568,80571,80573,80576,80579,80582,80585,80587,80604,80607,80611,80614,80619,80624,80627,80630,80634,80637,80640,80649,80652,80656,80659,80664,80669,80736,80740,80743,80746,80751,80756,80842,80847,80851,80854,80857,80872,80875,80880,80884,80889,80998,81001,81012,81162,81166,81171,81280,81284,81289,81294,81299,81302,81309,81329,81365,81529,81534,81537,81542,81549,81552,81555,81558,81617,81673,81729,81733,81738,82053,82056,82060,82063,82068,82177,82182,82186,82191,82195,82266,82270,82272,82275,82278,82316,82592,82596,82613,82679,82713,82717,82720,82725,82754,82761,82770,82775,82790,82795,82804,82807,82944,82948,83010,83014,83019,83264,83268,83273,83276,83279,83282,83285,83289,83294,84875,84879,84883,84889,84892,84897,84901,84904,84909,84912,84923,84927,84932,84936,84941,84946,84949,84954,84958,84962,84965,84970,84975,84978,84981,84984,85106,85111,85213,85216,85219,85223,85228,85400,85405,85409,85412,85417,85483,85488,85491,85622,85625,85630,85633,85636,85727,85732,85735,85738,85741,85744,85749,85754,85757,85762,85767,85772,85776,85779,85782,85787,85792,85797,85802,85856,85859,85862,85867,85870,85873,85878,85883,85888,85892,85897,85911,85916,85919,85924,85928,85933,85938,85943,85948,85953,85958,85963,85968,85971,85975,85980,85983,85986,85989,85994,85999,86002,86005,86009,86012,86015,86020,86025,86030,86035,86038,86043,86048,86109,86114,86117,86122,87363,87368,87372,87376,87381,87384,87389,87394,87397,87402,87404,87409,87413,87416,87419,87430,87434,87439,87444,87499,87504,87509,87514,87725,87730,87734,87739,87742,87744,87747,87750,88197,88202,88209,88215,88218,88221,88485,88490,88494,88759,88764,88768,88773,88778,88783,88788,89119,89122,89127,89132,89135,89139,89143,89148,89153,89158,89163,89168,89173,89177,89180,89185,89190,89193,89267,89272,89277,89282,89284,89287,89657,89662,89667,89672,89675,89678,89780,89785,89790,89893,89897,89902,89906,89910,89915,89920,89923,89928,89931,89934,90327,90332,90335,90338,90341,90344,90864,90868,90873,90878,90883,90886,90891,90894,90897,91279,91284,91286,91288,91291,91294,91806,91810,91871,91874,91877,91880,91884,91887,91892,91897,92822],[10,76755,76751],{"id":76756},"_4js进阶",[99,76758,76759],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[182,76761,76763],{"id":76762},"_41-作用域","4.1 作用域",[210,76765,76767],{"id":76766},"_411-局部作用域","4.1.1 局部作用域",[99,76769,76770],{},[155,76771],{"alt":20,"src":76772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[99,76774,76775],{},[155,76776],{"alt":20,"src":76777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[103,76779,76780,76783,76786],{},[106,76781,76782],{},"函数作用域在函数内部",[106,76784,76785],{},"块级作用域在{}",[106,76787,76788],{},"对象的那个{}不是作用域，不是块作用域",[210,76790,76792],{"id":76791},"_412-全局作用域","4.1.2 全局作用域",[99,76794,76795],{},[155,76796],{"alt":20,"src":76797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[99,76799,76800],{},"window.a=10不要这样写",[210,76802,76804],{"id":76803},"_413-作用域链","4.1.3 作用域链",[99,76806,76807],{},"变量查找机制",[99,76809,76810],{},[155,76811],{"alt":20,"src":76812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[182,76814,76816],{"id":76815},"_42-垃圾回收机制","4.2 垃圾回收机制",[210,76818,76820],{"id":76819},"_421-大体介绍","4.2.1 大体介绍",[99,76822,76823],{},"垃圾回收机制(Garbage Collection) 简称 GC",[99,76825,76826],{},[155,76827],{"alt":20,"src":76828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[99,76830,76831],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[210,76833,76835],{"id":76834},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[99,76837,76838],{},"堆栈空间分配区别：",[194,76840,76841,76844],{},[106,76842,76843],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[106,76845,76846],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[99,76848,76849],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22108,76851,76853],{"id":76852},"_4221-引用计数","4.2.2.1 引用计数",[99,76855,76856],{},[155,76857],{"alt":20,"src":76858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[99,76860,76861],{},[155,76862],{"alt":20,"src":76863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[99,76865,76866],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22108,76868,76870],{"id":76869},"_4222-标记清除法","4.2.2.2 标记清除法",[99,76872,76873],{},[155,76874],{"alt":20,"src":76875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[99,76877,76878],{},[155,76879],{"alt":20,"src":76880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[99,76882,76883],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[182,76885,76887],{"id":76886},"_43-闭包","4.3 闭包",[99,76889,76890],{},[155,76891],{"alt":20,"src":76892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[99,76894,76895],{},"闭包：内层函数+外层函数的变量",[99,76897,76898],{},[155,76899],{"alt":20,"src":76900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[99,76902,76903],{},"closure就是闭包",[99,76905,76906],{},[155,76907],{"alt":20,"src":76908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[99,76910,76911],{},"内层函数必须包含外层函数的变量才是闭包",[99,76913,76914],{},[155,76915],{"alt":20,"src":76916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[99,76918,76919],{},[155,76920],{"alt":20,"src":76921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[99,76923,76924],{},"闭包可能会引起内存泄漏",[99,76926,76927],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[182,76929,76931],{"id":76930},"_44-变量提升","4.4 变量提升",[99,76933,76934],{},[155,76935],{"alt":20,"src":76936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[99,76938,76939],{},[155,76940],{"alt":20,"src":76941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[99,76943,76944],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[182,76946,76948],{"id":76947},"_45-函数进阶","4.5 函数进阶",[210,76950,76952],{"id":76951},"_451-函数提升","4.5.1 函数提升",[99,76954,76955],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[99,76957,76958],{},"只提升函数声明，不提升函数调用",[51884,76960,76961],{},"\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",[210,76963,76965],{"id":76964},"_452-函数参数","4.5.2 函数参数",[22108,76967,76969],{"id":76968},"_4521-动态参数","4.5.2.1 动态参数",[99,76971,76972],{},[155,76973],{"alt":20,"src":76974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[99,76976,76977],{},[155,76978],{"alt":20,"src":76979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[99,76981,76982],{},"箭头函数里边没有arguments",[22108,76984,76986],{"id":76985},"_4522-剩余参数","4.5.2.2 剩余参数",[99,76988,76989],{},[155,76990],{"alt":20,"src":76991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[99,76993,76994],{},[155,76995],{"alt":20,"src":76996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[99,76998,76999],{},"剩余参数使用的时候不需要写...",[99,77001,77002],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[99,77004,77005],{},"  function getSum(a,b,...arr) {",[99,77007,77008],{},"  console.log(11)",[99,77010,77011],{},"  }",[99,77013,77014],{},"  getSum(1,2,3,4)",[99,77016,77017],{},"  将1传给a，2传给b，剩下的传给剩余参数",[99,77019,77020],{},"  getSum(1,2)",[99,77022,77023],{},"  将1传给a，2传给b，剩余参数为一个空数组",[99,77025,77026],{},[155,77027],{"alt":20,"src":77028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22108,77030,77032],{"id":77031},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[99,77034,77035],{},[155,77036],{"alt":20,"src":77037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[99,77039,77040],{},[155,77041],{"alt":20,"src":77042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[99,77044,77045],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[99,77047,77048],{},"展开运算符可以用于数组之间的合并：",[99,77050,77051],{},"const arr1 = [1, 2, 3]",[99,77053,77054],{},"const arr2 = [3, 4, 5]",[99,77056,77057],{},"const arr = [...arr1, ...arr2]",[99,77059,77060],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[99,77062,77063],{},"剩余参数：函数参数使用，得到真数组",[99,77065,77066],{},"展开运算符：数组中使用，数组展开",[210,77068,77070],{"id":77069},"_453-箭头函数","4.5.3 箭头函数",[22108,77072,77074],{"id":77073},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[99,77076,77077],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[99,77079,77080],{},"它不是万能的！！！",[99,77082,77083],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[99,77085,77086],{},[155,77087],{"alt":20,"src":77088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[99,77090,274],{},[99,77092,77093],{},"① 只有一个形参的时候，可以省略小括号：",[99,77095,77096],{},"const fn=x=>{console.log(x)}",[99,77098,77099],{},"② 只有一行代码时可以省略大括号：",[99,77101,77102],{},"const fn=x=>console.log(11)",[99,77104,77105],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[99,77107,77108],{},"const fn=x=>x+x",[99,77110,77111],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[99,77113,77114],{},"⑤ 阻止表单默认提交：",[99,77116,77117],{},"const form = document.querySelector('form')",[99,77119,77120],{},"form.addEventListener('click', ev => ev.preventDefault())",[99,77122,77123],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[99,77125,77126],{},"const fn=uname=>({uname:uname})",[99,77128,77129],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[99,77131,77132],{},[155,77133],{"alt":20,"src":77134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[99,77136,77137],{},[155,77138],{"alt":20,"src":77139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[99,77141,77142],{},[155,77143],{"alt":20,"src":77144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[99,77146,77147],{},"一定不要忘记用()，有()就理解为自带return",[22108,77149,77151],{"id":77150},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[99,77153,77154],{},"箭头函数是没有动态参数的arguments",[99,77156,77157],{},[155,77158],{"alt":20,"src":77159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22108,77161,77163],{"id":77162},"_4533-箭头函数this","4.5.3.3 箭头函数this",[99,77165,11442],{},[194,77167,77168,77171,77174],{},[106,77169,77170],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[106,77172,77173],{},"事件回调函数使用箭头函数时，this 为全局的 window",[106,77175,77176],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[99,77178,77179],{},[155,77180],{"alt":20,"src":77181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[15,77183,77185],{"className":53138,"code":77184,"language":53140,"meta":20,"style":20},"  \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",[22,77186,77187,77195,77200,77205,77210,77215,77220,77224,77229,77233,77237,77242,77247,77252,77256,77260,77265,77270,77275],{"__ignoreMap":20},[25,77188,77189,77191,77193],{"class":27,"line":28},[25,77190,52215],{"class":244},[25,77192,51884],{"class":51371},[25,77194,51378],{"class":244},[25,77196,77197],{"class":27,"line":39},[25,77198,77199],{"class":244},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[25,77201,77202],{"class":27,"line":51},[25,77203,77204],{"class":244},"    console.log(this) \u002F\u002F指向window\n",[25,77206,77207],{"class":27,"line":59},[25,77208,77209],{"class":244},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[25,77211,77212],{"class":27,"line":67},[25,77213,77214],{"class":244},"    function fn() {\n",[25,77216,77217],{"class":27,"line":75},[25,77218,77219],{"class":244},"      console.log(this)  \u002F\u002F指向window\n",[25,77221,77222],{"class":27,"line":83},[25,77223,2297],{"class":244},[25,77225,77226],{"class":27,"line":91},[25,77227,77228],{"class":244},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[25,77230,77231],{"class":27,"line":1429},[25,77232,2510],{"emptyLinePlaceholder":167},[25,77234,77235],{"class":27,"line":1441},[25,77236,71594],{"class":244},[25,77238,77239],{"class":27,"line":1723},[25,77240,77241],{"class":244},"      name: 'andy',\n",[25,77243,77244],{"class":27,"line":1728},[25,77245,77246],{"class":244},"      sayHai: function () {\n",[25,77248,77249],{"class":27,"line":1734},[25,77250,77251],{"class":244},"        console.log(this)\n",[25,77253,77254],{"class":27,"line":1739},[25,77255,52469],{"class":244},[25,77257,77258],{"class":27,"line":1753},[25,77259,2297],{"class":244},[25,77261,77262],{"class":27,"line":1758},[25,77263,77264],{"class":244},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[25,77266,77267],{"class":27,"line":1764},[25,77268,77269],{"class":244},"    \u002F\u002F 2.箭头函数的this\n",[25,77271,77272],{"class":27,"line":1785},[25,77273,77274],{"class":244},"    const fn = () => console.log(this)\n",[25,77276,77277,77279,77281],{"class":27,"line":1790},[25,77278,52488],{"class":244},[25,77280,51884],{"class":51371},[25,77282,51378],{"class":244},[99,77284,77285],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[99,77287,77288],{},"const fn = () => console.log(this)",[99,77290,77291],{},"fn() \u002F\u002F指向window",[99,77293,77294],{},"\u002F\u002F 3.对象方法箭头函数 this",[99,77296,77297],{},"①",[99,77299,77300],{},"const obj = {",[99,77302,77303],{},"uname: 'pink老师',",[99,77305,77306],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[99,77308,1189],{},[99,77310,77311],{},"调用对象里边的函数",[99,77313,77314],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[99,77316,77317],{},"obj.sayHai()",[99,77319,77320],{},"②",[99,77322,77323],{},"const obj1 = {",[99,77325,77303],{},[99,77327,77328],{},"sayHai: function () {",[99,77330,77331],{},"let i = 10",[99,77333,77334],{},"const count = () => {",[99,77336,77337],{},"console.log(this)",[99,77339,77340],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[99,77342,77343],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[99,77345,1189],{},[99,77347,77348],{},"count()",[99,77350,1189],{},[99,77352,1189],{},[99,77354,77355],{},"obj1.sayHai()",[182,77357,77359],{"id":77358},"_46-解构赋值","4.6 解构赋值",[210,77361,77363],{"id":77362},"_461-数组解构","4.6.1 数组解构",[99,77365,77366],{},"以前要是使用数组中的值的话：",[99,77368,77369],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[99,77371,77372],{},"const arr=[100,60,80]",[99,77374,77375],{},"const max=arr[0]",[99,77377,77378],{},"const min=arr[1]",[99,77380,77381],{},"const avg=arr[2]",[99,77383,77384],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[99,77386,77387],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[99,77389,77390],{},"这个写法就类似于上边的那种用很多const的方法",[99,77392,77393],{},[155,77394],{"alt":20,"src":77395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[15,77397,77399],{"className":50704,"code":77398,"language":50706,"meta":20,"style":20},"①变量之间交换值:\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",[22,77400,77401,77406,77411,77416,77421,77426,77430,77434,77439,77443,77448,77453,77457,77462,77467,77478,77488,77493,77498,77503,77507,77511],{"__ignoreMap":20},[25,77402,77403],{"class":27,"line":28},[25,77404,77405],{"class":244},"①变量之间交换值:\n",[25,77407,77408],{"class":27,"line":39},[25,77409,77410],{"class":244},"let a=1\n",[25,77412,77413],{"class":27,"line":51},[25,77414,77415],{"class":244},"let b=2;\n",[25,77417,77418],{"class":27,"line":59},[25,77419,77420],{"class":244},"必须加这行代码，不然就会报错\n",[25,77422,77423],{"class":27,"line":67},[25,77424,77425],{"class":244},"[b,a]=[a,b]\n",[25,77427,77428],{"class":27,"line":75},[25,77429,2510],{"emptyLinePlaceholder":167},[25,77431,77432],{"class":27,"line":83},[25,77433,2510],{"emptyLinePlaceholder":167},[25,77435,77436],{"class":27,"line":91},[25,77437,77438],{"class":244},"可以写成下面的方式：\n",[25,77440,77441],{"class":27,"line":1429},[25,77442,77410],{"class":244},[25,77444,77445],{"class":27,"line":1441},[25,77446,77447],{"class":244},"let b=2\n",[25,77449,77450],{"class":27,"line":1723},[25,77451,77452],{"class":244},";[b,a]=[a,b]\n",[25,77454,77455],{"class":27,"line":1728},[25,77456,2510],{"emptyLinePlaceholder":167},[25,77458,77459],{"class":27,"line":1734},[25,77460,77461],{"class":244},"②排序\n",[25,77463,77464],{"class":27,"line":1739},[25,77465,77466],{"class":244},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[25,77468,77469,77472,77475],{"class":27,"line":1753},[25,77470,77471],{"class":244},"for (let i = 0; i ",[25,77473,1153],{"class":77474},"s7hpK",[25,77476,77477],{"class":244}," arr1.length; i++) {\n",[25,77479,77480,77483,77485],{"class":27,"line":1758},[25,77481,77482],{"class":244},"   for (let j = 0; j ",[25,77484,1153],{"class":77474},[25,77486,77487],{"class":244}," arr1.length - 1; j++) {\n",[25,77489,77490],{"class":27,"line":1764},[25,77491,77492],{"class":244},"      if (arr1[j] > arr1[j + 1]) {\n",[25,77494,77495],{"class":27,"line":1785},[25,77496,77497],{"class":244},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[25,77499,77500],{"class":27,"line":1790},[25,77501,77502],{"class":244},"       }\n",[25,77504,77505],{"class":27,"line":1804},[25,77506,4419],{"class":244},[25,77508,77509],{"class":27,"line":1809},[25,77510,1676],{"class":244},[25,77512,77513],{"class":27,"line":1838},[25,77514,77515],{"class":244},"console.log(arr1)\n",[99,77517,77518],{},"数组解构的细节：",[99,77520,77521],{},"①变量多，单元值少",[99,77523,77524],{},[155,77525],{"alt":20,"src":77526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[99,77528,77529],{},"防止出现undefined的方法：",[99,77531,77532],{},"const [a=0,b=0] =[1]",[99,77534,77535],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[99,77537,77538],{},"②变量少，单元值多",[99,77540,77541],{},[155,77542],{"alt":20,"src":77543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[99,77545,77546],{},"此时可以使用剩余参数来接收多余的值",[99,77548,77549],{},"const [a,b,...c]=[1,2,3,4]",[99,77551,77552],{},"console.log(c) 输出[3,4]",[99,77554,77555],{},"③可以按需导入，忽略某些返回值",[99,77557,77558],{},[155,77559],{"alt":20,"src":77560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[99,77562,77563],{},"④支持多维数组的结构",[15,77565,77569],{"className":77566,"code":77567,"language":77568,"meta":20,"style":20},"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",[22,77570,77571,77599,77615,77630,77645],{"__ignoreMap":20},[25,77572,77573,77575,77577,77579,77581,77583,77585,77587,77590,77592,77594,77596],{"class":27,"line":28},[25,77574,6902],{"class":240},[25,77576,51904],{"class":244},[25,77578,290],{"class":240},[25,77580,52297],{"class":244},[25,77582,460],{"class":35},[25,77584,12545],{"class":244},[25,77586,321],{"class":35},[25,77588,77589],{"class":244},", [",[25,77591,315],{"class":35},[25,77593,12545],{"class":244},[25,77595,536],{"class":35},[25,77597,77598],{"class":244},"]]\n",[25,77600,77601,77604,77606,77608,77610,77612],{"class":27,"line":39},[25,77602,77603],{"class":244},"console.",[25,77605,58318],{"class":31},[25,77607,3961],{"class":244},[25,77609,434],{"class":35},[25,77611,4326],{"class":244},[25,77613,77614],{"class":302},"  \u002F\u002F1\n",[25,77616,77617,77619,77621,77623,77625,77627],{"class":27,"line":51},[25,77618,77603],{"class":244},[25,77620,58318],{"class":31},[25,77622,3961],{"class":244},[25,77624,460],{"class":35},[25,77626,4326],{"class":244},[25,77628,77629],{"class":302},"  \u002F\u002F2\n",[25,77631,77632,77634,77636,77638,77640,77642],{"class":27,"line":59},[25,77633,77603],{"class":244},[25,77635,58318],{"class":31},[25,77637,3961],{"class":244},[25,77639,321],{"class":35},[25,77641,4326],{"class":244},[25,77643,77644],{"class":302},"  \u002F\u002F[3,4]\n",[25,77646,77647,77649,77651,77653,77655,77657,77659,77661],{"class":27,"line":67},[25,77648,77603],{"class":244},[25,77650,58318],{"class":31},[25,77652,3961],{"class":244},[25,77654,321],{"class":35},[25,77656,5011],{"class":244},[25,77658,434],{"class":35},[25,77660,4326],{"class":244},[25,77662,77663],{"class":302},"  \u002F\u002F3\n",[15,77665,77667],{"className":77566,"code":77666,"language":77568,"meta":20,"style":20},"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",[22,77668,77669,77696,77707,77718],{"__ignoreMap":20},[25,77670,77671,77673,77676,77678,77680,77682,77684,77686,77688,77690,77692,77694],{"class":27,"line":28},[25,77672,6902],{"class":240},[25,77674,77675],{"class":244}," [a, b, c] ",[25,77677,290],{"class":240},[25,77679,52297],{"class":244},[25,77681,460],{"class":35},[25,77683,12545],{"class":244},[25,77685,321],{"class":35},[25,77687,77589],{"class":244},[25,77689,315],{"class":35},[25,77691,12545],{"class":244},[25,77693,536],{"class":35},[25,77695,77598],{"class":244},[25,77697,77698,77700,77702,77705],{"class":27,"line":39},[25,77699,77603],{"class":244},[25,77701,58318],{"class":31},[25,77703,77704],{"class":244},"(a)",[25,77706,77614],{"class":302},[25,77708,77709,77711,77713,77716],{"class":27,"line":51},[25,77710,77603],{"class":244},[25,77712,58318],{"class":31},[25,77714,77715],{"class":244},"(b)",[25,77717,77629],{"class":302},[25,77719,77720,77722,77724,77727],{"class":27,"line":59},[25,77721,77603],{"class":244},[25,77723,58318],{"class":31},[25,77725,77726],{"class":244},"(c)",[25,77728,77644],{"class":302},[15,77730,77732],{"className":77566,"code":77731,"language":77568,"meta":20,"style":20},"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",[22,77733,77734,77761,77771,77781,77791],{"__ignoreMap":20},[25,77735,77736,77738,77741,77743,77745,77747,77749,77751,77753,77755,77757,77759],{"class":27,"line":28},[25,77737,6902],{"class":240},[25,77739,77740],{"class":244}," [a, b, [c, d]] ",[25,77742,290],{"class":240},[25,77744,52297],{"class":244},[25,77746,460],{"class":35},[25,77748,12545],{"class":244},[25,77750,321],{"class":35},[25,77752,77589],{"class":244},[25,77754,315],{"class":35},[25,77756,12545],{"class":244},[25,77758,536],{"class":35},[25,77760,77598],{"class":244},[25,77762,77763,77765,77767,77769],{"class":27,"line":39},[25,77764,77603],{"class":244},[25,77766,58318],{"class":31},[25,77768,77704],{"class":244},[25,77770,77614],{"class":302},[25,77772,77773,77775,77777,77779],{"class":27,"line":51},[25,77774,77603],{"class":244},[25,77776,58318],{"class":31},[25,77778,77715],{"class":244},[25,77780,77629],{"class":302},[25,77782,77783,77785,77787,77789],{"class":27,"line":59},[25,77784,77603],{"class":244},[25,77786,58318],{"class":31},[25,77788,77726],{"class":244},[25,77790,77663],{"class":302},[25,77792,77793,77795,77797,77800],{"class":27,"line":67},[25,77794,77603],{"class":244},[25,77796,58318],{"class":31},[25,77798,77799],{"class":244},"(d)",[25,77801,77802],{"class":302},"  \u002F\u002F4\n",[210,77804,77806],{"id":77805},"_462-对象解构","4.6.2 对象解构",[99,77808,77809],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[99,77811,77812],{},"用的非常非常多！！！！！！",[22108,77814,77816],{"id":77815},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[99,77818,77819],{},"基本语法：",[194,77821,77822,77825,77828,77831],{},[106,77823,77824],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[106,77826,77827],{},"对象属性的值将被赋值给与属性名相同的变量",[106,77829,77830],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[106,77832,77833],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[15,77835,77837],{"className":50704,"code":77836,"language":50706,"meta":20,"style":20},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[22,77838,77839,77844,77849,77854,77858],{"__ignoreMap":20},[25,77840,77841],{"class":27,"line":28},[25,77842,77843],{"class":244},"const obj = {\n",[25,77845,77846],{"class":27,"line":39},[25,77847,77848],{"class":244},"   uname: 'pink老师',\n",[25,77850,77851],{"class":27,"line":51},[25,77852,77853],{"class":244},"   age: 18,\n",[25,77855,77856],{"class":27,"line":59},[25,77857,1676],{"class":244},[25,77859,77860],{"class":27,"line":67},[25,77861,77862],{"class":244},"const { uname, age } = obj\n",[99,77864,77865],{},"上方代码这样写等价于：",[99,77867,77868],{},"const uname等价于obj.uname",[99,77870,77871],{},"变量名可以重新改名：",[99,77873,77874],{},"const uname='red老师'",[99,77876,77877],{},"const user={",[99,77879,77880],{},"  uname:'pink老师',",[99,77882,77883],{},"  age:18",[99,77885,1189],{},[99,77887,77888],{},"const {uname,age}=user",[99,77890,77891],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[99,77893,77894],{},"const {旧变量名：新变量名}=对象",[99,77896,77897],{},"const {uname:username,age}=user",[22108,77899,77901],{"id":77900},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[99,77903,77904],{},[155,77905],{"alt":20,"src":77906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22108,77908,77910],{"id":77909},"_4623-多级对象解构","4.6.2.3 多级对象解构",[99,77912,77913],{},[155,77914],{"alt":20,"src":77915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[15,77917,77919],{"className":53138,"code":77918,"language":53140,"meta":20,"style":20},"  \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",[22,77920,77921,77929,77934,77939,77944,77949,77954,77959,77964,77969,77973,77978,77983],{"__ignoreMap":20},[25,77922,77923,77925,77927],{"class":27,"line":28},[25,77924,52215],{"class":244},[25,77926,51884],{"class":51371},[25,77928,51378],{"class":244},[25,77930,77931],{"class":27,"line":39},[25,77932,77933],{"class":244},"    const pig = {\n",[25,77935,77936],{"class":27,"line":51},[25,77937,77938],{"class":244},"      name: '佩奇',\n",[25,77940,77941],{"class":27,"line":59},[25,77942,77943],{"class":244},"      family: {\n",[25,77945,77946],{"class":27,"line":67},[25,77947,77948],{"class":244},"        mother: '猪妈妈',\n",[25,77950,77951],{"class":27,"line":75},[25,77952,77953],{"class":244},"        father: '猪爸爸',\n",[25,77955,77956],{"class":27,"line":83},[25,77957,77958],{"class":244},"        sister: '乔治'\n",[25,77960,77961],{"class":27,"line":91},[25,77962,77963],{"class":244},"      },\n",[25,77965,77966],{"class":27,"line":1429},[25,77967,77968],{"class":244},"      age: 6\n",[25,77970,77971],{"class":27,"line":1441},[25,77972,2297],{"class":244},[25,77974,77975],{"class":27,"line":1723},[25,77976,77977],{"class":244},"    \u002F\u002F 多级对象解构\n",[25,77979,77980],{"class":27,"line":1728},[25,77981,77982],{"class":244},"    const { name, family: { mother, father, sister }, age } = pig\n",[25,77984,77985,77987,77989],{"class":27,"line":1734},[25,77986,52488],{"class":244},[25,77988,51884],{"class":51371},[25,77990,51378],{"class":244},[99,77992,77993],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[15,77995,77998],{"className":77996,"code":77997,"language":76518,"meta":20,"style":20},"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",[22,77999,78000,78005,78016,78028,78040,78049,78053,78064,78076,78086,78091,78095,78105,78116,78125,78129,78133,78144,78155,78164,78168,78173],{"__ignoreMap":20},[25,78001,78002],{"class":27,"line":28},[25,78003,78004],{"class":302},"    \u002F\u002F 这是后台传递过来的数据\n",[25,78006,78007,78009,78012,78014],{"class":27,"line":39},[25,78008,11331],{"class":240},[25,78010,78011],{"class":244}," msg ",[25,78013,290],{"class":240},[25,78015,15682],{"class":244},[25,78017,78018,78021,78023,78026],{"class":27,"line":51},[25,78019,78020],{"class":45},"      \"code\"",[25,78022,1102],{"class":240},[25,78024,78025],{"class":35}," 200",[25,78027,31537],{"class":244},[25,78029,78030,78033,78035,78038],{"class":27,"line":59},[25,78031,78032],{"class":45},"      \"msg\"",[25,78034,1102],{"class":240},[25,78036,78037],{"class":45}," \"获取新闻列表成功\"",[25,78039,31537],{"class":244},[25,78041,78042,78045,78047],{"class":27,"line":67},[25,78043,78044],{"class":45},"      \"data\"",[25,78046,1102],{"class":240},[25,78048,55518],{"class":244},[25,78050,78051],{"class":27,"line":75},[25,78052,2620],{"class":244},[25,78054,78055,78058,78060,78062],{"class":27,"line":83},[25,78056,78057],{"class":45},"          \"id\"",[25,78059,1102],{"class":240},[25,78061,25225],{"class":35},[25,78063,31537],{"class":244},[25,78065,78066,78069,78071,78074],{"class":27,"line":91},[25,78067,78068],{"class":45},"          \"title\"",[25,78070,1102],{"class":240},[25,78072,78073],{"class":45}," \"5G商用自己，三大运用商收入下降\"",[25,78075,31537],{"class":244},[25,78077,78078,78081,78083],{"class":27,"line":1429},[25,78079,78080],{"class":45},"          \"count\"",[25,78082,1102],{"class":240},[25,78084,78085],{"class":35}," 58\n",[25,78087,78088],{"class":27,"line":1441},[25,78089,78090],{"class":244},"        },\n",[25,78092,78093],{"class":27,"line":1723},[25,78094,2620],{"class":244},[25,78096,78097,78099,78101,78103],{"class":27,"line":1728},[25,78098,78057],{"class":45},[25,78100,1102],{"class":240},[25,78102,14865],{"class":35},[25,78104,31537],{"class":244},[25,78106,78107,78109,78111,78114],{"class":27,"line":1734},[25,78108,78068],{"class":45},[25,78110,1102],{"class":240},[25,78112,78113],{"class":45}," \"国际媒体头条速览\"",[25,78115,31537],{"class":244},[25,78117,78118,78120,78122],{"class":27,"line":1739},[25,78119,78080],{"class":45},[25,78121,1102],{"class":240},[25,78123,78124],{"class":35}," 56\n",[25,78126,78127],{"class":27,"line":1753},[25,78128,78090],{"class":244},[25,78130,78131],{"class":27,"line":1758},[25,78132,2620],{"class":244},[25,78134,78135,78137,78139,78142],{"class":27,"line":1764},[25,78136,78057],{"class":45},[25,78138,1102],{"class":240},[25,78140,78141],{"class":35}," 3",[25,78143,31537],{"class":244},[25,78145,78146,78148,78150,78153],{"class":27,"line":1785},[25,78147,78068],{"class":45},[25,78149,1102],{"class":240},[25,78151,78152],{"class":45}," \"乌克兰和俄罗斯持续冲突\"",[25,78154,31537],{"class":244},[25,78156,78157,78159,78161],{"class":27,"line":1790},[25,78158,78080],{"class":45},[25,78160,1102],{"class":240},[25,78162,78163],{"class":35}," 1669\n",[25,78165,78166],{"class":27,"line":1804},[25,78167,78090],{"class":244},[25,78169,78170],{"class":27,"line":1809},[25,78171,78172],{"class":244},"      ]\n",[25,78174,78175],{"class":27,"line":1838},[25,78176,2297],{"class":244},[99,78178,78179],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[99,78181,78182],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[99,78184,78185],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[99,78187,78188],{},"function({data}) {",[99,78190,78191],{},"console.log(data)",[99,78193,1189],{},[99,78195,78196],{},"render(msg)",[99,78198,78199],{},"实参传递给形参的时候解构了",[99,78201,78202],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[99,78204,78205],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[99,78207,78208],{},"function render({data:mydata}) {",[99,78210,78211],{},"  console.log(data)",[99,78213,1189],{},[210,78215,78217],{"id":78216},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[99,78219,78220],{},"有两种情况：一个是数组结构，一个是立即执行函数",[194,78222,78223],{},[106,78224,78225],{},"如果对一个数组进行遍历，有两种方式：",[99,78227,78228],{},"①法1",[99,78230,78231],{},"const arr=[1,2,3]",[99,78233,78234],{},"arr.map(function(item,index) {",[99,78236,78237],{},"  console.log(item)",[99,78239,52535],{},[99,78241,78242],{},[155,78243],{"alt":20,"src":78244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[99,78246,78247],{},"②法2",[99,78249,78250],{},"const str='pink'",[99,78252,78253],{},"[1,2,3].map(function(item,index) {",[99,78255,78256],{},"console.log(item)",[99,78258,52535],{},[99,78260,78261],{},[155,78262],{"alt":20,"src":78263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[99,78265,78266],{},"此时会报错",[99,78268,78269],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[99,78271,78256],{},[99,78273,52535],{},[99,78275,78276],{},"内部会当成这样处理，所以我们用分号进行隔开",[182,78278,78280],{"id":78279},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[99,78282,78283],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[99,78285,78286],{},"可以理解为加强版的for循环",[99,78288,78289],{},[155,78290],{"alt":20,"src":78291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[99,78293,78294],{},"里边不写return，不返回数组，只遍历不返回",[99,78296,78297],{},"map是返回数组",[99,78299,78300],{},"forEach主要用于遍历数组对象",[15,78302,78304],{"className":53138,"code":78303,"language":53140,"meta":20,"style":20},"  \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",[22,78305,78306,78314,78319,78324,78329,78334,78338,78343],{"__ignoreMap":20},[25,78307,78308,78310,78312],{"class":27,"line":28},[25,78309,52215],{"class":244},[25,78311,51884],{"class":51371},[25,78313,51378],{"class":244},[25,78315,78316],{"class":27,"line":39},[25,78317,78318],{"class":244},"    const arr = ['red', 'green', 'pink']\n",[25,78320,78321],{"class":27,"line":51},[25,78322,78323],{"class":244},"    const result = arr.forEach(function (item, index) {\n",[25,78325,78326],{"class":27,"line":59},[25,78327,78328],{"class":244},"      console.log(item)\n",[25,78330,78331],{"class":27,"line":67},[25,78332,78333],{"class":244},"      console.log(index)\n",[25,78335,78336],{"class":27,"line":75},[25,78337,33532],{"class":244},[25,78339,78340],{"class":27,"line":83},[25,78341,78342],{"class":244},"    console.log(result)\n",[25,78344,78345,78347,78349],{"class":27,"line":91},[25,78346,52488],{"class":244},[25,78348,51884],{"class":51371},[25,78350,51378],{"class":244},[99,78352,78353],{},[155,78354],{"alt":20,"src":78355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[182,78357,78359],{"id":78358},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[99,78361,78362],{},[155,78363],{"alt":20,"src":78364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[99,78366,78367],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[15,78369,78371],{"className":53138,"code":78370,"language":53140,"meta":20,"style":20},"\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",[22,78372,78373,78381,78389,78394,78399,78403,78407,78412,78416,78421,78429],{"__ignoreMap":20},[25,78374,78375,78377,78379],{"class":27,"line":28},[25,78376,1153],{"class":244},[25,78378,51871],{"class":51371},[25,78380,51378],{"class":244},[25,78382,78383,78385,78387],{"class":27,"line":39},[25,78384,52215],{"class":244},[25,78386,51884],{"class":51371},[25,78388,51378],{"class":244},[25,78390,78391],{"class":27,"line":51},[25,78392,78393],{"class":244},"    const arr = [10, 20, 30]\n",[25,78395,78396],{"class":27,"line":59},[25,78397,78398],{"class":244},"    const newArr = arr.filter(function (item, index) {\n",[25,78400,78401],{"class":27,"line":67},[25,78402,78328],{"class":244},[25,78404,78405],{"class":27,"line":75},[25,78406,78333],{"class":244},[25,78408,78409],{"class":27,"line":83},[25,78410,78411],{"class":244},"      return item >= 20\n",[25,78413,78414],{"class":27,"line":91},[25,78415,33532],{"class":244},[25,78417,78418],{"class":27,"line":1429},[25,78419,78420],{"class":244},"    console.log(newArr)\n",[25,78422,78423,78425,78427],{"class":27,"line":1441},[25,78424,52488],{"class":244},[25,78426,51884],{"class":51371},[25,78428,51378],{"class":244},[25,78430,78431,78433,78435],{"class":27,"line":1723},[25,78432,51856],{"class":244},[25,78434,51871],{"class":51371},[25,78436,51378],{"class":244},[99,78438,78439],{},"这个也可以写成箭头函数：",[15,78441,78443],{"className":50704,"code":78442,"language":50706,"meta":20,"style":20},"const newArr = arr.filter(item => item >= 20)\n",[22,78444,78445],{"__ignoreMap":20},[25,78446,78447],{"class":27,"line":28},[25,78448,78442],{"class":244},[182,78450,78452],{"id":78451},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[99,78454,78455],{},[155,78456],{"alt":20,"src":78457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[99,78459,78460],{},"步骤：",[99,78462,78463],{},"①：渲染页面模块",[103,78465,78466,78469],{},[106,78467,78468],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[106,78470,78471],{},"用forEach+字符串的形式",[99,78473,78474],{},"②：点击不同需求，显示不同页面内容",[103,78476,78477,78480,78483,78486,78489],{},[106,78478,78479],{},"点击采取事件委托方式 .filter",[106,78481,78482],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[106,78484,78485],{},"筛选条件是根据点击的 data-index 来判断",[106,78487,78488],{},"可以使用对象解构，把事件对象解构",[106,78490,78491],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[15,78493,78495],{"className":50704,"code":78494,"language":50706,"meta":20,"style":20},"\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",[22,78496,78497,78507,78521,78525,78533,78547,78567,78579,78587,78593,78603,78613,78623,78627,78631,78637,78650,78662,78672,78684,78688,78692,78699,78712,78724,78741,78759,78772,78776,78780,78792,78802,78806,78810,78817,78858,78885,78895,78899,78903,78911,78923,78927,78931,78939,78951,78963,78974,78978,78982,78991,79003,79014,79018,79022,79031,79043,79055,79059,79063,79070,79080,79092,79104,79119,79123,79127,79135,79151,79161,79171,79181,79193,79197,79201,79211,79222,79232,79236,79244,79252,79256,79264,79279,79305,79330,79355,79374,79382,79396,79401,79406,79411,79416,79421,79429,79437,79442,79453,79458,79468,79478,79488,79498,79502,79506,79515,79524,79533,79542,79546,79550,79559,79568,79577,79586,79590,79594,79603,79612,79621,79630,79634,79638,79647,79656,79665,79674,79678,79682,79691,79700,79709,79718,79722,79726,79735,79744,79753,79762,79766,79770,79779,79788,79796,79805,79809,79813,79817,79822,79834,79839,79851,79855,79872,79900,79909,79914,79924,79934,79943,79948,79953,79957,79962,79979,79983,79988,79996,80001,80028,80033,80053,80058,80070,80075,80080,80085,80096,80110,80147,80165,80198,80215,80239,80243,80248,80254,80258,80262,80266,80274,80282,80286],{"__ignoreMap":20},[25,78498,78499,78501,78503,78505],{"class":27,"line":28},[25,78500,51368],{"class":244},[25,78502,51372],{"class":51371},[25,78504,51375],{"class":31},[25,78506,51378],{"class":244},[25,78508,78509,78511,78513,78515,78517,78519],{"class":27,"line":39},[25,78510,1153],{"class":244},[25,78512,50706],{"class":51371},[25,78514,51387],{"class":31},[25,78516,290],{"class":244},[25,78518,51392],{"class":45},[25,78520,51378],{"class":244},[25,78522,78523],{"class":27,"line":51},[25,78524,2510],{"emptyLinePlaceholder":167},[25,78526,78527,78529,78531],{"class":27,"line":59},[25,78528,1153],{"class":244},[25,78530,51405],{"class":51371},[25,78532,51378],{"class":244},[25,78534,78535,78537,78539,78541,78543,78545],{"class":27,"line":67},[25,78536,52215],{"class":244},[25,78538,51415],{"class":51371},[25,78540,51418],{"class":31},[25,78542,290],{"class":244},[25,78544,51423],{"class":45},[25,78546,51378],{"class":244},[25,78548,78549,78551,78553,78555,78557,78559,78561,78563,78565],{"class":27,"line":75},[25,78550,52215],{"class":244},[25,78552,51415],{"class":51371},[25,78554,15030],{"class":31},[25,78556,290],{"class":244},[25,78558,51462],{"class":45},[25,78560,51442],{"class":31},[25,78562,290],{"class":244},[25,78564,51469],{"class":45},[25,78566,51378],{"class":244},[25,78568,78569,78571,78573,78575,78577],{"class":27,"line":83},[25,78570,52215],{"class":244},[25,78572,51478],{"class":51371},[25,78574,51481],{"class":244},[25,78576,51478],{"class":51371},[25,78578,51378],{"class":244},[25,78580,78581,78583,78585],{"class":27,"line":91},[25,78582,52215],{"class":244},[25,78584,159],{"class":51371},[25,78586,51378],{"class":244},[25,78588,78589,78591],{"class":27,"line":1429},[25,78590,6513],{"class":51371},[25,78592,15682],{"class":244},[25,78594,78595,78597,78599,78601],{"class":27,"line":1441},[25,78596,54766],{"class":35},[25,78598,51508],{"class":244},[25,78600,434],{"class":35},[25,78602,1403],{"class":244},[25,78604,78605,78607,78609,78611],{"class":27,"line":1723},[25,78606,54777],{"class":35},[25,78608,51508],{"class":244},[25,78610,434],{"class":35},[25,78612,1403],{"class":244},[25,78614,78615,78617,78619,78621],{"class":27,"line":1728},[25,78616,72667],{"class":35},[25,78618,51508],{"class":244},[25,78620,60576],{"class":35},[25,78622,1403],{"class":244},[25,78624,78625],{"class":27,"line":1734},[25,78626,2297],{"class":244},[25,78628,78629],{"class":27,"line":1739},[25,78630,2510],{"emptyLinePlaceholder":167},[25,78632,78633,78635],{"class":27,"line":1753},[25,78634,62194],{"class":31},[25,78636,15682],{"class":244},[25,78638,78639,78641,78643,78646,78648],{"class":27,"line":1758},[25,78640,54842],{"class":35},[25,78642,51508],{"class":244},[25,78644,78645],{"class":35},"990",[25,78647,51563],{"class":240},[25,78649,1403],{"class":244},[25,78651,78652,78654,78656,78658,78660],{"class":27,"line":1764},[25,78653,54777],{"class":35},[25,78655,51508],{"class":244},[25,78657,434],{"class":35},[25,78659,51627],{"class":35},[25,78661,1403],{"class":244},[25,78663,78664,78666,78668,78670],{"class":27,"line":1785},[25,78665,55080],{"class":35},[25,78667,51508],{"class":244},[25,78669,51548],{"class":35},[25,78671,1403],{"class":244},[25,78673,78674,78677,78679,78682],{"class":27,"line":1790},[25,78675,78676],{"class":35},"      flex-wrap",[25,78678,51508],{"class":244},[25,78680,78681],{"class":35},"wrap",[25,78683,1403],{"class":244},[25,78685,78686],{"class":27,"line":1804},[25,78687,2297],{"class":244},[25,78689,78690],{"class":27,"line":1809},[25,78691,2510],{"emptyLinePlaceholder":167},[25,78693,78694,78697],{"class":27,"line":1838},[25,78695,78696],{"class":31},"    .item",[25,78698,15682],{"class":244},[25,78700,78701,78703,78705,78708,78710],{"class":27,"line":1843},[25,78702,54842],{"class":35},[25,78704,51508],{"class":244},[25,78706,78707],{"class":35},"240",[25,78709,51563],{"class":240},[25,78711,1403],{"class":244},[25,78713,78714,78716,78718,78720,78722],{"class":27,"line":1860},[25,78715,62071],{"class":35},[25,78717,51508],{"class":244},[25,78719,689],{"class":35},[25,78721,51563],{"class":240},[25,78723,1403],{"class":244},[25,78725,78726,78728,78730,78732,78734,78737,78739],{"class":27,"line":1865},[25,78727,54766],{"class":35},[25,78729,51508],{"class":244},[25,78731,943],{"class":35},[25,78733,51563],{"class":240},[25,78735,78736],{"class":35}," 30",[25,78738,51563],{"class":240},[25,78740,1403],{"class":244},[25,78742,78743,78745,78747,78749,78752,78755,78757],{"class":27,"line":1870},[25,78744,61931],{"class":35},[25,78746,51508],{"class":244},[25,78748,28192],{"class":35},[25,78750,78751],{"class":35}," ease",[25,78753,78754],{"class":35}," .5",[25,78756,938],{"class":240},[25,78758,1403],{"class":244},[25,78760,78761,78764,78766,78768,78770],{"class":27,"line":1875},[25,78762,78763],{"class":35},"      margin-bottom",[25,78765,51508],{"class":244},[25,78767,943],{"class":35},[25,78769,51563],{"class":240},[25,78771,1403],{"class":244},[25,78773,78774],{"class":27,"line":1889},[25,78775,2297],{"class":244},[25,78777,78778],{"class":27,"line":1894},[25,78779,2510],{"emptyLinePlaceholder":167},[25,78781,78782,78785,78787,78790],{"class":27,"line":2687},[25,78783,78784],{"class":31},"    .item:nth-child",[25,78786,245],{"class":244},[25,78788,78789],{"class":35},"4n",[25,78791,12552],{"class":244},[25,78793,78794,78796,78798,78800],{"class":27,"line":2701},[25,78795,62071],{"class":35},[25,78797,51508],{"class":244},[25,78799,434],{"class":35},[25,78801,1403],{"class":244},[25,78803,78804],{"class":27,"line":2709},[25,78805,2297],{"class":244},[25,78807,78808],{"class":27,"line":2714},[25,78809,2510],{"emptyLinePlaceholder":167},[25,78811,78812,78815],{"class":27,"line":2720},[25,78813,78814],{"class":31},"    .item:hover",[25,78816,15682],{"class":244},[25,78818,78819,78822,78824,78826,78828,78830,78832,78834,78836,78839,78841,78843,78845,78847,78849,78851,78853,78856],{"class":27,"line":2726},[25,78820,78821],{"class":35},"      box-shadow",[25,78823,51508],{"class":244},[25,78825,434],{"class":35},[25,78827,51563],{"class":240},[25,78829,4203],{"class":35},[25,78831,51563],{"class":240},[25,78833,2258],{"class":35},[25,78835,51563],{"class":240},[25,78837,78838],{"class":35}," rgba",[25,78840,245],{"class":244},[25,78842,434],{"class":35},[25,78844,12545],{"class":244},[25,78846,434],{"class":35},[25,78848,12545],{"class":244},[25,78850,434],{"class":35},[25,78852,12545],{"class":244},[25,78854,78855],{"class":35},".2",[25,78857,2829],{"class":244},[25,78859,78860,78863,78865,78868,78870,78872,78874,78877,78879,78881,78883],{"class":27,"line":2731},[25,78861,78862],{"class":35},"      transform",[25,78864,51508],{"class":244},[25,78866,78867],{"class":35},"translate3d",[25,78869,245],{"class":244},[25,78871,434],{"class":35},[25,78873,12545],{"class":244},[25,78875,78876],{"class":35},"-4",[25,78878,51563],{"class":240},[25,78880,12545],{"class":244},[25,78882,434],{"class":35},[25,78884,2829],{"class":244},[25,78886,78887,78889,78891,78893],{"class":27,"line":8058},[25,78888,62096],{"class":35},[25,78890,51508],{"class":244},[25,78892,62101],{"class":35},[25,78894,1403],{"class":244},[25,78896,78897],{"class":27,"line":8082},[25,78898,2297],{"class":244},[25,78900,78901],{"class":27,"line":8087},[25,78902,2510],{"emptyLinePlaceholder":167},[25,78904,78905,78907,78909],{"class":27,"line":8093},[25,78906,78696],{"class":31},[25,78908,55686],{"class":51371},[25,78910,15682],{"class":244},[25,78912,78913,78915,78917,78919,78921],{"class":27,"line":8120},[25,78914,54842],{"class":35},[25,78916,51508],{"class":244},[25,78918,554],{"class":35},[25,78920,571],{"class":240},[25,78922,1403],{"class":244},[25,78924,78925],{"class":27,"line":8125},[25,78926,2297],{"class":244},[25,78928,78929],{"class":27,"line":8131},[25,78930,2510],{"emptyLinePlaceholder":167},[25,78932,78933,78935,78937],{"class":27,"line":8143},[25,78934,78696],{"class":31},[25,78936,62375],{"class":31},[25,78938,15682],{"class":244},[25,78940,78941,78943,78945,78947,78949],{"class":27,"line":8155},[25,78942,54993],{"class":35},[25,78944,51508],{"class":244},[25,78946,893],{"class":35},[25,78948,51563],{"class":240},[25,78950,1403],{"class":244},[25,78952,78953,78955,78957,78959,78961],{"class":27,"line":8167},[25,78954,78763],{"class":35},[25,78956,51508],{"class":244},[25,78958,689],{"class":35},[25,78960,51563],{"class":240},[25,78962,1403],{"class":244},[25,78964,78965,78967,78969,78972],{"class":27,"line":9826},[25,78966,57487],{"class":35},[25,78968,51508],{"class":244},[25,78970,78971],{"class":35},"#666",[25,78973,1403],{"class":244},[25,78975,78976],{"class":27,"line":9851},[25,78977,2297],{"class":244},[25,78979,78980],{"class":27,"line":9874},[25,78981,2510],{"emptyLinePlaceholder":167},[25,78983,78984,78986,78989],{"class":27,"line":9898},[25,78985,78696],{"class":31},[25,78987,78988],{"class":31}," .price",[25,78990,15682],{"class":244},[25,78992,78993,78995,78997,78999,79001],{"class":27,"line":9903},[25,78994,54993],{"class":35},[25,78996,51508],{"class":244},[25,78998,993],{"class":35},[25,79000,51563],{"class":240},[25,79002,1403],{"class":244},[25,79004,79005,79007,79009,79012],{"class":27,"line":9908},[25,79006,57487],{"class":35},[25,79008,51508],{"class":244},[25,79010,79011],{"class":35},"firebrick",[25,79013,1403],{"class":244},[25,79015,79016],{"class":27,"line":9913},[25,79017,2297],{"class":244},[25,79019,79020],{"class":27,"line":9922},[25,79021,2510],{"emptyLinePlaceholder":167},[25,79023,79024,79026,79029],{"class":27,"line":9927},[25,79025,78696],{"class":31},[25,79027,79028],{"class":31}," .price::before",[25,79030,15682],{"class":244},[25,79032,79033,79036,79038,79041],{"class":27,"line":9933},[25,79034,79035],{"class":35},"      content",[25,79037,51508],{"class":244},[25,79039,79040],{"class":45},"'￥'",[25,79042,1403],{"class":244},[25,79044,79045,79047,79049,79051,79053],{"class":27,"line":9954},[25,79046,54993],{"class":35},[25,79048,51508],{"class":244},[25,79050,792],{"class":35},[25,79052,51563],{"class":240},[25,79054,1403],{"class":244},[25,79056,79057],{"class":27,"line":9960},[25,79058,2297],{"class":244},[25,79060,79061],{"class":27,"line":9974},[25,79062,2510],{"emptyLinePlaceholder":167},[25,79064,79065,79068],{"class":27,"line":9980},[25,79066,79067],{"class":31},"    .filter",[25,79069,15682],{"class":244},[25,79071,79072,79074,79076,79078],{"class":27,"line":10007},[25,79073,55080],{"class":35},[25,79075,51508],{"class":244},[25,79077,51548],{"class":35},[25,79079,1403],{"class":244},[25,79081,79082,79084,79086,79088,79090],{"class":27,"line":10016},[25,79083,54842],{"class":35},[25,79085,51508],{"class":244},[25,79087,78645],{"class":35},[25,79089,51563],{"class":240},[25,79091,1403],{"class":244},[25,79093,79094,79096,79098,79100,79102],{"class":27,"line":10022},[25,79095,54777],{"class":35},[25,79097,51508],{"class":244},[25,79099,434],{"class":35},[25,79101,51627],{"class":35},[25,79103,1403],{"class":244},[25,79105,79106,79108,79110,79112,79114,79116],{"class":27,"line":10030},[25,79107,54766],{"class":35},[25,79109,51508],{"class":244},[25,79111,899],{"class":35},[25,79113,51563],{"class":240},[25,79115,78736],{"class":35},[25,79117,79118],{"class":240},"px\n",[25,79120,79121],{"class":27,"line":10035},[25,79122,2297],{"class":244},[25,79124,79125],{"class":27,"line":16714},[25,79126,2510],{"emptyLinePlaceholder":167},[25,79128,79129,79131,79133],{"class":27,"line":16720},[25,79130,79067],{"class":31},[25,79132,1510],{"class":51371},[25,79134,15682],{"class":244},[25,79136,79137,79139,79141,79143,79145,79147,79149],{"class":27,"line":16743},[25,79138,54766],{"class":35},[25,79140,51508],{"class":244},[25,79142,689],{"class":35},[25,79144,51563],{"class":240},[25,79146,9060],{"class":35},[25,79148,51563],{"class":240},[25,79150,1403],{"class":244},[25,79152,79153,79155,79157,79159],{"class":27,"line":16749},[25,79154,61792],{"class":35},[25,79156,51508],{"class":244},[25,79158,61889],{"class":35},[25,79160,1403],{"class":244},[25,79162,79163,79165,79167,79169],{"class":27,"line":16772},[25,79164,57487],{"class":35},[25,79166,51508],{"class":244},[25,79168,78971],{"class":35},[25,79170,1403],{"class":244},[25,79172,79173,79175,79177,79179],{"class":27,"line":16786},[25,79174,64041],{"class":35},[25,79176,51508],{"class":244},[25,79178,54808],{"class":35},[25,79180,1403],{"class":244},[25,79182,79183,79185,79187,79189,79191],{"class":27,"line":16806},[25,79184,61821],{"class":35},[25,79186,51508],{"class":244},[25,79188,943],{"class":35},[25,79190,51563],{"class":240},[25,79192,1403],{"class":244},[25,79194,79195],{"class":27,"line":16812},[25,79196,2297],{"class":244},[25,79198,79199],{"class":27,"line":16823},[25,79200,2510],{"emptyLinePlaceholder":167},[25,79202,79203,79205,79207,79209],{"class":27,"line":16846},[25,79204,79067],{"class":31},[25,79206,1510],{"class":51371},[25,79208,61971],{"class":31},[25,79210,15682],{"class":244},[25,79212,79213,79215,79217,79220],{"class":27,"line":16868},[25,79214,54955],{"class":35},[25,79216,51508],{"class":244},[25,79218,79219],{"class":35},"#05943c",[25,79221,1403],{"class":244},[25,79223,79224,79226,79228,79230],{"class":27,"line":16873},[25,79225,57487],{"class":35},[25,79227,51508],{"class":244},[25,79229,60913],{"class":35},[25,79231,1403],{"class":244},[25,79233,79234],{"class":27,"line":16879},[25,79235,2297],{"class":244},[25,79237,79238,79240,79242],{"class":27,"line":16893},[25,79239,52488],{"class":244},[25,79241,159],{"class":51371},[25,79243,51378],{"class":244},[25,79245,79246,79248,79250],{"class":27,"line":16906},[25,79247,51856],{"class":244},[25,79249,51405],{"class":51371},[25,79251,51378],{"class":244},[25,79253,79254],{"class":27,"line":16911},[25,79255,2510],{"emptyLinePlaceholder":167},[25,79257,79258,79260,79262],{"class":27,"line":16925},[25,79259,1153],{"class":244},[25,79261,51871],{"class":51371},[25,79263,51378],{"class":244},[25,79265,79266,79268,79270,79272,79274,79277],{"class":27,"line":16930},[25,79267,52215],{"class":244},[25,79269,51682],{"class":51371},[25,79271,53557],{"class":31},[25,79273,290],{"class":244},[25,79275,79276],{"class":45},"\"filter\"",[25,79278,51378],{"class":244},[25,79280,79281,79283,79285,79287,79289,79291,79294,79296,79298,79301,79303],{"class":27,"line":16936},[25,79282,51412],{"class":244},[25,79284,481],{"class":51371},[25,79286,61128],{"class":31},[25,79288,290],{"class":244},[25,79290,61133],{"class":45},[25,79292,79293],{"class":31}," data-index",[25,79295,290],{"class":244},[25,79297,3788],{"class":45},[25,79299,79300],{"class":244},">0-100元\u003C\u002F",[25,79302,481],{"class":51371},[25,79304,51378],{"class":244},[25,79306,79307,79309,79311,79313,79315,79317,79319,79321,79323,79326,79328],{"class":27,"line":16941},[25,79308,51412],{"class":244},[25,79310,481],{"class":51371},[25,79312,61128],{"class":31},[25,79314,290],{"class":244},[25,79316,61133],{"class":45},[25,79318,79293],{"class":31},[25,79320,290],{"class":244},[25,79322,3811],{"class":45},[25,79324,79325],{"class":244},">100-300元\u003C\u002F",[25,79327,481],{"class":51371},[25,79329,51378],{"class":244},[25,79331,79332,79334,79336,79338,79340,79342,79344,79346,79348,79351,79353],{"class":27,"line":16955},[25,79333,51412],{"class":244},[25,79335,481],{"class":51371},[25,79337,61128],{"class":31},[25,79339,290],{"class":244},[25,79341,61133],{"class":45},[25,79343,79293],{"class":31},[25,79345,290],{"class":244},[25,79347,3824],{"class":45},[25,79349,79350],{"class":244},">300元以上\u003C\u002F",[25,79352,481],{"class":51371},[25,79354,51378],{"class":244},[25,79356,79357,79359,79361,79363,79365,79367,79370,79372],{"class":27,"line":16960},[25,79358,51412],{"class":244},[25,79360,481],{"class":51371},[25,79362,61128],{"class":31},[25,79364,290],{"class":244},[25,79366,61133],{"class":45},[25,79368,79369],{"class":244},">全部区间\u003C\u002F",[25,79371,481],{"class":51371},[25,79373,51378],{"class":244},[25,79375,79376,79378,79380],{"class":27,"line":16965},[25,79377,52488],{"class":244},[25,79379,51682],{"class":51371},[25,79381,51378],{"class":244},[25,79383,79384,79386,79388,79390,79392,79394],{"class":27,"line":16979},[25,79385,52215],{"class":244},[25,79387,51682],{"class":51371},[25,79389,53557],{"class":31},[25,79391,290],{"class":244},[25,79393,62679],{"class":45},[25,79395,51378],{"class":244},[25,79397,79398],{"class":27,"line":16991},[25,79399,79400],{"class":302},"    \u003C!-- \u003Cdiv class=\"item\">\n",[25,79402,79403],{"class":27,"line":16996},[25,79404,79405],{"class":302},"      \u003Cimg src=\"\" alt=\"\">\n",[25,79407,79408],{"class":27,"line":17009},[25,79409,79410],{"class":302},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[25,79412,79413],{"class":27,"line":17014},[25,79414,79415],{"class":302},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[25,79417,79418],{"class":27,"line":17019},[25,79419,79420],{"class":302},"    \u003C\u002Fdiv> -->\n",[25,79422,79423,79425,79427],{"class":27,"line":17024},[25,79424,52488],{"class":244},[25,79426,51682],{"class":51371},[25,79428,51378],{"class":244},[25,79430,79431,79433,79435],{"class":27,"line":17037},[25,79432,52215],{"class":244},[25,79434,51884],{"class":51371},[25,79436,51378],{"class":244},[25,79438,79439],{"class":27,"line":17042},[25,79440,79441],{"class":302},"    \u002F\u002F 2. 初始化数据\n",[25,79443,79444,79446,79449,79451],{"class":27,"line":32704},[25,79445,11331],{"class":240},[25,79447,79448],{"class":35}," goodsList",[25,79450,13674],{"class":240},[25,79452,55518],{"class":244},[25,79454,79455],{"class":27,"line":32710},[25,79456,79457],{"class":244},"      {\n",[25,79459,79460,79463,79466],{"class":27,"line":32716},[25,79461,79462],{"class":244},"        id: ",[25,79464,79465],{"class":45},"'4001172'",[25,79467,31537],{"class":244},[25,79469,79470,79473,79476],{"class":27,"line":32722},[25,79471,79472],{"class":244},"        name: ",[25,79474,79475],{"class":45},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[25,79477,31537],{"class":244},[25,79479,79480,79483,79486],{"class":27,"line":32728},[25,79481,79482],{"class":244},"        price: ",[25,79484,79485],{"class":45},"'289.00'",[25,79487,31537],{"class":244},[25,79489,79490,79493,79496],{"class":27,"line":32739},[25,79491,79492],{"class":244},"        picture: ",[25,79494,79495],{"class":45},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[25,79497,31537],{"class":244},[25,79499,79500],{"class":27,"line":32745},[25,79501,77963],{"class":244},[25,79503,79504],{"class":27,"line":32765},[25,79505,79457],{"class":244},[25,79507,79508,79510,79513],{"class":27,"line":32771},[25,79509,79462],{"class":244},[25,79511,79512],{"class":45},"'4001594'",[25,79514,31537],{"class":244},[25,79516,79517,79519,79522],{"class":27,"line":32782},[25,79518,79472],{"class":244},[25,79520,79521],{"class":45},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[25,79523,31537],{"class":244},[25,79525,79526,79528,79531],{"class":27,"line":32788},[25,79527,79482],{"class":244},[25,79529,79530],{"class":45},"'288.00'",[25,79532,31537],{"class":244},[25,79534,79535,79537,79540],{"class":27,"line":32794},[25,79536,79492],{"class":244},[25,79538,79539],{"class":45},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[25,79541,31537],{"class":244},[25,79543,79544],{"class":27,"line":32800},[25,79545,77963],{"class":244},[25,79547,79548],{"class":27,"line":32806},[25,79549,79457],{"class":244},[25,79551,79552,79554,79557],{"class":27,"line":32812},[25,79553,79462],{"class":244},[25,79555,79556],{"class":45},"'4001009'",[25,79558,31537],{"class":244},[25,79560,79561,79563,79566],{"class":27,"line":32818},[25,79562,79472],{"class":244},[25,79564,79565],{"class":45},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[25,79567,31537],{"class":244},[25,79569,79570,79572,79575],{"class":27,"line":32824},[25,79571,79482],{"class":244},[25,79573,79574],{"class":45},"'109.00'",[25,79576,31537],{"class":244},[25,79578,79579,79581,79584],{"class":27,"line":32844},[25,79580,79492],{"class":244},[25,79582,79583],{"class":45},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[25,79585,31537],{"class":244},[25,79587,79588],{"class":27,"line":32850},[25,79589,77963],{"class":244},[25,79591,79592],{"class":27,"line":32866},[25,79593,79457],{"class":244},[25,79595,79596,79598,79601],{"class":27,"line":32872},[25,79597,79462],{"class":244},[25,79599,79600],{"class":45},"'4001874'",[25,79602,31537],{"class":244},[25,79604,79605,79607,79610],{"class":27,"line":32886},[25,79606,79472],{"class":244},[25,79608,79609],{"class":45},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[25,79611,31537],{"class":244},[25,79613,79614,79616,79619],{"class":27,"line":32892},[25,79615,79482],{"class":244},[25,79617,79618],{"class":45},"'488.00'",[25,79620,31537],{"class":244},[25,79622,79623,79625,79628],{"class":27,"line":32907},[25,79624,79492],{"class":244},[25,79626,79627],{"class":45},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[25,79629,31537],{"class":244},[25,79631,79632],{"class":27,"line":32913},[25,79633,77963],{"class":244},[25,79635,79636],{"class":27,"line":32922},[25,79637,79457],{"class":244},[25,79639,79640,79642,79645],{"class":27,"line":32928},[25,79641,79462],{"class":244},[25,79643,79644],{"class":45},"'4001649'",[25,79646,31537],{"class":244},[25,79648,79649,79651,79654],{"class":27,"line":32937},[25,79650,79472],{"class":244},[25,79652,79653],{"class":45},"'大师监制龙泉青瓷茶叶罐'",[25,79655,31537],{"class":244},[25,79657,79658,79660,79663],{"class":27,"line":32943},[25,79659,79482],{"class":244},[25,79661,79662],{"class":45},"'139.00'",[25,79664,31537],{"class":244},[25,79666,79667,79669,79672],{"class":27,"line":32949},[25,79668,79492],{"class":244},[25,79670,79671],{"class":45},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[25,79673,31537],{"class":244},[25,79675,79676],{"class":27,"line":32958},[25,79677,77963],{"class":244},[25,79679,79680],{"class":27,"line":32964},[25,79681,79457],{"class":244},[25,79683,79684,79686,79689],{"class":27,"line":32975},[25,79685,79462],{"class":244},[25,79687,79688],{"class":45},"'3997185'",[25,79690,31537],{"class":244},[25,79692,79693,79695,79698],{"class":27,"line":32981},[25,79694,79472],{"class":244},[25,79696,79697],{"class":45},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[25,79699,31537],{"class":244},[25,79701,79702,79704,79707],{"class":27,"line":33000},[25,79703,79482],{"class":244},[25,79705,79706],{"class":45},"'108.00'",[25,79708,31537],{"class":244},[25,79710,79711,79713,79716],{"class":27,"line":33006},[25,79712,79492],{"class":244},[25,79714,79715],{"class":45},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[25,79717,31537],{"class":244},[25,79719,79720],{"class":27,"line":33017},[25,79721,77963],{"class":244},[25,79723,79724],{"class":27,"line":33023},[25,79725,79457],{"class":244},[25,79727,79728,79730,79733],{"class":27,"line":33043},[25,79729,79462],{"class":244},[25,79731,79732],{"class":45},"'3997403'",[25,79734,31537],{"class":244},[25,79736,79737,79739,79742],{"class":27,"line":33059},[25,79738,79472],{"class":244},[25,79740,79741],{"class":45},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[25,79743,31537],{"class":244},[25,79745,79746,79748,79751],{"class":27,"line":33065},[25,79747,79482],{"class":244},[25,79749,79750],{"class":45},"'100.00'",[25,79752,31537],{"class":244},[25,79754,79755,79757,79760],{"class":27,"line":33079},[25,79756,79492],{"class":244},[25,79758,79759],{"class":45},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[25,79761,31537],{"class":244},[25,79763,79764],{"class":27,"line":33085},[25,79765,77963],{"class":244},[25,79767,79768],{"class":27,"line":33091},[25,79769,79457],{"class":244},[25,79771,79772,79774,79777],{"class":27,"line":33102},[25,79773,79462],{"class":244},[25,79775,79776],{"class":45},"'3998274'",[25,79778,31537],{"class":244},[25,79780,79781,79783,79786],{"class":27,"line":33108},[25,79782,79472],{"class":244},[25,79784,79785],{"class":45},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[25,79787,31537],{"class":244},[25,79789,79790,79792,79794],{"class":27,"line":33114},[25,79791,79482],{"class":244},[25,79793,79662],{"class":45},[25,79795,31537],{"class":244},[25,79797,79798,79800,79803],{"class":27,"line":33124},[25,79799,79492],{"class":244},[25,79801,79802],{"class":45},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[25,79804,31537],{"class":244},[25,79806,79807],{"class":27,"line":33130},[25,79808,77963],{"class":244},[25,79810,79811],{"class":27,"line":33141},[25,79812,53180],{"class":244},[25,79814,79815],{"class":27,"line":33147},[25,79816,2510],{"emptyLinePlaceholder":167},[25,79818,79819],{"class":27,"line":33157},[25,79820,79821],{"class":302},"    \u002F\u002F 1.渲染函数\n",[25,79823,79824,79826,79828,79830,79832],{"class":27,"line":33162},[25,79825,70155],{"class":240},[25,79827,70158],{"class":31},[25,79829,245],{"class":244},[25,79831,3990],{"class":5326},[25,79833,12552],{"class":244},[25,79835,79836],{"class":27,"line":33168},[25,79837,79838],{"class":302},"      \u002F\u002F 声明空字符串\n",[25,79840,79841,79844,79847,79849],{"class":27,"line":33217},[25,79842,79843],{"class":240},"      let",[25,79845,79846],{"class":244}," str ",[25,79848,290],{"class":240},[25,79850,70175],{"class":45},[25,79852,79853],{"class":27,"line":33264},[25,79854,70180],{"class":302},[25,79856,79857,79859,79862,79864,79867,79870],{"class":27,"line":33269},[25,79858,58078],{"class":244},[25,79860,79861],{"class":31},"forEach",[25,79863,245],{"class":244},[25,79865,79866],{"class":5326},"item",[25,79868,79869],{"class":240}," =>",[25,79871,15682],{"class":244},[25,79873,79874,79876,79879,79882,79884,79887,79889,79892,79895,79897],{"class":27,"line":33275},[25,79875,61341],{"class":240},[25,79877,79878],{"class":244}," { ",[25,79880,79881],{"class":35},"name",[25,79883,12545],{"class":244},[25,79885,79886],{"class":35},"price",[25,79888,12545],{"class":244},[25,79890,79891],{"class":35},"picture",[25,79893,79894],{"class":244}," } ",[25,79896,290],{"class":240},[25,79898,79899],{"class":244}," item\n",[25,79901,79902,79905,79907],{"class":27,"line":33294},[25,79903,79904],{"class":244},"        str ",[25,79906,9587],{"class":240},[25,79908,70239],{"class":45},[25,79910,79911],{"class":27,"line":33300},[25,79912,79913],{"class":45},"          \u003Cdiv class=\"item\">\n",[25,79915,79916,79919,79921],{"class":27,"line":33320},[25,79917,79918],{"class":45},"            \u003Cimg src=\"${",[25,79920,79891],{"class":244},[25,79922,79923],{"class":45},"}\" alt=\"\">\n",[25,79925,79926,79929,79931],{"class":27,"line":33326},[25,79927,79928],{"class":45},"            \u003Cp class=\"name\">${",[25,79930,79881],{"class":244},[25,79932,79933],{"class":45},"}\u003C\u002Fp>\n",[25,79935,79936,79939,79941],{"class":27,"line":33332},[25,79937,79938],{"class":45},"            \u003Cp class=\"price\">${",[25,79940,79886],{"class":244},[25,79942,79933],{"class":45},[25,79944,79945],{"class":27,"line":33342},[25,79946,79947],{"class":45},"          \u003C\u002Fdiv>\n",[25,79949,79950],{"class":27,"line":33347},[25,79951,79952],{"class":45},"        `\n",[25,79954,79955],{"class":27,"line":33353},[25,79956,64886],{"class":244},[25,79958,79959],{"class":27,"line":33369},[25,79960,79961],{"class":302},"      \u002F\u002F 追加给List\n",[25,79963,79964,79966,79968,79970,79973,79975,79977],{"class":27,"line":33414},[25,79965,55842],{"class":244},[25,79967,54470],{"class":31},[25,79969,245],{"class":244},[25,79971,79972],{"class":45},"'.list'",[25,79974,74320],{"class":244},[25,79976,290],{"class":240},[25,79978,74056],{"class":244},[25,79980,79981],{"class":27,"line":33420},[25,79982,2297],{"class":244},[25,79984,79985],{"class":27,"line":33426},[25,79986,79987],{"class":302},"    \u002F\u002F 页面一打开就需要渲染\n",[25,79989,79990,79993],{"class":27,"line":33432},[25,79991,79992],{"class":31},"    render",[25,79994,79995],{"class":244},"(goodsList)\n",[25,79997,79998],{"class":27,"line":33443},[25,79999,80000],{"class":302},"    \u002F\u002F 2.过滤筛选\n",[25,80002,80003,80005,80007,80009,80012,80014,80016,80018,80020,80022,80024,80026],{"class":27,"line":33449},[25,80004,52478],{"class":244},[25,80006,54470],{"class":31},[25,80008,245],{"class":244},[25,80010,80011],{"class":45},"'.filter'",[25,80013,30897],{"class":244},[25,80015,57884],{"class":31},[25,80017,245],{"class":244},[25,80019,57889],{"class":45},[25,80021,12545],{"class":244},[25,80023,318],{"class":5326},[25,80025,79869],{"class":240},[25,80027,15682],{"class":244},[25,80029,80030],{"class":27,"line":33455},[25,80031,80032],{"class":302},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[25,80034,80035,80037,80039,80042,80044,80046,80048,80050],{"class":27,"line":33461},[25,80036,58299],{"class":240},[25,80038,79878],{"class":244},[25,80040,80041],{"class":35},"tagName",[25,80043,12545],{"class":244},[25,80045,31608],{"class":35},[25,80047,79894],{"class":244},[25,80049,290],{"class":240},[25,80051,80052],{"class":244}," e.target\n",[25,80054,80055],{"class":27,"line":33479},[25,80056,80057],{"class":302},"      \u002F\u002F 判断\n",[25,80059,80060,80062,80064,80066,80068],{"class":27,"line":33493},[25,80061,54551],{"class":240},[25,80063,67105],{"class":244},[25,80065,54557],{"class":240},[25,80067,68327],{"class":45},[25,80069,12552],{"class":244},[25,80071,80072],{"class":27,"line":33502},[25,80073,80074],{"class":302},"        \u002F\u002F console.log(11)\n",[25,80076,80077],{"class":27,"line":33511},[25,80078,80079],{"class":302},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[25,80081,80082],{"class":27,"line":33520},[25,80083,80084],{"class":302},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[25,80086,80087,80089,80091,80093],{"class":27,"line":33529},[25,80088,51901],{"class":240},[25,80090,51904],{"class":244},[25,80092,290],{"class":240},[25,80094,80095],{"class":244}," goodsList\n",[25,80097,80098,80100,80103,80105,80108],{"class":27,"line":33535},[25,80099,2607],{"class":240},[25,80101,80102],{"class":244}," (dataset.index ",[25,80104,54557],{"class":240},[25,80106,80107],{"class":45}," '1'",[25,80109,12552],{"class":244},[25,80111,80112,80115,80117,80120,80123,80125,80127,80129,80132,80134,80136,80139,80141,80143,80145],{"class":27,"line":33541},[25,80113,80114],{"class":244},"          arr ",[25,80116,290],{"class":240},[25,80118,80119],{"class":244}," goodsList.",[25,80121,80122],{"class":31},"filter",[25,80124,245],{"class":244},[25,80126,79866],{"class":5326},[25,80128,79869],{"class":240},[25,80130,80131],{"class":244}," item.price ",[25,80133,1821],{"class":240},[25,80135,4203],{"class":35},[25,80137,80138],{"class":240}," &&",[25,80140,80131],{"class":244},[25,80142,1699],{"class":240},[25,80144,5864],{"class":35},[25,80146,251],{"class":244},[25,80148,80149,80152,80154,80156,80158,80160,80163],{"class":27,"line":33549},[25,80150,80151],{"class":244},"        } ",[25,80153,1812],{"class":240},[25,80155,1815],{"class":240},[25,80157,80102],{"class":244},[25,80159,54557],{"class":240},[25,80161,80162],{"class":45}," '2'",[25,80164,12552],{"class":244},[25,80166,80167,80169,80171,80173,80175,80177,80179,80181,80183,80185,80187,80189,80191,80193,80196],{"class":27,"line":33554},[25,80168,80114],{"class":244},[25,80170,290],{"class":240},[25,80172,80119],{"class":244},[25,80174,80122],{"class":31},[25,80176,245],{"class":244},[25,80178,79866],{"class":5326},[25,80180,79869],{"class":240},[25,80182,80131],{"class":244},[25,80184,1821],{"class":240},[25,80186,5864],{"class":35},[25,80188,80138],{"class":240},[25,80190,80131],{"class":244},[25,80192,1699],{"class":240},[25,80194,80195],{"class":35}," 300",[25,80197,251],{"class":244},[25,80199,80200,80202,80204,80206,80208,80210,80213],{"class":27,"line":33560},[25,80201,80151],{"class":244},[25,80203,1812],{"class":240},[25,80205,1815],{"class":240},[25,80207,80102],{"class":244},[25,80209,54557],{"class":240},[25,80211,80212],{"class":45}," '3'",[25,80214,12552],{"class":244},[25,80216,80217,80219,80221,80223,80225,80227,80229,80231,80233,80235,80237],{"class":27,"line":33571},[25,80218,80114],{"class":244},[25,80220,290],{"class":240},[25,80222,80119],{"class":244},[25,80224,80122],{"class":31},[25,80226,245],{"class":244},[25,80228,79866],{"class":5326},[25,80230,79869],{"class":240},[25,80232,80131],{"class":244},[25,80234,1821],{"class":240},[25,80236,80195],{"class":35},[25,80238,251],{"class":244},[25,80240,80241],{"class":27,"line":33577},[25,80242,2639],{"class":244},[25,80244,80245],{"class":27,"line":33597},[25,80246,80247],{"class":302},"        \u002F\u002F 渲染函数\n",[25,80249,80250,80252],{"class":27,"line":33603},[25,80251,70479],{"class":31},[25,80253,52483],{"class":244},[25,80255,80256],{"class":27,"line":33609},[25,80257,52469],{"class":244},[25,80259,80260],{"class":27,"line":33615},[25,80261,2510],{"emptyLinePlaceholder":167},[25,80263,80264],{"class":27,"line":33632},[25,80265,33532],{"class":244},[25,80267,80268,80270,80272],{"class":27,"line":33638},[25,80269,52488],{"class":244},[25,80271,51884],{"class":51371},[25,80273,51378],{"class":244},[25,80275,80276,80278,80280],{"class":27,"line":33644},[25,80277,51856],{"class":244},[25,80279,51871],{"class":51371},[25,80281,51378],{"class":244},[25,80283,80284],{"class":27,"line":33650},[25,80285,2510],{"emptyLinePlaceholder":167},[25,80287,80288,80290,80292],{"class":27,"line":33656},[25,80289,51856],{"class":244},[25,80291,50706],{"class":51371},[25,80293,51378],{"class":244},[182,80295,80297],{"id":80296},"_410-深入了解对象","4.10 深入了解对象",[210,80299,80301],{"id":80300},"_4101-创建对象","4.10.1 创建对象",[99,80303,80304],{},[155,80305],{"alt":20,"src":80306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[99,80308,80309],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[210,80311,80313],{"id":80312},"_4102-构造函数","4.10.2 构造函数",[99,80315,80316,80319],{},[392,80317,80318],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[99,80321,80322,80325],{},[392,80323,80324],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[15,80327,80329],{"className":50704,"code":80328,"language":50706,"meta":20,"style":20},"\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",[22,80330,80331,80339,80344,80365,80378,80390,80402,80406,80411,80438,80443,80470],{"__ignoreMap":20},[25,80332,80333,80335,80337],{"class":27,"line":28},[25,80334,1153],{"class":244},[25,80336,51884],{"class":51371},[25,80338,51378],{"class":244},[25,80340,80341],{"class":27,"line":39},[25,80342,80343],{"class":302},"\u002F\u002F例：\n",[25,80345,80346,80348,80351,80353,80355,80357,80359,80361,80363],{"class":27,"line":51},[25,80347,54520],{"class":240},[25,80349,80350],{"class":31}," Pig",[25,80352,245],{"class":244},[25,80354,79881],{"class":5326},[25,80356,621],{"class":244},[25,80358,70292],{"class":5326},[25,80360,621],{"class":244},[25,80362,70309],{"class":5326},[25,80364,12552],{"class":244},[25,80366,80367,80370,80373,80375],{"class":27,"line":59},[25,80368,80369],{"class":35},"    this",[25,80371,80372],{"class":244},".name",[25,80374,290],{"class":240},[25,80376,80377],{"class":244},"name\n",[25,80379,80380,80382,80385,80387],{"class":27,"line":67},[25,80381,80369],{"class":35},[25,80383,80384],{"class":244},".age",[25,80386,290],{"class":240},[25,80388,80389],{"class":244},"age\n",[25,80391,80392,80394,80397,80399],{"class":27,"line":75},[25,80393,80369],{"class":35},[25,80395,80396],{"class":244},".gender",[25,80398,290],{"class":240},[25,80400,80401],{"class":244},"gender    \n",[25,80403,80404],{"class":27,"line":83},[25,80405,1676],{"class":244},[25,80407,80408],{"class":27,"line":91},[25,80409,80410],{"class":302},"\u002F\u002F创建佩奇对象\n",[25,80412,80413,80415,80418,80420,80422,80424,80427,80429,80431,80433,80436],{"class":27,"line":1429},[25,80414,6902],{"class":240},[25,80416,80417],{"class":35}," Peppa",[25,80419,11827],{"class":240},[25,80421,80350],{"class":31},[25,80423,245],{"class":244},[25,80425,80426],{"class":45},"'佩奇'",[25,80428,621],{"class":244},[25,80430,587],{"class":35},[25,80432,621],{"class":244},[25,80434,80435],{"class":45},"'女'",[25,80437,251],{"class":244},[25,80439,80440],{"class":27,"line":1441},[25,80441,80442],{"class":302},"\u002F\u002F创建乔治对象\n",[25,80444,80445,80447,80450,80452,80454,80456,80459,80461,80463,80465,80468],{"class":27,"line":1723},[25,80446,6902],{"class":240},[25,80448,80449],{"class":35}," George",[25,80451,11827],{"class":240},[25,80453,80350],{"class":31},[25,80455,245],{"class":244},[25,80457,80458],{"class":45},"'乔治'",[25,80460,621],{"class":244},[25,80462,315],{"class":35},[25,80464,621],{"class":244},[25,80466,80467],{"class":45},"'男'",[25,80469,251],{"class":244},[25,80471,80472,80474,80476],{"class":27,"line":1728},[25,80473,51856],{"class":244},[25,80475,51884],{"class":51371},[25,80477,51378],{"class":244},[99,80479,80480],{},[155,80481],{"alt":20,"src":80482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[99,80484,80485],{},[155,80486],{"alt":20,"src":80487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[99,80489,80490],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[99,80492,80493],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[99,80495,80496],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[99,80498,80499],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[99,80501,80502],{},"这里用等号是因为：对象.属性=值",[99,80504,80505],{},"①利用对象字面量创建对象",[99,80507,80508],{},"const o={",[99,80510,80511],{},"name:'pink'",[99,80513,80514],{},"} ②利用new Object创建对象",[99,80516,80517],{},"const o=new Object({name:'pink'})",[99,80519,80520],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[99,80522,80523],{},"构造函数创建对象的执行过程：",[99,80525,80526],{},[155,80527],{"alt":20,"src":80528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[210,80530,80532],{"id":80531},"_4103-实例成员","4.10.3 实例成员",[99,80534,80535],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[194,80537,80538,80541,80544],{},[106,80539,80540],{},"实例对象的属性和方法即为实例成员",[106,80542,80543],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[106,80545,80546],{},"构造函数创建的实例对象彼此独立互不影响",[210,80548,80550],{"id":80549},"_4104-静态成员","4.10.4 静态成员",[99,80552,80553],{},[155,80554],{"alt":20,"src":80555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[99,80557,80558],{},"静态成员有Date.now() Math.PI Math.random()",[99,80560,80561],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[99,80563,80564],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[99,80566,80567],{},"function Pig(name) n {",[99,80569,80570],{},"this.name=name",[99,80572,1189],{},[99,80574,80575],{},"Pig.eyes=2",[99,80577,80578],{},"Pig.sayHai=function () { console.log(this) }",[99,80580,80581],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[99,80583,80584],{},"console.log(Pig.eyes) \u002F\u002F2",[99,80586,11442],{},[194,80588,80589,80592,80595,80598,80601],{},[106,80590,80591],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[106,80593,80594],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[106,80596,80597],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[106,80599,80600],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[106,80602,80603],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[99,80605,80606],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[210,80608,80610],{"id":80609},"_4105-内置构造函数","4.10.5 内置构造函数",[99,80612,80613],{},"内置构造函数包含：",[99,80615,80616],{},[155,80617],{"alt":20,"src":80618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[99,80620,80621],{},[155,80622],{"alt":20,"src":80623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[99,80625,80626],{},"这些基本数据类型，js对他们进行了包装",[51884,80628,80629],{},"\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",[22108,80631,80633],{"id":80632},"_41051-object","4.10.5.1 Object",[99,80635,80636],{},"Object 是内置的构造函数，用于创建普通对象",[99,80638,80639],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[15,80641,80643],{"className":50704,"code":80642,"language":50706,"meta":20,"style":20},"const user=new Object({name:'小明',age:15})\n",[22,80644,80645],{"__ignoreMap":20},[25,80646,80647],{"class":27,"line":28},[25,80648,80642],{"class":244},[99,80650,80651],{},"三个常用的静态方法：",[23020,80653,80655],{"id":80654},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[99,80657,80658],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[99,80660,80661],{},[155,80662],{"alt":20,"src":80663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[99,80665,80666],{},[155,80667],{"alt":20,"src":80668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[15,80670,80672],{"className":53138,"code":80671,"language":53140,"meta":20,"style":20},"\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",[22,80673,80674,80682,80690,80695,80700,80705,80710,80715,80720,80728],{"__ignoreMap":20},[25,80675,80676,80678,80680],{"class":27,"line":28},[25,80677,1153],{"class":244},[25,80679,51871],{"class":51371},[25,80681,51378],{"class":244},[25,80683,80684,80686,80688],{"class":27,"line":39},[25,80685,52215],{"class":244},[25,80687,51884],{"class":51371},[25,80689,51378],{"class":244},[25,80691,80692],{"class":27,"line":51},[25,80693,80694],{"class":244},"    const o = { name: 'pink', age: 6 }\n",[25,80696,80697],{"class":27,"line":59},[25,80698,80699],{"class":244},"    \u002F\u002F 获得所有属性名\n",[25,80701,80702],{"class":27,"line":67},[25,80703,80704],{"class":244},"    const arr = Object.keys(o)\n",[25,80706,80707],{"class":27,"line":75},[25,80708,80709],{"class":244},"    console.log(arr)\n",[25,80711,80712],{"class":27,"line":83},[25,80713,80714],{"class":244},"    \u002F\u002F 获得所有属性值\n",[25,80716,80717],{"class":27,"line":91},[25,80718,80719],{"class":244},"    console.log(Object.values(o))\n",[25,80721,80722,80724,80726],{"class":27,"line":1429},[25,80723,52488],{"class":244},[25,80725,51884],{"class":51371},[25,80727,51378],{"class":244},[25,80729,80730,80732,80734],{"class":27,"line":1441},[25,80731,51856],{"class":244},[25,80733,51871],{"class":51371},[25,80735,51378],{"class":244},[23020,80737,80739],{"id":80738},"_410512-object-assign","4.10.5.1.2 Object. assign",[99,80741,80742],{},"Object.assign(oo,o)",[99,80744,80745],{},"后的东西添加给前 是追加",[99,80747,80748],{},[155,80749],{"alt":20,"src":80750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[99,80752,80753],{},[155,80754],{"alt":20,"src":80755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[15,80757,80759],{"className":53138,"code":80758,"language":53140,"meta":20,"style":20},"\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",[22,80760,80761,80769,80777,80781,80785,80789,80793,80797,80801,80806,80811,80816,80821,80826,80834],{"__ignoreMap":20},[25,80762,80763,80765,80767],{"class":27,"line":28},[25,80764,1153],{"class":244},[25,80766,51871],{"class":51371},[25,80768,51378],{"class":244},[25,80770,80771,80773,80775],{"class":27,"line":39},[25,80772,52215],{"class":244},[25,80774,51884],{"class":51371},[25,80776,51378],{"class":244},[25,80778,80779],{"class":27,"line":51},[25,80780,80694],{"class":244},[25,80782,80783],{"class":27,"line":59},[25,80784,80699],{"class":244},[25,80786,80787],{"class":27,"line":67},[25,80788,80704],{"class":244},[25,80790,80791],{"class":27,"line":75},[25,80792,80709],{"class":244},[25,80794,80795],{"class":27,"line":83},[25,80796,80714],{"class":244},[25,80798,80799],{"class":27,"line":91},[25,80800,80719],{"class":244},[25,80802,80803],{"class":27,"line":1429},[25,80804,80805],{"class":244},"    const oo = {}\n",[25,80807,80808],{"class":27,"line":1441},[25,80809,80810],{"class":244},"    Object.assign(oo, o)\n",[25,80812,80813],{"class":27,"line":1723},[25,80814,80815],{"class":244},"    console.log(oo)\n",[25,80817,80818],{"class":27,"line":1728},[25,80819,80820],{"class":244},"    Object.assign(o, { gender: '女' })\n",[25,80822,80823],{"class":27,"line":1734},[25,80824,80825],{"class":244},"    console.log(o)\n",[25,80827,80828,80830,80832],{"class":27,"line":1739},[25,80829,52488],{"class":244},[25,80831,51884],{"class":51371},[25,80833,51378],{"class":244},[25,80835,80836,80838,80840],{"class":27,"line":1753},[25,80837,51856],{"class":244},[25,80839,51871],{"class":51371},[25,80841,51378],{"class":244},[99,80843,80844],{},[155,80845],{"alt":20,"src":80846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22108,80848,80850],{"id":80849},"_41052-array","4.10.5.2 Array",[99,80852,80853],{},"Array 是内置的构造函数，用于创建数组",[99,80855,80856],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[15,80858,80860],{"className":50704,"code":80859,"language":50706,"meta":20,"style":20},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[22,80861,80862,80867],{"__ignoreMap":20},[25,80863,80864],{"class":27,"line":28},[25,80865,80866],{"class":244},"const arr=new Array(3,5)\n",[25,80868,80869],{"class":27,"line":39},[25,80870,80871],{"class":244},"console.log(arr)  \u002F\u002F[3,5]\n",[99,80873,80874],{},"Array的实例方法，这个方法是实例成员",[99,80876,80877],{},[155,80878],{"alt":20,"src":80879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23020,80881,80883],{"id":80882},"_410521-reduce","4.10.5.2.1 reduce",[99,80885,80886],{},[155,80887],{"alt":20,"src":80888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[15,80890,80892],{"className":53138,"code":80891,"language":53140,"meta":20,"style":20},"\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",[22,80893,80894,80902,80910,80915,80920,80925,80930,80934,80939,80944,80949,80953,80958,80963,80967,80972,80977,80982,80990],{"__ignoreMap":20},[25,80895,80896,80898,80900],{"class":27,"line":28},[25,80897,1153],{"class":244},[25,80899,51871],{"class":51371},[25,80901,51378],{"class":244},[25,80903,80904,80906,80908],{"class":27,"line":39},[25,80905,52215],{"class":244},[25,80907,51884],{"class":51371},[25,80909,51378],{"class":244},[25,80911,80912],{"class":27,"line":51},[25,80913,80914],{"class":244},"    const arr = [1, 5, 8]\n",[25,80916,80917],{"class":27,"line":59},[25,80918,80919],{"class":244},"    \u002F\u002F 1.没有初始值\n",[25,80921,80922],{"class":27,"line":67},[25,80923,80924],{"class":244},"    const total = arr.reduce(function (prev, current) {\n",[25,80926,80927],{"class":27,"line":75},[25,80928,80929],{"class":244},"      return prev + current\n",[25,80931,80932],{"class":27,"line":83},[25,80933,33532],{"class":244},[25,80935,80936],{"class":27,"line":91},[25,80937,80938],{"class":244},"    console.log(total)   \u002F\u002F14\n",[25,80940,80941],{"class":27,"line":1429},[25,80942,80943],{"class":244},"    \u002F\u002F 2.有初始值\n",[25,80945,80946],{"class":27,"line":1441},[25,80947,80948],{"class":244},"    const total1 = arr.reduce(function (prev, current) {\n",[25,80950,80951],{"class":27,"line":1723},[25,80952,80929],{"class":244},[25,80954,80955],{"class":27,"line":1728},[25,80956,80957],{"class":244},"    }, 10)\n",[25,80959,80960],{"class":27,"line":1734},[25,80961,80962],{"class":244},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[25,80964,80965],{"class":27,"line":1739},[25,80966,2510],{"emptyLinePlaceholder":167},[25,80968,80969],{"class":27,"line":1753},[25,80970,80971],{"class":244},"    \u002F\u002F 3.箭头函数写法\n",[25,80973,80974],{"class":27,"line":1758},[25,80975,80976],{"class":244},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[25,80978,80979],{"class":27,"line":1764},[25,80980,80981],{"class":244},"    console.log(total2)   \u002F\u002F24\n",[25,80983,80984,80986,80988],{"class":27,"line":1785},[25,80985,52488],{"class":244},[25,80987,51884],{"class":51371},[25,80989,51378],{"class":244},[25,80991,80992,80994,80996],{"class":27,"line":1790},[25,80993,51856],{"class":244},[25,80995,51871],{"class":51371},[25,80997,51378],{"class":244},[99,80999,81000],{},"执行过程：",[194,81002,81003,81006,81009],{},[106,81004,81005],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[106,81007,81008],{},"每一次循环，把返回值给作为下一次循环的上一次值",[106,81010,81011],{},"如果有起始值，则起始值作为上一次值",[15,81013,81015],{"className":53138,"code":81014,"language":53140,"meta":20,"style":20},"\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",[22,81016,81017,81025,81033,81037,81041,81045,81049,81053,81057,81062,81067,81072,81077,81082,81086,81090,81094,81098,81102,81106,81111,81115,81120,81124,81129,81134,81138,81142,81146,81154],{"__ignoreMap":20},[25,81018,81019,81021,81023],{"class":27,"line":28},[25,81020,1153],{"class":244},[25,81022,51871],{"class":51371},[25,81024,51378],{"class":244},[25,81026,81027,81029,81031],{"class":27,"line":39},[25,81028,52215],{"class":244},[25,81030,51884],{"class":51371},[25,81032,51378],{"class":244},[25,81034,81035],{"class":27,"line":51},[25,81036,80914],{"class":244},[25,81038,81039],{"class":27,"line":59},[25,81040,80919],{"class":244},[25,81042,81043],{"class":27,"line":67},[25,81044,80924],{"class":244},[25,81046,81047],{"class":27,"line":75},[25,81048,80929],{"class":244},[25,81050,81051],{"class":27,"line":83},[25,81052,33532],{"class":244},[25,81054,81055],{"class":27,"line":91},[25,81056,80938],{"class":244},[25,81058,81059],{"class":27,"line":1429},[25,81060,81061],{"class":244},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[25,81063,81064],{"class":27,"line":1441},[25,81065,81066],{"class":244},"    \u002F\u002F     1              5                    6\n",[25,81068,81069],{"class":27,"line":1723},[25,81070,81071],{"class":244},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[25,81073,81074],{"class":27,"line":1728},[25,81075,81076],{"class":244},"    \u002F\u002F     6              8                    14\n",[25,81078,81079],{"class":27,"line":1734},[25,81080,81081],{"class":244},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[25,81083,81084],{"class":27,"line":1739},[25,81085,80943],{"class":244},[25,81087,81088],{"class":27,"line":1753},[25,81089,80948],{"class":244},[25,81091,81092],{"class":27,"line":1758},[25,81093,80929],{"class":244},[25,81095,81096],{"class":27,"line":1764},[25,81097,80957],{"class":244},[25,81099,81100],{"class":27,"line":1785},[25,81101,80962],{"class":244},[25,81103,81104],{"class":27,"line":1790},[25,81105,81061],{"class":244},[25,81107,81108],{"class":27,"line":1804},[25,81109,81110],{"class":244},"    \u002F\u002F     10             1                     11\n",[25,81112,81113],{"class":27,"line":1809},[25,81114,81071],{"class":244},[25,81116,81117],{"class":27,"line":1838},[25,81118,81119],{"class":244},"    \u002F\u002F     11             5                    16\n",[25,81121,81122],{"class":27,"line":1843},[25,81123,81071],{"class":244},[25,81125,81126],{"class":27,"line":1860},[25,81127,81128],{"class":244},"    \u002F\u002F     16             8                    24\n",[25,81130,81131],{"class":27,"line":1865},[25,81132,81133],{"class":244},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[25,81135,81136],{"class":27,"line":1870},[25,81137,80971],{"class":244},[25,81139,81140],{"class":27,"line":1875},[25,81141,80976],{"class":244},[25,81143,81144],{"class":27,"line":1889},[25,81145,80981],{"class":244},[25,81147,81148,81150,81152],{"class":27,"line":1894},[25,81149,52488],{"class":244},[25,81151,51884],{"class":51371},[25,81153,51378],{"class":244},[25,81155,81156,81158,81160],{"class":27,"line":2687},[25,81157,51856],{"class":244},[25,81159,51871],{"class":51371},[25,81161,51378],{"class":244},[23020,81163,81165],{"id":81164},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[99,81167,81168],{},[155,81169],{"alt":20,"src":81170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[15,81172,81174],{"className":53138,"code":81173,"language":53140,"meta":20,"style":20},"\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",[22,81175,81176,81184,81192,81197,81202,81207,81212,81216,81221,81226,81231,81236,81241,81246,81250,81255,81259,81264,81272],{"__ignoreMap":20},[25,81177,81178,81180,81182],{"class":27,"line":28},[25,81179,1153],{"class":244},[25,81181,51871],{"class":51371},[25,81183,51378],{"class":244},[25,81185,81186,81188,81190],{"class":27,"line":39},[25,81187,52215],{"class":244},[25,81189,51884],{"class":51371},[25,81191,51378],{"class":244},[25,81193,81194],{"class":27,"line":51},[25,81195,81196],{"class":244},"    const arr = [\n",[25,81198,81199],{"class":27,"line":59},[25,81200,81201],{"class":244},"      { name: '张三', salary: 10000 },\n",[25,81203,81204],{"class":27,"line":67},[25,81205,81206],{"class":244},"      { name: '李四', salary: 10000 },\n",[25,81208,81209],{"class":27,"line":75},[25,81210,81211],{"class":244},"      { name: '王五', salary: 10000 }\n",[25,81213,81214],{"class":27,"line":83},[25,81215,53180],{"class":244},[25,81217,81218],{"class":27,"line":91},[25,81219,81220],{"class":244},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[25,81222,81223],{"class":27,"line":1429},[25,81224,81225],{"class":244},"    \u002F\u002F prev是累计值\n",[25,81227,81228],{"class":27,"line":1441},[25,81229,81230],{"class":244},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[25,81232,81233],{"class":27,"line":1723},[25,81234,81235],{"class":244},"    console.log(total)\n",[25,81237,81238],{"class":27,"line":1728},[25,81239,81240],{"class":244},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[25,81242,81243],{"class":27,"line":1734},[25,81244,81245],{"class":244},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[25,81247,81248],{"class":27,"line":1739},[25,81249,81240],{"class":244},[25,81251,81252],{"class":27,"line":1753},[25,81253,81254],{"class":244},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[25,81256,81257],{"class":27,"line":1758},[25,81258,81240],{"class":244},[25,81260,81261],{"class":27,"line":1764},[25,81262,81263],{"class":244},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[25,81265,81266,81268,81270],{"class":27,"line":1785},[25,81267,52488],{"class":244},[25,81269,51884],{"class":51371},[25,81271,51378],{"class":244},[25,81273,81274,81276,81278],{"class":27,"line":1790},[25,81275,51856],{"class":244},[25,81277,51871],{"class":51371},[25,81279,51378],{"class":244},[23020,81281,81283],{"id":81282},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[99,81285,81286],{},[155,81287],{"alt":20,"src":81288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[99,81290,81291],{},[155,81292],{"alt":20,"src":81293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[194,81295,81296],{},[106,81297,81298],{},"find()",[99,81300,81301],{},"循环查找，找到第一个就ok",[99,81303,81304],{},[481,81305,81308],{"href":81306,"rel":81307},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23973],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[15,81310,81312],{"className":50704,"code":81311,"language":50706,"meta":20,"style":20},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[22,81313,81314,81319,81324],{"__ignoreMap":20},[25,81315,81316],{"class":27,"line":28},[25,81317,81318],{"class":244},"const array1 = [5, 12, 8, 130, 44]\n",[25,81320,81321],{"class":27,"line":39},[25,81322,81323],{"class":244},"const found = array1.find((element) => element > 10)\n",[25,81325,81326],{"class":27,"line":51},[25,81327,81328],{"class":244},"console.log(found)  \u002F\u002F12\n",[99,81330,81331,81333,81334,81339,81340,81343,81344,81346,81347,81352,81353,81355,81356,81358,81359,81361,81362],{},[22,81332,81298],{}," 方法是一个",[481,81335,81338],{"href":81336,"rel":81337},"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",[23973],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[22,81341,81342],{},"callbackFn"," 函数，直到 ",[22,81345,81342],{}," 返回一个",[481,81348,81351],{"href":81349,"rel":81350},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23973],"真值","。然后 ",[22,81354,81298],{}," 返回该元素并停止迭代数组。如果 ",[22,81357,81342],{}," 从未返回真值，则 ",[22,81360,81298],{}," 返回 ",[22,81363,81364],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[15,81366,81368],{"className":53138,"code":81367,"language":53140,"meta":20,"style":20},"\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",[22,81369,81370,81378,81386,81391,81396,81401,81405,81410,81415,81419,81424,81429,81433,81437,81442,81447,81451,81455,81460,81465,81470,81475,81480,81484,81489,81494,81499,81504,81508,81513,81521],{"__ignoreMap":20},[25,81371,81372,81374,81376],{"class":27,"line":28},[25,81373,1153],{"class":244},[25,81375,51871],{"class":51371},[25,81377,51378],{"class":244},[25,81379,81380,81382,81384],{"class":27,"line":39},[25,81381,52215],{"class":244},[25,81383,51884],{"class":51371},[25,81385,51378],{"class":244},[25,81387,81388],{"class":27,"line":51},[25,81389,81390],{"class":244},"    const arr = ['red', 'blue', 'green']\n",[25,81392,81393],{"class":27,"line":59},[25,81394,81395],{"class":244},"    const found = arr.find(item => item === 'pink')\n",[25,81397,81398],{"class":27,"line":67},[25,81399,81400],{"class":244},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[25,81402,81403],{"class":27,"line":75},[25,81404,2510],{"emptyLinePlaceholder":167},[25,81406,81407],{"class":27,"line":83},[25,81408,81409],{"class":244},"    \u002F\u002F 使用场景，用于查找数据\n",[25,81411,81412],{"class":27,"line":91},[25,81413,81414],{"class":244},"    const arr1 = [\n",[25,81416,81417],{"class":27,"line":1429},[25,81418,79457],{"class":244},[25,81420,81421],{"class":27,"line":1441},[25,81422,81423],{"class":244},"        name: '小米',\n",[25,81425,81426],{"class":27,"line":1723},[25,81427,81428],{"class":244},"        price: 1999\n",[25,81430,81431],{"class":27,"line":1728},[25,81432,77963],{"class":244},[25,81434,81435],{"class":27,"line":1734},[25,81436,79457],{"class":244},[25,81438,81439],{"class":27,"line":1739},[25,81440,81441],{"class":244},"        name: '华为',\n",[25,81443,81444],{"class":27,"line":1753},[25,81445,81446],{"class":244},"        price: 3999\n",[25,81448,81449],{"class":27,"line":1758},[25,81450,52469],{"class":244},[25,81452,81453],{"class":27,"line":1764},[25,81454,53180],{"class":244},[25,81456,81457],{"class":27,"line":1785},[25,81458,81459],{"class":244},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[25,81461,81462],{"class":27,"line":1790},[25,81463,81464],{"class":244},"    \u002F\u002F const found1 = arr1.find(item => {\n",[25,81466,81467],{"class":27,"line":1804},[25,81468,81469],{"class":244},"    \u002F\u002F   if (item.name === '小米') {\n",[25,81471,81472],{"class":27,"line":1809},[25,81473,81474],{"class":244},"    \u002F\u002F     return item\n",[25,81476,81477],{"class":27,"line":1838},[25,81478,81479],{"class":244},"    \u002F\u002F   }\n",[25,81481,81482],{"class":27,"line":1843},[25,81483,63361],{"class":244},[25,81485,81486],{"class":27,"line":1860},[25,81487,81488],{"class":244},"    \u002F\u002F 另一种写法\n",[25,81490,81491],{"class":27,"line":1865},[25,81492,81493],{"class":244},"    const found1 = arr1.find(item => {\n",[25,81495,81496],{"class":27,"line":1870},[25,81497,81498],{"class":244},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[25,81500,81501],{"class":27,"line":1875},[25,81502,81503],{"class":244},"      return item.name = '小米'\n",[25,81505,81506],{"class":27,"line":1889},[25,81507,33532],{"class":244},[25,81509,81510],{"class":27,"line":1894},[25,81511,81512],{"class":244},"    console.log(found1)\n",[25,81514,81515,81517,81519],{"class":27,"line":2687},[25,81516,52488],{"class":244},[25,81518,51884],{"class":51371},[25,81520,51378],{"class":244},[25,81522,81523,81525,81527],{"class":27,"line":2701},[25,81524,51856],{"class":244},[25,81526,51871],{"class":51371},[25,81528,51378],{"class":244},[99,81530,81531],{},[155,81532],{"alt":20,"src":81533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[99,81535,81536],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[194,81538,81539],{"start":39},[106,81540,81541],{},"every()返回的是布尔值",[99,81543,81544],{},[481,81545,81548],{"href":81546,"rel":81547},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23973],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[99,81550,81551],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[99,81553,81554],{},"some是只有有一个就没问题",[99,81556,81557],{},"every是必须全是才行",[15,81559,81563],{"className":81560,"code":81561,"language":81562,"meta":20,"style":20},"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",[22,81564,81565,81581,81595,81599,81608],{"__ignoreMap":20},[25,81566,81567,81569,81572,81574,81576,81579],{"class":27,"line":28},[25,81568,54520],{"class":240},[25,81570,81571],{"class":244}," isBigEnough(element, ",[25,81573,74129],{"class":240},[25,81575,12545],{"class":244},[25,81577,81578],{"class":240},"array",[25,81580,12552],{"class":244},[25,81582,81583,81586,81589,81591,81593],{"class":27,"line":39},[25,81584,81585],{"class":240},"  return",[25,81587,81588],{"class":244}," element ",[25,81590,1821],{"class":240},[25,81592,2148],{"class":35},[25,81594,1403],{"class":244},[25,81596,81597],{"class":27,"line":51},[25,81598,1676],{"class":244},[25,81600,81601,81604,81606],{"class":27,"line":59},[25,81602,81603],{"class":244},"[12, 5, 8, 130, 44].every(isBigEnough); ",[25,81605,33400],{"class":240},[25,81607,54587],{"class":244},[25,81609,81610,81613,81615],{"class":27,"line":67},[25,81611,81612],{"class":244},"[12, 54, 18, 130, 44].every(isBigEnough); ",[25,81614,33400],{"class":240},[25,81616,58011],{"class":244},[15,81618,81620],{"className":53138,"code":81619,"language":53140,"meta":20,"style":20},"\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",[22,81621,81622,81630,81638,81643,81647,81652,81657,81665],{"__ignoreMap":20},[25,81623,81624,81626,81628],{"class":27,"line":28},[25,81625,1153],{"class":244},[25,81627,51871],{"class":51371},[25,81629,51378],{"class":244},[25,81631,81632,81634,81636],{"class":27,"line":39},[25,81633,52215],{"class":244},[25,81635,51884],{"class":51371},[25,81637,51378],{"class":244},[25,81639,81640],{"class":27,"line":51},[25,81641,81642],{"class":244},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[25,81644,81645],{"class":27,"line":59},[25,81646,78393],{"class":244},[25,81648,81649],{"class":27,"line":67},[25,81650,81651],{"class":244},"    const flag = arr.every(item => item >= 10)\n",[25,81653,81654],{"class":27,"line":75},[25,81655,81656],{"class":244},"    console.log(flag)    \u002F\u002Ftrue\n",[25,81658,81659,81661,81663],{"class":27,"line":83},[25,81660,52488],{"class":244},[25,81662,51884],{"class":51371},[25,81664,51378],{"class":244},[25,81666,81667,81669,81671],{"class":27,"line":91},[25,81668,51856],{"class":244},[25,81670,51871],{"class":51371},[25,81672,51378],{"class":244},[15,81674,81676],{"className":53138,"code":81675,"language":53140,"meta":20,"style":20},"\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",[22,81677,81678,81686,81694,81698,81703,81708,81713,81721],{"__ignoreMap":20},[25,81679,81680,81682,81684],{"class":27,"line":28},[25,81681,1153],{"class":244},[25,81683,51871],{"class":51371},[25,81685,51378],{"class":244},[25,81687,81688,81690,81692],{"class":27,"line":39},[25,81689,52215],{"class":244},[25,81691,51884],{"class":51371},[25,81693,51378],{"class":244},[25,81695,81696],{"class":27,"line":51},[25,81697,81642],{"class":244},[25,81699,81700],{"class":27,"line":59},[25,81701,81702],{"class":244},"    const arr = [10, 0, 5]\n",[25,81704,81705],{"class":27,"line":67},[25,81706,81707],{"class":244},"    const flag = arr.some(item => item >= 10)\n",[25,81709,81710],{"class":27,"line":75},[25,81711,81712],{"class":244},"    console.log(flag)   \u002F\u002Ftrue\n",[25,81714,81715,81717,81719],{"class":27,"line":83},[25,81716,52488],{"class":244},[25,81718,51884],{"class":51371},[25,81720,51378],{"class":244},[25,81722,81723,81725,81727],{"class":27,"line":91},[25,81724,51856],{"class":244},[25,81726,51871],{"class":51371},[25,81728,51378],{"class":244},[23020,81730,81732],{"id":81731},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[99,81734,81735],{},[155,81736],{"alt":20,"src":81737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[15,81739,81741],{"className":50704,"code":81740,"language":50706,"meta":20,"style":20},"\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",[22,81742,81743,81753,81767,81771,81779,81793,81813,81825,81833,81840,81852,81864,81876,81888,81898,81908,81912,81920,81928,81932,81940,81952,81960,81982,81987,81992,82025,82033,82041,82045],{"__ignoreMap":20},[25,81744,81745,81747,81749,81751],{"class":27,"line":28},[25,81746,51368],{"class":244},[25,81748,51372],{"class":51371},[25,81750,51375],{"class":31},[25,81752,51378],{"class":244},[25,81754,81755,81757,81759,81761,81763,81765],{"class":27,"line":39},[25,81756,1153],{"class":244},[25,81758,50706],{"class":51371},[25,81760,51387],{"class":31},[25,81762,290],{"class":244},[25,81764,51392],{"class":45},[25,81766,51378],{"class":244},[25,81768,81769],{"class":27,"line":51},[25,81770,2510],{"emptyLinePlaceholder":167},[25,81772,81773,81775,81777],{"class":27,"line":59},[25,81774,1153],{"class":244},[25,81776,51405],{"class":51371},[25,81778,51378],{"class":244},[25,81780,81781,81783,81785,81787,81789,81791],{"class":27,"line":67},[25,81782,52215],{"class":244},[25,81784,51415],{"class":51371},[25,81786,51418],{"class":31},[25,81788,290],{"class":244},[25,81790,51423],{"class":45},[25,81792,51378],{"class":244},[25,81794,81795,81797,81799,81801,81803,81805,81807,81809,81811],{"class":27,"line":75},[25,81796,52215],{"class":244},[25,81798,51415],{"class":51371},[25,81800,15030],{"class":31},[25,81802,290],{"class":244},[25,81804,51462],{"class":45},[25,81806,51442],{"class":31},[25,81808,290],{"class":244},[25,81810,51469],{"class":45},[25,81812,51378],{"class":244},[25,81814,81815,81817,81819,81821,81823],{"class":27,"line":83},[25,81816,52215],{"class":244},[25,81818,51478],{"class":51371},[25,81820,51481],{"class":244},[25,81822,51478],{"class":51371},[25,81824,51378],{"class":244},[25,81826,81827,81829,81831],{"class":27,"line":91},[25,81828,52215],{"class":244},[25,81830,159],{"class":51371},[25,81832,51378],{"class":244},[25,81834,81835,81838],{"class":27,"line":1429},[25,81836,81837],{"class":51371},"    div",[25,81839,15682],{"class":244},[25,81841,81842,81844,81846,81848,81850],{"class":27,"line":1441},[25,81843,54842],{"class":35},[25,81845,51508],{"class":244},[25,81847,1833],{"class":35},[25,81849,51563],{"class":240},[25,81851,1403],{"class":244},[25,81853,81854,81856,81858,81860,81862],{"class":27,"line":1723},[25,81855,54856],{"class":35},[25,81857,51508],{"class":244},[25,81859,644],{"class":35},[25,81861,51563],{"class":240},[25,81863,1403],{"class":244},[25,81865,81866,81868,81870,81872,81874],{"class":27,"line":1728},[25,81867,57430],{"class":35},[25,81869,51508],{"class":244},[25,81871,644],{"class":35},[25,81873,51563],{"class":240},[25,81875,1403],{"class":244},[25,81877,81878,81880,81882,81884,81886],{"class":27,"line":1734},[25,81879,65204],{"class":35},[25,81881,51508],{"class":244},[25,81883,741],{"class":35},[25,81885,51563],{"class":240},[25,81887,1403],{"class":244},[25,81889,81890,81892,81894,81896],{"class":27,"line":1739},[25,81891,57357],{"class":35},[25,81893,51508],{"class":244},[25,81895,51663],{"class":35},[25,81897,1403],{"class":244},[25,81899,81900,81902,81904,81906],{"class":27,"line":1753},[25,81901,54955],{"class":35},[25,81903,51508],{"class":244},[25,81905,51716],{"class":35},[25,81907,1403],{"class":244},[25,81909,81910],{"class":27,"line":1758},[25,81911,2297],{"class":244},[25,81913,81914,81916,81918],{"class":27,"line":1764},[25,81915,52488],{"class":244},[25,81917,159],{"class":51371},[25,81919,51378],{"class":244},[25,81921,81922,81924,81926],{"class":27,"line":1785},[25,81923,51856],{"class":244},[25,81925,51405],{"class":51371},[25,81927,51378],{"class":244},[25,81929,81930],{"class":27,"line":1790},[25,81931,2510],{"emptyLinePlaceholder":167},[25,81933,81934,81936,81938],{"class":27,"line":1804},[25,81935,1153],{"class":244},[25,81937,51871],{"class":51371},[25,81939,51378],{"class":244},[25,81941,81942,81944,81946,81948,81950],{"class":27,"line":1809},[25,81943,52215],{"class":244},[25,81945,51682],{"class":51371},[25,81947,55385],{"class":244},[25,81949,51682],{"class":51371},[25,81951,51378],{"class":244},[25,81953,81954,81956,81958],{"class":27,"line":1838},[25,81955,52215],{"class":244},[25,81957,51884],{"class":51371},[25,81959,51378],{"class":244},[25,81961,81962,81964,81967,81969,81972,81975,81977,81980],{"class":27,"line":1843},[25,81963,11331],{"class":240},[25,81965,81966],{"class":35}," spec",[25,81968,13674],{"class":240},[25,81970,81971],{"class":244}," { size: ",[25,81973,81974],{"class":45},"'40cm*40cm'",[25,81976,55535],{"class":244},[25,81978,81979],{"class":45},"'黑色'",[25,81981,55675],{"class":244},[25,81983,81984],{"class":27,"line":1860},[25,81985,81986],{"class":302},"    \u002F\u002F const arr = Object.values(spec)\n",[25,81988,81989],{"class":27,"line":1865},[25,81990,81991],{"class":302},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[25,81993,81994,81996,81998,82000,82003,82005,82007,82010,82013,82016,82018,82020,82023],{"class":27,"line":1870},[25,81995,52478],{"class":244},[25,81997,54470],{"class":31},[25,81999,245],{"class":244},[25,82001,82002],{"class":45},"'div'",[25,82004,74320],{"class":244},[25,82006,290],{"class":240},[25,82008,82009],{"class":244}," Object.",[25,82011,82012],{"class":31},"values",[25,82014,82015],{"class":244},"(spec).",[25,82017,74294],{"class":31},[25,82019,245],{"class":244},[25,82021,82022],{"class":45},"'\u002F'",[25,82024,251],{"class":244},[25,82026,82027,82029,82031],{"class":27,"line":1875},[25,82028,52488],{"class":244},[25,82030,51884],{"class":51371},[25,82032,51378],{"class":244},[25,82034,82035,82037,82039],{"class":27,"line":1889},[25,82036,51856],{"class":244},[25,82038,51871],{"class":51371},[25,82040,51378],{"class":244},[25,82042,82043],{"class":27,"line":1894},[25,82044,2510],{"emptyLinePlaceholder":167},[25,82046,82047,82049,82051],{"class":27,"line":2687},[25,82048,51856],{"class":244},[25,82050,50706],{"class":51371},[25,82052,51378],{"class":244},[99,82054,82055],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23020,82057,82059],{"id":82058},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[99,82061,82062],{},"静态方法，将伪数组转换为真数组",[99,82064,82065],{},[155,82066],{"alt":20,"src":82067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[15,82069,82071],{"className":53138,"code":82070,"language":53140,"meta":20,"style":20},"\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",[22,82072,82073,82081,82089,82101,82113,82125,82133,82141,82146,82151,82156,82161,82169],{"__ignoreMap":20},[25,82074,82075,82077,82079],{"class":27,"line":28},[25,82076,1153],{"class":244},[25,82078,51871],{"class":51371},[25,82080,51378],{"class":244},[25,82082,82083,82085,82087],{"class":27,"line":39},[25,82084,52215],{"class":244},[25,82086,103],{"class":51371},[25,82088,51378],{"class":244},[25,82090,82091,82093,82095,82097,82099],{"class":27,"line":51},[25,82092,51412],{"class":244},[25,82094,106],{"class":51371},[25,82096,55385],{"class":244},[25,82098,106],{"class":51371},[25,82100,51378],{"class":244},[25,82102,82103,82105,82107,82109,82111],{"class":27,"line":59},[25,82104,51412],{"class":244},[25,82106,106],{"class":51371},[25,82108,55385],{"class":244},[25,82110,106],{"class":51371},[25,82112,51378],{"class":244},[25,82114,82115,82117,82119,82121,82123],{"class":27,"line":67},[25,82116,51412],{"class":244},[25,82118,106],{"class":51371},[25,82120,55385],{"class":244},[25,82122,106],{"class":51371},[25,82124,51378],{"class":244},[25,82126,82127,82129,82131],{"class":27,"line":75},[25,82128,52488],{"class":244},[25,82130,103],{"class":51371},[25,82132,51378],{"class":244},[25,82134,82135,82137,82139],{"class":27,"line":83},[25,82136,52215],{"class":244},[25,82138,51884],{"class":51371},[25,82140,51378],{"class":244},[25,82142,82143],{"class":27,"line":91},[25,82144,82145],{"class":244},"    const lis = document.querySelectorAll('li')\n",[25,82147,82148],{"class":27,"line":1429},[25,82149,82150],{"class":244},"    const liss = Array.from(lis)\n",[25,82152,82153],{"class":27,"line":1441},[25,82154,82155],{"class":244},"    liss.pop()\n",[25,82157,82158],{"class":27,"line":1723},[25,82159,82160],{"class":244},"    console.log(liss)\n",[25,82162,82163,82165,82167],{"class":27,"line":1728},[25,82164,52488],{"class":244},[25,82166,51884],{"class":51371},[25,82168,51378],{"class":244},[25,82170,82171,82173,82175],{"class":27,"line":1734},[25,82172,51856],{"class":244},[25,82174,51871],{"class":51371},[25,82176,51378],{"class":244},[99,82178,82179],{},[155,82180],{"alt":20,"src":82181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22108,82183,82185],{"id":82184},"_41053-string","4.10.5.3 String",[99,82187,82188],{},[155,82189],{"alt":20,"src":82190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23020,82192,82194],{"id":82193},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[15,82196,82198],{"className":53138,"code":82197,"language":53140,"meta":20,"style":20},"\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",[22,82199,82200,82208,82216,82221,82226,82231,82235,82240,82245,82250,82258],{"__ignoreMap":20},[25,82201,82202,82204,82206],{"class":27,"line":28},[25,82203,1153],{"class":244},[25,82205,51871],{"class":51371},[25,82207,51378],{"class":244},[25,82209,82210,82212,82214],{"class":27,"line":39},[25,82211,52215],{"class":244},[25,82213,51884],{"class":51371},[25,82215,51378],{"class":244},[25,82217,82218],{"class":27,"line":51},[25,82219,82220],{"class":244},"    \u002F\u002F 把字符串转化为数组\n",[25,82222,82223],{"class":27,"line":59},[25,82224,82225],{"class":244},"    const str = 'pink,red'\n",[25,82227,82228],{"class":27,"line":67},[25,82229,82230],{"class":244},"    const arr = str.split(',')\n",[25,82232,82233],{"class":27,"line":75},[25,82234,80709],{"class":244},[25,82236,82237],{"class":27,"line":83},[25,82238,82239],{"class":244},"    const str1 = '2025-8-25'\n",[25,82241,82242],{"class":27,"line":91},[25,82243,82244],{"class":244},"    const arr1 = str1.split('-')\n",[25,82246,82247],{"class":27,"line":1429},[25,82248,82249],{"class":244},"    console.log(arr1)\n",[25,82251,82252,82254,82256],{"class":27,"line":1441},[25,82253,52488],{"class":244},[25,82255,51884],{"class":51371},[25,82257,51378],{"class":244},[25,82259,82260,82262,82264],{"class":27,"line":1723},[25,82261,51856],{"class":244},[25,82263,51871],{"class":51371},[25,82265,51378],{"class":244},[23020,82267,82269],{"id":82268},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[99,82271,5291],{},[99,82273,82274],{},"substring(indexStart)",[99,82276,82277],{},"substring(indexStart, indexEnd)",[103,82279,82280,82291,82303,82313],{},[106,82281,82282,82283,82286,82287,82290],{},"如果省略了 ",[22,82284,82285],{},"indexEnd","，则 ",[22,82288,82289],{},"substring()"," 提取字符直到字符串的末尾",[106,82292,82293,82294,82297,82298,82286,82300,82302],{},"如果 ",[22,82295,82296],{},"indexStart"," 等于 ",[22,82299,82285],{},[22,82301,82289],{}," 返回一个空字符串",[106,82304,82293,82305,82307,82308,82286,82310,82312],{},[22,82306,82296],{}," 大于 ",[22,82309,82285],{},[22,82311,82289],{}," 的效果就像交换了这两个参数一样",[106,82314,82315],{},"结束的索引号不包含想要截取的部分",[15,82317,82319],{"className":81560,"code":82318,"language":81562,"meta":20,"style":20},"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",[22,82320,82321,82333,82337,82371,82401,82405,82436,82440,82467,82497,82527,82531,82562],{"__ignoreMap":20},[25,82322,82323,82326,82328,82331],{"class":27,"line":28},[25,82324,82325],{"class":244},"const anyString ",[25,82327,290],{"class":240},[25,82329,82330],{"class":45}," \"Mozilla\"",[25,82332,1403],{"class":244},[25,82334,82335],{"class":27,"line":39},[25,82336,2510],{"emptyLinePlaceholder":167},[25,82338,82339,82342,82344,82346,82348,82351,82353,82356,82358,82360,82362,82364,82366,82368],{"class":27,"line":51},[25,82340,82341],{"class":35},"console",[25,82343,801],{"class":244},[25,82345,58318],{"class":35},[25,82347,245],{"class":244},[25,82349,82350],{"class":35},"anyString",[25,82352,801],{"class":244},[25,82354,82355],{"class":35},"substring",[25,82357,245],{"class":244},[25,82359,434],{"class":35},[25,82361,12545],{"class":244},[25,82363,460],{"class":35},[25,82365,75324],{"class":244},[25,82367,33400],{"class":240},[25,82369,82370],{"class":45}," 'M'\n",[25,82372,82373,82375,82377,82379,82381,82383,82385,82387,82389,82391,82393,82395,82397,82399],{"class":27,"line":59},[25,82374,82341],{"class":35},[25,82376,801],{"class":244},[25,82378,58318],{"class":35},[25,82380,245],{"class":244},[25,82382,82350],{"class":35},[25,82384,801],{"class":244},[25,82386,82355],{"class":35},[25,82388,245],{"class":244},[25,82390,460],{"class":35},[25,82392,12545],{"class":244},[25,82394,434],{"class":35},[25,82396,75324],{"class":244},[25,82398,33400],{"class":240},[25,82400,82370],{"class":45},[25,82402,82403],{"class":27,"line":67},[25,82404,2510],{"emptyLinePlaceholder":167},[25,82406,82407,82409,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431,82433],{"class":27,"line":75},[25,82408,82341],{"class":35},[25,82410,801],{"class":244},[25,82412,58318],{"class":35},[25,82414,245],{"class":244},[25,82416,82350],{"class":35},[25,82418,801],{"class":244},[25,82420,82355],{"class":35},[25,82422,245],{"class":244},[25,82424,434],{"class":35},[25,82426,12545],{"class":244},[25,82428,587],{"class":35},[25,82430,75324],{"class":244},[25,82432,33400],{"class":240},[25,82434,82435],{"class":45}," 'Mozill'\n",[25,82437,82438],{"class":27,"line":83},[25,82439,2510],{"emptyLinePlaceholder":167},[25,82441,82442,82444,82446,82448,82450,82452,82454,82456,82458,82460,82462,82464],{"class":27,"line":91},[25,82443,82341],{"class":35},[25,82445,801],{"class":244},[25,82447,58318],{"class":35},[25,82449,245],{"class":244},[25,82451,82350],{"class":35},[25,82453,801],{"class":244},[25,82455,82355],{"class":35},[25,82457,245],{"class":244},[25,82459,536],{"class":35},[25,82461,75324],{"class":244},[25,82463,33400],{"class":240},[25,82465,82466],{"class":45}," 'lla'\n",[25,82468,82469,82471,82473,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495],{"class":27,"line":1429},[25,82470,82341],{"class":35},[25,82472,801],{"class":244},[25,82474,58318],{"class":35},[25,82476,245],{"class":244},[25,82478,82350],{"class":35},[25,82480,801],{"class":244},[25,82482,82355],{"class":35},[25,82484,245],{"class":244},[25,82486,536],{"class":35},[25,82488,12545],{"class":244},[25,82490,612],{"class":35},[25,82492,75380],{"class":244},[25,82494,33400],{"class":240},[25,82496,82466],{"class":45},[25,82498,82499,82501,82503,82505,82507,82509,82511,82513,82515,82517,82519,82521,82523,82525],{"class":27,"line":1441},[25,82500,82341],{"class":35},[25,82502,801],{"class":244},[25,82504,58318],{"class":35},[25,82506,245],{"class":244},[25,82508,82350],{"class":35},[25,82510,801],{"class":244},[25,82512,82355],{"class":35},[25,82514,245],{"class":244},[25,82516,612],{"class":35},[25,82518,12545],{"class":244},[25,82520,536],{"class":35},[25,82522,75324],{"class":244},[25,82524,33400],{"class":240},[25,82526,82466],{"class":45},[25,82528,82529],{"class":27,"line":1723},[25,82530,2510],{"emptyLinePlaceholder":167},[25,82532,82533,82535,82537,82539,82541,82543,82545,82547,82549,82551,82553,82555,82557,82559],{"class":27,"line":1728},[25,82534,82341],{"class":35},[25,82536,801],{"class":244},[25,82538,58318],{"class":35},[25,82540,245],{"class":244},[25,82542,82350],{"class":35},[25,82544,801],{"class":244},[25,82546,82355],{"class":35},[25,82548,245],{"class":244},[25,82550,434],{"class":35},[25,82552,12545],{"class":244},[25,82554,612],{"class":35},[25,82556,75324],{"class":244},[25,82558,33400],{"class":240},[25,82560,82561],{"class":45}," 'Mozilla'\n",[25,82563,82564,82566,82568,82570,82572,82574,82576,82578,82580,82582,82584,82586,82588,82590],{"class":27,"line":1734},[25,82565,82341],{"class":35},[25,82567,801],{"class":244},[25,82569,58318],{"class":35},[25,82571,245],{"class":244},[25,82573,82350],{"class":35},[25,82575,801],{"class":244},[25,82577,82355],{"class":35},[25,82579,245],{"class":244},[25,82581,434],{"class":35},[25,82583,12545],{"class":244},[25,82585,689],{"class":35},[25,82587,75324],{"class":244},[25,82589,33400],{"class":240},[25,82591,82561],{"class":45},[23020,82593,82595],{"id":82594},"_410533-startswith","4.10.5.3.3 startsWith",[99,82597,82598,82601,82602,82607,82608,82610,82611],{},[22,82599,82600],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[392,82603,82604],{},[22,82605,82606],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[22,82609,1474],{}," 或 ",[22,82612,66091],{},[15,82614,82616],{"className":77566,"code":82615,"language":77568,"meta":20,"style":20},"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",[22,82617,82618,82630,82649,82654,82674],{"__ignoreMap":20},[25,82619,82620,82622,82625,82627],{"class":27,"line":28},[25,82621,6902],{"class":240},[25,82623,82624],{"class":244}," str1 ",[25,82626,290],{"class":240},[25,82628,82629],{"class":45}," \"Saturday night plans\"\n",[25,82631,82632,82634,82636,82639,82642,82644,82647],{"class":27,"line":39},[25,82633,77603],{"class":244},[25,82635,58318],{"class":31},[25,82637,82638],{"class":244},"(str1.",[25,82640,82641],{"class":31},"startsWith",[25,82643,245],{"class":244},[25,82645,82646],{"class":45},"\"Sat\"",[25,82648,30568],{"class":244},[25,82650,82651],{"class":27,"line":51},[25,82652,82653],{"class":302},"\u002F\u002F Expected output: true\n",[25,82655,82656,82658,82660,82662,82664,82666,82668,82670,82672],{"class":27,"line":59},[25,82657,77603],{"class":244},[25,82659,58318],{"class":31},[25,82661,82638],{"class":244},[25,82663,82641],{"class":31},[25,82665,245],{"class":244},[25,82667,82646],{"class":45},[25,82669,12545],{"class":244},[25,82671,315],{"class":35},[25,82673,30568],{"class":244},[25,82675,82676],{"class":27,"line":67},[25,82677,82678],{"class":302},"\u002F\u002F Expected output: false\n",[15,82680,82682],{"className":50704,"code":82681,"language":50706,"meta":20,"style":20},"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",[22,82683,82684,82689,82694,82698,82703,82708],{"__ignoreMap":20},[25,82685,82686],{"class":27,"line":28},[25,82687,82688],{"class":244},"startsWith(searchString)\n",[25,82690,82691],{"class":27,"line":39},[25,82692,82693],{"class":244},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[25,82695,82696],{"class":27,"line":51},[25,82697,2510],{"emptyLinePlaceholder":167},[25,82699,82700],{"class":27,"line":59},[25,82701,82702],{"class":244},"const str3 = 'pink老师上课中'\n",[25,82704,82705],{"class":27,"line":67},[25,82706,82707],{"class":244},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[25,82709,82710],{"class":27,"line":75},[25,82711,82712],{"class":244},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23020,82714,82716],{"id":82715},"_410534-includes","4.10.5.3.4 includes",[99,82718,82719],{},"includes(searchString) includes(searchString, position)",[194,82721,82722],{},[106,82723,82724],{},"searchString:",[99,82726,82727,82728,82730,82731,82736,82737,82742,82743,21610,82746,82749,82750,82753],{},"一个要在 ",[22,82729,1412],{}," 中查找的字符串。",[481,82732,82735],{"href":82733,"rel":82734},"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",[23973],"不能是正则表达式","。所有非正则表达式的值都会被",[481,82738,82741],{"href":82739,"rel":82740},"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",[23973],"强制转换为字符串","，因此如果该参数被省略或传入 ",[22,82744,82745],{},"undefined",[22,82747,82748],{},"includes()"," 方法会在字符串中搜索 ",[22,82751,82752],{},"\"undefined\"","，这通常不是你想要的",[194,82755,82756],{"start":39},[106,82757,82758,1102],{},[22,82759,82760],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[99,82762,82763,82764,82767,82768],{},"在字符串中开始搜索 ",[22,82765,82766],{},"searchString"," 的位置。默认值为 ",[22,82769,434],{},[194,82771,82772],{"start":51},[106,82773,82774],{},"返回值：",[99,82776,82777,82778,82780,82781,82785,82786],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[22,82779,82766],{}," 为空字符串的情况），则返回 ",[392,82782,82783],{},[22,82784,1474],{}," ，否则返回 ",[392,82787,82788],{},[22,82789,66091],{},[194,82791,82792],{"start":59},[106,82793,82794],{},"异常：",[99,82796,82293,82797,13905,82799,82803],{},[22,82798,82766],{},[481,82800,82802],{"href":82733,"rel":82801},[23973],"是一个正则表达式","，则会抛出",[99,82805,82806],{},"只要是有就是true，不需要非得以谁开头结尾",[15,82808,82810],{"className":77566,"code":82809,"language":77568,"meta":20,"style":20},"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",[22,82811,82812,82823,82846,82865,82885,82907,82926],{"__ignoreMap":20},[25,82813,82814,82816,82818,82820],{"class":27,"line":28},[25,82815,6902],{"class":240},[25,82817,79846],{"class":244},[25,82819,290],{"class":240},[25,82821,82822],{"class":45}," \"To be, or not to be, that is the question.\"\n",[25,82824,82825,82827,82829,82832,82835,82837,82840,82843],{"class":27,"line":39},[25,82826,77603],{"class":244},[25,82828,58318],{"class":31},[25,82830,82831],{"class":244},"(str.",[25,82833,82834],{"class":31},"includes",[25,82836,245],{"class":244},[25,82838,82839],{"class":45},"\"To be\"",[25,82841,82842],{"class":244},"))",[25,82844,82845],{"class":302},"  \u002F\u002F true\n",[25,82847,82848,82850,82852,82854,82856,82858,82861,82863],{"class":27,"line":51},[25,82849,77603],{"class":244},[25,82851,58318],{"class":31},[25,82853,82831],{"class":244},[25,82855,82834],{"class":31},[25,82857,245],{"class":244},[25,82859,82860],{"class":45},"\"question\"",[25,82862,82842],{"class":244},[25,82864,82845],{"class":302},[25,82866,82867,82869,82871,82873,82875,82877,82880,82882],{"class":27,"line":59},[25,82868,77603],{"class":244},[25,82870,58318],{"class":31},[25,82872,82831],{"class":244},[25,82874,82834],{"class":31},[25,82876,245],{"class":244},[25,82878,82879],{"class":45},"\"nonexistent\"",[25,82881,82842],{"class":244},[25,82883,82884],{"class":302},"  \u002F\u002F false\n",[25,82886,82887,82889,82891,82893,82895,82897,82899,82901,82903,82905],{"class":27,"line":67},[25,82888,77603],{"class":244},[25,82890,58318],{"class":31},[25,82892,82831],{"class":244},[25,82894,82834],{"class":31},[25,82896,245],{"class":244},[25,82898,82839],{"class":45},[25,82900,12545],{"class":244},[25,82902,460],{"class":35},[25,82904,82842],{"class":244},[25,82906,82884],{"class":302},[25,82908,82909,82911,82913,82915,82917,82919,82922,82924],{"class":27,"line":75},[25,82910,77603],{"class":244},[25,82912,58318],{"class":31},[25,82914,82831],{"class":244},[25,82916,82834],{"class":31},[25,82918,245],{"class":244},[25,82920,82921],{"class":45},"\"TO BE\"",[25,82923,82842],{"class":244},[25,82925,82884],{"class":302},[25,82927,82928,82930,82932,82934,82936,82938,82940,82942],{"class":27,"line":83},[25,82929,77603],{"class":244},[25,82931,58318],{"class":31},[25,82933,82831],{"class":244},[25,82935,82834],{"class":31},[25,82937,245],{"class":244},[25,82939,7762],{"class":45},[25,82941,82842],{"class":244},[25,82943,82845],{"class":302},[23020,82945,82947],{"id":82946},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[15,82949,82951],{"className":53138,"code":82950,"language":53140,"meta":20,"style":20},"\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",[22,82952,82953,82961,82969,82974,82979,82984,82989,82994,83002],{"__ignoreMap":20},[25,82954,82955,82957,82959],{"class":27,"line":28},[25,82956,1153],{"class":244},[25,82958,51871],{"class":51371},[25,82960,51378],{"class":244},[25,82962,82963,82965,82967],{"class":27,"line":39},[25,82964,52215],{"class":244},[25,82966,51884],{"class":51371},[25,82968,51378],{"class":244},[25,82970,82971],{"class":27,"line":51},[25,82972,82973],{"class":244},"    const num = 10\n",[25,82975,82976],{"class":27,"line":59},[25,82977,82978],{"class":244},"    \u002F\u002F 强制转换\n",[25,82980,82981],{"class":27,"line":67},[25,82982,82983],{"class":244},"    console.log(String(num))\n",[25,82985,82986],{"class":27,"line":75},[25,82987,82988],{"class":244},"    \u002F\u002F toString()方法转换\n",[25,82990,82991],{"class":27,"line":83},[25,82992,82993],{"class":244},"    console.log(num.toString())\n",[25,82995,82996,82998,83000],{"class":27,"line":91},[25,82997,52488],{"class":244},[25,82999,51884],{"class":51371},[25,83001,51378],{"class":244},[25,83003,83004,83006,83008],{"class":27,"line":1429},[25,83005,51856],{"class":244},[25,83007,51871],{"class":51371},[25,83009,51378],{"class":244},[23020,83011,83013],{"id":83012},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[99,83015,83016],{},[155,83017],{"alt":20,"src":83018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[15,83020,83022],{"className":50704,"code":83021,"language":50706,"meta":20,"style":20},"\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",[22,83023,83024,83034,83048,83052,83060,83074,83094,83106,83114,83118,83126,83138,83146,83158,83163,83168,83173,83220,83236,83244,83252,83256],{"__ignoreMap":20},[25,83025,83026,83028,83030,83032],{"class":27,"line":28},[25,83027,51368],{"class":244},[25,83029,51372],{"class":51371},[25,83031,51375],{"class":31},[25,83033,51378],{"class":244},[25,83035,83036,83038,83040,83042,83044,83046],{"class":27,"line":39},[25,83037,1153],{"class":244},[25,83039,50706],{"class":51371},[25,83041,51387],{"class":31},[25,83043,290],{"class":244},[25,83045,51392],{"class":45},[25,83047,51378],{"class":244},[25,83049,83050],{"class":27,"line":51},[25,83051,2510],{"emptyLinePlaceholder":167},[25,83053,83054,83056,83058],{"class":27,"line":59},[25,83055,1153],{"class":244},[25,83057,51405],{"class":51371},[25,83059,51378],{"class":244},[25,83061,83062,83064,83066,83068,83070,83072],{"class":27,"line":67},[25,83063,52215],{"class":244},[25,83065,51415],{"class":51371},[25,83067,51418],{"class":31},[25,83069,290],{"class":244},[25,83071,51423],{"class":45},[25,83073,51378],{"class":244},[25,83075,83076,83078,83080,83082,83084,83086,83088,83090,83092],{"class":27,"line":75},[25,83077,52215],{"class":244},[25,83079,51415],{"class":51371},[25,83081,15030],{"class":31},[25,83083,290],{"class":244},[25,83085,51462],{"class":45},[25,83087,51442],{"class":31},[25,83089,290],{"class":244},[25,83091,51469],{"class":45},[25,83093,51378],{"class":244},[25,83095,83096,83098,83100,83102,83104],{"class":27,"line":83},[25,83097,52215],{"class":244},[25,83099,51478],{"class":51371},[25,83101,51481],{"class":244},[25,83103,51478],{"class":51371},[25,83105,51378],{"class":244},[25,83107,83108,83110,83112],{"class":27,"line":91},[25,83109,51856],{"class":244},[25,83111,51405],{"class":51371},[25,83113,51378],{"class":244},[25,83115,83116],{"class":27,"line":1429},[25,83117,2510],{"emptyLinePlaceholder":167},[25,83119,83120,83122,83124],{"class":27,"line":1441},[25,83121,1153],{"class":244},[25,83123,51871],{"class":51371},[25,83125,51378],{"class":244},[25,83127,83128,83130,83132,83134,83136],{"class":27,"line":1723},[25,83129,52215],{"class":244},[25,83131,51682],{"class":51371},[25,83133,55385],{"class":244},[25,83135,51682],{"class":51371},[25,83137,51378],{"class":244},[25,83139,83140,83142,83144],{"class":27,"line":1728},[25,83141,52215],{"class":244},[25,83143,51884],{"class":51371},[25,83145,51378],{"class":244},[25,83147,83148,83150,83153,83155],{"class":27,"line":1734},[25,83149,11331],{"class":240},[25,83151,83152],{"class":35}," gift",[25,83154,13674],{"class":240},[25,83156,83157],{"class":45}," '50g的茶叶，清洗球'\n",[25,83159,83160],{"class":27,"line":1739},[25,83161,83162],{"class":302},"    \u002F\u002F 1.把字符串拆分为数组\n",[25,83164,83165],{"class":27,"line":1753},[25,83166,83167],{"class":302},"    \u002F\u002F console.log(gift.split(','))\n",[25,83169,83170],{"class":27,"line":1758},[25,83171,83172],{"class":302},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[25,83174,83175,83177,83179,83181,83184,83187,83189,83192,83194,83196,83198,83200,83202,83205,83207,83210,83212,83214,83216,83218],{"class":27,"line":1764},[25,83176,11331],{"class":240},[25,83178,73990],{"class":35},[25,83180,13674],{"class":240},[25,83182,83183],{"class":244}," gift.",[25,83185,83186],{"class":31},"split",[25,83188,245],{"class":244},[25,83190,83191],{"class":45},"'，'",[25,83193,30897],{"class":244},[25,83195,74115],{"class":31},[25,83197,245],{"class":244},[25,83199,79866],{"class":5326},[25,83201,79869],{"class":240},[25,83203,83204],{"class":45}," `\u003Cspan>【赠品】${",[25,83206,79866],{"class":244},[25,83208,83209],{"class":45},"}\u003C\u002Fspan>\u003Cbr>`",[25,83211,30897],{"class":244},[25,83213,74294],{"class":31},[25,83215,245],{"class":244},[25,83217,74299],{"class":45},[25,83219,251],{"class":244},[25,83221,83222,83224,83226,83228,83230,83232,83234],{"class":27,"line":1785},[25,83223,52478],{"class":244},[25,83225,54470],{"class":31},[25,83227,245],{"class":244},[25,83229,82002],{"class":45},[25,83231,74320],{"class":244},[25,83233,290],{"class":240},[25,83235,74056],{"class":244},[25,83237,83238,83240,83242],{"class":27,"line":1790},[25,83239,52488],{"class":244},[25,83241,51884],{"class":51371},[25,83243,51378],{"class":244},[25,83245,83246,83248,83250],{"class":27,"line":1804},[25,83247,51856],{"class":244},[25,83249,51871],{"class":51371},[25,83251,51378],{"class":244},[25,83253,83254],{"class":27,"line":1809},[25,83255,2510],{"emptyLinePlaceholder":167},[25,83257,83258,83260,83262],{"class":27,"line":1838},[25,83259,51856],{"class":244},[25,83261,50706],{"class":51371},[25,83263,51378],{"class":244},[22108,83265,83267],{"id":83266},"_41054-number","4.10.5.4 Number",[99,83269,83270],{},[155,83271],{"alt":20,"src":83272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[99,83274,83275],{},"整数也可以进行toFixed来保留小数",[99,83277,83278],{},"比如：",[99,83280,83281],{},"const price=10",[99,83283,83284],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22108,83286,83288],{"id":83287},"_41055-购物车展示","4.10.5.5 购物车展示",[99,83290,83291],{},[155,83292],{"alt":20,"src":83293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[15,83295,83297],{"className":50704,"code":83296,"language":50706,"meta":20,"style":20},"\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",[22,83298,83299,83309,83323,83327,83335,83349,83369,83381,83389,83395,83405,83415,83425,83429,83433,83439,83451,83465,83469,83473,83479,83491,83507,83517,83533,83537,83541,83547,83557,83567,83571,83575,83583,83595,83607,83619,83623,83627,83635,83647,83651,83655,83666,83676,83688,83700,83710,83714,83718,83726,83735,83747,83757,83767,83771,83775,83783,83792,83799,83809,83821,83825,83829,83838,83848,83859,83871,83883,83887,83891,83900,83910,83921,83925,83929,83935,83947,83959,83969,83979,83997,84009,84013,84017,84026,84038,84048,84058,84070,84074,84082,84090,84094,84102,84116,84124,84138,84166,84174,84182,84192,84196,84204,84212,84221,84229,84238,84248,84252,84256,84264,84272,84281,84289,84297,84310,84314,84318,84326,84334,84343,84351,84359,84374,84378,84382,84390,84398,84407,84415,84423,84437,84445,84449,84453,84458,84484,84489,84526,84531,84554,84559,84613,84618,84654,84658,84664,84669,84678,84692,84701,84720,84729,84739,84744,84749,84762,84767,84821,84847,84855,84863,84867],{"__ignoreMap":20},[25,83300,83301,83303,83305,83307],{"class":27,"line":28},[25,83302,51368],{"class":244},[25,83304,51372],{"class":51371},[25,83306,51375],{"class":31},[25,83308,51378],{"class":244},[25,83310,83311,83313,83315,83317,83319,83321],{"class":27,"line":39},[25,83312,1153],{"class":244},[25,83314,50706],{"class":51371},[25,83316,51387],{"class":31},[25,83318,290],{"class":244},[25,83320,51392],{"class":45},[25,83322,51378],{"class":244},[25,83324,83325],{"class":27,"line":51},[25,83326,2510],{"emptyLinePlaceholder":167},[25,83328,83329,83331,83333],{"class":27,"line":59},[25,83330,1153],{"class":244},[25,83332,51405],{"class":51371},[25,83334,51378],{"class":244},[25,83336,83337,83339,83341,83343,83345,83347],{"class":27,"line":67},[25,83338,52215],{"class":244},[25,83340,51415],{"class":51371},[25,83342,51418],{"class":31},[25,83344,290],{"class":244},[25,83346,51423],{"class":45},[25,83348,51378],{"class":244},[25,83350,83351,83353,83355,83357,83359,83361,83363,83365,83367],{"class":27,"line":75},[25,83352,52215],{"class":244},[25,83354,51415],{"class":51371},[25,83356,15030],{"class":31},[25,83358,290],{"class":244},[25,83360,51462],{"class":45},[25,83362,51442],{"class":31},[25,83364,290],{"class":244},[25,83366,51469],{"class":45},[25,83368,51378],{"class":244},[25,83370,83371,83373,83375,83377,83379],{"class":27,"line":83},[25,83372,52215],{"class":244},[25,83374,51478],{"class":51371},[25,83376,51481],{"class":244},[25,83378,51478],{"class":51371},[25,83380,51378],{"class":244},[25,83382,83383,83385,83387],{"class":27,"line":91},[25,83384,52215],{"class":244},[25,83386,159],{"class":51371},[25,83388,51378],{"class":244},[25,83390,83391,83393],{"class":27,"line":1429},[25,83392,6513],{"class":51371},[25,83394,15682],{"class":244},[25,83396,83397,83399,83401,83403],{"class":27,"line":1441},[25,83398,54766],{"class":35},[25,83400,51508],{"class":244},[25,83402,434],{"class":35},[25,83404,1403],{"class":244},[25,83406,83407,83409,83411,83413],{"class":27,"line":1723},[25,83408,54777],{"class":35},[25,83410,51508],{"class":244},[25,83412,434],{"class":35},[25,83414,1403],{"class":244},[25,83416,83417,83419,83421,83423],{"class":27,"line":1728},[25,83418,72667],{"class":35},[25,83420,51508],{"class":244},[25,83422,60576],{"class":35},[25,83424,1403],{"class":244},[25,83426,83427],{"class":27,"line":1734},[25,83428,2297],{"class":244},[25,83430,83431],{"class":27,"line":1739},[25,83432,2510],{"emptyLinePlaceholder":167},[25,83434,83435,83437],{"class":27,"line":1753},[25,83436,62194],{"class":31},[25,83438,15682],{"class":244},[25,83440,83441,83443,83445,83447,83449],{"class":27,"line":1758},[25,83442,54842],{"class":35},[25,83444,51508],{"class":244},[25,83446,78645],{"class":35},[25,83448,51563],{"class":240},[25,83450,1403],{"class":244},[25,83452,83453,83455,83457,83459,83461,83463],{"class":27,"line":1764},[25,83454,54777],{"class":35},[25,83456,51508],{"class":244},[25,83458,554],{"class":35},[25,83460,51563],{"class":240},[25,83462,51627],{"class":35},[25,83464,1403],{"class":244},[25,83466,83467],{"class":27,"line":1785},[25,83468,2297],{"class":244},[25,83470,83471],{"class":27,"line":1790},[25,83472,2510],{"emptyLinePlaceholder":167},[25,83474,83475,83477],{"class":27,"line":1804},[25,83476,78696],{"class":31},[25,83478,15682],{"class":244},[25,83480,83481,83483,83485,83487,83489],{"class":27,"line":1809},[25,83482,54766],{"class":35},[25,83484,51508],{"class":244},[25,83486,818],{"class":35},[25,83488,51563],{"class":240},[25,83490,1403],{"class":244},[25,83492,83493,83495,83497,83499,83501,83503,83505],{"class":27,"line":1838},[25,83494,61931],{"class":35},[25,83496,51508],{"class":244},[25,83498,28192],{"class":35},[25,83500,78751],{"class":35},[25,83502,78754],{"class":35},[25,83504,938],{"class":240},[25,83506,1403],{"class":244},[25,83508,83509,83511,83513,83515],{"class":27,"line":1843},[25,83510,55080],{"class":35},[25,83512,51508],{"class":244},[25,83514,51548],{"class":35},[25,83516,1403],{"class":244},[25,83518,83519,83521,83523,83525,83527,83529,83531],{"class":27,"line":1860},[25,83520,62048],{"class":35},[25,83522,51508],{"class":244},[25,83524,460],{"class":35},[25,83526,51563],{"class":240},[25,83528,51592],{"class":35},[25,83530,62315],{"class":35},[25,83532,1403],{"class":244},[25,83534,83535],{"class":27,"line":1865},[25,83536,2297],{"class":244},[25,83538,83539],{"class":27,"line":1870},[25,83540,2510],{"emptyLinePlaceholder":167},[25,83542,83543,83545],{"class":27,"line":1875},[25,83544,78814],{"class":31},[25,83546,15682],{"class":244},[25,83548,83549,83551,83553,83555],{"class":27,"line":1889},[25,83550,62096],{"class":35},[25,83552,51508],{"class":244},[25,83554,62101],{"class":35},[25,83556,1403],{"class":244},[25,83558,83559,83561,83563,83565],{"class":27,"line":1894},[25,83560,54955],{"class":35},[25,83562,51508],{"class":244},[25,83564,61889],{"class":35},[25,83566,1403],{"class":244},[25,83568,83569],{"class":27,"line":2687},[25,83570,2297],{"class":244},[25,83572,83573],{"class":27,"line":2701},[25,83574,2510],{"emptyLinePlaceholder":167},[25,83576,83577,83579,83581],{"class":27,"line":2709},[25,83578,78696],{"class":31},[25,83580,55686],{"class":51371},[25,83582,15682],{"class":244},[25,83584,83585,83587,83589,83591,83593],{"class":27,"line":2714},[25,83586,54842],{"class":35},[25,83588,51508],{"class":244},[25,83590,855],{"class":35},[25,83592,51563],{"class":240},[25,83594,1403],{"class":244},[25,83596,83597,83599,83601,83603,83605],{"class":27,"line":2720},[25,83598,54856],{"class":35},[25,83600,51508],{"class":244},[25,83602,855],{"class":35},[25,83604,51563],{"class":240},[25,83606,1403],{"class":244},[25,83608,83609,83611,83613,83615,83617],{"class":27,"line":2726},[25,83610,61821],{"class":35},[25,83612,51508],{"class":244},[25,83614,562],{"class":35},[25,83616,51563],{"class":240},[25,83618,1403],{"class":244},[25,83620,83621],{"class":27,"line":2731},[25,83622,2297],{"class":244},[25,83624,83625],{"class":27,"line":8058},[25,83626,2510],{"emptyLinePlaceholder":167},[25,83628,83629,83631,83633],{"class":27,"line":8082},[25,83630,78696],{"class":31},[25,83632,62375],{"class":31},[25,83634,15682],{"class":244},[25,83636,83637,83639,83641,83643,83645],{"class":27,"line":8087},[25,83638,54842],{"class":35},[25,83640,51508],{"class":244},[25,83642,1833],{"class":35},[25,83644,51563],{"class":240},[25,83646,1403],{"class":244},[25,83648,83649],{"class":27,"line":8093},[25,83650,2297],{"class":244},[25,83652,83653],{"class":27,"line":8120},[25,83654,2510],{"emptyLinePlaceholder":167},[25,83656,83657,83659,83661,83664],{"class":27,"line":8125},[25,83658,78696],{"class":31},[25,83660,62375],{"class":31},[25,83662,83663],{"class":31}," .tag",[25,83665,15682],{"class":244},[25,83667,83668,83670,83672,83674],{"class":27,"line":8131},[25,83669,55080],{"class":35},[25,83671,51508],{"class":244},[25,83673,60940],{"class":35},[25,83675,1403],{"class":244},[25,83677,83678,83680,83682,83684,83686],{"class":27,"line":8143},[25,83679,54766],{"class":35},[25,83681,51508],{"class":244},[25,83683,321],{"class":35},[25,83685,51563],{"class":240},[25,83687,1403],{"class":244},[25,83689,83690,83692,83694,83696,83698],{"class":27,"line":8155},[25,83691,54993],{"class":35},[25,83693,51508],{"class":244},[25,83695,741],{"class":35},[25,83697,51563],{"class":240},[25,83699,1403],{"class":244},[25,83701,83702,83704,83706,83708],{"class":27,"line":8167},[25,83703,57487],{"class":35},[25,83705,51508],{"class":244},[25,83707,62141],{"class":35},[25,83709,1403],{"class":244},[25,83711,83712],{"class":27,"line":9826},[25,83713,2297],{"class":244},[25,83715,83716],{"class":27,"line":9851},[25,83717,2510],{"emptyLinePlaceholder":167},[25,83719,83720,83722,83724],{"class":27,"line":9874},[25,83721,78696],{"class":31},[25,83723,78988],{"class":31},[25,83725,31537],{"class":244},[25,83727,83728,83730,83733],{"class":27,"line":9898},[25,83729,78696],{"class":31},[25,83731,83732],{"class":31}," .sub-total",[25,83734,15682],{"class":244},[25,83736,83737,83739,83741,83743,83745],{"class":27,"line":9903},[25,83738,54993],{"class":35},[25,83740,51508],{"class":244},[25,83742,893],{"class":35},[25,83744,51563],{"class":240},[25,83746,1403],{"class":244},[25,83748,83749,83751,83753,83755],{"class":27,"line":9908},[25,83750,57487],{"class":35},[25,83752,51508],{"class":244},[25,83754,79011],{"class":35},[25,83756,1403],{"class":244},[25,83758,83759,83761,83763,83765],{"class":27,"line":9913},[25,83760,61908],{"class":35},[25,83762,51508],{"class":244},[25,83764,460],{"class":35},[25,83766,1403],{"class":244},[25,83768,83769],{"class":27,"line":9922},[25,83770,2297],{"class":244},[25,83772,83773],{"class":27,"line":9927},[25,83774,2510],{"emptyLinePlaceholder":167},[25,83776,83777,83779,83781],{"class":27,"line":9933},[25,83778,78696],{"class":31},[25,83780,79028],{"class":31},[25,83782,31537],{"class":244},[25,83784,83785,83787,83790],{"class":27,"line":9954},[25,83786,78696],{"class":31},[25,83788,83789],{"class":31}," .sub-total::before",[25,83791,31537],{"class":244},[25,83793,83794,83797],{"class":27,"line":9960},[25,83795,83796],{"class":31},"    .amount::before",[25,83798,15682],{"class":244},[25,83800,83801,83803,83805,83807],{"class":27,"line":9974},[25,83802,79035],{"class":35},[25,83804,51508],{"class":244},[25,83806,79040],{"class":45},[25,83808,1403],{"class":244},[25,83810,83811,83813,83815,83817,83819],{"class":27,"line":9980},[25,83812,54993],{"class":35},[25,83814,51508],{"class":244},[25,83816,741],{"class":35},[25,83818,51563],{"class":240},[25,83820,1403],{"class":244},[25,83822,83823],{"class":27,"line":10007},[25,83824,2297],{"class":244},[25,83826,83827],{"class":27,"line":10016},[25,83828,2510],{"emptyLinePlaceholder":167},[25,83830,83831,83833,83836],{"class":27,"line":10022},[25,83832,78696],{"class":31},[25,83834,83835],{"class":31}," .spec",[25,83837,15682],{"class":244},[25,83839,83840,83842,83844,83846],{"class":27,"line":10030},[25,83841,61908],{"class":35},[25,83843,51508],{"class":244},[25,83845,321],{"class":35},[25,83847,1403],{"class":244},[25,83849,83850,83852,83854,83857],{"class":27,"line":10035},[25,83851,57487],{"class":35},[25,83853,51508],{"class":244},[25,83855,83856],{"class":35},"#888",[25,83858,1403],{"class":244},[25,83860,83861,83863,83865,83867,83869],{"class":27,"line":16714},[25,83862,54993],{"class":35},[25,83864,51508],{"class":244},[25,83866,792],{"class":35},[25,83868,51563],{"class":240},[25,83870,1403],{"class":244},[25,83872,83873,83875,83877,83879,83881],{"class":27,"line":16720},[25,83874,62071],{"class":35},[25,83876,51508],{"class":244},[25,83878,943],{"class":35},[25,83880,51563],{"class":240},[25,83882,1403],{"class":244},[25,83884,83885],{"class":27,"line":16743},[25,83886,2297],{"class":244},[25,83888,83889],{"class":27,"line":16749},[25,83890,2510],{"emptyLinePlaceholder":167},[25,83892,83893,83895,83898],{"class":27,"line":16772},[25,83894,78696],{"class":31},[25,83896,83897],{"class":31}," .count",[25,83899,15682],{"class":244},[25,83901,83902,83904,83906,83908],{"class":27,"line":16786},[25,83903,61908],{"class":35},[25,83905,51508],{"class":244},[25,83907,460],{"class":35},[25,83909,1403],{"class":244},[25,83911,83912,83914,83916,83919],{"class":27,"line":16806},[25,83913,57487],{"class":35},[25,83915,51508],{"class":244},[25,83917,83918],{"class":35},"#aaa",[25,83920,1403],{"class":244},[25,83922,83923],{"class":27,"line":16812},[25,83924,2297],{"class":244},[25,83926,83927],{"class":27,"line":16823},[25,83928,2510],{"emptyLinePlaceholder":167},[25,83930,83931,83933],{"class":27,"line":16846},[25,83932,72546],{"class":31},[25,83934,15682],{"class":244},[25,83936,83937,83939,83941,83943,83945],{"class":27,"line":16868},[25,83938,54842],{"class":35},[25,83940,51508],{"class":244},[25,83942,78645],{"class":35},[25,83944,51563],{"class":240},[25,83946,1403],{"class":244},[25,83948,83949,83951,83953,83955,83957],{"class":27,"line":16873},[25,83950,54777],{"class":35},[25,83952,51508],{"class":244},[25,83954,434],{"class":35},[25,83956,51627],{"class":35},[25,83958,1403],{"class":244},[25,83960,83961,83963,83965,83967],{"class":27,"line":16879},[25,83962,55080],{"class":35},[25,83964,51508],{"class":244},[25,83966,51548],{"class":35},[25,83968,1403],{"class":244},[25,83970,83971,83973,83975,83977],{"class":27,"line":16893},[25,83972,55091],{"class":35},[25,83974,51508],{"class":244},[25,83976,51651],{"class":35},[25,83978,1403],{"class":244},[25,83980,83981,83984,83986,83988,83990,83992,83995],{"class":27,"line":16906},[25,83982,83983],{"class":35},"      border-top",[25,83985,51508],{"class":244},[25,83987,460],{"class":35},[25,83989,51563],{"class":240},[25,83991,51592],{"class":35},[25,83993,83994],{"class":35}," #4e4e4e",[25,83996,1403],{"class":244},[25,83998,83999,84001,84003,84005,84007],{"class":27,"line":16911},[25,84000,54766],{"class":35},[25,84002,51508],{"class":244},[25,84004,943],{"class":35},[25,84006,51563],{"class":240},[25,84008,1403],{"class":244},[25,84010,84011],{"class":27,"line":16925},[25,84012,2297],{"class":244},[25,84014,84015],{"class":27,"line":16930},[25,84016,2510],{"emptyLinePlaceholder":167},[25,84018,84019,84021,84024],{"class":27,"line":16936},[25,84020,72546],{"class":31},[25,84022,84023],{"class":31}," .amount",[25,84025,15682],{"class":244},[25,84027,84028,84030,84032,84034,84036],{"class":27,"line":16941},[25,84029,54993],{"class":35},[25,84031,51508],{"class":244},[25,84033,893],{"class":35},[25,84035,51563],{"class":240},[25,84037,1403],{"class":244},[25,84039,84040,84042,84044,84046],{"class":27,"line":16955},[25,84041,57487],{"class":35},[25,84043,51508],{"class":244},[25,84045,79011],{"class":35},[25,84047,1403],{"class":244},[25,84049,84050,84052,84054,84056],{"class":27,"line":16960},[25,84051,62405],{"class":35},[25,84053,51508],{"class":244},[25,84055,51560],{"class":35},[25,84057,1403],{"class":244},[25,84059,84060,84062,84064,84066,84068],{"class":27,"line":16965},[25,84061,61821],{"class":35},[25,84063,51508],{"class":244},[25,84065,899],{"class":35},[25,84067,51563],{"class":240},[25,84069,1403],{"class":244},[25,84071,84072],{"class":27,"line":16979},[25,84073,2297],{"class":244},[25,84075,84076,84078,84080],{"class":27,"line":16991},[25,84077,52488],{"class":244},[25,84079,159],{"class":51371},[25,84081,51378],{"class":244},[25,84083,84084,84086,84088],{"class":27,"line":16996},[25,84085,51856],{"class":244},[25,84087,51405],{"class":51371},[25,84089,51378],{"class":244},[25,84091,84092],{"class":27,"line":17009},[25,84093,2510],{"emptyLinePlaceholder":167},[25,84095,84096,84098,84100],{"class":27,"line":17014},[25,84097,1153],{"class":244},[25,84099,51871],{"class":51371},[25,84101,51378],{"class":244},[25,84103,84104,84106,84108,84110,84112,84114],{"class":27,"line":17019},[25,84105,52215],{"class":244},[25,84107,51682],{"class":51371},[25,84109,53557],{"class":31},[25,84111,290],{"class":244},[25,84113,62679],{"class":45},[25,84115,51378],{"class":244},[25,84117,84118,84120,84122],{"class":27,"line":17024},[25,84119,52488],{"class":244},[25,84121,51682],{"class":51371},[25,84123,51378],{"class":244},[25,84125,84126,84128,84130,84132,84134,84136],{"class":27,"line":17037},[25,84127,52215],{"class":244},[25,84129,51682],{"class":51371},[25,84131,53557],{"class":31},[25,84133,290],{"class":244},[25,84135,62651],{"class":45},[25,84137,51378],{"class":244},[25,84139,84140,84142,84144,84147,84149,84151,84153,84156,84158,84160,84162,84164],{"class":27,"line":17042},[25,84141,51412],{"class":244},[25,84143,51682],{"class":51371},[25,84145,84146],{"class":244},">合计：\u003C",[25,84148,25],{"class":51371},[25,84150,53557],{"class":31},[25,84152,290],{"class":244},[25,84154,84155],{"class":45},"\"amount\"",[25,84157,55385],{"class":244},[25,84159,25],{"class":51371},[25,84161,55385],{"class":244},[25,84163,51682],{"class":51371},[25,84165,51378],{"class":244},[25,84167,84168,84170,84172],{"class":27,"line":32704},[25,84169,52488],{"class":244},[25,84171,51682],{"class":51371},[25,84173,51378],{"class":244},[25,84175,84176,84178,84180],{"class":27,"line":32710},[25,84177,52215],{"class":244},[25,84179,51884],{"class":51371},[25,84181,51378],{"class":244},[25,84183,84184,84186,84188,84190],{"class":27,"line":32716},[25,84185,11331],{"class":240},[25,84187,79448],{"class":35},[25,84189,13674],{"class":240},[25,84191,55518],{"class":244},[25,84193,84194],{"class":27,"line":32722},[25,84195,79457],{"class":244},[25,84197,84198,84200,84202],{"class":27,"line":32728},[25,84199,79462],{"class":244},[25,84201,79465],{"class":45},[25,84203,31537],{"class":244},[25,84205,84206,84208,84210],{"class":27,"line":32739},[25,84207,79472],{"class":244},[25,84209,79475],{"class":45},[25,84211,31537],{"class":244},[25,84213,84214,84216,84219],{"class":27,"line":32745},[25,84215,79482],{"class":244},[25,84217,84218],{"class":35},"289.9",[25,84220,31537],{"class":244},[25,84222,84223,84225,84227],{"class":27,"line":32765},[25,84224,79492],{"class":244},[25,84226,79495],{"class":45},[25,84228,31537],{"class":244},[25,84230,84231,84234,84236],{"class":27,"line":32771},[25,84232,84233],{"class":244},"        count: ",[25,84235,321],{"class":35},[25,84237,31537],{"class":244},[25,84239,84240,84243,84246],{"class":27,"line":32782},[25,84241,84242],{"class":244},"        spec: { color: ",[25,84244,84245],{"class":45},"'白色'",[25,84247,55675],{"class":244},[25,84249,84250],{"class":27,"line":32788},[25,84251,77963],{"class":244},[25,84253,84254],{"class":27,"line":32794},[25,84255,79457],{"class":244},[25,84257,84258,84260,84262],{"class":27,"line":32800},[25,84259,79462],{"class":244},[25,84261,79556],{"class":45},[25,84263,31537],{"class":244},[25,84265,84266,84268,84270],{"class":27,"line":32806},[25,84267,79472],{"class":244},[25,84269,79565],{"class":45},[25,84271,31537],{"class":244},[25,84273,84274,84276,84279],{"class":27,"line":32812},[25,84275,79482],{"class":244},[25,84277,84278],{"class":35},"109.8",[25,84280,31537],{"class":244},[25,84282,84283,84285,84287],{"class":27,"line":32818},[25,84284,79492],{"class":244},[25,84286,79583],{"class":45},[25,84288,31537],{"class":244},[25,84290,84291,84293,84295],{"class":27,"line":32824},[25,84292,84233],{"class":244},[25,84294,315],{"class":35},[25,84296,31537],{"class":244},[25,84298,84299,84302,84304,84306,84308],{"class":27,"line":32844},[25,84300,84301],{"class":244},"        spec: { size: ",[25,84303,81974],{"class":45},[25,84305,55535],{"class":244},[25,84307,81979],{"class":45},[25,84309,55675],{"class":244},[25,84311,84312],{"class":27,"line":32850},[25,84313,77963],{"class":244},[25,84315,84316],{"class":27,"line":32866},[25,84317,79457],{"class":244},[25,84319,84320,84322,84324],{"class":27,"line":32872},[25,84321,79462],{"class":244},[25,84323,79600],{"class":45},[25,84325,31537],{"class":244},[25,84327,84328,84330,84332],{"class":27,"line":32886},[25,84329,79472],{"class":244},[25,84331,79609],{"class":45},[25,84333,31537],{"class":244},[25,84335,84336,84338,84341],{"class":27,"line":32892},[25,84337,79482],{"class":244},[25,84339,84340],{"class":35},"488",[25,84342,31537],{"class":244},[25,84344,84345,84347,84349],{"class":27,"line":32907},[25,84346,79492],{"class":244},[25,84348,79627],{"class":45},[25,84350,31537],{"class":244},[25,84352,84353,84355,84357],{"class":27,"line":32913},[25,84354,84233],{"class":244},[25,84356,460],{"class":35},[25,84358,31537],{"class":244},[25,84360,84361,84363,84366,84369,84372],{"class":27,"line":32922},[25,84362,84242],{"class":244},[25,84364,84365],{"class":45},"'青色'",[25,84367,84368],{"class":244},", sum: ",[25,84370,84371],{"class":45},"'一大四小'",[25,84373,55675],{"class":244},[25,84375,84376],{"class":27,"line":32928},[25,84377,77963],{"class":244},[25,84379,84380],{"class":27,"line":32937},[25,84381,79457],{"class":244},[25,84383,84384,84386,84388],{"class":27,"line":32943},[25,84385,79462],{"class":244},[25,84387,79644],{"class":45},[25,84389,31537],{"class":244},[25,84391,84392,84394,84396],{"class":27,"line":32949},[25,84393,79472],{"class":244},[25,84395,79653],{"class":45},[25,84397,31537],{"class":244},[25,84399,84400,84402,84405],{"class":27,"line":32958},[25,84401,79482],{"class":244},[25,84403,84404],{"class":35},"139",[25,84406,31537],{"class":244},[25,84408,84409,84411,84413],{"class":27,"line":32964},[25,84410,79492],{"class":244},[25,84412,79671],{"class":45},[25,84414,31537],{"class":244},[25,84416,84417,84419,84421],{"class":27,"line":32975},[25,84418,84233],{"class":244},[25,84420,460],{"class":35},[25,84422,31537],{"class":244},[25,84424,84425,84427,84430,84432,84435],{"class":27,"line":32981},[25,84426,84301],{"class":244},[25,84428,84429],{"class":45},"'小号'",[25,84431,55535],{"class":244},[25,84433,84434],{"class":45},"'紫色'",[25,84436,55541],{"class":244},[25,84438,84439,84442],{"class":27,"line":33000},[25,84440,84441],{"class":244},"        gift: ",[25,84443,84444],{"class":45},"'50g茶叶,清洗球'\n",[25,84446,84447],{"class":27,"line":33006},[25,84448,52469],{"class":244},[25,84450,84451],{"class":27,"line":33017},[25,84452,53180],{"class":244},[25,84454,84455],{"class":27,"line":33023},[25,84456,84457],{"class":302},"    \u002F\u002F  1.根据数据渲染页面\n",[25,84459,84460,84462,84464,84466,84468,84470,84472,84474,84476,84478,84480,84482],{"class":27,"line":33043},[25,84461,52478],{"class":244},[25,84463,54470],{"class":31},[25,84465,245],{"class":244},[25,84467,79972],{"class":45},[25,84469,74320],{"class":244},[25,84471,290],{"class":240},[25,84473,80119],{"class":244},[25,84475,74115],{"class":31},[25,84477,245],{"class":244},[25,84479,79866],{"class":5326},[25,84481,79869],{"class":240},[25,84483,15682],{"class":244},[25,84485,84486],{"class":27,"line":33059},[25,84487,84488],{"class":302},"      \u002F\u002F 对象解构\n",[25,84490,84491,84493,84495,84497,84499,84501,84503,84506,84508,84510,84512,84515,84517,84520,84522,84524],{"class":27,"line":33065},[25,84492,58299],{"class":240},[25,84494,79878],{"class":244},[25,84496,79891],{"class":35},[25,84498,12545],{"class":244},[25,84500,79881],{"class":35},[25,84502,12545],{"class":244},[25,84504,84505],{"class":35},"count",[25,84507,12545],{"class":244},[25,84509,79886],{"class":35},[25,84511,12545],{"class":244},[25,84513,84514],{"class":35},"spec",[25,84516,12545],{"class":244},[25,84518,84519],{"class":35},"gift",[25,84521,79894],{"class":244},[25,84523,290],{"class":240},[25,84525,79899],{"class":244},[25,84527,84528],{"class":27,"line":33079},[25,84529,84530],{"class":302},"      \u002F\u002F 规格文字模块处理\n",[25,84532,84533,84535,84538,84540,84542,84544,84546,84548,84550,84552],{"class":27,"line":33085},[25,84534,58299],{"class":240},[25,84536,84537],{"class":35}," text",[25,84539,13674],{"class":240},[25,84541,82009],{"class":244},[25,84543,82012],{"class":31},[25,84545,82015],{"class":244},[25,84547,74294],{"class":31},[25,84549,245],{"class":244},[25,84551,82022],{"class":45},[25,84553,251],{"class":244},[25,84555,84556],{"class":27,"line":33091},[25,84557,84558],{"class":302},"      \u002F\u002F 处理赠品模块\n",[25,84560,84561,84563,84565,84567,84570,84572,84574,84576,84578,84581,84583,84585,84587,84589,84591,84594,84596,84599,84601,84603,84605,84607,84609,84611],{"class":27,"line":33102},[25,84562,58299],{"class":240},[25,84564,73990],{"class":35},[25,84566,13674],{"class":240},[25,84568,84569],{"class":244}," gift ",[25,84571,1229],{"class":240},[25,84573,83183],{"class":244},[25,84575,83186],{"class":31},[25,84577,245],{"class":244},[25,84579,84580],{"class":45},"','",[25,84582,30897],{"class":244},[25,84584,74115],{"class":31},[25,84586,245],{"class":244},[25,84588,79866],{"class":5326},[25,84590,79869],{"class":240},[25,84592,84593],{"class":45}," `\u003Cspan class=\"tag\">【赠品】${",[25,84595,79866],{"class":244},[25,84597,84598],{"class":45},"}\u003C\u002Fspan>`",[25,84600,30897],{"class":244},[25,84602,74294],{"class":31},[25,84604,245],{"class":244},[25,84606,74299],{"class":45},[25,84608,13824],{"class":244},[25,84610,1102],{"class":240},[25,84612,70175],{"class":45},[25,84614,84615],{"class":27,"line":33108},[25,84616,84617],{"class":302},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[25,84619,84620,84622,84625,84627,84630,84632,84634,84636,84639,84641,84643,84645,84648,84650,84652],{"class":27,"line":33114},[25,84621,58299],{"class":240},[25,84623,84624],{"class":35}," subtotal",[25,84626,13674],{"class":240},[25,84628,84629],{"class":244}," ((price ",[25,84631,698],{"class":240},[25,84633,5864],{"class":35},[25,84635,6628],{"class":240},[25,84637,84638],{"class":244}," count) ",[25,84640,827],{"class":240},[25,84642,5864],{"class":35},[25,84644,30897],{"class":244},[25,84646,84647],{"class":31},"toFixed",[25,84649,245],{"class":244},[25,84651,321],{"class":35},[25,84653,251],{"class":244},[25,84655,84656],{"class":27,"line":33124},[25,84657,2510],{"emptyLinePlaceholder":167},[25,84659,84660,84662],{"class":27,"line":33130},[25,84661,74053],{"class":240},[25,84663,70239],{"class":45},[25,84665,84666],{"class":27,"line":33141},[25,84667,84668],{"class":45},"        \u003Cdiv class=\"item\">\n",[25,84670,84671,84674,84676],{"class":27,"line":33147},[25,84672,84673],{"class":45},"          \u003Cimg src=\"${",[25,84675,79891],{"class":244},[25,84677,79923],{"class":45},[25,84679,84680,84683,84685,84688,84690],{"class":27,"line":33157},[25,84681,84682],{"class":45},"          \u003Cp class=\"name\">${",[25,84684,79881],{"class":244},[25,84686,84687],{"class":45},"}${",[25,84689,1412],{"class":244},[25,84691,79933],{"class":45},[25,84693,84694,84697,84699],{"class":27,"line":33162},[25,84695,84696],{"class":45},"          \u003Cp class=\"spec\">${",[25,84698,5297],{"class":244},[25,84700,79933],{"class":45},[25,84702,84703,84706,84708,84710,84712,84714,84716,84718],{"class":27,"line":33168},[25,84704,84705],{"class":45},"          \u003Cp class=\"price\">${",[25,84707,79886],{"class":244},[25,84709,801],{"class":45},[25,84711,84647],{"class":31},[25,84713,245],{"class":45},[25,84715,321],{"class":35},[25,84717,672],{"class":45},[25,84719,79933],{"class":45},[25,84721,84722,84725,84727],{"class":27,"line":33217},[25,84723,84724],{"class":45},"          \u003Cp class=\"count\">x${",[25,84726,84505],{"class":244},[25,84728,79933],{"class":45},[25,84730,84731,84734,84737],{"class":27,"line":33264},[25,84732,84733],{"class":45},"          \u003Cp class=\"sub-total\">${",[25,84735,84736],{"class":244},"subtotal",[25,84738,79933],{"class":45},[25,84740,84741],{"class":27,"line":33269},[25,84742,84743],{"class":45},"        \u003C\u002Fdiv> \n",[25,84745,84746],{"class":27,"line":33275},[25,84747,84748],{"class":45},"             `\n",[25,84750,84751,84754,84756,84758,84760],{"class":27,"line":33294},[25,84752,84753],{"class":244},"    }).",[25,84755,74294],{"class":31},[25,84757,245],{"class":244},[25,84759,74299],{"class":45},[25,84761,251],{"class":244},[25,84763,84764],{"class":27,"line":33300},[25,84765,84766],{"class":302},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[25,84768,84769,84771,84773,84775,84777,84780,84782,84785,84787,84789,84791,84794,84797,84799,84802,84804,84806,84808,84811,84813,84815,84817,84819],{"class":27,"line":33320},[25,84770,11331],{"class":240},[25,84772,62856],{"class":35},[25,84774,13674],{"class":240},[25,84776,80119],{"class":244},[25,84778,84779],{"class":31},"reduce",[25,84781,2486],{"class":244},[25,84783,84784],{"class":5326},"prev",[25,84786,12545],{"class":244},[25,84788,79866],{"class":5326},[25,84790,13824],{"class":244},[25,84792,84793],{"class":240},"=>",[25,84795,84796],{"class":244}," prev ",[25,84798,724],{"class":240},[25,84800,84801],{"class":244}," (item.price ",[25,84803,698],{"class":240},[25,84805,5864],{"class":35},[25,84807,6628],{"class":240},[25,84809,84810],{"class":244}," item.count) ",[25,84812,827],{"class":240},[25,84814,5864],{"class":35},[25,84816,12545],{"class":244},[25,84818,434],{"class":35},[25,84820,251],{"class":244},[25,84822,84823,84825,84827,84829,84832,84834,84836,84839,84841,84843,84845],{"class":27,"line":33326},[25,84824,52478],{"class":244},[25,84826,54470],{"class":31},[25,84828,245],{"class":244},[25,84830,84831],{"class":45},"'.amount'",[25,84833,74320],{"class":244},[25,84835,290],{"class":240},[25,84837,84838],{"class":244}," total.",[25,84840,84647],{"class":31},[25,84842,245],{"class":244},[25,84844,321],{"class":35},[25,84846,251],{"class":244},[25,84848,84849,84851,84853],{"class":27,"line":33332},[25,84850,52488],{"class":244},[25,84852,51884],{"class":51371},[25,84854,51378],{"class":244},[25,84856,84857,84859,84861],{"class":27,"line":33342},[25,84858,51856],{"class":244},[25,84860,51871],{"class":51371},[25,84862,51378],{"class":244},[25,84864,84865],{"class":27,"line":33347},[25,84866,2510],{"emptyLinePlaceholder":167},[25,84868,84869,84871,84873],{"class":27,"line":33353},[25,84870,51856],{"class":244},[25,84872,50706],{"class":51371},[25,84874,51378],{"class":244},[182,84876,84878],{"id":84877},"_411-编程思想","4.11 编程思想",[210,84880,84882],{"id":84881},"_4111-面向过程介绍","4.11.1 面向过程介绍",[99,84884,84885,84888],{},[392,84886,84887],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[99,84890,84891],{},"调用就可以了",[99,84893,84894],{},[155,84895],{"alt":20,"src":84896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[210,84898,84900],{"id":84899},"_4112-面向对象","4.11.2 面向对象",[99,84902,84903],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[99,84905,84906],{},[155,84907],{"alt":20,"src":84908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[99,84910,84911],{},"面向对象的特性：",[103,84913,84914,84917,84920],{},[106,84915,84916],{},"封装性",[106,84918,84919],{},"继承性",[106,84921,84922],{},"多态性",[210,84924,84926],{"id":84925},"_4113-两者比较","4.11.3 两者比较",[99,84928,84929],{},[155,84930],{"alt":20,"src":84931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[182,84933,84935],{"id":84934},"_412-构造函数回顾","4.12 构造函数回顾",[99,84937,84938],{},[155,84939],{"alt":20,"src":84940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[99,84942,84943],{},[155,84944],{"alt":20,"src":84945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[99,84947,84948],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[99,84950,84951],{},[155,84952],{"alt":20,"src":84953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[182,84955,84957],{"id":84956},"_413-原型","4.13 原型",[210,84959,84961],{"id":84960},"_4131-原型对象的认识","4.13.1 原型对象的认识",[99,84963,84964],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[99,84966,84967],{},[155,84968],{"alt":20,"src":84969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[99,84971,84972],{},[155,84973],{"alt":20,"src":84974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[99,84976,84977],{},"原型是构造函数的属性，它也是一个对象",[99,84979,84980],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[99,84982,84983],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[15,84985,84987],{"className":53138,"code":84986,"language":53140,"meta":20,"style":20},"\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",[22,84988,84989,84997,85002,85010,85015,85020,85025,85030,85035,85039,85043,85047,85052,85057,85061,85066,85071,85076,85081,85086,85090,85098],{"__ignoreMap":20},[25,84990,84991,84993,84995],{"class":27,"line":28},[25,84992,1153],{"class":244},[25,84994,51871],{"class":51371},[25,84996,51378],{"class":244},[25,84998,84999],{"class":27,"line":39},[25,85000,85001],{"class":302},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[25,85003,85004,85006,85008],{"class":27,"line":51},[25,85005,52215],{"class":244},[25,85007,51884],{"class":51371},[25,85009,51378],{"class":244},[25,85011,85012],{"class":27,"line":59},[25,85013,85014],{"class":244},"    function Star(uname, age) {\n",[25,85016,85017],{"class":27,"line":67},[25,85018,85019],{"class":244},"      this.uname = uname,\n",[25,85021,85022],{"class":27,"line":75},[25,85023,85024],{"class":244},"        this.age = age\n",[25,85026,85027],{"class":27,"line":83},[25,85028,85029],{"class":244},"      \u002F\u002F this.sing = function () {\n",[25,85031,85032],{"class":27,"line":91},[25,85033,85034],{"class":244},"      \u002F\u002F   console.log('唱歌')\n",[25,85036,85037],{"class":27,"line":1429},[25,85038,2510],{"emptyLinePlaceholder":167},[25,85040,85041],{"class":27,"line":1441},[25,85042,60108],{"class":244},[25,85044,85045],{"class":27,"line":1723},[25,85046,2297],{"class":244},[25,85048,85049],{"class":27,"line":1728},[25,85050,85051],{"class":244},"    Star.prototype.sing = function () {\n",[25,85053,85054],{"class":27,"line":1734},[25,85055,85056],{"class":244},"      console.log('唱歌')\n",[25,85058,85059],{"class":27,"line":1739},[25,85060,2297],{"class":244},[25,85062,85063],{"class":27,"line":1753},[25,85064,85065],{"class":244},"    \u002F\u002F console.dir(Star.prototype)\n",[25,85067,85068],{"class":27,"line":1758},[25,85069,85070],{"class":244},"    const pink = new Star('pink', 18)\n",[25,85072,85073],{"class":27,"line":1764},[25,85074,85075],{"class":244},"    const red = new Star('red', 20)\n",[25,85077,85078],{"class":27,"line":1785},[25,85079,85080],{"class":244},"    pink.sing()\n",[25,85082,85083],{"class":27,"line":1790},[25,85084,85085],{"class":244},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[25,85087,85088],{"class":27,"line":1804},[25,85089,2510],{"emptyLinePlaceholder":167},[25,85091,85092,85094,85096],{"class":27,"line":1809},[25,85093,52488],{"class":244},[25,85095,51884],{"class":51371},[25,85097,51378],{"class":244},[25,85099,85100,85102,85104],{"class":27,"line":1838},[25,85101,51856],{"class":244},[25,85103,51871],{"class":51371},[25,85105,51378],{"class":244},[99,85107,85108],{},[155,85109],{"alt":20,"src":85110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[15,85112,85114],{"className":53138,"code":85113,"language":53140,"meta":20,"style":20},"\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",[22,85115,85116,85124,85132,85137,85142,85147,85152,85156,85161,85166,85171,85175,85180,85184,85188,85193,85197,85205],{"__ignoreMap":20},[25,85117,85118,85120,85122],{"class":27,"line":28},[25,85119,1153],{"class":244},[25,85121,51871],{"class":51371},[25,85123,51378],{"class":244},[25,85125,85126,85128,85130],{"class":27,"line":39},[25,85127,52215],{"class":244},[25,85129,51884],{"class":51371},[25,85131,51378],{"class":244},[25,85133,85134],{"class":27,"line":51},[25,85135,85136],{"class":244},"    let that\n",[25,85138,85139],{"class":27,"line":59},[25,85140,85141],{"class":244},"    function Star(uname) {\n",[25,85143,85144],{"class":27,"line":67},[25,85145,85146],{"class":244},"      this.uname = uname\n",[25,85148,85149],{"class":27,"line":75},[25,85150,85151],{"class":244},"      that = this\n",[25,85153,85154],{"class":27,"line":83},[25,85155,2297],{"class":244},[25,85157,85158],{"class":27,"line":91},[25,85159,85160],{"class":244},"    \u002F\u002F 实例对象是 ldh\n",[25,85162,85163],{"class":27,"line":1429},[25,85164,85165],{"class":244},"    const ldh = new Star('刘德华')\n",[25,85167,85168],{"class":27,"line":1441},[25,85169,85170],{"class":244},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[25,85172,85173],{"class":27,"line":1723},[25,85174,2510],{"emptyLinePlaceholder":167},[25,85176,85177],{"class":27,"line":1728},[25,85178,85179],{"class":244},"    Star.sing = function () {\n",[25,85181,85182],{"class":27,"line":1734},[25,85183,85056],{"class":244},[25,85185,85186],{"class":27,"line":1739},[25,85187,2297],{"class":244},[25,85189,85190],{"class":27,"line":1753},[25,85191,85192],{"class":244},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[25,85194,85195],{"class":27,"line":1758},[25,85196,2510],{"emptyLinePlaceholder":167},[25,85198,85199,85201,85203],{"class":27,"line":1764},[25,85200,52488],{"class":244},[25,85202,51884],{"class":51371},[25,85204,51378],{"class":244},[25,85206,85207,85209,85211],{"class":27,"line":1785},[25,85208,51856],{"class":244},[25,85210,51871],{"class":51371},[25,85212,51378],{"class":244},[99,85214,85215],{},"构造函数的this指向的是实例对象；",[99,85217,85218],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[210,85220,85222],{"id":85221},"_4132-数组扩展方法","4.13.2 数组扩展方法",[99,85224,85225],{},[155,85226],{"alt":20,"src":85227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[15,85229,85231],{"className":53138,"code":85230,"language":53140,"meta":20,"style":20},"\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",[22,85232,85233,85241,85249,85254,85259,85264,85269,85274,85279,85284,85289,85294,85299,85303,85308,85313,85318,85323,85327,85332,85337,85342,85347,85351,85356,85361,85366,85371,85375,85380,85384,85392],{"__ignoreMap":20},[25,85234,85235,85237,85239],{"class":27,"line":28},[25,85236,1153],{"class":244},[25,85238,51871],{"class":51371},[25,85240,51378],{"class":244},[25,85242,85243,85245,85247],{"class":27,"line":39},[25,85244,52215],{"class":244},[25,85246,51884],{"class":51371},[25,85248,51378],{"class":244},[25,85250,85251],{"class":27,"line":51},[25,85252,85253],{"class":244},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[25,85255,85256],{"class":27,"line":59},[25,85257,85258],{"class":244},"    const arr = [1, 2, 3]\n",[25,85260,85261],{"class":27,"line":67},[25,85262,85263],{"class":244},"    \u002F\u002F 自己定义数组的扩展方法\n",[25,85265,85266],{"class":27,"line":75},[25,85267,85268],{"class":244},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[25,85270,85271],{"class":27,"line":83},[25,85272,85273],{"class":244},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[25,85275,85276],{"class":27,"line":91},[25,85277,85278],{"class":244},"    \u002F\u002F ①.最大值\n",[25,85280,85281],{"class":27,"line":1429},[25,85282,85283],{"class":244},"    Array.prototype.max = function () {\n",[25,85285,85286],{"class":27,"line":1441},[25,85287,85288],{"class":244},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[25,85290,85291],{"class":27,"line":1723},[25,85292,85293],{"class":244},"      return Math.max(...this)\n",[25,85295,85296],{"class":27,"line":1728},[25,85297,85298],{"class":244},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[25,85300,85301],{"class":27,"line":1734},[25,85302,2297],{"class":244},[25,85304,85305],{"class":27,"line":1739},[25,85306,85307],{"class":244},"    console.log(arr.max())\n",[25,85309,85310],{"class":27,"line":1753},[25,85311,85312],{"class":244},"    \u002F\u002F ②最小值\n",[25,85314,85315],{"class":27,"line":1758},[25,85316,85317],{"class":244},"    Array.prototype.min = function () {\n",[25,85319,85320],{"class":27,"line":1764},[25,85321,85322],{"class":244},"      return Math.min(...this)\n",[25,85324,85325],{"class":27,"line":1785},[25,85326,2297],{"class":244},[25,85328,85329],{"class":27,"line":1790},[25,85330,85331],{"class":244},"    console.log(arr.min())\n",[25,85333,85334],{"class":27,"line":1804},[25,85335,85336],{"class":244},"    \u002F\u002F③求和\n",[25,85338,85339],{"class":27,"line":1809},[25,85340,85341],{"class":244},"    Array.prototype.sum = function () {\n",[25,85343,85344],{"class":27,"line":1838},[25,85345,85346],{"class":244},"      return this.reduce((prev, current) => prev + current, 0)\n",[25,85348,85349],{"class":27,"line":1843},[25,85350,2297],{"class":244},[25,85352,85353],{"class":27,"line":1860},[25,85354,85355],{"class":244},"    console.log(arr.sum())\n",[25,85357,85358],{"class":27,"line":1865},[25,85359,85360],{"class":244},"    \u002F\u002F ③排序\n",[25,85362,85363],{"class":27,"line":1870},[25,85364,85365],{"class":244},"    Array.prototype.rever = function () {\n",[25,85367,85368],{"class":27,"line":1875},[25,85369,85370],{"class":244},"      return this.reverse()\n",[25,85372,85373],{"class":27,"line":1889},[25,85374,2297],{"class":244},[25,85376,85377],{"class":27,"line":1894},[25,85378,85379],{"class":244},"    console.log(arr.rever())\n",[25,85381,85382],{"class":27,"line":2687},[25,85383,2510],{"emptyLinePlaceholder":167},[25,85385,85386,85388,85390],{"class":27,"line":2701},[25,85387,52488],{"class":244},[25,85389,51884],{"class":51371},[25,85391,51378],{"class":244},[25,85393,85394,85396,85398],{"class":27,"line":2709},[25,85395,51856],{"class":244},[25,85397,51871],{"class":51371},[25,85399,51378],{"class":244},[99,85401,85402],{},[155,85403],{"alt":20,"src":85404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[210,85406,85408],{"id":85407},"_4133-constructor-属性","4.13.3 constructor 属性",[99,85410,85411],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[99,85413,85414],{},[155,85415],{"alt":20,"src":85416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[15,85418,85420],{"className":53138,"code":85419,"language":53140,"meta":20,"style":20},"\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",[22,85421,85422,85430,85438,85443,85448,85452,85457,85462,85467,85475],{"__ignoreMap":20},[25,85423,85424,85426,85428],{"class":27,"line":28},[25,85425,1153],{"class":244},[25,85427,51871],{"class":51371},[25,85429,51378],{"class":244},[25,85431,85432,85434,85436],{"class":27,"line":39},[25,85433,52215],{"class":244},[25,85435,51884],{"class":51371},[25,85437,51378],{"class":244},[25,85439,85440],{"class":27,"line":51},[25,85441,85442],{"class":244},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[25,85444,85445],{"class":27,"line":59},[25,85446,85447],{"class":244},"    function Star() {\n",[25,85449,85450],{"class":27,"line":67},[25,85451,2297],{"class":244},[25,85453,85454],{"class":27,"line":75},[25,85455,85456],{"class":244},"    const ldh = new Star()\n",[25,85458,85459],{"class":27,"line":83},[25,85460,85461],{"class":244},"    console.log(Star.prototype)\n",[25,85463,85464],{"class":27,"line":91},[25,85465,85466],{"class":244},"    console.log(Star.prototype.constructor === Star)\n",[25,85468,85469,85471,85473],{"class":27,"line":1429},[25,85470,52488],{"class":244},[25,85472,51884],{"class":51371},[25,85474,51378],{"class":244},[25,85476,85477,85479,85481],{"class":27,"line":1441},[25,85478,51856],{"class":244},[25,85480,51871],{"class":51371},[25,85482,51378],{"class":244},[99,85484,85485],{},[155,85486],{"alt":20,"src":85487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[99,85489,85490],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[15,85492,85494],{"className":53138,"code":85493,"language":53140,"meta":20,"style":20},"  \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",[22,85495,85496,85504,85508,85512,85516,85521,85526,85531,85535,85540,85545,85550,85555,85560,85565,85569,85573,85578,85583,85588,85592,85597,85602,85606,85610,85614],{"__ignoreMap":20},[25,85497,85498,85500,85502],{"class":27,"line":28},[25,85499,52215],{"class":244},[25,85501,51884],{"class":51371},[25,85503,51378],{"class":244},[25,85505,85506],{"class":27,"line":39},[25,85507,85442],{"class":244},[25,85509,85510],{"class":27,"line":51},[25,85511,85447],{"class":244},[25,85513,85514],{"class":27,"line":59},[25,85515,2297],{"class":244},[25,85517,85518],{"class":27,"line":67},[25,85519,85520],{"class":244},"    \u002F\u002F const ldh = new Star()\n",[25,85522,85523],{"class":27,"line":75},[25,85524,85525],{"class":244},"    \u002F\u002F console.log(Star.prototype)\n",[25,85527,85528],{"class":27,"line":83},[25,85529,85530],{"class":244},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[25,85532,85533],{"class":27,"line":91},[25,85534,2510],{"emptyLinePlaceholder":167},[25,85536,85537],{"class":27,"line":1429},[25,85538,85539],{"class":244},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[25,85541,85542],{"class":27,"line":1441},[25,85543,85544],{"class":244},"    \u002F\u002F Star.prototype.sing = function () {\n",[25,85546,85547],{"class":27,"line":1723},[25,85548,85549],{"class":244},"    \u002F\u002F   console.log('唱歌')\n",[25,85551,85552],{"class":27,"line":1728},[25,85553,85554],{"class":244},"    \u002F\u002F }\n",[25,85556,85557],{"class":27,"line":1734},[25,85558,85559],{"class":244},"    \u002F\u002F Star.prototype.dance = function () {\n",[25,85561,85562],{"class":27,"line":1739},[25,85563,85564],{"class":244},"    \u002F\u002F   console.log('跳舞')\n",[25,85566,85567],{"class":27,"line":1753},[25,85568,85554],{"class":244},[25,85570,85571],{"class":27,"line":1758},[25,85572,85461],{"class":244},[25,85574,85575],{"class":27,"line":1764},[25,85576,85577],{"class":244},"    Star.prototype = {\n",[25,85579,85580],{"class":27,"line":1785},[25,85581,85582],{"class":244},"      sing: function () {\n",[25,85584,85585],{"class":27,"line":1790},[25,85586,85587],{"class":244},"        console.log('唱歌')\n",[25,85589,85590],{"class":27,"line":1804},[25,85591,77963],{"class":244},[25,85593,85594],{"class":27,"line":1809},[25,85595,85596],{"class":244},"      dance: function () {\n",[25,85598,85599],{"class":27,"line":1838},[25,85600,85601],{"class":244},"        console.log('跳舞')\n",[25,85603,85604],{"class":27,"line":1843},[25,85605,52469],{"class":244},[25,85607,85608],{"class":27,"line":1860},[25,85609,2297],{"class":244},[25,85611,85612],{"class":27,"line":1865},[25,85613,85461],{"class":244},[25,85615,85616,85618,85620],{"class":27,"line":1870},[25,85617,52488],{"class":244},[25,85619,51884],{"class":51371},[25,85621,51378],{"class":244},[99,85623,85624],{},"进行输出结果后会发现：",[99,85626,85627],{},[155,85628],{"alt":20,"src":85629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[99,85631,85632],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[99,85634,85635],{},"所以，要重新指回创造这个原型对象的构造函数",[15,85637,85639],{"className":71284,"code":85638,"language":71286,"meta":20,"style":20},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[22,85640,85641,85655,85660,85665,85676,85689,85694,85705,85719,85723],{"__ignoreMap":20},[25,85642,85643,85646,85648,85651,85653],{"class":27,"line":28},[25,85644,85645],{"class":35},"Star",[25,85647,801],{"class":244},[25,85649,85650],{"class":35},"prototype",[25,85652,13674],{"class":240},[25,85654,15682],{"class":244},[25,85656,85657],{"class":27,"line":39},[25,85658,85659],{"class":302},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[25,85661,85662],{"class":27,"line":51},[25,85663,85664],{"class":244},"  constructor: Star,\n",[25,85666,85667,85670,85672,85674],{"class":27,"line":59},[25,85668,85669],{"class":31},"  sing",[25,85671,51508],{"class":244},[25,85673,54520],{"class":240},[25,85675,54523],{"class":244},[25,85677,85678,85680,85682,85684,85687],{"class":27,"line":67},[25,85679,73824],{"class":244},[25,85681,58318],{"class":31},[25,85683,245],{"class":244},[25,85685,85686],{"class":45},"'唱歌'",[25,85688,251],{"class":244},[25,85690,85691],{"class":27,"line":75},[25,85692,85693],{"class":244},"   },\n",[25,85695,85696,85699,85701,85703],{"class":27,"line":83},[25,85697,85698],{"class":31},"   dance",[25,85700,51508],{"class":244},[25,85702,54520],{"class":240},[25,85704,54523],{"class":244},[25,85706,85707,85710,85712,85714,85717],{"class":27,"line":91},[25,85708,85709],{"class":244},"     console.",[25,85711,58318],{"class":31},[25,85713,245],{"class":244},[25,85715,85716],{"class":45},"'跳舞'",[25,85718,251],{"class":244},[25,85720,85721],{"class":27,"line":1429},[25,85722,4419],{"class":244},[25,85724,85725],{"class":27,"line":1441},[25,85726,1676],{"class":244},[99,85728,85729],{},[155,85730],{"alt":20,"src":85731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[99,85733,85734],{},"总结1：",[99,85736,85737],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[99,85739,85740],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[99,85742,85743],{},"constructor指的是他的来源",[99,85745,85746],{},[155,85747],{"alt":20,"src":85748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[99,85750,85751],{},[155,85752],{"alt":20,"src":85753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[99,85755,85756],{},"总结2：",[99,85758,85759],{},[155,85760],{"alt":20,"src":85761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[99,85763,85764],{},[155,85765],{"alt":20,"src":85766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[99,85768,85769],{},[155,85770],{"alt":20,"src":85771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[210,85773,85775],{"id":85774},"_4134-对象原型","4.13.4 对象原型",[99,85777,85778],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[99,85780,85781],{},"对象原型就是__proto__这个属性",[99,85783,85784],{},[155,85785],{"alt":20,"src":85786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[99,85788,85789],{},[155,85790],{"alt":20,"src":85791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[99,85793,85794],{},[155,85795],{"alt":20,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[99,85798,85799],{},[155,85800],{"alt":20,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[15,85803,85805],{"className":53138,"code":85804,"language":53140,"meta":20,"style":20},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[22,85806,85807,85815,85823,85827,85831,85835,85840,85848],{"__ignoreMap":20},[25,85808,85809,85811,85813],{"class":27,"line":28},[25,85810,1153],{"class":244},[25,85812,51871],{"class":51371},[25,85814,51378],{"class":244},[25,85816,85817,85819,85821],{"class":27,"line":39},[25,85818,52215],{"class":244},[25,85820,51884],{"class":51371},[25,85822,51378],{"class":244},[25,85824,85825],{"class":27,"line":51},[25,85826,85447],{"class":244},[25,85828,85829],{"class":27,"line":59},[25,85830,2297],{"class":244},[25,85832,85833],{"class":27,"line":67},[25,85834,85456],{"class":244},[25,85836,85837],{"class":27,"line":75},[25,85838,85839],{"class":244},"    console.log(ldh)\n",[25,85841,85842,85844,85846],{"class":27,"line":83},[25,85843,52488],{"class":244},[25,85845,51884],{"class":51371},[25,85847,51378],{"class":244},[25,85849,85850,85852,85854],{"class":27,"line":91},[25,85851,51856],{"class":244},[25,85853,51871],{"class":51371},[25,85855,51378],{"class":244},[99,85857,85858],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[99,85860,85861],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[99,85863,85864],{},[155,85865],{"alt":20,"src":85866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[99,85868,85869],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[99,85871,85872],{},"对象原型指向原型对象",[99,85874,85875],{},[155,85876],{"alt":20,"src":85877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[99,85879,85880],{},[155,85881],{"alt":20,"src":85882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[99,85884,85885],{},[155,85886],{"alt":20,"src":85887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[210,85889,85891],{"id":85890},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[99,85893,85894],{},[155,85895],{"alt":20,"src":85896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[194,85898,85899,85902,85905,85908],{},[106,85900,85901],{},"构造函数通过new的形式实例化得到实例对象",[106,85903,85904],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[106,85906,85907],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[106,85909,85910],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[99,85912,85913],{},[155,85914],{"alt":20,"src":85915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[99,85917,85918],{},"题目梳理：",[99,85920,85921],{},[155,85922],{"alt":20,"src":85923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[210,85925,85927],{"id":85926},"_4136-原型继承","4.13.6 原型继承",[99,85929,85930],{},[155,85931],{"alt":20,"src":85932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[99,85934,85935],{},[155,85936],{"alt":20,"src":85937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[99,85939,85940],{},[155,85941],{"alt":20,"src":85942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[99,85944,85945],{},[155,85946],{"alt":20,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[99,85949,85950],{},[155,85951],{"alt":20,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[99,85954,85955],{},[155,85956],{"alt":20,"src":85957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[99,85959,85960],{},[155,85961],{"alt":20,"src":85962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[99,85964,85965],{},[155,85966],{"alt":20,"src":85967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[99,85969,85970],{},"回顾：构造函数每次new得到对象都是不同的",[210,85972,85974],{"id":85973},"_4137-原型链","4.13.7 原型链",[99,85976,85977],{},[155,85978],{"alt":20,"src":85979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[99,85981,85982],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[99,85984,85985],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[99,85987,85988],{},"大哥是Object",[99,85990,85991],{},[155,85992],{"alt":20,"src":85993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[99,85995,85996],{},[155,85997],{"alt":20,"src":85998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[99,86000,86001],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[99,86003,86004],{},"万物皆对象",[210,86006,86008],{"id":86007},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[99,86010,86011],{},"模态框",[99,86013,86014],{},"以后遇见这个效果直接使用这个就行",[99,86016,86017],{},[155,86018],{"alt":20,"src":86019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[99,86021,86022],{},[155,86023],{"alt":20,"src":86024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[99,86026,86027],{},[155,86028],{"alt":20,"src":86029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[99,86031,86032],{},[155,86033],{"alt":20,"src":86034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[99,86036,86037],{},"补充知识点：",[194,86039,86040],{},[106,86041,86042],{},"append()",[99,86044,86045],{},[155,86046],{"alt":20,"src":86047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[15,86049,86051],{"className":50704,"code":86050,"language":50706,"meta":20,"style":20},"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",[22,86052,86053,86058,86063,86068,86072,86076,86080,86085,86090,86095,86099],{"__ignoreMap":20},[25,86054,86055],{"class":27,"line":28},[25,86056,86057],{"class":244},"append(param1)\n",[25,86059,86060],{"class":27,"line":39},[25,86061,86062],{"class":244},"append(param1, param2)\n",[25,86064,86065],{"class":27,"line":51},[25,86066,86067],{"class":244},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[25,86069,86070],{"class":27,"line":59},[25,86071,2510],{"emptyLinePlaceholder":167},[25,86073,86074],{"class":27,"line":67},[25,86075,2510],{"emptyLinePlaceholder":167},[25,86077,86078],{"class":27,"line":75},[25,86079,2510],{"emptyLinePlaceholder":167},[25,86081,86082],{"class":27,"line":83},[25,86083,86084],{"class":244},"let div = document.createElement(\"div\");\n",[25,86086,86087],{"class":27,"line":91},[25,86088,86089],{"class":244},"let p = document.createElement(\"p\");\n",[25,86091,86092],{"class":27,"line":1429},[25,86093,86094],{"class":244},"div.append(p);\n",[25,86096,86097],{"class":27,"line":1441},[25,86098,2510],{"emptyLinePlaceholder":167},[25,86100,86101,86104,86106],{"class":27,"line":1723},[25,86102,86103],{"class":244},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[25,86105,99],{"class":51371},[25,86107,86108],{"class":244},"> ]\n",[194,86110,86111],{"start":39},[106,86112,86113],{},"remove()",[99,86115,86116],{},"自己删自己",[99,86118,86119],{},[155,86120],{"alt":20,"src":86121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[15,86123,86125],{"className":50704,"code":86124,"language":50706,"meta":20,"style":20},"\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",[22,86126,86127,86137,86151,86155,86163,86177,86197,86209,86217,86224,86236,86249,86284,86296,86307,86319,86331,86343,86370,86380,86384,86388,86397,86409,86423,86433,86445,86449,86453,86463,86474,86484,86494,86507,86520,86530,86534,86538,86547,86557,86569,86573,86577,86586,86596,86606,86618,86622,86626,86636,86652,86663,86673,86683,86695,86707,86719,86723,86727,86740,86751,86755,86763,86771,86775,86783,86803,86823,86831,86836,86862,86867,86872,86891,86896,86908,86913,86924,86934,86944,86949,86954,86958,86963,86968,86973,86993,86998,87018,87023,87037,87042,87047,87052,87068,87072,87077,87106,87111,87116,87121,87132,87136,87140,87144,87149,87174,87179,87204,87209,87218,87222,87227,87252,87256,87281,87285,87294,87298,87303,87321,87331,87335,87343,87351,87355],{"__ignoreMap":20},[25,86128,86129,86131,86133,86135],{"class":27,"line":28},[25,86130,51368],{"class":244},[25,86132,51372],{"class":51371},[25,86134,51375],{"class":31},[25,86136,51378],{"class":244},[25,86138,86139,86141,86143,86145,86147,86149],{"class":27,"line":39},[25,86140,1153],{"class":244},[25,86142,50706],{"class":51371},[25,86144,51387],{"class":31},[25,86146,290],{"class":244},[25,86148,51392],{"class":45},[25,86150,51378],{"class":244},[25,86152,86153],{"class":27,"line":51},[25,86154,2510],{"emptyLinePlaceholder":167},[25,86156,86157,86159,86161],{"class":27,"line":59},[25,86158,1153],{"class":244},[25,86160,51405],{"class":51371},[25,86162,51378],{"class":244},[25,86164,86165,86167,86169,86171,86173,86175],{"class":27,"line":67},[25,86166,52215],{"class":244},[25,86168,51415],{"class":51371},[25,86170,51418],{"class":31},[25,86172,290],{"class":244},[25,86174,51423],{"class":45},[25,86176,51378],{"class":244},[25,86178,86179,86181,86183,86185,86187,86189,86191,86193,86195],{"class":27,"line":75},[25,86180,52215],{"class":244},[25,86182,51415],{"class":51371},[25,86184,15030],{"class":31},[25,86186,290],{"class":244},[25,86188,51462],{"class":45},[25,86190,51442],{"class":31},[25,86192,290],{"class":244},[25,86194,51469],{"class":45},[25,86196,51378],{"class":244},[25,86198,86199,86201,86203,86205,86207],{"class":27,"line":83},[25,86200,52215],{"class":244},[25,86202,51478],{"class":51371},[25,86204,51481],{"class":244},[25,86206,51478],{"class":51371},[25,86208,51378],{"class":244},[25,86210,86211,86213,86215],{"class":27,"line":91},[25,86212,52215],{"class":244},[25,86214,159],{"class":51371},[25,86216,51378],{"class":244},[25,86218,86219,86222],{"class":27,"line":1429},[25,86220,86221],{"class":31},"    .modal",[25,86223,15682],{"class":244},[25,86225,86226,86228,86230,86232,86234],{"class":27,"line":1441},[25,86227,54842],{"class":35},[25,86229,51508],{"class":244},[25,86231,4083],{"class":35},[25,86233,51563],{"class":240},[25,86235,1403],{"class":244},[25,86237,86238,86241,86243,86245,86247],{"class":27,"line":1723},[25,86239,86240],{"class":35},"      min-height",[25,86242,51508],{"class":244},[25,86244,554],{"class":35},[25,86246,51563],{"class":240},[25,86248,1403],{"class":244},[25,86250,86251,86253,86255,86257,86259,86261,86263,86265,86267,86269,86271,86273,86275,86277,86279,86282],{"class":27,"line":1728},[25,86252,78821],{"class":35},[25,86254,51508],{"class":244},[25,86256,434],{"class":35},[25,86258,4203],{"class":35},[25,86260,2148],{"class":35},[25,86262,51563],{"class":240},[25,86264,78838],{"class":35},[25,86266,245],{"class":244},[25,86268,434],{"class":35},[25,86270,12545],{"class":244},[25,86272,434],{"class":35},[25,86274,12545],{"class":244},[25,86276,434],{"class":35},[25,86278,12545],{"class":244},[25,86280,86281],{"class":35},"0.1",[25,86283,2829],{"class":244},[25,86285,86286,86288,86290,86292,86294],{"class":27,"line":1734},[25,86287,55205],{"class":35},[25,86289,51508],{"class":244},[25,86291,536],{"class":35},[25,86293,51563],{"class":240},[25,86295,1403],{"class":244},[25,86297,86298,86300,86302,86305],{"class":27,"line":1739},[25,86299,54830],{"class":35},[25,86301,51508],{"class":244},[25,86303,86304],{"class":35},"fixed",[25,86306,1403],{"class":244},[25,86308,86309,86312,86314,86317],{"class":27,"line":1753},[25,86310,86311],{"class":35},"      z-index",[25,86313,51508],{"class":244},[25,86315,86316],{"class":35},"999",[25,86318,1403],{"class":244},[25,86320,86321,86323,86325,86327,86329],{"class":27,"line":1758},[25,86322,54909],{"class":35},[25,86324,51508],{"class":244},[25,86326,899],{"class":35},[25,86328,571],{"class":240},[25,86330,1403],{"class":244},[25,86332,86333,86335,86337,86339,86341],{"class":27,"line":1764},[25,86334,55018],{"class":35},[25,86336,51508],{"class":244},[25,86338,899],{"class":35},[25,86340,571],{"class":240},[25,86342,1403],{"class":244},[25,86344,86345,86347,86349,86351,86353,86356,86358,86360,86362,86364,86366,86368],{"class":27,"line":1785},[25,86346,78862],{"class":35},[25,86348,51508],{"class":244},[25,86350,78867],{"class":35},[25,86352,245],{"class":244},[25,86354,86355],{"class":35},"-50",[25,86357,571],{"class":240},[25,86359,12545],{"class":244},[25,86361,86355],{"class":35},[25,86363,571],{"class":240},[25,86365,12545],{"class":244},[25,86367,434],{"class":35},[25,86369,2829],{"class":244},[25,86371,86372,86374,86376,86378],{"class":27,"line":1790},[25,86373,54955],{"class":35},[25,86375,51508],{"class":244},[25,86377,60913],{"class":35},[25,86379,1403],{"class":244},[25,86381,86382],{"class":27,"line":1804},[25,86383,2297],{"class":244},[25,86385,86386],{"class":27,"line":1809},[25,86387,2510],{"emptyLinePlaceholder":167},[25,86389,86390,86392,86395],{"class":27,"line":1838},[25,86391,86221],{"class":31},[25,86393,86394],{"class":31}," .header",[25,86396,15682],{"class":244},[25,86398,86399,86401,86403,86405,86407],{"class":27,"line":1843},[25,86400,57430],{"class":35},[25,86402,51508],{"class":244},[25,86404,644],{"class":35},[25,86406,51563],{"class":240},[25,86408,1403],{"class":244},[25,86410,86411,86413,86415,86417,86419,86421],{"class":27,"line":1860},[25,86412,54766],{"class":35},[25,86414,51508],{"class":244},[25,86416,434],{"class":35},[25,86418,2148],{"class":35},[25,86420,51563],{"class":240},[25,86422,1403],{"class":244},[25,86424,86425,86427,86429,86431],{"class":27,"line":1865},[25,86426,54830],{"class":35},[25,86428,51508],{"class":244},[25,86430,54835],{"class":35},[25,86432,1403],{"class":244},[25,86434,86435,86437,86439,86441,86443],{"class":27,"line":1870},[25,86436,54993],{"class":35},[25,86438,51508],{"class":244},[25,86440,943],{"class":35},[25,86442,51563],{"class":240},[25,86444,1403],{"class":244},[25,86446,86447],{"class":27,"line":1875},[25,86448,2297],{"class":244},[25,86450,86451],{"class":27,"line":1889},[25,86452,2510],{"emptyLinePlaceholder":167},[25,86454,86455,86457,86459,86461],{"class":27,"line":1894},[25,86456,86221],{"class":31},[25,86458,86394],{"class":31},[25,86460,3142],{"class":51371},[25,86462,15682],{"class":244},[25,86464,86465,86468,86470,86472],{"class":27,"line":2687},[25,86466,86467],{"class":35},"      font-style",[25,86469,51508],{"class":244},[25,86471,63912],{"class":35},[25,86473,1403],{"class":244},[25,86475,86476,86478,86480,86482],{"class":27,"line":2701},[25,86477,57487],{"class":35},[25,86479,51508],{"class":244},[25,86481,62141],{"class":35},[25,86483,1403],{"class":244},[25,86485,86486,86488,86490,86492],{"class":27,"line":2709},[25,86487,54830],{"class":35},[25,86489,51508],{"class":244},[25,86491,54902],{"class":35},[25,86493,1403],{"class":244},[25,86495,86496,86499,86501,86503,86505],{"class":27,"line":2714},[25,86497,86498],{"class":35},"      right",[25,86500,51508],{"class":244},[25,86502,818],{"class":35},[25,86504,51563],{"class":240},[25,86506,1403],{"class":244},[25,86508,86509,86511,86513,86516,86518],{"class":27,"line":2720},[25,86510,55018],{"class":35},[25,86512,51508],{"class":244},[25,86514,86515],{"class":35},"-2",[25,86517,51563],{"class":240},[25,86519,1403],{"class":244},[25,86521,86522,86524,86526,86528],{"class":27,"line":2726},[25,86523,62096],{"class":35},[25,86525,51508],{"class":244},[25,86527,62101],{"class":35},[25,86529,1403],{"class":244},[25,86531,86532],{"class":27,"line":2731},[25,86533,2297],{"class":244},[25,86535,86536],{"class":27,"line":8058},[25,86537,2510],{"emptyLinePlaceholder":167},[25,86539,86540,86542,86545],{"class":27,"line":8082},[25,86541,86221],{"class":31},[25,86543,86544],{"class":31}," .body",[25,86546,15682],{"class":244},[25,86548,86549,86551,86553,86555],{"class":27,"line":8087},[25,86550,57357],{"class":35},[25,86552,51508],{"class":244},[25,86554,51663],{"class":35},[25,86556,1403],{"class":244},[25,86558,86559,86561,86563,86565,86567],{"class":27,"line":8093},[25,86560,54766],{"class":35},[25,86562,51508],{"class":244},[25,86564,689],{"class":35},[25,86566,51563],{"class":240},[25,86568,1403],{"class":244},[25,86570,86571],{"class":27,"line":8120},[25,86572,2297],{"class":244},[25,86574,86575],{"class":27,"line":8125},[25,86576,2510],{"emptyLinePlaceholder":167},[25,86578,86579,86581,86584],{"class":27,"line":8131},[25,86580,86221],{"class":31},[25,86582,86583],{"class":31}," .footer",[25,86585,15682],{"class":244},[25,86587,86588,86590,86592,86594],{"class":27,"line":8143},[25,86589,55080],{"class":35},[25,86591,51508],{"class":244},[25,86593,51548],{"class":35},[25,86595,1403],{"class":244},[25,86597,86598,86600,86602,86604],{"class":27,"line":8155},[25,86599,55091],{"class":35},[25,86601,51508],{"class":244},[25,86603,51651],{"class":35},[25,86605,1403],{"class":244},[25,86607,86608,86610,86612,86614,86616],{"class":27,"line":8167},[25,86609,54766],{"class":35},[25,86611,51508],{"class":244},[25,86613,689],{"class":35},[25,86615,51563],{"class":240},[25,86617,1403],{"class":244},[25,86619,86620],{"class":27,"line":9826},[25,86621,2297],{"class":244},[25,86623,86624],{"class":27,"line":9851},[25,86625,2510],{"emptyLinePlaceholder":167},[25,86627,86628,86630,86632,86634],{"class":27,"line":9874},[25,86629,86221],{"class":31},[25,86631,86583],{"class":31},[25,86633,1510],{"class":51371},[25,86635,15682],{"class":244},[25,86637,86638,86640,86642,86644,86646,86648,86650],{"class":27,"line":9898},[25,86639,54766],{"class":35},[25,86641,51508],{"class":244},[25,86643,315],{"class":35},[25,86645,51563],{"class":240},[25,86647,2193],{"class":35},[25,86649,51563],{"class":240},[25,86651,1403],{"class":244},[25,86653,86654,86656,86658,86661],{"class":27,"line":9903},[25,86655,61792],{"class":35},[25,86657,51508],{"class":244},[25,86659,86660],{"class":35},"#ccc",[25,86662,1403],{"class":244},[25,86664,86665,86667,86669,86671],{"class":27,"line":9908},[25,86666,64041],{"class":35},[25,86668,51508],{"class":244},[25,86670,54808],{"class":35},[25,86672,1403],{"class":244},[25,86674,86675,86677,86679,86681],{"class":27,"line":9913},[25,86676,57487],{"class":35},[25,86678,51508],{"class":244},[25,86680,60913],{"class":35},[25,86682,1403],{"class":244},[25,86684,86685,86687,86689,86691,86693],{"class":27,"line":9922},[25,86686,55205],{"class":35},[25,86688,51508],{"class":244},[25,86690,321],{"class":35},[25,86692,51563],{"class":240},[25,86694,1403],{"class":244},[25,86696,86697,86699,86701,86703,86705],{"class":27,"line":9927},[25,86698,61821],{"class":35},[25,86700,51508],{"class":244},[25,86702,689],{"class":35},[25,86704,51563],{"class":240},[25,86706,1403],{"class":244},[25,86708,86709,86711,86713,86715,86717],{"class":27,"line":9933},[25,86710,54993],{"class":35},[25,86712,51508],{"class":244},[25,86714,792],{"class":35},[25,86716,51563],{"class":240},[25,86718,1403],{"class":244},[25,86720,86721],{"class":27,"line":9954},[25,86722,2297],{"class":244},[25,86724,86725],{"class":27,"line":9960},[25,86726,2510],{"emptyLinePlaceholder":167},[25,86728,86729,86731,86733,86735,86738],{"class":27,"line":9974},[25,86730,86221],{"class":31},[25,86732,86583],{"class":31},[25,86734,1510],{"class":51371},[25,86736,86737],{"class":31},".submit",[25,86739,15682],{"class":244},[25,86741,86742,86744,86746,86749],{"class":27,"line":9980},[25,86743,54955],{"class":35},[25,86745,51508],{"class":244},[25,86747,86748],{"class":35},"#369",[25,86750,1403],{"class":244},[25,86752,86753],{"class":27,"line":10007},[25,86754,2297],{"class":244},[25,86756,86757,86759,86761],{"class":27,"line":10016},[25,86758,52488],{"class":244},[25,86760,159],{"class":51371},[25,86762,51378],{"class":244},[25,86764,86765,86767,86769],{"class":27,"line":10022},[25,86766,51856],{"class":244},[25,86768,51405],{"class":51371},[25,86770,51378],{"class":244},[25,86772,86773],{"class":27,"line":10030},[25,86774,2510],{"emptyLinePlaceholder":167},[25,86776,86777,86779,86781],{"class":27,"line":10035},[25,86778,1153],{"class":244},[25,86780,51871],{"class":51371},[25,86782,51378],{"class":244},[25,86784,86785,86787,86789,86791,86793,86796,86799,86801],{"class":27,"line":16714},[25,86786,52215],{"class":244},[25,86788,53958],{"class":51371},[25,86790,15069],{"class":31},[25,86792,290],{"class":244},[25,86794,86795],{"class":45},"\"delete\"",[25,86797,86798],{"class":244},">删除\u003C\u002F",[25,86800,53958],{"class":51371},[25,86802,51378],{"class":244},[25,86804,86805,86807,86809,86811,86813,86816,86819,86821],{"class":27,"line":16720},[25,86806,52215],{"class":244},[25,86808,53958],{"class":51371},[25,86810,15069],{"class":31},[25,86812,290],{"class":244},[25,86814,86815],{"class":45},"\"login\"",[25,86817,86818],{"class":244},">登录\u003C\u002F",[25,86820,53958],{"class":51371},[25,86822,51378],{"class":244},[25,86824,86825,86827,86829],{"class":27,"line":16743},[25,86826,52215],{"class":244},[25,86828,51884],{"class":51371},[25,86830,51378],{"class":244},[25,86832,86833],{"class":27,"line":16749},[25,86834,86835],{"class":302},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[25,86837,86838,86840,86843,86845,86847,86849,86851,86853,86856,86858,86860],{"class":27,"line":16772},[25,86839,70155],{"class":240},[25,86841,86842],{"class":31}," Modal",[25,86844,245],{"class":244},[25,86846,51478],{"class":5326},[25,86848,13674],{"class":240},[25,86850,70001],{"class":45},[25,86852,12545],{"class":244},[25,86854,86855],{"class":5326},"message",[25,86857,13674],{"class":240},[25,86859,70001],{"class":45},[25,86861,12552],{"class":244},[25,86863,86864],{"class":27,"line":16786},[25,86865,86866],{"class":302},"      \u002F\u002F 创建Model 模态框盒子\n",[25,86868,86869],{"class":27,"line":16806},[25,86870,86871],{"class":302},"      \u002F\u002F 1.1 创建div标签\n",[25,86873,86874,86876,86879,86881,86883,86885,86887,86889],{"class":27,"line":16812},[25,86875,70122],{"class":35},[25,86877,86878],{"class":244},".modalBox ",[25,86880,290],{"class":240},[25,86882,54467],{"class":244},[25,86884,70222],{"class":31},[25,86886,245],{"class":244},[25,86888,82002],{"class":45},[25,86890,251],{"class":244},[25,86892,86893],{"class":27,"line":16823},[25,86894,86895],{"class":302},"      \u002F\u002F 1.2 给div 添加类名为model\n",[25,86897,86898,86900,86903,86905],{"class":27,"line":16846},[25,86899,70122],{"class":35},[25,86901,86902],{"class":244},".modalBox.className ",[25,86904,290],{"class":240},[25,86906,86907],{"class":45}," 'modal'\n",[25,86909,86910],{"class":27,"line":16868},[25,86911,86912],{"class":302},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[25,86914,86915,86917,86920,86922],{"class":27,"line":16873},[25,86916,70122],{"class":35},[25,86918,86919],{"class":244},".modalBox.innerHTML ",[25,86921,290],{"class":240},[25,86923,70239],{"class":45},[25,86925,86926,86929,86931],{"class":27,"line":16879},[25,86927,86928],{"class":45},"        \u003Cdiv class=\"header\">${",[25,86930,51478],{"class":244},[25,86932,86933],{"class":45},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[25,86935,86936,86939,86941],{"class":27,"line":16893},[25,86937,86938],{"class":45},"        \u003Cdiv class=\"body\">${",[25,86940,86855],{"class":244},[25,86942,86943],{"class":45},"}\u003C\u002Fdiv>\n",[25,86945,86946],{"class":27,"line":16906},[25,86947,86948],{"class":45},"      `\n",[25,86950,86951],{"class":27,"line":16911},[25,86952,86953],{"class":302},"      \u002F\u002F console.log(this.modalBox)\n",[25,86955,86956],{"class":27,"line":16925},[25,86957,2297],{"class":244},[25,86959,86960],{"class":27,"line":16930},[25,86961,86962],{"class":302},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[25,86964,86965],{"class":27,"line":16936},[25,86966,86967],{"class":302},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[25,86969,86970],{"class":27,"line":16941},[25,86971,86972],{"class":302},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[25,86974,86975,86978,86980,86982,86984,86987,86989,86991],{"class":27,"line":16955},[25,86976,86977],{"class":35},"    Modal",[25,86979,801],{"class":244},[25,86981,85650],{"class":35},[25,86983,801],{"class":244},[25,86985,86986],{"class":31},"open",[25,86988,13674],{"class":240},[25,86990,58989],{"class":240},[25,86992,54523],{"class":244},[25,86994,86995],{"class":27,"line":16960},[25,86996,86997],{"class":302},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[25,86999,87000,87002,87005,87007,87009,87011,87013,87016],{"class":27,"line":16965},[25,87001,58299],{"class":240},[25,87003,87004],{"class":35}," box",[25,87006,13674],{"class":240},[25,87008,54467],{"class":244},[25,87010,54470],{"class":31},[25,87012,245],{"class":244},[25,87014,87015],{"class":45},"'.modal'",[25,87017,251],{"class":244},[25,87019,87020],{"class":27,"line":16979},[25,87021,87022],{"class":302},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[25,87024,87025,87028,87030,87033,87035],{"class":27,"line":16991},[25,87026,87027],{"class":244},"      box ",[25,87029,1826],{"class":240},[25,87031,87032],{"class":244}," box.",[25,87034,57077],{"class":31},[25,87036,2086],{"class":244},[25,87038,87039],{"class":27,"line":16996},[25,87040,87041],{"class":302},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[25,87043,87044],{"class":27,"line":17009},[25,87045,87046],{"class":302},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[25,87048,87049],{"class":27,"line":17014},[25,87050,87051],{"class":302},"      \u002F\u002F append可以增加对象\n",[25,87053,87054,87057,87060,87062,87065],{"class":27,"line":17019},[25,87055,87056],{"class":244},"      document.body.",[25,87058,87059],{"class":31},"append",[25,87061,245],{"class":244},[25,87063,87064],{"class":35},"this",[25,87066,87067],{"class":244},".modalBox)\n",[25,87069,87070],{"class":27,"line":17024},[25,87071,2510],{"emptyLinePlaceholder":167},[25,87073,87074],{"class":27,"line":17037},[25,87075,87076],{"class":302},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[25,87078,87079,87081,87084,87086,87088,87091,87093,87095,87097,87099,87102,87104],{"class":27,"line":17042},[25,87080,70122],{"class":35},[25,87082,87083],{"class":244},".modalBox.",[25,87085,54470],{"class":31},[25,87087,245],{"class":244},[25,87089,87090],{"class":45},"'i'",[25,87092,30897],{"class":244},[25,87094,57884],{"class":31},[25,87096,245],{"class":244},[25,87098,57889],{"class":45},[25,87100,87101],{"class":244},", () ",[25,87103,84793],{"class":240},[25,87105,15682],{"class":244},[25,87107,87108],{"class":27,"line":32704},[25,87109,87110],{"class":302},"        \u002F\u002F 这个地方需要用到箭头函数\n",[25,87112,87113],{"class":27,"line":32710},[25,87114,87115],{"class":302},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[25,87117,87118],{"class":27,"line":32716},[25,87119,87120],{"class":302},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[25,87122,87123,87125,87127,87130],{"class":27,"line":32722},[25,87124,64797],{"class":35},[25,87126,801],{"class":244},[25,87128,87129],{"class":31},"close",[25,87131,2086],{"class":244},[25,87133,87134],{"class":27,"line":32728},[25,87135,64886],{"class":244},[25,87137,87138],{"class":27,"line":32739},[25,87139,2297],{"class":244},[25,87141,87142],{"class":27,"line":32745},[25,87143,2510],{"emptyLinePlaceholder":167},[25,87145,87146],{"class":27,"line":32765},[25,87147,87148],{"class":302},"    \u002F\u002F 测试一下 点击 删除按钮\n",[25,87150,87151,87153,87155,87157,87160,87162,87164,87166,87168,87170,87172],{"class":27,"line":32771},[25,87152,52478],{"class":244},[25,87154,54470],{"class":31},[25,87156,245],{"class":244},[25,87158,87159],{"class":45},"'#delete'",[25,87161,30897],{"class":244},[25,87163,57884],{"class":31},[25,87165,245],{"class":244},[25,87167,57889],{"class":45},[25,87169,87101],{"class":244},[25,87171,84793],{"class":240},[25,87173,15682],{"class":244},[25,87175,87176],{"class":27,"line":32782},[25,87177,87178],{"class":302},"      \u002F\u002F 先调用Model构造函数\n",[25,87180,87181,87183,87186,87188,87190,87192,87194,87197,87199,87202],{"class":27,"line":32788},[25,87182,58299],{"class":240},[25,87184,87185],{"class":35}," del",[25,87187,13674],{"class":240},[25,87189,11688],{"class":240},[25,87191,86842],{"class":31},[25,87193,245],{"class":244},[25,87195,87196],{"class":45},"'温馨的提示'",[25,87198,12545],{"class":244},[25,87200,87201],{"class":45},"'您没有删除权限操作'",[25,87203,251],{"class":244},[25,87205,87206],{"class":27,"line":32794},[25,87207,87208],{"class":302},"      \u002F\u002F 实例对象调用open方法\n",[25,87210,87211,87214,87216],{"class":27,"line":32800},[25,87212,87213],{"class":244},"      del.",[25,87215,86986],{"class":31},[25,87217,2086],{"class":244},[25,87219,87220],{"class":27,"line":32806},[25,87221,33532],{"class":244},[25,87223,87224],{"class":27,"line":32812},[25,87225,87226],{"class":302},"    \u002F\u002F 测试一下 点击 登录按钮\n",[25,87228,87229,87231,87233,87235,87238,87240,87242,87244,87246,87248,87250],{"class":27,"line":32818},[25,87230,52478],{"class":244},[25,87232,54470],{"class":31},[25,87234,245],{"class":244},[25,87236,87237],{"class":45},"'#login'",[25,87239,30897],{"class":244},[25,87241,57884],{"class":31},[25,87243,245],{"class":244},[25,87245,57889],{"class":45},[25,87247,87101],{"class":244},[25,87249,84793],{"class":240},[25,87251,15682],{"class":244},[25,87253,87254],{"class":27,"line":32824},[25,87255,87178],{"class":302},[25,87257,87258,87260,87263,87265,87267,87269,87271,87274,87276,87279],{"class":27,"line":32844},[25,87259,58299],{"class":240},[25,87261,87262],{"class":35}," log",[25,87264,13674],{"class":240},[25,87266,11688],{"class":240},[25,87268,86842],{"class":31},[25,87270,245],{"class":244},[25,87272,87273],{"class":45},"'友情提示'",[25,87275,12545],{"class":244},[25,87277,87278],{"class":45},"'您还没有登录呢'",[25,87280,251],{"class":244},[25,87282,87283],{"class":27,"line":32850},[25,87284,87208],{"class":302},[25,87286,87287,87290,87292],{"class":27,"line":32866},[25,87288,87289],{"class":244},"      log.",[25,87291,86986],{"class":31},[25,87293,2086],{"class":244},[25,87295,87296],{"class":27,"line":32872},[25,87297,33532],{"class":244},[25,87299,87300],{"class":27,"line":32886},[25,87301,87302],{"class":302},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[25,87304,87305,87307,87309,87311,87313,87315,87317,87319],{"class":27,"line":32892},[25,87306,86977],{"class":35},[25,87308,801],{"class":244},[25,87310,85650],{"class":35},[25,87312,801],{"class":244},[25,87314,87129],{"class":31},[25,87316,13674],{"class":240},[25,87318,58989],{"class":240},[25,87320,54523],{"class":244},[25,87322,87323,87325,87327,87329],{"class":27,"line":32907},[25,87324,70122],{"class":35},[25,87326,87083],{"class":244},[25,87328,57077],{"class":31},[25,87330,2086],{"class":244},[25,87332,87333],{"class":27,"line":32913},[25,87334,2297],{"class":244},[25,87336,87337,87339,87341],{"class":27,"line":32922},[25,87338,52488],{"class":244},[25,87340,51884],{"class":51371},[25,87342,51378],{"class":244},[25,87344,87345,87347,87349],{"class":27,"line":32928},[25,87346,51856],{"class":244},[25,87348,51871],{"class":51371},[25,87350,51378],{"class":244},[25,87352,87353],{"class":27,"line":32937},[25,87354,2510],{"emptyLinePlaceholder":167},[25,87356,87357,87359,87361],{"class":27,"line":32943},[25,87358,51856],{"class":244},[25,87360,50706],{"class":51371},[25,87362,51378],{"class":244},[99,87364,87365],{},[155,87366],{"alt":20,"src":87367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[182,87369,87371],{"id":87370},"_414-深浅拷贝","4.14 深浅拷贝",[210,87373,87375],{"id":87374},"_4141-浅拷贝","4.14.1 浅拷贝",[99,87377,87378],{},[155,87379],{"alt":20,"src":87380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[99,87382,87383],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[99,87385,87386],{},[155,87387],{"alt":20,"src":87388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[99,87390,87391],{},[155,87392],{"alt":20,"src":87393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[99,87395,87396],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[99,87398,87399],{},[155,87400],{"alt":20,"src":87401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[99,87403,11442],{},[99,87405,87406],{},[155,87407],{"alt":20,"src":87408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[210,87410,87412],{"id":87411},"_4142-深拷贝","4.14.2 深拷贝",[99,87414,87415],{},"深拷贝：拷贝的是对象，不是地址",[99,87417,87418],{},"常用的三种方法：",[194,87420,87421,87424,87427],{},[106,87422,87423],{},"通过递归实现深拷贝",[106,87425,87426],{},"lodash\u002FcloneDeep",[106,87428,87429],{},"通过JSON.stringify()实现",[22108,87431,87433],{"id":87432},"_41421-递归函数","4.14.2.1 递归函数",[99,87435,87436],{},[155,87437],{"alt":20,"src":87438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[194,87440,87441],{},[106,87442,87443],{},"死递归占溢出：",[15,87445,87447],{"className":53138,"code":87446,"language":53140,"meta":20,"style":20},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[22,87448,87449,87457,87465,87469,87474,87478,87483,87491],{"__ignoreMap":20},[25,87450,87451,87453,87455],{"class":27,"line":28},[25,87452,1153],{"class":244},[25,87454,51871],{"class":51371},[25,87456,51378],{"class":244},[25,87458,87459,87461,87463],{"class":27,"line":39},[25,87460,52215],{"class":244},[25,87462,51884],{"class":51371},[25,87464,51378],{"class":244},[25,87466,87467],{"class":27,"line":51},[25,87468,77214],{"class":244},[25,87470,87471],{"class":27,"line":59},[25,87472,87473],{"class":244},"      fn()\n",[25,87475,87476],{"class":27,"line":67},[25,87477,2297],{"class":244},[25,87479,87480],{"class":27,"line":75},[25,87481,87482],{"class":244},"    fn()\n",[25,87484,87485,87487,87489],{"class":27,"line":83},[25,87486,52488],{"class":244},[25,87488,51884],{"class":51371},[25,87490,51378],{"class":244},[25,87492,87493,87495,87497],{"class":27,"line":91},[25,87494,51856],{"class":244},[25,87496,51871],{"class":51371},[25,87498,51378],{"class":244},[194,87500,87501],{"start":39},[106,87502,87503],{},"递归函数要加判断条件：",[99,87505,87506],{},[155,87507],{"alt":20,"src":87508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[194,87510,87511],{"start":51},[106,87512,87513],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[15,87515,87517],{"className":50704,"code":87516,"language":50706,"meta":20,"style":20},"\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",[22,87518,87519,87529,87543,87547,87555,87569,87589,87601,87609,87613,87621,87633,87641,87649,87674,87686,87690,87697,87705,87713,87717],{"__ignoreMap":20},[25,87520,87521,87523,87525,87527],{"class":27,"line":28},[25,87522,51368],{"class":244},[25,87524,51372],{"class":51371},[25,87526,51375],{"class":31},[25,87528,51378],{"class":244},[25,87530,87531,87533,87535,87537,87539,87541],{"class":27,"line":39},[25,87532,1153],{"class":244},[25,87534,50706],{"class":51371},[25,87536,51387],{"class":31},[25,87538,290],{"class":244},[25,87540,51392],{"class":45},[25,87542,51378],{"class":244},[25,87544,87545],{"class":27,"line":51},[25,87546,2510],{"emptyLinePlaceholder":167},[25,87548,87549,87551,87553],{"class":27,"line":59},[25,87550,1153],{"class":244},[25,87552,51405],{"class":51371},[25,87554,51378],{"class":244},[25,87556,87557,87559,87561,87563,87565,87567],{"class":27,"line":67},[25,87558,52215],{"class":244},[25,87560,51415],{"class":51371},[25,87562,51418],{"class":31},[25,87564,290],{"class":244},[25,87566,51423],{"class":45},[25,87568,51378],{"class":244},[25,87570,87571,87573,87575,87577,87579,87581,87583,87585,87587],{"class":27,"line":75},[25,87572,52215],{"class":244},[25,87574,51415],{"class":51371},[25,87576,15030],{"class":31},[25,87578,290],{"class":244},[25,87580,51462],{"class":45},[25,87582,51442],{"class":31},[25,87584,290],{"class":244},[25,87586,51469],{"class":45},[25,87588,51378],{"class":244},[25,87590,87591,87593,87595,87597,87599],{"class":27,"line":83},[25,87592,52215],{"class":244},[25,87594,51478],{"class":51371},[25,87596,51481],{"class":244},[25,87598,51478],{"class":51371},[25,87600,51378],{"class":244},[25,87602,87603,87605,87607],{"class":27,"line":91},[25,87604,51856],{"class":244},[25,87606,51405],{"class":51371},[25,87608,51378],{"class":244},[25,87610,87611],{"class":27,"line":1429},[25,87612,2510],{"emptyLinePlaceholder":167},[25,87614,87615,87617,87619],{"class":27,"line":1441},[25,87616,1153],{"class":244},[25,87618,51871],{"class":51371},[25,87620,51378],{"class":244},[25,87622,87623,87625,87627,87629,87631],{"class":27,"line":1723},[25,87624,52215],{"class":244},[25,87626,51682],{"class":51371},[25,87628,55385],{"class":244},[25,87630,51682],{"class":51371},[25,87632,51378],{"class":244},[25,87634,87635,87637,87639],{"class":27,"line":1728},[25,87636,52215],{"class":244},[25,87638,51884],{"class":51371},[25,87640,51378],{"class":244},[25,87642,87643,87645,87647],{"class":27,"line":1734},[25,87644,70155],{"class":240},[25,87646,73844],{"class":31},[25,87648,10963],{"class":244},[25,87650,87651,87653,87655,87657,87659,87661,87663,87665,87667,87669,87672],{"class":27,"line":1739},[25,87652,55842],{"class":244},[25,87654,54470],{"class":31},[25,87656,245],{"class":244},[25,87658,82002],{"class":45},[25,87660,74320],{"class":244},[25,87662,290],{"class":240},[25,87664,11688],{"class":240},[25,87666,73860],{"class":31},[25,87668,17371],{"class":244},[25,87670,87671],{"class":31},"toLocaleString",[25,87673,2086],{"class":244},[25,87675,87676,87679,87682,87684],{"class":27,"line":1753},[25,87677,87678],{"class":31},"      setTimeout",[25,87680,87681],{"class":244},"(getTime, ",[25,87683,6520],{"class":35},[25,87685,251],{"class":244},[25,87687,87688],{"class":27,"line":1758},[25,87689,2297],{"class":244},[25,87691,87692,87695],{"class":27,"line":1764},[25,87693,87694],{"class":31},"    getTime",[25,87696,2086],{"class":244},[25,87698,87699,87701,87703],{"class":27,"line":1785},[25,87700,52488],{"class":244},[25,87702,51884],{"class":51371},[25,87704,51378],{"class":244},[25,87706,87707,87709,87711],{"class":27,"line":1790},[25,87708,51856],{"class":244},[25,87710,51871],{"class":51371},[25,87712,51378],{"class":244},[25,87714,87715],{"class":27,"line":1804},[25,87716,2510],{"emptyLinePlaceholder":167},[25,87718,87719,87721,87723],{"class":27,"line":1809},[25,87720,51856],{"class":244},[25,87722,50706],{"class":51371},[25,87724,51378],{"class":244},[99,87726,87727],{},[155,87728],{"alt":20,"src":87729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[194,87731,87732],{"start":59},[106,87733,87423],{},[99,87735,87736],{},[155,87737],{"alt":20,"src":87738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[99,87740,87741],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[99,87743,39260],{},[99,87745,87746],{},"这个是简易版的递归函数深拷贝",[99,87748,87749],{},"一定要注意先数组再对象，因为万物皆可对象",[15,87751,87753],{"className":50704,"code":87752,"language":50706,"meta":20,"style":20},"\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",[22,87754,87755,87765,87779,87783,87791,87805,87825,87837,87845,87849,87857,87865,87875,87884,87892,87908,87912,87920,87924,87928,87940,87945,87964,87980,87985,87990,87995,88010,88015,88020,88029,88037,88054,88062,88068,88076,88081,88086,88095,88099,88103,88107,88118,88127,88137,88151,88161,88169,88177,88185,88189],{"__ignoreMap":20},[25,87756,87757,87759,87761,87763],{"class":27,"line":28},[25,87758,51368],{"class":244},[25,87760,51372],{"class":51371},[25,87762,51375],{"class":31},[25,87764,51378],{"class":244},[25,87766,87767,87769,87771,87773,87775,87777],{"class":27,"line":39},[25,87768,1153],{"class":244},[25,87770,50706],{"class":51371},[25,87772,51387],{"class":31},[25,87774,290],{"class":244},[25,87776,51392],{"class":45},[25,87778,51378],{"class":244},[25,87780,87781],{"class":27,"line":51},[25,87782,2510],{"emptyLinePlaceholder":167},[25,87784,87785,87787,87789],{"class":27,"line":59},[25,87786,1153],{"class":244},[25,87788,51405],{"class":51371},[25,87790,51378],{"class":244},[25,87792,87793,87795,87797,87799,87801,87803],{"class":27,"line":67},[25,87794,52215],{"class":244},[25,87796,51415],{"class":51371},[25,87798,51418],{"class":31},[25,87800,290],{"class":244},[25,87802,51423],{"class":45},[25,87804,51378],{"class":244},[25,87806,87807,87809,87811,87813,87815,87817,87819,87821,87823],{"class":27,"line":75},[25,87808,52215],{"class":244},[25,87810,51415],{"class":51371},[25,87812,15030],{"class":31},[25,87814,290],{"class":244},[25,87816,51462],{"class":45},[25,87818,51442],{"class":31},[25,87820,290],{"class":244},[25,87822,51469],{"class":45},[25,87824,51378],{"class":244},[25,87826,87827,87829,87831,87833,87835],{"class":27,"line":83},[25,87828,52215],{"class":244},[25,87830,51478],{"class":51371},[25,87832,51481],{"class":244},[25,87834,51478],{"class":51371},[25,87836,51378],{"class":244},[25,87838,87839,87841,87843],{"class":27,"line":91},[25,87840,51856],{"class":244},[25,87842,51405],{"class":51371},[25,87844,51378],{"class":244},[25,87846,87847],{"class":27,"line":1429},[25,87848,2510],{"emptyLinePlaceholder":167},[25,87850,87851,87853,87855],{"class":27,"line":1441},[25,87852,1153],{"class":244},[25,87854,51871],{"class":51371},[25,87856,51378],{"class":244},[25,87858,87859,87861,87863],{"class":27,"line":1723},[25,87860,52215],{"class":244},[25,87862,51884],{"class":51371},[25,87864,51378],{"class":244},[25,87866,87867,87869,87871,87873],{"class":27,"line":1728},[25,87868,11331],{"class":240},[25,87870,70042],{"class":35},[25,87872,13674],{"class":240},[25,87874,15682],{"class":244},[25,87876,87877,87879,87882],{"class":27,"line":1734},[25,87878,71687],{"class":244},[25,87880,87881],{"class":45},"'pink'",[25,87883,31537],{"class":244},[25,87885,87886,87888,87890],{"class":27,"line":1739},[25,87887,71697],{"class":244},[25,87889,893],{"class":35},[25,87891,31537],{"class":244},[25,87893,87894,87897,87900,87902,87905],{"class":27,"line":1753},[25,87895,87896],{"class":244},"      hobby: [",[25,87898,87899],{"class":45},"'乒乓球'",[25,87901,12545],{"class":244},[25,87903,87904],{"class":45},"'足球'",[25,87906,87907],{"class":244},"],\n",[25,87909,87910],{"class":27,"line":1758},[25,87911,77943],{"class":244},[25,87913,87914,87917],{"class":27,"line":1764},[25,87915,87916],{"class":244},"        baby: ",[25,87918,87919],{"class":45},"'小pink'\n",[25,87921,87922],{"class":27,"line":1785},[25,87923,52469],{"class":244},[25,87925,87926],{"class":27,"line":1790},[25,87927,2297],{"class":244},[25,87929,87930,87932,87935,87937],{"class":27,"line":1804},[25,87931,11331],{"class":240},[25,87933,87934],{"class":35}," o",[25,87936,13674],{"class":240},[25,87938,87939],{"class":244}," {}\n",[25,87941,87942],{"class":27,"line":1809},[25,87943,87944],{"class":302},"    \u002F\u002F 拷贝函数\n",[25,87946,87947,87949,87952,87954,87957,87959,87962],{"class":27,"line":1838},[25,87948,70155],{"class":240},[25,87950,87951],{"class":31}," deepCopy",[25,87953,245],{"class":244},[25,87955,87956],{"class":5326},"newObj",[25,87958,12545],{"class":244},[25,87960,87961],{"class":5326},"oldObj",[25,87963,12552],{"class":244},[25,87965,87966,87968,87970,87972,87975,87977],{"class":27,"line":1843},[25,87967,52355],{"class":240},[25,87969,1769],{"class":244},[25,87971,51918],{"class":240},[25,87973,87974],{"class":244}," k ",[25,87976,26114],{"class":240},[25,87978,87979],{"class":244}," oldObj) {\n",[25,87981,87982],{"class":27,"line":1860},[25,87983,87984],{"class":302},"        \u002F\u002F 处理数组的问题\n",[25,87986,87987],{"class":27,"line":1865},[25,87988,87989],{"class":302},"        \u002F\u002F 判断是否属于数组\n",[25,87991,87992],{"class":27,"line":1870},[25,87993,87994],{"class":302},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[25,87996,87997,87999,88002,88005,88008],{"class":27,"line":1875},[25,87998,2607],{"class":240},[25,88000,88001],{"class":244}," (oldObj[k] ",[25,88003,88004],{"class":240},"instanceof",[25,88006,88007],{"class":31}," Array",[25,88009,12552],{"class":244},[25,88011,88012],{"class":27,"line":1889},[25,88013,88014],{"class":302},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[25,88016,88017],{"class":27,"line":1894},[25,88018,88019],{"class":302},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[25,88021,88022,88025,88027],{"class":27,"line":2687},[25,88023,88024],{"class":244},"          newObj[k] ",[25,88026,290],{"class":240},[25,88028,51909],{"class":244},[25,88030,88031,88034],{"class":27,"line":2701},[25,88032,88033],{"class":31},"          deepCopy",[25,88035,88036],{"class":244},"(newObj[k], oldObj[k])\n",[25,88038,88039,88041,88043,88045,88047,88049,88052],{"class":27,"line":2709},[25,88040,80151],{"class":244},[25,88042,1812],{"class":240},[25,88044,1815],{"class":240},[25,88046,88001],{"class":244},[25,88048,88004],{"class":240},[25,88050,88051],{"class":31}," Object",[25,88053,12552],{"class":244},[25,88055,88056,88058,88060],{"class":27,"line":2714},[25,88057,88024],{"class":244},[25,88059,290],{"class":240},[25,88061,87939],{"class":244},[25,88063,88064,88066],{"class":27,"line":2720},[25,88065,88033],{"class":31},[25,88067,88036],{"class":244},[25,88069,88070,88072,88074],{"class":27,"line":2726},[25,88071,80151],{"class":244},[25,88073,1812],{"class":240},[25,88075,15682],{"class":244},[25,88077,88078],{"class":27,"line":2731},[25,88079,88080],{"class":302},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[25,88082,88083],{"class":27,"line":8058},[25,88084,88085],{"class":302},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[25,88087,88088,88090,88092],{"class":27,"line":8082},[25,88089,88024],{"class":244},[25,88091,290],{"class":240},[25,88093,88094],{"class":244}," oldObj[k]\n",[25,88096,88097],{"class":27,"line":8087},[25,88098,2639],{"class":244},[25,88100,88101],{"class":27,"line":8093},[25,88102,52469],{"class":244},[25,88104,88105],{"class":27,"line":8120},[25,88106,2297],{"class":244},[25,88108,88109,88112,88115],{"class":27,"line":8125},[25,88110,88111],{"class":31},"    deepCopy",[25,88113,88114],{"class":244},"(o, obj) ",[25,88116,88117],{"class":302},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[25,88119,88120,88122,88124],{"class":27,"line":8131},[25,88121,73824],{"class":244},[25,88123,58318],{"class":31},[25,88125,88126],{"class":244},"(o)\n",[25,88128,88129,88132,88134],{"class":27,"line":8143},[25,88130,88131],{"class":244},"    o.age ",[25,88133,290],{"class":240},[25,88135,88136],{"class":35}," 20\n",[25,88138,88139,88142,88144,88146,88148],{"class":27,"line":8155},[25,88140,88141],{"class":244},"    o.hobby[",[25,88143,434],{"class":35},[25,88145,4553],{"class":244},[25,88147,290],{"class":240},[25,88149,88150],{"class":45}," '篮球'\n",[25,88152,88153,88156,88158],{"class":27,"line":8167},[25,88154,88155],{"class":244},"    o.family ",[25,88157,290],{"class":240},[25,88159,88160],{"class":45}," '老pink'\n",[25,88162,88163,88165,88167],{"class":27,"line":9826},[25,88164,73824],{"class":244},[25,88166,58318],{"class":31},[25,88168,70107],{"class":244},[25,88170,88171,88173,88175],{"class":27,"line":9851},[25,88172,52488],{"class":244},[25,88174,51884],{"class":51371},[25,88176,51378],{"class":244},[25,88178,88179,88181,88183],{"class":27,"line":9874},[25,88180,51856],{"class":244},[25,88182,51871],{"class":51371},[25,88184,51378],{"class":244},[25,88186,88187],{"class":27,"line":9898},[25,88188,2510],{"emptyLinePlaceholder":167},[25,88190,88191,88193,88195],{"class":27,"line":9903},[25,88192,51856],{"class":244},[25,88194,50706],{"class":51371},[25,88196,51378],{"class":244},[99,88198,88199],{},[155,88200],{"alt":20,"src":88201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22108,88203,88205,88206],{"id":88204},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[392,88207,88208],{},"js库lodash里面cloneDeep内部实现了深拷贝",[99,88210,88211],{},[481,88212,88213],{"href":88213,"rel":88214},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23973],[99,88216,88217],{},"lodash里边的方法都要加上一个下划线_",[99,88219,88220],{},"_.cloneDeep()",[15,88222,88224],{"className":50704,"code":88223,"language":50706,"meta":20,"style":20},"\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",[22,88225,88226,88236,88250,88254,88262,88276,88296,88308,88316,88320,88328,88333,88352,88360,88370,88378,88386,88398,88402,88408,88412,88416,88432,88440,88449,88457,88465,88473,88477],{"__ignoreMap":20},[25,88227,88228,88230,88232,88234],{"class":27,"line":28},[25,88229,51368],{"class":244},[25,88231,51372],{"class":51371},[25,88233,51375],{"class":31},[25,88235,51378],{"class":244},[25,88237,88238,88240,88242,88244,88246,88248],{"class":27,"line":39},[25,88239,1153],{"class":244},[25,88241,50706],{"class":51371},[25,88243,51387],{"class":31},[25,88245,290],{"class":244},[25,88247,51392],{"class":45},[25,88249,51378],{"class":244},[25,88251,88252],{"class":27,"line":51},[25,88253,2510],{"emptyLinePlaceholder":167},[25,88255,88256,88258,88260],{"class":27,"line":59},[25,88257,1153],{"class":244},[25,88259,51405],{"class":51371},[25,88261,51378],{"class":244},[25,88263,88264,88266,88268,88270,88272,88274],{"class":27,"line":67},[25,88265,52215],{"class":244},[25,88267,51415],{"class":51371},[25,88269,51418],{"class":31},[25,88271,290],{"class":244},[25,88273,51423],{"class":45},[25,88275,51378],{"class":244},[25,88277,88278,88280,88282,88284,88286,88288,88290,88292,88294],{"class":27,"line":75},[25,88279,52215],{"class":244},[25,88281,51415],{"class":51371},[25,88283,15030],{"class":31},[25,88285,290],{"class":244},[25,88287,51462],{"class":45},[25,88289,51442],{"class":31},[25,88291,290],{"class":244},[25,88293,51469],{"class":45},[25,88295,51378],{"class":244},[25,88297,88298,88300,88302,88304,88306],{"class":27,"line":83},[25,88299,52215],{"class":244},[25,88301,51478],{"class":51371},[25,88303,51481],{"class":244},[25,88305,51478],{"class":51371},[25,88307,51378],{"class":244},[25,88309,88310,88312,88314],{"class":27,"line":91},[25,88311,51856],{"class":244},[25,88313,51405],{"class":51371},[25,88315,51378],{"class":244},[25,88317,88318],{"class":27,"line":1429},[25,88319,2510],{"emptyLinePlaceholder":167},[25,88321,88322,88324,88326],{"class":27,"line":1441},[25,88323,1153],{"class":244},[25,88325,51871],{"class":51371},[25,88327,51378],{"class":244},[25,88329,88330],{"class":27,"line":1723},[25,88331,88332],{"class":302},"  \u003C!-- 先引用这个库 -->\n",[25,88334,88335,88337,88339,88341,88343,88346,88348,88350],{"class":27,"line":1728},[25,88336,52215],{"class":244},[25,88338,51884],{"class":51371},[25,88340,55310],{"class":31},[25,88342,290],{"class":244},[25,88344,88345],{"class":45},"\"lodash.min.js\"",[25,88347,55385],{"class":244},[25,88349,51884],{"class":51371},[25,88351,51378],{"class":244},[25,88353,88354,88356,88358],{"class":27,"line":1734},[25,88355,52215],{"class":244},[25,88357,51884],{"class":51371},[25,88359,51378],{"class":244},[25,88361,88362,88364,88366,88368],{"class":27,"line":1739},[25,88363,11331],{"class":240},[25,88365,70042],{"class":35},[25,88367,13674],{"class":240},[25,88369,15682],{"class":244},[25,88371,88372,88374,88376],{"class":27,"line":1753},[25,88373,71687],{"class":244},[25,88375,87881],{"class":45},[25,88377,31537],{"class":244},[25,88379,88380,88382,88384],{"class":27,"line":1758},[25,88381,71697],{"class":244},[25,88383,893],{"class":35},[25,88385,31537],{"class":244},[25,88387,88388,88390,88392,88394,88396],{"class":27,"line":1764},[25,88389,87896],{"class":244},[25,88391,87899],{"class":45},[25,88393,12545],{"class":244},[25,88395,87904],{"class":45},[25,88397,87907],{"class":244},[25,88399,88400],{"class":27,"line":1785},[25,88401,77943],{"class":244},[25,88403,88404,88406],{"class":27,"line":1790},[25,88405,87916],{"class":244},[25,88407,87919],{"class":45},[25,88409,88410],{"class":27,"line":1804},[25,88411,52469],{"class":244},[25,88413,88414],{"class":27,"line":1809},[25,88415,2297],{"class":244},[25,88417,88418,88420,88422,88424,88427,88430],{"class":27,"line":1838},[25,88419,11331],{"class":240},[25,88421,87934],{"class":35},[25,88423,13674],{"class":240},[25,88425,88426],{"class":244}," _.",[25,88428,88429],{"class":31},"cloneDeep",[25,88431,70107],{"class":244},[25,88433,88434,88436,88438],{"class":27,"line":1843},[25,88435,73824],{"class":244},[25,88437,58318],{"class":31},[25,88439,88126],{"class":244},[25,88441,88442,88445,88447],{"class":27,"line":1860},[25,88443,88444],{"class":244},"    o.family.baby ",[25,88446,290],{"class":240},[25,88448,88160],{"class":45},[25,88450,88451,88453,88455],{"class":27,"line":1865},[25,88452,73824],{"class":244},[25,88454,58318],{"class":31},[25,88456,70107],{"class":244},[25,88458,88459,88461,88463],{"class":27,"line":1870},[25,88460,52488],{"class":244},[25,88462,51884],{"class":51371},[25,88464,51378],{"class":244},[25,88466,88467,88469,88471],{"class":27,"line":1875},[25,88468,51856],{"class":244},[25,88470,51871],{"class":51371},[25,88472,51378],{"class":244},[25,88474,88475],{"class":27,"line":1889},[25,88476,2510],{"emptyLinePlaceholder":167},[25,88478,88479,88481,88483],{"class":27,"line":1894},[25,88480,51856],{"class":244},[25,88482,50706],{"class":51371},[25,88484,51378],{"class":244},[99,88486,88487],{},[155,88488],{"alt":20,"src":88489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22108,88491,88493],{"id":88492},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[15,88495,88497],{"className":50704,"code":88496,"language":50706,"meta":20,"style":20},"\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",[22,88498,88499,88509,88523,88527,88535,88549,88569,88581,88589,88593,88601,88609,88619,88627,88635,88647,88651,88657,88661,88665,88670,88675,88680,88706,88714,88723,88731,88739,88747,88751],{"__ignoreMap":20},[25,88500,88501,88503,88505,88507],{"class":27,"line":28},[25,88502,51368],{"class":244},[25,88504,51372],{"class":51371},[25,88506,51375],{"class":31},[25,88508,51378],{"class":244},[25,88510,88511,88513,88515,88517,88519,88521],{"class":27,"line":39},[25,88512,1153],{"class":244},[25,88514,50706],{"class":51371},[25,88516,51387],{"class":31},[25,88518,290],{"class":244},[25,88520,51392],{"class":45},[25,88522,51378],{"class":244},[25,88524,88525],{"class":27,"line":51},[25,88526,2510],{"emptyLinePlaceholder":167},[25,88528,88529,88531,88533],{"class":27,"line":59},[25,88530,1153],{"class":244},[25,88532,51405],{"class":51371},[25,88534,51378],{"class":244},[25,88536,88537,88539,88541,88543,88545,88547],{"class":27,"line":67},[25,88538,52215],{"class":244},[25,88540,51415],{"class":51371},[25,88542,51418],{"class":31},[25,88544,290],{"class":244},[25,88546,51423],{"class":45},[25,88548,51378],{"class":244},[25,88550,88551,88553,88555,88557,88559,88561,88563,88565,88567],{"class":27,"line":75},[25,88552,52215],{"class":244},[25,88554,51415],{"class":51371},[25,88556,15030],{"class":31},[25,88558,290],{"class":244},[25,88560,51462],{"class":45},[25,88562,51442],{"class":31},[25,88564,290],{"class":244},[25,88566,51469],{"class":45},[25,88568,51378],{"class":244},[25,88570,88571,88573,88575,88577,88579],{"class":27,"line":83},[25,88572,52215],{"class":244},[25,88574,51478],{"class":51371},[25,88576,51481],{"class":244},[25,88578,51478],{"class":51371},[25,88580,51378],{"class":244},[25,88582,88583,88585,88587],{"class":27,"line":91},[25,88584,51856],{"class":244},[25,88586,51405],{"class":51371},[25,88588,51378],{"class":244},[25,88590,88591],{"class":27,"line":1429},[25,88592,2510],{"emptyLinePlaceholder":167},[25,88594,88595,88597,88599],{"class":27,"line":1441},[25,88596,1153],{"class":244},[25,88598,51871],{"class":51371},[25,88600,51378],{"class":244},[25,88602,88603,88605,88607],{"class":27,"line":1723},[25,88604,52215],{"class":244},[25,88606,51884],{"class":51371},[25,88608,51378],{"class":244},[25,88610,88611,88613,88615,88617],{"class":27,"line":1728},[25,88612,11331],{"class":240},[25,88614,70042],{"class":35},[25,88616,13674],{"class":240},[25,88618,15682],{"class":244},[25,88620,88621,88623,88625],{"class":27,"line":1734},[25,88622,71687],{"class":244},[25,88624,87881],{"class":45},[25,88626,31537],{"class":244},[25,88628,88629,88631,88633],{"class":27,"line":1739},[25,88630,71697],{"class":244},[25,88632,893],{"class":35},[25,88634,31537],{"class":244},[25,88636,88637,88639,88641,88643,88645],{"class":27,"line":1753},[25,88638,87896],{"class":244},[25,88640,87899],{"class":45},[25,88642,12545],{"class":244},[25,88644,87904],{"class":45},[25,88646,87907],{"class":244},[25,88648,88649],{"class":27,"line":1758},[25,88650,77943],{"class":244},[25,88652,88653,88655],{"class":27,"line":1764},[25,88654,87916],{"class":244},[25,88656,87919],{"class":45},[25,88658,88659],{"class":27,"line":1785},[25,88660,52469],{"class":244},[25,88662,88663],{"class":27,"line":1790},[25,88664,2297],{"class":244},[25,88666,88667],{"class":27,"line":1804},[25,88668,88669],{"class":302},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[25,88671,88672],{"class":27,"line":1809},[25,88673,88674],{"class":302},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[25,88676,88677],{"class":27,"line":1838},[25,88678,88679],{"class":302},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[25,88681,88682,88684,88686,88688,88691,88693,88696,88698,88700,88702,88704],{"class":27,"line":1843},[25,88683,11331],{"class":240},[25,88685,87934],{"class":35},[25,88687,13674],{"class":240},[25,88689,88690],{"class":35}," JSON",[25,88692,801],{"class":244},[25,88694,88695],{"class":31},"parse",[25,88697,245],{"class":244},[25,88699,71735],{"class":35},[25,88701,801],{"class":244},[25,88703,71740],{"class":31},[25,88705,71743],{"class":244},[25,88707,88708,88710,88712],{"class":27,"line":1860},[25,88709,73824],{"class":244},[25,88711,58318],{"class":31},[25,88713,88126],{"class":244},[25,88715,88716,88718,88720],{"class":27,"line":1865},[25,88717,88444],{"class":244},[25,88719,290],{"class":240},[25,88721,88722],{"class":45}," '123'\n",[25,88724,88725,88727,88729],{"class":27,"line":1870},[25,88726,73824],{"class":244},[25,88728,58318],{"class":31},[25,88730,70107],{"class":244},[25,88732,88733,88735,88737],{"class":27,"line":1875},[25,88734,52488],{"class":244},[25,88736,51884],{"class":51371},[25,88738,51378],{"class":244},[25,88740,88741,88743,88745],{"class":27,"line":1889},[25,88742,51856],{"class":244},[25,88744,51871],{"class":51371},[25,88746,51378],{"class":244},[25,88748,88749],{"class":27,"line":1894},[25,88750,2510],{"emptyLinePlaceholder":167},[25,88752,88753,88755,88757],{"class":27,"line":2687},[25,88754,51856],{"class":244},[25,88756,50706],{"class":51371},[25,88758,51378],{"class":244},[99,88760,88761],{},[155,88762],{"alt":20,"src":88763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[182,88765,88767],{"id":88766},"_415-异常处理","4.15 异常处理",[194,88769,88770],{},[106,88771,88772],{},"throw抛异常",[99,88774,88775],{},[155,88776],{"alt":20,"src":88777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[194,88779,88780],{"start":39},[106,88781,88782],{},"try\u002Fcatch 捕获错误信息",[99,88784,88785],{},[155,88786],{"alt":20,"src":88787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[15,88789,88791],{"className":50704,"code":88790,"language":50706,"meta":20,"style":20},"\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",[22,88792,88793,88803,88817,88821,88829,88843,88863,88875,88883,88887,88895,88907,88915,88924,88931,88936,88955,88964,88975,88980,88990,88995,89000,89005,89022,89026,89031,89038,89050,89054,89066,89070,89074,89079,89084,89091,89099,89107,89111],{"__ignoreMap":20},[25,88794,88795,88797,88799,88801],{"class":27,"line":28},[25,88796,51368],{"class":244},[25,88798,51372],{"class":51371},[25,88800,51375],{"class":31},[25,88802,51378],{"class":244},[25,88804,88805,88807,88809,88811,88813,88815],{"class":27,"line":39},[25,88806,1153],{"class":244},[25,88808,50706],{"class":51371},[25,88810,51387],{"class":31},[25,88812,290],{"class":244},[25,88814,51392],{"class":45},[25,88816,51378],{"class":244},[25,88818,88819],{"class":27,"line":51},[25,88820,2510],{"emptyLinePlaceholder":167},[25,88822,88823,88825,88827],{"class":27,"line":59},[25,88824,1153],{"class":244},[25,88826,51405],{"class":51371},[25,88828,51378],{"class":244},[25,88830,88831,88833,88835,88837,88839,88841],{"class":27,"line":67},[25,88832,52215],{"class":244},[25,88834,51415],{"class":51371},[25,88836,51418],{"class":31},[25,88838,290],{"class":244},[25,88840,51423],{"class":45},[25,88842,51378],{"class":244},[25,88844,88845,88847,88849,88851,88853,88855,88857,88859,88861],{"class":27,"line":75},[25,88846,52215],{"class":244},[25,88848,51415],{"class":51371},[25,88850,15030],{"class":31},[25,88852,290],{"class":244},[25,88854,51462],{"class":45},[25,88856,51442],{"class":31},[25,88858,290],{"class":244},[25,88860,51469],{"class":45},[25,88862,51378],{"class":244},[25,88864,88865,88867,88869,88871,88873],{"class":27,"line":83},[25,88866,52215],{"class":244},[25,88868,51478],{"class":51371},[25,88870,51481],{"class":244},[25,88872,51478],{"class":51371},[25,88874,51378],{"class":244},[25,88876,88877,88879,88881],{"class":27,"line":91},[25,88878,51856],{"class":244},[25,88880,51405],{"class":51371},[25,88882,51378],{"class":244},[25,88884,88885],{"class":27,"line":1429},[25,88886,2510],{"emptyLinePlaceholder":167},[25,88888,88889,88891,88893],{"class":27,"line":1441},[25,88890,1153],{"class":244},[25,88892,51871],{"class":51371},[25,88894,51378],{"class":244},[25,88896,88897,88899,88901,88903,88905],{"class":27,"line":1723},[25,88898,52215],{"class":244},[25,88900,99],{"class":51371},[25,88902,53565],{"class":244},[25,88904,99],{"class":51371},[25,88906,51378],{"class":244},[25,88908,88909,88911,88913],{"class":27,"line":1728},[25,88910,52215],{"class":244},[25,88912,51884],{"class":51371},[25,88914,51378],{"class":244},[25,88916,88917,88919,88922],{"class":27,"line":1734},[25,88918,70155],{"class":240},[25,88920,88921],{"class":31}," fn",[25,88923,10963],{"class":244},[25,88925,88926,88929],{"class":27,"line":1739},[25,88927,88928],{"class":240},"      try",[25,88930,15682],{"class":244},[25,88932,88933],{"class":27,"line":1753},[25,88934,88935],{"class":302},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[25,88937,88938,88940,88942,88944,88946,88948,88950,88953],{"class":27,"line":1758},[25,88939,61341],{"class":240},[25,88941,6935],{"class":35},[25,88943,13674],{"class":240},[25,88945,54467],{"class":244},[25,88947,54470],{"class":31},[25,88949,245],{"class":244},[25,88951,88952],{"class":45},"'.p'",[25,88954,251],{"class":244},[25,88956,88957,88960,88962],{"class":27,"line":1764},[25,88958,88959],{"class":244},"        p.style.color ",[25,88961,290],{"class":240},[25,88963,67122],{"class":45},[25,88965,88966,88969,88972],{"class":27,"line":1785},[25,88967,88968],{"class":244},"      } ",[25,88970,88971],{"class":240},"catch",[25,88973,88974],{"class":244}," (err) {\n",[25,88976,88977],{"class":27,"line":1790},[25,88978,88979],{"class":302},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[25,88981,88982,88985,88987],{"class":27,"line":1804},[25,88983,88984],{"class":244},"        console.",[25,88986,58318],{"class":31},[25,88988,88989],{"class":244},"(err.message)\n",[25,88991,88992],{"class":27,"line":1809},[25,88993,88994],{"class":302},"        \u002F\u002F 想要中断程序，需要加return\n",[25,88996,88997],{"class":27,"line":1838},[25,88998,88999],{"class":302},"        \u002F\u002F return\n",[25,89001,89002],{"class":27,"line":1843},[25,89003,89004],{"class":302},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[25,89006,89007,89010,89012,89015,89017,89020],{"class":27,"line":1860},[25,89008,89009],{"class":240},"        throw",[25,89011,11688],{"class":240},[25,89013,89014],{"class":31}," Error",[25,89016,245],{"class":244},[25,89018,89019],{"class":45},"'你看看，选择器错误了吧'",[25,89021,251],{"class":244},[25,89023,89024],{"class":27,"line":1865},[25,89025,52469],{"class":244},[25,89027,89028],{"class":27,"line":1870},[25,89029,89030],{"class":302},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[25,89032,89033,89036],{"class":27,"line":1875},[25,89034,89035],{"class":240},"      finally",[25,89037,15682],{"class":244},[25,89039,89040,89043,89045,89048],{"class":27,"line":1889},[25,89041,89042],{"class":31},"        alert",[25,89044,245],{"class":244},[25,89046,89047],{"class":45},"'弹出对话框'",[25,89049,251],{"class":244},[25,89051,89052],{"class":27,"line":1894},[25,89053,52469],{"class":244},[25,89055,89056,89058,89060,89062,89064],{"class":27,"line":2687},[25,89057,58315],{"class":244},[25,89059,58318],{"class":31},[25,89061,245],{"class":244},[25,89063,715],{"class":35},[25,89065,251],{"class":244},[25,89067,89068],{"class":27,"line":2701},[25,89069,2510],{"emptyLinePlaceholder":167},[25,89071,89072],{"class":27,"line":2709},[25,89073,2297],{"class":244},[25,89075,89076],{"class":27,"line":2714},[25,89077,89078],{"class":302},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[25,89080,89081],{"class":27,"line":2720},[25,89082,89083],{"class":302},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[25,89085,89086,89089],{"class":27,"line":2726},[25,89087,89088],{"class":31},"    fn",[25,89090,2086],{"class":244},[25,89092,89093,89095,89097],{"class":27,"line":2731},[25,89094,52488],{"class":244},[25,89096,51884],{"class":51371},[25,89098,51378],{"class":244},[25,89100,89101,89103,89105],{"class":27,"line":8058},[25,89102,51856],{"class":244},[25,89104,51871],{"class":51371},[25,89106,51378],{"class":244},[25,89108,89109],{"class":27,"line":8082},[25,89110,2510],{"emptyLinePlaceholder":167},[25,89112,89113,89115,89117],{"class":27,"line":8087},[25,89114,51856],{"class":244},[25,89116,50706],{"class":51371},[25,89118,51378],{"class":244},[99,89120,89121],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[194,89123,89124],{"start":51},[106,89125,89126],{},"debugger",[99,89128,89129],{},[155,89130],{"alt":20,"src":89131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[99,89133,89134],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[182,89136,89138],{"id":89137},"_416-处理this","4.16 处理this",[210,89140,89142],{"id":89141},"_4161-this的指向","4.16.1 this的指向",[194,89144,89145],{},[106,89146,89147],{},"普通函数的this",[99,89149,89150],{},[155,89151],{"alt":20,"src":89152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[194,89154,89155],{"start":39},[106,89156,89157],{},"箭头函数的this",[99,89159,89160],{},[155,89161],{"alt":20,"src":89162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[99,89164,89165],{},[155,89166],{"alt":20,"src":89167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[99,89169,89170],{},[155,89171],{"alt":20,"src":89172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[210,89174,89176],{"id":89175},"_4162-this的改变","4.16.2 this的改变",[99,89178,89179],{},"call() apply() bind()",[194,89181,89182],{},[106,89183,89184],{},"call()",[99,89186,89187],{},[155,89188],{"alt":20,"src":89189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[99,89191,89192],{},"两个作用：①调用函数；②改变this指向",[15,89194,89196],{"className":53138,"code":89195,"language":53140,"meta":20,"style":20},"\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",[22,89197,89198,89206,89214,89218,89223,89227,89232,89237,89242,89246,89251,89259],{"__ignoreMap":20},[25,89199,89200,89202,89204],{"class":27,"line":28},[25,89201,1153],{"class":244},[25,89203,51871],{"class":51371},[25,89205,51378],{"class":244},[25,89207,89208,89210,89212],{"class":27,"line":39},[25,89209,52215],{"class":244},[25,89211,51884],{"class":51371},[25,89213,51378],{"class":244},[25,89215,89216],{"class":27,"line":51},[25,89217,71594],{"class":244},[25,89219,89220],{"class":27,"line":59},[25,89221,89222],{"class":244},"      uname: 'pink'\n",[25,89224,89225],{"class":27,"line":67},[25,89226,2297],{"class":244},[25,89228,89229],{"class":27,"line":75},[25,89230,89231],{"class":244},"    function fn(x, y) {\n",[25,89233,89234],{"class":27,"line":83},[25,89235,89236],{"class":244},"      console.log(this)  \u002F\u002Fwindow\n",[25,89238,89239],{"class":27,"line":91},[25,89240,89241],{"class":244},"      console.log(x + y)\n",[25,89243,89244],{"class":27,"line":1429},[25,89245,2297],{"class":244},[25,89247,89248],{"class":27,"line":1441},[25,89249,89250],{"class":244},"    fn.call(obj, 1, 2)\n",[25,89252,89253,89255,89257],{"class":27,"line":1723},[25,89254,52488],{"class":244},[25,89256,51884],{"class":51371},[25,89258,51378],{"class":244},[25,89260,89261,89263,89265],{"class":27,"line":1728},[25,89262,51856],{"class":244},[25,89264,51871],{"class":51371},[25,89266,51378],{"class":244},[99,89268,89269],{},[155,89270],{"alt":20,"src":89271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[194,89273,89274],{"start":39},[106,89275,89276],{},"apply()",[99,89278,89279],{},[155,89280],{"alt":20,"src":89281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[99,89283,89192],{},[99,89285,89286],{},"call传递的是普通参数，而apply必须传递的是数组",[15,89288,89290],{"className":50704,"code":89289,"language":50706,"meta":20,"style":20},"\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",[22,89291,89292,89302,89316,89320,89328,89342,89362,89374,89382,89386,89394,89402,89412,89419,89423,89428,89444,89456,89470,89474,89479,89498,89503,89507,89512,89517,89525,89530,89552,89557,89573,89589,89601,89605,89610,89629,89637,89645,89649],{"__ignoreMap":20},[25,89293,89294,89296,89298,89300],{"class":27,"line":28},[25,89295,51368],{"class":244},[25,89297,51372],{"class":51371},[25,89299,51375],{"class":31},[25,89301,51378],{"class":244},[25,89303,89304,89306,89308,89310,89312,89314],{"class":27,"line":39},[25,89305,1153],{"class":244},[25,89307,50706],{"class":51371},[25,89309,51387],{"class":31},[25,89311,290],{"class":244},[25,89313,51392],{"class":45},[25,89315,51378],{"class":244},[25,89317,89318],{"class":27,"line":51},[25,89319,2510],{"emptyLinePlaceholder":167},[25,89321,89322,89324,89326],{"class":27,"line":59},[25,89323,1153],{"class":244},[25,89325,51405],{"class":51371},[25,89327,51378],{"class":244},[25,89329,89330,89332,89334,89336,89338,89340],{"class":27,"line":67},[25,89331,52215],{"class":244},[25,89333,51415],{"class":51371},[25,89335,51418],{"class":31},[25,89337,290],{"class":244},[25,89339,51423],{"class":45},[25,89341,51378],{"class":244},[25,89343,89344,89346,89348,89350,89352,89354,89356,89358,89360],{"class":27,"line":75},[25,89345,52215],{"class":244},[25,89347,51415],{"class":51371},[25,89349,15030],{"class":31},[25,89351,290],{"class":244},[25,89353,51462],{"class":45},[25,89355,51442],{"class":31},[25,89357,290],{"class":244},[25,89359,51469],{"class":45},[25,89361,51378],{"class":244},[25,89363,89364,89366,89368,89370,89372],{"class":27,"line":83},[25,89365,52215],{"class":244},[25,89367,51478],{"class":51371},[25,89369,51481],{"class":244},[25,89371,51478],{"class":51371},[25,89373,51378],{"class":244},[25,89375,89376,89378,89380],{"class":27,"line":91},[25,89377,51856],{"class":244},[25,89379,51405],{"class":51371},[25,89381,51378],{"class":244},[25,89383,89384],{"class":27,"line":1429},[25,89385,2510],{"emptyLinePlaceholder":167},[25,89387,89388,89390,89392],{"class":27,"line":1441},[25,89389,1153],{"class":244},[25,89391,51871],{"class":51371},[25,89393,51378],{"class":244},[25,89395,89396,89398,89400],{"class":27,"line":1723},[25,89397,52215],{"class":244},[25,89399,51884],{"class":51371},[25,89401,51378],{"class":244},[25,89403,89404,89406,89408,89410],{"class":27,"line":1728},[25,89405,11331],{"class":240},[25,89407,70042],{"class":35},[25,89409,13674],{"class":240},[25,89411,15682],{"class":244},[25,89413,89414,89416],{"class":27,"line":1734},[25,89415,71697],{"class":244},[25,89417,89418],{"class":35},"18\n",[25,89420,89421],{"class":27,"line":1739},[25,89422,2297],{"class":244},[25,89424,89425],{"class":27,"line":1753},[25,89426,89427],{"class":302},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[25,89429,89430,89432,89434,89436,89438,89440,89442],{"class":27,"line":1758},[25,89431,70155],{"class":240},[25,89433,88921],{"class":31},[25,89435,245],{"class":244},[25,89437,1063],{"class":5326},[25,89439,12545],{"class":244},[25,89441,1088],{"class":5326},[25,89443,12552],{"class":244},[25,89445,89446,89448,89450,89452,89454],{"class":27,"line":1764},[25,89447,58315],{"class":244},[25,89449,58318],{"class":31},[25,89451,245],{"class":244},[25,89453,87064],{"class":35},[25,89455,251],{"class":244},[25,89457,89458,89460,89462,89465,89467],{"class":27,"line":1785},[25,89459,58315],{"class":244},[25,89461,58318],{"class":31},[25,89463,89464],{"class":244},"(x ",[25,89466,724],{"class":240},[25,89468,89469],{"class":244}," y)\n",[25,89471,89472],{"class":27,"line":1790},[25,89473,2297],{"class":244},[25,89475,89476],{"class":27,"line":1804},[25,89477,89478],{"class":302},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[25,89480,89481,89484,89487,89490,89492,89494,89496],{"class":27,"line":1809},[25,89482,89483],{"class":244},"    fn.",[25,89485,89486],{"class":31},"apply",[25,89488,89489],{"class":244},"(obj, [",[25,89491,460],{"class":35},[25,89493,12545],{"class":244},[25,89495,321],{"class":35},[25,89497,4767],{"class":244},[25,89499,89500],{"class":27,"line":1838},[25,89501,89502],{"class":302},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[25,89504,89505],{"class":27,"line":1843},[25,89506,2510],{"emptyLinePlaceholder":167},[25,89508,89509],{"class":27,"line":1860},[25,89510,89511],{"class":302},"    \u002F\u002F 使用场景：求数组最大值\n",[25,89513,89514],{"class":27,"line":1865},[25,89515,89516],{"class":302},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[25,89518,89519,89522],{"class":27,"line":1870},[25,89520,89521],{"class":302},"    \u002F\u002F console.log(max)",[25,89523,89524],{"class":302},"   \u002F\u002F3\n",[25,89526,89527],{"class":27,"line":1875},[25,89528,89529],{"class":302},"    \u002F\u002F 指向空或者Math都是可以的\n",[25,89531,89532,89534,89536,89538,89540,89542,89544,89546,89548,89550],{"class":27,"line":1889},[25,89533,11331],{"class":240},[25,89535,57766],{"class":35},[25,89537,13674],{"class":240},[25,89539,52297],{"class":244},[25,89541,554],{"class":35},[25,89543,12545],{"class":244},[25,89545,747],{"class":35},[25,89547,12545],{"class":244},[25,89549,778],{"class":35},[25,89551,33317],{"class":244},[25,89553,89554],{"class":27,"line":1894},[25,89555,89556],{"class":302},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[25,89558,89559,89561,89563,89565,89568,89570],{"class":27,"line":2687},[25,89560,11331],{"class":240},[25,89562,6061],{"class":35},[25,89564,13674],{"class":240},[25,89566,89567],{"class":244}," Math.max.",[25,89569,89486],{"class":31},[25,89571,89572],{"class":244},"(Math, arr)\n",[25,89574,89575,89577,89580,89582,89585,89587],{"class":27,"line":2701},[25,89576,11331],{"class":240},[25,89578,89579],{"class":35}," min",[25,89581,13674],{"class":240},[25,89583,89584],{"class":244}," Math.min.",[25,89586,89486],{"class":31},[25,89588,89572],{"class":244},[25,89590,89591,89593,89595,89598],{"class":27,"line":2709},[25,89592,73824],{"class":244},[25,89594,58318],{"class":31},[25,89596,89597],{"class":244},"(max, min)     ",[25,89599,89600],{"class":302},"\u002F\u002F100,4\n",[25,89602,89603],{"class":27,"line":2714},[25,89604,2510],{"emptyLinePlaceholder":167},[25,89606,89607],{"class":27,"line":2720},[25,89608,89609],{"class":302},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[25,89611,89612,89614,89616,89619,89621,89623,89626],{"class":27,"line":2726},[25,89613,73824],{"class":244},[25,89615,58318],{"class":31},[25,89617,89618],{"class":244},"(Max.",[25,89620,6125],{"class":31},[25,89622,245],{"class":244},[25,89624,89625],{"class":240},"...",[25,89627,89628],{"class":244},"arr))\n",[25,89630,89631,89633,89635],{"class":27,"line":2731},[25,89632,52488],{"class":244},[25,89634,51884],{"class":51371},[25,89636,51378],{"class":244},[25,89638,89639,89641,89643],{"class":27,"line":8058},[25,89640,51856],{"class":244},[25,89642,51871],{"class":51371},[25,89644,51378],{"class":244},[25,89646,89647],{"class":27,"line":8082},[25,89648,2510],{"emptyLinePlaceholder":167},[25,89650,89651,89653,89655],{"class":27,"line":8087},[25,89652,51856],{"class":244},[25,89654,50706],{"class":51371},[25,89656,51378],{"class":244},[99,89658,89659],{},[155,89660],{"alt":20,"src":89661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[194,89663,89664],{"start":51},[106,89665,89666],{},"bind()",[99,89668,89669],{},[155,89670],{"alt":20,"src":89671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[99,89673,89674],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[99,89676,89677],{},"bind的语法跟call很相似",[15,89679,89681],{"className":53138,"code":89680,"language":53140,"meta":20,"style":20},"\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",[22,89682,89683,89691,89699,89703,89708,89712,89716,89721,89725,89730,89735,89740,89745,89750,89755,89760,89764,89772],{"__ignoreMap":20},[25,89684,89685,89687,89689],{"class":27,"line":28},[25,89686,1153],{"class":244},[25,89688,51871],{"class":51371},[25,89690,51378],{"class":244},[25,89692,89693,89695,89697],{"class":27,"line":39},[25,89694,52215],{"class":244},[25,89696,51884],{"class":51371},[25,89698,51378],{"class":244},[25,89700,89701],{"class":27,"line":51},[25,89702,71594],{"class":244},[25,89704,89705],{"class":27,"line":59},[25,89706,89707],{"class":244},"      age: 18\n",[25,89709,89710],{"class":27,"line":67},[25,89711,2297],{"class":244},[25,89713,89714],{"class":27,"line":75},[25,89715,77214],{"class":244},[25,89717,89718],{"class":27,"line":83},[25,89719,89720],{"class":244},"      console.log(this)\n",[25,89722,89723],{"class":27,"line":91},[25,89724,2297],{"class":244},[25,89726,89727],{"class":27,"line":1429},[25,89728,89729],{"class":244},"    \u002F\u002F 1.bind 不会调用函数\n",[25,89731,89732],{"class":27,"line":1441},[25,89733,89734],{"class":244},"    \u002F\u002F 2.bind能改变this的指向\n",[25,89736,89737],{"class":27,"line":1723},[25,89738,89739],{"class":244},"    fn.bind()\n",[25,89741,89742],{"class":27,"line":1728},[25,89743,89744],{"class":244},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[25,89746,89747],{"class":27,"line":1734},[25,89748,89749],{"class":244},"    const fun = fn.bind(obj)\n",[25,89751,89752],{"class":27,"line":1739},[25,89753,89754],{"class":244},"    \u002F\u002F console.log(fun)\n",[25,89756,89757],{"class":27,"line":1753},[25,89758,89759],{"class":244},"    \u002F\u002F 调用,查看this的指向\n",[25,89761,89762],{"class":27,"line":1758},[25,89763,52722],{"class":244},[25,89765,89766,89768,89770],{"class":27,"line":1764},[25,89767,52488],{"class":244},[25,89769,51884],{"class":51371},[25,89771,51378],{"class":244},[25,89773,89774,89776,89778],{"class":27,"line":1785},[25,89775,51856],{"class":244},[25,89777,51871],{"class":51371},[25,89779,51378],{"class":244},[99,89781,89782],{},[155,89783],{"alt":20,"src":89784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[194,89786,89787],{"start":59},[106,89788,89789],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[15,89791,89793],{"className":53138,"code":89792,"language":53140,"meta":20,"style":20},"\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",[22,89794,89795,89803,89816,89824,89829,89833,89838,89843,89848,89853,89858,89863,89868,89873,89877,89885],{"__ignoreMap":20},[25,89796,89797,89799,89801],{"class":27,"line":28},[25,89798,1153],{"class":244},[25,89800,51871],{"class":51371},[25,89802,51378],{"class":244},[25,89804,89805,89807,89809,89812,89814],{"class":27,"line":39},[25,89806,52215],{"class":244},[25,89808,53958],{"class":51371},[25,89810,89811],{"class":244},">禁用\u003C\u002F",[25,89813,53958],{"class":51371},[25,89815,51378],{"class":244},[25,89817,89818,89820,89822],{"class":27,"line":51},[25,89819,52215],{"class":244},[25,89821,51884],{"class":51371},[25,89823,51378],{"class":244},[25,89825,89826],{"class":27,"line":59},[25,89827,89828],{"class":244},"    const btn = document.querySelector('button')\n",[25,89830,89831],{"class":27,"line":67},[25,89832,59087],{"class":244},[25,89834,89835],{"class":27,"line":75},[25,89836,89837],{"class":244},"      this.disabled = true\n",[25,89839,89840],{"class":27,"line":83},[25,89841,89842],{"class":244},"      \u002F\u002F 定时器是window进行调用的\n",[25,89844,89845],{"class":27,"line":91},[25,89846,89847],{"class":244},"      setTimeout(function () {\n",[25,89849,89850],{"class":27,"line":1429},[25,89851,89852],{"class":244},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[25,89854,89855],{"class":27,"line":1441},[25,89856,89857],{"class":244},"        this.disabled = false\n",[25,89859,89860],{"class":27,"line":1723},[25,89861,89862],{"class":244},"      }.bind(this), 2000)\n",[25,89864,89865],{"class":27,"line":1728},[25,89866,89867],{"class":244},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[25,89869,89870],{"class":27,"line":1734},[25,89871,89872],{"class":244},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[25,89874,89875],{"class":27,"line":1739},[25,89876,33532],{"class":244},[25,89878,89879,89881,89883],{"class":27,"line":1753},[25,89880,52488],{"class":244},[25,89882,51884],{"class":51371},[25,89884,51378],{"class":244},[25,89886,89887,89889,89891],{"class":27,"line":1758},[25,89888,51856],{"class":244},[25,89890,51871],{"class":51371},[25,89892,51378],{"class":244},[194,89894,89895],{"start":67},[106,89896,22063],{},[99,89898,89899],{},[155,89900],{"alt":20,"src":89901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[182,89903,89905],{"id":89904},"_417-性能优化","4.17 性能优化",[210,89907,89909],{"id":89908},"_4171-防抖","4.17.1 防抖",[99,89911,89912],{},[155,89913],{"alt":20,"src":89914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[99,89916,89917],{},[392,89918,89919],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[99,89921,89922],{},"防抖实现方式：",[103,89924,89925],{},[106,89926,89927],{},"lodash 提供了防抖处理",[99,89929,89930],{},"_.debounce(func,[wait=0],[options={}])",[99,89932,89933],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[15,89935,89937],{"className":50704,"code":89936,"language":50706,"meta":20,"style":20},"\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",[22,89938,89939,89949,89963,89967,89975,89989,90009,90021,90029,90035,90045,90057,90069,90080,90092,90102,90112,90125,90129,90137,90145,90149,90157,90175,90193,90201,90220,90230,90239,90250,90255,90259,90264,90269,90274,90299,90307,90315,90319],{"__ignoreMap":20},[25,89940,89941,89943,89945,89947],{"class":27,"line":28},[25,89942,51368],{"class":244},[25,89944,51372],{"class":51371},[25,89946,51375],{"class":31},[25,89948,51378],{"class":244},[25,89950,89951,89953,89955,89957,89959,89961],{"class":27,"line":39},[25,89952,1153],{"class":244},[25,89954,50706],{"class":51371},[25,89956,51387],{"class":31},[25,89958,290],{"class":244},[25,89960,51392],{"class":45},[25,89962,51378],{"class":244},[25,89964,89965],{"class":27,"line":51},[25,89966,2510],{"emptyLinePlaceholder":167},[25,89968,89969,89971,89973],{"class":27,"line":59},[25,89970,1153],{"class":244},[25,89972,51405],{"class":51371},[25,89974,51378],{"class":244},[25,89976,89977,89979,89981,89983,89985,89987],{"class":27,"line":67},[25,89978,52215],{"class":244},[25,89980,51415],{"class":51371},[25,89982,51418],{"class":31},[25,89984,290],{"class":244},[25,89986,51423],{"class":45},[25,89988,51378],{"class":244},[25,89990,89991,89993,89995,89997,89999,90001,90003,90005,90007],{"class":27,"line":75},[25,89992,52215],{"class":244},[25,89994,51415],{"class":51371},[25,89996,15030],{"class":31},[25,89998,290],{"class":244},[25,90000,51462],{"class":45},[25,90002,51442],{"class":31},[25,90004,290],{"class":244},[25,90006,51469],{"class":45},[25,90008,51378],{"class":244},[25,90010,90011,90013,90015,90017,90019],{"class":27,"line":83},[25,90012,52215],{"class":244},[25,90014,51478],{"class":51371},[25,90016,51481],{"class":244},[25,90018,51478],{"class":51371},[25,90020,51378],{"class":244},[25,90022,90023,90025,90027],{"class":27,"line":91},[25,90024,52215],{"class":244},[25,90026,159],{"class":51371},[25,90028,51378],{"class":244},[25,90030,90031,90033],{"class":27,"line":1429},[25,90032,54823],{"class":31},[25,90034,15682],{"class":244},[25,90036,90037,90039,90041,90043],{"class":27,"line":1441},[25,90038,72667],{"class":35},[25,90040,51508],{"class":244},[25,90042,60576],{"class":35},[25,90044,1403],{"class":244},[25,90046,90047,90049,90051,90053,90055],{"class":27,"line":1723},[25,90048,54842],{"class":35},[25,90050,51508],{"class":244},[25,90052,1833],{"class":35},[25,90054,51563],{"class":240},[25,90056,1403],{"class":244},[25,90058,90059,90061,90063,90065,90067],{"class":27,"line":1728},[25,90060,54856],{"class":35},[25,90062,51508],{"class":244},[25,90064,1833],{"class":35},[25,90066,51563],{"class":240},[25,90068,1403],{"class":244},[25,90070,90071,90073,90075,90078],{"class":27,"line":1734},[25,90072,54955],{"class":35},[25,90074,51508],{"class":244},[25,90076,90077],{"class":35},"gray",[25,90079,1403],{"class":244},[25,90081,90082,90084,90086,90088,90090],{"class":27,"line":1739},[25,90083,54993],{"class":35},[25,90085,51508],{"class":244},[25,90087,1068],{"class":35},[25,90089,51563],{"class":240},[25,90091,1403],{"class":244},[25,90093,90094,90096,90098,90100],{"class":27,"line":1753},[25,90095,57487],{"class":35},[25,90097,51508],{"class":244},[25,90099,60913],{"class":35},[25,90101,1403],{"class":244},[25,90103,90104,90106,90108,90110],{"class":27,"line":1758},[25,90105,57357],{"class":35},[25,90107,51508],{"class":244},[25,90109,51663],{"class":35},[25,90111,1403],{"class":244},[25,90113,90114,90117,90119,90121,90123],{"class":27,"line":1764},[25,90115,90116],{"class":35},"      padding-top",[25,90118,51508],{"class":244},[25,90120,562],{"class":35},[25,90122,51563],{"class":240},[25,90124,1403],{"class":244},[25,90126,90127],{"class":27,"line":1785},[25,90128,2297],{"class":244},[25,90130,90131,90133,90135],{"class":27,"line":1790},[25,90132,52488],{"class":244},[25,90134,159],{"class":51371},[25,90136,51378],{"class":244},[25,90138,90139,90141,90143],{"class":27,"line":1804},[25,90140,51856],{"class":244},[25,90142,51405],{"class":51371},[25,90144,51378],{"class":244},[25,90146,90147],{"class":27,"line":1809},[25,90148,2510],{"emptyLinePlaceholder":167},[25,90150,90151,90153,90155],{"class":27,"line":1838},[25,90152,1153],{"class":244},[25,90154,51871],{"class":51371},[25,90156,51378],{"class":244},[25,90158,90159,90161,90163,90165,90167,90169,90171,90173],{"class":27,"line":1843},[25,90160,52215],{"class":244},[25,90162,51682],{"class":51371},[25,90164,53557],{"class":31},[25,90166,290],{"class":244},[25,90168,53562],{"class":45},[25,90170,55385],{"class":244},[25,90172,51682],{"class":51371},[25,90174,51378],{"class":244},[25,90176,90177,90179,90181,90183,90185,90187,90189,90191],{"class":27,"line":1860},[25,90178,52215],{"class":244},[25,90180,51884],{"class":51371},[25,90182,55310],{"class":31},[25,90184,290],{"class":244},[25,90186,88345],{"class":45},[25,90188,55385],{"class":244},[25,90190,51884],{"class":51371},[25,90192,51378],{"class":244},[25,90194,90195,90197,90199],{"class":27,"line":1865},[25,90196,52215],{"class":244},[25,90198,51884],{"class":51371},[25,90200,51378],{"class":244},[25,90202,90203,90205,90207,90209,90211,90213,90215,90218],{"class":27,"line":1870},[25,90204,11331],{"class":240},[25,90206,87004],{"class":35},[25,90208,13674],{"class":240},[25,90210,54467],{"class":244},[25,90212,54470],{"class":31},[25,90214,245],{"class":244},[25,90216,90217],{"class":45},"'.box'",[25,90219,251],{"class":244},[25,90221,90222,90224,90226,90228],{"class":27,"line":1875},[25,90223,52290],{"class":240},[25,90225,9548],{"class":244},[25,90227,290],{"class":240},[25,90229,47404],{"class":35},[25,90231,90232,90234,90237],{"class":27,"line":1889},[25,90233,70155],{"class":240},[25,90235,90236],{"class":31}," mouseMove",[25,90238,10963],{"class":244},[25,90240,90241,90244,90246,90248],{"class":27,"line":1894},[25,90242,90243],{"class":244},"      box.innerHTML ",[25,90245,290],{"class":240},[25,90247,3142],{"class":244},[25,90249,2812],{"class":240},[25,90251,90252],{"class":27,"line":2687},[25,90253,90254],{"class":302},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[25,90256,90257],{"class":27,"line":2701},[25,90258,2297],{"class":244},[25,90260,90261],{"class":27,"line":2709},[25,90262,90263],{"class":302},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[25,90265,90266],{"class":27,"line":2714},[25,90267,90268],{"class":302},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[25,90270,90271],{"class":27,"line":2720},[25,90272,90273],{"class":302},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[25,90275,90276,90279,90281,90283,90286,90289,90292,90295,90297],{"class":27,"line":2726},[25,90277,90278],{"class":244},"    box.",[25,90280,57884],{"class":31},[25,90282,245],{"class":244},[25,90284,90285],{"class":45},"'mousemove'",[25,90287,90288],{"class":244},", _.",[25,90290,90291],{"class":31},"debounce",[25,90293,90294],{"class":244},"(mouseMove, ",[25,90296,65145],{"class":35},[25,90298,30568],{"class":244},[25,90300,90301,90303,90305],{"class":27,"line":2731},[25,90302,52488],{"class":244},[25,90304,51884],{"class":51371},[25,90306,51378],{"class":244},[25,90308,90309,90311,90313],{"class":27,"line":8058},[25,90310,51856],{"class":244},[25,90312,51871],{"class":51371},[25,90314,51378],{"class":244},[25,90316,90317],{"class":27,"line":8082},[25,90318,2510],{"emptyLinePlaceholder":167},[25,90320,90321,90323,90325],{"class":27,"line":8087},[25,90322,51856],{"class":244},[25,90324,50706],{"class":51371},[25,90326,51378],{"class":244},[103,90328,90329],{},[106,90330,90331],{},"手写一个防抖函数来处理",[99,90333,90334],{},"防抖的核心就是利用定时器来实现的：",[99,90336,90337],{},"①声明一个定时器变量",[99,90339,90340],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[99,90342,90343],{},"③如果没有定时器则开启定时器，记得存到变量里面",[15,90345,90347],{"className":50704,"code":90346,"language":50706,"meta":20,"style":20},"\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",[22,90348,90349,90359,90373,90377,90385,90399,90419,90431,90439,90445,90455,90467,90479,90489,90501,90511,90521,90533,90537,90545,90553,90557,90565,90583,90601,90609,90627,90637,90645,90655,90659,90663,90667,90672,90677,90682,90687,90692,90697,90715,90722,90727,90735,90740,90753,90769,90779,90784,90788,90792,90812,90816,90821,90826,90831,90836,90844,90852,90856],{"__ignoreMap":20},[25,90350,90351,90353,90355,90357],{"class":27,"line":28},[25,90352,51368],{"class":244},[25,90354,51372],{"class":51371},[25,90356,51375],{"class":31},[25,90358,51378],{"class":244},[25,90360,90361,90363,90365,90367,90369,90371],{"class":27,"line":39},[25,90362,1153],{"class":244},[25,90364,50706],{"class":51371},[25,90366,51387],{"class":31},[25,90368,290],{"class":244},[25,90370,51392],{"class":45},[25,90372,51378],{"class":244},[25,90374,90375],{"class":27,"line":51},[25,90376,2510],{"emptyLinePlaceholder":167},[25,90378,90379,90381,90383],{"class":27,"line":59},[25,90380,1153],{"class":244},[25,90382,51405],{"class":51371},[25,90384,51378],{"class":244},[25,90386,90387,90389,90391,90393,90395,90397],{"class":27,"line":67},[25,90388,52215],{"class":244},[25,90390,51415],{"class":51371},[25,90392,51418],{"class":31},[25,90394,290],{"class":244},[25,90396,51423],{"class":45},[25,90398,51378],{"class":244},[25,90400,90401,90403,90405,90407,90409,90411,90413,90415,90417],{"class":27,"line":75},[25,90402,52215],{"class":244},[25,90404,51415],{"class":51371},[25,90406,15030],{"class":31},[25,90408,290],{"class":244},[25,90410,51462],{"class":45},[25,90412,51442],{"class":31},[25,90414,290],{"class":244},[25,90416,51469],{"class":45},[25,90418,51378],{"class":244},[25,90420,90421,90423,90425,90427,90429],{"class":27,"line":83},[25,90422,52215],{"class":244},[25,90424,51478],{"class":51371},[25,90426,51481],{"class":244},[25,90428,51478],{"class":51371},[25,90430,51378],{"class":244},[25,90432,90433,90435,90437],{"class":27,"line":91},[25,90434,52215],{"class":244},[25,90436,159],{"class":51371},[25,90438,51378],{"class":244},[25,90440,90441,90443],{"class":27,"line":1429},[25,90442,54823],{"class":31},[25,90444,15682],{"class":244},[25,90446,90447,90449,90451,90453],{"class":27,"line":1441},[25,90448,72667],{"class":35},[25,90450,51508],{"class":244},[25,90452,60576],{"class":35},[25,90454,1403],{"class":244},[25,90456,90457,90459,90461,90463,90465],{"class":27,"line":1723},[25,90458,54842],{"class":35},[25,90460,51508],{"class":244},[25,90462,1833],{"class":35},[25,90464,51563],{"class":240},[25,90466,1403],{"class":244},[25,90468,90469,90471,90473,90475,90477],{"class":27,"line":1728},[25,90470,54856],{"class":35},[25,90472,51508],{"class":244},[25,90474,1833],{"class":35},[25,90476,51563],{"class":240},[25,90478,1403],{"class":244},[25,90480,90481,90483,90485,90487],{"class":27,"line":1734},[25,90482,54955],{"class":35},[25,90484,51508],{"class":244},[25,90486,90077],{"class":35},[25,90488,1403],{"class":244},[25,90490,90491,90493,90495,90497,90499],{"class":27,"line":1739},[25,90492,54993],{"class":35},[25,90494,51508],{"class":244},[25,90496,1068],{"class":35},[25,90498,51563],{"class":240},[25,90500,1403],{"class":244},[25,90502,90503,90505,90507,90509],{"class":27,"line":1753},[25,90504,57487],{"class":35},[25,90506,51508],{"class":244},[25,90508,60913],{"class":35},[25,90510,1403],{"class":244},[25,90512,90513,90515,90517,90519],{"class":27,"line":1758},[25,90514,57357],{"class":35},[25,90516,51508],{"class":244},[25,90518,51663],{"class":35},[25,90520,1403],{"class":244},[25,90522,90523,90525,90527,90529,90531],{"class":27,"line":1764},[25,90524,90116],{"class":35},[25,90526,51508],{"class":244},[25,90528,562],{"class":35},[25,90530,51563],{"class":240},[25,90532,1403],{"class":244},[25,90534,90535],{"class":27,"line":1785},[25,90536,2297],{"class":244},[25,90538,90539,90541,90543],{"class":27,"line":1790},[25,90540,52488],{"class":244},[25,90542,159],{"class":51371},[25,90544,51378],{"class":244},[25,90546,90547,90549,90551],{"class":27,"line":1804},[25,90548,51856],{"class":244},[25,90550,51405],{"class":51371},[25,90552,51378],{"class":244},[25,90554,90555],{"class":27,"line":1809},[25,90556,2510],{"emptyLinePlaceholder":167},[25,90558,90559,90561,90563],{"class":27,"line":1838},[25,90560,1153],{"class":244},[25,90562,51871],{"class":51371},[25,90564,51378],{"class":244},[25,90566,90567,90569,90571,90573,90575,90577,90579,90581],{"class":27,"line":1843},[25,90568,52215],{"class":244},[25,90570,51682],{"class":51371},[25,90572,53557],{"class":31},[25,90574,290],{"class":244},[25,90576,53562],{"class":45},[25,90578,55385],{"class":244},[25,90580,51682],{"class":51371},[25,90582,51378],{"class":244},[25,90584,90585,90587,90589,90591,90593,90595,90597,90599],{"class":27,"line":1860},[25,90586,52215],{"class":244},[25,90588,51884],{"class":51371},[25,90590,55310],{"class":31},[25,90592,290],{"class":244},[25,90594,88345],{"class":45},[25,90596,55385],{"class":244},[25,90598,51884],{"class":51371},[25,90600,51378],{"class":244},[25,90602,90603,90605,90607],{"class":27,"line":1865},[25,90604,52215],{"class":244},[25,90606,51884],{"class":51371},[25,90608,51378],{"class":244},[25,90610,90611,90613,90615,90617,90619,90621,90623,90625],{"class":27,"line":1870},[25,90612,11331],{"class":240},[25,90614,87004],{"class":35},[25,90616,13674],{"class":240},[25,90618,54467],{"class":244},[25,90620,54470],{"class":31},[25,90622,245],{"class":244},[25,90624,90217],{"class":45},[25,90626,251],{"class":244},[25,90628,90629,90631,90633,90635],{"class":27,"line":1875},[25,90630,52290],{"class":240},[25,90632,9548],{"class":244},[25,90634,290],{"class":240},[25,90636,47404],{"class":35},[25,90638,90639,90641,90643],{"class":27,"line":1889},[25,90640,70155],{"class":240},[25,90642,90236],{"class":31},[25,90644,10963],{"class":244},[25,90646,90647,90649,90651,90653],{"class":27,"line":1894},[25,90648,90243],{"class":244},[25,90650,290],{"class":240},[25,90652,3142],{"class":244},[25,90654,2812],{"class":240},[25,90656,90657],{"class":27,"line":2687},[25,90658,90254],{"class":302},[25,90660,90661],{"class":27,"line":2701},[25,90662,2297],{"class":244},[25,90664,90665],{"class":27,"line":2709},[25,90666,90263],{"class":302},[25,90668,90669],{"class":27,"line":2714},[25,90670,90671],{"class":302},"    \u002F\u002F 手写防抖函数\n",[25,90673,90674],{"class":27,"line":2720},[25,90675,90676],{"class":302},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[25,90678,90679],{"class":27,"line":2726},[25,90680,90681],{"class":302},"    \u002F\u002F 1.声明定时器变量\n",[25,90683,90684],{"class":27,"line":2731},[25,90685,90686],{"class":302},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[25,90688,90689],{"class":27,"line":8058},[25,90690,90691],{"class":302},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[25,90693,90694],{"class":27,"line":8082},[25,90695,90696],{"class":302},"    \u002F\u002F 4.定时器里面写函数调用\n",[25,90698,90699,90701,90704,90706,90709,90711,90713],{"class":27,"line":8087},[25,90700,70155],{"class":240},[25,90702,90703],{"class":31}," debounce",[25,90705,245],{"class":244},[25,90707,90708],{"class":5326},"fn",[25,90710,12545],{"class":244},[25,90712,963],{"class":5326},[25,90714,12552],{"class":244},[25,90716,90717,90719],{"class":27,"line":8093},[25,90718,79843],{"class":240},[25,90720,90721],{"class":244}," timer\n",[25,90723,90724],{"class":27,"line":8120},[25,90725,90726],{"class":302},"      \u002F\u002F return 返回一个匿名函数\n",[25,90728,90729,90731,90733],{"class":27,"line":8125},[25,90730,74053],{"class":240},[25,90732,58989],{"class":240},[25,90734,54523],{"class":244},[25,90736,90737],{"class":27,"line":8131},[25,90738,90739],{"class":302},"        \u002F\u002F 这里边写第二三四步\n",[25,90741,90742,90744,90747,90750],{"class":27,"line":8143},[25,90743,2607],{"class":240},[25,90745,90746],{"class":244}," (timer) ",[25,90748,90749],{"class":31},"clearTimeout",[25,90751,90752],{"class":244},"(timer)\n",[25,90754,90755,90758,90760,90763,90765,90767],{"class":27,"line":8155},[25,90756,90757],{"class":244},"        timer ",[25,90759,290],{"class":240},[25,90761,90762],{"class":31}," setTimeout",[25,90764,245],{"class":244},[25,90766,54520],{"class":240},[25,90768,54523],{"class":244},[25,90770,90771,90774,90776],{"class":27,"line":8167},[25,90772,90773],{"class":31},"          fn",[25,90775,13160],{"class":244},[25,90777,90778],{"class":302},"\u002F\u002F加小括号调用fn }, t)\n",[25,90780,90781],{"class":27,"line":9826},[25,90782,90783],{"class":244},"        }, t)\n",[25,90785,90786],{"class":27,"line":9851},[25,90787,52469],{"class":244},[25,90789,90790],{"class":27,"line":9874},[25,90791,2297],{"class":244},[25,90793,90794,90796,90798,90800,90802,90804,90806,90808,90810],{"class":27,"line":9898},[25,90795,90278],{"class":244},[25,90797,57884],{"class":31},[25,90799,245],{"class":244},[25,90801,90285],{"class":45},[25,90803,12545],{"class":244},[25,90805,90291],{"class":31},[25,90807,90294],{"class":244},[25,90809,65145],{"class":35},[25,90811,30568],{"class":244},[25,90813,90814],{"class":27,"line":9903},[25,90815,2510],{"emptyLinePlaceholder":167},[25,90817,90818],{"class":27,"line":9908},[25,90819,90820],{"class":302},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[25,90822,90823],{"class":27,"line":9913},[25,90824,90825],{"class":302},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[25,90827,90828],{"class":27,"line":9922},[25,90829,90830],{"class":302},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[25,90832,90833],{"class":27,"line":9927},[25,90834,90835],{"class":302},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[25,90837,90838,90840,90842],{"class":27,"line":9933},[25,90839,52488],{"class":244},[25,90841,51884],{"class":51371},[25,90843,51378],{"class":244},[25,90845,90846,90848,90850],{"class":27,"line":9954},[25,90847,51856],{"class":244},[25,90849,51871],{"class":51371},[25,90851,51378],{"class":244},[25,90853,90854],{"class":27,"line":9960},[25,90855,2510],{"emptyLinePlaceholder":167},[25,90857,90858,90860,90862],{"class":27,"line":9974},[25,90859,51856],{"class":244},[25,90861,50706],{"class":51371},[25,90863,51378],{"class":244},[210,90865,90867],{"id":90866},"_4172-节流","4.17.2 节流",[99,90869,90870],{},[155,90871],{"alt":20,"src":90872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[99,90874,90875],{},[155,90876],{"alt":20,"src":90877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[99,90879,90880],{},[392,90881,90882],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[99,90884,90885],{},"实现方式：",[103,90887,90888],{},[106,90889,90890],{},"lodash 提供的节流函数来处理",[99,90892,90893],{},"_.throttle(func,[wait=0],[options=])",[99,90895,90896],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[15,90898,90900],{"className":50704,"code":90899,"language":50706,"meta":20,"style":20},"\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",[22,90901,90902,90912,90926,90930,90938,90952,90972,90984,90992,90998,91008,91020,91032,91042,91054,91064,91074,91086,91090,91098,91106,91110,91118,91136,91154,91162,91180,91190,91198,91208,91212,91216,91220,91225,91230,91251,91259,91267,91271],{"__ignoreMap":20},[25,90903,90904,90906,90908,90910],{"class":27,"line":28},[25,90905,51368],{"class":244},[25,90907,51372],{"class":51371},[25,90909,51375],{"class":31},[25,90911,51378],{"class":244},[25,90913,90914,90916,90918,90920,90922,90924],{"class":27,"line":39},[25,90915,1153],{"class":244},[25,90917,50706],{"class":51371},[25,90919,51387],{"class":31},[25,90921,290],{"class":244},[25,90923,51392],{"class":45},[25,90925,51378],{"class":244},[25,90927,90928],{"class":27,"line":51},[25,90929,2510],{"emptyLinePlaceholder":167},[25,90931,90932,90934,90936],{"class":27,"line":59},[25,90933,1153],{"class":244},[25,90935,51405],{"class":51371},[25,90937,51378],{"class":244},[25,90939,90940,90942,90944,90946,90948,90950],{"class":27,"line":67},[25,90941,52215],{"class":244},[25,90943,51415],{"class":51371},[25,90945,51418],{"class":31},[25,90947,290],{"class":244},[25,90949,51423],{"class":45},[25,90951,51378],{"class":244},[25,90953,90954,90956,90958,90960,90962,90964,90966,90968,90970],{"class":27,"line":75},[25,90955,52215],{"class":244},[25,90957,51415],{"class":51371},[25,90959,15030],{"class":31},[25,90961,290],{"class":244},[25,90963,51462],{"class":45},[25,90965,51442],{"class":31},[25,90967,290],{"class":244},[25,90969,51469],{"class":45},[25,90971,51378],{"class":244},[25,90973,90974,90976,90978,90980,90982],{"class":27,"line":83},[25,90975,52215],{"class":244},[25,90977,51478],{"class":51371},[25,90979,51481],{"class":244},[25,90981,51478],{"class":51371},[25,90983,51378],{"class":244},[25,90985,90986,90988,90990],{"class":27,"line":91},[25,90987,52215],{"class":244},[25,90989,159],{"class":51371},[25,90991,51378],{"class":244},[25,90993,90994,90996],{"class":27,"line":1429},[25,90995,54823],{"class":31},[25,90997,15682],{"class":244},[25,90999,91000,91002,91004,91006],{"class":27,"line":1441},[25,91001,72667],{"class":35},[25,91003,51508],{"class":244},[25,91005,60576],{"class":35},[25,91007,1403],{"class":244},[25,91009,91010,91012,91014,91016,91018],{"class":27,"line":1723},[25,91011,54842],{"class":35},[25,91013,51508],{"class":244},[25,91015,1833],{"class":35},[25,91017,51563],{"class":240},[25,91019,1403],{"class":244},[25,91021,91022,91024,91026,91028,91030],{"class":27,"line":1728},[25,91023,54856],{"class":35},[25,91025,51508],{"class":244},[25,91027,1833],{"class":35},[25,91029,51563],{"class":240},[25,91031,1403],{"class":244},[25,91033,91034,91036,91038,91040],{"class":27,"line":1734},[25,91035,54955],{"class":35},[25,91037,51508],{"class":244},[25,91039,90077],{"class":35},[25,91041,1403],{"class":244},[25,91043,91044,91046,91048,91050,91052],{"class":27,"line":1739},[25,91045,54993],{"class":35},[25,91047,51508],{"class":244},[25,91049,1068],{"class":35},[25,91051,51563],{"class":240},[25,91053,1403],{"class":244},[25,91055,91056,91058,91060,91062],{"class":27,"line":1753},[25,91057,57487],{"class":35},[25,91059,51508],{"class":244},[25,91061,60913],{"class":35},[25,91063,1403],{"class":244},[25,91065,91066,91068,91070,91072],{"class":27,"line":1758},[25,91067,57357],{"class":35},[25,91069,51508],{"class":244},[25,91071,51663],{"class":35},[25,91073,1403],{"class":244},[25,91075,91076,91078,91080,91082,91084],{"class":27,"line":1764},[25,91077,90116],{"class":35},[25,91079,51508],{"class":244},[25,91081,562],{"class":35},[25,91083,51563],{"class":240},[25,91085,1403],{"class":244},[25,91087,91088],{"class":27,"line":1785},[25,91089,2297],{"class":244},[25,91091,91092,91094,91096],{"class":27,"line":1790},[25,91093,52488],{"class":244},[25,91095,159],{"class":51371},[25,91097,51378],{"class":244},[25,91099,91100,91102,91104],{"class":27,"line":1804},[25,91101,51856],{"class":244},[25,91103,51405],{"class":51371},[25,91105,51378],{"class":244},[25,91107,91108],{"class":27,"line":1809},[25,91109,2510],{"emptyLinePlaceholder":167},[25,91111,91112,91114,91116],{"class":27,"line":1838},[25,91113,1153],{"class":244},[25,91115,51871],{"class":51371},[25,91117,51378],{"class":244},[25,91119,91120,91122,91124,91126,91128,91130,91132,91134],{"class":27,"line":1843},[25,91121,52215],{"class":244},[25,91123,51682],{"class":51371},[25,91125,53557],{"class":31},[25,91127,290],{"class":244},[25,91129,53562],{"class":45},[25,91131,55385],{"class":244},[25,91133,51682],{"class":51371},[25,91135,51378],{"class":244},[25,91137,91138,91140,91142,91144,91146,91148,91150,91152],{"class":27,"line":1860},[25,91139,52215],{"class":244},[25,91141,51884],{"class":51371},[25,91143,55310],{"class":31},[25,91145,290],{"class":244},[25,91147,88345],{"class":45},[25,91149,55385],{"class":244},[25,91151,51884],{"class":51371},[25,91153,51378],{"class":244},[25,91155,91156,91158,91160],{"class":27,"line":1865},[25,91157,52215],{"class":244},[25,91159,51884],{"class":51371},[25,91161,51378],{"class":244},[25,91163,91164,91166,91168,91170,91172,91174,91176,91178],{"class":27,"line":1870},[25,91165,11331],{"class":240},[25,91167,87004],{"class":35},[25,91169,13674],{"class":240},[25,91171,54467],{"class":244},[25,91173,54470],{"class":31},[25,91175,245],{"class":244},[25,91177,90217],{"class":45},[25,91179,251],{"class":244},[25,91181,91182,91184,91186,91188],{"class":27,"line":1875},[25,91183,52290],{"class":240},[25,91185,9548],{"class":244},[25,91187,290],{"class":240},[25,91189,47404],{"class":35},[25,91191,91192,91194,91196],{"class":27,"line":1889},[25,91193,70155],{"class":240},[25,91195,90236],{"class":31},[25,91197,10963],{"class":244},[25,91199,91200,91202,91204,91206],{"class":27,"line":1894},[25,91201,90243],{"class":244},[25,91203,290],{"class":240},[25,91205,3142],{"class":244},[25,91207,2812],{"class":240},[25,91209,91210],{"class":27,"line":2687},[25,91211,90254],{"class":302},[25,91213,91214],{"class":27,"line":2701},[25,91215,2297],{"class":244},[25,91217,91218],{"class":27,"line":2709},[25,91219,90263],{"class":302},[25,91221,91222],{"class":27,"line":2714},[25,91223,91224],{"class":302},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[25,91226,91227],{"class":27,"line":2720},[25,91228,91229],{"class":302},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[25,91231,91232,91234,91236,91238,91240,91242,91245,91247,91249],{"class":27,"line":2726},[25,91233,90278],{"class":244},[25,91235,57884],{"class":31},[25,91237,245],{"class":244},[25,91239,90285],{"class":45},[25,91241,90288],{"class":244},[25,91243,91244],{"class":31},"throttle",[25,91246,90294],{"class":244},[25,91248,65145],{"class":35},[25,91250,30568],{"class":244},[25,91252,91253,91255,91257],{"class":27,"line":2731},[25,91254,52488],{"class":244},[25,91256,51884],{"class":51371},[25,91258,51378],{"class":244},[25,91260,91261,91263,91265],{"class":27,"line":8058},[25,91262,51856],{"class":244},[25,91264,51871],{"class":51371},[25,91266,51378],{"class":244},[25,91268,91269],{"class":27,"line":8082},[25,91270,2510],{"emptyLinePlaceholder":167},[25,91272,91273,91275,91277],{"class":27,"line":8087},[25,91274,51856],{"class":244},[25,91276,50706],{"class":51371},[25,91278,51378],{"class":244},[103,91280,91281],{},[106,91282,91283],{},"手写一个节流函数来处理",[99,91285,71023],{},[99,91287,90337],{},[99,91289,91290],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[99,91292,91293],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[15,91295,91297],{"className":50704,"code":91296,"language":50706,"meta":20,"style":20},"\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",[22,91298,91299,91309,91323,91327,91335,91349,91369,91381,91389,91395,91405,91417,91429,91439,91451,91461,91471,91483,91487,91495,91503,91507,91515,91533,91551,91559,91577,91587,91595,91605,91609,91613,91617,91622,91627,91632,91637,91642,91647,91664,91670,91678,91689,91704,91711,91716,91721,91731,91736,91741,91746,91750,91754,91758,91778,91786,91794,91798],{"__ignoreMap":20},[25,91300,91301,91303,91305,91307],{"class":27,"line":28},[25,91302,51368],{"class":244},[25,91304,51372],{"class":51371},[25,91306,51375],{"class":31},[25,91308,51378],{"class":244},[25,91310,91311,91313,91315,91317,91319,91321],{"class":27,"line":39},[25,91312,1153],{"class":244},[25,91314,50706],{"class":51371},[25,91316,51387],{"class":31},[25,91318,290],{"class":244},[25,91320,51392],{"class":45},[25,91322,51378],{"class":244},[25,91324,91325],{"class":27,"line":51},[25,91326,2510],{"emptyLinePlaceholder":167},[25,91328,91329,91331,91333],{"class":27,"line":59},[25,91330,1153],{"class":244},[25,91332,51405],{"class":51371},[25,91334,51378],{"class":244},[25,91336,91337,91339,91341,91343,91345,91347],{"class":27,"line":67},[25,91338,52215],{"class":244},[25,91340,51415],{"class":51371},[25,91342,51418],{"class":31},[25,91344,290],{"class":244},[25,91346,51423],{"class":45},[25,91348,51378],{"class":244},[25,91350,91351,91353,91355,91357,91359,91361,91363,91365,91367],{"class":27,"line":75},[25,91352,52215],{"class":244},[25,91354,51415],{"class":51371},[25,91356,15030],{"class":31},[25,91358,290],{"class":244},[25,91360,51462],{"class":45},[25,91362,51442],{"class":31},[25,91364,290],{"class":244},[25,91366,51469],{"class":45},[25,91368,51378],{"class":244},[25,91370,91371,91373,91375,91377,91379],{"class":27,"line":83},[25,91372,52215],{"class":244},[25,91374,51478],{"class":51371},[25,91376,51481],{"class":244},[25,91378,51478],{"class":51371},[25,91380,51378],{"class":244},[25,91382,91383,91385,91387],{"class":27,"line":91},[25,91384,52215],{"class":244},[25,91386,159],{"class":51371},[25,91388,51378],{"class":244},[25,91390,91391,91393],{"class":27,"line":1429},[25,91392,54823],{"class":31},[25,91394,15682],{"class":244},[25,91396,91397,91399,91401,91403],{"class":27,"line":1441},[25,91398,72667],{"class":35},[25,91400,51508],{"class":244},[25,91402,60576],{"class":35},[25,91404,1403],{"class":244},[25,91406,91407,91409,91411,91413,91415],{"class":27,"line":1723},[25,91408,54842],{"class":35},[25,91410,51508],{"class":244},[25,91412,1833],{"class":35},[25,91414,51563],{"class":240},[25,91416,1403],{"class":244},[25,91418,91419,91421,91423,91425,91427],{"class":27,"line":1728},[25,91420,54856],{"class":35},[25,91422,51508],{"class":244},[25,91424,1833],{"class":35},[25,91426,51563],{"class":240},[25,91428,1403],{"class":244},[25,91430,91431,91433,91435,91437],{"class":27,"line":1734},[25,91432,54955],{"class":35},[25,91434,51508],{"class":244},[25,91436,90077],{"class":35},[25,91438,1403],{"class":244},[25,91440,91441,91443,91445,91447,91449],{"class":27,"line":1739},[25,91442,54993],{"class":35},[25,91444,51508],{"class":244},[25,91446,1068],{"class":35},[25,91448,51563],{"class":240},[25,91450,1403],{"class":244},[25,91452,91453,91455,91457,91459],{"class":27,"line":1753},[25,91454,57487],{"class":35},[25,91456,51508],{"class":244},[25,91458,60913],{"class":35},[25,91460,1403],{"class":244},[25,91462,91463,91465,91467,91469],{"class":27,"line":1758},[25,91464,57357],{"class":35},[25,91466,51508],{"class":244},[25,91468,51663],{"class":35},[25,91470,1403],{"class":244},[25,91472,91473,91475,91477,91479,91481],{"class":27,"line":1764},[25,91474,90116],{"class":35},[25,91476,51508],{"class":244},[25,91478,562],{"class":35},[25,91480,51563],{"class":240},[25,91482,1403],{"class":244},[25,91484,91485],{"class":27,"line":1785},[25,91486,2297],{"class":244},[25,91488,91489,91491,91493],{"class":27,"line":1790},[25,91490,52488],{"class":244},[25,91492,159],{"class":51371},[25,91494,51378],{"class":244},[25,91496,91497,91499,91501],{"class":27,"line":1804},[25,91498,51856],{"class":244},[25,91500,51405],{"class":51371},[25,91502,51378],{"class":244},[25,91504,91505],{"class":27,"line":1809},[25,91506,2510],{"emptyLinePlaceholder":167},[25,91508,91509,91511,91513],{"class":27,"line":1838},[25,91510,1153],{"class":244},[25,91512,51871],{"class":51371},[25,91514,51378],{"class":244},[25,91516,91517,91519,91521,91523,91525,91527,91529,91531],{"class":27,"line":1843},[25,91518,52215],{"class":244},[25,91520,51682],{"class":51371},[25,91522,53557],{"class":31},[25,91524,290],{"class":244},[25,91526,53562],{"class":45},[25,91528,55385],{"class":244},[25,91530,51682],{"class":51371},[25,91532,51378],{"class":244},[25,91534,91535,91537,91539,91541,91543,91545,91547,91549],{"class":27,"line":1860},[25,91536,52215],{"class":244},[25,91538,51884],{"class":51371},[25,91540,55310],{"class":31},[25,91542,290],{"class":244},[25,91544,88345],{"class":45},[25,91546,55385],{"class":244},[25,91548,51884],{"class":51371},[25,91550,51378],{"class":244},[25,91552,91553,91555,91557],{"class":27,"line":1865},[25,91554,52215],{"class":244},[25,91556,51884],{"class":51371},[25,91558,51378],{"class":244},[25,91560,91561,91563,91565,91567,91569,91571,91573,91575],{"class":27,"line":1870},[25,91562,11331],{"class":240},[25,91564,87004],{"class":35},[25,91566,13674],{"class":240},[25,91568,54467],{"class":244},[25,91570,54470],{"class":31},[25,91572,245],{"class":244},[25,91574,90217],{"class":45},[25,91576,251],{"class":244},[25,91578,91579,91581,91583,91585],{"class":27,"line":1875},[25,91580,52290],{"class":240},[25,91582,9548],{"class":244},[25,91584,290],{"class":240},[25,91586,47404],{"class":35},[25,91588,91589,91591,91593],{"class":27,"line":1889},[25,91590,70155],{"class":240},[25,91592,90236],{"class":31},[25,91594,10963],{"class":244},[25,91596,91597,91599,91601,91603],{"class":27,"line":1894},[25,91598,90243],{"class":244},[25,91600,290],{"class":240},[25,91602,3142],{"class":244},[25,91604,2812],{"class":240},[25,91606,91607],{"class":27,"line":2687},[25,91608,90254],{"class":302},[25,91610,91611],{"class":27,"line":2701},[25,91612,2297],{"class":244},[25,91614,91615],{"class":27,"line":2709},[25,91616,90263],{"class":302},[25,91618,91619],{"class":27,"line":2714},[25,91620,91621],{"class":302},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[25,91623,91624],{"class":27,"line":2720},[25,91625,91626],{"class":302},"    \u002F\u002F 1.声明一个定时器变量\n",[25,91628,91629],{"class":27,"line":2726},[25,91630,91631],{"class":302},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[25,91633,91634],{"class":27,"line":2731},[25,91635,91636],{"class":302},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[25,91638,91639],{"class":27,"line":8058},[25,91640,91641],{"class":302},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[25,91643,91644],{"class":27,"line":8082},[25,91645,91646],{"class":302},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[25,91648,91649,91651,91654,91656,91658,91660,91662],{"class":27,"line":8087},[25,91650,70155],{"class":240},[25,91652,91653],{"class":31}," throttle",[25,91655,245],{"class":244},[25,91657,90708],{"class":5326},[25,91659,12545],{"class":244},[25,91661,963],{"class":5326},[25,91663,12552],{"class":244},[25,91665,91666,91668],{"class":27,"line":8093},[25,91667,79843],{"class":240},[25,91669,90721],{"class":244},[25,91671,91672,91674,91676],{"class":27,"line":8120},[25,91673,74053],{"class":240},[25,91675,58989],{"class":240},[25,91677,54523],{"class":244},[25,91679,91680,91682,91684,91686],{"class":27,"line":8125},[25,91681,2607],{"class":240},[25,91683,1769],{"class":244},[25,91685,469],{"class":240},[25,91687,91688],{"class":244},"timer) {\n",[25,91690,91691,91694,91696,91698,91700,91702],{"class":27,"line":8131},[25,91692,91693],{"class":244},"          timer ",[25,91695,290],{"class":240},[25,91697,90762],{"class":31},[25,91699,245],{"class":244},[25,91701,54520],{"class":240},[25,91703,54523],{"class":244},[25,91705,91706,91709],{"class":27,"line":8143},[25,91707,91708],{"class":31},"            fn",[25,91710,2086],{"class":244},[25,91712,91713],{"class":27,"line":8155},[25,91714,91715],{"class":302},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[25,91717,91718],{"class":27,"line":8167},[25,91719,91720],{"class":302},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[25,91722,91723,91726,91728],{"class":27,"line":9826},[25,91724,91725],{"class":244},"            timer ",[25,91727,290],{"class":240},[25,91729,91730],{"class":35}," null\n",[25,91732,91733],{"class":27,"line":9851},[25,91734,91735],{"class":302},"            \u002F\u002F 不能用clearTimeout(timer)\n",[25,91737,91738],{"class":27,"line":9874},[25,91739,91740],{"class":302},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[25,91742,91743],{"class":27,"line":9898},[25,91744,91745],{"class":244},"          }, t)\n",[25,91747,91748],{"class":27,"line":9903},[25,91749,2639],{"class":244},[25,91751,91752],{"class":27,"line":9908},[25,91753,52469],{"class":244},[25,91755,91756],{"class":27,"line":9913},[25,91757,2297],{"class":244},[25,91759,91760,91762,91764,91766,91768,91770,91772,91774,91776],{"class":27,"line":9922},[25,91761,90278],{"class":244},[25,91763,57884],{"class":31},[25,91765,245],{"class":244},[25,91767,90285],{"class":45},[25,91769,12545],{"class":244},[25,91771,91244],{"class":31},[25,91773,90294],{"class":244},[25,91775,65145],{"class":35},[25,91777,30568],{"class":244},[25,91779,91780,91782,91784],{"class":27,"line":9927},[25,91781,52488],{"class":244},[25,91783,51884],{"class":51371},[25,91785,51378],{"class":244},[25,91787,91788,91790,91792],{"class":27,"line":9933},[25,91789,51856],{"class":244},[25,91791,51871],{"class":51371},[25,91793,51378],{"class":244},[25,91795,91796],{"class":27,"line":9954},[25,91797,2510],{"emptyLinePlaceholder":167},[25,91799,91800,91802,91804],{"class":27,"line":9960},[25,91801,51856],{"class":244},[25,91803,50706],{"class":51371},[25,91805,51378],{"class":244},[210,91807,91809],{"id":91808},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[15,91811,91813],{"className":53138,"code":91812,"language":53140,"meta":20,"style":20},"\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",[22,91814,91815,91823,91831,91836,91841,91846,91851,91855,91863],{"__ignoreMap":20},[25,91816,91817,91819,91821],{"class":27,"line":28},[25,91818,1153],{"class":244},[25,91820,51871],{"class":51371},[25,91822,51378],{"class":244},[25,91824,91825,91827,91829],{"class":27,"line":39},[25,91826,52215],{"class":244},[25,91828,51884],{"class":51371},[25,91830,51378],{"class":244},[25,91832,91833],{"class":27,"line":51},[25,91834,91835],{"class":244},"    let timer = null\n",[25,91837,91838],{"class":27,"line":59},[25,91839,91840],{"class":244},"    timer = setTimeout(() => {\n",[25,91842,91843],{"class":27,"line":67},[25,91844,91845],{"class":244},"      clearTimeout(timer)\n",[25,91847,91848],{"class":27,"line":75},[25,91849,91850],{"class":244},"      console.log(timer)\n",[25,91852,91853],{"class":27,"line":83},[25,91854,60296],{"class":244},[25,91856,91857,91859,91861],{"class":27,"line":91},[25,91858,52488],{"class":244},[25,91860,51884],{"class":51371},[25,91862,51378],{"class":244},[25,91864,91865,91867,91869],{"class":27,"line":1429},[25,91866,51856],{"class":244},[25,91868,51871],{"class":51371},[25,91870,51378],{"class":244},[99,91872,91873],{},"输出为1",[99,91875,91876],{},"在开启的定时器里边写清除定时器",[99,91878,91879],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[210,91881,91883],{"id":91882},"_4174-节流综合案例","4.17.4 节流综合案例",[99,91885,91886],{},"页面打开，可以记录上一次的视频播放位置",[99,91888,91889],{},[155,91890],{"alt":20,"src":91891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[99,91893,91894],{},[155,91895],{"alt":20,"src":91896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[15,91898,91900],{"className":50704,"code":91899,"language":50706,"meta":20,"style":20},"\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",[22,91901,91902,91912,91926,91930,91938,91952,91972,91992,92014,92027,92035,92041,92051,92061,92071,92075,92079,92086,92099,92111,92115,92119,92129,92141,92155,92159,92163,92170,92180,92193,92205,92215,92225,92241,92253,92257,92261,92269,92279,92291,92301,92311,92321,92325,92329,92339,92350,92354,92362,92370,92374,92382,92397,92412,92427,92448,92456,92464,92479,92501,92509,92524,92550,92576,92602,92610,92618,92637,92645,92650,92669,92674,92692,92697,92702,92710,92715,92729,92737,92742,92759,92763,92768,92790,92794,92802,92810,92814],{"__ignoreMap":20},[25,91903,91904,91906,91908,91910],{"class":27,"line":28},[25,91905,51368],{"class":244},[25,91907,51372],{"class":51371},[25,91909,51375],{"class":31},[25,91911,51378],{"class":244},[25,91913,91914,91916,91918,91920,91922,91924],{"class":27,"line":39},[25,91915,1153],{"class":244},[25,91917,50706],{"class":51371},[25,91919,51387],{"class":31},[25,91921,290],{"class":244},[25,91923,51392],{"class":45},[25,91925,51378],{"class":244},[25,91927,91928],{"class":27,"line":51},[25,91929,2510],{"emptyLinePlaceholder":167},[25,91931,91932,91934,91936],{"class":27,"line":59},[25,91933,1153],{"class":244},[25,91935,51405],{"class":51371},[25,91937,51378],{"class":244},[25,91939,91940,91942,91944,91946,91948,91950],{"class":27,"line":67},[25,91941,52215],{"class":244},[25,91943,51415],{"class":51371},[25,91945,51418],{"class":31},[25,91947,290],{"class":244},[25,91949,51423],{"class":45},[25,91951,59198],{"class":244},[25,91953,91954,91956,91958,91960,91962,91964,91966,91968,91970],{"class":27,"line":75},[25,91955,52215],{"class":244},[25,91957,51415],{"class":51371},[25,91959,51434],{"class":31},[25,91961,290],{"class":244},[25,91963,51439],{"class":45},[25,91965,51442],{"class":31},[25,91967,290],{"class":244},[25,91969,51447],{"class":45},[25,91971,59198],{"class":244},[25,91973,91974,91976,91978,91980,91982,91984,91986,91988,91990],{"class":27,"line":83},[25,91975,52215],{"class":244},[25,91977,51415],{"class":51371},[25,91979,15030],{"class":31},[25,91981,290],{"class":244},[25,91983,51462],{"class":45},[25,91985,51442],{"class":31},[25,91987,290],{"class":244},[25,91989,51469],{"class":45},[25,91991,59198],{"class":244},[25,91993,91994,91996,91998,92000,92002,92005,92007,92009,92012],{"class":27,"line":91},[25,91995,52215],{"class":244},[25,91997,51415],{"class":51371},[25,91999,15030],{"class":31},[25,92001,290],{"class":244},[25,92003,92004],{"class":45},"\"referrer\"",[25,92006,51442],{"class":31},[25,92008,290],{"class":244},[25,92010,92011],{"class":45},"\"never\"",[25,92013,59198],{"class":244},[25,92015,92016,92018,92020,92023,92025],{"class":27,"line":1429},[25,92017,52215],{"class":244},[25,92019,51478],{"class":51371},[25,92021,92022],{"class":244},">综合案例\u003C\u002F",[25,92024,51478],{"class":51371},[25,92026,51378],{"class":244},[25,92028,92029,92031,92033],{"class":27,"line":1441},[25,92030,52215],{"class":244},[25,92032,159],{"class":51371},[25,92034,51378],{"class":244},[25,92036,92037,92039],{"class":27,"line":1723},[25,92038,6513],{"class":51371},[25,92040,15682],{"class":244},[25,92042,92043,92045,92047,92049],{"class":27,"line":1728},[25,92044,54766],{"class":35},[25,92046,51508],{"class":244},[25,92048,434],{"class":35},[25,92050,1403],{"class":244},[25,92052,92053,92055,92057,92059],{"class":27,"line":1734},[25,92054,54777],{"class":35},[25,92056,51508],{"class":244},[25,92058,434],{"class":35},[25,92060,1403],{"class":244},[25,92062,92063,92065,92067,92069],{"class":27,"line":1739},[25,92064,72667],{"class":35},[25,92066,51508],{"class":244},[25,92068,60576],{"class":35},[25,92070,1403],{"class":244},[25,92072,92073],{"class":27,"line":1753},[25,92074,2297],{"class":244},[25,92076,92077],{"class":27,"line":1758},[25,92078,2510],{"emptyLinePlaceholder":167},[25,92080,92081,92084],{"class":27,"line":1764},[25,92082,92083],{"class":31},"    .container",[25,92085,15682],{"class":244},[25,92087,92088,92090,92092,92095,92097],{"class":27,"line":1785},[25,92089,54842],{"class":35},[25,92091,51508],{"class":244},[25,92093,92094],{"class":35},"1200",[25,92096,51563],{"class":240},[25,92098,1403],{"class":244},[25,92100,92101,92103,92105,92107,92109],{"class":27,"line":1790},[25,92102,54777],{"class":35},[25,92104,51508],{"class":244},[25,92106,434],{"class":35},[25,92108,51627],{"class":35},[25,92110,1403],{"class":244},[25,92112,92113],{"class":27,"line":1804},[25,92114,2297],{"class":244},[25,92116,92117],{"class":27,"line":1809},[25,92118,2510],{"emptyLinePlaceholder":167},[25,92120,92121,92124,92127],{"class":27,"line":1838},[25,92122,92123],{"class":31},"    .video",[25,92125,92126],{"class":51371}," video",[25,92128,15682],{"class":244},[25,92130,92131,92133,92135,92137,92139],{"class":27,"line":1843},[25,92132,54842],{"class":35},[25,92134,51508],{"class":244},[25,92136,554],{"class":35},[25,92138,571],{"class":240},[25,92140,1403],{"class":244},[25,92142,92143,92145,92147,92149,92151,92153],{"class":27,"line":1860},[25,92144,54766],{"class":35},[25,92146,51508],{"class":244},[25,92148,943],{"class":35},[25,92150,51563],{"class":240},[25,92152,4203],{"class":35},[25,92154,1403],{"class":244},[25,92156,92157],{"class":27,"line":1865},[25,92158,2297],{"class":244},[25,92160,92161],{"class":27,"line":1870},[25,92162,2510],{"emptyLinePlaceholder":167},[25,92164,92165,92168],{"class":27,"line":1875},[25,92166,92167],{"class":31},"    .elevator",[25,92169,15682],{"class":244},[25,92171,92172,92174,92176,92178],{"class":27,"line":1889},[25,92173,54830],{"class":35},[25,92175,51508],{"class":244},[25,92177,86304],{"class":35},[25,92179,1403],{"class":244},[25,92181,92182,92184,92186,92189,92191],{"class":27,"line":1894},[25,92183,55018],{"class":35},[25,92185,51508],{"class":244},[25,92187,92188],{"class":35},"280",[25,92190,51563],{"class":240},[25,92192,1403],{"class":244},[25,92194,92195,92197,92199,92201,92203],{"class":27,"line":2687},[25,92196,86498],{"class":35},[25,92198,51508],{"class":244},[25,92200,943],{"class":35},[25,92202,51563],{"class":240},[25,92204,1403],{"class":244},[25,92206,92207,92209,92211,92213],{"class":27,"line":2701},[25,92208,86311],{"class":35},[25,92210,51508],{"class":244},[25,92212,86316],{"class":35},[25,92214,1403],{"class":244},[25,92216,92217,92219,92221,92223],{"class":27,"line":2709},[25,92218,61792],{"class":35},[25,92220,51508],{"class":244},[25,92222,60913],{"class":35},[25,92224,1403],{"class":244},[25,92226,92227,92229,92231,92233,92235,92237,92239],{"class":27,"line":2714},[25,92228,62048],{"class":35},[25,92230,51508],{"class":244},[25,92232,460],{"class":35},[25,92234,51563],{"class":240},[25,92236,51592],{"class":35},[25,92238,62315],{"class":35},[25,92240,1403],{"class":244},[25,92242,92243,92245,92247,92249,92251],{"class":27,"line":2720},[25,92244,54842],{"class":35},[25,92246,51508],{"class":244},[25,92248,1150],{"class":35},[25,92250,51563],{"class":240},[25,92252,1403],{"class":244},[25,92254,92255],{"class":27,"line":2726},[25,92256,2297],{"class":244},[25,92258,92259],{"class":27,"line":2731},[25,92260,2510],{"emptyLinePlaceholder":167},[25,92262,92263,92265,92267],{"class":27,"line":8058},[25,92264,92167],{"class":31},[25,92266,1510],{"class":51371},[25,92268,15682],{"class":244},[25,92270,92271,92273,92275,92277],{"class":27,"line":8082},[25,92272,55080],{"class":35},[25,92274,51508],{"class":244},[25,92276,60940],{"class":35},[25,92278,1403],{"class":244},[25,92280,92281,92283,92285,92287,92289],{"class":27,"line":8087},[25,92282,54766],{"class":35},[25,92284,51508],{"class":244},[25,92286,689],{"class":35},[25,92288,51563],{"class":240},[25,92290,1403],{"class":244},[25,92292,92293,92295,92297,92299],{"class":27,"line":8093},[25,92294,64041],{"class":35},[25,92296,51508],{"class":244},[25,92298,54808],{"class":35},[25,92300,1403],{"class":244},[25,92302,92303,92305,92307,92309],{"class":27,"line":8120},[25,92304,57357],{"class":35},[25,92306,51508],{"class":244},[25,92308,51663],{"class":35},[25,92310,1403],{"class":244},[25,92312,92313,92315,92317,92319],{"class":27,"line":8125},[25,92314,57487],{"class":35},[25,92316,51508],{"class":244},[25,92318,62141],{"class":35},[25,92320,1403],{"class":244},[25,92322,92323],{"class":27,"line":8131},[25,92324,2297],{"class":244},[25,92326,92327],{"class":27,"line":8143},[25,92328,2510],{"emptyLinePlaceholder":167},[25,92330,92331,92333,92335,92337],{"class":27,"line":8155},[25,92332,92167],{"class":31},[25,92334,1510],{"class":51371},[25,92336,64095],{"class":31},[25,92338,15682],{"class":244},[25,92340,92341,92343,92345,92348],{"class":27,"line":8167},[25,92342,57487],{"class":35},[25,92344,51508],{"class":244},[25,92346,92347],{"class":35},"#1286ff",[25,92349,1403],{"class":244},[25,92351,92352],{"class":27,"line":9826},[25,92353,2297],{"class":244},[25,92355,92356,92358,92360],{"class":27,"line":9851},[25,92357,52488],{"class":244},[25,92359,159],{"class":51371},[25,92361,51378],{"class":244},[25,92363,92364,92366,92368],{"class":27,"line":9874},[25,92365,51856],{"class":244},[25,92367,51405],{"class":51371},[25,92369,51378],{"class":244},[25,92371,92372],{"class":27,"line":9898},[25,92373,2510],{"emptyLinePlaceholder":167},[25,92375,92376,92378,92380],{"class":27,"line":9903},[25,92377,1153],{"class":244},[25,92379,51871],{"class":51371},[25,92381,51378],{"class":244},[25,92383,92384,92386,92388,92390,92392,92395],{"class":27,"line":9908},[25,92385,52215],{"class":244},[25,92387,51682],{"class":51371},[25,92389,53557],{"class":31},[25,92391,290],{"class":244},[25,92393,92394],{"class":45},"\"container\"",[25,92396,51378],{"class":244},[25,92398,92399,92401,92403,92405,92407,92410],{"class":27,"line":9913},[25,92400,51412],{"class":244},[25,92402,51682],{"class":51371},[25,92404,53557],{"class":31},[25,92406,290],{"class":244},[25,92408,92409],{"class":45},"\"header\"",[25,92411,51378],{"class":244},[25,92413,92414,92416,92418,92420,92422,92425],{"class":27,"line":9922},[25,92415,55305],{"class":244},[25,92417,481],{"class":51371},[25,92419,61128],{"class":31},[25,92421,290],{"class":244},[25,92423,92424],{"class":45},"\"http:\u002F\u002Fpip.itcast.cn\"",[25,92426,51378],{"class":244},[25,92428,92429,92431,92433,92435,92437,92440,92442,92444,92446],{"class":27,"line":9927},[25,92430,55373],{"class":244},[25,92432,155],{"class":51371},[25,92434,55310],{"class":31},[25,92436,290],{"class":244},[25,92438,92439],{"class":45},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[25,92441,55318],{"class":31},[25,92443,290],{"class":244},[25,92445,7762],{"class":45},[25,92447,59198],{"class":244},[25,92449,92450,92452,92454],{"class":27,"line":9933},[25,92451,55478],{"class":244},[25,92453,481],{"class":51371},[25,92455,51378],{"class":244},[25,92457,92458,92460,92462],{"class":27,"line":9954},[25,92459,51847],{"class":244},[25,92461,51682],{"class":51371},[25,92463,51378],{"class":244},[25,92465,92466,92468,92470,92472,92474,92477],{"class":27,"line":9960},[25,92467,51412],{"class":244},[25,92469,51682],{"class":51371},[25,92471,53557],{"class":31},[25,92473,290],{"class":244},[25,92475,92476],{"class":45},"\"video\"",[25,92478,51378],{"class":244},[25,92480,92481,92483,92485,92487,92489,92492,92495,92497,92499],{"class":27,"line":9974},[25,92482,55305],{"class":244},[25,92484,28254],{"class":51371},[25,92486,55310],{"class":31},[25,92488,290],{"class":244},[25,92490,92491],{"class":45},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[25,92493,92494],{"class":31}," controls",[25,92496,55385],{"class":244},[25,92498,28254],{"class":51371},[25,92500,51378],{"class":244},[25,92502,92503,92505,92507],{"class":27,"line":9980},[25,92504,51847],{"class":244},[25,92506,51682],{"class":51371},[25,92508,51378],{"class":244},[25,92510,92511,92513,92515,92517,92519,92522],{"class":27,"line":10007},[25,92512,51412],{"class":244},[25,92514,51682],{"class":51371},[25,92516,53557],{"class":31},[25,92518,290],{"class":244},[25,92520,92521],{"class":45},"\"elevator\"",[25,92523,51378],{"class":244},[25,92525,92526,92528,92530,92532,92534,92536,92539,92541,92543,92546,92548],{"class":27,"line":10016},[25,92527,55305],{"class":244},[25,92529,481],{"class":51371},[25,92531,61128],{"class":31},[25,92533,290],{"class":244},[25,92535,64307],{"class":45},[25,92537,92538],{"class":31}," data-ref",[25,92540,290],{"class":244},[25,92542,92476],{"class":45},[25,92544,92545],{"class":244},">视频介绍\u003C\u002F",[25,92547,481],{"class":51371},[25,92549,51378],{"class":244},[25,92551,92552,92554,92556,92558,92560,92562,92564,92566,92569,92572,92574],{"class":27,"line":10022},[25,92553,55305],{"class":244},[25,92555,481],{"class":51371},[25,92557,61128],{"class":31},[25,92559,290],{"class":244},[25,92561,64307],{"class":45},[25,92563,92538],{"class":31},[25,92565,290],{"class":244},[25,92567,92568],{"class":45},"\"intro\"",[25,92570,92571],{"class":244},">课程简介\u003C\u002F",[25,92573,481],{"class":51371},[25,92575,51378],{"class":244},[25,92577,92578,92580,92582,92584,92586,92588,92590,92592,92595,92598,92600],{"class":27,"line":10030},[25,92579,55305],{"class":244},[25,92581,481],{"class":51371},[25,92583,61128],{"class":31},[25,92585,290],{"class":244},[25,92587,64307],{"class":45},[25,92589,92538],{"class":31},[25,92591,290],{"class":244},[25,92593,92594],{"class":45},"\"outline\"",[25,92596,92597],{"class":244},">评论列表\u003C\u002F",[25,92599,481],{"class":51371},[25,92601,51378],{"class":244},[25,92603,92604,92606,92608],{"class":27,"line":10035},[25,92605,51847],{"class":244},[25,92607,51682],{"class":51371},[25,92609,51378],{"class":244},[25,92611,92612,92614,92616],{"class":27,"line":16714},[25,92613,52488],{"class":244},[25,92615,51682],{"class":51371},[25,92617,51378],{"class":244},[25,92619,92620,92622,92624,92626,92628,92631,92633,92635],{"class":27,"line":16720},[25,92621,52215],{"class":244},[25,92623,51884],{"class":51371},[25,92625,55310],{"class":31},[25,92627,290],{"class":244},[25,92629,92630],{"class":45},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[25,92632,55385],{"class":244},[25,92634,51884],{"class":51371},[25,92636,51378],{"class":244},[25,92638,92639,92641,92643],{"class":27,"line":16743},[25,92640,52215],{"class":244},[25,92642,51884],{"class":51371},[25,92644,51378],{"class":244},[25,92646,92647],{"class":27,"line":16749},[25,92648,92649],{"class":302},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[25,92651,92652,92654,92656,92658,92660,92662,92664,92667],{"class":27,"line":16772},[25,92653,11331],{"class":240},[25,92655,92126],{"class":35},[25,92657,13674],{"class":240},[25,92659,54467],{"class":244},[25,92661,54470],{"class":31},[25,92663,245],{"class":244},[25,92665,92666],{"class":45},"'video'",[25,92668,251],{"class":244},[25,92670,92671],{"class":27,"line":16786},[25,92672,92673],{"class":302},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[25,92675,92676,92679,92681,92683,92685,92688,92690],{"class":27,"line":16806},[25,92677,92678],{"class":244},"    video.ontimeupdate ",[25,92680,290],{"class":240},[25,92682,88426],{"class":244},[25,92684,91244],{"class":31},[25,92686,92687],{"class":244},"(() ",[25,92689,84793],{"class":240},[25,92691,15682],{"class":244},[25,92693,92694],{"class":27,"line":16812},[25,92695,92696],{"class":302},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[25,92698,92699],{"class":27,"line":16823},[25,92700,92701],{"class":302},"      \u002F\u002F 控制台输出当前的时间\n",[25,92703,92704,92707],{"class":27,"line":16846},[25,92705,92706],{"class":302},"      \u002F\u002F console.log(video.currentTime)",[25,92708,92709],{"class":302},"  \u002F\u002F获得当前的视频时间\n",[25,92711,92712],{"class":27,"line":16868},[25,92713,92714],{"class":302},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[25,92716,92717,92719,92721,92723,92726],{"class":27,"line":16873},[25,92718,74754],{"class":244},[25,92720,71725],{"class":31},[25,92722,245],{"class":244},[25,92724,92725],{"class":45},"'currentTime'",[25,92727,92728],{"class":244},", video.currentTime)\n",[25,92730,92731,92733,92735],{"class":27,"line":16879},[25,92732,54606],{"class":244},[25,92734,6520],{"class":35},[25,92736,251],{"class":244},[25,92738,92739],{"class":27,"line":16893},[25,92740,92741],{"class":302},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[25,92743,92744,92747,92750,92752,92755,92757],{"class":27,"line":16906},[25,92745,92746],{"class":244},"    video.",[25,92748,92749],{"class":31},"onloadeddata",[25,92751,13674],{"class":240},[25,92753,92754],{"class":244}," () ",[25,92756,84793],{"class":240},[25,92758,15682],{"class":244},[25,92760,92761],{"class":27,"line":16911},[25,92762,60083],{"class":302},[25,92764,92765],{"class":27,"line":16925},[25,92766,92767],{"class":302},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[25,92769,92770,92773,92775,92778,92780,92782,92784,92786,92788],{"class":27,"line":16930},[25,92771,92772],{"class":244},"      video.currentTime ",[25,92774,290],{"class":240},[25,92776,92777],{"class":244}," localStorage.",[25,92779,71756],{"class":31},[25,92781,245],{"class":244},[25,92783,92725],{"class":45},[25,92785,13824],{"class":244},[25,92787,71428],{"class":240},[25,92789,47404],{"class":35},[25,92791,92792],{"class":27,"line":16936},[25,92793,2297],{"class":244},[25,92795,92796,92798,92800],{"class":27,"line":16941},[25,92797,52488],{"class":244},[25,92799,51884],{"class":51371},[25,92801,51378],{"class":244},[25,92803,92804,92806,92808],{"class":27,"line":16955},[25,92805,51856],{"class":244},[25,92807,51871],{"class":51371},[25,92809,51378],{"class":244},[25,92811,92812],{"class":27,"line":16960},[25,92813,2510],{"emptyLinePlaceholder":167},[25,92815,92816,92818,92820],{"class":27,"line":16965},[25,92817,51856],{"class":244},[25,92819,50706],{"class":51371},[25,92821,51378],{"class":244},[159,92823,92824],{},"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":20,"searchDepth":39,"depth":39,"links":92826},[92827,92832,92836,92837,92838,92843,92848,92849,92850,92851,92858,92863,92864,92874,92878,92879,92883],{"id":76762,"depth":39,"text":76763,"children":92828},[92829,92830,92831],{"id":76766,"depth":51,"text":76767},{"id":76791,"depth":51,"text":76792},{"id":76803,"depth":51,"text":76804},{"id":76815,"depth":39,"text":76816,"children":92833},[92834,92835],{"id":76819,"depth":51,"text":76820},{"id":76834,"depth":51,"text":76835},{"id":76886,"depth":39,"text":76887},{"id":76930,"depth":39,"text":76931},{"id":76947,"depth":39,"text":76948,"children":92839},[92840,92841,92842],{"id":76951,"depth":51,"text":76952},{"id":76964,"depth":51,"text":76965},{"id":77069,"depth":51,"text":77070},{"id":77358,"depth":39,"text":77359,"children":92844},[92845,92846,92847],{"id":77362,"depth":51,"text":77363},{"id":77805,"depth":51,"text":77806},{"id":78216,"depth":51,"text":78217},{"id":78279,"depth":39,"text":78280},{"id":78358,"depth":39,"text":78359},{"id":78451,"depth":39,"text":78452},{"id":80296,"depth":39,"text":80297,"children":92852},[92853,92854,92855,92856,92857],{"id":80300,"depth":51,"text":80301},{"id":80312,"depth":51,"text":80313},{"id":80531,"depth":51,"text":80532},{"id":80549,"depth":51,"text":80550},{"id":80609,"depth":51,"text":80610},{"id":84877,"depth":39,"text":84878,"children":92859},[92860,92861,92862],{"id":84881,"depth":51,"text":84882},{"id":84899,"depth":51,"text":84900},{"id":84925,"depth":51,"text":84926},{"id":84934,"depth":39,"text":84935},{"id":84956,"depth":39,"text":84957,"children":92865},[92866,92867,92868,92869,92870,92871,92872,92873],{"id":84960,"depth":51,"text":84961},{"id":85221,"depth":51,"text":85222},{"id":85407,"depth":51,"text":85408},{"id":85774,"depth":51,"text":85775},{"id":85890,"depth":51,"text":85891},{"id":85926,"depth":51,"text":85927},{"id":85973,"depth":51,"text":85974},{"id":86007,"depth":51,"text":86008},{"id":87370,"depth":39,"text":87371,"children":92875},[92876,92877],{"id":87374,"depth":51,"text":87375},{"id":87411,"depth":51,"text":87412},{"id":88766,"depth":39,"text":88767},{"id":89137,"depth":39,"text":89138,"children":92880},[92881,92882],{"id":89141,"depth":51,"text":89142},{"id":89175,"depth":51,"text":89176},{"id":89904,"depth":39,"text":89905,"children":92884},[92885,92886,92887,92888],{"id":89908,"depth":51,"text":89909},{"id":90866,"depth":51,"text":90867},{"id":91808,"depth":51,"text":91809},{"id":91882,"depth":51,"text":91883},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76751,"description":164},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92895,"title":92896,"body":92897,"description":92908,"extension":165,"meta":92909,"navigation":167,"path":92911,"seo":92912,"stem":92913,"__hash__":92914},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92898,"toc":92906},[92899],[99,92900,92901,92902],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[481,92903,92904],{"href":92904,"rel":92905},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23973],{"title":20,"searchDepth":39,"depth":39,"links":92907},[],"三件套第三套学习",{"category":92910},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92896,"description":92908},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92916,"title":92917,"body":92918,"description":164,"extension":165,"meta":93023,"navigation":167,"path":93024,"seo":93025,"stem":93026,"__hash__":93027},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92919,"toc":93018},[92920,92927,92930,92933,92936,92940,92949,92952,92955,92959,92968,92971,92975,92978,92998,93001,93015],[99,92921,92922],{},[481,92923,92926],{"href":92924,"rel":92925},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23973],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92928,92917],{"id":92929},"_1安装",[99,92931,92932],{},"numpy是科学计算基础库,底层是C语言",[99,92934,92935],{},"三种方式：",[182,92937,92939],{"id":92938},"_11-通过pip安装","1.1 通过pip安装",[15,92941,92943],{"className":30449,"code":92942,"language":30451,"meta":20,"style":20},"pip install numpy\n",[22,92944,92945],{"__ignoreMap":20},[25,92946,92947],{"class":27,"line":28},[25,92948,92942],{"class":244},[99,92950,92951],{},"首选方式，自动处理依赖项",[99,92953,92954],{},"在提示系统命令符中使用cmd",[182,92956,92958],{"id":92957},"_12-通过anaconda安装","1.2 通过Anaconda安装",[15,92960,92962],{"className":30449,"code":92961,"language":30451,"meta":20,"style":20},"conda install numpy\n",[22,92963,92964],{"__ignoreMap":20},[25,92965,92966],{"class":27,"line":28},[25,92967,92961],{"class":244},[99,92969,92970],{},"自动解决环境依赖",[182,92972,92974],{"id":92973},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[99,92976,92977],{},"对于Debian\u002FUbuntu",[15,92979,92981],{"className":30449,"code":92980,"language":30451,"meta":20,"style":20},"sudo apt-get install python3-numpy\n",[22,92982,92983],{"__ignoreMap":20},[25,92984,92985,92988,92990,92993,92995],{"class":27,"line":28},[25,92986,92987],{"class":244},"sudo apt",[25,92989,775],{"class":240},[25,92991,92992],{"class":244},"get install python3",[25,92994,775],{"class":240},[25,92996,92997],{"class":244},"numpy\n",[99,92999,93000],{},"对于Fedora:",[15,93002,93004],{"className":30449,"code":93003,"language":30451,"meta":20,"style":20},"sudo dnf install python3-numpy\n",[22,93005,93006],{"__ignoreMap":20},[25,93007,93008,93011,93013],{"class":27,"line":28},[25,93009,93010],{"class":244},"sudo dnf install python3",[25,93012,775],{"class":240},[25,93014,92997],{"class":244},[159,93016,93017],{},"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":20,"searchDepth":39,"depth":39,"links":93019},[93020,93021,93022],{"id":92938,"depth":39,"text":92939},{"id":92957,"depth":39,"text":92958},{"id":92973,"depth":39,"text":92974},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92917,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93029,"title":93030,"body":93031,"description":164,"extension":165,"meta":93144,"navigation":167,"path":93145,"seo":93146,"stem":93147,"__hash__":93148},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93032,"toc":93142},[93033,93036,93039,93042,93045,93048,93051,93054,93057,93060,93136,93139],[10,93034,93030],{"id":93035},"_10算数函数",[99,93037,93038],{},"加减乘除运算跟python基础语法没区别",[99,93040,93041],{},"除了python那种方法外还可以使用函数",[99,93043,93044],{},"加：np.add(a,b)",[99,93046,93047],{},"减：np.subtract(a,b)",[99,93049,93050],{},"乘：np.multiply(a,b)",[99,93052,93053],{},"除：np.divide(a,b) == a\u002Fb",[99,93055,93056],{},"取余：np.mod(a,b) == a%b",[99,93058,93059],{},"必须会的用法：",[15,93061,93063],{"className":30449,"code":93062,"language":30451,"meta":20,"style":20},"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",[22,93064,93065,93087,93108,93118,93131],{"__ignoreMap":20},[25,93066,93067,93069,93071,93074,93076,93079,93081,93083,93085],{"class":27,"line":28},[25,93068,481],{"class":244},[25,93070,290],{"class":240},[25,93072,93073],{"class":244},"np.arange(",[25,93075,663],{"class":35},[25,93077,93078],{"class":244},").reshape(",[25,93080,315],{"class":35},[25,93082,621],{"class":244},[25,93084,315],{"class":35},[25,93086,251],{"class":244},[25,93088,93089,93091,93093,93096,93098,93100,93102,93104,93106],{"class":27,"line":39},[25,93090,506],{"class":244},[25,93092,290],{"class":240},[25,93094,93095],{"class":244},"np.array([",[25,93097,689],{"class":35},[25,93099,621],{"class":244},[25,93101,689],{"class":35},[25,93103,621],{"class":244},[25,93105,689],{"class":35},[25,93107,4767],{"class":244},[25,93109,93110,93113,93115],{"class":27,"line":51},[25,93111,93112],{"class":244},"result",[25,93114,290],{"class":240},[25,93116,93117],{"class":244},"np.empty_like(a)\n",[25,93119,93120,93123,93126,93128],{"class":27,"line":59},[25,93121,93122],{"class":244},"np.add(a,b,",[25,93124,93125],{"class":5326},"out",[25,93127,290],{"class":240},[25,93129,93130],{"class":244},"result)\n",[25,93132,93133],{"class":27,"line":67},[25,93134,93135],{"class":244},"result\n",[99,93137,93138],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[159,93140,93141],{},"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":20,"searchDepth":39,"depth":39,"links":93143},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93030,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93150,"title":93151,"body":93152,"description":164,"extension":165,"meta":93914,"navigation":167,"path":93915,"seo":93916,"stem":93917,"__hash__":93918},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93153,"toc":93901},[93154,93157,93160,93163,93167,93206,93210,93254,93314,93318,93321,93360,93363,93408,93412,93448,93452,93521,93525,93589,93593,93596,93599,93602,93605,93641,93645,93685,93689,93761,93764,93768,93831,93835,93898],[10,93155,93151],{"id":93156},"_11统计函数",[99,93158,93159],{},"sum max min mean",[99,93161,93162],{},"这些有axis参数，可以指定方向",[182,93164,93166],{"id":93165},"_111-sum求和函数","11.1 sum()求和函数",[15,93168,93170],{"className":30449,"code":93169,"language":30451,"meta":20,"style":20},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[22,93171,93172,93177,93198],{"__ignoreMap":20},[25,93173,93174],{"class":27,"line":28},[25,93175,93176],{"class":302},"#创建一维数组\n",[25,93178,93179,93181,93183,93186,93188,93190,93192,93194,93196],{"class":27,"line":39},[25,93180,481],{"class":244},[25,93182,290],{"class":240},[25,93184,93185],{"class":244},"np.random.randint(",[25,93187,460],{"class":35},[25,93189,621],{"class":244},[25,93191,554],{"class":35},[25,93193,621],{"class":244},[25,93195,943],{"class":35},[25,93197,251],{"class":244},[25,93199,93200,93203],{"class":27,"line":51},[25,93201,93202],{"class":244},"np.sum(a)",[25,93204,93205],{"class":302},"#求和\n",[182,93207,93209],{"id":93208},"_112-max求最大值函数","11.2 max()求最大值函数",[15,93211,93213],{"className":30449,"code":93212,"language":30451,"meta":20,"style":20},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[22,93214,93215,93219,93239,93244,93249],{"__ignoreMap":20},[25,93216,93217],{"class":27,"line":28},[25,93218,93176],{"class":302},[25,93220,93221,93223,93225,93227,93229,93231,93233,93235,93237],{"class":27,"line":39},[25,93222,481],{"class":244},[25,93224,290],{"class":240},[25,93226,93185],{"class":244},[25,93228,460],{"class":35},[25,93230,621],{"class":244},[25,93232,554],{"class":35},[25,93234,621],{"class":244},[25,93236,943],{"class":35},[25,93238,251],{"class":244},[25,93240,93241],{"class":27,"line":51},[25,93242,93243],{"class":244},"np.max(a)\n",[25,93245,93246],{"class":27,"line":59},[25,93247,93248],{"class":302},"#最大索引(求最大元素的索引)arg\n",[25,93250,93251],{"class":27,"line":67},[25,93252,93253],{"class":244},"np.argmax(a)\n",[15,93255,93257],{"className":30449,"code":93256,"language":30451,"meta":20,"style":20},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[22,93258,93259,93280,93300,93304],{"__ignoreMap":20},[25,93260,93261,93263,93265,93268,93270,93272,93274,93276,93278],{"class":27,"line":28},[25,93262,11029],{"class":244},[25,93264,290],{"class":240},[25,93266,93267],{"class":244}," np.array([",[25,93269,460],{"class":35},[25,93271,12545],{"class":244},[25,93273,562],{"class":35},[25,93275,12545],{"class":244},[25,93277,315],{"class":35},[25,93279,4767],{"class":244},[25,93281,93282,93284,93286,93288,93290,93292,93294,93296,93298],{"class":27,"line":39},[25,93283,11055],{"class":244},[25,93285,290],{"class":240},[25,93287,93267],{"class":244},[25,93289,315],{"class":35},[25,93291,12545],{"class":244},[25,93293,321],{"class":35},[25,93295,12545],{"class":244},[25,93297,536],{"class":35},[25,93299,4767],{"class":244},[25,93301,93302],{"class":27,"line":51},[25,93303,2510],{"emptyLinePlaceholder":167},[25,93305,93306,93308,93311],{"class":27,"line":59},[25,93307,30486],{"class":35},[25,93309,93310],{"class":244},"(np.maximum(a, b))   ",[25,93312,93313],{"class":302},"# [3 5 4]，每个位置上取较大值\n",[182,93315,93317],{"id":93316},"_113-mean求平均值函数","11.3 mean()求平均值函数",[99,93319,93320],{},"①一维数组：",[15,93322,93324],{"className":30449,"code":93323,"language":30451,"meta":20,"style":20},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[22,93325,93326,93330,93350,93355],{"__ignoreMap":20},[25,93327,93328],{"class":27,"line":28},[25,93329,93176],{"class":302},[25,93331,93332,93334,93336,93338,93340,93342,93344,93346,93348],{"class":27,"line":39},[25,93333,481],{"class":244},[25,93335,290],{"class":240},[25,93337,93185],{"class":244},[25,93339,460],{"class":35},[25,93341,621],{"class":244},[25,93343,554],{"class":35},[25,93345,621],{"class":244},[25,93347,943],{"class":35},[25,93349,251],{"class":244},[25,93351,93352],{"class":27,"line":51},[25,93353,93354],{"class":302},"#求平均值\n",[25,93356,93357],{"class":27,"line":59},[25,93358,93359],{"class":244},"np.mean(a)\n",[99,93361,93362],{},"②二维数组",[15,93364,93366],{"className":30449,"code":93365,"language":30451,"meta":20,"style":20},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[22,93367,93368,93373,93398,93403],{"__ignoreMap":20},[25,93369,93370],{"class":27,"line":28},[25,93371,93372],{"class":302},"#二维数组\n",[25,93374,93375,93378,93380,93382,93384,93386,93388,93390,93392,93394,93396],{"class":27,"line":39},[25,93376,93377],{"class":244},"aa",[25,93379,290],{"class":240},[25,93381,93073],{"class":244},[25,93383,460],{"class":35},[25,93385,621],{"class":244},[25,93387,766],{"class":35},[25,93389,93078],{"class":244},[25,93391,315],{"class":35},[25,93393,621],{"class":244},[25,93395,536],{"class":35},[25,93397,251],{"class":244},[25,93399,93400],{"class":27,"line":51},[25,93401,93402],{"class":302},"#对数组中的所有数求平均\n",[25,93404,93405],{"class":27,"line":59},[25,93406,93407],{"class":244},"np.mean(aa)\n",[182,93409,93411],{"id":93410},"_114-median求中位数函数","11.4 median()求中位数函数",[15,93413,93415],{"className":30449,"code":93414,"language":30451,"meta":20,"style":20},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[22,93416,93417,93422,93438,93443],{"__ignoreMap":20},[25,93418,93419],{"class":27,"line":28},[25,93420,93421],{"class":302},"#求中位数\n",[25,93423,93424,93426,93428,93430,93432,93434,93436],{"class":27,"line":39},[25,93425,506],{"class":244},[25,93427,290],{"class":240},[25,93429,93073],{"class":244},[25,93431,460],{"class":35},[25,93433,621],{"class":244},[25,93435,689],{"class":35},[25,93437,251],{"class":244},[25,93439,93440],{"class":27,"line":51},[25,93441,93442],{"class":244},"np.median(b)\n",[25,93444,93445],{"class":27,"line":59},[25,93446,93447],{"class":302},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[182,93449,93451],{"id":93450},"_115-power求幂运算函数","11.5 power()求幂运算函数",[15,93453,93455],{"className":30449,"code":93454,"language":30451,"meta":20,"style":20},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[22,93456,93457,93473,93478,93483,93492,93497,93506],{"__ignoreMap":20},[25,93458,93459,93461,93463,93465,93467,93469,93471],{"class":27,"line":28},[25,93460,506],{"class":244},[25,93462,290],{"class":240},[25,93464,93073],{"class":244},[25,93466,460],{"class":35},[25,93468,621],{"class":244},[25,93470,689],{"class":35},[25,93472,251],{"class":244},[25,93474,93475],{"class":27,"line":39},[25,93476,93477],{"class":302},"#幂运算\n",[25,93479,93480],{"class":27,"line":51},[25,93481,93482],{"class":302},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[25,93484,93485,93488,93490],{"class":27,"line":59},[25,93486,93487],{"class":244},"np.power(b,",[25,93489,321],{"class":35},[25,93491,251],{"class":244},[25,93493,93494],{"class":27,"line":67},[25,93495,93496],{"class":302},"#或者以下代码，将数据存储起来\n",[25,93498,93499,93501,93503],{"class":27,"line":75},[25,93500,1088],{"class":244},[25,93502,290],{"class":240},[25,93504,93505],{"class":244},"np.empty_like(b)\n",[25,93507,93508,93510,93512,93514,93516,93518],{"class":27,"line":83},[25,93509,93487],{"class":244},[25,93511,321],{"class":35},[25,93513,621],{"class":244},[25,93515,93125],{"class":5326},[25,93517,290],{"class":240},[25,93519,93520],{"class":244},"y)\n",[182,93522,93524],{"id":93523},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[15,93526,93528],{"className":30449,"code":93527,"language":30451,"meta":20,"style":20},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[22,93529,93530,93546,93551,93556,93560,93578],{"__ignoreMap":20},[25,93531,93532,93534,93536,93538,93540,93542,93544],{"class":27,"line":28},[25,93533,506],{"class":244},[25,93535,290],{"class":240},[25,93537,93073],{"class":244},[25,93539,460],{"class":35},[25,93541,621],{"class":244},[25,93543,689],{"class":35},[25,93545,251],{"class":244},[25,93547,93548],{"class":27,"line":39},[25,93549,93550],{"class":302},"#开方\n",[25,93552,93553],{"class":27,"line":51},[25,93554,93555],{"class":244},"np.sqrt(b)\n",[25,93557,93558],{"class":27,"line":59},[25,93559,93496],{"class":302},[25,93561,93562,93564,93566,93569,93572,93574,93576],{"class":27,"line":67},[25,93563,1088],{"class":244},[25,93565,290],{"class":240},[25,93567,93568],{"class":244},"np.empty_like(b,",[25,93570,93571],{"class":5326},"dtype",[25,93573,290],{"class":240},[25,93575,284],{"class":35},[25,93577,251],{"class":244},[25,93579,93580,93583,93585,93587],{"class":27,"line":75},[25,93581,93582],{"class":244},"np.sqrt(b,",[25,93584,93125],{"class":5326},[25,93586,290],{"class":240},[25,93588,93520],{"class":244},[182,93590,93592],{"id":93591},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[99,93594,93595],{},"对数组中的元素累计求和，可指定轴",[99,93597,93598],{},"#累计求和的意思是：",[99,93600,93601],{},"a = np.array([1, 2, 3, 4])",[99,93603,93604],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[15,93606,93608],{"className":30449,"code":93607,"language":30451,"meta":20,"style":20},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[22,93609,93610,93626,93631,93636],{"__ignoreMap":20},[25,93611,93612,93614,93616,93618,93620,93622,93624],{"class":27,"line":28},[25,93613,506],{"class":244},[25,93615,290],{"class":240},[25,93617,93073],{"class":244},[25,93619,460],{"class":35},[25,93621,621],{"class":244},[25,93623,689],{"class":35},[25,93625,251],{"class":244},[25,93627,93628],{"class":27,"line":39},[25,93629,93630],{"class":244},"np.cumsum(b)\n",[25,93632,93633],{"class":27,"line":51},[25,93634,93635],{"class":302},"#结果：\n",[25,93637,93638],{"class":27,"line":59},[25,93639,93640],{"class":302},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[182,93642,93644],{"id":93643},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[15,93646,93648],{"className":30449,"code":93647,"language":30451,"meta":20,"style":20},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[22,93649,93650,93666,93671,93676,93680],{"__ignoreMap":20},[25,93651,93652,93654,93656,93658,93660,93662,93664],{"class":27,"line":28},[25,93653,506],{"class":244},[25,93655,290],{"class":240},[25,93657,93073],{"class":244},[25,93659,460],{"class":35},[25,93661,621],{"class":244},[25,93663,689],{"class":35},[25,93665,251],{"class":244},[25,93667,93668],{"class":27,"line":39},[25,93669,93670],{"class":302},"#对数组中的元素累计求积，可指定轴\n",[25,93672,93673],{"class":27,"line":51},[25,93674,93675],{"class":244},"np.cumprod(b)\n",[25,93677,93678],{"class":27,"line":59},[25,93679,93635],{"class":302},[25,93681,93682],{"class":27,"line":67},[25,93683,93684],{"class":302},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[182,93686,93688],{"id":93687},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[15,93690,93692],{"className":30449,"code":93691,"language":30451,"meta":20,"style":20},"#删除数组中的重复数据，并对数据进行排序\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",[22,93693,93694,93699,93747,93752,93756],{"__ignoreMap":20},[25,93695,93696],{"class":27,"line":28},[25,93697,93698],{"class":302},"#删除数组中的重复数据，并对数据进行排序\n",[25,93700,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729,93731,93733,93735,93737,93739,93741,93743,93745],{"class":27,"line":39},[25,93702,481],{"class":244},[25,93704,290],{"class":240},[25,93706,93095],{"class":244},[25,93708,460],{"class":35},[25,93710,621],{"class":244},[25,93712,321],{"class":35},[25,93714,621],{"class":244},[25,93716,315],{"class":35},[25,93718,621],{"class":244},[25,93720,741],{"class":35},[25,93722,621],{"class":244},[25,93724,315],{"class":35},[25,93726,621],{"class":244},[25,93728,689],{"class":35},[25,93730,621],{"class":244},[25,93732,440],{"class":35},[25,93734,621],{"class":244},[25,93736,434],{"class":35},[25,93738,621],{"class":244},[25,93740,1018],{"class":35},[25,93742,621],{"class":244},[25,93744,536],{"class":35},[25,93746,4767],{"class":244},[25,93748,93749],{"class":27,"line":51},[25,93750,93751],{"class":244},"np.unique(a)\n",[25,93753,93754],{"class":27,"line":59},[25,93755,93635],{"class":302},[25,93757,93758],{"class":27,"line":67},[25,93759,93760],{"class":302},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[99,93762,93763],{},"升序形式排序",[182,93765,93767],{"id":93766},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[15,93769,93771],{"className":30449,"code":93770,"language":30451,"meta":20,"style":20},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[22,93772,93773,93821,93826],{"__ignoreMap":20},[25,93774,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803,93805,93807,93809,93811,93813,93815,93817,93819],{"class":27,"line":28},[25,93776,481],{"class":244},[25,93778,290],{"class":240},[25,93780,93095],{"class":244},[25,93782,460],{"class":35},[25,93784,621],{"class":244},[25,93786,321],{"class":35},[25,93788,621],{"class":244},[25,93790,315],{"class":35},[25,93792,621],{"class":244},[25,93794,741],{"class":35},[25,93796,621],{"class":244},[25,93798,315],{"class":35},[25,93800,621],{"class":244},[25,93802,689],{"class":35},[25,93804,621],{"class":244},[25,93806,440],{"class":35},[25,93808,621],{"class":244},[25,93810,434],{"class":35},[25,93812,621],{"class":244},[25,93814,1018],{"class":35},[25,93816,621],{"class":244},[25,93818,536],{"class":35},[25,93820,4767],{"class":244},[25,93822,93823],{"class":27,"line":39},[25,93824,93825],{"class":302},"#返回数组中非零元素的索引\n",[25,93827,93828],{"class":27,"line":51},[25,93829,93830],{"class":244},"np.nonzero(a)\n",[182,93832,93834],{"id":93833},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[15,93836,93838],{"className":30449,"code":93837,"language":30451,"meta":20,"style":20},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[22,93839,93840,93888,93893],{"__ignoreMap":20},[25,93841,93842,93844,93846,93848,93850,93852,93854,93856,93858,93860,93862,93864,93866,93868,93870,93872,93874,93876,93878,93880,93882,93884,93886],{"class":27,"line":28},[25,93843,481],{"class":244},[25,93845,290],{"class":240},[25,93847,93095],{"class":244},[25,93849,460],{"class":35},[25,93851,621],{"class":244},[25,93853,321],{"class":35},[25,93855,621],{"class":244},[25,93857,315],{"class":35},[25,93859,621],{"class":244},[25,93861,741],{"class":35},[25,93863,621],{"class":244},[25,93865,315],{"class":35},[25,93867,621],{"class":244},[25,93869,689],{"class":35},[25,93871,621],{"class":244},[25,93873,440],{"class":35},[25,93875,621],{"class":244},[25,93877,434],{"class":35},[25,93879,621],{"class":244},[25,93881,1018],{"class":35},[25,93883,621],{"class":244},[25,93885,536],{"class":35},[25,93887,4767],{"class":244},[25,93889,93890],{"class":27,"line":39},[25,93891,93892],{"class":302},"#计算一组数中最大值与最小值的差，可指定轴\n",[25,93894,93895],{"class":27,"line":51},[25,93896,93897],{"class":244},"np.ptp(a)\n",[159,93899,93900],{},"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":20,"searchDepth":39,"depth":39,"links":93902},[93903,93904,93905,93906,93907,93908,93909,93910,93911,93912,93913],{"id":93165,"depth":39,"text":93166},{"id":93208,"depth":39,"text":93209},{"id":93316,"depth":39,"text":93317},{"id":93410,"depth":39,"text":93411},{"id":93450,"depth":39,"text":93451},{"id":93523,"depth":39,"text":93524},{"id":93591,"depth":39,"text":93592},{"id":93643,"depth":39,"text":93644},{"id":93687,"depth":39,"text":93688},{"id":93766,"depth":39,"text":93767},{"id":93833,"depth":39,"text":93834},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93151,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93920,"title":93921,"body":93922,"description":164,"extension":165,"meta":94577,"navigation":167,"path":94578,"seo":94579,"stem":94580,"__hash__":94581},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93923,"toc":94565},[93924,93927,93931,93934,94150,94154,94157,94366,94370,94436,94441,94445,94448,94451,94489,94493,94496,94501,94505,94508,94511,94516,94520,94523,94527,94530,94533,94538,94542,94545,94548,94553,94557,94562],[10,93925,93921],{"id":93926},"_12其他常用函数",[182,93928,93930],{"id":93929},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[99,93932,93933],{},"将数组的数据按照行列复制扩展",[15,93935,93937],{"className":30449,"code":93936,"language":30451,"meta":20,"style":20},"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",[22,93938,93939,93955,93964,93968,93973,93978,93991,93995,94000,94005,94010,94014,94019,94043,94055,94059,94063,94068,94073,94078,94083,94087,94100,94104,94108,94113,94118,94123,94128,94133,94137,94141,94146],{"__ignoreMap":20},[25,93940,93941,93943,93945,93947,93949,93951,93953],{"class":27,"line":28},[25,93942,481],{"class":244},[25,93944,290],{"class":240},[25,93946,93073],{"class":244},[25,93948,460],{"class":35},[25,93950,621],{"class":244},[25,93952,562],{"class":35},[25,93954,251],{"class":244},[25,93956,93957,93960,93962],{"class":27,"line":39},[25,93958,93959],{"class":244},"np.tile(a,",[25,93961,321],{"class":35},[25,93963,251],{"class":244},[25,93965,93966],{"class":27,"line":51},[25,93967,93635],{"class":302},[25,93969,93970],{"class":27,"line":59},[25,93971,93972],{"class":302},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[25,93974,93975],{"class":27,"line":67},[25,93976,93977],{"class":302},"#行复制两次，列复制三次\n",[25,93979,93980,93983,93985,93987,93989],{"class":27,"line":75},[25,93981,93982],{"class":244},"np.tile(a,(",[25,93984,321],{"class":35},[25,93986,621],{"class":244},[25,93988,315],{"class":35},[25,93990,30568],{"class":244},[25,93992,93993],{"class":27,"line":83},[25,93994,93635],{"class":302},[25,93996,93997],{"class":27,"line":91},[25,93998,93999],{"class":45},"'''\n",[25,94001,94002],{"class":27,"line":1429},[25,94003,94004],{"class":45},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[25,94006,94007],{"class":27,"line":1441},[25,94008,94009],{"class":45},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[25,94011,94012],{"class":27,"line":1723},[25,94013,93999],{"class":45},[25,94015,94016],{"class":27,"line":1728},[25,94017,94018],{"class":302},"#创建二维数组\n",[25,94020,94021,94023,94025,94027,94029,94031,94033,94035,94037,94039,94041],{"class":27,"line":1734},[25,94022,93377],{"class":244},[25,94024,290],{"class":240},[25,94026,93073],{"class":244},[25,94028,460],{"class":35},[25,94030,621],{"class":244},[25,94032,766],{"class":35},[25,94034,93078],{"class":244},[25,94036,536],{"class":35},[25,94038,621],{"class":244},[25,94040,315],{"class":35},[25,94042,251],{"class":244},[25,94044,94045,94048,94050,94052],{"class":27,"line":1739},[25,94046,94047],{"class":244},"np.tile(aa,",[25,94049,321],{"class":35},[25,94051,672],{"class":244},[25,94053,94054],{"class":302},"#一个数的时候就是行\n",[25,94056,94057],{"class":27,"line":1753},[25,94058,93635],{"class":302},[25,94060,94061],{"class":27,"line":1758},[25,94062,93999],{"class":45},[25,94064,94065],{"class":27,"line":1764},[25,94066,94067],{"class":45},"array([[ 1,  2,  3,  1,  2,  3],\n",[25,94069,94070],{"class":27,"line":1785},[25,94071,94072],{"class":45},"       [ 4,  5,  6,  4,  5,  6],\n",[25,94074,94075],{"class":27,"line":1790},[25,94076,94077],{"class":45},"       [ 7,  8,  9,  7,  8,  9],\n",[25,94079,94080],{"class":27,"line":1804},[25,94081,94082],{"class":45},"       [10, 11, 12, 10, 11, 12]])\n",[25,94084,94085],{"class":27,"line":1809},[25,94086,93999],{"class":45},[25,94088,94089,94092,94094,94096,94098],{"class":27,"line":1838},[25,94090,94091],{"class":244},"np.tile(aa,(",[25,94093,321],{"class":35},[25,94095,621],{"class":244},[25,94097,315],{"class":35},[25,94099,30568],{"class":244},[25,94101,94102],{"class":27,"line":1843},[25,94103,93635],{"class":302},[25,94105,94106],{"class":27,"line":1860},[25,94107,93999],{"class":45},[25,94109,94110],{"class":27,"line":1865},[25,94111,94112],{"class":45},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[25,94114,94115],{"class":27,"line":1870},[25,94116,94117],{"class":45},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[25,94119,94120],{"class":27,"line":1875},[25,94121,94122],{"class":45},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[25,94124,94125],{"class":27,"line":1889},[25,94126,94127],{"class":45},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[25,94129,94130],{"class":27,"line":1894},[25,94131,94132],{"class":45},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[25,94134,94135],{"class":27,"line":2687},[25,94136,94117],{"class":45},[25,94138,94139],{"class":27,"line":2701},[25,94140,94122],{"class":45},[25,94142,94143],{"class":27,"line":2709},[25,94144,94145],{"class":45},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[25,94147,94148],{"class":27,"line":2714},[25,94149,93999],{"class":45},[182,94151,94153],{"id":94152},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[99,94155,94156],{},"repeat()将数组中的每个元素重复若干次",[15,94158,94160],{"className":30449,"code":94159,"language":30451,"meta":20,"style":20},"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",[22,94161,94162,94178,94187,94191,94196,94220,94225,94234,94238,94243,94247,94252,94268,94272,94276,94281,94286,94291,94295,94300,94304,94309,94314,94318,94334,94338,94342,94347,94352,94357,94362],{"__ignoreMap":20},[25,94163,94164,94166,94168,94170,94172,94174,94176],{"class":27,"line":28},[25,94165,481],{"class":244},[25,94167,290],{"class":240},[25,94169,93073],{"class":244},[25,94171,460],{"class":35},[25,94173,621],{"class":244},[25,94175,562],{"class":35},[25,94177,251],{"class":244},[25,94179,94180,94183,94185],{"class":27,"line":39},[25,94181,94182],{"class":244},"np.repeat(a,",[25,94184,315],{"class":35},[25,94186,251],{"class":244},[25,94188,94189],{"class":27,"line":51},[25,94190,93635],{"class":302},[25,94192,94193],{"class":27,"line":59},[25,94194,94195],{"class":302},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[25,94197,94198,94200,94202,94204,94206,94208,94210,94212,94214,94216,94218],{"class":27,"line":67},[25,94199,93377],{"class":244},[25,94201,290],{"class":240},[25,94203,93073],{"class":244},[25,94205,460],{"class":35},[25,94207,621],{"class":244},[25,94209,766],{"class":35},[25,94211,93078],{"class":244},[25,94213,536],{"class":35},[25,94215,621],{"class":244},[25,94217,315],{"class":35},[25,94219,251],{"class":244},[25,94221,94222],{"class":27,"line":75},[25,94223,94224],{"class":302},"#这个重复之后二维变成一维\n",[25,94226,94227,94230,94232],{"class":27,"line":83},[25,94228,94229],{"class":244},"np.repeat(aa,",[25,94231,321],{"class":35},[25,94233,251],{"class":244},[25,94235,94236],{"class":27,"line":91},[25,94237,93999],{"class":45},[25,94239,94240],{"class":27,"line":1429},[25,94241,94242],{"class":45},"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",[25,94244,94245],{"class":27,"line":1441},[25,94246,93999],{"class":45},[25,94248,94249],{"class":27,"line":1723},[25,94250,94251],{"class":302},"#指定axis\n",[25,94253,94254,94256,94258,94260,94262,94264,94266],{"class":27,"line":1728},[25,94255,94229],{"class":244},[25,94257,321],{"class":35},[25,94259,621],{"class":244},[25,94261,47585],{"class":5326},[25,94263,290],{"class":240},[25,94265,434],{"class":35},[25,94267,251],{"class":244},[25,94269,94270],{"class":27,"line":1734},[25,94271,93635],{"class":302},[25,94273,94274],{"class":27,"line":1739},[25,94275,93999],{"class":45},[25,94277,94278],{"class":27,"line":1753},[25,94279,94280],{"class":45},"array([[ 1,  2,  3],\n",[25,94282,94283],{"class":27,"line":1758},[25,94284,94285],{"class":45},"       [ 1,  2,  3],\n",[25,94287,94288],{"class":27,"line":1764},[25,94289,94290],{"class":45},"       [ 4,  5,  6],\n",[25,94292,94293],{"class":27,"line":1785},[25,94294,94290],{"class":45},[25,94296,94297],{"class":27,"line":1790},[25,94298,94299],{"class":45},"       [ 7,  8,  9],\n",[25,94301,94302],{"class":27,"line":1804},[25,94303,94299],{"class":45},[25,94305,94306],{"class":27,"line":1809},[25,94307,94308],{"class":45},"       [10, 11, 12],\n",[25,94310,94311],{"class":27,"line":1838},[25,94312,94313],{"class":45},"       [10, 11, 12]])\n",[25,94315,94316],{"class":27,"line":1843},[25,94317,93999],{"class":45},[25,94319,94320,94322,94324,94326,94328,94330,94332],{"class":27,"line":1860},[25,94321,94229],{"class":244},[25,94323,321],{"class":35},[25,94325,621],{"class":244},[25,94327,47585],{"class":5326},[25,94329,290],{"class":240},[25,94331,460],{"class":35},[25,94333,251],{"class":244},[25,94335,94336],{"class":27,"line":1865},[25,94337,93635],{"class":302},[25,94339,94340],{"class":27,"line":1870},[25,94341,93999],{"class":45},[25,94343,94344],{"class":27,"line":1875},[25,94345,94346],{"class":45},"array([[ 1,  1,  2,  2,  3,  3],\n",[25,94348,94349],{"class":27,"line":1889},[25,94350,94351],{"class":45},"       [ 4,  4,  5,  5,  6,  6],\n",[25,94353,94354],{"class":27,"line":1894},[25,94355,94356],{"class":45},"       [ 7,  7,  8,  8,  9,  9],\n",[25,94358,94359],{"class":27,"line":2687},[25,94360,94361],{"class":45},"       [10, 10, 11, 11, 12, 12]])\n",[25,94363,94364],{"class":27,"line":2701},[25,94365,93999],{"class":45},[182,94367,94369],{"id":94368},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[15,94371,94373],{"className":30449,"code":94372,"language":30451,"meta":20,"style":20},"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",[22,94374,94375,94391,94396,94408,94412,94417,94427,94431],{"__ignoreMap":20},[25,94376,94377,94379,94381,94383,94385,94387,94389],{"class":27,"line":28},[25,94378,481],{"class":244},[25,94380,290],{"class":240},[25,94382,93073],{"class":244},[25,94384,460],{"class":35},[25,94386,621],{"class":244},[25,94388,562],{"class":35},[25,94390,251],{"class":244},[25,94392,94393],{"class":27,"line":39},[25,94394,94395],{"class":302},"#array([，2，3，4])\n",[25,94397,94398,94401,94403,94405],{"class":27,"line":51},[25,94399,94400],{"class":244},"np.roll(a,",[25,94402,321],{"class":35},[25,94404,672],{"class":244},[25,94406,94407],{"class":302},"#传正数向后调多少位，传负数向前调多少位\n",[25,94409,94410],{"class":27,"line":59},[25,94411,93635],{"class":302},[25,94413,94414],{"class":27,"line":67},[25,94415,94416],{"class":302},"#array([3, 4, 1, 2])\n",[25,94418,94419,94421,94423,94425],{"class":27,"line":75},[25,94420,94400],{"class":244},[25,94422,775],{"class":240},[25,94424,460],{"class":35},[25,94426,251],{"class":244},[25,94428,94429],{"class":27,"line":83},[25,94430,93635],{"class":302},[25,94432,94433],{"class":27,"line":91},[25,94434,94435],{"class":302},"#array([2, 3, 4, 1])\n",[99,94437,94438],{},[155,94439],{"alt":20,"src":94440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[182,94442,94444],{"id":94443},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[99,94446,94447],{},"resize()重新调整数组的大小",[99,94449,94450],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[15,94452,94454],{"className":30449,"code":94453,"language":30451,"meta":20,"style":20},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[22,94455,94456,94461,94474],{"__ignoreMap":20},[25,94457,94458],{"class":27,"line":28},[25,94459,94460],{"class":302},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[25,94462,94463,94466,94468,94470,94472],{"class":27,"line":39},[25,94464,94465],{"class":244},"np.resize(aa,(",[25,94467,321],{"class":35},[25,94469,621],{"class":244},[25,94471,587],{"class":35},[25,94473,30568],{"class":244},[25,94475,94476,94478,94480,94482,94484,94486],{"class":27,"line":51},[25,94477,94465],{"class":244},[25,94479,321],{"class":35},[25,94481,621],{"class":244},[25,94483,663],{"class":35},[25,94485,82842],{"class":244},[25,94487,94488],{"class":302},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[182,94490,94492],{"id":94491},"_125-placeput函数","12.5 place()\u002Fput()函数",[99,94494,94495],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[99,94497,94498],{},[155,94499],{"alt":20,"src":94500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[182,94502,94504],{"id":94503},"_126-保存加载文件","12.6 保存加载文件",[99,94506,94507],{},"savetxt():将数据保存到txt文件中",[99,94509,94510],{},"loadtxt():从文件加载数据",[99,94512,94513],{},[155,94514],{"alt":20,"src":94515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[182,94517,94519],{"id":94518},"_127-genfromtxt函数","12.7 genfromtxt()函数",[99,94521,94522],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[182,94524,94526],{"id":94525},"_128-anyall函数","12.8 any()\u002Fall()函数",[99,94528,94529],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[99,94531,94532],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[99,94534,94535],{},[155,94536],{"alt":20,"src":94537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[182,94539,94541],{"id":94540},"_129-where语句","12.9 where语句",[99,94543,94544],{},"np.where(条件,x,y)",[99,94546,94547],{},"如果条件为True,对应值为x,否则对应值为y",[99,94549,94550],{},[155,94551],{"alt":20,"src":94552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[182,94554,94556],{"id":94555},"_1210-dot矩阵","12.10 dot()矩阵",[99,94558,94559],{},[155,94560],{"alt":20,"src":94561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[159,94563,94564],{},"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":20,"searchDepth":39,"depth":39,"links":94566},[94567,94568,94569,94570,94571,94572,94573,94574,94575,94576],{"id":93929,"depth":39,"text":93930},{"id":94152,"depth":39,"text":94153},{"id":94368,"depth":39,"text":94369},{"id":94443,"depth":39,"text":94444},{"id":94491,"depth":39,"text":94492},{"id":94503,"depth":39,"text":94504},{"id":94518,"depth":39,"text":94519},{"id":94525,"depth":39,"text":94526},{"id":94540,"depth":39,"text":94541},{"id":94555,"depth":39,"text":94556},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93921,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94583,"title":94584,"body":94585,"description":164,"extension":165,"meta":94938,"navigation":167,"path":94939,"seo":94940,"stem":94941,"__hash__":94942},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94586,"toc":94936},[94587,94590,94593,94596,94599,94602,94667,94669,94933],[10,94588,94584],{"id":94589},"_13数组排序",[99,94591,94592],{},"排序主要用到的方法是np.sort和np.argsort",[99,94594,94595],{},"其中np.sort()对数组直接排序",[99,94597,94598],{},"而np.argsort()是返回排序后的原始索引",[99,94600,94601],{},"①一维数组",[15,94603,94605],{"className":30449,"code":94604,"language":30451,"meta":20,"style":20},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[22,94606,94607,94611,94651,94659],{"__ignoreMap":20},[25,94608,94609],{"class":27,"line":28},[25,94610,93176],{"class":302},[25,94612,94613,94615,94617,94619,94621,94623,94625,94627,94629,94631,94633,94635,94637,94639,94641,94643,94645,94647,94649],{"class":27,"line":39},[25,94614,481],{"class":244},[25,94616,290],{"class":240},[25,94618,93095],{"class":244},[25,94620,315],{"class":35},[25,94622,621],{"class":244},[25,94624,741],{"class":35},[25,94626,621],{"class":244},[25,94628,638],{"class":35},[25,94630,621],{"class":244},[25,94632,1018],{"class":35},[25,94634,621],{"class":244},[25,94636,522],{"class":35},[25,94638,621],{"class":244},[25,94640,1136],{"class":35},[25,94642,621],{"class":244},[25,94644,587],{"class":35},[25,94646,621],{"class":244},[25,94648,689],{"class":35},[25,94650,4767],{"class":244},[25,94652,94653,94656],{"class":27,"line":51},[25,94654,94655],{"class":244},"np.sort(a)",[25,94657,94658],{"class":302},"#升序排序\n",[25,94660,94661,94664],{"class":27,"line":59},[25,94662,94663],{"class":244},"np.argsort(a)",[25,94665,94666],{"class":302},"#按照元素大小来索引排序\n",[99,94668,93362],{},[15,94670,94672],{"className":30449,"code":94671,"language":30451,"meta":20,"style":20},"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",[22,94673,94674,94686,94712,94717,94721,94726,94731,94736,94741,94745,94753,94757,94762,94767,94772,94777,94781,94786,94799,94803,94808,94813,94818,94823,94827,94832,94844,94848,94852,94856,94860,94864,94868,94873,94888,94893,94902,94907,94911,94915,94920,94924,94929],{"__ignoreMap":20},[25,94675,94676,94679,94681,94683],{"class":27,"line":28},[25,94677,94678],{"class":244},"np.random.seed(",[25,94680,434],{"class":35},[25,94682,672],{"class":244},[25,94684,94685],{"class":302},"#保证每次值一样\n",[25,94687,94688,94690,94692,94694,94696,94698,94700,94702,94704,94706,94708,94710],{"class":27,"line":39},[25,94689,93377],{"class":244},[25,94691,290],{"class":240},[25,94693,93185],{"class":244},[25,94695,554],{"class":35},[25,94697,621],{"class":244},[25,94699,31567],{"class":5326},[25,94701,290],{"class":240},[25,94703,245],{"class":244},[25,94705,536],{"class":35},[25,94707,621],{"class":244},[25,94709,587],{"class":35},[25,94711,30568],{"class":244},[25,94713,94714],{"class":27,"line":51},[25,94715,94716],{"class":302},"#原数组：\n",[25,94718,94719],{"class":27,"line":59},[25,94720,93999],{"class":45},[25,94722,94723],{"class":27,"line":67},[25,94724,94725],{"class":45},"array([[44, 47, 64, 67, 67,  9],\n",[25,94727,94728],{"class":27,"line":75},[25,94729,94730],{"class":45},"       [83, 21, 36, 87, 70, 88],\n",[25,94732,94733],{"class":27,"line":83},[25,94734,94735],{"class":45},"       [88, 12, 58, 65, 39, 87],\n",[25,94737,94738],{"class":27,"line":91},[25,94739,94740],{"class":45},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[25,94742,94743],{"class":27,"line":1429},[25,94744,93999],{"class":45},[25,94746,94747,94750],{"class":27,"line":1441},[25,94748,94749],{"class":244},"np.sort(aa)",[25,94751,94752],{"class":302},"#每行进行了排序\n",[25,94754,94755],{"class":27,"line":1723},[25,94756,93999],{"class":45},[25,94758,94759],{"class":27,"line":1728},[25,94760,94761],{"class":45},"array([[ 9, 44, 47, 64, 67, 67],\n",[25,94763,94764],{"class":27,"line":1734},[25,94765,94766],{"class":45},"       [21, 36, 70, 83, 87, 88],\n",[25,94768,94769],{"class":27,"line":1739},[25,94770,94771],{"class":45},"       [12, 39, 58, 65, 87, 88],\n",[25,94773,94774],{"class":27,"line":1753},[25,94775,94776],{"class":45},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[25,94778,94779],{"class":27,"line":1758},[25,94780,93999],{"class":45},[25,94782,94783],{"class":27,"line":1764},[25,94784,94785],{"class":302},"#axis=0时\n",[25,94787,94788,94791,94793,94795,94797],{"class":27,"line":1785},[25,94789,94790],{"class":244},"np.sort(aa,",[25,94792,47585],{"class":5326},[25,94794,290],{"class":240},[25,94796,434],{"class":35},[25,94798,251],{"class":244},[25,94800,94801],{"class":27,"line":1790},[25,94802,93999],{"class":45},[25,94804,94805],{"class":27,"line":1804},[25,94806,94807],{"class":45},"array([[44, 12, 36, 37, 25,  9],\n",[25,94809,94810],{"class":27,"line":1809},[25,94811,94812],{"class":45},"       [46, 21, 58, 65, 39, 77],\n",[25,94814,94815],{"class":27,"line":1838},[25,94816,94817],{"class":45},"       [83, 47, 64, 67, 67, 87],\n",[25,94819,94820],{"class":27,"line":1843},[25,94821,94822],{"class":45},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[25,94824,94825],{"class":27,"line":1860},[25,94826,93999],{"class":45},[25,94828,94829],{"class":27,"line":1865},[25,94830,94831],{"class":302},"#axis=1时,为默认值\n",[25,94833,94834,94836,94838,94840,94842],{"class":27,"line":1870},[25,94835,94790],{"class":244},[25,94837,47585],{"class":5326},[25,94839,290],{"class":240},[25,94841,460],{"class":35},[25,94843,251],{"class":244},[25,94845,94846],{"class":27,"line":1875},[25,94847,93999],{"class":45},[25,94849,94850],{"class":27,"line":1889},[25,94851,94761],{"class":45},[25,94853,94854],{"class":27,"line":1894},[25,94855,94766],{"class":45},[25,94857,94858],{"class":27,"line":2687},[25,94859,94771],{"class":45},[25,94861,94862],{"class":27,"line":2701},[25,94863,94776],{"class":45},[25,94865,94866],{"class":27,"line":2709},[25,94867,93999],{"class":45},[25,94869,94870],{"class":27,"line":2714},[25,94871,94872],{"class":302},"#按最后一列排序\n",[25,94874,94875,94877,94879,94882,94884,94886],{"class":27,"line":2720},[25,94876,506],{"class":244},[25,94878,290],{"class":240},[25,94880,94881],{"class":244},"aa[:,",[25,94883,775],{"class":240},[25,94885,460],{"class":35},[25,94887,33317],{"class":244},[25,94889,94890],{"class":27,"line":2726},[25,94891,94892],{"class":302},"#获取最后一列排好序的索引\n",[25,94894,94895,94897,94899],{"class":27,"line":2731},[25,94896,74129],{"class":244},[25,94898,290],{"class":240},[25,94900,94901],{"class":244},"np.argsort(b)\n",[25,94903,94904],{"class":27,"line":8058},[25,94905,94906],{"class":244},"aa[index]\n",[25,94908,94909],{"class":27,"line":8082},[25,94910,93999],{"class":45},[25,94912,94913],{"class":27,"line":8087},[25,94914,94725],{"class":45},[25,94916,94917],{"class":27,"line":8093},[25,94918,94919],{"class":45},"       [46, 88, 81, 37, 25, 77],\n",[25,94921,94922],{"class":27,"line":8120},[25,94923,94735],{"class":45},[25,94925,94926],{"class":27,"line":8125},[25,94927,94928],{"class":45},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[25,94930,94931],{"class":27,"line":8131},[25,94932,93999],{"class":45},[159,94934,94935],{},"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":20,"searchDepth":39,"depth":39,"links":94937},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94584,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94944,"title":94945,"body":94946,"description":164,"extension":165,"meta":94976,"navigation":167,"path":94977,"seo":94978,"stem":94979,"__hash__":94980},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94947,"toc":94974},[94948,94951,94954,94957,94960,94963,94966,94969],[10,94949,94945],{"id":94950},"_14广播机制",[99,94952,94953],{},"广播的规则：",[99,94955,94956],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[99,94958,94959],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[99,94961,94962],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[99,94964,94965],{},"3.如果没有维度形状为1，则会引发异常",[99,94967,94968],{},"也就是只有维度或者个数为1才可以进行广播操作",[99,94970,94971],{},[155,94972],{"alt":20,"src":94973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":20,"searchDepth":39,"depth":39,"links":94975},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94945,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94982,"title":94983,"body":94984,"description":164,"extension":165,"meta":95082,"navigation":167,"path":95083,"seo":95084,"stem":95085,"__hash__":95086},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94985,"toc":95080},[94986,94989,94992,95077],[10,94987,94983],{"id":94988},"_15比较掩码",[99,94990,94991],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[15,94993,94995],{"className":30449,"code":94994,"language":30451,"meta":20,"style":20},"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",[22,94996,94997,95043,95054,95068,95072],{"__ignoreMap":20},[25,94998,94999,95001,95003,95006,95008,95010,95012,95014,95016,95018,95020,95022,95024,95026,95028,95030,95032,95034,95036,95038,95040],{"class":27,"line":28},[25,95000,481],{"class":244},[25,95002,290],{"class":240},[25,95004,95005],{"class":244},"np.array([[",[25,95007,460],{"class":35},[25,95009,621],{"class":244},[25,95011,321],{"class":35},[25,95013,621],{"class":244},[25,95015,315],{"class":35},[25,95017,48101],{"class":244},[25,95019,715],{"class":35},[25,95021,621],{"class":244},[25,95023,741],{"class":35},[25,95025,621],{"class":244},[25,95027,766],{"class":35},[25,95029,48101],{"class":244},[25,95031,968],{"class":35},[25,95033,621],{"class":244},[25,95035,993],{"class":35},[25,95037,621],{"class":244},[25,95039,1018],{"class":35},[25,95041,95042],{"class":244},"]])\n",[25,95044,95045,95047,95049,95051],{"class":27,"line":39},[25,95046,481],{"class":244},[25,95048,1153],{"class":240},[25,95050,943],{"class":35},[25,95052,95053],{"class":302},"#结果是一个由True,False组成的数组\n",[25,95055,95056,95059,95061,95063,95065],{"class":27,"line":51},[25,95057,95058],{"class":244},"a[a",[25,95060,1153],{"class":240},[25,95062,943],{"class":35},[25,95064,1183],{"class":244},[25,95066,95067],{"class":302},"#小于20的元素会存到这个数组中\n",[25,95069,95070],{"class":27,"line":59},[25,95071,93635],{"class":302},[25,95073,95074],{"class":27,"line":67},[25,95075,95076],{"class":302},"#array([ 1,  2,  3, 11, 12, 13])\n",[159,95078,95079],{},"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":20,"searchDepth":39,"depth":39,"links":95081},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94983,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95088,"title":95089,"body":95090,"description":164,"extension":165,"meta":95182,"navigation":167,"path":95183,"seo":95184,"stem":95185,"__hash__":95186},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95091,"toc":95180},[95092,95095,95098,95101,95104,95107,95172,95177],[10,95093,95089],{"id":95094},"_16魔法命令time",[99,95096,95097],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[99,95099,95100],{},"%:行模式",[99,95102,95103],{},"%%:单元格模式",[99,95105,95106],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[15,95108,95110],{"className":30449,"code":95109,"language":30451,"meta":20,"style":20},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[22,95111,95112,95117,95124,95129,95138,95151,95155,95163],{"__ignoreMap":20},[25,95113,95114],{"class":27,"line":28},[25,95115,95116],{"class":302},"#程序执行时间\n",[25,95118,95119,95121],{"class":27,"line":39},[25,95120,30463],{"class":240},[25,95122,95123],{"class":244}," time \n",[25,95125,95126],{"class":27,"line":51},[25,95127,95128],{"class":302},"#获取时间\n",[25,95130,95131,95134,95136],{"class":27,"line":59},[25,95132,95133],{"class":244},"start",[25,95135,290],{"class":240},[25,95137,32489],{"class":244},[25,95139,95140,95143,95146,95148],{"class":27,"line":67},[25,95141,95142],{"class":244},"time.sleep(",[25,95144,95145],{"class":35},"0.4",[25,95147,672],{"class":244},[25,95149,95150],{"class":302},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[25,95152,95153],{"class":27,"line":75},[25,95154,95128],{"class":302},[25,95156,95157,95159,95161],{"class":27,"line":83},[25,95158,45872],{"class":244},[25,95160,290],{"class":240},[25,95162,32489],{"class":244},[25,95164,95165,95167,95169],{"class":27,"line":91},[25,95166,45872],{"class":244},[25,95168,775],{"class":240},[25,95170,95171],{"class":244},"start\n",[99,95173,95174],{},[155,95175],{"alt":20,"src":95176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[159,95178,95179],{},"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":20,"searchDepth":39,"depth":39,"links":95181},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95089,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95188,"title":95189,"body":95190,"description":164,"extension":165,"meta":95225,"navigation":167,"path":95226,"seo":95227,"stem":95228,"__hash__":95229},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95191,"toc":95223},[95192,95195,95198,95201,95204,95207,95210,95213,95218],[10,95193,95189],{"id":95194},"_17魔法命令timeit",[99,95196,95197],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[99,95199,95200],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[99,95202,95203],{},"单元格模式：",[99,95205,95206],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[99,95208,95209],{},"初始化语句执行次数由轮数来决定",[99,95211,95212],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[99,95214,95215],{},[155,95216],{"alt":20,"src":95217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[99,95219,95220],{},[155,95221],{"alt":20,"src":95222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":20,"searchDepth":39,"depth":39,"links":95224},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95189,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95231,"title":95232,"body":95233,"description":164,"extension":165,"meta":95251,"navigation":167,"path":95252,"seo":95253,"stem":95254,"__hash__":95255},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95234,"toc":95249},[95235,95238,95241,95244],[10,95236,95232],{"id":95237},"_18魔法命令writefile和run",[99,95239,95240],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[99,95242,95243],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[99,95245,95246],{},[155,95247],{"alt":20,"src":95248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":20,"searchDepth":39,"depth":39,"links":95250},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95232,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95257,"title":95258,"body":95259,"description":164,"extension":165,"meta":95312,"navigation":167,"path":95313,"seo":95314,"stem":95315,"__hash__":95316},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95260,"toc":95310},[95261,95264,95267,95269,95272,95275,95280,95283,95286,95289,95292,95295,95298,95301,95304,95307],[10,95262,95258],{"id":95263},"_19魔法命令memit",[99,95265,95266],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[99,95268,24707],{},[99,95270,95271],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[99,95273,95274],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[99,95276,95277],{},[155,95278],{"alt":20,"src":95279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[99,95281,95282],{},"补充：",[99,95284,95285],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[99,95287,95288],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[99,95290,95291],{},"解决方法：",[99,95293,95294],{},"1.cmd",[99,95296,95297],{},"2.依次输入以下代码：",[99,95299,95300],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[99,95302,95303],{},"pip install --upgrade ipython",[99,95305,95306],{},"#升级 memory_profiler 和 setuptools",[99,95308,95309],{},"pip install --upgrade memory_profiler setuptools",{"title":20,"searchDepth":39,"depth":39,"links":95311},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95258,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95318,"title":95319,"body":95320,"description":164,"extension":165,"meta":96966,"navigation":167,"path":96967,"seo":96968,"stem":96969,"__hash__":96970},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95321,"toc":96936},[95322,95325,95329,95333,95394,95397,95402,95406,95411,95416,95421,95426,95429,95434,95438,95442,95475,95478,95481,95484,95536,95539,95575,95578,95620,95624,95645,95647,95684,95686,95691,95693,95698,95702,95705,95733,95737,95741,95794,95798,95890,95894,95898,95901,95906,95910,95935,95940,95944,95947,95950,95953,95956,95959,95962,95965,95977,95981,95985,95988,96020,96023,96046,96049,96075,96078,96104,96107,96141,96144,96206,96210,96213,96217,96220,96246,96249,96252,96257,96260,96329,96331,96336,96397,96400,96411,96417,96422,96426,96429,96442,96446,96461,96463,96486,96488,96514,96517,96520,96523,96571,96573,96578,96582,96586,96613,96617,96644,96647,96652,96657,96747,96751,96809,96814,96817,96820,96862,96866,96922,96927,96930,96933],[10,95323,95319],{"id":95324},"_2创建数组",[182,95326,95328],{"id":95327},"_21-array函数创建数组","2.1 array()函数创建数组",[210,95330,95332],{"id":95331},"_221-函数语句","2.2.1 函数语句",[15,95334,95336],{"className":30449,"code":95335,"language":30451,"meta":20,"style":20},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[22,95337,95338],{"__ignoreMap":20},[25,95339,95340,95343,95346,95348,95350,95352,95354,95356,95359,95361,95364,95366,95369,95371,95373,95375,95378,95380,95383,95385,95388,95390,95392],{"class":27,"line":28},[25,95341,95342],{"class":244},"numpy.array(",[25,95344,95345],{"class":35},"object",[25,95347,12545],{"class":244},[25,95349,93571],{"class":5326},[25,95351,13674],{"class":240},[25,95353,39004],{"class":35},[25,95355,12545],{"class":244},[25,95357,95358],{"class":5326},"copy",[25,95360,13674],{"class":240},[25,95362,95363],{"class":35}," True",[25,95365,12545],{"class":244},[25,95367,95368],{"class":5326},"order",[25,95370,13674],{"class":240},[25,95372,39004],{"class":35},[25,95374,12545],{"class":244},[25,95376,95377],{"class":5326},"subok",[25,95379,13674],{"class":240},[25,95381,95382],{"class":35}," False",[25,95384,12545],{"class":244},[25,95386,95387],{"class":5326},"ndmin",[25,95389,13674],{"class":240},[25,95391,4203],{"class":35},[25,95393,251],{"class":244},[99,95395,95396],{},"参数：",[99,95398,95399],{},[155,95400],{"alt":20,"src":95401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[210,95403,95405],{"id":95404},"_222-实例","2.2.2 实例",[99,95407,95408],{},[155,95409],{"alt":20,"src":95410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[99,95412,95413],{},[155,95414],{"alt":20,"src":95415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[99,95417,95418],{},[155,95419],{"alt":20,"src":95420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[99,95422,95423],{},[155,95424],{"alt":20,"src":95425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[99,95427,95428],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[99,95430,95431],{},[155,95432],{"alt":20,"src":95433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[182,95435,95437],{"id":95436},"_22-随机数创建数组","2.2 随机数创建数组",[210,95439,95441],{"id":95440},"_221-random语句","2.2.1 random语句",[15,95443,95445],{"className":30449,"code":95444,"language":30451,"meta":20,"style":20},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[22,95446,95447,95452,95457,95465,95470],{"__ignoreMap":20},[25,95448,95449],{"class":27,"line":28},[25,95450,95451],{"class":302},"#random.random()\n",[25,95453,95454],{"class":27,"line":39},[25,95455,95456],{"class":302},"#确定随机种子,就是每次运行结果是相同的\n",[25,95458,95459,95461,95463],{"class":27,"line":51},[25,95460,94678],{"class":244},[25,95462,434],{"class":35},[25,95464,251],{"class":244},[25,95466,95467],{"class":27,"line":59},[25,95468,95469],{"class":244},"np.random.random()\n",[25,95471,95472],{"class":27,"line":67},[25,95473,95474],{"class":302},"#生成一个随机的数目\n",[99,95476,95477],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[99,95479,95480],{},"可以指定数组形状 size",[99,95482,95483],{},"①生成一维数组",[15,95485,95487],{"className":30449,"code":95486,"language":30451,"meta":20,"style":20},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[22,95488,95489,95494,95507,95512,95528],{"__ignoreMap":20},[25,95490,95491],{"class":27,"line":28},[25,95492,95493],{"class":302},"#random.random(size())\n",[25,95495,95496,95499,95501,95503,95505],{"class":27,"line":39},[25,95497,95498],{"class":244},"np.random.random(",[25,95500,31567],{"class":5326},[25,95502,290],{"class":240},[25,95504,562],{"class":35},[25,95506,251],{"class":244},[25,95508,95509],{"class":27,"line":51},[25,95510,95511],{"class":302},"#生成一位的五个元素\n",[25,95513,95514,95516,95518,95520,95522,95524,95526],{"class":27,"line":59},[25,95515,481],{"class":244},[25,95517,290],{"class":240},[25,95519,95498],{"class":244},[25,95521,31567],{"class":5326},[25,95523,290],{"class":240},[25,95525,536],{"class":35},[25,95527,251],{"class":244},[25,95529,95530,95533],{"class":27,"line":67},[25,95531,95532],{"class":244},"a.shape ",[25,95534,95535],{"class":302},"#输出数组形状\n",[99,95537,95538],{},"②生成二维数组",[15,95540,95542],{"className":30449,"code":95541,"language":30451,"meta":20,"style":20},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[22,95543,95544,95548,95570],{"__ignoreMap":20},[25,95545,95546],{"class":27,"line":28},[25,95547,93372],{"class":302},[25,95549,95550,95552,95554,95556,95558,95560,95562,95564,95566,95568],{"class":27,"line":39},[25,95551,93377],{"class":244},[25,95553,290],{"class":240},[25,95555,95498],{"class":244},[25,95557,31567],{"class":5326},[25,95559,290],{"class":240},[25,95561,245],{"class":244},[25,95563,536],{"class":35},[25,95565,621],{"class":244},[25,95567,562],{"class":35},[25,95569,30568],{"class":244},[25,95571,95572],{"class":27,"line":51},[25,95573,95574],{"class":302},"#生成四行五列的数组\n",[99,95576,95577],{},"③生成三维数组",[15,95579,95581],{"className":30449,"code":95580,"language":30451,"meta":20,"style":20},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[22,95582,95583,95588,95615],{"__ignoreMap":20},[25,95584,95585],{"class":27,"line":28},[25,95586,95587],{"class":302},"#三维数组\n",[25,95589,95590,95593,95595,95597,95599,95601,95603,95605,95607,95609,95611,95613],{"class":27,"line":39},[25,95591,95592],{"class":244},"aaa",[25,95594,290],{"class":240},[25,95596,95498],{"class":244},[25,95598,31567],{"class":5326},[25,95600,290],{"class":240},[25,95602,245],{"class":244},[25,95604,321],{"class":35},[25,95606,621],{"class":244},[25,95608,315],{"class":35},[25,95610,621],{"class":244},[25,95612,536],{"class":35},[25,95614,30568],{"class":244},[25,95616,95617],{"class":27,"line":51},[25,95618,95619],{"class":244},"aaa.shape\n",[210,95621,95623],{"id":95622},"_222-randint语句","2.2.2 randint语句",[15,95625,95627],{"className":30449,"code":95626,"language":30451,"meta":20,"style":20},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[22,95628,95629,95634],{"__ignoreMap":20},[25,95630,95631],{"class":27,"line":28},[25,95632,95633],{"class":302},"#生成随机的整数 random.randint(low,high,size)\n",[25,95635,95636,95638,95640,95642],{"class":27,"line":39},[25,95637,93185],{"class":244},[25,95639,562],{"class":35},[25,95641,13824],{"class":244},[25,95643,95644],{"class":302},"#0~5中的随机一个数\n",[99,95646,95483],{},[15,95648,95650],{"className":30449,"code":95649,"language":30451,"meta":20,"style":20},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[22,95651,95652,95657,95679],{"__ignoreMap":20},[25,95653,95654],{"class":27,"line":28},[25,95655,95656],{"class":302},"#一维\n",[25,95658,95659,95661,95663,95665,95667,95669,95671,95673,95675,95677],{"class":27,"line":39},[25,95660,93185],{"class":244},[25,95662,460],{"class":35},[25,95664,621],{"class":244},[25,95666,715],{"class":35},[25,95668,621],{"class":244},[25,95670,31567],{"class":5326},[25,95672,290],{"class":240},[25,95674,245],{"class":244},[25,95676,689],{"class":35},[25,95678,30568],{"class":244},[25,95680,95681],{"class":27,"line":51},[25,95682,95683],{"class":302},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[99,95685,95538],{},[99,95687,95688],{},[155,95689],{"alt":20,"src":95690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[99,95692,95577],{},[99,95694,95695],{},[155,95696],{"alt":20,"src":95697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[210,95699,95701],{"id":95700},"_222-rand语句","2.2.2 rand语句",[99,95703,95704],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[15,95706,95708],{"className":30449,"code":95707,"language":30451,"meta":20,"style":20},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[22,95709,95710,95723,95728],{"__ignoreMap":20},[25,95711,95712,95715,95717,95719,95721],{"class":27,"line":28},[25,95713,95714],{"class":244},"np.random.rand(",[25,95716,554],{"class":35},[25,95718,621],{"class":244},[25,95720,689],{"class":35},[25,95722,251],{"class":244},[25,95724,95725],{"class":27,"line":39},[25,95726,95727],{"class":302},"#第一个参数100：行数，表示有100个样本\n",[25,95729,95730],{"class":27,"line":51},[25,95731,95732],{"class":302},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[182,95734,95736],{"id":95735},"_23-arange创建数组","2.3 arange()创建数组",[210,95738,95740],{"id":95739},"_231-函数语句","2.3.1 函数语句",[15,95742,95744],{"className":30449,"code":95743,"language":30451,"meta":20,"style":20},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[22,95745,95746,95760,95765,95770,95775,95780,95785,95790],{"__ignoreMap":20},[25,95747,95748,95751,95753,95755,95758],{"class":27,"line":28},[25,95749,95750],{"class":244},"numpy.arange([start,] stop[, step], ",[25,95752,93571],{"class":5326},[25,95754,290],{"class":240},[25,95756,95757],{"class":35},"None",[25,95759,251],{"class":244},[25,95761,95762],{"class":27,"line":39},[25,95763,95764],{"class":302},"#参数\n",[25,95766,95767],{"class":27,"line":51},[25,95768,95769],{"class":45},"\"\"\"\n",[25,95771,95772],{"class":27,"line":59},[25,95773,95774],{"class":45},"start:起始值，可选，默认从 0 开始。\n",[25,95776,95777],{"class":27,"line":67},[25,95778,95779],{"class":45},"stop:结束值（不包含该值）。\n",[25,95781,95782],{"class":27,"line":75},[25,95783,95784],{"class":45},"step:步长，可选，默认是 1。可以为浮点数。\n",[25,95786,95787],{"class":27,"line":83},[25,95788,95789],{"class":45},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[25,95791,95792],{"class":27,"line":91},[25,95793,95769],{"class":45},[210,95795,95797],{"id":95796},"_232-实例","2.3.2 实例",[15,95799,95801],{"className":30449,"code":95800,"language":30451,"meta":20,"style":20},"#创建一维数组\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",[22,95802,95803,95807,95831,95836,95841,95845,95868,95872,95876,95881,95886],{"__ignoreMap":20},[25,95804,95805],{"class":27,"line":28},[25,95806,93176],{"class":302},[25,95808,95809,95811,95813,95815,95817,95819,95821,95823,95825,95827,95829],{"class":27,"line":39},[25,95810,93073],{"class":244},[25,95812,460],{"class":35},[25,95814,621],{"class":244},[25,95816,968],{"class":35},[25,95818,621],{"class":244},[25,95820,460],{"class":35},[25,95822,621],{"class":244},[25,95824,93571],{"class":5326},[25,95826,290],{"class":240},[25,95828,248],{"class":35},[25,95830,251],{"class":244},[25,95832,95833],{"class":27,"line":51},[25,95834,95835],{"class":302},"#输出结果：\n",[25,95837,95838],{"class":27,"line":59},[25,95839,95840],{"class":302},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[25,95842,95843],{"class":27,"line":67},[25,95844,94018],{"class":302},[25,95846,95847,95850,95852,95854,95856,95859,95861,95863,95865],{"class":27,"line":75},[25,95848,95849],{"class":244},"np.array([np.arange(",[25,95851,460],{"class":35},[25,95853,621],{"class":244},[25,95855,536],{"class":35},[25,95857,95858],{"class":244},"),np.arange(",[25,95860,536],{"class":35},[25,95862,621],{"class":244},[25,95864,612],{"class":35},[25,95866,95867],{"class":244},")])\n",[25,95869,95870],{"class":27,"line":83},[25,95871,93635],{"class":302},[25,95873,95874],{"class":27,"line":91},[25,95875,95769],{"class":45},[25,95877,95878],{"class":27,"line":1429},[25,95879,95880],{"class":45},"array([[1, 2, 3],\n",[25,95882,95883],{"class":27,"line":1441},[25,95884,95885],{"class":45},"       [4, 5, 6]])\n",[25,95887,95888],{"class":27,"line":1723},[25,95889,95769],{"class":45},[182,95891,95893],{"id":95892},"_24-生态分布","2.4 生态分布",[210,95895,95897],{"id":95896},"_241-标准正态分布","2.4.1 标准正态分布",[99,95899,95900],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[99,95902,95903],{},[155,95904],{"alt":20,"src":95905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[210,95907,95909],{"id":95908},"_242-常规正态分布","2.4.2 常规正态分布",[15,95911,95913],{"className":30449,"code":95912,"language":30451,"meta":20,"style":20},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[22,95914,95915,95920,95925,95930],{"__ignoreMap":20},[25,95916,95917],{"class":27,"line":28},[25,95918,95919],{"class":244},"random.normal(loc,scale,size)也可以生成正态分布\n",[25,95921,95922],{"class":27,"line":39},[25,95923,95924],{"class":302},"#loc:期望\n",[25,95926,95927],{"class":27,"line":51},[25,95928,95929],{"class":302},"#scale:方差\n",[25,95931,95932],{"class":27,"line":59},[25,95933,95934],{"class":302},"#size:用于确定是几维的数列\n",[99,95936,95937],{},[155,95938],{"alt":20,"src":95939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[182,95941,95943],{"id":95942},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[99,95945,95946],{},"ndim:秩，维度个数",[99,95948,95949],{},"size:数组元素的个数",[99,95951,95952],{},"shape:数组的形状",[99,95954,95955],{},"dtype:数组元素的类型",[99,95957,95958],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[99,95960,95961],{},"他们都是属性，通过数组.属性的形式来确定",[99,95963,95964],{},"如果需要输出多个可以通过以下方式：",[15,95966,95968],{"className":30449,"code":95967,"language":30451,"meta":20,"style":20},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[22,95969,95970],{"__ignoreMap":20},[25,95971,95972,95974],{"class":27,"line":28},[25,95973,30486],{"class":35},[25,95975,95976],{"class":244},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[182,95978,95980],{"id":95979},"_26-其他方式创建数组","2.6 其他方式创建数组",[210,95982,95984],{"id":95983},"_261-zeros创建数组","2.6.1 zeros()创建数组",[99,95986,95987],{},"①创建一维数组",[15,95989,95991],{"className":30449,"code":95990,"language":30451,"meta":20,"style":20},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[22,95992,95993,96002,96006,96011,96016],{"__ignoreMap":20},[25,95994,95995,95998,96000],{"class":27,"line":28},[25,95996,95997],{"class":244},"np.zeros(",[25,95999,689],{"class":35},[25,96001,251],{"class":244},[25,96003,96004],{"class":27,"line":39},[25,96005,95769],{"class":45},[25,96007,96008],{"class":27,"line":51},[25,96009,96010],{"class":45},"输出结果：\n",[25,96012,96013],{"class":27,"line":59},[25,96014,96015],{"class":45},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[25,96017,96018],{"class":27,"line":67},[25,96019,95769],{"class":45},[99,96021,96022],{},"上方代码等价于：",[15,96024,96026],{"className":30449,"code":96025,"language":30451,"meta":20,"style":20},"np.zeros(shape=(10))#创建10个元素的0数组\n",[22,96027,96028],{"__ignoreMap":20},[25,96029,96030,96032,96035,96037,96039,96041,96043],{"class":27,"line":28},[25,96031,95997],{"class":244},[25,96033,96034],{"class":5326},"shape",[25,96036,290],{"class":240},[25,96038,245],{"class":244},[25,96040,689],{"class":35},[25,96042,82842],{"class":244},[25,96044,96045],{"class":302},"#创建10个元素的0数组\n",[99,96047,96048],{},"也可以指定类型",[15,96050,96052],{"className":30449,"code":96051,"language":30451,"meta":20,"style":20},"#指定类型\nnp.zeros(5,dtype=int)\n",[22,96053,96054,96059],{"__ignoreMap":20},[25,96055,96056],{"class":27,"line":28},[25,96057,96058],{"class":302},"#指定类型\n",[25,96060,96061,96063,96065,96067,96069,96071,96073],{"class":27,"line":39},[25,96062,95997],{"class":244},[25,96064,562],{"class":35},[25,96066,621],{"class":244},[25,96068,93571],{"class":5326},[25,96070,290],{"class":240},[25,96072,248],{"class":35},[25,96074,251],{"class":244},[99,96076,96077],{},"②创建二维数组",[15,96079,96081],{"className":30449,"code":96080,"language":30451,"meta":20,"style":20},"np.zeros((3,4),dtype=int)\n",[22,96082,96083],{"__ignoreMap":20},[25,96084,96085,96088,96090,96092,96094,96096,96098,96100,96102],{"class":27,"line":28},[25,96086,96087],{"class":244},"np.zeros((",[25,96089,315],{"class":35},[25,96091,621],{"class":244},[25,96093,536],{"class":35},[25,96095,42327],{"class":244},[25,96097,93571],{"class":5326},[25,96099,290],{"class":240},[25,96101,248],{"class":35},[25,96103,251],{"class":244},[99,96105,96106],{},"③创建三维数组",[15,96108,96110],{"className":30449,"code":96109,"language":30451,"meta":20,"style":20},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[22,96111,96112,96117],{"__ignoreMap":20},[25,96113,96114],{"class":27,"line":28},[25,96115,96116],{"class":302},"#创建三维数组\n",[25,96118,96119,96121,96123,96125,96127,96129,96131,96133,96135,96137,96139],{"class":27,"line":39},[25,96120,96087],{"class":244},[25,96122,315],{"class":35},[25,96124,621],{"class":244},[25,96126,536],{"class":35},[25,96128,621],{"class":244},[25,96130,562],{"class":35},[25,96132,42327],{"class":244},[25,96134,93571],{"class":5326},[25,96136,290],{"class":240},[25,96138,248],{"class":35},[25,96140,251],{"class":244},[99,96142,96143],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[15,96145,96147],{"className":30449,"code":96146,"language":30451,"meta":20,"style":20},"#使用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",[22,96148,96149,96154,96169,96174,96179,96201],{"__ignoreMap":20},[25,96150,96151],{"class":27,"line":28},[25,96152,96153],{"class":302},"#使用zeros_like将创建的一维数组变成全0的数组\n",[25,96155,96156,96158,96160,96162,96164,96166],{"class":27,"line":39},[25,96157,481],{"class":244},[25,96159,290],{"class":240},[25,96161,93073],{"class":244},[25,96163,536],{"class":35},[25,96165,672],{"class":244},[25,96167,96168],{"class":302},"#这个得到的结果：一维数组0，1，2，3\n",[25,96170,96171],{"class":27,"line":51},[25,96172,96173],{"class":244},"np.zeros_like(a)\n",[25,96175,96176],{"class":27,"line":59},[25,96177,96178],{"class":302},"#使用zeros_like将创建的二维数组变成全0的数组\n",[25,96180,96181,96183,96185,96187,96189,96191,96193,96195,96197,96199],{"class":27,"line":67},[25,96182,93377],{"class":244},[25,96184,290],{"class":240},[25,96186,95498],{"class":244},[25,96188,31567],{"class":5326},[25,96190,290],{"class":240},[25,96192,245],{"class":244},[25,96194,536],{"class":35},[25,96196,621],{"class":244},[25,96198,562],{"class":35},[25,96200,30568],{"class":244},[25,96202,96203],{"class":27,"line":75},[25,96204,96205],{"class":244},"np.zeros_like(aa)\n",[210,96207,96209],{"id":96208},"_262-ones创建数组","2.6.2 ones()创建数组",[99,96211,96212],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[210,96214,96216],{"id":96215},"_263-empty创建数组","2.6.3 empty()创建数组",[99,96218,96219],{},"①empty()用法",[15,96221,96223],{"className":30449,"code":96222,"language":30451,"meta":20,"style":20},"numpy.empty(shape,dtype=float,order='c')\n",[22,96224,96225],{"__ignoreMap":20},[25,96226,96227,96230,96232,96234,96236,96238,96240,96242,96244],{"class":27,"line":28},[25,96228,96229],{"class":244},"numpy.empty(shape,",[25,96231,93571],{"class":5326},[25,96233,290],{"class":240},[25,96235,284],{"class":35},[25,96237,621],{"class":244},[25,96239,95368],{"class":5326},[25,96241,290],{"class":240},[25,96243,76099],{"class":45},[25,96245,251],{"class":244},[99,96247,96248],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[99,96250,96251],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[99,96253,96254],{},[155,96255],{"alt":20,"src":96256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[99,96258,96259],{},"②empty()用法",[15,96261,96263],{"className":30449,"code":96262,"language":30451,"meta":20,"style":20},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[22,96264,96265,96286,96298,96319,96324],{"__ignoreMap":20},[25,96266,96267,96269,96271,96274,96276,96278,96280,96282,96284],{"class":27,"line":28},[25,96268,1088],{"class":244},[25,96270,290],{"class":240},[25,96272,96273],{"class":244},"np.empty(",[25,96275,689],{"class":35},[25,96277,621],{"class":244},[25,96279,93571],{"class":5326},[25,96281,290],{"class":240},[25,96283,248],{"class":35},[25,96285,251],{"class":244},[25,96287,96288,96290,96292,96294,96296],{"class":27,"line":39},[25,96289,1063],{"class":244},[25,96291,290],{"class":240},[25,96293,93073],{"class":244},[25,96295,562],{"class":35},[25,96297,251],{"class":244},[25,96299,96300,96303,96305,96308,96310,96312,96315,96317],{"class":27,"line":51},[25,96301,96302],{"class":244},"np.add(",[25,96304,321],{"class":35},[25,96306,96307],{"class":244},",x,",[25,96309,93125],{"class":5326},[25,96311,290],{"class":240},[25,96313,96314],{"class":244},"y[:",[25,96316,562],{"class":35},[25,96318,4767],{"class":244},[25,96320,96321],{"class":27,"line":59},[25,96322,96323],{"class":302},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[25,96325,96326],{"class":27,"line":67},[25,96327,96328],{"class":244},"y\n",[99,96330,11624],{},[99,96332,96333],{},[155,96334],{"alt":20,"src":96335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[15,96337,96339],{"className":30449,"code":96338,"language":30451,"meta":20,"style":20},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[22,96340,96341,96357,96377,96392],{"__ignoreMap":20},[25,96342,96343,96345,96347,96349,96351,96353,96355],{"class":27,"line":28},[25,96344,1063],{"class":244},[25,96346,290],{"class":240},[25,96348,93073],{"class":244},[25,96350,460],{"class":35},[25,96352,621],{"class":244},[25,96354,587],{"class":35},[25,96356,251],{"class":244},[25,96358,96359,96361,96363,96365,96367,96369,96371,96373,96375],{"class":27,"line":39},[25,96360,1088],{"class":244},[25,96362,290],{"class":240},[25,96364,96273],{"class":244},[25,96366,562],{"class":35},[25,96368,621],{"class":244},[25,96370,93571],{"class":5326},[25,96372,290],{"class":240},[25,96374,248],{"class":35},[25,96376,251],{"class":244},[25,96378,96379,96382,96384,96386,96388,96390],{"class":27,"line":51},[25,96380,96381],{"class":244},"np.add(x,",[25,96383,321],{"class":35},[25,96385,621],{"class":244},[25,96387,93125],{"class":5326},[25,96389,290],{"class":240},[25,96391,93520],{"class":244},[25,96393,96394],{"class":27,"line":59},[25,96395,96396],{"class":302},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[99,96398,96399],{},"③empty_like()",[99,96401,96402],{},[392,96403,96404,96405,96410],{},"创建一个",[392,96406,96407],{},[392,96408,96409],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[99,96412,96413,96416],{},[22,96414,96415],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[99,96418,96419],{},[155,96420],{"alt":20,"src":96421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[210,96423,96425],{"id":96424},"_264-用法","2.6.4 ？？用法",[99,96427,96428],{},"当想查看一个函数的参数时，可以通过？？来实现",[15,96430,96432],{"className":30449,"code":96431,"language":30451,"meta":20,"style":20},"np.full??\n",[22,96433,96434],{"__ignoreMap":20},[25,96435,96436,96439],{"class":27,"line":28},[25,96437,96438],{"class":244},"np.full",[25,96440,96441],{"class":77474},"??\n",[210,96443,96445],{"id":96444},"_265-full创建数组","2.6.5 full()创建数组",[15,96447,96449],{"className":30449,"code":96448,"language":30451,"meta":20,"style":20},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[22,96450,96451,96456],{"__ignoreMap":20},[25,96452,96453],{"class":27,"line":28},[25,96454,96455],{"class":244},"full(shape,fill_value)\n",[25,96457,96458],{"class":27,"line":39},[25,96459,96460],{"class":244},"创建全为某个指定值的数组\n",[99,96462,94601],{},[15,96464,96466],{"className":30449,"code":96465,"language":30451,"meta":20,"style":20},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[22,96467,96468,96473],{"__ignoreMap":20},[25,96469,96470],{"class":27,"line":28},[25,96471,96472],{"class":302},"#创建一个一维数组,以20进行填充\n",[25,96474,96475,96478,96480,96482,96484],{"class":27,"line":39},[25,96476,96477],{"class":244},"np.full(",[25,96479,689],{"class":35},[25,96481,621],{"class":244},[25,96483,943],{"class":35},[25,96485,251],{"class":244},[99,96487,93362],{},[15,96489,96491],{"className":30449,"code":96490,"language":30451,"meta":20,"style":20},"#创建二维数组\nnp.full((3,5),11)\n",[22,96492,96493,96497],{"__ignoreMap":20},[25,96494,96495],{"class":27,"line":28},[25,96496,94018],{"class":302},[25,96498,96499,96502,96504,96506,96508,96510,96512],{"class":27,"line":39},[25,96500,96501],{"class":244},"np.full((",[25,96503,315],{"class":35},[25,96505,621],{"class":244},[25,96507,562],{"class":35},[25,96509,42327],{"class":244},[25,96511,715],{"class":35},[25,96513,251],{"class":244},[99,96515,96516],{},"③full_like用法",[99,96518,96519],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[99,96521,96522],{},"这里是指定填充而已",[15,96524,96526],{"className":30449,"code":96525,"language":30451,"meta":20,"style":20},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[22,96527,96528,96533,96557,96562],{"__ignoreMap":20},[25,96529,96530],{"class":27,"line":28},[25,96531,96532],{"class":302},"#创建一个指定形状数组\n",[25,96534,96535,96537,96539,96541,96543,96545,96547,96549,96551,96553,96555],{"class":27,"line":39},[25,96536,481],{"class":244},[25,96538,290],{"class":240},[25,96540,93073],{"class":244},[25,96542,460],{"class":35},[25,96544,621],{"class":244},[25,96546,568],{"class":35},[25,96548,93078],{"class":244},[25,96550,536],{"class":35},[25,96552,621],{"class":244},[25,96554,663],{"class":35},[25,96556,251],{"class":244},[25,96558,96559],{"class":27,"line":51},[25,96560,96561],{"class":302},"#进行指定填充\n",[25,96563,96564,96567,96569],{"class":27,"line":59},[25,96565,96566],{"class":244},"np.full_like(a,",[25,96568,689],{"class":35},[25,96570,251],{"class":244},[99,96572,11624],{},[99,96574,96575],{},[155,96576],{"alt":20,"src":96577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[210,96579,96581],{"id":96580},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22108,96583,96585],{"id":96584},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[15,96587,96589],{"className":30449,"code":96588,"language":30451,"meta":20,"style":20},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22,96590,96591,96608],{"__ignoreMap":20},[25,96592,96593,96596,96598,96600,96602,96604,96606],{"class":27,"line":28},[25,96594,96595],{"class":244},"np.eye(",[25,96597,536],{"class":35},[25,96599,621],{"class":244},[25,96601,93571],{"class":5326},[25,96603,290],{"class":240},[25,96605,248],{"class":35},[25,96607,251],{"class":244},[25,96609,96610],{"class":27,"line":39},[25,96611,96612],{"class":302},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22108,96614,96616],{"id":96615},"_2662-法2identity","2.6.6.2 法2：identity()",[15,96618,96620],{"className":30449,"code":96619,"language":30451,"meta":20,"style":20},"#identity()\nnp.identity(5,dtype=int)\n",[22,96621,96622,96627],{"__ignoreMap":20},[25,96623,96624],{"class":27,"line":28},[25,96625,96626],{"class":302},"#identity()\n",[25,96628,96629,96632,96634,96636,96638,96640,96642],{"class":27,"line":39},[25,96630,96631],{"class":244},"np.identity(",[25,96633,562],{"class":35},[25,96635,621],{"class":244},[25,96637,93571],{"class":5326},[25,96639,290],{"class":240},[25,96641,248],{"class":35},[25,96643,251],{"class":244},[99,96645,96646],{},"两个函数是有区别的",[99,96648,96649],{},[155,96650],{"alt":20,"src":96651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[99,96653,96654],{},[155,96655],{"alt":20,"src":96656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[15,96658,96660],{"className":30449,"code":96659,"language":30451,"meta":20,"style":20},"# 创建一个 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",[22,96661,96662,96667,96679,96684,96689,96694,96699,96703,96708,96728,96732,96737,96742],{"__ignoreMap":20},[25,96663,96664],{"class":27,"line":28},[25,96665,96666],{"class":302},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[25,96668,96669,96671,96673,96675,96677],{"class":27,"line":39},[25,96670,96595],{"class":244},[25,96672,315],{"class":35},[25,96674,12545],{"class":244},[25,96676,536],{"class":35},[25,96678,251],{"class":244},[25,96680,96681],{"class":27,"line":51},[25,96682,96683],{"class":302},"# 输出:\n",[25,96685,96686],{"class":27,"line":59},[25,96687,96688],{"class":302},"# [[1. 0. 0. 0.]\n",[25,96690,96691],{"class":27,"line":67},[25,96692,96693],{"class":302},"#  [0. 1. 0. 0.]\n",[25,96695,96696],{"class":27,"line":75},[25,96697,96698],{"class":302},"#  [0. 0. 1. 0.]]\n",[25,96700,96701],{"class":27,"line":83},[25,96702,2510],{"emptyLinePlaceholder":167},[25,96704,96705],{"class":27,"line":91},[25,96706,96707],{"class":302},"# 对角线向上偏移1\n",[25,96709,96710,96712,96714,96716,96718,96720,96722,96724,96726],{"class":27,"line":1429},[25,96711,96595],{"class":244},[25,96713,315],{"class":35},[25,96715,12545],{"class":244},[25,96717,536],{"class":35},[25,96719,12545],{"class":244},[25,96721,736],{"class":5326},[25,96723,290],{"class":240},[25,96725,460],{"class":35},[25,96727,251],{"class":244},[25,96729,96730],{"class":27,"line":1441},[25,96731,96683],{"class":302},[25,96733,96734],{"class":27,"line":1723},[25,96735,96736],{"class":302},"# [[0. 1. 0. 0.]\n",[25,96738,96739],{"class":27,"line":1728},[25,96740,96741],{"class":302},"#  [0. 0. 1. 0.]\n",[25,96743,96744],{"class":27,"line":1734},[25,96745,96746],{"class":302},"#  [0. 0. 0. 1.]]\n",[210,96748,96750],{"id":96749},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[15,96752,96754],{"className":30449,"code":96753,"language":30451,"meta":20,"style":20},"#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",[22,96755,96756,96761,96765,96770,96775,96780,96785,96790,96795,96800,96805],{"__ignoreMap":20},[25,96757,96758],{"class":27,"line":28},[25,96759,96760],{"class":302},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[25,96762,96763],{"class":27,"line":39},[25,96764,95769],{"class":45},[25,96766,96767],{"class":27,"line":51},[25,96768,96769],{"class":45},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[25,96771,96772],{"class":27,"line":59},[25,96773,96774],{"class":45},"参数介绍：\n",[25,96776,96777],{"class":27,"line":67},[25,96778,96779],{"class":45},"start：序列的起始值\n",[25,96781,96782],{"class":27,"line":75},[25,96783,96784],{"class":45},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[25,96786,96787],{"class":27,"line":83},[25,96788,96789],{"class":45},"num：要生长的等步长的样本数量，默认为50\n",[25,96791,96792],{"class":27,"line":91},[25,96793,96794],{"class":45},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[25,96796,96797],{"class":27,"line":1429},[25,96798,96799],{"class":45},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[25,96801,96802],{"class":27,"line":1441},[25,96803,96804],{"class":45},"dtype：ndarry的数据类型\n",[25,96806,96807],{"class":27,"line":1723},[25,96808,95769],{"class":45},[99,96810,96811],{},[155,96812],{"alt":20,"src":96813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[99,96815,96816],{},"这里num=是可以省略的",[99,96818,96819],{},"也就是下方两行代码结果是一模一样的",[15,96821,96823],{"className":30449,"code":96822,"language":30451,"meta":20,"style":20},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[22,96824,96825,96842],{"__ignoreMap":20},[25,96826,96827,96830,96832,96834,96836,96838,96840],{"class":27,"line":28},[25,96828,96829],{"class":244},"np.linspace(",[25,96831,460],{"class":35},[25,96833,621],{"class":244},[25,96835,562],{"class":35},[25,96837,621],{"class":244},[25,96839,562],{"class":35},[25,96841,251],{"class":244},[25,96843,96844,96846,96848,96850,96852,96854,96856,96858,96860],{"class":27,"line":39},[25,96845,96829],{"class":244},[25,96847,460],{"class":35},[25,96849,621],{"class":244},[25,96851,562],{"class":35},[25,96853,621],{"class":244},[25,96855,1776],{"class":5326},[25,96857,290],{"class":240},[25,96859,562],{"class":35},[25,96861,251],{"class":244},[210,96863,96865],{"id":96864},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[15,96867,96869],{"className":30449,"code":96868,"language":30451,"meta":20,"style":20},"#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",[22,96870,96871,96876,96880,96885,96890,96895,96900,96904,96909,96914,96918],{"__ignoreMap":20},[25,96872,96873],{"class":27,"line":28},[25,96874,96875],{"class":302},"#logspace函数用于创建一个等比数列，格式如下：\n",[25,96877,96878],{"class":27,"line":39},[25,96879,95769],{"class":45},[25,96881,96882],{"class":27,"line":51},[25,96883,96884],{"class":45},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[25,96886,96887],{"class":27,"line":59},[25,96888,96889],{"class":45},"参数为：\n",[25,96891,96892],{"class":27,"line":67},[25,96893,96894],{"class":45},"start:序列的起始位置为：base**start\n",[25,96896,96897],{"class":27,"line":75},[25,96898,96899],{"class":45},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[25,96901,96902],{"class":27,"line":83},[25,96903,96789],{"class":45},[25,96905,96906],{"class":27,"line":91},[25,96907,96908],{"class":45},"endpoint：是否包含 stop 这个值，默认是 True\n",[25,96910,96911],{"class":27,"line":1429},[25,96912,96913],{"class":45},"base：对数的底数，默认是 10（常见对数）\n",[25,96915,96916],{"class":27,"line":1441},[25,96917,96804],{"class":45},[25,96919,96920],{"class":27,"line":1723},[25,96921,95769],{"class":45},[99,96923,96924],{},[155,96925],{"alt":20,"src":96926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[99,96928,96929],{},"logspace()函数中的num参数也是可以不写num=的",[99,96931,96932],{},"endpoint是不可以省略的",[159,96934,96935],{},"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":20,"searchDepth":39,"depth":39,"links":96937},[96938,96942,96947,96951,96955,96956],{"id":95327,"depth":39,"text":95328,"children":96939},[96940,96941],{"id":95331,"depth":51,"text":95332},{"id":95404,"depth":51,"text":95405},{"id":95436,"depth":39,"text":95437,"children":96943},[96944,96945,96946],{"id":95440,"depth":51,"text":95441},{"id":95622,"depth":51,"text":95623},{"id":95700,"depth":51,"text":95701},{"id":95735,"depth":39,"text":95736,"children":96948},[96949,96950],{"id":95739,"depth":51,"text":95740},{"id":95796,"depth":51,"text":95797},{"id":95892,"depth":39,"text":95893,"children":96952},[96953,96954],{"id":95896,"depth":51,"text":95897},{"id":95908,"depth":51,"text":95909},{"id":95942,"depth":39,"text":95943},{"id":95979,"depth":39,"text":95980,"children":96957},[96958,96959,96960,96961,96962,96963,96964,96965],{"id":95983,"depth":51,"text":95984},{"id":96208,"depth":51,"text":96209},{"id":96215,"depth":51,"text":96216},{"id":96424,"depth":51,"text":96425},{"id":96444,"depth":51,"text":96445},{"id":96580,"depth":51,"text":96581},{"id":96749,"depth":51,"text":96750},{"id":96864,"depth":51,"text":96865},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95319,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96972,"title":96973,"body":96974,"description":164,"extension":165,"meta":97067,"navigation":167,"path":97068,"seo":97069,"stem":97070,"__hash__":97071},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96975,"toc":97065},[96976,96979,96982,96985,96988,96991,96994,96997,97000,97003,97006,97009,97011,97014,97017,97022,97025,97028,97062],[10,96977,96973],{"id":96978},"_20魔法命令mprun",[99,96980,96981],{},"逐行分析数据内存的使用情况",[99,96983,96984],{},"语法格式：",[99,96986,96987],{},"%mprun -f 模块名.函数名 模块名.函数名()",[99,96989,96990],{},"分析结果列如下：",[99,96992,96993],{},"Line行号",[99,96995,96996],{},"Mem usage内存使用大小",[99,96998,96999],{},"increment内存增量",[99,97001,97002],{},"Line content代码内容",[99,97004,97005],{},"补充说明：",[99,97007,97008],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[99,97010,95274],{},[99,97012,97013],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[99,97015,97016],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[99,97018,97019],{},[155,97020],{"alt":20,"src":97021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[99,97023,97024],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[99,97026,97027],{},"这时候需要重新加载模块",[15,97029,97031],{"className":30449,"code":97030,"language":30451,"meta":20,"style":20},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[22,97032,97033,97038,97045,97050],{"__ignoreMap":20},[25,97034,97035],{"class":27,"line":28},[25,97036,97037],{"class":302},"#重新加载模块\n",[25,97039,97040,97042],{"class":27,"line":39},[25,97041,30463],{"class":240},[25,97043,97044],{"class":244}," importlib\n",[25,97046,97047],{"class":27,"line":51},[25,97048,97049],{"class":244},"importlib.reload(mprun_test)\n",[25,97051,97052,97054,97057,97059],{"class":27,"line":59},[25,97053,571],{"class":240},[25,97055,97056],{"class":244},"mprun ",[25,97058,775],{"class":240},[25,97060,97061],{"class":244},"f mprun_test.fun_test mprun_test.fun_test()\n",[159,97063,97064],{},"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":20,"searchDepth":39,"depth":39,"links":97066},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96973,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97073,"title":97074,"body":97075,"description":164,"extension":165,"meta":97092,"navigation":167,"path":97093,"seo":97094,"stem":97095,"__hash__":97096},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97076,"toc":97090},[97077,97080,97085],[10,97078,97074],{"id":97079},"_3一维数组的索引和切片",[99,97081,97082],{},[155,97083],{"alt":20,"src":97084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[99,97086,97087],{},[155,97088],{"alt":20,"src":97089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":20,"searchDepth":39,"depth":39,"links":97091},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97074,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97098,"title":97099,"body":97100,"description":164,"extension":165,"meta":97583,"navigation":167,"path":97584,"seo":97585,"stem":97586,"__hash__":97587},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97101,"toc":97581},[97102,97105,97108,97113,97146,97149,97187,97190,97224,97227,97332,97335,97372,97375,97476,97479,97530,97533,97575,97578],[10,97103,97099],{"id":97104},"_4二维数组的索引与切片",[99,97106,97107],{},"①获取指定单个元素",[99,97109,97110],{},[155,97111],{"alt":20,"src":97112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[15,97114,97116],{"className":30449,"code":97115,"language":30451,"meta":20,"style":20},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[22,97117,97118,97123,97128,97133],{"__ignoreMap":20},[25,97119,97120],{"class":27,"line":28},[25,97121,97122],{"class":302},"#获取元素9\n",[25,97124,97125],{"class":27,"line":39},[25,97126,97127],{"class":302},"#先获取所在行，再获取所在列\n",[25,97129,97130],{"class":27,"line":51},[25,97131,97132],{"class":302},"#数组[行索引号，列索引号]\n",[25,97134,97135,97138,97140,97142,97144],{"class":27,"line":59},[25,97136,97137],{"class":244},"a[",[25,97139,460],{"class":35},[25,97141,621],{"class":244},[25,97143,321],{"class":35},[25,97145,33317],{"class":244},[99,97147,97148],{},"②获取整行元素",[15,97150,97152],{"className":30449,"code":97151,"language":30451,"meta":20,"style":20},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[22,97153,97154,97159,97164,97172,97177],{"__ignoreMap":20},[25,97155,97156],{"class":27,"line":28},[25,97157,97158],{"class":302},"#获取整行 数组[行索引号]\n",[25,97160,97161],{"class":27,"line":39},[25,97162,97163],{"class":302},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[25,97165,97166,97168,97170],{"class":27,"line":51},[25,97167,97137],{"class":244},[25,97169,321],{"class":35},[25,97171,33317],{"class":244},[25,97173,97174],{"class":27,"line":59},[25,97175,97176],{"class":302},"#也可以负索引获取一行\n",[25,97178,97179,97181,97183,97185],{"class":27,"line":67},[25,97180,97137],{"class":244},[25,97182,775],{"class":240},[25,97184,460],{"class":35},[25,97186,33317],{"class":244},[99,97188,97189],{},"③获取整列元素",[15,97191,97193],{"className":30449,"code":97192,"language":30451,"meta":20,"style":20},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[22,97194,97195,97200,97209,97214],{"__ignoreMap":20},[25,97196,97197],{"class":27,"line":28},[25,97198,97199],{"class":302},"#获取整列 数组名[:,列索引]\n",[25,97201,97202,97205,97207],{"class":27,"line":39},[25,97203,97204],{"class":244},"a[:,",[25,97206,321],{"class":35},[25,97208,33317],{"class":244},[25,97210,97211],{"class":27,"line":51},[25,97212,97213],{"class":302},"#也可以负索引获取一列\n",[25,97215,97216,97218,97220,97222],{"class":27,"line":59},[25,97217,97204],{"class":244},[25,97219,775],{"class":240},[25,97221,460],{"class":35},[25,97223,33317],{"class":244},[99,97225,97226],{},"④部分行部分列的元素",[15,97228,97230],{"className":30449,"code":97229,"language":30451,"meta":20,"style":20},"#部分行部分列 数组名[行切片，列切片]\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",[22,97231,97232,97237,97247,97251,97255,97260,97265,97269,97281,97285,97289,97294,97299,97304,97309,97313,97318],{"__ignoreMap":20},[25,97233,97234],{"class":27,"line":28},[25,97235,97236],{"class":302},"#部分行部分列 数组名[行切片，列切片]\n",[25,97238,97239,97242,97244],{"class":27,"line":39},[25,97240,97241],{"class":244},"a[:",[25,97243,321],{"class":35},[25,97245,97246],{"class":244},",:]\n",[25,97248,97249],{"class":27,"line":51},[25,97250,93635],{"class":302},[25,97252,97253],{"class":27,"line":59},[25,97254,93999],{"class":45},[25,97256,97257],{"class":27,"line":67},[25,97258,97259],{"class":45},"array([[ 1,  2,  3,  4,  5,  6],\n",[25,97261,97262],{"class":27,"line":75},[25,97263,97264],{"class":45},"       [ 7,  8,  9, 10, 11, 12]])\n",[25,97266,97267],{"class":27,"line":83},[25,97268,93999],{"class":45},[25,97270,97271,97273,97275,97277,97279],{"class":27,"line":91},[25,97272,97204],{"class":244},[25,97274,460],{"class":35},[25,97276,1102],{"class":244},[25,97278,536],{"class":35},[25,97280,33317],{"class":244},[25,97282,97283],{"class":27,"line":1429},[25,97284,93635],{"class":302},[25,97286,97287],{"class":27,"line":1441},[25,97288,93999],{"class":45},[25,97290,97291],{"class":27,"line":1723},[25,97292,97293],{"class":45},"array([[ 2,  3,  4],\n",[25,97295,97296],{"class":27,"line":1728},[25,97297,97298],{"class":45},"       [ 8,  9, 10],\n",[25,97300,97301],{"class":27,"line":1734},[25,97302,97303],{"class":45},"       [14, 15, 16],\n",[25,97305,97306],{"class":27,"line":1739},[25,97307,97308],{"class":45},"       [20, 21, 22]])\n",[25,97310,97311],{"class":27,"line":1753},[25,97312,93999],{"class":45},[25,97314,97315],{"class":27,"line":1758},[25,97316,97317],{"class":302},"#对列行同时进行切片，使用了step参数\n",[25,97319,97320,97323,97325,97328,97330],{"class":27,"line":1764},[25,97321,97322],{"class":244},"a[::",[25,97324,321],{"class":35},[25,97326,97327],{"class":244},",::",[25,97329,321],{"class":35},[25,97331,33317],{"class":244},[99,97333,97334],{},"⑤同时获取两个元素",[15,97336,97338],{"className":30449,"code":97337,"language":30451,"meta":20,"style":20},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[22,97339,97340,97345,97350],{"__ignoreMap":20},[25,97341,97342],{"class":27,"line":28},[25,97343,97344],{"class":302},"#同时获取第三行第二列，第四行第一列\n",[25,97346,97347],{"class":27,"line":39},[25,97348,97349],{"class":302},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[25,97351,97352,97355,97357,97359,97361,97363,97365,97367,97369],{"class":27,"line":51},[25,97353,97354],{"class":244},"a[(",[25,97356,321],{"class":35},[25,97358,621],{"class":244},[25,97360,315],{"class":35},[25,97362,42318],{"class":244},[25,97364,460],{"class":35},[25,97366,621],{"class":244},[25,97368,434],{"class":35},[25,97370,97371],{"class":244},")]\n",[99,97373,97374],{},"⑥切片，对行进行反向获取",[15,97376,97378],{"className":30449,"code":97377,"language":30451,"meta":20,"style":20},"#切片 对所有行进行反向获取\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",[22,97379,97380,97385,97395,97399,97403,97408,97413,97418,97423,97427,97432,97448,97452,97457,97462,97467,97472],{"__ignoreMap":20},[25,97381,97382],{"class":27,"line":28},[25,97383,97384],{"class":302},"#切片 对所有行进行反向获取\n",[25,97386,97387,97389,97391,97393],{"class":27,"line":39},[25,97388,97322],{"class":244},[25,97390,775],{"class":240},[25,97392,460],{"class":35},[25,97394,33317],{"class":244},[25,97396,97397],{"class":27,"line":51},[25,97398,93635],{"class":302},[25,97400,97401],{"class":27,"line":59},[25,97402,93999],{"class":45},[25,97404,97405],{"class":27,"line":67},[25,97406,97407],{"class":45},"array([[19, 20, 21, 22, 23, 24],\n",[25,97409,97410],{"class":27,"line":75},[25,97411,97412],{"class":45},"       [13, 14, 15, 16, 17, 18],\n",[25,97414,97415],{"class":27,"line":83},[25,97416,97417],{"class":45},"       [ 7,  8,  9, 10, 11, 12],\n",[25,97419,97420],{"class":27,"line":91},[25,97421,97422],{"class":45},"       [ 1,  2,  3,  4,  5,  6]])\n",[25,97424,97425],{"class":27,"line":1429},[25,97426,93999],{"class":45},[25,97428,97429],{"class":27,"line":1441},[25,97430,97431],{"class":302},"#对行列都进行反向切片获取\n",[25,97433,97434,97436,97438,97440,97442,97444,97446],{"class":27,"line":1723},[25,97435,97322],{"class":244},[25,97437,775],{"class":240},[25,97439,460],{"class":35},[25,97441,97327],{"class":244},[25,97443,775],{"class":240},[25,97445,460],{"class":35},[25,97447,33317],{"class":244},[25,97449,97450],{"class":27,"line":1728},[25,97451,93999],{"class":45},[25,97453,97454],{"class":27,"line":1734},[25,97455,97456],{"class":45},"array([[24, 23, 22, 21, 20, 19],\n",[25,97458,97459],{"class":27,"line":1739},[25,97460,97461],{"class":45},"       [18, 17, 16, 15, 14, 13],\n",[25,97463,97464],{"class":27,"line":1753},[25,97465,97466],{"class":45},"       [12, 11, 10,  9,  8,  7],\n",[25,97468,97469],{"class":27,"line":1758},[25,97470,97471],{"class":45},"       [ 6,  5,  4,  3,  2,  1]])\n",[25,97473,97474],{"class":27,"line":1764},[25,97475,93999],{"class":45},[99,97477,97478],{},"⑦修改元素",[15,97480,97482],{"className":30449,"code":97481,"language":30451,"meta":20,"style":20},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[22,97483,97484,97489,97507,97512],{"__ignoreMap":20},[25,97485,97486],{"class":27,"line":28},[25,97487,97488],{"class":302},"#获取前两行和前两列\n",[25,97490,97491,97494,97496,97498,97500,97503,97505],{"class":27,"line":39},[25,97492,97493],{"class":244},"sub_a",[25,97495,290],{"class":240},[25,97497,97241],{"class":244},[25,97499,321],{"class":35},[25,97501,97502],{"class":244},",:",[25,97504,321],{"class":35},[25,97506,33317],{"class":244},[25,97508,97509],{"class":27,"line":51},[25,97510,97511],{"class":302},"#修改sub_a第一个元素的值\n",[25,97513,97514,97517,97519,97521,97523,97525,97527],{"class":27,"line":59},[25,97515,97516],{"class":244},"sub_a[",[25,97518,434],{"class":35},[25,97520,621],{"class":244},[25,97522,434],{"class":35},[25,97524,1183],{"class":244},[25,97526,290],{"class":240},[25,97528,97529],{"class":35},"100\n",[99,97531,97532],{},"⑧数组复制copy()",[15,97534,97536],{"className":30449,"code":97535,"language":30451,"meta":20,"style":20},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[22,97537,97538,97543,97553,97558],{"__ignoreMap":20},[25,97539,97540],{"class":27,"line":28},[25,97541,97542],{"class":302},"#数组复制\n",[25,97544,97545,97548,97550],{"class":27,"line":39},[25,97546,97547],{"class":244},"copy_a",[25,97549,290],{"class":240},[25,97551,97552],{"class":244},"np.copy(sub_a)\n",[25,97554,97555],{"class":27,"line":51},[25,97556,97557],{"class":302},"#修改copy_a后不影响原数组\n",[25,97559,97560,97563,97565,97567,97569,97571,97573],{"class":27,"line":59},[25,97561,97562],{"class":244},"copy_a[",[25,97564,434],{"class":35},[25,97566,621],{"class":244},[25,97568,434],{"class":35},[25,97570,1183],{"class":244},[25,97572,290],{"class":240},[25,97574,97529],{"class":35},[99,97576,97577],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[159,97579,97580],{},"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":20,"searchDepth":39,"depth":39,"links":97582},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97099,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97589,"title":97590,"body":97591,"description":164,"extension":165,"meta":98083,"navigation":167,"path":98084,"seo":98085,"stem":98086,"__hash__":98087},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97592,"toc":98075},[97593,97596,97600,97603,97606,97659,97662,97687,97690,97709,97729,97732,97748,97752,97798,97802,97844,97848,97851,97854,97857,97860,97863,97925,97985,97989,97992,98049,98053,98058,98067,98072],[10,97594,97590],{"id":97595},"_5改变数组的维度",[182,97597,97599],{"id":97598},"_51-使用reshape","5.1 使用reshape()",[99,97601,97602],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[99,97604,97605],{},"①一维数组转换为二维数组",[15,97607,97609],{"className":30449,"code":97608,"language":30451,"meta":20,"style":20},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[22,97610,97611,97627,97632,97637,97642],{"__ignoreMap":20},[25,97612,97613,97615,97617,97619,97621,97623,97625],{"class":27,"line":28},[25,97614,481],{"class":244},[25,97616,290],{"class":240},[25,97618,93073],{"class":244},[25,97620,460],{"class":35},[25,97622,621],{"class":244},[25,97624,766],{"class":35},[25,97626,251],{"class":244},[25,97628,97629],{"class":27,"line":39},[25,97630,97631],{"class":302},"#将一维数组进行转换\n",[25,97633,97634],{"class":27,"line":51},[25,97635,97636],{"class":302},"#注意点：元素个数不可以变\n",[25,97638,97639],{"class":27,"line":59},[25,97640,97641],{"class":302},"#转换维度要保持一致，不一致就异常！！！\n",[25,97643,97644,97646,97648,97651,97653,97655,97657],{"class":27,"line":67},[25,97645,93377],{"class":244},[25,97647,290],{"class":240},[25,97649,97650],{"class":244},"a.reshape(",[25,97652,321],{"class":35},[25,97654,621],{"class":244},[25,97656,587],{"class":35},[25,97658,251],{"class":244},[99,97660,97661],{},"②一维数组转换为三维数组",[15,97663,97665],{"className":30449,"code":97664,"language":30451,"meta":20,"style":20},"aaa=a.reshape(2,3,2)\n",[22,97666,97667],{"__ignoreMap":20},[25,97668,97669,97671,97673,97675,97677,97679,97681,97683,97685],{"class":27,"line":28},[25,97670,95592],{"class":244},[25,97672,290],{"class":240},[25,97674,97650],{"class":244},[25,97676,321],{"class":35},[25,97678,621],{"class":244},[25,97680,315],{"class":35},[25,97682,621],{"class":244},[25,97684,321],{"class":35},[25,97686,251],{"class":244},[99,97688,97689],{},"③二维数组转化为一维数组",[15,97691,97693],{"className":30449,"code":97692,"language":30451,"meta":20,"style":20},"#知道元素个数：\naa.reshape(12)\n",[22,97694,97695,97700],{"__ignoreMap":20},[25,97696,97697],{"class":27,"line":28},[25,97698,97699],{"class":302},"#知道元素个数：\n",[25,97701,97702,97705,97707],{"class":27,"line":39},[25,97703,97704],{"class":244},"aa.reshape(",[25,97706,741],{"class":35},[25,97708,251],{"class":244},[15,97710,97712],{"className":30449,"code":97711,"language":30451,"meta":20,"style":20},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[22,97713,97714,97719],{"__ignoreMap":20},[25,97715,97716],{"class":27,"line":28},[25,97717,97718],{"class":302},"#不知道元素个数，参数传递-1\n",[25,97720,97721,97723,97725,97727],{"class":27,"line":39},[25,97722,97704],{"class":244},[25,97724,775],{"class":240},[25,97726,460],{"class":35},[25,97728,251],{"class":244},[99,97730,97731],{},"④三维数组转换为一维数组",[15,97733,97735],{"className":30449,"code":97734,"language":30451,"meta":20,"style":20},"aaa.reshape(-1)\n",[22,97736,97737],{"__ignoreMap":20},[25,97738,97739,97742,97744,97746],{"class":27,"line":28},[25,97740,97741],{"class":244},"aaa.reshape(",[25,97743,775],{"class":240},[25,97745,460],{"class":35},[25,97747,251],{"class":244},[182,97749,97751],{"id":97750},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[15,97753,97755],{"className":30449,"code":97754,"language":30451,"meta":20,"style":20},"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",[22,97756,97757,97784,97789,97793],{"__ignoreMap":20},[25,97758,97759,97761,97763,97765,97767,97769,97771,97773,97775,97777,97779,97781],{"class":27,"line":28},[25,97760,93377],{"class":244},[25,97762,290],{"class":240},[25,97764,93073],{"class":244},[25,97766,460],{"class":35},[25,97768,621],{"class":244},[25,97770,766],{"class":35},[25,97772,93078],{"class":244},[25,97774,321],{"class":35},[25,97776,621],{"class":244},[25,97778,587],{"class":35},[25,97780,672],{"class":244},[25,97782,97783],{"class":302},"#转换为2行6列的数组\n",[25,97785,97786],{"class":27,"line":39},[25,97787,97788],{"class":244},"aa.revel()\n",[25,97790,97791],{"class":27,"line":51},[25,97792,93635],{"class":302},[25,97794,97795],{"class":27,"line":59},[25,97796,97797],{"class":302},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[182,97799,97801],{"id":97800},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[15,97803,97805],{"className":30449,"code":97804,"language":30451,"meta":20,"style":20},"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",[22,97806,97807,97831,97836,97840],{"__ignoreMap":20},[25,97808,97809,97811,97813,97815,97817,97819,97821,97823,97825,97827,97829],{"class":27,"line":28},[25,97810,93377],{"class":244},[25,97812,290],{"class":240},[25,97814,93073],{"class":244},[25,97816,460],{"class":35},[25,97818,621],{"class":244},[25,97820,766],{"class":35},[25,97822,93078],{"class":244},[25,97824,321],{"class":35},[25,97826,621],{"class":244},[25,97828,587],{"class":35},[25,97830,251],{"class":244},[25,97832,97833],{"class":27,"line":39},[25,97834,97835],{"class":244},"aa.flatten()\n",[25,97837,97838],{"class":27,"line":51},[25,97839,93635],{"class":302},[25,97841,97842],{"class":27,"line":59},[25,97843,97797],{"class":302},[182,97845,97847],{"id":97846},"_54-使用resize","5.4 使用resize()",[99,97849,97850],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[99,97852,97853],{},"通过resize方法可以改变数组的维度",[99,97855,97856],{},"#resize修改数组维度",[99,97858,97859],{},"#以元组的形式指定形状",[99,97861,97862],{},"#改变的是原数组",[15,97864,97866],{"className":30449,"code":97865,"language":30451,"meta":20,"style":20},"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",[22,97867,97868,97884,97904,97917,97921],{"__ignoreMap":20},[25,97869,97870,97872,97874,97876,97878,97880,97882],{"class":27,"line":28},[25,97871,481],{"class":244},[25,97873,290],{"class":240},[25,97875,93073],{"class":244},[25,97877,460],{"class":35},[25,97879,621],{"class":244},[25,97881,766],{"class":35},[25,97883,251],{"class":244},[25,97885,97886,97889,97891,97893,97895,97897,97899,97901],{"class":27,"line":39},[25,97887,97888],{"class":244},"a.shape",[25,97890,290],{"class":240},[25,97892,245],{"class":244},[25,97894,321],{"class":35},[25,97896,621],{"class":244},[25,97898,587],{"class":35},[25,97900,672],{"class":244},[25,97902,97903],{"class":302},"#改变了原数组\n",[25,97905,97906,97908,97910,97913,97915],{"class":27,"line":51},[25,97907,481],{"class":244},[25,97909,290],{"class":240},[25,97911,97912],{"class":244},"resize((",[25,97914,741],{"class":35},[25,97916,30568],{"class":244},[25,97918,97919],{"class":27,"line":59},[25,97920,93635],{"class":302},[25,97922,97923],{"class":27,"line":67},[25,97924,97797],{"class":302},[15,97926,97928],{"className":30449,"code":97927,"language":30451,"meta":20,"style":20},"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",[22,97929,97930,97943,97947,97951,97956,97961,97966,97971,97976,97981],{"__ignoreMap":20},[25,97931,97932,97935,97937,97939,97941],{"class":27,"line":28},[25,97933,97934],{"class":244},"a.resize((",[25,97936,587],{"class":35},[25,97938,621],{"class":244},[25,97940,321],{"class":35},[25,97942,30568],{"class":244},[25,97944,97945],{"class":27,"line":39},[25,97946,93635],{"class":302},[25,97948,97949],{"class":27,"line":51},[25,97950,93999],{"class":45},[25,97952,97953],{"class":27,"line":59},[25,97954,97955],{"class":45},"array([[ 1,  2],\n",[25,97957,97958],{"class":27,"line":67},[25,97959,97960],{"class":45},"       [ 3,  4],\n",[25,97962,97963],{"class":27,"line":75},[25,97964,97965],{"class":45},"       [ 5,  6],\n",[25,97967,97968],{"class":27,"line":83},[25,97969,97970],{"class":45},"       [ 7,  8],\n",[25,97972,97973],{"class":27,"line":91},[25,97974,97975],{"class":45},"       [ 9, 10],\n",[25,97977,97978],{"class":27,"line":1429},[25,97979,97980],{"class":45},"       [11, 12]])\n",[25,97982,97983],{"class":27,"line":1441},[25,97984,93999],{"class":45},[182,97986,97988],{"id":97987},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[99,97990,97991],{},"改变了原数组",[15,97993,97995],{"className":30449,"code":97994,"language":30451,"meta":20,"style":20},"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",[22,97996,97997,98013,98029,98033,98037,98041,98045],{"__ignoreMap":20},[25,97998,97999,98001,98003,98005,98007,98009,98011],{"class":27,"line":28},[25,98000,481],{"class":244},[25,98002,290],{"class":240},[25,98004,93073],{"class":244},[25,98006,460],{"class":35},[25,98008,621],{"class":244},[25,98010,766],{"class":35},[25,98012,251],{"class":244},[25,98014,98015,98017,98019,98021,98023,98025,98027],{"class":27,"line":39},[25,98016,97888],{"class":244},[25,98018,290],{"class":240},[25,98020,245],{"class":244},[25,98022,321],{"class":35},[25,98024,621],{"class":244},[25,98026,587],{"class":35},[25,98028,251],{"class":244},[25,98030,98031],{"class":27,"line":51},[25,98032,93635],{"class":302},[25,98034,98035],{"class":27,"line":59},[25,98036,93999],{"class":45},[25,98038,98039],{"class":27,"line":67},[25,98040,97259],{"class":45},[25,98042,98043],{"class":27,"line":75},[25,98044,97264],{"class":45},[25,98046,98047],{"class":27,"line":83},[25,98048,93999],{"class":45},[182,98050,98052],{"id":98051},"_56-重要比较","5.6 重要比较：",[99,98054,98055],{},[155,98056],{"alt":20,"src":98057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[99,98059,98060,98061,98063,98064,98066],{},"口诀：NumPy 函数要么用 ",[22,98062,96034],{},"，要么用 ",[22,98065,31567],{},"，创建结构用 shape，造数据用 size",[99,98068,98069],{},[155,98070],{"alt":20,"src":98071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[159,98073,98074],{},"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":20,"searchDepth":39,"depth":39,"links":98076},[98077,98078,98079,98080,98081,98082],{"id":97598,"depth":39,"text":97599},{"id":97750,"depth":39,"text":97751},{"id":97800,"depth":39,"text":97801},{"id":97846,"depth":39,"text":97847},{"id":97987,"depth":39,"text":97988},{"id":98051,"depth":39,"text":98052},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97590,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98089,"title":98090,"body":98091,"description":164,"extension":165,"meta":99163,"navigation":167,"path":99164,"seo":99165,"stem":99166,"__hash__":99167},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98092,"toc":99157},[98093,98096,98100,98103,98106,98109,98174,98177,98217,98220,98302,98305,98310,98332,98334,98339,98344,98347,98350,98505,98508,98710,98714,98717,98720,98788,98790,98795,98798,98801,98881,98885,98888,98890,98963,98965,98970,98972,99052,99056,99059,99062,99065,99068,99071,99074,99154],[10,98094,98090],{"id":98095},"_6数组的拼接",[182,98097,98099],{"id":98098},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[99,98101,98102],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[99,98104,98105],{},"函数内部传两个数列构成的数列或者元组",[99,98107,98108],{},"①一维数组的拼接",[15,98110,98112],{"className":30449,"code":98111,"language":30451,"meta":20,"style":20},"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",[22,98113,98114,98134,98154,98159,98164,98169],{"__ignoreMap":20},[25,98115,98116,98118,98120,98122,98124,98126,98128,98130,98132],{"class":27,"line":28},[25,98117,481],{"class":244},[25,98119,290],{"class":240},[25,98121,93095],{"class":244},[25,98123,460],{"class":35},[25,98125,621],{"class":244},[25,98127,321],{"class":35},[25,98129,621],{"class":244},[25,98131,315],{"class":35},[25,98133,4767],{"class":244},[25,98135,98136,98138,98140,98142,98144,98146,98148,98150,98152],{"class":27,"line":39},[25,98137,506],{"class":244},[25,98139,290],{"class":240},[25,98141,93095],{"class":244},[25,98143,536],{"class":35},[25,98145,621],{"class":244},[25,98147,562],{"class":35},[25,98149,621],{"class":244},[25,98151,587],{"class":35},[25,98153,4767],{"class":244},[25,98155,98156],{"class":27,"line":51},[25,98157,98158],{"class":302},"#调用concatenate进行数组拼接\n",[25,98160,98161],{"class":27,"line":59},[25,98162,98163],{"class":244},"np.concatenate((a,b))\n",[25,98165,98166],{"class":27,"line":67},[25,98167,98168],{"class":302},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[25,98170,98171],{"class":27,"line":75},[25,98172,98173],{"class":302},"#np.concatenate([a,b])\n",[99,98175,98176],{},"②一维多个数组拼接",[15,98178,98180],{"className":30449,"code":98179,"language":30451,"meta":20,"style":20},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[22,98181,98182,98187,98207,98212],{"__ignoreMap":20},[25,98183,98184],{"class":27,"line":28},[25,98185,98186],{"class":302},"#也可以多个数组进行拼接\n",[25,98188,98189,98191,98193,98195,98197,98199,98201,98203,98205],{"class":27,"line":39},[25,98190,531],{"class":244},[25,98192,290],{"class":240},[25,98194,93095],{"class":244},[25,98196,689],{"class":35},[25,98198,621],{"class":244},[25,98200,715],{"class":35},[25,98202,621],{"class":244},[25,98204,766],{"class":35},[25,98206,4767],{"class":244},[25,98208,98209],{"class":27,"line":51},[25,98210,98211],{"class":244},"c\n",[25,98213,98214],{"class":27,"line":59},[25,98215,98216],{"class":244},"np.concatenate((a,b,c))\n",[99,98218,98219],{},"③二维数组拼接",[15,98221,98223],{"className":30449,"code":98222,"language":30451,"meta":20,"style":20},"#二维数组使用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",[22,98224,98225,98230,98254,98279,98284,98289],{"__ignoreMap":20},[25,98226,98227],{"class":27,"line":28},[25,98228,98229],{"class":302},"#二维数组使用concatenate进行拼接\n",[25,98231,98232,98234,98236,98238,98240,98242,98244,98246,98248,98250,98252],{"class":27,"line":39},[25,98233,93377],{"class":244},[25,98235,290],{"class":240},[25,98237,93073],{"class":244},[25,98239,460],{"class":35},[25,98241,621],{"class":244},[25,98243,766],{"class":35},[25,98245,93078],{"class":244},[25,98247,315],{"class":35},[25,98249,621],{"class":244},[25,98251,536],{"class":35},[25,98253,251],{"class":244},[25,98255,98256,98259,98261,98263,98265,98267,98269,98271,98273,98275,98277],{"class":27,"line":51},[25,98257,98258],{"class":244},"bb",[25,98260,290],{"class":240},[25,98262,93073],{"class":244},[25,98264,580],{"class":35},[25,98266,621],{"class":244},[25,98268,885],{"class":35},[25,98270,93078],{"class":244},[25,98272,315],{"class":35},[25,98274,621],{"class":244},[25,98276,536],{"class":35},[25,98278,251],{"class":244},[25,98280,98281],{"class":27,"line":59},[25,98282,98283],{"class":302},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[25,98285,98286],{"class":27,"line":67},[25,98287,98288],{"class":302},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[25,98290,98291,98294,98296,98298,98300],{"class":27,"line":75},[25,98292,98293],{"class":244},"np.concatenate((aa,bb),",[25,98295,47585],{"class":5326},[25,98297,290],{"class":240},[25,98299,434],{"class":35},[25,98301,251],{"class":244},[99,98303,98304],{},"结果：",[99,98306,98307],{},[155,98308],{"alt":20,"src":98309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[15,98311,98313],{"className":30449,"code":98312,"language":30451,"meta":20,"style":20},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[22,98314,98315,98320],{"__ignoreMap":20},[25,98316,98317],{"class":27,"line":28},[25,98318,98319],{"class":302},"#指定axis为1进行拼接\n",[25,98321,98322,98324,98326,98328,98330],{"class":27,"line":39},[25,98323,98293],{"class":244},[25,98325,47585],{"class":5326},[25,98327,290],{"class":240},[25,98329,460],{"class":35},[25,98331,251],{"class":244},[99,98333,98304],{},[99,98335,98336],{},[155,98337],{"alt":20,"src":98338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[99,98340,98341],{},[392,98342,98343],{},"二维数组总结：0竖着方向，1横着方向",[99,98345,98346],{},"④三维数组拼接",[99,98348,98349],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[15,98351,98353],{"className":30449,"code":98352,"language":30451,"meta":20,"style":20},"#两个三行六列\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",[22,98354,98355,98360,98388,98418,98423,98440,98445,98450,98455,98472,98477,98482,98487,98500],{"__ignoreMap":20},[25,98356,98357],{"class":27,"line":28},[25,98358,98359],{"class":302},"#两个三行六列\n",[25,98361,98362,98364,98366,98368,98370,98372,98374,98376,98378,98380,98382,98384,98386],{"class":27,"line":39},[25,98363,95592],{"class":244},[25,98365,290],{"class":240},[25,98367,93073],{"class":244},[25,98369,460],{"class":35},[25,98371,621],{"class":244},[25,98373,568],{"class":35},[25,98375,93078],{"class":244},[25,98377,321],{"class":35},[25,98379,621],{"class":244},[25,98381,315],{"class":35},[25,98383,621],{"class":244},[25,98385,587],{"class":35},[25,98387,251],{"class":244},[25,98389,98390,98393,98395,98397,98399,98401,98404,98406,98408,98410,98412,98414,98416],{"class":27,"line":51},[25,98391,98392],{"class":244},"bbb",[25,98394,290],{"class":240},[25,98396,93073],{"class":244},[25,98398,580],{"class":35},[25,98400,621],{"class":244},[25,98402,98403],{"class":35},"137",[25,98405,93078],{"class":244},[25,98407,321],{"class":35},[25,98409,621],{"class":244},[25,98411,315],{"class":35},[25,98413,621],{"class":244},[25,98415,587],{"class":35},[25,98417,251],{"class":244},[25,98419,98420],{"class":27,"line":59},[25,98421,98422],{"class":302},"#axis=0\n",[25,98424,98425,98427,98429,98432,98434,98436,98438],{"class":27,"line":67},[25,98426,938],{"class":244},[25,98428,290],{"class":240},[25,98430,98431],{"class":244},"np.concatenate((aaa,bbb),",[25,98433,47585],{"class":5326},[25,98435,290],{"class":240},[25,98437,434],{"class":35},[25,98439,251],{"class":244},[25,98441,98442],{"class":27,"line":75},[25,98443,98444],{"class":244},"s.shape\n",[25,98446,98447],{"class":27,"line":83},[25,98448,98449],{"class":302},"#输出：(4,3,6)\n",[25,98451,98452],{"class":27,"line":91},[25,98453,98454],{"class":302},"#axis=1\n",[25,98456,98457,98460,98462,98464,98466,98468,98470],{"class":27,"line":1429},[25,98458,98459],{"class":244},"ss",[25,98461,290],{"class":240},[25,98463,98431],{"class":244},[25,98465,47585],{"class":5326},[25,98467,290],{"class":240},[25,98469,460],{"class":35},[25,98471,251],{"class":244},[25,98473,98474],{"class":27,"line":1441},[25,98475,98476],{"class":244},"ss.shape\n",[25,98478,98479],{"class":27,"line":1723},[25,98480,98481],{"class":302},"#输出：(2,6,6)\n",[25,98483,98484],{"class":27,"line":1728},[25,98485,98486],{"class":302},"#axis=2\n",[25,98488,98489,98491,98493,98495,98497],{"class":27,"line":1734},[25,98490,98431],{"class":244},[25,98492,47585],{"class":5326},[25,98494,290],{"class":240},[25,98496,321],{"class":35},[25,98498,98499],{"class":244},").shape\n",[25,98501,98502],{"class":27,"line":1739},[25,98503,98504],{"class":302},"#输出：（2，3，12）\n",[99,98506,98507],{},"⑤四维数组拼接",[15,98509,98511],{"className":30449,"code":98510,"language":30451,"meta":20,"style":20},"#两个三行六列\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",[22,98512,98513,98517,98545,98573,98598,98624,98628,98641,98646,98650,98662,98667,98671,98683,98688,98693,98705],{"__ignoreMap":20},[25,98514,98515],{"class":27,"line":28},[25,98516,98359],{"class":302},[25,98518,98519,98521,98523,98525,98527,98529,98531,98533,98535,98537,98539,98541,98543],{"class":27,"line":39},[25,98520,95592],{"class":244},[25,98522,290],{"class":240},[25,98524,93073],{"class":244},[25,98526,460],{"class":35},[25,98528,621],{"class":244},[25,98530,568],{"class":35},[25,98532,93078],{"class":244},[25,98534,321],{"class":35},[25,98536,621],{"class":244},[25,98538,315],{"class":35},[25,98540,621],{"class":244},[25,98542,587],{"class":35},[25,98544,251],{"class":244},[25,98546,98547,98549,98551,98553,98555,98557,98559,98561,98563,98565,98567,98569,98571],{"class":27,"line":51},[25,98548,98392],{"class":244},[25,98550,290],{"class":240},[25,98552,93073],{"class":244},[25,98554,580],{"class":35},[25,98556,621],{"class":244},[25,98558,98403],{"class":35},[25,98560,93078],{"class":244},[25,98562,321],{"class":35},[25,98564,621],{"class":244},[25,98566,315],{"class":35},[25,98568,621],{"class":244},[25,98570,587],{"class":35},[25,98572,251],{"class":244},[25,98574,98575,98578,98580,98582,98584,98586,98588,98590,98592,98594,98596],{"class":27,"line":59},[25,98576,98577],{"class":244},"aaaa",[25,98579,290],{"class":240},[25,98581,97741],{"class":244},[25,98583,321],{"class":35},[25,98585,621],{"class":244},[25,98587,315],{"class":35},[25,98589,621],{"class":244},[25,98591,315],{"class":35},[25,98593,621],{"class":244},[25,98595,321],{"class":35},[25,98597,251],{"class":244},[25,98599,98600,98603,98605,98608,98610,98612,98614,98616,98618,98620,98622],{"class":27,"line":67},[25,98601,98602],{"class":244},"bbbb",[25,98604,290],{"class":240},[25,98606,98607],{"class":244},"bbb.reshape(",[25,98609,321],{"class":35},[25,98611,621],{"class":244},[25,98613,315],{"class":35},[25,98615,621],{"class":244},[25,98617,315],{"class":35},[25,98619,621],{"class":244},[25,98621,321],{"class":35},[25,98623,251],{"class":244},[25,98625,98626],{"class":27,"line":75},[25,98627,98422],{"class":302},[25,98629,98630,98633,98635,98637,98639],{"class":27,"line":83},[25,98631,98632],{"class":244},"np.concatenate((aaaa,bbbb),",[25,98634,47585],{"class":5326},[25,98636,290],{"class":240},[25,98638,434],{"class":35},[25,98640,98499],{"class":244},[25,98642,98643],{"class":27,"line":91},[25,98644,98645],{"class":302},"#结果：（4，3，3，2）\n",[25,98647,98648],{"class":27,"line":1429},[25,98649,98454],{"class":302},[25,98651,98652,98654,98656,98658,98660],{"class":27,"line":1441},[25,98653,98632],{"class":244},[25,98655,47585],{"class":5326},[25,98657,290],{"class":240},[25,98659,460],{"class":35},[25,98661,98499],{"class":244},[25,98663,98664],{"class":27,"line":1723},[25,98665,98666],{"class":302},"#结果：（2，6，3，2）\n",[25,98668,98669],{"class":27,"line":1728},[25,98670,98486],{"class":302},[25,98672,98673,98675,98677,98679,98681],{"class":27,"line":1734},[25,98674,98632],{"class":244},[25,98676,47585],{"class":5326},[25,98678,290],{"class":240},[25,98680,321],{"class":35},[25,98682,98499],{"class":244},[25,98684,98685],{"class":27,"line":1739},[25,98686,98687],{"class":302},"#结果：（2，3，6，2）\n",[25,98689,98690],{"class":27,"line":1753},[25,98691,98692],{"class":302},"#axis=3\n",[25,98694,98695,98697,98699,98701,98703],{"class":27,"line":1758},[25,98696,98632],{"class":244},[25,98698,47585],{"class":5326},[25,98700,290],{"class":240},[25,98702,315],{"class":35},[25,98704,98499],{"class":244},[25,98706,98707],{"class":27,"line":1764},[25,98708,98709],{"class":302},"#结果：（2，3，3，4）\n",[182,98711,98713],{"id":98712},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[99,98715,98716],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[99,98718,98719],{},"①二维数组",[15,98721,98723],{"className":30449,"code":98722,"language":30451,"meta":20,"style":20},"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",[22,98724,98725,98749,98773,98778,98783],{"__ignoreMap":20},[25,98726,98727,98729,98731,98733,98735,98737,98739,98741,98743,98745,98747],{"class":27,"line":28},[25,98728,93377],{"class":244},[25,98730,290],{"class":240},[25,98732,93073],{"class":244},[25,98734,460],{"class":35},[25,98736,621],{"class":244},[25,98738,766],{"class":35},[25,98740,93078],{"class":244},[25,98742,315],{"class":35},[25,98744,621],{"class":244},[25,98746,536],{"class":35},[25,98748,251],{"class":244},[25,98750,98751,98753,98755,98757,98759,98761,98763,98765,98767,98769,98771],{"class":27,"line":39},[25,98752,98258],{"class":244},[25,98754,290],{"class":240},[25,98756,93073],{"class":244},[25,98758,580],{"class":35},[25,98760,621],{"class":244},[25,98762,885],{"class":35},[25,98764,93078],{"class":244},[25,98766,315],{"class":35},[25,98768,621],{"class":244},[25,98770,536],{"class":35},[25,98772,251],{"class":244},[25,98774,98775],{"class":27,"line":51},[25,98776,98777],{"class":244},"np.hstack((aa,bb))\n",[25,98779,98780],{"class":27,"line":59},[25,98781,98782],{"class":302},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[25,98784,98785],{"class":27,"line":67},[25,98786,98787],{"class":302},"#np.hstack([aa,bb])\n",[99,98789,98304],{},[99,98791,98792],{},[155,98793],{"alt":20,"src":98794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[99,98796,98797],{},"等效于concatenate()函数中axis=1时的情况",[99,98799,98800],{},"②三维数组",[15,98802,98804],{"className":30449,"code":98803,"language":30451,"meta":20,"style":20},"#两个三行六列\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",[22,98805,98806,98810,98838,98866,98871,98876],{"__ignoreMap":20},[25,98807,98808],{"class":27,"line":28},[25,98809,98359],{"class":302},[25,98811,98812,98814,98816,98818,98820,98822,98824,98826,98828,98830,98832,98834,98836],{"class":27,"line":39},[25,98813,95592],{"class":244},[25,98815,290],{"class":240},[25,98817,93073],{"class":244},[25,98819,460],{"class":35},[25,98821,621],{"class":244},[25,98823,568],{"class":35},[25,98825,93078],{"class":244},[25,98827,321],{"class":35},[25,98829,621],{"class":244},[25,98831,315],{"class":35},[25,98833,621],{"class":244},[25,98835,587],{"class":35},[25,98837,251],{"class":244},[25,98839,98840,98842,98844,98846,98848,98850,98852,98854,98856,98858,98860,98862,98864],{"class":27,"line":51},[25,98841,98392],{"class":244},[25,98843,290],{"class":240},[25,98845,93073],{"class":244},[25,98847,580],{"class":35},[25,98849,621],{"class":244},[25,98851,98403],{"class":35},[25,98853,93078],{"class":244},[25,98855,321],{"class":35},[25,98857,621],{"class":244},[25,98859,315],{"class":35},[25,98861,621],{"class":244},[25,98863,587],{"class":35},[25,98865,251],{"class":244},[25,98867,98868],{"class":27,"line":59},[25,98869,98870],{"class":302},"#使用hstack\n",[25,98872,98873],{"class":27,"line":67},[25,98874,98875],{"class":244},"np.hstack((aaa,bbb)).shape\n",[25,98877,98878],{"class":27,"line":75},[25,98879,98880],{"class":302},"#输出：（2，6，6）\n",[182,98882,98884],{"id":98883},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[99,98886,98887],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[99,98889,98719],{},[15,98891,98893],{"className":30449,"code":98892,"language":30451,"meta":20,"style":20},"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",[22,98894,98895,98919,98943,98948,98953,98958],{"__ignoreMap":20},[25,98896,98897,98899,98901,98903,98905,98907,98909,98911,98913,98915,98917],{"class":27,"line":28},[25,98898,93377],{"class":244},[25,98900,290],{"class":240},[25,98902,93073],{"class":244},[25,98904,460],{"class":35},[25,98906,621],{"class":244},[25,98908,766],{"class":35},[25,98910,93078],{"class":244},[25,98912,315],{"class":35},[25,98914,621],{"class":244},[25,98916,536],{"class":35},[25,98918,251],{"class":244},[25,98920,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939,98941],{"class":27,"line":39},[25,98922,98258],{"class":244},[25,98924,290],{"class":240},[25,98926,93073],{"class":244},[25,98928,580],{"class":35},[25,98930,621],{"class":244},[25,98932,885],{"class":35},[25,98934,93078],{"class":244},[25,98936,315],{"class":35},[25,98938,621],{"class":244},[25,98940,536],{"class":35},[25,98942,251],{"class":244},[25,98944,98945],{"class":27,"line":51},[25,98946,98947],{"class":302},"#vstack 垂直方向进行堆叠\n",[25,98949,98950],{"class":27,"line":59},[25,98951,98952],{"class":244},"np.vstack((aa,bb))\n",[25,98954,98955],{"class":27,"line":67},[25,98956,98957],{"class":302},"#与hstack传的参数类似，等价于：\n",[25,98959,98960],{"class":27,"line":75},[25,98961,98962],{"class":244},"np.vstack([aa,bb])\n",[99,98964,98304],{},[99,98966,98967],{},[155,98968],{"alt":20,"src":98969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[99,98971,98800],{},[15,98973,98975],{"className":30449,"code":98974,"language":30451,"meta":20,"style":20},"#两个三行六列\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",[22,98976,98977,98981,99009,99037,99042,99047],{"__ignoreMap":20},[25,98978,98979],{"class":27,"line":28},[25,98980,98359],{"class":302},[25,98982,98983,98985,98987,98989,98991,98993,98995,98997,98999,99001,99003,99005,99007],{"class":27,"line":39},[25,98984,95592],{"class":244},[25,98986,290],{"class":240},[25,98988,93073],{"class":244},[25,98990,460],{"class":35},[25,98992,621],{"class":244},[25,98994,568],{"class":35},[25,98996,93078],{"class":244},[25,98998,321],{"class":35},[25,99000,621],{"class":244},[25,99002,315],{"class":35},[25,99004,621],{"class":244},[25,99006,587],{"class":35},[25,99008,251],{"class":244},[25,99010,99011,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035],{"class":27,"line":51},[25,99012,98392],{"class":244},[25,99014,290],{"class":240},[25,99016,93073],{"class":244},[25,99018,580],{"class":35},[25,99020,621],{"class":244},[25,99022,98403],{"class":35},[25,99024,93078],{"class":244},[25,99026,321],{"class":35},[25,99028,621],{"class":244},[25,99030,315],{"class":35},[25,99032,621],{"class":244},[25,99034,587],{"class":35},[25,99036,251],{"class":244},[25,99038,99039],{"class":27,"line":59},[25,99040,99041],{"class":302},"#使用vstack\n",[25,99043,99044],{"class":27,"line":67},[25,99045,99046],{"class":244},"np.vstack((aaa,bbb)).shape\n",[25,99048,99049],{"class":27,"line":75},[25,99050,99051],{"class":302},"#输出：（4，3，6）\n",[182,99053,99055],{"id":99054},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[99,99057,99058],{},"该方法是三维数组特有的方法",[99,99060,99061],{},"也就是说",[99,99063,99064],{},"一维数组拼接方法用：concatenate()",[99,99066,99067],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[99,99069,99070],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[99,99072,99073],{},"四维数组及多维数组只能用concatenate进行拼接",[15,99075,99077],{"className":30449,"code":99076,"language":30451,"meta":20,"style":20},"#两个三行六列\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",[22,99078,99079,99083,99111,99139,99144,99149],{"__ignoreMap":20},[25,99080,99081],{"class":27,"line":28},[25,99082,98359],{"class":302},[25,99084,99085,99087,99089,99091,99093,99095,99097,99099,99101,99103,99105,99107,99109],{"class":27,"line":39},[25,99086,95592],{"class":244},[25,99088,290],{"class":240},[25,99090,93073],{"class":244},[25,99092,460],{"class":35},[25,99094,621],{"class":244},[25,99096,568],{"class":35},[25,99098,93078],{"class":244},[25,99100,321],{"class":35},[25,99102,621],{"class":244},[25,99104,315],{"class":35},[25,99106,621],{"class":244},[25,99108,587],{"class":35},[25,99110,251],{"class":244},[25,99112,99113,99115,99117,99119,99121,99123,99125,99127,99129,99131,99133,99135,99137],{"class":27,"line":51},[25,99114,98392],{"class":244},[25,99116,290],{"class":240},[25,99118,93073],{"class":244},[25,99120,580],{"class":35},[25,99122,621],{"class":244},[25,99124,98403],{"class":35},[25,99126,93078],{"class":244},[25,99128,321],{"class":35},[25,99130,621],{"class":244},[25,99132,315],{"class":35},[25,99134,621],{"class":244},[25,99136,587],{"class":35},[25,99138,251],{"class":244},[25,99140,99141],{"class":27,"line":59},[25,99142,99143],{"class":302},"#使用dstack\n",[25,99145,99146],{"class":27,"line":67},[25,99147,99148],{"class":244},"np.dstack((aaa,bbb)).shape\n",[25,99150,99151],{"class":27,"line":75},[25,99152,99153],{"class":302},"#结果：（2，3，12）\n",[159,99155,99156],{},"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":20,"searchDepth":39,"depth":39,"links":99158},[99159,99160,99161,99162],{"id":98098,"depth":39,"text":98099},{"id":98712,"depth":39,"text":98713},{"id":98883,"depth":39,"text":98884},{"id":99054,"depth":39,"text":99055},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98090,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99169,"title":99170,"body":99171,"description":164,"extension":165,"meta":99446,"navigation":167,"path":99447,"seo":99448,"stem":99449,"__hash__":99450},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99172,"toc":99444},[99173,99176,99179,99273,99276,99279,99282,99285,99288,99291,99294,99297,99441],[10,99174,99170],{"id":99175},"_7数组转置",[99,99177,99178],{},"使用transpose()函数",[15,99180,99182],{"className":30449,"code":99181,"language":30451,"meta":20,"style":20},"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",[22,99183,99184,99194,99218,99223,99228,99233,99238,99246,99250,99254,99259,99264,99269],{"__ignoreMap":20},[25,99185,99186,99188,99190,99192],{"class":27,"line":28},[25,99187,30463],{"class":240},[25,99189,31451],{"class":244},[25,99191,31454],{"class":240},[25,99193,31457],{"class":244},[25,99195,99196,99198,99200,99202,99204,99206,99208,99210,99212,99214,99216],{"class":27,"line":39},[25,99197,481],{"class":244},[25,99199,290],{"class":240},[25,99201,31788],{"class":244},[25,99203,460],{"class":35},[25,99205,621],{"class":244},[25,99207,766],{"class":35},[25,99209,93078],{"class":244},[25,99211,536],{"class":35},[25,99213,621],{"class":244},[25,99215,315],{"class":35},[25,99217,251],{"class":244},[25,99219,99220],{"class":27,"line":51},[25,99221,99222],{"class":302},"#二维数组转置\n",[25,99224,99225],{"class":27,"line":59},[25,99226,99227],{"class":302},"#调用transpose()函数\n",[25,99229,99230],{"class":27,"line":67},[25,99231,99232],{"class":244},"a.transpose()\n",[25,99234,99235],{"class":27,"line":75},[25,99236,99237],{"class":302},"#对于二维数组也可以采用.T来实现\n",[25,99239,99240,99243],{"class":27,"line":83},[25,99241,99242],{"class":244},"a.T",[25,99244,99245],{"class":302},"#与上述代码一样\n",[25,99247,99248],{"class":27,"line":91},[25,99249,93635],{"class":302},[25,99251,99252],{"class":27,"line":1429},[25,99253,93999],{"class":45},[25,99255,99256],{"class":27,"line":1441},[25,99257,99258],{"class":45},"array([[ 1,  4,  7, 10],\n",[25,99260,99261],{"class":27,"line":1723},[25,99262,99263],{"class":45},"       [ 2,  5,  8, 11],\n",[25,99265,99266],{"class":27,"line":1728},[25,99267,99268],{"class":45},"       [ 3,  6,  9, 12]])\n",[25,99270,99271],{"class":27,"line":1734},[25,99272,93999],{"class":45},[99,99274,99275],{},"也可以使用np.transpose()的形式",[99,99277,99278],{},"#多维数组进行转置 np.transpose()",[99,99280,99281],{},"#对二维数组也可以使用np.transpose()进行转置",[99,99283,99284],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[99,99286,99287],{},"第二个参数，维度可以理解为用axis中的数来理解",[99,99289,99290],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[99,99292,99293],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[99,99295,99296],{},"四维及以上的数组也是一样的道理",[15,99298,99300],{"className":30449,"code":99299,"language":30451,"meta":20,"style":20},"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",[22,99301,99302,99330,99335,99340,99345,99363,99368,99400,99405,99410,99415,99436],{"__ignoreMap":20},[25,99303,99304,99306,99308,99310,99312,99314,99316,99318,99320,99322,99324,99326,99328],{"class":27,"line":28},[25,99305,1063],{"class":244},[25,99307,290],{"class":240},[25,99309,93073],{"class":244},[25,99311,460],{"class":35},[25,99313,621],{"class":244},[25,99315,568],{"class":35},[25,99317,93078],{"class":244},[25,99319,315],{"class":35},[25,99321,621],{"class":244},[25,99323,587],{"class":35},[25,99325,621],{"class":244},[25,99327,321],{"class":35},[25,99329,251],{"class":244},[25,99331,99332],{"class":27,"line":39},[25,99333,99334],{"class":244},"x.shape\n",[25,99336,99337],{"class":27,"line":51},[25,99338,99339],{"class":302},"#结果：（3,6,2）\n",[25,99341,99342],{"class":27,"line":59},[25,99343,99344],{"class":302},"#使用np.transpose()进行转置 变为(2,6,3)\n",[25,99346,99347,99350,99352,99354,99356,99358,99360],{"class":27,"line":67},[25,99348,99349],{"class":244},"np.transpose(x,(",[25,99351,321],{"class":35},[25,99353,621],{"class":244},[25,99355,460],{"class":35},[25,99357,621],{"class":244},[25,99359,434],{"class":35},[25,99361,99362],{"class":244},")).shape\n",[25,99364,99365],{"class":27,"line":75},[25,99366,99367],{"class":302},"#结果：(2,6,3)\n",[25,99369,99370,99372,99374,99376,99378,99380,99382,99384,99386,99388,99390,99392,99394,99396,99398],{"class":27,"line":83},[25,99371,98577],{"class":244},[25,99373,290],{"class":240},[25,99375,93073],{"class":244},[25,99377,460],{"class":35},[25,99379,621],{"class":244},[25,99381,568],{"class":35},[25,99383,93078],{"class":244},[25,99385,315],{"class":35},[25,99387,621],{"class":244},[25,99389,321],{"class":35},[25,99391,621],{"class":244},[25,99393,460],{"class":35},[25,99395,621],{"class":244},[25,99397,587],{"class":35},[25,99399,251],{"class":244},[25,99401,99402],{"class":27,"line":91},[25,99403,99404],{"class":244},"aaaa.shape\n",[25,99406,99407],{"class":27,"line":1429},[25,99408,99409],{"class":302},"#结果：（3，2，1，6）\n",[25,99411,99412],{"class":27,"line":1441},[25,99413,99414],{"class":302},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[25,99416,99417,99420,99422,99424,99426,99428,99430,99432,99434],{"class":27,"line":1723},[25,99418,99419],{"class":244},"np.transpose(aaaa,(",[25,99421,460],{"class":35},[25,99423,621],{"class":244},[25,99425,321],{"class":35},[25,99427,621],{"class":244},[25,99429,434],{"class":35},[25,99431,621],{"class":244},[25,99433,315],{"class":35},[25,99435,99362],{"class":244},[25,99437,99438],{"class":27,"line":1728},[25,99439,99440],{"class":302},"#结果：(2,1,3,6)\n",[159,99442,99443],{},"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":20,"searchDepth":39,"depth":39,"links":99445},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99170,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99452,"title":99453,"body":99454,"description":164,"extension":165,"meta":100188,"navigation":167,"path":100189,"seo":100190,"stem":100191,"__hash__":100192},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99455,"toc":100186},[99456,99459,99462,99465,99468,99471,99474,99477,99480,99589,99592,99595,100183],[10,99457,99453],{"id":99458},"_8数组分割",[99,99460,99461],{},"split分割",[99,99463,99464],{},"numpy.split(ary,indics_or_sections,axis)",[99,99466,99467],{},"解释：",[99,99469,99470],{},"ary:被分割的数组",[99,99472,99473],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[99,99475,99476],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[99,99478,99479],{},"①一维数组的分割",[15,99481,99483],{"className":30449,"code":99482,"language":30451,"meta":20,"style":20},"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",[22,99484,99485,99501,99506,99515,99519,99524,99532,99536,99541,99546,99559,99563,99568,99580,99584],{"__ignoreMap":20},[25,99486,99487,99489,99491,99493,99495,99497,99499],{"class":27,"line":28},[25,99488,481],{"class":244},[25,99490,290],{"class":240},[25,99492,93073],{"class":244},[25,99494,460],{"class":35},[25,99496,621],{"class":244},[25,99498,663],{"class":35},[25,99500,251],{"class":244},[25,99502,99503],{"class":27,"line":39},[25,99504,99505],{"class":302},"#如果传入整数，必须能够平分，否则会报错\n",[25,99507,99508,99511,99513],{"class":27,"line":51},[25,99509,99510],{"class":244},"np.split(a,",[25,99512,321],{"class":35},[25,99514,251],{"class":244},[25,99516,99517],{"class":27,"line":59},[25,99518,93635],{"class":302},[25,99520,99521],{"class":27,"line":67},[25,99522,99523],{"class":302},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[25,99525,99526,99528,99530],{"class":27,"line":75},[25,99527,99510],{"class":244},[25,99529,536],{"class":35},[25,99531,251],{"class":244},[25,99533,99534],{"class":27,"line":83},[25,99535,93635],{"class":302},[25,99537,99538],{"class":27,"line":91},[25,99539,99540],{"class":302},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[25,99542,99543],{"class":27,"line":1429},[25,99544,99545],{"class":302},"#传入数组\n",[25,99547,99548,99551,99553,99555,99557],{"class":27,"line":1441},[25,99549,99550],{"class":244},"np.split(a,[",[25,99552,315],{"class":35},[25,99554,621],{"class":244},[25,99556,562],{"class":35},[25,99558,4767],{"class":244},[25,99560,99561],{"class":27,"line":1723},[25,99562,93635],{"class":302},[25,99564,99565],{"class":27,"line":1728},[25,99566,99567],{"class":302},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[25,99569,99570,99572,99574,99576,99578],{"class":27,"line":1734},[25,99571,99550],{"class":244},[25,99573,562],{"class":35},[25,99575,621],{"class":244},[25,99577,612],{"class":35},[25,99579,4767],{"class":244},[25,99581,99582],{"class":27,"line":1739},[25,99583,93635],{"class":302},[25,99585,99586],{"class":27,"line":1753},[25,99587,99588],{"class":302},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[99,99590,99591],{},"②二维数组的分割",[99,99593,99594],{},"使用split()",[15,99596,99598],{"className":30449,"code":99597,"language":30451,"meta":20,"style":20},"#二维数组分割\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",[22,99599,99600,99605,99629,99634,99643,99647,99651,99656,99661,99666,99671,99676,99681,99686,99690,99703,99707,99711,99715,99719,99723,99728,99733,99738,99742,99747,99763,99767,99771,99776,99781,99786,99791,99796,99801,99806,99811,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99865,99869,99889,99893,99897,99902,99907,99912,99917,99922,99927,99932,99937,99942,99947,99952,99957,99962,99967,99972,99977,99982,99987,99991,99996,100005,100009,100013,100017,100021,100025,100029,100033,100037,100041,100050,100054,100058,100062,100066,100070,100074,100078,100082,100086,100090,100094,100098,100102,100106,100110,100114,100118,100122,100126,100130,100134,100147,100151,100155,100159,100163,100167,100171,100175,100179],{"__ignoreMap":20},[25,99601,99602],{"class":27,"line":28},[25,99603,99604],{"class":302},"#二维数组分割\n",[25,99606,99607,99609,99611,99613,99615,99617,99619,99621,99623,99625,99627],{"class":27,"line":39},[25,99608,93377],{"class":244},[25,99610,290],{"class":240},[25,99612,93073],{"class":244},[25,99614,460],{"class":35},[25,99616,621],{"class":244},[25,99618,568],{"class":35},[25,99620,93078],{"class":244},[25,99622,587],{"class":35},[25,99624,621],{"class":244},[25,99626,587],{"class":35},[25,99628,251],{"class":244},[25,99630,99631],{"class":27,"line":51},[25,99632,99633],{"class":302},"#默认axis=0  传入整数平均分,按行来的\n",[25,99635,99636,99639,99641],{"class":27,"line":59},[25,99637,99638],{"class":244},"np.split(aa,",[25,99640,315],{"class":35},[25,99642,251],{"class":244},[25,99644,99645],{"class":27,"line":67},[25,99646,95835],{"class":302},[25,99648,99649],{"class":27,"line":75},[25,99650,93999],{"class":45},[25,99652,99653],{"class":27,"line":83},[25,99654,99655],{"class":45},"[array([[ 1,  2,  3,  4,  5,  6],\n",[25,99657,99658],{"class":27,"line":91},[25,99659,99660],{"class":45},"        [ 7,  8,  9, 10, 11, 12]]),\n",[25,99662,99663],{"class":27,"line":1429},[25,99664,99665],{"class":45}," array([[13, 14, 15, 16, 17, 18],\n",[25,99667,99668],{"class":27,"line":1441},[25,99669,99670],{"class":45},"        [19, 20, 21, 22, 23, 24]]),\n",[25,99672,99673],{"class":27,"line":1723},[25,99674,99675],{"class":45}," array([[25, 26, 27, 28, 29, 30],\n",[25,99677,99678],{"class":27,"line":1728},[25,99679,99680],{"class":45},"        [31, 32, 33, 34, 35, 36]])]\n",[25,99682,99683],{"class":27,"line":1734},[25,99684,99685],{"class":45}," '''\n",[25,99687,99688],{"class":27,"line":1739},[25,99689,99545],{"class":302},[25,99691,99692,99695,99697,99699,99701],{"class":27,"line":1753},[25,99693,99694],{"class":244},"np.split(aa,[",[25,99696,321],{"class":35},[25,99698,621],{"class":244},[25,99700,562],{"class":35},[25,99702,4767],{"class":244},[25,99704,99705],{"class":27,"line":1758},[25,99706,95835],{"class":302},[25,99708,99709],{"class":27,"line":1764},[25,99710,93999],{"class":45},[25,99712,99713],{"class":27,"line":1785},[25,99714,99655],{"class":45},[25,99716,99717],{"class":27,"line":1790},[25,99718,99660],{"class":45},[25,99720,99721],{"class":27,"line":1804},[25,99722,99665],{"class":45},[25,99724,99725],{"class":27,"line":1809},[25,99726,99727],{"class":45},"        [19, 20, 21, 22, 23, 24],\n",[25,99729,99730],{"class":27,"line":1838},[25,99731,99732],{"class":45},"        [25, 26, 27, 28, 29, 30]]),\n",[25,99734,99735],{"class":27,"line":1843},[25,99736,99737],{"class":45}," array([[31, 32, 33, 34, 35, 36]])]\n",[25,99739,99740],{"class":27,"line":1860},[25,99741,93999],{"class":45},[25,99743,99744],{"class":27,"line":1865},[25,99745,99746],{"class":302},"#axis=1 按照列来分\n",[25,99748,99749,99751,99753,99755,99757,99759,99761],{"class":27,"line":1870},[25,99750,99638],{"class":244},[25,99752,315],{"class":35},[25,99754,621],{"class":244},[25,99756,47585],{"class":5326},[25,99758,290],{"class":240},[25,99760,460],{"class":35},[25,99762,251],{"class":244},[25,99764,99765],{"class":27,"line":1875},[25,99766,95835],{"class":302},[25,99768,99769],{"class":27,"line":1889},[25,99770,93999],{"class":45},[25,99772,99773],{"class":27,"line":1894},[25,99774,99775],{"class":45},"[array([[ 1,  2],\n",[25,99777,99778],{"class":27,"line":2687},[25,99779,99780],{"class":45},"        [ 7,  8],\n",[25,99782,99783],{"class":27,"line":2701},[25,99784,99785],{"class":45},"        [13, 14],\n",[25,99787,99788],{"class":27,"line":2709},[25,99789,99790],{"class":45},"        [19, 20],\n",[25,99792,99793],{"class":27,"line":2714},[25,99794,99795],{"class":45},"        [25, 26],\n",[25,99797,99798],{"class":27,"line":2720},[25,99799,99800],{"class":45},"        [31, 32]]),\n",[25,99802,99803],{"class":27,"line":2726},[25,99804,99805],{"class":45}," array([[ 3,  4],\n",[25,99807,99808],{"class":27,"line":2731},[25,99809,99810],{"class":45},"        [ 9, 10],\n",[25,99812,99813],{"class":27,"line":8058},[25,99814,99815],{"class":45},"        [15, 16],\n",[25,99817,99818],{"class":27,"line":8082},[25,99819,99820],{"class":45},"        [21, 22],\n",[25,99822,99823],{"class":27,"line":8087},[25,99824,99825],{"class":45},"        [27, 28],\n",[25,99827,99828],{"class":27,"line":8093},[25,99829,99830],{"class":45},"        [33, 34]]),\n",[25,99832,99833],{"class":27,"line":8120},[25,99834,99835],{"class":45}," array([[ 5,  6],\n",[25,99837,99838],{"class":27,"line":8125},[25,99839,99840],{"class":45},"        [11, 12],\n",[25,99842,99843],{"class":27,"line":8131},[25,99844,99845],{"class":45},"        [17, 18],\n",[25,99847,99848],{"class":27,"line":8143},[25,99849,99850],{"class":45},"        [23, 24],\n",[25,99852,99853],{"class":27,"line":8155},[25,99854,99855],{"class":45},"        [29, 30],\n",[25,99857,99858],{"class":27,"line":8167},[25,99859,99860],{"class":45},"        [35, 36]])]\n",[25,99862,99863],{"class":27,"line":9826},[25,99864,99685],{"class":45},[25,99866,99867],{"class":27,"line":9851},[25,99868,99545],{"class":302},[25,99870,99871,99873,99875,99877,99879,99881,99883,99885,99887],{"class":27,"line":9874},[25,99872,99694],{"class":244},[25,99874,460],{"class":35},[25,99876,621],{"class":244},[25,99878,321],{"class":35},[25,99880,41680],{"class":244},[25,99882,47585],{"class":5326},[25,99884,290],{"class":240},[25,99886,460],{"class":35},[25,99888,251],{"class":244},[25,99890,99891],{"class":27,"line":9898},[25,99892,93635],{"class":302},[25,99894,99895],{"class":27,"line":9903},[25,99896,93999],{"class":45},[25,99898,99899],{"class":27,"line":9908},[25,99900,99901],{"class":45},"[array([[ 1],\n",[25,99903,99904],{"class":27,"line":9913},[25,99905,99906],{"class":45},"        [ 7],\n",[25,99908,99909],{"class":27,"line":9922},[25,99910,99911],{"class":45},"        [13],\n",[25,99913,99914],{"class":27,"line":9927},[25,99915,99916],{"class":45},"        [19],\n",[25,99918,99919],{"class":27,"line":9933},[25,99920,99921],{"class":45},"        [25],\n",[25,99923,99924],{"class":27,"line":9954},[25,99925,99926],{"class":45},"        [31]]),\n",[25,99928,99929],{"class":27,"line":9960},[25,99930,99931],{"class":45}," array([[ 2],\n",[25,99933,99934],{"class":27,"line":9974},[25,99935,99936],{"class":45},"        [ 8],\n",[25,99938,99939],{"class":27,"line":9980},[25,99940,99941],{"class":45},"        [14],\n",[25,99943,99944],{"class":27,"line":10007},[25,99945,99946],{"class":45},"        [20],\n",[25,99948,99949],{"class":27,"line":10016},[25,99950,99951],{"class":45},"        [26],\n",[25,99953,99954],{"class":27,"line":10022},[25,99955,99956],{"class":45},"        [32]]),\n",[25,99958,99959],{"class":27,"line":10030},[25,99960,99961],{"class":45}," array([[ 3,  4,  5,  6],\n",[25,99963,99964],{"class":27,"line":10035},[25,99965,99966],{"class":45},"        [ 9, 10, 11, 12],\n",[25,99968,99969],{"class":27,"line":16714},[25,99970,99971],{"class":45},"        [15, 16, 17, 18],\n",[25,99973,99974],{"class":27,"line":16720},[25,99975,99976],{"class":45},"        [21, 22, 23, 24],\n",[25,99978,99979],{"class":27,"line":16743},[25,99980,99981],{"class":45},"        [27, 28, 29, 30],\n",[25,99983,99984],{"class":27,"line":16749},[25,99985,99986],{"class":45},"        [33, 34, 35, 36]])]\n",[25,99988,99989],{"class":27,"line":16772},[25,99990,93999],{"class":45},[25,99992,99993],{"class":27,"line":16786},[25,99994,99995],{"class":302},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[25,99997,99998,100001,100003],{"class":27,"line":16806},[25,99999,100000],{"class":244},"np.vsplit(aa,",[25,100002,315],{"class":35},[25,100004,251],{"class":244},[25,100006,100007],{"class":27,"line":16812},[25,100008,93635],{"class":302},[25,100010,100011],{"class":27,"line":16823},[25,100012,93999],{"class":45},[25,100014,100015],{"class":27,"line":16846},[25,100016,99655],{"class":45},[25,100018,100019],{"class":27,"line":16868},[25,100020,99660],{"class":45},[25,100022,100023],{"class":27,"line":16873},[25,100024,99665],{"class":45},[25,100026,100027],{"class":27,"line":16879},[25,100028,99670],{"class":45},[25,100030,100031],{"class":27,"line":16893},[25,100032,99675],{"class":45},[25,100034,100035],{"class":27,"line":16906},[25,100036,99680],{"class":45},[25,100038,100039],{"class":27,"line":16911},[25,100040,93999],{"class":45},[25,100042,100043,100046,100048],{"class":27,"line":16925},[25,100044,100045],{"class":244},"np.hsplit(aa,",[25,100047,315],{"class":35},[25,100049,251],{"class":244},[25,100051,100052],{"class":27,"line":16930},[25,100053,93635],{"class":302},[25,100055,100056],{"class":27,"line":16936},[25,100057,93999],{"class":45},[25,100059,100060],{"class":27,"line":16941},[25,100061,99775],{"class":45},[25,100063,100064],{"class":27,"line":16955},[25,100065,99780],{"class":45},[25,100067,100068],{"class":27,"line":16960},[25,100069,99785],{"class":45},[25,100071,100072],{"class":27,"line":16965},[25,100073,99790],{"class":45},[25,100075,100076],{"class":27,"line":16979},[25,100077,99795],{"class":45},[25,100079,100080],{"class":27,"line":16991},[25,100081,99800],{"class":45},[25,100083,100084],{"class":27,"line":16996},[25,100085,99805],{"class":45},[25,100087,100088],{"class":27,"line":17009},[25,100089,99810],{"class":45},[25,100091,100092],{"class":27,"line":17014},[25,100093,99815],{"class":45},[25,100095,100096],{"class":27,"line":17019},[25,100097,99820],{"class":45},[25,100099,100100],{"class":27,"line":17024},[25,100101,99825],{"class":45},[25,100103,100104],{"class":27,"line":17037},[25,100105,99830],{"class":45},[25,100107,100108],{"class":27,"line":17042},[25,100109,99835],{"class":45},[25,100111,100112],{"class":27,"line":32704},[25,100113,99840],{"class":45},[25,100115,100116],{"class":27,"line":32710},[25,100117,99845],{"class":45},[25,100119,100120],{"class":27,"line":32716},[25,100121,99850],{"class":45},[25,100123,100124],{"class":27,"line":32722},[25,100125,99855],{"class":45},[25,100127,100128],{"class":27,"line":32728},[25,100129,99860],{"class":45},[25,100131,100132],{"class":27,"line":32739},[25,100133,93999],{"class":45},[25,100135,100136,100139,100141,100143,100145],{"class":27,"line":32745},[25,100137,100138],{"class":244},"np.vsplit(aa,[",[25,100140,321],{"class":35},[25,100142,621],{"class":244},[25,100144,562],{"class":35},[25,100146,4767],{"class":244},[25,100148,100149],{"class":27,"line":32765},[25,100150,93635],{"class":302},[25,100152,100153],{"class":27,"line":32771},[25,100154,93999],{"class":45},[25,100156,100157],{"class":27,"line":32782},[25,100158,99655],{"class":45},[25,100160,100161],{"class":27,"line":32788},[25,100162,99660],{"class":45},[25,100164,100165],{"class":27,"line":32794},[25,100166,99665],{"class":45},[25,100168,100169],{"class":27,"line":32800},[25,100170,99727],{"class":45},[25,100172,100173],{"class":27,"line":32806},[25,100174,99732],{"class":45},[25,100176,100177],{"class":27,"line":32812},[25,100178,99737],{"class":45},[25,100180,100181],{"class":27,"line":32818},[25,100182,99685],{"class":45},[159,100184,100185],{},"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":20,"searchDepth":39,"depth":39,"links":100187},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99453,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100194,"title":100195,"body":100196,"description":164,"extension":165,"meta":100690,"navigation":167,"path":100691,"seo":100692,"stem":100693,"__hash__":100694},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100197,"toc":100681},[100198,100201,100204,100229,100233,100292,100344,100348,100350,100386,100440,100442,100480,100551,100555,100560,100564,100567,100600,100603,100607,100610,100613,100616,100619,100624,100628,100631,100634,100637,100640,100645,100649,100654,100657,100678],[10,100199,100195],{"id":100200},"_9数学函数",[99,100202,100203],{},"补充回顾：python的列表推导式",[15,100205,100207],{"className":30449,"code":100206,"language":30451,"meta":20,"style":20},"[1\u002Fi for i in a]\n",[22,100208,100209],{"__ignoreMap":20},[25,100210,100211,100213,100215,100217,100220,100222,100224,100226],{"class":27,"line":28},[25,100212,1133],{"class":244},[25,100214,460],{"class":35},[25,100216,827],{"class":240},[25,100218,100219],{"class":244},"i ",[25,100221,3135],{"class":240},[25,100223,9548],{"class":244},[25,100225,26114],{"class":240},[25,100227,100228],{"class":244}," a]\n",[182,100230,100232],{"id":100231},"_91-求倒数","9.1 求倒数",[15,100234,100236],{"className":30449,"code":100235,"language":30451,"meta":20,"style":20},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[22,100237,100238,100243,100271,100283],{"__ignoreMap":20},[25,100239,100240],{"class":27,"line":28},[25,100241,100242],{"class":302},"#数组求倒数\n",[25,100244,100245,100247,100249,100251,100253,100255,100257,100259,100261,100263,100265,100267,100269],{"class":27,"line":39},[25,100246,481],{"class":244},[25,100248,290],{"class":240},[25,100250,1133],{"class":244},[25,100252,460],{"class":35},[25,100254,621],{"class":244},[25,100256,321],{"class":35},[25,100258,621],{"class":244},[25,100260,315],{"class":35},[25,100262,621],{"class":244},[25,100264,536],{"class":35},[25,100266,621],{"class":244},[25,100268,562],{"class":35},[25,100270,33317],{"class":244},[25,100272,100273,100275,100277,100280],{"class":27,"line":51},[25,100274,506],{"class":244},[25,100276,290],{"class":240},[25,100278,100279],{"class":244},"np.array(a)",[25,100281,100282],{"class":302},"#将列表转换为数组\n",[25,100284,100285,100287,100289],{"class":27,"line":59},[25,100286,460],{"class":35},[25,100288,827],{"class":240},[25,100290,100291],{"class":244},"b\n",[15,100293,100295],{"className":30449,"code":100294,"language":30451,"meta":20,"style":20},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[22,100296,100297,100325,100334,100339],{"__ignoreMap":20},[25,100298,100299,100301,100303,100305,100307,100309,100311,100313,100315,100317,100319,100321,100323],{"class":27,"line":28},[25,100300,481],{"class":244},[25,100302,290],{"class":240},[25,100304,1133],{"class":244},[25,100306,460],{"class":35},[25,100308,621],{"class":244},[25,100310,321],{"class":35},[25,100312,621],{"class":244},[25,100314,315],{"class":35},[25,100316,621],{"class":244},[25,100318,536],{"class":35},[25,100320,621],{"class":244},[25,100322,562],{"class":35},[25,100324,33317],{"class":244},[25,100326,100327,100329,100331],{"class":27,"line":39},[25,100328,506],{"class":244},[25,100330,290],{"class":240},[25,100332,100333],{"class":244},"np.array(a)\n",[25,100335,100336],{"class":27,"line":51},[25,100337,100338],{"class":302},"#调用numpy中的函数reciprocal()\n",[25,100340,100341],{"class":27,"line":59},[25,100342,100343],{"class":244},"np.reciprocal(b)\n",[182,100345,100347],{"id":100346},"_92-求平方","9.2 求平方",[99,100349,94601],{},[15,100351,100353],{"className":30449,"code":100352,"language":30451,"meta":20,"style":20},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[22,100354,100355,100360,100365,100381],{"__ignoreMap":20},[25,100356,100357],{"class":27,"line":28},[25,100358,100359],{"class":302},"#square()，求平方\n",[25,100361,100362],{"class":27,"line":39},[25,100363,100364],{"class":302},"#一维数组\n",[25,100366,100367,100369,100371,100373,100375,100377,100379],{"class":27,"line":51},[25,100368,481],{"class":244},[25,100370,290],{"class":240},[25,100372,93073],{"class":244},[25,100374,460],{"class":35},[25,100376,621],{"class":244},[25,100378,689],{"class":35},[25,100380,251],{"class":244},[25,100382,100383],{"class":27,"line":59},[25,100384,100385],{"class":244},"np.square(a)\n",[15,100387,100389],{"className":30449,"code":100388,"language":30451,"meta":20,"style":20},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[22,100390,100391,100396,100401,100422],{"__ignoreMap":20},[25,100392,100393],{"class":27,"line":28},[25,100394,100395],{"class":302},"#或者通过循环遍历的形式来计算\n",[25,100397,100398],{"class":27,"line":39},[25,100399,100400],{"class":302},"#这是一个列表\n",[25,100402,100403,100406,100408,100410,100412,100414,100416,100419],{"class":27,"line":51},[25,100404,100405],{"class":244},"[i",[25,100407,698],{"class":240},[25,100409,100219],{"class":244},[25,100411,3135],{"class":240},[25,100413,9548],{"class":244},[25,100415,26114],{"class":240},[25,100417,100418],{"class":244}," a]",[25,100420,100421],{"class":302},"#这个求完之后在数列当中\n",[25,100423,100424,100427,100429,100431,100433,100435,100437],{"class":27,"line":59},[25,100425,100426],{"class":244},"np.array([i",[25,100428,698],{"class":240},[25,100430,100219],{"class":244},[25,100432,3135],{"class":240},[25,100434,9548],{"class":244},[25,100436,26114],{"class":240},[25,100438,100439],{"class":244}," a])\n",[99,100441,93362],{},[15,100443,100445],{"className":30449,"code":100444,"language":30451,"meta":20,"style":20},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[22,100446,100447,100451,100475],{"__ignoreMap":20},[25,100448,100449],{"class":27,"line":28},[25,100450,93372],{"class":302},[25,100452,100453,100455,100457,100459,100461,100463,100465,100467,100469,100471,100473],{"class":27,"line":39},[25,100454,93377],{"class":244},[25,100456,290],{"class":240},[25,100458,93073],{"class":244},[25,100460,460],{"class":35},[25,100462,621],{"class":244},[25,100464,766],{"class":35},[25,100466,93078],{"class":244},[25,100468,536],{"class":35},[25,100470,621],{"class":244},[25,100472,315],{"class":35},[25,100474,251],{"class":244},[25,100476,100477],{"class":27,"line":51},[25,100478,100479],{"class":244},"np.square(aa)\n",[15,100481,100483],{"className":30449,"code":100482,"language":30451,"meta":20,"style":20},"#传统的方式\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",[22,100484,100485,100490,100499,100515,100531,100546],{"__ignoreMap":20},[25,100486,100487],{"class":27,"line":28},[25,100488,100489],{"class":302},"#传统的方式\n",[25,100491,100492,100494,100496],{"class":27,"line":39},[25,100493,98258],{"class":244},[25,100495,290],{"class":240},[25,100497,100498],{"class":244},"np.empty_like(aa)\n",[25,100500,100501,100503,100505,100507,100509,100511,100513],{"class":27,"line":51},[25,100502,3135],{"class":240},[25,100504,9548],{"class":244},[25,100506,26114],{"class":240},[25,100508,32514],{"class":35},[25,100510,245],{"class":244},[25,100512,536],{"class":35},[25,100514,30857],{"class":244},[25,100516,100517,100519,100521,100523,100525,100527,100529],{"class":27,"line":59},[25,100518,3311],{"class":240},[25,100520,9610],{"class":244},[25,100522,26114],{"class":240},[25,100524,32514],{"class":35},[25,100526,245],{"class":244},[25,100528,315],{"class":35},[25,100530,30857],{"class":244},[25,100532,100533,100536,100538,100541,100543],{"class":27,"line":67},[25,100534,100535],{"class":244},"        bb[i,j]",[25,100537,290],{"class":240},[25,100539,100540],{"class":244},"aa[i,j]",[25,100542,698],{"class":240},[25,100544,100545],{"class":244},"aa[i,j]\n",[25,100547,100548],{"class":27,"line":75},[25,100549,100550],{"class":244},"bb\n",[182,100552,100554],{"id":100553},"_93-求各元素的符号","9.3 求各元素的符号",[99,100556,100557],{},[155,100558],{"alt":20,"src":100559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[182,100561,100563],{"id":100562},"_94-modf函数","9.4 modf函数",[99,100565,100566],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[15,100568,100570],{"className":30449,"code":100569,"language":30451,"meta":20,"style":20},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[22,100571,100572,100595],{"__ignoreMap":20},[25,100573,100574,100576,100578,100580,100582,100584,100586,100588,100590,100593],{"class":27,"line":28},[25,100575,481],{"class":244},[25,100577,290],{"class":240},[25,100579,93073],{"class":244},[25,100581,775],{"class":240},[25,100583,689],{"class":35},[25,100585,621],{"class":244},[25,100587,689],{"class":35},[25,100589,621],{"class":244},[25,100591,100592],{"class":35},"0.3",[25,100594,251],{"class":244},[25,100596,100597],{"class":27,"line":39},[25,100598,100599],{"class":244},"np.modf(a)\n",[99,100601,100602],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[182,100604,100606],{"id":100605},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[99,100608,100609],{},"np.cell()",[99,100611,100612],{},"np.floor()",[99,100614,100615],{},"np.rint()",[99,100617,100618],{},"对各元素分别向上取整、向下取整、四舍五入",[99,100620,100621],{},[155,100622],{"alt":20,"src":100623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[182,100625,100627],{"id":100626},"_96-around函数","9.6 around()函数",[99,100629,100630],{},"around()函数也可以实现对数的小数位数进行操作",[99,100632,100633],{},"其中的参数：",[99,100635,100636],{},"1.要传的数组",[99,100638,100639],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[99,100641,100642],{},[155,100643],{"alt":20,"src":100644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[182,100646,100648],{"id":100647},"_97-三角函数","9.7 三角函数",[99,100650,100651],{},[155,100652],{"alt":20,"src":100653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[99,100655,100656],{},"引入图像模块非常重要",[15,100658,100660],{"className":30449,"code":100659,"language":30451,"meta":20,"style":20},"from matplotlib import pyplot as plt\n",[22,100661,100662],{"__ignoreMap":20},[25,100663,100664,100666,100669,100671,100674,100676],{"class":27,"line":28},[25,100665,30808],{"class":240},[25,100667,100668],{"class":244}," matplotlib ",[25,100670,30463],{"class":240},[25,100672,100673],{"class":244}," pyplot ",[25,100675,31454],{"class":240},[25,100677,31508],{"class":244},[159,100679,100680],{},"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":20,"searchDepth":39,"depth":39,"links":100682},[100683,100684,100685,100686,100687,100688,100689],{"id":100231,"depth":39,"text":100232},{"id":100346,"depth":39,"text":100347},{"id":100553,"depth":39,"text":100554},{"id":100562,"depth":39,"text":100563},{"id":100605,"depth":39,"text":100606},{"id":100626,"depth":39,"text":100627},{"id":100647,"depth":39,"text":100648},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100195,"description":164},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100696,"title":100697,"body":100698,"description":164,"extension":165,"meta":100702,"navigation":167,"path":100703,"seo":100704,"stem":100705,"__hash__":100706},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100699,"toc":100700},[],{"title":20,"searchDepth":39,"depth":39,"links":100701},[],{"category":50491},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100697,"description":164},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100708,"title":100709,"body":100710,"description":20,"extension":165,"meta":102718,"navigation":167,"path":102719,"seo":102720,"stem":102721,"__hash__":102722},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100711,"toc":102694},[100712,100715,100719,100722,100725,100731,100734,100757,100760,100794,100797,100838,100842,100845,100938,100941,100985,100988,101005,101008,101022,101025,101028,101073,101076,101113,101117,101120,101126,101131,101151,101155,101158,101224,101227,101245,101249,101252,101281,101291,101297,101301,101304,101310,101321,101325,101328,101358,101361,101641,101644,101647,101658,101661,101664,101686,101693,101696,101714,101717,101720,101734,101742,101745,101771,101777,101780,101783,101793,101805,101825,101834,101854,101864,101888,101901,101915,101920,101961,101978,102003,102015,102035,102041,102086,102105,102122,102135,102151,102158,102170,102179,102214,102235,102260,102273,102297,102312,102337,102340,102361,102370,102373,102384,102388,102391,102397,102409,102416,102420,102423,102435,102438,102452,102455,102465,102475,102478,102518,102521,102525,102531,102534,102548,102552,102555,102588,102592,102595,102618,102626,102629,102635,102641,102644,102647,102675,102679,102682,102688,102691],[10,100713,100709],{"id":100714},"_1环境安装与第一个-mujoco-程序",[182,100716,100718],{"id":100717},"_1目标说明","1.目标说明",[99,100720,100721],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[99,100723,100724],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[15,100726,100729],{"className":100727,"code":100728,"language":5297,"meta":20},[5295],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[22,100730,100728],{"__ignoreMap":20},[99,100732,100733],{},"需要掌握:",[194,100735,100736,100739,100742,100747,100752],{},[106,100737,100738],{},"Fedora 44 下 MuJoCo 的系统依赖",[106,100740,100741],{},"Python 虚拟环境创建",[106,100743,100744],{},[22,100745,100746],{},"mujoco.MjModel",[106,100748,100749],{},[22,100750,100751],{},"mujoco.MjData",[106,100753,100754],{},[22,100755,100756],{},"mujoco.mj_step(model, data)",[99,100758,100759],{},"MuJoCo 中最重要的两个对象:",[380,100761,100762,100772],{},[383,100763,100764],{},[386,100765,100766,100769],{},[389,100767,100768],{"align":23846},"对象",[389,100770,100771],{"align":23846},"含义",[427,100773,100774,100784],{},[386,100775,100776,100781],{},[432,100777,100778],{"align":23846},[22,100779,100780],{},"MjModel",[432,100782,100783],{"align":23846},"模型结构，来自 XML，基本不随时间变化",[386,100785,100786,100791],{},[432,100787,100788],{"align":23846},[22,100789,100790],{},"MjData",[432,100792,100793],{"align":23846},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[99,100795,100796],{},"可以先用一个类比理解：",[380,100798,100799,100809],{},[383,100800,100801],{},[386,100802,100803,100806],{},[389,100804,100805],{"align":23846},"类比",[389,100807,100808],{"align":23846},"MuJoCo 对象",[427,100810,100811,100820,100829],{},[386,100812,100813,100816],{},[432,100814,100815],{"align":23846},"游戏地图和角色配置",[432,100817,100818],{"align":23846},[22,100819,100780],{},[386,100821,100822,100825],{},[432,100823,100824],{"align":23846},"游戏运行到当前帧的状态",[432,100826,100827],{"align":23846},[22,100828,100790],{},[386,100830,100831,100834],{},[432,100832,100833],{"align":23846},"前进一帧",[432,100835,100836],{"align":23846},[22,100837,100756],{},[182,100839,100841],{"id":100840},"_2环境与依赖安装","2.环境与依赖安装",[99,100843,100844],{},"Fedora 44 系统依赖:",[15,100846,100848],{"className":17,"code":100847,"language":19,"meta":20,"style":20},"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",[22,100849,100850,100862,100875,100888,100898,100908,100927],{"__ignoreMap":20},[25,100851,100852,100854,100856,100858,100860],{"class":27,"line":28},[25,100853,24684],{"class":31},[25,100855,26386],{"class":45},[25,100857,23942],{"class":45},[25,100859,26471],{"class":35},[25,100861,36],{"class":35},[25,100863,100864,100867,100870,100873],{"class":27,"line":39},[25,100865,100866],{"class":45},"  python3",[25,100868,100869],{"class":45}," python3-pip",[25,100871,100872],{"class":45}," python3-virtualenv",[25,100874,36],{"class":35},[25,100876,100877,100880,100883,100886],{"class":27,"line":51},[25,100878,100879],{"class":45},"  mesa-libGL",[25,100881,100882],{"class":45}," mesa-libGLU",[25,100884,100885],{"class":45}," mesa-dri-drivers",[25,100887,36],{"class":35},[25,100889,100890,100893,100896],{"class":27,"line":59},[25,100891,100892],{"class":45},"  libglvnd-glx",[25,100894,100895],{"class":45}," libglvnd-opengl",[25,100897,36],{"class":35},[25,100899,100900,100903,100906],{"class":27,"line":67},[25,100901,100902],{"class":45},"  glfw",[25,100904,100905],{"class":45}," glfw-devel",[25,100907,36],{"class":35},[25,100909,100910,100913,100916,100919,100922,100925],{"class":27,"line":75},[25,100911,100912],{"class":45},"  libX11",[25,100914,100915],{"class":45}," libXcursor",[25,100917,100918],{"class":45}," libXi",[25,100920,100921],{"class":45}," libXinerama",[25,100923,100924],{"class":45}," libXrandr",[25,100926,36],{"class":35},[25,100928,100929,100932,100935],{"class":27,"line":83},[25,100930,100931],{"class":45},"  gcc",[25,100933,100934],{"class":45}," gcc-c++",[25,100936,100937],{"class":45}," make\n",[99,100939,100940],{},"创建 Python 环境:",[15,100942,100944],{"className":17,"code":100943,"language":19,"meta":20,"style":20},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[22,100945,100946,100960,100968],{"__ignoreMap":20},[25,100947,100948,100951,100954,100957],{"class":27,"line":28},[25,100949,100950],{"class":31},"python3",[25,100952,100953],{"class":35}," -m",[25,100955,100956],{"class":45}," venv",[25,100958,100959],{"class":45}," .venv\n",[25,100961,100962,100965],{"class":27,"line":39},[25,100963,100964],{"class":35},"source",[25,100966,100967],{"class":45}," .venv\u002Fbin\u002Factivate\n",[25,100969,100970,100972,100974,100977,100979,100982],{"class":27,"line":51},[25,100971,30451],{"class":31},[25,100973,100953],{"class":35},[25,100975,100976],{"class":45}," pip",[25,100978,23942],{"class":45},[25,100980,100981],{"class":35}," --upgrade",[25,100983,100984],{"class":45}," pip\n",[99,100986,100987],{},"pip 安装:",[15,100989,100991],{"className":17,"code":100990,"language":19,"meta":20,"style":20},"pip install \"mujoco>=2.3\" numpy\n",[22,100992,100993],{"__ignoreMap":20},[25,100994,100995,100997,100999,101002],{"class":27,"line":28},[25,100996,23939],{"class":31},[25,100998,23942],{"class":45},[25,101000,101001],{"class":45}," \"mujoco>=2.3\"",[25,101003,101004],{"class":45}," numpy\n",[99,101006,101007],{},"安装完成后，先做最小检查：",[15,101009,101011],{"className":17,"code":101010,"language":19,"meta":20,"style":20},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[22,101012,101013],{"__ignoreMap":20},[25,101014,101015,101017,101019],{"class":27,"line":28},[25,101016,30451],{"class":31},[25,101018,30429],{"class":35},[25,101020,101021],{"class":45}," \"import mujoco; print(mujoco.__version__)\"\n",[99,101023,101024],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[99,101026,101027],{},"conda 安装:",[15,101029,101031],{"className":17,"code":101030,"language":19,"meta":20,"style":20},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[22,101032,101033,101053,101063],{"__ignoreMap":20},[25,101034,101035,101037,101039,101041,101044,101047,101050],{"class":27,"line":28},[25,101036,30401],{"class":31},[25,101038,29247],{"class":45},[25,101040,25222],{"class":35},[25,101042,101043],{"class":45}," mujoco-study",[25,101045,101046],{"class":45}," python=",[25,101048,101049],{"class":35},"3.10",[25,101051,101052],{"class":35}," -y\n",[25,101054,101055,101057,101060],{"class":27,"line":39},[25,101056,30401],{"class":31},[25,101058,101059],{"class":45}," activate",[25,101061,101062],{"class":45}," mujoco-study\n",[25,101064,101065,101067,101069,101071],{"class":27,"line":51},[25,101066,23939],{"class":31},[25,101068,23942],{"class":45},[25,101070,101001],{"class":45},[25,101072,101004],{"class":45},[99,101074,101075],{},"版本冲突说明:",[194,101077,101078,101084,101094,101103],{},[106,101079,101080,101081,28456],{},"不要安装 ",[22,101082,101083],{},"mujoco-py",[106,101085,101086,101087,101089,101090,101093],{},"如果旧项目里同时安装了 ",[22,101088,101083],{}," 和 ",[22,101091,101092],{},"mujoco","，建议新建干净虚拟环境。",[106,101095,101096,101099,101100,28456],{},[22,101097,101098],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[22,101101,101102],{},"~\u002F.mujoco\u002Fmujoco210",[106,101104,101105,101106,82610,101109,101112],{},"离屏渲染可能涉及 OpenGL 后端，",[22,101107,101108],{},"MUJOCO_GL=egl",[22,101110,101111],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[182,101114,101116],{"id":101115},"_3核心概念解释","3.核心概念解释",[99,101118,101119],{},"MuJoCo 的基本执行流程:",[15,101121,101124],{"className":101122,"code":101123,"language":5297,"meta":20},[5295],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[22,101125,101123],{"__ignoreMap":20},[99,101127,101128,101130],{},[22,101129,100780],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[99,101132,101133,101135,101136,455,101139,455,101142,455,101145,455,101148,28456],{},[22,101134,100790],{}," 存放仿真运行时状态，例如 ",[22,101137,101138],{},"data.time",[22,101140,101141],{},"data.qpos",[22,101143,101144],{},"data.qvel",[22,101146,101147],{},"data.ctrl",[22,101149,101150],{},"data.xpos",[210,101152,101154],{"id":101153},"xml-是什么","XML 是什么",[99,101156,101157],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[15,101159,101161],{"className":53138,"code":101160,"language":53140,"meta":20,"style":20},"\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",[22,101162,101163,101185,101216],{"__ignoreMap":20},[25,101164,101165,101167,101169,101171,101173,101175,101178,101180,101183],{"class":27,"line":28},[25,101166,1153],{"class":244},[25,101168,51871],{"class":51371},[25,101170,15030],{"class":31},[25,101172,290],{"class":244},[25,101174,53562],{"class":45},[25,101176,101177],{"class":31}," pos",[25,101179,290],{"class":244},[25,101181,101182],{"class":45},"\"0 0 1\"",[25,101184,51378],{"class":244},[25,101186,101187,101189,101192,101194,101196,101199,101201,101203,101205,101208,101210,101213],{"class":27,"line":39},[25,101188,52215],{"class":244},[25,101190,101191],{"class":51371},"geom",[25,101193,15030],{"class":31},[25,101195,290],{"class":244},[25,101197,101198],{"class":45},"\"box_geom\"",[25,101200,53895],{"class":31},[25,101202,290],{"class":244},[25,101204,53562],{"class":45},[25,101206,101207],{"class":31}," size",[25,101209,290],{"class":244},[25,101211,101212],{"class":45},"\"0.1 0.1 0.1\"",[25,101214,101215],{"class":244},"\u002F>\n",[25,101217,101218,101220,101222],{"class":27,"line":51},[25,101219,51856],{"class":244},[25,101221,51871],{"class":51371},[25,101223,51378],{"class":244},[99,101225,101226],{},"这段意思是：",[194,101228,101229,101235,101242],{},[106,101230,101231,101232,101234],{},"创建一个叫 ",[22,101233,53785],{}," 的刚体。",[106,101236,101237,101238,101241],{},"它初始放在 ",[22,101239,101240],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[106,101243,101244],{},"它里面有一个盒子形状的几何体。",[210,101246,101248],{"id":101247},"timestep-是什么","timestep 是什么",[99,101250,101251],{},"XML 里的：",[15,101253,101255],{"className":53138,"code":101254,"language":53140,"meta":20,"style":20},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[22,101256,101257],{"__ignoreMap":20},[25,101258,101259,101261,101263,101266,101268,101271,101274,101276,101279],{"class":27,"line":28},[25,101260,1153],{"class":244},[25,101262,69237],{"class":51371},[25,101264,101265],{"class":31}," timestep",[25,101267,290],{"class":244},[25,101269,101270],{"class":45},"\"0.01\"",[25,101272,101273],{"class":31}," gravity",[25,101275,290],{"class":244},[25,101277,101278],{"class":45},"\"0 0 -9.81\"",[25,101280,101215],{"class":244},[99,101282,101283,101284,101287,101288,101290],{},"表示每调用一次 ",[22,101285,101286],{},"mj_step","，仿真时间前进 ",[22,101289,39057],{}," 秒。循环 100 次，大约就是 1 秒：",[15,101292,101295],{"className":101293,"code":101294,"language":5297,"meta":20},[5295],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[22,101296,101294],{"__ignoreMap":20},[210,101298,101300],{"id":101299},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[99,101302,101303],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[15,101305,101308],{"className":101306,"code":101307,"language":5297,"meta":20},[5295],"x y z qw qx qy qz\n",[22,101309,101307],{"__ignoreMap":20},[99,101311,101312,101313,101316,101317,101320],{},"表示一个自由刚体的位置和姿态。其中 ",[22,101314,101315],{},"x y z"," 是位置，",[22,101318,101319],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[182,101322,101324],{"id":101323},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[99,101326,101327],{},"新建文件:",[15,101329,101331],{"className":17,"code":101330,"language":19,"meta":20,"style":20},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[22,101332,101333,101343,101350],{"__ignoreMap":20},[25,101334,101335,101338,101340],{"class":27,"line":28},[25,101336,101337],{"class":31},"mkdir",[25,101339,29287],{"class":35},[25,101341,101342],{"class":45}," mujoco_tutorial\n",[25,101344,101345,101348],{"class":27,"line":39},[25,101346,101347],{"class":35},"cd",[25,101349,101342],{"class":45},[25,101351,101352,101355],{"class":27,"line":51},[25,101353,101354],{"class":31},"touch",[25,101356,101357],{"class":45}," ch1_first_sim.py\n",[99,101359,101360],{},"写入:",[15,101362,101364],{"className":30449,"code":101363,"language":30451,"meta":20,"style":20},"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",[22,101365,101366,101373,101377,101381,101391,101396,101401,101405,101410,101415,101419,101424,101429,101434,101439,101444,101449,101453,101457,101461,101474,101488,101498,101502,101514,101526,101538,101550,101562,101566,101583,101588,101592,101603,101614,101618,101622,101636],{"__ignoreMap":20},[25,101367,101368,101370],{"class":27,"line":28},[25,101369,30463],{"class":240},[25,101371,101372],{"class":244}," mujoco\n",[25,101374,101375],{"class":27,"line":39},[25,101376,2510],{"emptyLinePlaceholder":167},[25,101378,101379],{"class":27,"line":51},[25,101380,2510],{"emptyLinePlaceholder":167},[25,101382,101383,101386,101388],{"class":27,"line":59},[25,101384,101385],{"class":35},"XML",[25,101387,13674],{"class":240},[25,101389,101390],{"class":45}," \"\"\"\n",[25,101392,101393],{"class":27,"line":67},[25,101394,101395],{"class":45},"\u003Cmujoco model=\"first_sim\">\n",[25,101397,101398],{"class":27,"line":75},[25,101399,101400],{"class":45},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[25,101402,101403],{"class":27,"line":83},[25,101404,2510],{"emptyLinePlaceholder":167},[25,101406,101407],{"class":27,"line":91},[25,101408,101409],{"class":45},"  \u003Cworldbody>\n",[25,101411,101412],{"class":27,"line":1429},[25,101413,101414],{"class":45},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[25,101416,101417],{"class":27,"line":1441},[25,101418,2510],{"emptyLinePlaceholder":167},[25,101420,101421],{"class":27,"line":1723},[25,101422,101423],{"class":45},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[25,101425,101426],{"class":27,"line":1728},[25,101427,101428],{"class":45},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[25,101430,101431],{"class":27,"line":1734},[25,101432,101433],{"class":45},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[25,101435,101436],{"class":27,"line":1739},[25,101437,101438],{"class":45},"    \u003C\u002Fbody>\n",[25,101440,101441],{"class":27,"line":1753},[25,101442,101443],{"class":45},"  \u003C\u002Fworldbody>\n",[25,101445,101446],{"class":27,"line":1758},[25,101447,101448],{"class":45},"\u003C\u002Fmujoco>\n",[25,101450,101451],{"class":27,"line":1764},[25,101452,95769],{"class":45},[25,101454,101455],{"class":27,"line":1785},[25,101456,2510],{"emptyLinePlaceholder":167},[25,101458,101459],{"class":27,"line":1790},[25,101460,2510],{"emptyLinePlaceholder":167},[25,101462,101463,101465,101467,101470,101472],{"class":27,"line":1804},[25,101464,32018],{"class":240},[25,101466,2083],{"class":31},[25,101468,101469],{"class":244},"() -> ",[25,101471,95757],{"class":35},[25,101473,3849],{"class":244},[25,101475,101476,101479,101481,101484,101486],{"class":27,"line":1809},[25,101477,101478],{"class":244},"    model ",[25,101480,290],{"class":240},[25,101482,101483],{"class":244}," mujoco.MjModel.from_xml_string(",[25,101485,101385],{"class":35},[25,101487,251],{"class":244},[25,101489,101490,101493,101495],{"class":27,"line":1838},[25,101491,101492],{"class":244},"    data ",[25,101494,290],{"class":240},[25,101496,101497],{"class":244}," mujoco.MjData(model)\n",[25,101499,101500],{"class":27,"line":1843},[25,101501,2510],{"emptyLinePlaceholder":167},[25,101503,101504,101506,101508,101511],{"class":27,"line":1860},[25,101505,31370],{"class":35},[25,101507,245],{"class":244},[25,101509,101510],{"class":45},"\"nq:\"",[25,101512,101513],{"class":244},", model.nq)\n",[25,101515,101516,101518,101520,101523],{"class":27,"line":1865},[25,101517,31370],{"class":35},[25,101519,245],{"class":244},[25,101521,101522],{"class":45},"\"nv:\"",[25,101524,101525],{"class":244},", model.nv)\n",[25,101527,101528,101530,101532,101535],{"class":27,"line":1870},[25,101529,31370],{"class":35},[25,101531,245],{"class":244},[25,101533,101534],{"class":45},"\"nu:\"",[25,101536,101537],{"class":244},", model.nu)\n",[25,101539,101540,101542,101544,101547],{"class":27,"line":1875},[25,101541,31370],{"class":35},[25,101543,245],{"class":244},[25,101545,101546],{"class":45},"\"initial time:\"",[25,101548,101549],{"class":244},", data.time)\n",[25,101551,101552,101554,101556,101559],{"class":27,"line":1889},[25,101553,31370],{"class":35},[25,101555,245],{"class":244},[25,101557,101558],{"class":45},"\"initial qpos:\"",[25,101560,101561],{"class":244},", data.qpos.copy())\n",[25,101563,101564],{"class":27,"line":1894},[25,101565,2510],{"emptyLinePlaceholder":167},[25,101567,101568,101570,101573,101575,101577,101579,101581],{"class":27,"line":2687},[25,101569,3311],{"class":240},[25,101571,101572],{"class":244}," _ ",[25,101574,26114],{"class":240},[25,101576,32514],{"class":35},[25,101578,245],{"class":244},[25,101580,554],{"class":35},[25,101582,30857],{"class":244},[25,101584,101585],{"class":27,"line":2701},[25,101586,101587],{"class":244},"        mujoco.mj_step(model, data)\n",[25,101589,101590],{"class":27,"line":2709},[25,101591,2510],{"emptyLinePlaceholder":167},[25,101593,101594,101596,101598,101601],{"class":27,"line":2714},[25,101595,31370],{"class":35},[25,101597,245],{"class":244},[25,101599,101600],{"class":45},"\"final time:\"",[25,101602,101549],{"class":244},[25,101604,101605,101607,101609,101612],{"class":27,"line":2720},[25,101606,31370],{"class":35},[25,101608,245],{"class":244},[25,101610,101611],{"class":45},"\"final qpos:\"",[25,101613,101561],{"class":244},[25,101615,101616],{"class":27,"line":2726},[25,101617,2510],{"emptyLinePlaceholder":167},[25,101619,101620],{"class":27,"line":2731},[25,101621,2510],{"emptyLinePlaceholder":167},[25,101623,101624,101626,101628,101631,101634],{"class":27,"line":8058},[25,101625,1642],{"class":240},[25,101627,31291],{"class":35},[25,101629,101630],{"class":240}," ==",[25,101632,101633],{"class":45}," \"__main__\"",[25,101635,3849],{"class":244},[25,101637,101638],{"class":27,"line":8082},[25,101639,101640],{"class":244},"    main()\n",[210,101642,101643],{"id":101643},"代码逐段解释",[99,101645,101646],{},"导入库：",[15,101648,101650],{"className":30449,"code":101649,"language":30451,"meta":20,"style":20},"import mujoco\n",[22,101651,101652],{"__ignoreMap":20},[25,101653,101654,101656],{"class":27,"line":28},[25,101655,30463],{"class":240},[25,101657,101372],{"class":244},[99,101659,101660],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[99,101662,101663],{},"定义 XML：",[15,101665,101667],{"className":30449,"code":101666,"language":30451,"meta":20,"style":20},"XML = \"\"\"\n...\n\"\"\"\n",[22,101668,101669,101677,101682],{"__ignoreMap":20},[25,101670,101671,101673,101675],{"class":27,"line":28},[25,101672,101385],{"class":35},[25,101674,13674],{"class":240},[25,101676,101390],{"class":45},[25,101678,101679],{"class":27,"line":39},[25,101680,101681],{"class":45},"...\n",[25,101683,101684],{"class":27,"line":51},[25,101685,95769],{"class":45},[99,101687,101688,101689,101692],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[22,101690,101691],{},"freejoint"," 的方块。",[99,101694,101695],{},"编译模型：",[15,101697,101699],{"className":30449,"code":101698,"language":30451,"meta":20,"style":20},"model = mujoco.MjModel.from_xml_string(XML)\n",[22,101700,101701],{"__ignoreMap":20},[25,101702,101703,101706,101708,101710,101712],{"class":27,"line":28},[25,101704,101705],{"class":244},"model ",[25,101707,290],{"class":240},[25,101709,101483],{"class":244},[25,101711,101385],{"class":35},[25,101713,251],{"class":244},[99,101715,101716],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[99,101718,101719],{},"创建数据：",[15,101721,101723],{"className":30449,"code":101722,"language":30451,"meta":20,"style":20},"data = mujoco.MjData(model)\n",[22,101724,101725],{"__ignoreMap":20},[25,101726,101727,101730,101732],{"class":27,"line":28},[25,101728,101729],{"class":244},"data ",[25,101731,290],{"class":240},[25,101733,101497],{"class":244},[99,101735,101736,101738,101739,101741],{},[22,101737,33472],{}," 会保存仿真当前状态。刚创建时，时间是 ",[22,101740,434],{},"，方块还在初始位置。",[99,101743,101744],{},"推进仿真：",[15,101746,101748],{"className":30449,"code":101747,"language":30451,"meta":20,"style":20},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[22,101749,101750,101766],{"__ignoreMap":20},[25,101751,101752,101754,101756,101758,101760,101762,101764],{"class":27,"line":28},[25,101753,3135],{"class":240},[25,101755,101572],{"class":244},[25,101757,26114],{"class":240},[25,101759,32514],{"class":35},[25,101761,245],{"class":244},[25,101763,554],{"class":35},[25,101765,30857],{"class":244},[25,101767,101768],{"class":27,"line":39},[25,101769,101770],{"class":244},"    mujoco.mj_step(model, data)\n",[99,101772,101773,101774,101776],{},"每次 ",[22,101775,101286],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[210,101778,101779],{"id":101779},"代码逐行细讲",[99,101781,101782],{},"下面把完整代码按新手视角拆开讲。",[15,101784,101785],{"className":30449,"code":101649,"language":30451,"meta":20,"style":20},[22,101786,101787],{"__ignoreMap":20},[25,101788,101789,101791],{"class":27,"line":28},[25,101790,30463],{"class":240},[25,101792,101372],{"class":244},[99,101794,101795,101797,101798,455,101800,455,101802,28456],{},[22,101796,30463],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[22,101799,100746],{},[22,101801,100751],{},[22,101803,101804],{},"mujoco.mj_step",[15,101806,101807],{"className":30449,"code":101666,"language":30451,"meta":20,"style":20},[22,101808,101809,101817,101821],{"__ignoreMap":20},[25,101810,101811,101813,101815],{"class":27,"line":28},[25,101812,101385],{"class":35},[25,101814,13674],{"class":240},[25,101816,101390],{"class":45},[25,101818,101819],{"class":27,"line":39},[25,101820,101681],{"class":45},[25,101822,101823],{"class":27,"line":51},[25,101824,95769],{"class":45},[99,101826,101827,101829,101830,101833],{},[22,101828,101385],{}," 是一个变量名。右边的三引号 ",[22,101831,101832],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[15,101835,101836],{"className":53138,"code":101395,"language":53140,"meta":20,"style":20},[22,101837,101838],{"__ignoreMap":20},[25,101839,101840,101842,101844,101847,101849,101852],{"class":27,"line":28},[25,101841,1153],{"class":244},[25,101843,101092],{"class":51371},[25,101845,101846],{"class":31}," model",[25,101848,290],{"class":244},[25,101850,101851],{"class":45},"\"first_sim\"",[25,101853,51378],{"class":244},[99,101855,101856,101857,101860,101861,28456],{},"这是 XML 的根标签。",[22,101858,101859],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[22,101862,101863],{},"first_sim",[15,101865,101866],{"className":53138,"code":101254,"language":53140,"meta":20,"style":20},[22,101867,101868],{"__ignoreMap":20},[25,101869,101870,101872,101874,101876,101878,101880,101882,101884,101886],{"class":27,"line":28},[25,101871,1153],{"class":244},[25,101873,69237],{"class":51371},[25,101875,101265],{"class":31},[25,101877,290],{"class":244},[25,101879,101270],{"class":45},[25,101881,101273],{"class":31},[25,101883,290],{"class":244},[25,101885,101278],{"class":45},[25,101887,101215],{"class":244},[99,101889,101890,101892,101893,101896,101897,101900],{},[22,101891,69237],{}," 用来设置仿真参数。",[22,101894,101895],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[22,101898,101899],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[15,101902,101904],{"className":53138,"code":101903,"language":53140,"meta":20,"style":20},"\u003Cworldbody>\n",[22,101905,101906],{"__ignoreMap":20},[25,101907,101908,101910,101913],{"class":27,"line":28},[25,101909,1153],{"class":244},[25,101911,101912],{"class":51371},"worldbody",[25,101914,51378],{"class":244},[99,101916,101917,101919],{},[22,101918,101912],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[15,101921,101923],{"className":53138,"code":101922,"language":53140,"meta":20,"style":20},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[22,101924,101925],{"__ignoreMap":20},[25,101926,101927,101929,101931,101933,101935,101938,101940,101942,101945,101947,101949,101952,101954,101956,101959],{"class":27,"line":28},[25,101928,1153],{"class":244},[25,101930,101191],{"class":51371},[25,101932,15030],{"class":31},[25,101934,290],{"class":244},[25,101936,101937],{"class":45},"\"floor\"",[25,101939,53895],{"class":31},[25,101941,290],{"class":244},[25,101943,101944],{"class":45},"\"plane\"",[25,101946,101207],{"class":31},[25,101948,290],{"class":244},[25,101950,101951],{"class":45},"\"2 2 0.1\"",[25,101953,78838],{"class":31},[25,101955,290],{"class":244},[25,101957,101958],{"class":45},"\"0.8 0.8 0.8 1\"",[25,101960,101215],{"class":244},[99,101962,101963,101964,101966,101967,101970,101971,101974,101975,101977],{},"这行创建地面。",[22,101965,101191],{}," 是几何体。",[22,101968,101969],{},"name=\"floor\""," 是名字。",[22,101972,101973],{},"type=\"plane\""," 表示平面。",[22,101976,55181],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[15,101979,101981],{"className":53138,"code":101980,"language":53140,"meta":20,"style":20},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[22,101982,101983],{"__ignoreMap":20},[25,101984,101985,101987,101989,101991,101993,101995,101997,101999,102001],{"class":27,"line":28},[25,101986,1153],{"class":244},[25,101988,51871],{"class":51371},[25,101990,15030],{"class":31},[25,101992,290],{"class":244},[25,101994,53562],{"class":45},[25,101996,101177],{"class":31},[25,101998,290],{"class":244},[25,102000,101182],{"class":45},[25,102002,51378],{"class":244},[99,102004,102005,102006,28456,102008,102011,102012,102014],{},"这行创建一个刚体，名字叫 ",[22,102007,53785],{},[22,102009,102010],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[22,102013,101240],{},"，也就是离地面 1 米高。",[15,102016,102018],{"className":53138,"code":102017,"language":53140,"meta":20,"style":20},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[22,102019,102020],{"__ignoreMap":20},[25,102021,102022,102024,102026,102028,102030,102033],{"class":27,"line":28},[25,102023,1153],{"class":244},[25,102025,101691],{"class":51371},[25,102027,15030],{"class":31},[25,102029,290],{"class":244},[25,102031,102032],{"class":45},"\"box_free\"",[25,102034,101215],{"class":244},[99,102036,102037,102038,102040],{},"这行很重要。",[22,102039,101691],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[15,102042,102044],{"className":53138,"code":102043,"language":53140,"meta":20,"style":20},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[22,102045,102046],{"__ignoreMap":20},[25,102047,102048,102050,102052,102054,102056,102058,102060,102062,102064,102066,102068,102070,102073,102075,102077,102079,102081,102084],{"class":27,"line":28},[25,102049,1153],{"class":244},[25,102051,101191],{"class":51371},[25,102053,15030],{"class":31},[25,102055,290],{"class":244},[25,102057,101198],{"class":45},[25,102059,53895],{"class":31},[25,102061,290],{"class":244},[25,102063,53562],{"class":45},[25,102065,101207],{"class":31},[25,102067,290],{"class":244},[25,102069,101212],{"class":45},[25,102071,102072],{"class":31}," mass",[25,102074,290],{"class":244},[25,102076,3788],{"class":45},[25,102078,78838],{"class":31},[25,102080,290],{"class":244},[25,102082,102083],{"class":45},"\"1 0 0 1\"",[25,102085,101215],{"class":244},[99,102087,102088,102089,102092,102093,102096,102097,102100,102101,102104],{},"这行给 box body 添加一个盒子形状。",[22,102090,102091],{},"type=\"box\""," 表示形状是盒子。",[22,102094,102095],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[22,102098,102099],{},"mass=\"1\""," 表示质量是 1。",[22,102102,102103],{},"rgba=\"1 0 0 1\""," 表示红色。",[15,102106,102108],{"className":30449,"code":102107,"language":30451,"meta":20,"style":20},"def main() -> None:\n",[22,102109,102110],{"__ignoreMap":20},[25,102111,102112,102114,102116,102118,102120],{"class":27,"line":28},[25,102113,32018],{"class":240},[25,102115,2083],{"class":31},[25,102117,101469],{"class":244},[25,102119,95757],{"class":35},[25,102121,3849],{"class":244},[99,102123,102124,102126,102127,102130,102131,102134],{},[22,102125,32018],{}," 用来定义函数。这里定义了一个叫 ",[22,102128,102129],{},"main"," 的函数。",[22,102132,102133],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[15,102136,102137],{"className":30449,"code":101698,"language":30451,"meta":20,"style":20},[22,102138,102139],{"__ignoreMap":20},[25,102140,102141,102143,102145,102147,102149],{"class":27,"line":28},[25,102142,101705],{"class":244},[25,102144,290],{"class":240},[25,102146,101483],{"class":244},[25,102148,101385],{"class":35},[25,102150,251],{"class":244},[99,102152,102153,102154,102157],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[22,102155,102156],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[15,102159,102160],{"className":30449,"code":101722,"language":30451,"meta":20,"style":20},[22,102161,102162],{"__ignoreMap":20},[25,102163,102164,102166,102168],{"class":27,"line":28},[25,102165,101729],{"class":244},[25,102167,290],{"class":240},[25,102169,101497],{"class":244},[99,102171,102172,102173,102175,102176,102178],{},"这行创建仿真数据。",[22,102174,33472],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[22,102177,33472],{}," 都会变化。",[15,102180,102182],{"className":30449,"code":102181,"language":30451,"meta":20,"style":20},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[22,102183,102184,102194,102204],{"__ignoreMap":20},[25,102185,102186,102188,102190,102192],{"class":27,"line":28},[25,102187,30486],{"class":35},[25,102189,245],{"class":244},[25,102191,101510],{"class":45},[25,102193,101513],{"class":244},[25,102195,102196,102198,102200,102202],{"class":27,"line":39},[25,102197,30486],{"class":35},[25,102199,245],{"class":244},[25,102201,101522],{"class":45},[25,102203,101525],{"class":244},[25,102205,102206,102208,102210,102212],{"class":27,"line":51},[25,102207,30486],{"class":35},[25,102209,245],{"class":244},[25,102211,101534],{"class":45},[25,102213,101537],{"class":244},[99,102215,102216,102218,102219,102222,102223,102226,102227,102230,102231,102234],{},[22,102217,30486],{}," 用来输出信息。",[22,102220,102221],{},"model.nq"," 是位置变量数量，",[22,102224,102225],{},"model.nv"," 是速度变量数量，",[22,102228,102229],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[22,102232,102233],{},"nu"," 是 0。",[15,102236,102238],{"className":30449,"code":102237,"language":30451,"meta":20,"style":20},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[22,102239,102240,102250],{"__ignoreMap":20},[25,102241,102242,102244,102246,102248],{"class":27,"line":28},[25,102243,30486],{"class":35},[25,102245,245],{"class":244},[25,102247,101546],{"class":45},[25,102249,101549],{"class":244},[25,102251,102252,102254,102256,102258],{"class":27,"line":39},[25,102253,30486],{"class":35},[25,102255,245],{"class":244},[25,102257,101558],{"class":45},[25,102259,101561],{"class":244},[99,102261,102262,102263,102265,102266,102268,102269,102272],{},"这里打印初始时间和初始位置。",[22,102264,101138],{}," 一开始是 0。",[22,102267,101141],{}," 是位置数组。",[22,102270,102271],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[15,102274,102275],{"className":30449,"code":101747,"language":30451,"meta":20,"style":20},[22,102276,102277,102293],{"__ignoreMap":20},[25,102278,102279,102281,102283,102285,102287,102289,102291],{"class":27,"line":28},[25,102280,3135],{"class":240},[25,102282,101572],{"class":244},[25,102284,26114],{"class":240},[25,102286,32514],{"class":35},[25,102288,245],{"class":244},[25,102290,554],{"class":35},[25,102292,30857],{"class":244},[25,102294,102295],{"class":27,"line":39},[25,102296,101770],{"class":244},[99,102298,102299,102301,102302,102305,102306,102308,102309,102311],{},[22,102300,3135],{}," 是循环。",[22,102303,102304],{},"range(100)"," 表示循环 100 次。",[22,102307,1235],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[22,102310,101286],{},"，仿真就前进一步。",[15,102313,102315],{"className":30449,"code":102314,"language":30451,"meta":20,"style":20},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[22,102316,102317,102327],{"__ignoreMap":20},[25,102318,102319,102321,102323,102325],{"class":27,"line":28},[25,102320,30486],{"class":35},[25,102322,245],{"class":244},[25,102324,101600],{"class":45},[25,102326,101549],{"class":244},[25,102328,102329,102331,102333,102335],{"class":27,"line":39},[25,102330,30486],{"class":35},[25,102332,245],{"class":244},[25,102334,101611],{"class":45},[25,102336,101561],{"class":244},[99,102338,102339],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[15,102341,102343],{"className":30449,"code":102342,"language":30451,"meta":20,"style":20},"if __name__ == \"__main__\":\n    main()\n",[22,102344,102345,102357],{"__ignoreMap":20},[25,102346,102347,102349,102351,102353,102355],{"class":27,"line":28},[25,102348,1642],{"class":240},[25,102350,31291],{"class":35},[25,102352,101630],{"class":240},[25,102354,101633],{"class":45},[25,102356,3849],{"class":244},[25,102358,102359],{"class":27,"line":39},[25,102360,101640],{"class":244},[99,102362,102363,102364,102367,102368,28456],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[22,102365,102366],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[22,102369,102366],{},[99,102371,102372],{},"运行:",[15,102374,102376],{"className":17,"code":102375,"language":19,"meta":20,"style":20},"python ch1_first_sim.py\n",[22,102377,102378],{"__ignoreMap":20},[25,102379,102380,102382],{"class":27,"line":28},[25,102381,30451],{"class":31},[25,102383,101357],{"class":45},[182,102385,102387],{"id":102386},"_5运行结果说明","5.运行结果说明",[99,102389,102390],{},"你应该看到类似输出:",[15,102392,102395],{"className":102393,"code":102394,"language":5297,"meta":20},[5295],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[22,102396,102394],{"__ignoreMap":20},[99,102398,102399,102401,102402,102405,102406,28456],{},[22,102400,101691],{}," 有 7 个位置变量: ",[22,102403,102404],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[22,102407,102408],{},"vx vy vz wx wy wz",[99,102410,102411,102412,102415],{},"你还会看到 ",[22,102413,102414],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[182,102417,102419],{"id":102418},"_6验证步骤","6.验证步骤",[99,102421,102422],{},"确认版本:",[15,102424,102425],{"className":17,"code":101010,"language":19,"meta":20,"style":20},[22,102426,102427],{"__ignoreMap":20},[25,102428,102429,102431,102433],{"class":27,"line":28},[25,102430,30451],{"class":31},[25,102432,30429],{"class":35},[25,102434,101021],{"class":45},[99,102436,102437],{},"确认导入的是官方 bindings:",[15,102439,102441],{"className":17,"code":102440,"language":19,"meta":20,"style":20},"python -c \"import mujoco; print(mujoco)\"\n",[22,102442,102443],{"__ignoreMap":20},[25,102444,102445,102447,102449],{"class":27,"line":28},[25,102446,30451],{"class":31},[25,102448,30429],{"class":35},[25,102450,102451],{"class":45}," \"import mujoco; print(mujoco)\"\n",[99,102453,102454],{},"运行程序:",[15,102456,102457],{"className":17,"code":102375,"language":19,"meta":20,"style":20},[22,102458,102459],{"__ignoreMap":20},[25,102460,102461,102463],{"class":27,"line":28},[25,102462,30451],{"class":31},[25,102464,101357],{"class":45},[99,102466,102467,102468,102471,102472,28456],{},"检查 ",[22,102469,102470],{},"final time"," 是否约等于 ",[22,102473,102474],{},"1.0",[99,102476,102477],{},"再做几个小实验：",[194,102479,102480,102490,102498,102511],{},[106,102481,102482,102483,102485,102486,102489],{},"把 ",[22,102484,102010],{}," 改成 ",[22,102487,102488],{},"pos=\"0 0 2\"","，观察初始高度变化。",[106,102491,102482,102492,102485,102494,102497],{},[22,102493,101899],{},[22,102495,102496],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[106,102499,102482,102500,102485,102502,102505,102506,102508,102509,28456],{},[22,102501,101895],{},[22,102503,102504],{},"timestep=\"0.005\"","，观察 100 步后的 ",[22,102507,102470],{}," 是否变成约 ",[22,102510,35400],{},[106,102512,102513,102514,102517],{},"删除 ",[22,102515,102516],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[99,102519,102520],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[182,102522,102524],{"id":102523},"_7常见错误与解决方案","7.常见错误与解决方案",[210,102526,102528],{"id":102527},"modulenotfounderror-no-module-named-mujoco",[22,102529,102530],{},"ModuleNotFoundError: No module named 'mujoco'",[99,102532,102533],{},"解决:",[15,102535,102537],{"className":17,"code":102536,"language":19,"meta":20,"style":20},"pip install \"mujoco>=2.3\"\n",[22,102538,102539],{"__ignoreMap":20},[25,102540,102541,102543,102545],{"class":27,"line":28},[25,102542,23939],{"class":31},[25,102544,23942],{"class":45},[25,102546,102547],{"class":45}," \"mujoco>=2.3\"\n",[210,102549,102551],{"id":102550},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[99,102553,102554],{},"先安装系统依赖:",[15,102556,102558],{"className":17,"code":102557,"language":19,"meta":20,"style":20},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[22,102559,102560],{"__ignoreMap":20},[25,102561,102562,102564,102566,102568,102570,102573,102575,102578,102580,102583,102585],{"class":27,"line":28},[25,102563,24684],{"class":31},[25,102565,26386],{"class":45},[25,102567,23942],{"class":45},[25,102569,26471],{"class":35},[25,102571,102572],{"class":45}," mesa-libGL",[25,102574,100885],{"class":45},[25,102576,102577],{"class":45}," glfw",[25,102579,100905],{"class":45},[25,102581,102582],{"class":45}," libX11",[25,102584,100918],{"class":45},[25,102586,102587],{"class":45}," libXrandr\n",[210,102589,102591],{"id":102590},"xml-解析失败","XML 解析失败",[99,102593,102594],{},"检查:",[194,102596,102597,102600,102603,102609],{},[106,102598,102599],{},"标签是否闭合",[106,102601,102602],{},"属性是否带引号",[106,102604,102605,102606],{},"根节点是否是 ",[22,102607,102608],{},"\u003Cmujoco>",[106,102610,102611,102613,102614,102617],{},[22,102612,51871],{}," 是否放在 ",[22,102615,102616],{},"\u003Cworldbody>"," 内部",[210,102619,102621,102623,102624],{"id":102620},"final-time-不是严格等于-10",[22,102622,102470],{}," 不是严格等于 ",[22,102625,102474],{},[99,102627,102628],{},"这通常不是错误。浮点数计算可能得到：",[15,102630,102633],{"className":102631,"code":102632,"language":5297,"meta":20},[5295],"1.0000000000000007\n",[22,102634,102632],{"__ignoreMap":20},[99,102636,102637,102638,102640],{},"只要接近 ",[22,102639,102474],{}," 就正常。",[210,102642,102643],{"id":102643},"方块没有掉下来",[99,102645,102646],{},"检查：",[194,102648,102649,102655,102661,102666],{},[106,102650,102651,102652],{},"方块 body 里是否有 ",[22,102653,102654],{},"\u003Cfreejoint\u002F>",[106,102656,102657,102658],{},"重力是否是 ",[22,102659,102660],{},"0 0 -9.81",[106,102662,102663,102664],{},"是否真的调用了 ",[22,102665,100756],{},[106,102667,102668,102669,102671,102672],{},"你看的是否是 ",[22,102670,102414],{},"，不是 ",[22,102673,102674],{},"initial qpos",[182,102676,102678],{"id":102677},"_8本章小结","8.本章小结",[99,102680,102681],{},"本章你已经完成了 MuJoCo 的最小闭环：",[15,102683,102686],{"className":102684,"code":102685,"language":5297,"meta":20},[5295],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[22,102687,102685],{"__ignoreMap":20},[99,102689,102690],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[159,102692,102693],{},"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":20,"searchDepth":39,"depth":39,"links":102695},[102696,102697,102698,102703,102707,102708,102709,102717],{"id":100717,"depth":39,"text":100718},{"id":100840,"depth":39,"text":100841},{"id":101115,"depth":39,"text":101116,"children":102699},[102700,102701,102702],{"id":101153,"depth":51,"text":101154},{"id":101247,"depth":51,"text":101248},{"id":101299,"depth":51,"text":101300},{"id":101323,"depth":39,"text":101324,"children":102704},[102705,102706],{"id":101643,"depth":51,"text":101643},{"id":101779,"depth":51,"text":101779},{"id":102386,"depth":39,"text":102387},{"id":102418,"depth":39,"text":102419},{"id":102523,"depth":39,"text":102524,"children":102710},[102711,102712,102713,102714,102716],{"id":102527,"depth":51,"text":102530},{"id":102550,"depth":51,"text":102551},{"id":102590,"depth":51,"text":102591},{"id":102620,"depth":51,"text":102715},"final time 不是严格等于 1.0",{"id":102643,"depth":51,"text":102643},{"id":102677,"depth":39,"text":102678},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100709,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102724,"title":102725,"body":102726,"description":20,"extension":165,"meta":104382,"navigation":167,"path":104383,"seo":104384,"stem":104385,"__hash__":104386},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102727,"toc":104358},[102728,102731,102733,102736,102739,102756,102851,102854,102860,102862,102864,102888,102891,102905,102908,102949,102951,102964,102966,102969,103017,103029,103032,103035,103041,103054,103121,103124,103143,103146,103149,103155,103157,103166,103169,103173,103182,103264,103273,103277,103283,103297,103307,103309,103639,103642,103654,103656,103667,103669,103672,103690,103693,103696,103714,103725,103728,103743,103753,103755,103776,103793,103813,103819,103859,103875,103891,103897,103900,103924,103940,103945,103975,103992,104017,104020,104035,104044,104059,104068,104083,104090,104092,104102,104115,104122,104125,104164,104171,104173,104225,104227,104233,104236,104243,104250,104253,104255,104273,104276,104279,104313,104325,104327,104330,104352,104355],[10,102729,102725],{"id":102730},"_2xml-与-mjcf-物理建模基础",[182,102732,100718],{"id":100717},[99,102734,102735],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[99,102737,102738],{},"本章结束后，你应该能看懂一个简单模型里：",[194,102740,102741,102744,102747,102750,102753],{},[106,102742,102743],{},"地面在哪里。",[106,102745,102746],{},"物体初始位置在哪里。",[106,102748,102749],{},"几何体是什么形状。",[106,102751,102752],{},"哪些 body 可以自由运动。",[106,102754,102755],{},"如何用名字在 Python 里找到 XML 中的对象。",[380,102757,102758,102768],{},[383,102759,102760],{},[386,102761,102762,102765],{},[389,102763,102764],{"align":23846},"标签",[389,102766,102767],{"align":23846},"作用",[427,102769,102770,102779,102789,102798,102808,102818,102831,102841],{},[386,102771,102772,102776],{},[432,102773,102774],{"align":23846},[22,102775,102608],{},[432,102777,102778],{"align":23846},"根节点",[386,102780,102781,102786],{},[432,102782,102783],{"align":23846},[22,102784,102785],{},"\u003Coption>",[432,102787,102788],{"align":23846},"仿真参数",[386,102790,102791,102795],{},[432,102792,102793],{"align":23846},[22,102794,102616],{},[432,102796,102797],{"align":23846},"世界中的物体",[386,102799,102800,102805],{},[432,102801,102802],{"align":23846},[22,102803,102804],{},"\u003Cbody>",[432,102806,102807],{"align":23846},"刚体",[386,102809,102810,102815],{},[432,102811,102812],{"align":23846},[22,102813,102814],{},"\u003Cgeom>",[432,102816,102817],{"align":23846},"几何体、碰撞体、可视体",[386,102819,102820,102828],{},[432,102821,102822,25085,102825],{"align":23846},[22,102823,102824],{},"\u003Cjoint>",[22,102826,102827],{},"\u003Cfreejoint>",[432,102829,102830],{"align":23846},"关节",[386,102832,102833,102838],{},[432,102834,102835],{"align":23846},[22,102836,102837],{},"\u003Csite>",[432,102839,102840],{"align":23846},"标记点",[386,102842,102843,102848],{},[432,102844,102845],{"align":23846},[22,102846,102847],{},"\u003Cactuator>",[432,102849,102850],{"align":23846},"控制器",[99,102852,102853],{},"初学时可以先记住：",[15,102855,102858],{"className":102856,"code":102857,"language":5297,"meta":20},[5295],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[22,102859,102857],{"__ignoreMap":20},[182,102861,100841],{"id":100840},[99,102863,100844],{},[15,102865,102867],{"className":17,"code":102866,"language":19,"meta":20,"style":20},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[22,102868,102869],{"__ignoreMap":20},[25,102870,102871,102873,102875,102877,102879,102881,102883,102885],{"class":27,"line":28},[25,102872,24684],{"class":31},[25,102874,26386],{"class":45},[25,102876,23942],{"class":45},[25,102878,26471],{"class":35},[25,102880,102572],{"class":45},[25,102882,100885],{"class":45},[25,102884,102577],{"class":45},[25,102886,102887],{"class":45}," glfw-devel\n",[99,102889,102890],{},"pip:",[15,102892,102893],{"className":17,"code":100990,"language":19,"meta":20,"style":20},[22,102894,102895],{"__ignoreMap":20},[25,102896,102897,102899,102901,102903],{"class":27,"line":28},[25,102898,23939],{"class":31},[25,102900,23942],{"class":45},[25,102902,101001],{"class":45},[25,102904,101004],{"class":45},[99,102906,102907],{},"conda:",[15,102909,102911],{"className":17,"code":102910,"language":19,"meta":20,"style":20},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[22,102912,102913,102930,102939],{"__ignoreMap":20},[25,102914,102915,102917,102919,102921,102924,102926,102928],{"class":27,"line":28},[25,102916,30401],{"class":31},[25,102918,29247],{"class":45},[25,102920,25222],{"class":35},[25,102922,102923],{"class":45}," mujoco-xml",[25,102925,101046],{"class":45},[25,102927,101049],{"class":35},[25,102929,101052],{"class":35},[25,102931,102932,102934,102936],{"class":27,"line":39},[25,102933,30401],{"class":31},[25,102935,101059],{"class":45},[25,102937,102938],{"class":45}," mujoco-xml\n",[25,102940,102941,102943,102945,102947],{"class":27,"line":51},[25,102942,23939],{"class":31},[25,102944,23942],{"class":45},[25,102946,101001],{"class":45},[25,102948,101004],{"class":45},[99,102950,101075],{},[194,102952,102953,102956,102961],{},[106,102954,102955],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[106,102957,102958,102959,28456],{},"本章使用基础标签，适用于 ",[22,102960,101098],{},[106,102962,102963],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[182,102965,101116],{"id":101115},[99,102967,102968],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[15,102970,102972],{"className":53138,"code":102971,"language":53140,"meta":20,"style":20},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[22,102973,102974,102988,102996,103001,103009],{"__ignoreMap":20},[25,102975,102976,102978,102980,102982,102984,102986],{"class":27,"line":28},[25,102977,1153],{"class":244},[25,102979,101092],{"class":51371},[25,102981,101846],{"class":31},[25,102983,290],{"class":244},[25,102985,62750],{"class":45},[25,102987,51378],{"class":244},[25,102989,102990,102992,102994],{"class":27,"line":39},[25,102991,52215],{"class":244},[25,102993,101912],{"class":51371},[25,102995,51378],{"class":244},[25,102997,102998],{"class":27,"line":51},[25,102999,103000],{"class":244},"    ...\n",[25,103002,103003,103005,103007],{"class":27,"line":59},[25,103004,52488],{"class":244},[25,103006,101912],{"class":51371},[25,103008,51378],{"class":244},[25,103010,103011,103013,103015],{"class":27,"line":67},[25,103012,51856],{"class":244},[25,103014,101092],{"class":51371},[25,103016,51378],{"class":244},[99,103018,103019,103021,103022,103024,103025,103028],{},[22,103020,51871],{}," 表示刚体。",[22,103023,101191],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[22,103026,103027],{},"joint"," 表示刚体相对父刚体如何运动。",[210,103030,103031],{"id":103031},"层级结构非常重要",[99,103033,103034],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[15,103036,103039],{"className":103037,"code":103038,"language":5297,"meta":20},[5295],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[22,103040,103038],{"__ignoreMap":20},[99,103042,103043,101089,103046,103049,103050,103053],{},[22,103044,103045],{},"red_box_geom",[22,103047,103048],{},"box_center"," 都属于 ",[22,103051,103052],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[15,103055,103057],{"className":53138,"code":103056,"language":53140,"meta":20,"style":20},"\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",[22,103058,103059,103079,103093,103113],{"__ignoreMap":20},[25,103060,103061,103063,103065,103067,103069,103071,103073,103075,103077],{"class":27,"line":28},[25,103062,1153],{"class":244},[25,103064,51871],{"class":51371},[25,103066,15030],{"class":31},[25,103068,290],{"class":244},[25,103070,53562],{"class":45},[25,103072,101177],{"class":31},[25,103074,290],{"class":244},[25,103076,101182],{"class":45},[25,103078,51378],{"class":244},[25,103080,103081,103083,103085,103087,103089,103091],{"class":27,"line":39},[25,103082,52215],{"class":244},[25,103084,101691],{"class":51371},[25,103086,15030],{"class":31},[25,103088,290],{"class":244},[25,103090,102032],{"class":45},[25,103092,101215],{"class":244},[25,103094,103095,103097,103099,103101,103103,103105,103107,103109,103111],{"class":27,"line":51},[25,103096,52215],{"class":244},[25,103098,101191],{"class":51371},[25,103100,53895],{"class":31},[25,103102,290],{"class":244},[25,103104,53562],{"class":45},[25,103106,101207],{"class":31},[25,103108,290],{"class":244},[25,103110,101212],{"class":45},[25,103112,101215],{"class":244},[25,103114,103115,103117,103119],{"class":27,"line":59},[25,103116,51856],{"class":244},[25,103118,51871],{"class":51371},[25,103120,51378],{"class":244},[99,103122,103123],{},"含义:",[194,103125,103126,103132,103137,103140],{},[106,103127,103128,103129,103131],{},"创建名为 ",[22,103130,53785],{}," 的刚体",[106,103133,103134,103135],{},"初始位置在世界坐标 ",[22,103136,101240],{},[106,103138,103139],{},"它有一个自由关节",[106,103141,103142],{},"它有一个盒子几何体",[210,103144,103145],{"id":103145},"坐标怎么理解",[99,103147,103148],{},"MuJoCo 默认使用三维坐标：",[15,103150,103153],{"className":103151,"code":103152,"language":5297,"meta":20},[5295],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[22,103154,103152],{"__ignoreMap":20},[99,103156,14743],{},[15,103158,103160],{"className":53138,"code":103159,"language":53140,"meta":20,"style":20},"pos=\"0 0 1\"\n",[22,103161,103162],{"__ignoreMap":20},[25,103163,103164],{"class":27,"line":28},[25,103165,103159],{"class":244},[99,103167,103168],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[210,103170,103172],{"id":103171},"geom-的-size-怎么理解","geom 的 size 怎么理解",[99,103174,103175,103176,82601,103179,103181],{},"不同 ",[22,103177,103178],{},"type",[22,103180,31567],{}," 含义不同：",[380,103183,103184,103199],{},[383,103185,103186],{},[386,103187,103188,103192,103197],{},[389,103189,103190],{"align":23846},[22,103191,103178],{},[389,103193,103194,103196],{"align":23846},[22,103195,31567],{}," 示例",[389,103198,100771],{"align":23846},[427,103200,103201,103215,103230,103249],{},[386,103202,103203,103207,103212],{},[432,103204,103205],{"align":23846},[22,103206,53785],{},[432,103208,103209],{"align":23846},[22,103210,103211],{},"size=\"0.1 0.2 0.3\"",[432,103213,103214],{"align":23846},"x\u002Fy\u002Fz 半边长，不是完整长度",[386,103216,103217,103222,103227],{},[432,103218,103219],{"align":23846},[22,103220,103221],{},"sphere",[432,103223,103224],{"align":23846},[22,103225,103226],{},"size=\"0.1\"",[432,103228,103229],{"align":23846},"球半径",[386,103231,103232,103237,103242],{},[432,103233,103234],{"align":23846},[22,103235,103236],{},"capsule",[432,103238,103239],{"align":23846},[22,103240,103241],{},"size=\"0.03\"",[432,103243,103244,103245,103248],{"align":23846},"胶囊半径，长度常用 ",[22,103246,103247],{},"fromto"," 指定",[386,103250,103251,103256,103261],{},[432,103252,103253],{"align":23846},[22,103254,103255],{},"plane",[432,103257,103258],{"align":23846},[22,103259,103260],{},"size=\"3 3 0.1\"",[432,103262,103263],{"align":23846},"可视平面大小，通常当地面",[99,103265,103266,103267,103269,103270,103272],{},"最容易踩坑的是 box：",[22,103268,102095],{}," 表示边长大约是 ",[22,103271,32108],{},"，因为 MuJoCo 用的是半边长。",[210,103274,103276],{"id":103275},"site-是什么","site 是什么",[99,103278,103279,103282],{},[22,103280,103281],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[194,103284,103285,103288,103291,103294],{},[106,103286,103287],{},"标记机械臂末端。",[106,103289,103290],{},"标记目标位置。",[106,103292,103293],{},"放传感器或相机参考点。",[106,103295,103296],{},"在 Python 中读取某个关键点的世界坐标。",[99,103298,103299,103300,101089,103303,103306],{},"在后面的 Reacher 任务中，",[22,103301,103302],{},"tip",[22,103304,103305],{},"target"," 就会用 site 表示。",[182,103308,101324],{"id":101323},[15,103310,103312],{"className":30449,"code":103311,"language":30451,"meta":20,"style":20},"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",[22,103313,103314,103320,103330,103334,103338,103346,103351,103355,103359,103363,103368,103372,103377,103382,103387,103392,103396,103400,103404,103408,103412,103416,103428,103440,103448,103452,103467,103482,103486,103499,103514,103527,103540,103544,103560,103564,103568,103579,103591,103603,103615,103619,103623,103635],{"__ignoreMap":20},[25,103315,103316,103318],{"class":27,"line":28},[25,103317,30463],{"class":240},[25,103319,101372],{"class":244},[25,103321,103322,103324,103326,103328],{"class":27,"line":39},[25,103323,30463],{"class":240},[25,103325,31451],{"class":244},[25,103327,31454],{"class":240},[25,103329,31457],{"class":244},[25,103331,103332],{"class":27,"line":51},[25,103333,2510],{"emptyLinePlaceholder":167},[25,103335,103336],{"class":27,"line":59},[25,103337,2510],{"emptyLinePlaceholder":167},[25,103339,103340,103342,103344],{"class":27,"line":67},[25,103341,101385],{"class":35},[25,103343,13674],{"class":240},[25,103345,101390],{"class":45},[25,103347,103348],{"class":27,"line":75},[25,103349,103350],{"class":45},"\u003Cmujoco model=\"xml_basic\">\n",[25,103352,103353],{"class":27,"line":83},[25,103354,101400],{"class":45},[25,103356,103357],{"class":27,"line":91},[25,103358,2510],{"emptyLinePlaceholder":167},[25,103360,103361],{"class":27,"line":1429},[25,103362,101409],{"class":45},[25,103364,103365],{"class":27,"line":1441},[25,103366,103367],{"class":45},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[25,103369,103370],{"class":27,"line":1723},[25,103371,2510],{"emptyLinePlaceholder":167},[25,103373,103374],{"class":27,"line":1728},[25,103375,103376],{"class":45},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[25,103378,103379],{"class":27,"line":1734},[25,103380,103381],{"class":45},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[25,103383,103384],{"class":27,"line":1739},[25,103385,103386],{"class":45},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[25,103388,103389],{"class":27,"line":1753},[25,103390,103391],{"class":45},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,103393,103394],{"class":27,"line":1758},[25,103395,101438],{"class":45},[25,103397,103398],{"class":27,"line":1764},[25,103399,101443],{"class":45},[25,103401,103402],{"class":27,"line":1785},[25,103403,101448],{"class":45},[25,103405,103406],{"class":27,"line":1790},[25,103407,95769],{"class":45},[25,103409,103410],{"class":27,"line":1804},[25,103411,2510],{"emptyLinePlaceholder":167},[25,103413,103414],{"class":27,"line":1809},[25,103415,2510],{"emptyLinePlaceholder":167},[25,103417,103418,103420,103422,103424,103426],{"class":27,"line":1838},[25,103419,32018],{"class":240},[25,103421,2083],{"class":31},[25,103423,101469],{"class":244},[25,103425,95757],{"class":35},[25,103427,3849],{"class":244},[25,103429,103430,103432,103434,103436,103438],{"class":27,"line":1843},[25,103431,101478],{"class":244},[25,103433,290],{"class":240},[25,103435,101483],{"class":244},[25,103437,101385],{"class":35},[25,103439,251],{"class":244},[25,103441,103442,103444,103446],{"class":27,"line":1860},[25,103443,101492],{"class":244},[25,103445,290],{"class":240},[25,103447,101497],{"class":244},[25,103449,103450],{"class":27,"line":1865},[25,103451,2510],{"emptyLinePlaceholder":167},[25,103453,103454,103457,103459,103462,103465],{"class":27,"line":1870},[25,103455,103456],{"class":244},"    box_body_id ",[25,103458,290],{"class":240},[25,103460,103461],{"class":244}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[25,103463,103464],{"class":45},"\"red_box\"",[25,103466,251],{"class":244},[25,103468,103469,103472,103474,103477,103480],{"class":27,"line":1875},[25,103470,103471],{"class":244},"    site_id ",[25,103473,290],{"class":240},[25,103475,103476],{"class":244}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[25,103478,103479],{"class":45},"\"box_center\"",[25,103481,251],{"class":244},[25,103483,103484],{"class":27,"line":1889},[25,103485,2510],{"emptyLinePlaceholder":167},[25,103487,103488,103490,103493,103495,103497],{"class":27,"line":1894},[25,103489,3211],{"class":240},[25,103491,103492],{"class":244}," box_body_id ",[25,103494,1153],{"class":240},[25,103496,4203],{"class":35},[25,103498,3849],{"class":244},[25,103500,103501,103504,103507,103509,103512],{"class":27,"line":2687},[25,103502,103503],{"class":240},"        raise",[25,103505,103506],{"class":35}," RuntimeError",[25,103508,245],{"class":244},[25,103510,103511],{"class":45},"\"body red_box not found\"",[25,103513,251],{"class":244},[25,103515,103516,103518,103521,103523,103525],{"class":27,"line":2701},[25,103517,3211],{"class":240},[25,103519,103520],{"class":244}," site_id ",[25,103522,1153],{"class":240},[25,103524,4203],{"class":35},[25,103526,3849],{"class":244},[25,103528,103529,103531,103533,103535,103538],{"class":27,"line":2709},[25,103530,103503],{"class":240},[25,103532,103506],{"class":35},[25,103534,245],{"class":244},[25,103536,103537],{"class":45},"\"site box_center not found\"",[25,103539,251],{"class":244},[25,103541,103542],{"class":27,"line":2714},[25,103543,2510],{"emptyLinePlaceholder":167},[25,103545,103546,103548,103550,103552,103554,103556,103558],{"class":27,"line":2720},[25,103547,3311],{"class":240},[25,103549,101572],{"class":244},[25,103551,26114],{"class":240},[25,103553,32514],{"class":35},[25,103555,245],{"class":244},[25,103557,1833],{"class":35},[25,103559,30857],{"class":244},[25,103561,103562],{"class":27,"line":2726},[25,103563,101587],{"class":244},[25,103565,103566],{"class":27,"line":2731},[25,103567,2510],{"emptyLinePlaceholder":167},[25,103569,103570,103572,103574,103577],{"class":27,"line":8058},[25,103571,31370],{"class":35},[25,103573,245],{"class":244},[25,103575,103576],{"class":45},"\"simulation time:\"",[25,103578,101549],{"class":244},[25,103580,103581,103583,103585,103588],{"class":27,"line":8082},[25,103582,31370],{"class":35},[25,103584,245],{"class":244},[25,103586,103587],{"class":45},"\"box body position:\"",[25,103589,103590],{"class":244},", data.xpos[box_body_id].copy())\n",[25,103592,103593,103595,103597,103600],{"class":27,"line":8087},[25,103594,31370],{"class":35},[25,103596,245],{"class":244},[25,103598,103599],{"class":45},"\"site position:\"",[25,103601,103602],{"class":244},", data.site_xpos[site_id].copy())\n",[25,103604,103605,103607,103609,103612],{"class":27,"line":8093},[25,103606,31370],{"class":35},[25,103608,245],{"class":244},[25,103610,103611],{"class":45},"\"box qpos:\"",[25,103613,103614],{"class":244},", np.array(data.qpos))\n",[25,103616,103617],{"class":27,"line":8120},[25,103618,2510],{"emptyLinePlaceholder":167},[25,103620,103621],{"class":27,"line":8125},[25,103622,2510],{"emptyLinePlaceholder":167},[25,103624,103625,103627,103629,103631,103633],{"class":27,"line":8131},[25,103626,1642],{"class":240},[25,103628,31291],{"class":35},[25,103630,101630],{"class":240},[25,103632,101633],{"class":45},[25,103634,3849],{"class":244},[25,103636,103637],{"class":27,"line":8143},[25,103638,101640],{"class":244},[99,103640,103641],{},"保存为：",[15,103643,103645],{"className":17,"code":103644,"language":19,"meta":20,"style":20},"touch ch2_xml_basic.py\n",[22,103646,103647],{"__ignoreMap":20},[25,103648,103649,103651],{"class":27,"line":28},[25,103650,101354],{"class":31},[25,103652,103653],{"class":45}," ch2_xml_basic.py\n",[99,103655,102372],{},[15,103657,103659],{"className":17,"code":103658,"language":19,"meta":20,"style":20},"python ch2_xml_basic.py\n",[22,103660,103661],{"__ignoreMap":20},[25,103662,103663,103665],{"class":27,"line":28},[25,103664,30451],{"class":31},[25,103666,103653],{"class":45},[210,103668,101643],{"id":101643},[99,103670,103671],{},"用名字查找 body：",[15,103673,103675],{"className":30449,"code":103674,"language":30451,"meta":20,"style":20},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[22,103676,103677],{"__ignoreMap":20},[25,103678,103679,103682,103684,103686,103688],{"class":27,"line":28},[25,103680,103681],{"class":244},"box_body_id ",[25,103683,290],{"class":240},[25,103685,103461],{"class":244},[25,103687,103464],{"class":45},[25,103689,251],{"class":244},[99,103691,103692],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[99,103694,103695],{},"用名字查找 site：",[15,103697,103699],{"className":30449,"code":103698,"language":30451,"meta":20,"style":20},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[22,103700,103701],{"__ignoreMap":20},[25,103702,103703,103706,103708,103710,103712],{"class":27,"line":28},[25,103704,103705],{"class":244},"site_id ",[25,103707,290],{"class":240},[25,103709,103476],{"class":244},[25,103711,103479],{"class":45},[25,103713,251],{"class":244},[99,103715,103716,103717,103720,103721,103724],{},"注意第二个参数是对象类型。查 body 就用 ",[22,103718,103719],{},"mjOBJ_BODY","，查 site 就用 ",[22,103722,103723],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[99,103726,103727],{},"读取世界坐标：",[15,103729,103731],{"className":30449,"code":103730,"language":30451,"meta":20,"style":20},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[22,103732,103733,103738],{"__ignoreMap":20},[25,103734,103735],{"class":27,"line":28},[25,103736,103737],{"class":244},"data.xpos[box_body_id]\n",[25,103739,103740],{"class":27,"line":39},[25,103741,103742],{"class":244},"data.site_xpos[site_id]\n",[99,103744,103745,103748,103749,103752],{},[22,103746,103747],{},"xpos"," 是 body 的世界坐标，",[22,103750,103751],{},"site_xpos"," 是 site 的世界坐标。",[210,103754,101779],{"id":101779},[15,103756,103758],{"className":30449,"code":103757,"language":30451,"meta":20,"style":20},"import mujoco\nimport numpy as np\n",[22,103759,103760,103766],{"__ignoreMap":20},[25,103761,103762,103764],{"class":27,"line":28},[25,103763,30463],{"class":240},[25,103765,101372],{"class":244},[25,103767,103768,103770,103772,103774],{"class":27,"line":39},[25,103769,30463],{"class":240},[25,103771,31451],{"class":244},[25,103773,31454],{"class":240},[25,103775,31457],{"class":244},[99,103777,103778,103779,103782,103783,103786,103787,455,103790,28456],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[22,103780,103781],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[22,103784,103785],{},"as np"," 是习惯写法，后面就可以写 ",[22,103788,103789],{},"np.array(...)",[22,103791,103792],{},"np.round(...)",[15,103794,103795],{"className":30449,"code":101666,"language":30451,"meta":20,"style":20},[22,103796,103797,103805,103809],{"__ignoreMap":20},[25,103798,103799,103801,103803],{"class":27,"line":28},[25,103800,101385],{"class":35},[25,103802,13674],{"class":240},[25,103804,101390],{"class":45},[25,103806,103807],{"class":27,"line":39},[25,103808,101681],{"class":45},[25,103810,103811],{"class":27,"line":51},[25,103812,95769],{"class":45},[99,103814,103815,103816,28456],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[22,103817,103818],{},"mujoco.MjModel.from_xml_string(XML)",[15,103820,103822],{"className":53138,"code":103821,"language":53140,"meta":20,"style":20},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[22,103823,103824],{"__ignoreMap":20},[25,103825,103826,103828,103830,103832,103834,103836,103838,103840,103843,103845,103847,103850,103852,103854,103857],{"class":27,"line":28},[25,103827,1153],{"class":244},[25,103829,103281],{"class":51371},[25,103831,15030],{"class":31},[25,103833,290],{"class":244},[25,103835,103479],{"class":45},[25,103837,101177],{"class":31},[25,103839,290],{"class":244},[25,103841,103842],{"class":45},"\"0 0 0\"",[25,103844,101207],{"class":31},[25,103846,290],{"class":244},[25,103848,103849],{"class":45},"\"0.03\"",[25,103851,78838],{"class":31},[25,103853,290],{"class":244},[25,103855,103856],{"class":45},"\"0 1 0 1\"",[25,103858,101215],{"class":244},[99,103860,103861,103863,103864,103867,103868,103870,103871,103874],{},[22,103862,103281],{}," 是标记点。",[22,103865,103866],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[22,103869,103241],{}," 表示显示出来的小球大小。",[22,103872,103873],{},"rgba=\"0 1 0 1\""," 表示绿色。",[15,103876,103877],{"className":30449,"code":103674,"language":30451,"meta":20,"style":20},[22,103878,103879],{"__ignoreMap":20},[25,103880,103881,103883,103885,103887,103889],{"class":27,"line":28},[25,103882,103681],{"class":244},[25,103884,290],{"class":240},[25,103886,103461],{"class":244},[25,103888,103464],{"class":45},[25,103890,251],{"class":244},[99,103892,103893,103894,103896],{},"这行的作用是：根据名字 ",[22,103895,103464],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[99,103898,103899],{},"拆开看：",[194,103901,103902,103908,103913,103919],{},[106,103903,103904,103907],{},[22,103905,103906],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[106,103909,103910,103912],{},[22,103911,102156],{}," 是被查询的模型。",[106,103914,103915,103918],{},[22,103916,103917],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[106,103920,103921,103923],{},[22,103922,103464],{}," 是 XML 里写的名字。",[15,103925,103926],{"className":30449,"code":103698,"language":30451,"meta":20,"style":20},[22,103927,103928],{"__ignoreMap":20},[25,103929,103930,103932,103934,103936,103938],{"class":27,"line":28},[25,103931,103705],{"class":244},[25,103933,290],{"class":240},[25,103935,103476],{"class":244},[25,103937,103479],{"class":45},[25,103939,251],{"class":244},[99,103941,103942,103943,28456],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[22,103944,103479],{},[15,103946,103948],{"className":30449,"code":103947,"language":30451,"meta":20,"style":20},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[22,103949,103950,103962],{"__ignoreMap":20},[25,103951,103952,103954,103956,103958,103960],{"class":27,"line":28},[25,103953,1642],{"class":240},[25,103955,103492],{"class":244},[25,103957,1153],{"class":240},[25,103959,4203],{"class":35},[25,103961,3849],{"class":244},[25,103963,103964,103967,103969,103971,103973],{"class":27,"line":39},[25,103965,103966],{"class":240},"    raise",[25,103968,103506],{"class":35},[25,103970,245],{"class":244},[25,103972,103511],{"class":45},[25,103974,251],{"class":244},[99,103976,103977,103979,103980,103983,103984,103987,103988,103991],{},[22,103978,1642],{}," 是条件判断。",[22,103981,103982],{},"mj_name2id"," 找不到对象时会返回 ",[22,103985,103986],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[22,103989,103990],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[15,103993,103995],{"className":30449,"code":103994,"language":30451,"meta":20,"style":20},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[22,103996,103997,104013],{"__ignoreMap":20},[25,103998,103999,104001,104003,104005,104007,104009,104011],{"class":27,"line":28},[25,104000,3135],{"class":240},[25,104002,101572],{"class":244},[25,104004,26114],{"class":240},[25,104006,32514],{"class":35},[25,104008,245],{"class":244},[25,104010,1833],{"class":35},[25,104012,30857],{"class":244},[25,104014,104015],{"class":27,"line":39},[25,104016,101770],{"class":244},[99,104018,104019],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[15,104021,104023],{"className":30449,"code":104022,"language":30451,"meta":20,"style":20},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[22,104024,104025],{"__ignoreMap":20},[25,104026,104027,104029,104031,104033],{"class":27,"line":28},[25,104028,30486],{"class":35},[25,104030,245],{"class":244},[25,104032,103587],{"class":45},[25,104034,103590],{"class":244},[99,104036,104037,104039,104040,104043],{},[22,104038,101150],{}," 保存所有 body 的世界坐标。",[22,104041,104042],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[15,104045,104047],{"className":30449,"code":104046,"language":30451,"meta":20,"style":20},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[22,104048,104049],{"__ignoreMap":20},[25,104050,104051,104053,104055,104057],{"class":27,"line":28},[25,104052,30486],{"class":35},[25,104054,245],{"class":244},[25,104056,103599],{"class":45},[25,104058,103602],{"class":244},[99,104060,104061,104064,104065,104067],{},[22,104062,104063],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[22,104066,103048],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[15,104069,104071],{"className":30449,"code":104070,"language":30451,"meta":20,"style":20},"print(\"box qpos:\", np.array(data.qpos))\n",[22,104072,104073],{"__ignoreMap":20},[25,104074,104075,104077,104079,104081],{"class":27,"line":28},[25,104076,30486],{"class":35},[25,104078,245],{"class":244},[25,104080,103611],{"class":45},[25,104082,103614],{"class":244},[99,104084,104085,104086,104089],{},"这里打印广义位置数组。",[22,104087,104088],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[182,104091,102387],{"id":102386},[99,104093,104094,104095,104098,104099,28456],{},"程序会输出 ",[22,104096,104097],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[22,104100,104101],{},"qpos",[99,104103,104104,104106,104107,104110,104111,104114],{},[22,104105,104042],{}," 是 body 的世界坐标位置。",[22,104108,104109],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[22,104112,104113],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[99,104116,82293,104117,82601,104119,104121],{},[22,104118,103048],{},[22,104120,103866],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[99,104123,104124],{},"如果你把 site 改成：",[15,104126,104128],{"className":53138,"code":104127,"language":53140,"meta":20,"style":20},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[22,104129,104130],{"__ignoreMap":20},[25,104131,104132,104134,104136,104138,104140,104143,104145,104147,104150,104152,104154,104156,104158,104160,104162],{"class":27,"line":28},[25,104133,1153],{"class":244},[25,104135,103281],{"class":51371},[25,104137,15030],{"class":31},[25,104139,290],{"class":244},[25,104141,104142],{"class":45},"\"box_top\"",[25,104144,101177],{"class":31},[25,104146,290],{"class":244},[25,104148,104149],{"class":45},"\"0 0 0.15\"",[25,104151,101207],{"class":31},[25,104153,290],{"class":244},[25,104155,103849],{"class":45},[25,104157,78838],{"class":31},[25,104159,290],{"class":244},[25,104161,103856],{"class":45},[25,104163,101215],{"class":244},[99,104165,104166,104167,104170],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[22,104168,104169],{},"site position"," 就会比 body position 的 z 坐标更高。",[182,104172,102419],{"id":102418},[194,104174,104175,104184,104187,104194,104200,104211],{},[106,104176,102482,104177,104179,104180,102485,104182,28456],{},[22,104178,103052],{}," 的初始高度从 ",[22,104181,460],{},[22,104183,321],{},[106,104185,104186],{},"重新运行程序。",[106,104188,104189,104190,104193],{},"观察 ",[22,104191,104192],{},"box qpos"," 和最终位置是否变化。",[106,104195,104196,104197,104199],{},"故意把 ",[22,104198,103281],{}," 名称改错，确认程序能报错。",[106,104201,102482,104202,104204,104205,102485,104207,104210],{},[22,104203,101191],{}," 的颜色 ",[22,104206,102103],{},[22,104208,104209],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[106,104212,102482,104213,82601,104215,102485,104218,104221,104222,104224],{},[22,104214,103048],{},[22,104216,104217],{},"pos",[22,104219,104220],{},"0 0 0.2","，观察 ",[22,104223,104169],{}," 如何变化。",[182,104226,102524],{"id":102523},[210,104228,104230],{"id":104229},"xml-error-schema-violation",[22,104231,104232],{},"XML Error: Schema violation",[99,104234,104235],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[210,104237,104239,81361,104241],{"id":104238},"mj_name2id-返回-1",[22,104240,103982],{},[22,104242,103986],{},[99,104244,104245,104246,104249],{},"说明名字没有找到。检查 XML 中 ",[22,104247,104248],{},"name=\"...\"","，并确认对象类型正确。",[210,104251,104252],{"id":104252},"物体不下落",[99,104254,102594],{},[194,104256,104257,104262,104267],{},[106,104258,104259,104260],{},"body 是否有 ",[22,104261,101691],{},[106,104263,104264,104265],{},"gravity 是否为 ",[22,104266,102660],{},[106,104268,104269,104270,104272],{},"body 是否被固定在 ",[22,104271,101912],{}," 中",[210,104274,104275],{"id":104275},"坐标看起来不符合预期",[99,104277,104278],{},"先区分两种坐标：",[380,104280,104281,104290],{},[383,104282,104283],{},[386,104284,104285,104288],{},[389,104286,104287],{"align":23846},"坐标",[389,104289,100771],{"align":23846},[427,104291,104292,104302],{},[386,104293,104294,104299],{},[432,104295,104296,104297],{"align":23846},"XML 里的 ",[22,104298,104217],{},[432,104300,104301],{"align":23846},"相对父 body 的局部坐标",[386,104303,104304,104310],{},[432,104305,104306,25085,104308],{"align":23846},[22,104307,101150],{},[22,104309,104063],{},[432,104311,104312],{"align":23846},"仿真更新后的世界坐标",[99,104314,104315,104316,104318,104319,82610,104322,104324],{},"如果你修改了 ",[22,104317,101141],{},"，但还没调用 ",[22,104320,104321],{},"mj_forward",[22,104323,101286],{},"，世界坐标可能还没有更新。",[182,104326,102678],{"id":102677},[99,104328,104329],{},"MJCF 建模先掌握四件事：",[194,104331,104332,104337,104342,104347],{},[106,104333,104334,104336],{},[22,104335,51871],{}," 表示刚体层级。",[106,104338,104339,104341],{},[22,104340,101191],{}," 表示形状、碰撞和质量。",[106,104343,104344,104346],{},[22,104345,103027],{}," 决定 body 能不能动、怎么动。",[106,104348,104349,104351],{},[22,104350,103281],{}," 用来标记关键点，方便 Python 读取位置。",[99,104353,104354],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[159,104356,104357],{},"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":20,"searchDepth":39,"depth":39,"links":104359},[104360,104361,104362,104368,104372,104373,104374,104381],{"id":100717,"depth":39,"text":100718},{"id":100840,"depth":39,"text":100841},{"id":101115,"depth":39,"text":101116,"children":104363},[104364,104365,104366,104367],{"id":103031,"depth":51,"text":103031},{"id":103145,"depth":51,"text":103145},{"id":103171,"depth":51,"text":103172},{"id":103275,"depth":51,"text":103276},{"id":101323,"depth":39,"text":101324,"children":104369},[104370,104371],{"id":101643,"depth":51,"text":101643},{"id":101779,"depth":51,"text":101779},{"id":102386,"depth":39,"text":102387},{"id":102418,"depth":39,"text":102419},{"id":102523,"depth":39,"text":102524,"children":104375},[104376,104377,104379,104380],{"id":104229,"depth":51,"text":104232},{"id":104238,"depth":51,"text":104378},"mj_name2id 返回 -1",{"id":104252,"depth":51,"text":104252},{"id":104275,"depth":51,"text":104275},{"id":102677,"depth":39,"text":102678},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102725,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104388,"title":104389,"body":104390,"description":20,"extension":165,"meta":105885,"navigation":167,"path":105886,"seo":105887,"stem":105888,"__hash__":105889},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104391,"toc":105857},[104392,104395,104397,104400,104403,104441,104444,104450,104453,104455,104457,104484,104486,104500,104502,104543,104545,104569,104571,104574,104583,104592,104595,104604,104612,104621,104624,104634,104637,104689,104696,104702,104710,104758,104761,104780,104783,104791,104795,104804,104837,104839,105187,105189,105201,105203,105214,105216,105219,105240,105246,105249,105274,105284,105287,105295,105298,105301,105322,105333,105335,105355,105358,105379,105388,105407,105413,105438,105441,105455,105462,105486,105489,105497,105506,105522,105534,105542,105551,105553,105556,105580,105585,105588,105610,105612,105651,105653,105660,105662,105670,105673,105676,105688,105729,105736,105747,105754,105757,105806,105809,105812,105818,105820,105825,105851,105854],[10,104393,104389],{"id":104394},"_3python-控制接口读取状态与推进仿真",[182,104396,100718],{"id":100717},[99,104398,104399],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[99,104401,104402],{},"你将学习:",[194,104404,104405,104410,104415,104419,104424,104435],{},[106,104406,104407],{},[22,104408,104409],{},"MjModel.from_xml_string",[106,104411,104412],{},[22,104413,104414],{},"MjData(model)",[106,104416,104417],{},[22,104418,101286],{},[106,104420,104421],{},[22,104422,104423],{},"mj_resetData",[106,104425,104426,104427,455,104429,455,104432],{},"读取 ",[22,104428,104101],{},[22,104430,104431],{},"qvel",[22,104433,104434],{},"ctrl",[106,104436,104437,104438],{},"使用 ",[22,104439,104440],{},"model.opt.timestep",[99,104442,104443],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[15,104445,104448],{"className":104446,"code":104447,"language":5297,"meta":20},[5295],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[22,104449,104447],{"__ignoreMap":20},[99,104451,104452],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[182,104454,100841],{"id":100840},[99,104456,100844],{},[15,104458,104460],{"className":17,"code":104459,"language":19,"meta":20,"style":20},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[22,104461,104462],{"__ignoreMap":20},[25,104463,104464,104466,104468,104470,104472,104475,104477,104479,104481],{"class":27,"line":28},[25,104465,24684],{"class":31},[25,104467,26386],{"class":45},[25,104469,23942],{"class":45},[25,104471,26471],{"class":35},[25,104473,104474],{"class":45}," python3",[25,104476,100869],{"class":45},[25,104478,102572],{"class":45},[25,104480,100885],{"class":45},[25,104482,104483],{"class":45}," glfw\n",[99,104485,102890],{},[15,104487,104488],{"className":17,"code":100990,"language":19,"meta":20,"style":20},[22,104489,104490],{"__ignoreMap":20},[25,104491,104492,104494,104496,104498],{"class":27,"line":28},[25,104493,23939],{"class":31},[25,104495,23942],{"class":45},[25,104497,101001],{"class":45},[25,104499,101004],{"class":45},[99,104501,102907],{},[15,104503,104505],{"className":17,"code":104504,"language":19,"meta":20,"style":20},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[22,104506,104507,104524,104533],{"__ignoreMap":20},[25,104508,104509,104511,104513,104515,104518,104520,104522],{"class":27,"line":28},[25,104510,30401],{"class":31},[25,104512,29247],{"class":45},[25,104514,25222],{"class":35},[25,104516,104517],{"class":45}," mujoco-python-api",[25,104519,101046],{"class":45},[25,104521,101049],{"class":35},[25,104523,101052],{"class":35},[25,104525,104526,104528,104530],{"class":27,"line":39},[25,104527,30401],{"class":31},[25,104529,101059],{"class":45},[25,104531,104532],{"class":45}," mujoco-python-api\n",[25,104534,104535,104537,104539,104541],{"class":27,"line":51},[25,104536,23939],{"class":31},[25,104538,23942],{"class":45},[25,104540,101001],{"class":45},[25,104542,101004],{"class":45},[99,104544,101075],{},[194,104546,104547,104554,104563],{},[106,104548,104549,101089,104551,104553],{},[22,104550,100746],{},[22,104552,100751],{}," 是官方 Python bindings 的类名。",[106,104555,104556,104557,104560,104561,28456],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[22,104558,104559],{},"mjModel"," 在 Python 中是 ",[22,104562,100780],{},[106,104564,104565,104566,28456],{},"不要使用 ",[22,104567,104568],{},"sim = mujoco_py.MjSim(...)",[182,104570,101116],{"id":101115},[99,104572,104573],{},"仿真推进核心代码:",[15,104575,104577],{"className":30449,"code":104576,"language":30451,"meta":20,"style":20},"mujoco.mj_step(model, data)\n",[22,104578,104579],{"__ignoreMap":20},[25,104580,104581],{"class":27,"line":28},[25,104582,104576],{"class":244},[99,104584,104585,104586,455,104588,455,104590,28456],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[22,104587,101141],{},[22,104589,101144],{},[22,104591,101138],{},[99,104593,104594],{},"重置仿真:",[15,104596,104598],{"className":30449,"code":104597,"language":30451,"meta":20,"style":20},"mujoco.mj_resetData(model, data)\n",[22,104599,104600],{"__ignoreMap":20},[25,104601,104602],{"class":27,"line":28},[25,104603,104597],{"class":244},[99,104605,104606,104607,82610,104609,104611],{},"如果手动修改了 ",[22,104608,101141],{},[22,104610,101144],{},"，通常应调用:",[15,104613,104615],{"className":30449,"code":104614,"language":30451,"meta":20,"style":20},"mujoco.mj_forward(model, data)\n",[22,104616,104617],{"__ignoreMap":20},[25,104618,104619],{"class":27,"line":28},[25,104620,104614],{"class":244},[99,104622,104623],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[210,104625,104627,455,104629,455,104631,104633],{"id":104626},"qposqvelctrl-是什么",[22,104628,104101],{},[22,104630,104431],{},[22,104632,104434],{}," 是什么",[99,104635,104636],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[380,104638,104639,104651],{},[383,104640,104641],{},[386,104642,104643,104646,104648],{},[389,104644,104645],{"align":23846},"字段",[389,104647,100771],{"align":23846},[389,104649,104650],{"align":23846},"谁来修改",[427,104652,104653,104665,104677],{},[386,104654,104655,104659,104662],{},[432,104656,104657],{"align":23846},[22,104658,101141],{},[432,104660,104661],{"align":23846},"广义位置，例如小车位置、关节角、自由物体位置姿态",[432,104663,104664],{"align":23846},"MuJoCo 更新，也可以手动设置初始状态",[386,104666,104667,104671,104674],{},[432,104668,104669],{"align":23846},[22,104670,101144],{},[432,104672,104673],{"align":23846},"广义速度，例如小车速度、关节角速度",[432,104675,104676],{"align":23846},"MuJoCo 更新，也可以手动清零",[386,104678,104679,104683,104686],{},[432,104680,104681],{"align":23846},[22,104682,101147],{},[432,104684,104685],{"align":23846},"actuator 的控制输入",[432,104687,104688],{"align":23846},"主要由你的控制代码写入",[99,104690,9135,104691,101089,104693,104695],{},[22,104692,104101],{},[22,104694,104431],{}," 不一定同维。自由刚体就是典型例子：",[15,104697,104700],{"className":104698,"code":104699,"language":5297,"meta":20},[5295],"freejoint: qpos 7 维，qvel 6 维\n",[22,104701,104699],{"__ignoreMap":20},[210,104703,104705,101089,104707,104709],{"id":104704},"mj_step-和-mj_forward-的区别",[22,104706,101286],{},[22,104708,104321],{}," 的区别",[380,104711,104712,104725],{},[383,104713,104714],{},[386,104715,104716,104719,104722],{},[389,104717,104718],{"align":23846},"函数",[389,104720,104721],{"align":23846},"是否推进时间",[389,104723,104724],{"align":23846},"什么时候用",[427,104726,104727,104740],{},[386,104728,104729,104734,104737],{},[432,104730,104731],{"align":23846},[22,104732,104733],{},"mj_step(model, data)",[432,104735,104736],{"align":23846},"是",[432,104738,104739],{"align":23846},"正常仿真循环，每调用一次前进一步",[386,104741,104742,104747,104750],{},[432,104743,104744],{"align":23846},[22,104745,104746],{},"mj_forward(model, data)",[432,104748,104749],{"align":23846},"否",[432,104751,104752,104753,455,104755,104757],{"align":23846},"手动改了 ",[22,104754,104101],{},[22,104756,104431],{}," 后，刷新派生量",[99,104759,104760],{},"例如你写：",[15,104762,104764],{"className":30449,"code":104763,"language":30451,"meta":20,"style":20},"data.qpos[2] = 2.0\n",[22,104765,104766],{"__ignoreMap":20},[25,104767,104768,104771,104773,104775,104777],{"class":27,"line":28},[25,104769,104770],{"class":244},"data.qpos[",[25,104772,321],{"class":35},[25,104774,4553],{"class":244},[25,104776,290],{"class":240},[25,104778,104779],{"class":35}," 2.0\n",[99,104781,104782],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[15,104784,104785],{"className":30449,"code":104614,"language":30451,"meta":20,"style":20},[22,104786,104787],{"__ignoreMap":20},[25,104788,104789],{"class":27,"line":28},[25,104790,104614],{"class":244},[210,104792,104794],{"id":104793},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[99,104796,104797,104800,104801,104803],{},[22,104798,104799],{},"mujoco.mj_resetData(model, data)"," 会把 ",[22,104802,33472],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[15,104805,104807],{"className":30449,"code":104806,"language":30451,"meta":20,"style":20},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[22,104808,104809,104813,104823,104833],{"__ignoreMap":20},[25,104810,104811],{"class":27,"line":28},[25,104812,104597],{"class":244},[25,104814,104815,104818,104820],{"class":27,"line":39},[25,104816,104817],{"class":244},"data.qpos[:] ",[25,104819,290],{"class":240},[25,104821,104822],{"class":244}," random_qpos\n",[25,104824,104825,104828,104830],{"class":27,"line":51},[25,104826,104827],{"class":244},"data.qvel[:] ",[25,104829,290],{"class":240},[25,104831,104832],{"class":35}," 0.0\n",[25,104834,104835],{"class":27,"line":59},[25,104836,104614],{"class":244},[182,104838,101324],{"id":101323},[15,104840,104842],{"className":30449,"code":104841,"language":30451,"meta":20,"style":20},"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",[22,104843,104844,104850,104860,104864,104868,104876,104881,104885,104889,104893,104898,104902,104907,104912,104917,104921,104925,104929,104933,104937,104941,104960,104967,104979,104990,105006,105022,105026,105030,105042,105054,105062,105066,105077,105081,105097,105101,105105,105114,105118,105123,105132,105136,105149,105154,105163,105167,105171,105183],{"__ignoreMap":20},[25,104845,104846,104848],{"class":27,"line":28},[25,104847,30463],{"class":240},[25,104849,101372],{"class":244},[25,104851,104852,104854,104856,104858],{"class":27,"line":39},[25,104853,30463],{"class":240},[25,104855,31451],{"class":244},[25,104857,31454],{"class":240},[25,104859,31457],{"class":244},[25,104861,104862],{"class":27,"line":51},[25,104863,2510],{"emptyLinePlaceholder":167},[25,104865,104866],{"class":27,"line":59},[25,104867,2510],{"emptyLinePlaceholder":167},[25,104869,104870,104872,104874],{"class":27,"line":67},[25,104871,101385],{"class":35},[25,104873,13674],{"class":240},[25,104875,101390],{"class":45},[25,104877,104878],{"class":27,"line":75},[25,104879,104880],{"class":45},"\u003Cmujoco model=\"state_api\">\n",[25,104882,104883],{"class":27,"line":83},[25,104884,101400],{"class":45},[25,104886,104887],{"class":27,"line":91},[25,104888,2510],{"emptyLinePlaceholder":167},[25,104890,104891],{"class":27,"line":1429},[25,104892,101409],{"class":45},[25,104894,104895],{"class":27,"line":1441},[25,104896,104897],{"class":45},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[25,104899,104900],{"class":27,"line":1723},[25,104901,2510],{"emptyLinePlaceholder":167},[25,104903,104904],{"class":27,"line":1728},[25,104905,104906],{"class":45},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[25,104908,104909],{"class":27,"line":1734},[25,104910,104911],{"class":45},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[25,104913,104914],{"class":27,"line":1739},[25,104915,104916],{"class":45},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[25,104918,104919],{"class":27,"line":1753},[25,104920,101438],{"class":45},[25,104922,104923],{"class":27,"line":1758},[25,104924,101443],{"class":45},[25,104926,104927],{"class":27,"line":1764},[25,104928,101448],{"class":45},[25,104930,104931],{"class":27,"line":1785},[25,104932,95769],{"class":45},[25,104934,104935],{"class":27,"line":1790},[25,104936,2510],{"emptyLinePlaceholder":167},[25,104938,104939],{"class":27,"line":1804},[25,104940,2510],{"emptyLinePlaceholder":167},[25,104942,104943,104945,104948,104951,104953,104956,104958],{"class":27,"line":1809},[25,104944,32018],{"class":240},[25,104946,104947],{"class":31}," print_state",[25,104949,104950],{"class":244},"(prefix: ",[25,104952,1412],{"class":35},[25,104954,104955],{"class":244},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[25,104957,95757],{"class":35},[25,104959,3849],{"class":244},[25,104961,104962,104964],{"class":27,"line":1838},[25,104963,31370],{"class":35},[25,104965,104966],{"class":244},"(prefix)\n",[25,104968,104969,104971,104973,104976],{"class":27,"line":1843},[25,104970,31370],{"class":35},[25,104972,245],{"class":244},[25,104974,104975],{"class":45},"\"  timestep:\"",[25,104977,104978],{"class":244},", model.opt.timestep)\n",[25,104980,104981,104983,104985,104988],{"class":27,"line":1860},[25,104982,31370],{"class":35},[25,104984,245],{"class":244},[25,104986,104987],{"class":45},"\"  time:\"",[25,104989,101549],{"class":244},[25,104991,104992,104994,104996,104999,105002,105004],{"class":27,"line":1865},[25,104993,31370],{"class":35},[25,104995,245],{"class":244},[25,104997,104998],{"class":45},"\"  qpos:\"",[25,105000,105001],{"class":244},", np.round(data.qpos.copy(), ",[25,105003,536],{"class":35},[25,105005,30568],{"class":244},[25,105007,105008,105010,105012,105015,105018,105020],{"class":27,"line":1870},[25,105009,31370],{"class":35},[25,105011,245],{"class":244},[25,105013,105014],{"class":45},"\"  qvel:\"",[25,105016,105017],{"class":244},", np.round(data.qvel.copy(), ",[25,105019,536],{"class":35},[25,105021,30568],{"class":244},[25,105023,105024],{"class":27,"line":1875},[25,105025,2510],{"emptyLinePlaceholder":167},[25,105027,105028],{"class":27,"line":1889},[25,105029,2510],{"emptyLinePlaceholder":167},[25,105031,105032,105034,105036,105038,105040],{"class":27,"line":1894},[25,105033,32018],{"class":240},[25,105035,2083],{"class":31},[25,105037,101469],{"class":244},[25,105039,95757],{"class":35},[25,105041,3849],{"class":244},[25,105043,105044,105046,105048,105050,105052],{"class":27,"line":2687},[25,105045,101478],{"class":244},[25,105047,290],{"class":240},[25,105049,101483],{"class":244},[25,105051,101385],{"class":35},[25,105053,251],{"class":244},[25,105055,105056,105058,105060],{"class":27,"line":2701},[25,105057,101492],{"class":244},[25,105059,290],{"class":240},[25,105061,101497],{"class":244},[25,105063,105064],{"class":27,"line":2709},[25,105065,2510],{"emptyLinePlaceholder":167},[25,105067,105068,105071,105074],{"class":27,"line":2714},[25,105069,105070],{"class":244},"    print_state(",[25,105072,105073],{"class":45},"\"initial\"",[25,105075,105076],{"class":244},", model, data)\n",[25,105078,105079],{"class":27,"line":2720},[25,105080,2510],{"emptyLinePlaceholder":167},[25,105082,105083,105085,105087,105089,105091,105093,105095],{"class":27,"line":2726},[25,105084,3311],{"class":240},[25,105086,101572],{"class":244},[25,105088,26114],{"class":240},[25,105090,32514],{"class":35},[25,105092,245],{"class":244},[25,105094,899],{"class":35},[25,105096,30857],{"class":244},[25,105098,105099],{"class":27,"line":2731},[25,105100,101587],{"class":244},[25,105102,105103],{"class":27,"line":8058},[25,105104,2510],{"emptyLinePlaceholder":167},[25,105106,105107,105109,105112],{"class":27,"line":8082},[25,105108,105070],{"class":244},[25,105110,105111],{"class":45},"\"after 50 steps\"",[25,105113,105076],{"class":244},[25,105115,105116],{"class":27,"line":8087},[25,105117,2510],{"emptyLinePlaceholder":167},[25,105119,105120],{"class":27,"line":8093},[25,105121,105122],{"class":244},"    mujoco.mj_resetData(model, data)\n",[25,105124,105125,105127,105130],{"class":27,"line":8120},[25,105126,105070],{"class":244},[25,105128,105129],{"class":45},"\"after reset\"",[25,105131,105076],{"class":244},[25,105133,105134],{"class":27,"line":8125},[25,105135,2510],{"emptyLinePlaceholder":167},[25,105137,105138,105141,105143,105145,105147],{"class":27,"line":8131},[25,105139,105140],{"class":244},"    data.qpos[",[25,105142,321],{"class":35},[25,105144,4553],{"class":244},[25,105146,290],{"class":240},[25,105148,104779],{"class":35},[25,105150,105151],{"class":27,"line":8143},[25,105152,105153],{"class":244},"    mujoco.mj_forward(model, data)\n",[25,105155,105156,105158,105161],{"class":27,"line":8155},[25,105157,105070],{"class":244},[25,105159,105160],{"class":45},"\"after manual qpos edit\"",[25,105162,105076],{"class":244},[25,105164,105165],{"class":27,"line":8167},[25,105166,2510],{"emptyLinePlaceholder":167},[25,105168,105169],{"class":27,"line":9826},[25,105170,2510],{"emptyLinePlaceholder":167},[25,105172,105173,105175,105177,105179,105181],{"class":27,"line":9851},[25,105174,1642],{"class":240},[25,105176,31291],{"class":35},[25,105178,101630],{"class":240},[25,105180,101633],{"class":45},[25,105182,3849],{"class":244},[25,105184,105185],{"class":27,"line":9874},[25,105186,101640],{"class":244},[99,105188,103641],{},[15,105190,105192],{"className":17,"code":105191,"language":19,"meta":20,"style":20},"touch ch3_python_state.py\n",[22,105193,105194],{"__ignoreMap":20},[25,105195,105196,105198],{"class":27,"line":28},[25,105197,101354],{"class":31},[25,105199,105200],{"class":45}," ch3_python_state.py\n",[99,105202,102372],{},[15,105204,105206],{"className":17,"code":105205,"language":19,"meta":20,"style":20},"python ch3_python_state.py\n",[22,105207,105208],{"__ignoreMap":20},[25,105209,105210,105212],{"class":27,"line":28},[25,105211,30451],{"class":31},[25,105213,105200],{"class":45},[210,105215,101643],{"id":101643},[99,105217,105218],{},"打印状态的函数：",[15,105220,105222],{"className":30449,"code":105221,"language":30451,"meta":20,"style":20},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[22,105223,105224],{"__ignoreMap":20},[25,105225,105226,105228,105230,105232,105234,105236,105238],{"class":27,"line":28},[25,105227,32018],{"class":240},[25,105229,104947],{"class":31},[25,105231,104950],{"class":244},[25,105233,1412],{"class":35},[25,105235,104955],{"class":244},[25,105237,95757],{"class":35},[25,105239,3849],{"class":244},[99,105241,105242,105243,105245],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[22,105244,33472],{}," 里发生了什么。",[99,105247,105248],{},"推进 50 步：",[15,105250,105252],{"className":30449,"code":105251,"language":30451,"meta":20,"style":20},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[22,105253,105254,105270],{"__ignoreMap":20},[25,105255,105256,105258,105260,105262,105264,105266,105268],{"class":27,"line":28},[25,105257,3135],{"class":240},[25,105259,101572],{"class":244},[25,105261,26114],{"class":240},[25,105263,32514],{"class":35},[25,105265,245],{"class":244},[25,105267,899],{"class":35},[25,105269,30857],{"class":244},[25,105271,105272],{"class":27,"line":39},[25,105273,101770],{"class":244},[99,105275,105276,105277,105280,105281,105283],{},"由于 ",[22,105278,105279],{},"timestep=0.01","，所以 50 步后时间约为 ",[22,105282,35400],{}," 秒。",[99,105285,105286],{},"重置：",[15,105288,105289],{"className":30449,"code":104597,"language":30451,"meta":20,"style":20},[22,105290,105291],{"__ignoreMap":20},[25,105292,105293],{"class":27,"line":28},[25,105294,104597],{"class":244},[99,105296,105297],{},"这会把时间、位置、速度恢复到初始状态。",[99,105299,105300],{},"手动改高度：",[15,105302,105304],{"className":30449,"code":105303,"language":30451,"meta":20,"style":20},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[22,105305,105306,105318],{"__ignoreMap":20},[25,105307,105308,105310,105312,105314,105316],{"class":27,"line":28},[25,105309,104770],{"class":244},[25,105311,321],{"class":35},[25,105313,4553],{"class":244},[25,105315,290],{"class":240},[25,105317,104779],{"class":35},[25,105319,105320],{"class":27,"line":39},[25,105321,104614],{"class":244},[99,105323,105324,105325,105328,105329,105332],{},"这个例子里 ",[22,105326,105327],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[22,105330,105331],{},"2.0"," 表示把小球放到更高的位置。",[210,105334,101779],{"id":101779},[15,105336,105337],{"className":30449,"code":105221,"language":30451,"meta":20,"style":20},[22,105338,105339],{"__ignoreMap":20},[25,105340,105341,105343,105345,105347,105349,105351,105353],{"class":27,"line":28},[25,105342,32018],{"class":240},[25,105344,104947],{"class":31},[25,105346,104950],{"class":244},[25,105348,1412],{"class":35},[25,105350,104955],{"class":244},[25,105352,95757],{"class":35},[25,105354,3849],{"class":244},[99,105356,105357],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[194,105359,105360,105369,105374],{},[106,105361,105362,105365,105366,105368],{},[22,105363,105364],{},"prefix","：一段文字，比如 ",[22,105367,105073],{},"，用来说明现在打印的是哪个阶段。",[106,105370,105371,105373],{},[22,105372,102156],{},"：MuJoCo 模型。",[106,105375,105376,105378],{},[22,105377,33472],{},"：MuJoCo 当前状态。",[99,105380,105381,455,105384,105387],{},[22,105382,105383],{},"prefix: str",[22,105385,105386],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[15,105389,105391],{"className":30449,"code":105390,"language":30451,"meta":20,"style":20},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[22,105392,105393],{"__ignoreMap":20},[25,105394,105395,105397,105399,105401,105403,105405],{"class":27,"line":28},[25,105396,30486],{"class":35},[25,105398,245],{"class":244},[25,105400,104998],{"class":45},[25,105402,105001],{"class":244},[25,105404,536],{"class":35},[25,105406,30568],{"class":244},[99,105408,105409,105412],{},[22,105410,105411],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[15,105414,105416],{"className":30449,"code":105415,"language":30451,"meta":20,"style":20},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[22,105417,105418,105430],{"__ignoreMap":20},[25,105419,105420,105422,105424,105426,105428],{"class":27,"line":28},[25,105421,101705],{"class":244},[25,105423,290],{"class":240},[25,105425,101483],{"class":244},[25,105427,101385],{"class":35},[25,105429,251],{"class":244},[25,105431,105432,105434,105436],{"class":27,"line":39},[25,105433,101729],{"class":244},[25,105435,290],{"class":240},[25,105437,101497],{"class":244},[99,105439,105440],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[15,105442,105444],{"className":30449,"code":105443,"language":30451,"meta":20,"style":20},"print_state(\"initial\", model, data)\n",[22,105445,105446],{"__ignoreMap":20},[25,105447,105448,105451,105453],{"class":27,"line":28},[25,105449,105450],{"class":244},"print_state(",[25,105452,105073],{"class":45},[25,105454,105076],{"class":244},[99,105456,105457,105458,105461],{},"调用刚才定义的 ",[22,105459,105460],{},"print_state"," 函数，打印初始状态。",[15,105463,105464],{"className":30449,"code":105251,"language":30451,"meta":20,"style":20},[22,105465,105466,105482],{"__ignoreMap":20},[25,105467,105468,105470,105472,105474,105476,105478,105480],{"class":27,"line":28},[25,105469,3135],{"class":240},[25,105471,101572],{"class":244},[25,105473,26114],{"class":240},[25,105475,32514],{"class":35},[25,105477,245],{"class":244},[25,105479,899],{"class":35},[25,105481,30857],{"class":244},[25,105483,105484],{"class":27,"line":39},[25,105485,101770],{"class":244},[99,105487,105488],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[15,105490,105491],{"className":30449,"code":104597,"language":30451,"meta":20,"style":20},[22,105492,105493],{"__ignoreMap":20},[25,105494,105495],{"class":27,"line":28},[25,105496,104597],{"class":244},[99,105498,105499,105500,105502,105503,105505],{},"重置 ",[22,105501,33472],{},"。注意它不会重新创建 ",[22,105504,102156],{},"，因为模型结构没有变，只是状态回到初始值。",[15,105507,105508],{"className":30449,"code":104763,"language":30451,"meta":20,"style":20},[22,105509,105510],{"__ignoreMap":20},[25,105511,105512,105514,105516,105518,105520],{"class":27,"line":28},[25,105513,104770],{"class":244},[25,105515,321],{"class":35},[25,105517,4553],{"class":244},[25,105519,290],{"class":240},[25,105521,104779],{"class":35},[99,105523,105524,105525,455,105528,455,105531,105533],{},"这行是“手动改状态”。在 freejoint 中，",[22,105526,105527],{},"qpos[0]",[22,105529,105530],{},"qpos[1]",[22,105532,105327],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[15,105535,105536],{"className":30449,"code":104614,"language":30451,"meta":20,"style":20},[22,105537,105538],{"__ignoreMap":20},[25,105539,105540],{"class":27,"line":28},[25,105541,104614],{"class":244},[99,105543,105544,105545,105547,105548,105550],{},"手动改完 ",[22,105546,104101],{}," 后，调用 ",[22,105549,104321],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[182,105552,102387],{"id":102386},[99,105554,105555],{},"你会看到:",[194,105557,105558,105563,105568,105571],{},[106,105559,105560,105561],{},"初始时间为 ",[22,105562,434],{},[106,105564,105565,105566],{},"50 步后时间约为 ",[22,105567,35400],{},[106,105569,105570],{},"reset 后状态恢复",[106,105572,105573,105574,105577,105578],{},"手动修改 ",[22,105575,105576],{},"data.qpos[2]"," 后，小球高度变为 ",[22,105579,105331],{},[99,105581,105582,105584],{},[22,105583,105327],{}," 在这个例子中表示自由刚体的 z 坐标。",[99,105586,105587],{},"输出里可以重点看三件事：",[194,105589,105590,105598,105603],{},[106,105591,105592,105594,105595,105597],{},[22,105593,2497],{}," 是否随着 ",[22,105596,101286],{}," 增加。",[106,105599,105600,105602],{},[22,105601,104101],{}," 的 z 坐标是否因为下落而变化。",[106,105604,105605,105607,105608,28456],{},[22,105606,104423],{}," 后时间是否回到 ",[22,105609,434],{},[182,105611,102419],{"id":102418},[194,105613,105614,105620,105626,105632,105635,105644],{},[106,105615,105616,105617,28456],{},"修改 timestep 为 ",[22,105618,105619],{},"0.005",[106,105621,105622,105623,28456],{},"重新运行，检查 50 步后时间是否约为 ",[22,105624,105625],{},"0.25",[106,105627,105628,105629,28456],{},"修改重力为 ",[22,105630,105631],{},"0 0 -1.0",[106,105633,105634],{},"观察小球下降速度是否变慢。",[106,105636,102482,105637,102485,105640,105643],{},[22,105638,105639],{},"data.qpos[2] = 2.0",[22,105641,105642],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[106,105645,105646,105647,105650],{},"注释掉 ",[22,105648,105649],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[182,105652,102524],{"id":102523},[210,105654,105656,105657,105659],{"id":105655},"修改-dataqpos-后位置没有更新","修改 ",[22,105658,101141],{}," 后位置没有更新",[99,105661,102533],{},[15,105663,105664],{"className":30449,"code":104614,"language":30451,"meta":20,"style":20},[22,105665,105666],{"__ignoreMap":20},[25,105667,105668],{"class":27,"line":28},[25,105669,104614],{"class":244},[210,105671,105672],{"id":105672},"数组维度看不懂",[99,105674,105675],{},"打印模型维度:",[15,105677,105679],{"className":30449,"code":105678,"language":30451,"meta":20,"style":20},"print(model.nq, model.nv, model.nu)\n",[22,105680,105681],{"__ignoreMap":20},[25,105682,105683,105685],{"class":27,"line":28},[25,105684,30486],{"class":35},[25,105686,105687],{"class":244},"(model.nq, model.nv, model.nu)\n",[380,105689,105690,105698],{},[383,105691,105692],{},[386,105693,105694,105696],{},[389,105695,104645],{"align":23846},[389,105697,100771],{"align":23846},[427,105699,105700,105710,105720],{},[386,105701,105702,105707],{},[432,105703,105704],{"align":23846},[22,105705,105706],{},"nq",[432,105708,105709],{"align":23846},"位置变量数量",[386,105711,105712,105717],{},[432,105713,105714],{"align":23846},[22,105715,105716],{},"nv",[432,105718,105719],{"align":23846},"速度变量数量",[386,105721,105722,105726],{},[432,105723,105724],{"align":23846},[22,105725,102233],{},[432,105727,105728],{"align":23846},"控制输入数量",[210,105730,105732,105733,105735],{"id":105731},"误以为-qpos-一定等于关节数","误以为 ",[22,105734,104101],{}," 一定等于关节数",[99,105737,105738,105739,82601,105741,105743,105744,105746],{},"不是。例如 ",[22,105740,101691],{},[22,105742,104101],{}," 是 7 维，但 ",[22,105745,104431],{}," 是 6 维。",[210,105748,105750,105751,105753],{"id":105749},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[22,105752,104101],{}," 的第几位",[99,105755,105756],{},"初学时可以先打印：",[15,105758,105760],{"className":30449,"code":105759,"language":30451,"meta":20,"style":20},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[22,105761,105762,105772,105782,105794],{"__ignoreMap":20},[25,105763,105764,105766,105768,105770],{"class":27,"line":28},[25,105765,30486],{"class":35},[25,105767,245],{"class":244},[25,105769,101510],{"class":45},[25,105771,101513],{"class":244},[25,105773,105774,105776,105778,105780],{"class":27,"line":39},[25,105775,30486],{"class":35},[25,105777,245],{"class":244},[25,105779,101522],{"class":45},[25,105781,101525],{"class":244},[25,105783,105784,105786,105788,105791],{"class":27,"line":51},[25,105785,30486],{"class":35},[25,105787,245],{"class":244},[25,105789,105790],{"class":45},"\"qpos:\"",[25,105792,105793],{"class":244},", data.qpos)\n",[25,105795,105796,105798,105800,105803],{"class":27,"line":59},[25,105797,30486],{"class":35},[25,105799,245],{"class":244},[25,105801,105802],{"class":45},"\"qvel:\"",[25,105804,105805],{"class":244},", data.qvel)\n",[99,105807,105808],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[210,105810,105811],{"id":105811},"仿真结果每次都一样",[99,105813,105814,105815,105817],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[22,105816,104101],{},"、目标点或控制输入。",[182,105819,102678],{"id":102677},[99,105821,105822,105823,24726],{},"Python 控制 MuJoCo 的核心就是读写 ",[22,105824,33472],{},[194,105826,105827,105835,105840,105845],{},[106,105828,105829,105830,101089,105832,105834],{},"用 ",[22,105831,101141],{},[22,105833,101144],{}," 读取状态。",[106,105836,105829,105837,105839],{},[22,105838,101147],{}," 写入控制。",[106,105841,105829,105842,105844],{},[22,105843,101286],{}," 推进时间。",[106,105846,105847,105848,105850],{},"手动改状态后用 ",[22,105849,104321],{}," 刷新派生量。",[99,105852,105853],{},"理解这一章后，就可以进入关节和 actuator 控制。",[159,105855,105856],{},"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":20,"searchDepth":39,"depth":39,"links":105858},[105859,105860,105861,105868,105872,105873,105874,105884],{"id":100717,"depth":39,"text":100718},{"id":100840,"depth":39,"text":100841},{"id":101115,"depth":39,"text":101116,"children":105862},[105863,105865,105867],{"id":104626,"depth":51,"text":105864},"qpos、qvel、ctrl 是什么",{"id":104704,"depth":51,"text":105866},"mj_step 和 mj_forward 的区别",{"id":104793,"depth":51,"text":104794},{"id":101323,"depth":39,"text":101324,"children":105869},[105870,105871],{"id":101643,"depth":51,"text":101643},{"id":101779,"depth":51,"text":101779},{"id":102386,"depth":39,"text":102387},{"id":102418,"depth":39,"text":102419},{"id":102523,"depth":39,"text":102524,"children":105875},[105876,105878,105879,105881,105883],{"id":105655,"depth":51,"text":105877},"修改 data.qpos 后位置没有更新",{"id":105672,"depth":51,"text":105672},{"id":105731,"depth":51,"text":105880},"误以为 qpos 一定等于关节数",{"id":105749,"depth":51,"text":105882},"不知道某个元素在 qpos 的第几位",{"id":105811,"depth":51,"text":105811},{"id":102677,"depth":39,"text":102678},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104389,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105891,"title":105892,"body":105893,"description":20,"extension":165,"meta":107583,"navigation":167,"path":107584,"seo":107585,"stem":107586,"__hash__":107587},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105894,"toc":107559},[105895,105898,105900,105903,105905,105930,105933,105952,105955,105957,105959,105983,105985,105999,106001,106042,106044,106068,106070,106073,106107,106109,106122,106125,106193,106202,106206,106209,106243,106249,106252,106256,106295,106298,106318,106322,106365,106367,106396,106399,106405,106408,106410,106804,106806,106818,106820,106831,106833,106836,106865,106873,106876,106911,106914,106916,106924,106927,106929,106940,106950,106970,106973,107009,107021,107069,107088,107130,107143,107171,107176,107197,107207,107225,107228,107262,107265,107285,107288,107307,107313,107315,107318,107324,107330,107340,107343,107349,107358,107360,107406,107408,107414,107420,107423,107426,107446,107449,107455,107461,107463,107486,107489,107492,107501,107504,107542,107544,107547,107553,107556],[10,105896,105892],{"id":105897},"_4关节actuator-与力控制",[182,105899,100718],{"id":100717},[99,105901,105902],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[99,105904,104402],{},[194,105906,105907,105913,105918,105922,105927],{},[106,105908,105909,105912],{},[22,105910,105911],{},"hinge"," 关节",[106,105914,105915],{},[22,105916,105917],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[106,105919,105920],{},[22,105921,101147],{},[106,105923,105924],{},[22,105925,105926],{},"ctrlrange",[106,105928,105929],{},"读取关节角和角速度",[99,105931,105932],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[15,105934,105936],{"className":30449,"code":105935,"language":30451,"meta":20,"style":20},"data.ctrl[0] = ...\n",[22,105937,105938],{"__ignoreMap":20},[25,105939,105940,105943,105945,105947,105949],{"class":27,"line":28},[25,105941,105942],{"class":244},"data.ctrl[",[25,105944,434],{"class":35},[25,105946,4553],{"class":244},[25,105948,290],{"class":240},[25,105950,105951],{"class":35}," ...\n",[99,105953,105954],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[182,105956,100841],{"id":100840},[99,105958,100844],{},[15,105960,105961],{"className":17,"code":104459,"language":19,"meta":20,"style":20},[22,105962,105963],{"__ignoreMap":20},[25,105964,105965,105967,105969,105971,105973,105975,105977,105979,105981],{"class":27,"line":28},[25,105966,24684],{"class":31},[25,105968,26386],{"class":45},[25,105970,23942],{"class":45},[25,105972,26471],{"class":35},[25,105974,104474],{"class":45},[25,105976,100869],{"class":45},[25,105978,102572],{"class":45},[25,105980,100885],{"class":45},[25,105982,104483],{"class":45},[99,105984,102890],{},[15,105986,105987],{"className":17,"code":100990,"language":19,"meta":20,"style":20},[22,105988,105989],{"__ignoreMap":20},[25,105990,105991,105993,105995,105997],{"class":27,"line":28},[25,105992,23939],{"class":31},[25,105994,23942],{"class":45},[25,105996,101001],{"class":45},[25,105998,101004],{"class":45},[99,106000,102907],{},[15,106002,106004],{"className":17,"code":106003,"language":19,"meta":20,"style":20},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[22,106005,106006,106023,106032],{"__ignoreMap":20},[25,106007,106008,106010,106012,106014,106017,106019,106021],{"class":27,"line":28},[25,106009,30401],{"class":31},[25,106011,29247],{"class":45},[25,106013,25222],{"class":35},[25,106015,106016],{"class":45}," mujoco-control",[25,106018,101046],{"class":45},[25,106020,101049],{"class":35},[25,106022,101052],{"class":35},[25,106024,106025,106027,106029],{"class":27,"line":39},[25,106026,30401],{"class":31},[25,106028,101059],{"class":45},[25,106030,106031],{"class":45}," mujoco-control\n",[25,106033,106034,106036,106038,106040],{"class":27,"line":51},[25,106035,23939],{"class":31},[25,106037,23942],{"class":45},[25,106039,101001],{"class":45},[25,106041,101004],{"class":45},[99,106043,101075],{},[194,106045,106046,106052,106059,106065],{},[106,106047,106048,106051],{},[22,106049,106050],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[106,106053,106054,106056,106057,28456],{},[22,106055,101147],{}," 长度等于 ",[22,106058,102229],{},[106,106060,82293,106061,106064],{},[22,106062,106063],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[106,106066,106067],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[182,106069,101116],{"id":101115},[99,106071,106072],{},"关节决定 body 如何运动:",[15,106074,106076],{"className":53138,"code":106075,"language":53140,"meta":20,"style":20},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[22,106077,106078],{"__ignoreMap":20},[25,106079,106080,106082,106084,106086,106088,106091,106093,106095,106097,106100,106102,106105],{"class":27,"line":28},[25,106081,1153],{"class":244},[25,106083,103027],{"class":51371},[25,106085,15030],{"class":31},[25,106087,290],{"class":244},[25,106089,106090],{"class":45},"\"hinge\"",[25,106092,53895],{"class":31},[25,106094,290],{"class":244},[25,106096,106090],{"class":45},[25,106098,106099],{"class":31}," axis",[25,106101,290],{"class":244},[25,106103,106104],{"class":45},"\"0 1 0\"",[25,106106,101215],{"class":244},[99,106108,103123],{},[194,106110,106111,106116,106119],{},[106,106112,106113,106114],{},"名字是 ",[22,106115,105911],{},[106,106117,106118],{},"类型是旋转关节",[106,106120,106121],{},"绕 y 轴旋转",[99,106123,106124],{},"actuator 决定如何施加控制:",[15,106126,106128],{"className":53138,"code":106127,"language":53140,"meta":20,"style":20},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[22,106129,106130,106139,106185],{"__ignoreMap":20},[25,106131,106132,106134,106137],{"class":27,"line":28},[25,106133,1153],{"class":244},[25,106135,106136],{"class":51371},"actuator",[25,106138,51378],{"class":244},[25,106140,106141,106143,106146,106148,106150,106153,106156,106158,106160,106163,106165,106167,106170,106172,106175,106178,106180,106183],{"class":27,"line":39},[25,106142,52215],{"class":244},[25,106144,106145],{"class":51371},"motor",[25,106147,15030],{"class":31},[25,106149,290],{"class":244},[25,106151,106152],{"class":45},"\"hinge_motor\"",[25,106154,106155],{"class":31}," joint",[25,106157,290],{"class":244},[25,106159,106090],{"class":45},[25,106161,106162],{"class":31}," gear",[25,106164,290],{"class":244},[25,106166,3788],{"class":45},[25,106168,106169],{"class":31}," ctrlrange",[25,106171,290],{"class":244},[25,106173,106174],{"class":45},"\"-2 2\"",[25,106176,106177],{"class":31}," ctrllimited",[25,106179,290],{"class":244},[25,106181,106182],{"class":45},"\"true\"",[25,106184,101215],{"class":244},[25,106186,106187,106189,106191],{"class":27,"line":51},[25,106188,51856],{"class":244},[25,106190,106136],{"class":51371},[25,106192,51378],{"class":244},[99,106194,106195,106198,106199,28456],{},[22,106196,106197],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[22,106200,106201],{},"[-2, 2]",[210,106203,106205],{"id":106204},"joint-和-actuator-的关系","joint 和 actuator 的关系",[99,106207,106208],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[380,106210,106211,106221],{},[383,106212,106213],{},[386,106214,106215,106217,106219],{},[389,106216,25824],{"align":23846},[389,106218,102767],{"align":23846},[389,106220,100805],{"align":23846},[427,106222,106223,106233],{},[386,106224,106225,106227,106230],{},[432,106226,103027],{"align":23846},[432,106228,106229],{"align":23846},"定义能怎么动",[432,106231,106232],{"align":23846},"门轴允许门旋转",[386,106234,106235,106237,106240],{},[432,106236,106136],{"align":23846},[432,106238,106239],{"align":23846},"定义怎么施力或控制",[432,106241,106242],{"align":23846},"人推门、马达带动门",[99,106244,106245,106246,106248],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[22,106247,101147],{}," 主动控制它。",[99,106250,106251],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[210,106253,106255],{"id":106254},"hinge-joint","hinge joint",[15,106257,106259],{"className":53138,"code":106258,"language":53140,"meta":20,"style":20},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[22,106260,106261],{"__ignoreMap":20},[25,106262,106263,106265,106267,106269,106271,106273,106275,106277,106279,106281,106283,106285,106288,106290,106293],{"class":27,"line":28},[25,106264,1153],{"class":244},[25,106266,103027],{"class":51371},[25,106268,15030],{"class":31},[25,106270,290],{"class":244},[25,106272,106090],{"class":45},[25,106274,53895],{"class":31},[25,106276,290],{"class":244},[25,106278,106090],{"class":45},[25,106280,106099],{"class":31},[25,106282,290],{"class":244},[25,106284,106104],{"class":45},[25,106286,106287],{"class":31}," damping",[25,106289,290],{"class":244},[25,106291,106292],{"class":45},"\"0.1\"",[25,106294,101215],{"class":244},[99,106296,106297],{},"含义：",[194,106299,106300,106306,106312],{},[106,106301,106302,106305],{},[22,106303,106304],{},"type=\"hinge\"","：只能绕一个轴旋转。",[106,106307,106308,106311],{},[22,106309,106310],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[106,106313,106314,106317],{},[22,106315,106316],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[210,106319,106321],{"id":106320},"motor-actuator","motor actuator",[15,106323,106325],{"className":53138,"code":106324,"language":53140,"meta":20,"style":20},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[22,106326,106327],{"__ignoreMap":20},[25,106328,106329,106331,106333,106335,106337,106339,106341,106343,106345,106347,106349,106351,106353,106355,106357,106359,106361,106363],{"class":27,"line":28},[25,106330,1153],{"class":244},[25,106332,106145],{"class":51371},[25,106334,15030],{"class":31},[25,106336,290],{"class":244},[25,106338,106152],{"class":45},[25,106340,106155],{"class":31},[25,106342,290],{"class":244},[25,106344,106090],{"class":45},[25,106346,106162],{"class":31},[25,106348,290],{"class":244},[25,106350,3788],{"class":45},[25,106352,106169],{"class":31},[25,106354,290],{"class":244},[25,106356,106174],{"class":45},[25,106358,106177],{"class":31},[25,106360,290],{"class":244},[25,106362,106182],{"class":45},[25,106364,101215],{"class":244},[99,106366,106297],{},[194,106368,106369,106378,106384,106390],{},[106,106370,106371,106374,106375,106377],{},[22,106372,106373],{},"joint=\"hinge\"","：这个电机作用在名为 ",[22,106376,105911],{}," 的关节上。",[106,106379,106380,106383],{},[22,106381,106382],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[106,106385,106386,106389],{},[22,106387,106388],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[106,106391,106392,106395],{},[22,106393,106394],{},"ctrllimited=\"true\"","：启用控制范围限制。",[99,106397,106398],{},"简单理解：",[15,106400,106403],{"className":106401,"code":106402,"language":5297,"meta":20},[5295],"实际施加效果 ≈ data.ctrl[0] * gear\n",[22,106404,106402],{"__ignoreMap":20},[99,106406,106407],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[182,106409,101324],{"id":101323},[15,106411,106413],{"className":30449,"code":106412,"language":30451,"meta":20,"style":20},"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",[22,106414,106415,106422,106426,106432,106442,106446,106450,106458,106463,106468,106472,106476,106481,106486,106490,106495,106500,106505,106510,106514,106518,106522,106527,106532,106537,106541,106545,106549,106553,106565,106577,106585,106589,106599,106609,106619,106623,106636,106649,106653,106670,106684,106719,106723,106727,106738,106753,106768,106780,106784,106788,106800],{"__ignoreMap":20},[25,106416,106417,106419],{"class":27,"line":28},[25,106418,30463],{"class":240},[25,106420,106421],{"class":244}," math\n",[25,106423,106424],{"class":27,"line":39},[25,106425,2510],{"emptyLinePlaceholder":167},[25,106427,106428,106430],{"class":27,"line":51},[25,106429,30463],{"class":240},[25,106431,101372],{"class":244},[25,106433,106434,106436,106438,106440],{"class":27,"line":59},[25,106435,30463],{"class":240},[25,106437,31451],{"class":244},[25,106439,31454],{"class":240},[25,106441,31457],{"class":244},[25,106443,106444],{"class":27,"line":67},[25,106445,2510],{"emptyLinePlaceholder":167},[25,106447,106448],{"class":27,"line":75},[25,106449,2510],{"emptyLinePlaceholder":167},[25,106451,106452,106454,106456],{"class":27,"line":83},[25,106453,101385],{"class":35},[25,106455,13674],{"class":240},[25,106457,101390],{"class":45},[25,106459,106460],{"class":27,"line":91},[25,106461,106462],{"class":45},"\u003Cmujoco model=\"one_link_motor\">\n",[25,106464,106465],{"class":27,"line":1429},[25,106466,106467],{"class":45},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[25,106469,106470],{"class":27,"line":1441},[25,106471,2510],{"emptyLinePlaceholder":167},[25,106473,106474],{"class":27,"line":1723},[25,106475,101409],{"class":45},[25,106477,106478],{"class":27,"line":1728},[25,106479,106480],{"class":45},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[25,106482,106483],{"class":27,"line":1734},[25,106484,106485],{"class":45},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[25,106487,106488],{"class":27,"line":1739},[25,106489,2510],{"emptyLinePlaceholder":167},[25,106491,106492],{"class":27,"line":1753},[25,106493,106494],{"class":45},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[25,106496,106497],{"class":27,"line":1758},[25,106498,106499],{"class":45},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[25,106501,106502],{"class":27,"line":1764},[25,106503,106504],{"class":45},"        \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",[25,106506,106507],{"class":27,"line":1785},[25,106508,106509],{"class":45},"      \u003C\u002Fbody>\n",[25,106511,106512],{"class":27,"line":1790},[25,106513,101438],{"class":45},[25,106515,106516],{"class":27,"line":1804},[25,106517,101443],{"class":45},[25,106519,106520],{"class":27,"line":1809},[25,106521,2510],{"emptyLinePlaceholder":167},[25,106523,106524],{"class":27,"line":1838},[25,106525,106526],{"class":45},"  \u003Cactuator>\n",[25,106528,106529],{"class":27,"line":1843},[25,106530,106531],{"class":45},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[25,106533,106534],{"class":27,"line":1860},[25,106535,106536],{"class":45},"  \u003C\u002Factuator>\n",[25,106538,106539],{"class":27,"line":1865},[25,106540,101448],{"class":45},[25,106542,106543],{"class":27,"line":1870},[25,106544,95769],{"class":45},[25,106546,106547],{"class":27,"line":1875},[25,106548,2510],{"emptyLinePlaceholder":167},[25,106550,106551],{"class":27,"line":1889},[25,106552,2510],{"emptyLinePlaceholder":167},[25,106554,106555,106557,106559,106561,106563],{"class":27,"line":1894},[25,106556,32018],{"class":240},[25,106558,2083],{"class":31},[25,106560,101469],{"class":244},[25,106562,95757],{"class":35},[25,106564,3849],{"class":244},[25,106566,106567,106569,106571,106573,106575],{"class":27,"line":2687},[25,106568,101478],{"class":244},[25,106570,290],{"class":240},[25,106572,101483],{"class":244},[25,106574,101385],{"class":35},[25,106576,251],{"class":244},[25,106578,106579,106581,106583],{"class":27,"line":2701},[25,106580,101492],{"class":244},[25,106582,290],{"class":240},[25,106584,101497],{"class":244},[25,106586,106587],{"class":27,"line":2709},[25,106588,2510],{"emptyLinePlaceholder":167},[25,106590,106591,106593,106595,106597],{"class":27,"line":2714},[25,106592,31370],{"class":35},[25,106594,245],{"class":244},[25,106596,101510],{"class":45},[25,106598,101513],{"class":244},[25,106600,106601,106603,106605,106607],{"class":27,"line":2720},[25,106602,31370],{"class":35},[25,106604,245],{"class":244},[25,106606,101522],{"class":45},[25,106608,101525],{"class":244},[25,106610,106611,106613,106615,106617],{"class":27,"line":2726},[25,106612,31370],{"class":35},[25,106614,245],{"class":244},[25,106616,101534],{"class":45},[25,106618,101537],{"class":244},[25,106620,106621],{"class":27,"line":2731},[25,106622,2510],{"emptyLinePlaceholder":167},[25,106624,106625,106627,106630,106632,106634],{"class":27,"line":8058},[25,106626,3211],{"class":240},[25,106628,106629],{"class":244}," model.nu ",[25,106631,21058],{"class":240},[25,106633,25225],{"class":35},[25,106635,3849],{"class":244},[25,106637,106638,106640,106642,106644,106647],{"class":27,"line":8082},[25,106639,103503],{"class":240},[25,106641,103506],{"class":35},[25,106643,245],{"class":244},[25,106645,106646],{"class":45},"\"expected exactly one actuator\"",[25,106648,251],{"class":244},[25,106650,106651],{"class":27,"line":8087},[25,106652,2510],{"emptyLinePlaceholder":167},[25,106654,106655,106657,106659,106661,106663,106665,106668],{"class":27,"line":8093},[25,106656,3311],{"class":240},[25,106658,31687],{"class":244},[25,106660,26114],{"class":240},[25,106662,32514],{"class":35},[25,106664,245],{"class":244},[25,106666,106667],{"class":35},"2000",[25,106669,30857],{"class":244},[25,106671,106672,106675,106677,106679,106681],{"class":27,"line":8120},[25,106673,106674],{"class":244},"        t ",[25,106676,290],{"class":240},[25,106678,31687],{"class":244},[25,106680,698],{"class":240},[25,106682,106683],{"class":244}," model.opt.timestep\n",[25,106685,106686,106689,106691,106693,106695,106698,106700,106703,106705,106707,106710,106712,106714,106716],{"class":27,"line":8125},[25,106687,106688],{"class":244},"        data.ctrl[",[25,106690,434],{"class":35},[25,106692,4553],{"class":244},[25,106694,290],{"class":240},[25,106696,106697],{"class":35}," 1.5",[25,106699,6628],{"class":240},[25,106701,106702],{"class":244}," math.sin(",[25,106704,105331],{"class":35},[25,106706,6628],{"class":240},[25,106708,106709],{"class":244}," math.pi ",[25,106711,698],{"class":240},[25,106713,61938],{"class":35},[25,106715,6628],{"class":240},[25,106717,106718],{"class":244}," t)\n",[25,106720,106721],{"class":27,"line":8131},[25,106722,101587],{"class":244},[25,106724,106725],{"class":27,"line":8143},[25,106726,2510],{"emptyLinePlaceholder":167},[25,106728,106729,106731,106733,106736],{"class":27,"line":8155},[25,106730,31370],{"class":35},[25,106732,245],{"class":244},[25,106734,106735],{"class":45},"\"time:\"",[25,106737,101549],{"class":244},[25,106739,106740,106742,106744,106747,106749,106751],{"class":27,"line":8167},[25,106741,31370],{"class":35},[25,106743,245],{"class":244},[25,106745,106746],{"class":45},"\"joint qpos:\"",[25,106748,105001],{"class":244},[25,106750,536],{"class":35},[25,106752,30568],{"class":244},[25,106754,106755,106757,106759,106762,106764,106766],{"class":27,"line":9826},[25,106756,31370],{"class":35},[25,106758,245],{"class":244},[25,106760,106761],{"class":45},"\"joint qvel:\"",[25,106763,105017],{"class":244},[25,106765,536],{"class":35},[25,106767,30568],{"class":244},[25,106769,106770,106772,106774,106777],{"class":27,"line":9851},[25,106771,31370],{"class":35},[25,106773,245],{"class":244},[25,106775,106776],{"class":45},"\"last ctrl:\"",[25,106778,106779],{"class":244},", data.ctrl.copy())\n",[25,106781,106782],{"class":27,"line":9874},[25,106783,2510],{"emptyLinePlaceholder":167},[25,106785,106786],{"class":27,"line":9898},[25,106787,2510],{"emptyLinePlaceholder":167},[25,106789,106790,106792,106794,106796,106798],{"class":27,"line":9903},[25,106791,1642],{"class":240},[25,106793,31291],{"class":35},[25,106795,101630],{"class":240},[25,106797,101633],{"class":45},[25,106799,3849],{"class":244},[25,106801,106802],{"class":27,"line":9908},[25,106803,101640],{"class":244},[99,106805,103641],{},[15,106807,106809],{"className":17,"code":106808,"language":19,"meta":20,"style":20},"touch ch4_joint_motor.py\n",[22,106810,106811],{"__ignoreMap":20},[25,106812,106813,106815],{"class":27,"line":28},[25,106814,101354],{"class":31},[25,106816,106817],{"class":45}," ch4_joint_motor.py\n",[99,106819,102372],{},[15,106821,106823],{"className":17,"code":106822,"language":19,"meta":20,"style":20},"python ch4_joint_motor.py\n",[22,106824,106825],{"__ignoreMap":20},[25,106826,106827,106829],{"class":27,"line":28},[25,106828,30451],{"class":31},[25,106830,106817],{"class":45},[210,106832,101643],{"id":101643},[99,106834,106835],{},"检查 actuator 数量：",[15,106837,106839],{"className":30449,"code":106838,"language":30451,"meta":20,"style":20},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[22,106840,106841,106853],{"__ignoreMap":20},[25,106842,106843,106845,106847,106849,106851],{"class":27,"line":28},[25,106844,1642],{"class":240},[25,106846,106629],{"class":244},[25,106848,21058],{"class":240},[25,106850,25225],{"class":35},[25,106852,3849],{"class":244},[25,106854,106855,106857,106859,106861,106863],{"class":27,"line":39},[25,106856,103966],{"class":240},[25,106858,103506],{"class":35},[25,106860,245],{"class":244},[25,106862,106646],{"class":45},[25,106864,251],{"class":244},[99,106866,106867,106869,106870,106872],{},[22,106868,102229],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[22,106871,101147],{}," 长度应该是 1。",[99,106874,106875],{},"产生正弦控制信号：",[15,106877,106879],{"className":30449,"code":106878,"language":30451,"meta":20,"style":20},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[22,106880,106881],{"__ignoreMap":20},[25,106882,106883,106885,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909],{"class":27,"line":28},[25,106884,105942],{"class":244},[25,106886,434],{"class":35},[25,106888,4553],{"class":244},[25,106890,290],{"class":240},[25,106892,106697],{"class":35},[25,106894,6628],{"class":240},[25,106896,106702],{"class":244},[25,106898,105331],{"class":35},[25,106900,6628],{"class":240},[25,106902,106709],{"class":244},[25,106904,698],{"class":240},[25,106906,61938],{"class":35},[25,106908,6628],{"class":240},[25,106910,106718],{"class":244},[99,106912,106913],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[99,106915,101744],{},[15,106917,106918],{"className":30449,"code":104576,"language":30451,"meta":20,"style":20},[22,106919,106920],{"__ignoreMap":20},[25,106921,106922],{"class":27,"line":28},[25,106923,104576],{"class":244},[99,106925,106926],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[210,106928,101779],{"id":101779},[15,106930,106932],{"className":30449,"code":106931,"language":30451,"meta":20,"style":20},"import math\n",[22,106933,106934],{"__ignoreMap":20},[25,106935,106936,106938],{"class":27,"line":28},[25,106937,30463],{"class":240},[25,106939,106421],{"class":244},[99,106941,106942,106943,101089,106946,106949],{},"导入 Python 标准库里的数学模块。后面要用 ",[22,106944,106945],{},"math.sin",[22,106947,106948],{},"math.pi"," 生成周期变化的控制信号。",[15,106951,106952],{"className":30449,"code":103757,"language":30451,"meta":20,"style":20},[22,106953,106954,106960],{"__ignoreMap":20},[25,106955,106956,106958],{"class":27,"line":28},[25,106957,30463],{"class":240},[25,106959,101372],{"class":244},[25,106961,106962,106964,106966,106968],{"class":27,"line":39},[25,106963,30463],{"class":240},[25,106965,31451],{"class":244},[25,106967,31454],{"class":240},[25,106969,31457],{"class":244},[99,106971,106972],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[15,106974,106975],{"className":53138,"code":106258,"language":53140,"meta":20,"style":20},[22,106976,106977],{"__ignoreMap":20},[25,106978,106979,106981,106983,106985,106987,106989,106991,106993,106995,106997,106999,107001,107003,107005,107007],{"class":27,"line":28},[25,106980,1153],{"class":244},[25,106982,103027],{"class":51371},[25,106984,15030],{"class":31},[25,106986,290],{"class":244},[25,106988,106090],{"class":45},[25,106990,53895],{"class":31},[25,106992,290],{"class":244},[25,106994,106090],{"class":45},[25,106996,106099],{"class":31},[25,106998,290],{"class":244},[25,107000,106104],{"class":45},[25,107002,106287],{"class":31},[25,107004,290],{"class":244},[25,107006,106292],{"class":45},[25,107008,101215],{"class":244},[99,107010,107011,107012,107014,107015,107017,107018,107020],{},"这行定义关节。",[22,107013,105911],{}," 表示旋转关节。",[22,107016,106310],{}," 表示绕 y 轴旋转。",[22,107019,106316],{}," 表示有一点阻尼，运动不会完全无损耗。",[15,107022,107024],{"className":53138,"code":107023,"language":53140,"meta":20,"style":20},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[22,107025,107026],{"__ignoreMap":20},[25,107027,107028,107030,107032,107034,107036,107039,107041,107043,107046,107049,107051,107054,107056,107058,107060,107062,107064,107067],{"class":27,"line":28},[25,107029,1153],{"class":244},[25,107031,101191],{"class":51371},[25,107033,15030],{"class":31},[25,107035,290],{"class":244},[25,107037,107038],{"class":45},"\"link_geom\"",[25,107040,53895],{"class":31},[25,107042,290],{"class":244},[25,107044,107045],{"class":45},"\"capsule\"",[25,107047,107048],{"class":31}," fromto",[25,107050,290],{"class":244},[25,107052,107053],{"class":45},"\"0 0 0 0 0 0.5\"",[25,107055,101207],{"class":31},[25,107057,290],{"class":244},[25,107059,103849],{"class":45},[25,107061,102072],{"class":31},[25,107063,290],{"class":244},[25,107065,107066],{"class":45},"\"0.5\"",[25,107068,101215],{"class":244},[99,107070,107071,107072,107074,107075,107077,107078,107081,107082,28456,107085,107087],{},"这行定义摆杆的形状。",[22,107073,103236],{}," 是胶囊体，适合表示杆子。",[22,107076,103247],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[22,107079,107080],{},"(0,0,0)"," 延伸到 ",[22,107083,107084],{},"(0,0,0.5)",[22,107086,103241],{}," 是半径。",[15,107089,107090],{"className":53138,"code":106324,"language":53140,"meta":20,"style":20},[22,107091,107092],{"__ignoreMap":20},[25,107093,107094,107096,107098,107100,107102,107104,107106,107108,107110,107112,107114,107116,107118,107120,107122,107124,107126,107128],{"class":27,"line":28},[25,107095,1153],{"class":244},[25,107097,106145],{"class":51371},[25,107099,15030],{"class":31},[25,107101,290],{"class":244},[25,107103,106152],{"class":45},[25,107105,106155],{"class":31},[25,107107,290],{"class":244},[25,107109,106090],{"class":45},[25,107111,106162],{"class":31},[25,107113,290],{"class":244},[25,107115,3788],{"class":45},[25,107117,106169],{"class":31},[25,107119,290],{"class":244},[25,107121,106174],{"class":45},[25,107123,106177],{"class":31},[25,107125,290],{"class":244},[25,107127,106182],{"class":45},[25,107129,101215],{"class":244},[99,107131,107132,107133,107135,107136,107139,107140,107142],{},"这行定义电机。它作用在 ",[22,107134,105911],{}," 关节上。",[22,107137,107138],{},"gear"," 可以理解成放大倍数。",[22,107141,105926],{}," 限制控制输入范围。",[15,107144,107145],{"className":30449,"code":106838,"language":30451,"meta":20,"style":20},[22,107146,107147,107159],{"__ignoreMap":20},[25,107148,107149,107151,107153,107155,107157],{"class":27,"line":28},[25,107150,1642],{"class":240},[25,107152,106629],{"class":244},[25,107154,21058],{"class":240},[25,107156,25225],{"class":35},[25,107158,3849],{"class":244},[25,107160,107161,107163,107165,107167,107169],{"class":27,"line":39},[25,107162,103966],{"class":240},[25,107164,103506],{"class":35},[25,107166,245],{"class":244},[25,107168,106646],{"class":45},[25,107170,251],{"class":244},[99,107172,107173,107175],{},[22,107174,102229],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[15,107177,107179],{"className":30449,"code":107178,"language":30451,"meta":20,"style":20},"for step in range(2000):\n",[22,107180,107181],{"__ignoreMap":20},[25,107182,107183,107185,107187,107189,107191,107193,107195],{"class":27,"line":28},[25,107184,3135],{"class":240},[25,107186,31687],{"class":244},[25,107188,26114],{"class":240},[25,107190,32514],{"class":35},[25,107192,245],{"class":244},[25,107194,106667],{"class":35},[25,107196,30857],{"class":244},[99,107198,107199,107200,107202,107203,107206],{},"循环 2000 步。这里没有用 ",[22,107201,1235],{},"，而是用 ",[22,107204,107205],{},"step","，因为后面要用当前步数计算时间。",[15,107208,107210],{"className":30449,"code":107209,"language":30451,"meta":20,"style":20},"t = step * model.opt.timestep\n",[22,107211,107212],{"__ignoreMap":20},[25,107213,107214,107217,107219,107221,107223],{"class":27,"line":28},[25,107215,107216],{"class":244},"t ",[25,107218,290],{"class":240},[25,107220,31687],{"class":244},[25,107222,698],{"class":240},[25,107224,106683],{"class":244},[99,107226,107227],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[15,107229,107230],{"className":30449,"code":106878,"language":30451,"meta":20,"style":20},[22,107231,107232],{"__ignoreMap":20},[25,107233,107234,107236,107238,107240,107242,107244,107246,107248,107250,107252,107254,107256,107258,107260],{"class":27,"line":28},[25,107235,105942],{"class":244},[25,107237,434],{"class":35},[25,107239,4553],{"class":244},[25,107241,290],{"class":240},[25,107243,106697],{"class":35},[25,107245,6628],{"class":240},[25,107247,106702],{"class":244},[25,107249,105331],{"class":35},[25,107251,6628],{"class":240},[25,107253,106709],{"class":244},[25,107255,698],{"class":240},[25,107257,61938],{"class":35},[25,107259,6628],{"class":240},[25,107261,106718],{"class":244},[99,107263,107264],{},"这行给电机输入一个正弦波。拆开看：",[194,107266,107267,107273,107279],{},[106,107268,107269,107272],{},[22,107270,107271],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[106,107274,107275,107278],{},[22,107276,107277],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[106,107280,107281,107284],{},[22,107282,107283],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[99,107286,107287],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[15,107289,107291],{"className":30449,"code":107290,"language":30451,"meta":20,"style":20},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[22,107292,107293],{"__ignoreMap":20},[25,107294,107295,107297,107299,107301,107303,107305],{"class":27,"line":28},[25,107296,30486],{"class":35},[25,107298,245],{"class":244},[25,107300,106746],{"class":45},[25,107302,105001],{"class":244},[25,107304,536],{"class":35},[25,107306,30568],{"class":244},[99,107308,107309,107310,107312],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[22,107311,101141],{}," 只有一个数。",[182,107314,102387],{"id":102386},[99,107316,107317],{},"输出类似:",[15,107319,107322],{"className":107320,"code":107321,"language":5297,"meta":20},[5295],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[22,107323,107321],{"__ignoreMap":20},[99,107325,107326,107327,107329],{},"这里 ",[22,107328,106197],{}," 是电机输入。",[99,107331,107332,107335,107336,107339],{},[22,107333,107334],{},"joint qpos"," 是关节角度，单位通常是弧度。",[22,107337,107338],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[99,107341,107342],{},"角度单位提示：",[15,107344,107347],{"className":107345,"code":107346,"language":5297,"meta":20},[5295],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[22,107348,107346],{"__ignoreMap":20},[99,107350,107351,107352,107354,107355,107357],{},"如果你看到 ",[22,107353,104101],{}," 是 ",[22,107356,35400],{},"，大约就是 28.6 度。",[182,107359,102419],{"id":102418},[194,107361,107362,107369,107372,107379,107382,107390,107398],{},[106,107363,102482,107364,102485,107366,28456],{},[22,107365,106382],{},[22,107367,107368],{},"gear=\"5\"",[106,107370,107371],{},"重新运行，观察关节运动是否更剧烈。",[106,107373,102482,107374,102485,107376,28456],{},[22,107375,105926],{},[22,107377,107378],{},"-0.2 0.2",[106,107380,107381],{},"重新运行，观察控制能力是否变弱。",[106,107383,107384,107385,107387,107388,28456],{},"去掉 actuator，确认 ",[22,107386,102229],{}," 变成 ",[22,107389,434],{},[106,107391,102482,107392,102485,107394,107397],{},[22,107393,106316],{},[22,107395,107396],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[106,107399,102482,107400,102485,107402,107405],{},[22,107401,106310],{},[22,107403,107404],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[182,107407,102524],{"id":102523},[210,107409,107411],{"id":107410},"indexerror-index-0-is-out-of-bounds",[22,107412,107413],{},"IndexError: index 0 is out of bounds",[99,107415,107416,107417,107419],{},"原因是 ",[22,107418,106063],{},"，没有 actuator。",[210,107421,107422],{"id":107422},"关节几乎不动",[99,107424,107425],{},"可能原因:",[194,107427,107428,107433,107437,107443],{},[106,107429,107430,107432],{},[22,107431,107138],{}," 太小",[106,107434,107435,107432],{},[22,107436,105926],{},[106,107438,107439,107442],{},[22,107440,107441],{},"damping"," 太大",[106,107444,107445],{},"重力方向导致运动不明显",[210,107447,107448],{"id":107448},"模型编译失败",[99,107450,107451,107452,107454],{},"检查 actuator 引用的 ",[22,107453,106373],{}," 是否存在，joint 名称是否拼写一致。",[210,107456,107458,107460],{"id":107457},"datactrl0-写了但没有效果",[22,107459,106197],{}," 写了但没有效果",[99,107462,102646],{},[194,107464,107465,107470,107473,107478,107483],{},[106,107466,107467,107469],{},[22,107468,102229],{}," 是否大于 0。",[106,107471,107472],{},"motor 是否引用了正确 joint。",[106,107474,107475,107477],{},[22,107476,107138],{}," 是否太小。",[106,107479,107480,107482],{},[22,107481,105926],{}," 是否把输入限制得太小。",[106,107484,107485],{},"body 是否真的有可动 joint。",[210,107487,107488],{"id":107488},"控制输入超过范围会怎样",[99,107490,107491],{},"如果设置了：",[15,107493,107495],{"className":53138,"code":107494,"language":53140,"meta":20,"style":20},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[22,107496,107497],{"__ignoreMap":20},[25,107498,107499],{"class":27,"line":28},[25,107500,107494],{"class":244},[99,107502,107503],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[15,107505,107507],{"className":30449,"code":107506,"language":30451,"meta":20,"style":20},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[22,107508,107509,107529],{"__ignoreMap":20},[25,107510,107511,107514,107516,107519,107521,107523,107525,107527],{"class":27,"line":28},[25,107512,107513],{"class":244},"action ",[25,107515,290],{"class":240},[25,107517,107518],{"class":244}," np.clip(action, ",[25,107520,775],{"class":240},[25,107522,105331],{"class":35},[25,107524,12545],{"class":244},[25,107526,105331],{"class":35},[25,107528,251],{"class":244},[25,107530,107531,107533,107535,107537,107539],{"class":27,"line":39},[25,107532,105942],{"class":244},[25,107534,434],{"class":35},[25,107536,4553],{"class":244},[25,107538,290],{"class":240},[25,107540,107541],{"class":244}," action\n",[182,107543,102678],{"id":102677},[99,107545,107546],{},"这一章建立了控制任务的基本形式：",[15,107548,107551],{"className":107549,"code":107550,"language":5297,"meta":20},[5295],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[22,107552,107550],{"__ignoreMap":20},[99,107554,107555],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[159,107557,107558],{},"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":20,"searchDepth":39,"depth":39,"links":107560},[107561,107562,107563,107568,107572,107573,107574,107582],{"id":100717,"depth":39,"text":100718},{"id":100840,"depth":39,"text":100841},{"id":101115,"depth":39,"text":101116,"children":107564},[107565,107566,107567],{"id":106204,"depth":51,"text":106205},{"id":106254,"depth":51,"text":106255},{"id":106320,"depth":51,"text":106321},{"id":101323,"depth":39,"text":101324,"children":107569},[107570,107571],{"id":101643,"depth":51,"text":101643},{"id":101779,"depth":51,"text":101779},{"id":102386,"depth":39,"text":102387},{"id":102418,"depth":39,"text":102419},{"id":102523,"depth":39,"text":102524,"children":107575},[107576,107577,107578,107579,107581],{"id":107410,"depth":51,"text":107413},{"id":107422,"depth":51,"text":107422},{"id":107448,"depth":51,"text":107448},{"id":107457,"depth":51,"text":107580},"data.ctrl[0] 写了但没有效果",{"id":107488,"depth":51,"text":107488},{"id":102677,"depth":39,"text":102678},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105892,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107589,"title":107590,"body":107591,"description":20,"extension":165,"meta":109500,"navigation":167,"path":109501,"seo":109502,"stem":109503,"__hash__":109504},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107592,"toc":109476},[107593,107596,107598,107601,107609,107612,107629,107632,107657,107660,107706,107708,107710,107765,107767,107786,107788,107831,107834,107851,107854,107870,107880,107887,107889,107892,107895,107929,107932,107980,107984,107987,108001,108010,108014,108017,108042,108045,108049,108062,108065,108071,108074,108089,108091,108094,108354,108356,108368,108371,108683,108685,108697,108699,108702,108717,108722,108725,108747,108750,108753,108787,108790,108794,108805,108808,108825,108828,108842,108849,108869,108876,108890,108893,108905,108920,108940,108943,108965,108968,108972,108987,108998,109013,109016,109046,109062,109091,109099,109123,109126,109144,109154,109166,109173,109182,109188,109197,109200,109202,109211,109214,109229,109231,109234,109245,109248,109259,109262,109280,109282,109299,109302,109330,109332,109336,109339,109369,109375,109378,109382,109390,109393,109395,109416,109419,109422,109438,109441,109457,109459,109462,109473],[10,107594,107590],{"id":107595},"_5viewer-可视化与-renderer-离屏渲染",[182,107597,100718],{"id":100717},[99,107599,107600],{},"本章掌握两类可视化方式:",[194,107602,107603,107606],{},[106,107604,107605],{},"交互式 viewer: 适合人工观察仿真",[106,107607,107608],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[99,107610,107611],{},"使用官方接口:",[15,107613,107615],{"className":30449,"code":107614,"language":30451,"meta":20,"style":20},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[22,107616,107617,107624],{"__ignoreMap":20},[25,107618,107619,107621],{"class":27,"line":28},[25,107620,30463],{"class":240},[25,107622,107623],{"class":244}," mujoco.viewer\n",[25,107625,107626],{"class":27,"line":39},[25,107627,107628],{"class":244},"mujoco.viewer.launch_passive(model, data)\n",[99,107630,107631],{},"以及:",[15,107633,107635],{"className":30449,"code":107634,"language":30451,"meta":20,"style":20},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[22,107636,107637,107647],{"__ignoreMap":20},[25,107638,107639,107642,107644],{"class":27,"line":28},[25,107640,107641],{"class":244},"renderer ",[25,107643,290],{"class":240},[25,107645,107646],{"class":244}," mujoco.Renderer(model)\n",[25,107648,107649,107652,107654],{"class":27,"line":39},[25,107650,107651],{"class":244},"image ",[25,107653,290],{"class":240},[25,107655,107656],{"class":244}," renderer.render()\n",[99,107658,107659],{},"新手建议先理解二者区别：",[380,107661,107662,107678],{},[383,107663,107664],{},[386,107665,107666,107669,107672,107675],{},[389,107667,107668],{"align":23846},"工具",[389,107670,107671],{"align":23846},"用途",[389,107673,107674],{"align":23846},"是否打开窗口",[389,107676,107677],{"align":23846},"常见场景",[427,107679,107680,107693],{},[386,107681,107682,107685,107688,107690],{},[432,107683,107684],{"align":23846},"Viewer",[432,107686,107687],{"align":23846},"人眼实时观察仿真",[432,107689,104736],{"align":23846},[432,107691,107692],{"align":23846},"调试模型、看控制效果",[386,107694,107695,107698,107701,107703],{},[432,107696,107697],{"align":23846},"Renderer",[432,107699,107700],{"align":23846},"生成图像数组",[432,107702,104749],{"align":23846},[432,107704,107705],{"align":23846},"保存图片、训练视觉策略、服务器批量采集",[182,107707,100841],{"id":100840},[99,107709,100844],{},[15,107711,107713],{"className":17,"code":107712,"language":19,"meta":20,"style":20},"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",[22,107714,107715,107727,107737,107745,107753],{"__ignoreMap":20},[25,107716,107717,107719,107721,107723,107725],{"class":27,"line":28},[25,107718,24684],{"class":31},[25,107720,26386],{"class":45},[25,107722,23942],{"class":45},[25,107724,26471],{"class":35},[25,107726,36],{"class":35},[25,107728,107729,107731,107733,107735],{"class":27,"line":39},[25,107730,100879],{"class":45},[25,107732,100882],{"class":45},[25,107734,100885],{"class":45},[25,107736,36],{"class":35},[25,107738,107739,107741,107743],{"class":27,"line":51},[25,107740,100892],{"class":45},[25,107742,100895],{"class":45},[25,107744,36],{"class":35},[25,107746,107747,107749,107751],{"class":27,"line":59},[25,107748,100902],{"class":45},[25,107750,100905],{"class":45},[25,107752,36],{"class":35},[25,107754,107755,107757,107759,107761,107763],{"class":27,"line":67},[25,107756,100912],{"class":45},[25,107758,100915],{"class":45},[25,107760,100918],{"class":45},[25,107762,100921],{"class":45},[25,107764,102587],{"class":45},[99,107766,102890],{},[15,107768,107770],{"className":17,"code":107769,"language":19,"meta":20,"style":20},"pip install \"mujoco>=2.3\" numpy pillow\n",[22,107771,107772],{"__ignoreMap":20},[25,107773,107774,107776,107778,107780,107783],{"class":27,"line":28},[25,107775,23939],{"class":31},[25,107777,23942],{"class":45},[25,107779,101001],{"class":45},[25,107781,107782],{"class":45}," numpy",[25,107784,107785],{"class":45}," pillow\n",[99,107787,102907],{},[15,107789,107791],{"className":17,"code":107790,"language":19,"meta":20,"style":20},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[22,107792,107793,107810,107819],{"__ignoreMap":20},[25,107794,107795,107797,107799,107801,107804,107806,107808],{"class":27,"line":28},[25,107796,30401],{"class":31},[25,107798,29247],{"class":45},[25,107800,25222],{"class":35},[25,107802,107803],{"class":45}," mujoco-render",[25,107805,101046],{"class":45},[25,107807,101049],{"class":35},[25,107809,101052],{"class":35},[25,107811,107812,107814,107816],{"class":27,"line":39},[25,107813,30401],{"class":31},[25,107815,101059],{"class":45},[25,107817,107818],{"class":45}," mujoco-render\n",[25,107820,107821,107823,107825,107827,107829],{"class":27,"line":51},[25,107822,23939],{"class":31},[25,107824,23942],{"class":45},[25,107826,101001],{"class":45},[25,107828,107782],{"class":45},[25,107830,107785],{"class":45},[99,107832,107833],{},"离屏渲染后端:",[15,107835,107837],{"className":17,"code":107836,"language":19,"meta":20,"style":20},"export MUJOCO_GL=egl\n",[22,107838,107839],{"__ignoreMap":20},[25,107840,107841,107843,107846,107848],{"class":27,"line":28},[25,107842,25149],{"class":240},[25,107844,107845],{"class":244}," MUJOCO_GL",[25,107847,290],{"class":240},[25,107849,107850],{"class":244},"egl\n",[99,107852,107853],{},"或:",[15,107855,107857],{"className":17,"code":107856,"language":19,"meta":20,"style":20},"export MUJOCO_GL=osmesa\n",[22,107858,107859],{"__ignoreMap":20},[25,107860,107861,107863,107865,107867],{"class":27,"line":28},[25,107862,25149],{"class":240},[25,107864,107845],{"class":244},[25,107866,290],{"class":240},[25,107868,107869],{"class":244},"osmesa\n",[99,107871,107872,107873,107876,107877,28456],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[22,107874,107875],{},"egl"," 失败，再尝试 ",[22,107878,107879],{},"osmesa",[99,107881,107882,107883,107886],{},"如果你在本机桌面环境运行，通常先不要设置 ",[22,107884,107885],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[182,107888,101116],{"id":101115},[99,107890,107891],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[99,107893,107894],{},"典型 viewer 流程:",[15,107896,107898],{"className":30449,"code":107897,"language":30451,"meta":20,"style":20},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[22,107899,107900,107913,107920,107924],{"__ignoreMap":20},[25,107901,107902,107905,107908,107910],{"class":27,"line":28},[25,107903,107904],{"class":240},"with",[25,107906,107907],{"class":244}," mujoco.viewer.launch_passive(model, data) ",[25,107909,31454],{"class":240},[25,107911,107912],{"class":244}," viewer:\n",[25,107914,107915,107917],{"class":27,"line":39},[25,107916,2361],{"class":240},[25,107918,107919],{"class":244}," viewer.is_running():\n",[25,107921,107922],{"class":27,"line":51},[25,107923,101587],{"class":244},[25,107925,107926],{"class":27,"line":59},[25,107927,107928],{"class":244},"        viewer.sync()\n",[99,107930,107931],{},"典型 renderer 流程:",[15,107933,107935],{"className":30449,"code":107934,"language":30451,"meta":20,"style":20},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[22,107936,107937,107963,107967,107972],{"__ignoreMap":20},[25,107938,107939,107941,107943,107946,107948,107950,107952,107954,107956,107958,107961],{"class":27,"line":28},[25,107940,107641],{"class":244},[25,107942,290],{"class":240},[25,107944,107945],{"class":244}," mujoco.Renderer(model, ",[25,107947,25088],{"class":5326},[25,107949,290],{"class":240},[25,107951,42413],{"class":35},[25,107953,12545],{"class":244},[25,107955,25084],{"class":5326},[25,107957,290],{"class":240},[25,107959,107960],{"class":35},"640",[25,107962,251],{"class":244},[25,107964,107965],{"class":27,"line":39},[25,107966,104576],{"class":244},[25,107968,107969],{"class":27,"line":51},[25,107970,107971],{"class":244},"renderer.update_scene(data)\n",[25,107973,107974,107976,107978],{"class":27,"line":59},[25,107975,107651],{"class":244},[25,107977,290],{"class":240},[25,107979,107656],{"class":244},[210,107981,107983],{"id":107982},"viewer-的同步逻辑","viewer 的同步逻辑",[99,107985,107986],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[15,107988,107990],{"className":30449,"code":107989,"language":30451,"meta":20,"style":20},"mujoco.mj_step(model, data)\nviewer.sync()\n",[22,107991,107992,107996],{"__ignoreMap":20},[25,107993,107994],{"class":27,"line":28},[25,107995,104576],{"class":244},[25,107997,107998],{"class":27,"line":39},[25,107999,108000],{"class":244},"viewer.sync()\n",[99,108002,108003,108005,108006,108009],{},[22,108004,101286],{}," 负责算物理，",[22,108007,108008],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[210,108011,108013],{"id":108012},"为什么要-sleep","为什么要 sleep",[99,108015,108016],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[15,108018,108020],{"className":30449,"code":108019,"language":30451,"meta":20,"style":20},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[22,108021,108022],{"__ignoreMap":20},[25,108023,108024,108027,108029,108032,108034,108037,108039],{"class":27,"line":28},[25,108025,108026],{"class":244},"sleep_time ",[25,108028,290],{"class":240},[25,108030,108031],{"class":244}," model.opt.timestep ",[25,108033,775],{"class":240},[25,108035,108036],{"class":244}," (time.time() ",[25,108038,775],{"class":240},[25,108040,108041],{"class":244}," step_start)\n",[99,108043,108044],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[210,108046,108048],{"id":108047},"renderer-输出是什么","renderer 输出是什么",[15,108050,108052],{"className":30449,"code":108051,"language":30451,"meta":20,"style":20},"image = renderer.render()\n",[22,108053,108054],{"__ignoreMap":20},[25,108055,108056,108058,108060],{"class":27,"line":28},[25,108057,107651],{"class":244},[25,108059,290],{"class":240},[25,108061,107656],{"class":244},[99,108063,108064],{},"得到的是 NumPy 数组，形状通常是：",[15,108066,108069],{"className":108067,"code":108068,"language":5297,"meta":20},[5295],"(height, width, 3)\n",[22,108070,108068],{"__ignoreMap":20},[99,108072,108073],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[15,108075,108077],{"className":30449,"code":108076,"language":30451,"meta":20,"style":20},"Image.fromarray(image).save(\"render_output.png\")\n",[22,108078,108079],{"__ignoreMap":20},[25,108080,108081,108084,108087],{"class":27,"line":28},[25,108082,108083],{"class":244},"Image.fromarray(image).save(",[25,108085,108086],{"class":45},"\"render_output.png\"",[25,108088,251],{"class":244},[182,108090,101324],{"id":101323},[99,108092,108093],{},"交互式 Viewer:",[15,108095,108097],{"className":30449,"code":108096,"language":30451,"meta":20,"style":20},"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",[22,108098,108099,108105,108109,108115,108121,108125,108129,108137,108142,108146,108150,108154,108159,108164,108168,108172,108176,108181,108185,108189,108193,108197,108201,108205,108217,108229,108237,108241,108251,108271,108281,108286,108291,108295,108312,108325,108330,108334,108338,108350],{"__ignoreMap":20},[25,108100,108101,108103],{"class":27,"line":28},[25,108102,30463],{"class":240},[25,108104,31900],{"class":244},[25,108106,108107],{"class":27,"line":39},[25,108108,2510],{"emptyLinePlaceholder":167},[25,108110,108111,108113],{"class":27,"line":51},[25,108112,30463],{"class":240},[25,108114,101372],{"class":244},[25,108116,108117,108119],{"class":27,"line":59},[25,108118,30463],{"class":240},[25,108120,107623],{"class":244},[25,108122,108123],{"class":27,"line":67},[25,108124,2510],{"emptyLinePlaceholder":167},[25,108126,108127],{"class":27,"line":75},[25,108128,2510],{"emptyLinePlaceholder":167},[25,108130,108131,108133,108135],{"class":27,"line":83},[25,108132,101385],{"class":35},[25,108134,13674],{"class":240},[25,108136,101390],{"class":45},[25,108138,108139],{"class":27,"line":91},[25,108140,108141],{"class":45},"\u003Cmujoco model=\"viewer_demo\">\n",[25,108143,108144],{"class":27,"line":1429},[25,108145,101400],{"class":45},[25,108147,108148],{"class":27,"line":1441},[25,108149,2510],{"emptyLinePlaceholder":167},[25,108151,108152],{"class":27,"line":1723},[25,108153,101409],{"class":45},[25,108155,108156],{"class":27,"line":1728},[25,108157,108158],{"class":45},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[25,108160,108161],{"class":27,"line":1734},[25,108162,108163],{"class":45},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[25,108165,108166],{"class":27,"line":1739},[25,108167,2510],{"emptyLinePlaceholder":167},[25,108169,108170],{"class":27,"line":1753},[25,108171,101423],{"class":45},[25,108173,108174],{"class":27,"line":1758},[25,108175,101428],{"class":45},[25,108177,108178],{"class":27,"line":1764},[25,108179,108180],{"class":45},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[25,108182,108183],{"class":27,"line":1785},[25,108184,101438],{"class":45},[25,108186,108187],{"class":27,"line":1790},[25,108188,101443],{"class":45},[25,108190,108191],{"class":27,"line":1804},[25,108192,101448],{"class":45},[25,108194,108195],{"class":27,"line":1809},[25,108196,95769],{"class":45},[25,108198,108199],{"class":27,"line":1838},[25,108200,2510],{"emptyLinePlaceholder":167},[25,108202,108203],{"class":27,"line":1843},[25,108204,2510],{"emptyLinePlaceholder":167},[25,108206,108207,108209,108211,108213,108215],{"class":27,"line":1860},[25,108208,32018],{"class":240},[25,108210,2083],{"class":31},[25,108212,101469],{"class":244},[25,108214,95757],{"class":35},[25,108216,3849],{"class":244},[25,108218,108219,108221,108223,108225,108227],{"class":27,"line":1865},[25,108220,101478],{"class":244},[25,108222,290],{"class":240},[25,108224,101483],{"class":244},[25,108226,101385],{"class":35},[25,108228,251],{"class":244},[25,108230,108231,108233,108235],{"class":27,"line":1870},[25,108232,101492],{"class":244},[25,108234,290],{"class":240},[25,108236,101497],{"class":244},[25,108238,108239],{"class":27,"line":1875},[25,108240,2510],{"emptyLinePlaceholder":167},[25,108242,108243,108245,108247,108249],{"class":27,"line":1889},[25,108244,34249],{"class":240},[25,108246,107907],{"class":244},[25,108248,31454],{"class":240},[25,108250,107912],{"class":244},[25,108252,108253,108256,108259,108261,108264,108266,108269],{"class":27,"line":1894},[25,108254,108255],{"class":240},"        while",[25,108257,108258],{"class":244}," viewer.is_running() ",[25,108260,30533],{"class":240},[25,108262,108263],{"class":244}," data.time ",[25,108265,1153],{"class":240},[25,108267,108268],{"class":35}," 5.0",[25,108270,3849],{"class":244},[25,108272,108273,108276,108278],{"class":27,"line":2687},[25,108274,108275],{"class":244},"            step_start ",[25,108277,290],{"class":240},[25,108279,108280],{"class":244}," time.time()\n",[25,108282,108283],{"class":27,"line":2701},[25,108284,108285],{"class":244},"            mujoco.mj_step(model, data)\n",[25,108287,108288],{"class":27,"line":2709},[25,108289,108290],{"class":244},"            viewer.sync()\n",[25,108292,108293],{"class":27,"line":2714},[25,108294,2510],{"emptyLinePlaceholder":167},[25,108296,108297,108300,108302,108304,108306,108308,108310],{"class":27,"line":2720},[25,108298,108299],{"class":244},"            sleep_time ",[25,108301,290],{"class":240},[25,108303,108031],{"class":244},[25,108305,775],{"class":240},[25,108307,108036],{"class":244},[25,108309,775],{"class":240},[25,108311,108041],{"class":244},[25,108313,108314,108316,108319,108321,108323],{"class":27,"line":2726},[25,108315,4752],{"class":240},[25,108317,108318],{"class":244}," sleep_time ",[25,108320,1203],{"class":240},[25,108322,4203],{"class":35},[25,108324,3849],{"class":244},[25,108326,108327],{"class":27,"line":2731},[25,108328,108329],{"class":244},"                time.sleep(sleep_time)\n",[25,108331,108332],{"class":27,"line":8058},[25,108333,2510],{"emptyLinePlaceholder":167},[25,108335,108336],{"class":27,"line":8082},[25,108337,2510],{"emptyLinePlaceholder":167},[25,108339,108340,108342,108344,108346,108348],{"class":27,"line":8087},[25,108341,1642],{"class":240},[25,108343,31291],{"class":35},[25,108345,101630],{"class":240},[25,108347,101633],{"class":45},[25,108349,3849],{"class":244},[25,108351,108352],{"class":27,"line":8093},[25,108353,101640],{"class":244},[99,108355,103641],{},[15,108357,108359],{"className":17,"code":108358,"language":19,"meta":20,"style":20},"touch ch5_viewer.py\n",[22,108360,108361],{"__ignoreMap":20},[25,108362,108363,108365],{"class":27,"line":28},[25,108364,101354],{"class":31},[25,108366,108367],{"class":45}," ch5_viewer.py\n",[99,108369,108370],{},"离屏 Renderer 保存图片:",[15,108372,108374],{"className":30449,"code":108373,"language":30451,"meta":20,"style":20},"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",[22,108375,108376,108388,108392,108398,108408,108412,108416,108424,108429,108433,108437,108441,108445,108450,108454,108458,108462,108466,108470,108474,108478,108482,108486,108490,108494,108506,108518,108526,108551,108555,108571,108575,108579,108594,108603,108607,108621,108626,108631,108635,108647,108659,108663,108667,108679],{"__ignoreMap":20},[25,108377,108378,108380,108383,108385],{"class":27,"line":28},[25,108379,30808],{"class":240},[25,108381,108382],{"class":244}," pathlib ",[25,108384,30463],{"class":240},[25,108386,108387],{"class":244}," Path\n",[25,108389,108390],{"class":27,"line":39},[25,108391,2510],{"emptyLinePlaceholder":167},[25,108393,108394,108396],{"class":27,"line":51},[25,108395,30463],{"class":240},[25,108397,101372],{"class":244},[25,108399,108400,108402,108404,108406],{"class":27,"line":59},[25,108401,30808],{"class":240},[25,108403,47334],{"class":35},[25,108405,47337],{"class":240},[25,108407,47340],{"class":244},[25,108409,108410],{"class":27,"line":67},[25,108411,2510],{"emptyLinePlaceholder":167},[25,108413,108414],{"class":27,"line":75},[25,108415,2510],{"emptyLinePlaceholder":167},[25,108417,108418,108420,108422],{"class":27,"line":83},[25,108419,101385],{"class":35},[25,108421,13674],{"class":240},[25,108423,101390],{"class":45},[25,108425,108426],{"class":27,"line":91},[25,108427,108428],{"class":45},"\u003Cmujoco model=\"renderer_demo\">\n",[25,108430,108431],{"class":27,"line":1429},[25,108432,101400],{"class":45},[25,108434,108435],{"class":27,"line":1441},[25,108436,2510],{"emptyLinePlaceholder":167},[25,108438,108439],{"class":27,"line":1723},[25,108440,101409],{"class":45},[25,108442,108443],{"class":27,"line":1728},[25,108444,108158],{"class":45},[25,108446,108447],{"class":27,"line":1734},[25,108448,108449],{"class":45},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[25,108451,108452],{"class":27,"line":1739},[25,108453,108163],{"class":45},[25,108455,108456],{"class":27,"line":1753},[25,108457,2510],{"emptyLinePlaceholder":167},[25,108459,108460],{"class":27,"line":1758},[25,108461,101423],{"class":45},[25,108463,108464],{"class":27,"line":1764},[25,108465,101428],{"class":45},[25,108467,108468],{"class":27,"line":1785},[25,108469,108180],{"class":45},[25,108471,108472],{"class":27,"line":1790},[25,108473,101438],{"class":45},[25,108475,108476],{"class":27,"line":1804},[25,108477,101443],{"class":45},[25,108479,108480],{"class":27,"line":1809},[25,108481,101448],{"class":45},[25,108483,108484],{"class":27,"line":1838},[25,108485,95769],{"class":45},[25,108487,108488],{"class":27,"line":1843},[25,108489,2510],{"emptyLinePlaceholder":167},[25,108491,108492],{"class":27,"line":1860},[25,108493,2510],{"emptyLinePlaceholder":167},[25,108495,108496,108498,108500,108502,108504],{"class":27,"line":1865},[25,108497,32018],{"class":240},[25,108499,2083],{"class":31},[25,108501,101469],{"class":244},[25,108503,95757],{"class":35},[25,108505,3849],{"class":244},[25,108507,108508,108510,108512,108514,108516],{"class":27,"line":1870},[25,108509,101478],{"class":244},[25,108511,290],{"class":240},[25,108513,101483],{"class":244},[25,108515,101385],{"class":35},[25,108517,251],{"class":244},[25,108519,108520,108522,108524],{"class":27,"line":1875},[25,108521,101492],{"class":244},[25,108523,290],{"class":240},[25,108525,101497],{"class":244},[25,108527,108528,108531,108533,108535,108537,108539,108541,108543,108545,108547,108549],{"class":27,"line":1889},[25,108529,108530],{"class":244},"    renderer ",[25,108532,290],{"class":240},[25,108534,107945],{"class":244},[25,108536,25088],{"class":5326},[25,108538,290],{"class":240},[25,108540,42413],{"class":35},[25,108542,12545],{"class":244},[25,108544,25084],{"class":5326},[25,108546,290],{"class":240},[25,108548,107960],{"class":35},[25,108550,251],{"class":244},[25,108552,108553],{"class":27,"line":1894},[25,108554,2510],{"emptyLinePlaceholder":167},[25,108556,108557,108559,108561,108563,108565,108567,108569],{"class":27,"line":2687},[25,108558,3311],{"class":240},[25,108560,101572],{"class":244},[25,108562,26114],{"class":240},[25,108564,32514],{"class":35},[25,108566,245],{"class":244},[25,108568,554],{"class":35},[25,108570,30857],{"class":244},[25,108572,108573],{"class":27,"line":2701},[25,108574,101587],{"class":244},[25,108576,108577],{"class":27,"line":2709},[25,108578,2510],{"emptyLinePlaceholder":167},[25,108580,108581,108584,108587,108589,108592],{"class":27,"line":2714},[25,108582,108583],{"class":244},"    renderer.update_scene(data, ",[25,108585,108586],{"class":5326},"camera",[25,108588,290],{"class":240},[25,108590,108591],{"class":45},"\"fixed_camera\"",[25,108593,251],{"class":244},[25,108595,108596,108599,108601],{"class":27,"line":2720},[25,108597,108598],{"class":244},"    image ",[25,108600,290],{"class":240},[25,108602,107656],{"class":244},[25,108604,108605],{"class":27,"line":2726},[25,108606,2510],{"emptyLinePlaceholder":167},[25,108608,108609,108612,108614,108617,108619],{"class":27,"line":2731},[25,108610,108611],{"class":244},"    output_path ",[25,108613,290],{"class":240},[25,108615,108616],{"class":244}," Path(",[25,108618,108086],{"class":45},[25,108620,251],{"class":244},[25,108622,108623],{"class":27,"line":8058},[25,108624,108625],{"class":244},"    Image.fromarray(image).save(output_path)\n",[25,108627,108628],{"class":27,"line":8082},[25,108629,108630],{"class":244},"    renderer.close()\n",[25,108632,108633],{"class":27,"line":8087},[25,108634,2510],{"emptyLinePlaceholder":167},[25,108636,108637,108639,108641,108644],{"class":27,"line":8093},[25,108638,31370],{"class":35},[25,108640,245],{"class":244},[25,108642,108643],{"class":45},"\"saved:\"",[25,108645,108646],{"class":244},", output_path.resolve())\n",[25,108648,108649,108651,108653,108656],{"class":27,"line":8120},[25,108650,31370],{"class":35},[25,108652,245],{"class":244},[25,108654,108655],{"class":45},"\"image shape:\"",[25,108657,108658],{"class":244},", image.shape)\n",[25,108660,108661],{"class":27,"line":8125},[25,108662,2510],{"emptyLinePlaceholder":167},[25,108664,108665],{"class":27,"line":8131},[25,108666,2510],{"emptyLinePlaceholder":167},[25,108668,108669,108671,108673,108675,108677],{"class":27,"line":8143},[25,108670,1642],{"class":240},[25,108672,31291],{"class":35},[25,108674,101630],{"class":240},[25,108676,101633],{"class":45},[25,108678,3849],{"class":244},[25,108680,108681],{"class":27,"line":8155},[25,108682,101640],{"class":244},[99,108684,103641],{},[15,108686,108688],{"className":17,"code":108687,"language":19,"meta":20,"style":20},"touch ch5_renderer.py\n",[22,108689,108690],{"__ignoreMap":20},[25,108691,108692,108694],{"class":27,"line":28},[25,108693,101354],{"class":31},[25,108695,108696],{"class":45}," ch5_renderer.py\n",[210,108698,101643],{"id":101643},[99,108700,108701],{},"viewer 上下文：",[15,108703,108705],{"className":30449,"code":108704,"language":30451,"meta":20,"style":20},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[22,108706,108707],{"__ignoreMap":20},[25,108708,108709,108711,108713,108715],{"class":27,"line":28},[25,108710,107904],{"class":240},[25,108712,107907],{"class":244},[25,108714,31454],{"class":240},[25,108716,107912],{"class":244},[99,108718,108719,108721],{},[22,108720,107904],{}," 语句会创建窗口，并在退出时自动清理资源。",[99,108723,108724],{},"窗口循环：",[15,108726,108728],{"className":30449,"code":108727,"language":30451,"meta":20,"style":20},"while viewer.is_running() and data.time \u003C 5.0:\n",[22,108729,108730],{"__ignoreMap":20},[25,108731,108732,108735,108737,108739,108741,108743,108745],{"class":27,"line":28},[25,108733,108734],{"class":240},"while",[25,108736,108258],{"class":244},[25,108738,30533],{"class":240},[25,108740,108263],{"class":244},[25,108742,1153],{"class":240},[25,108744,108268],{"class":35},[25,108746,3849],{"class":244},[99,108748,108749],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[99,108751,108752],{},"固定相机：",[15,108754,108756],{"className":53138,"code":108755,"language":53140,"meta":20,"style":20},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[22,108757,108758],{"__ignoreMap":20},[25,108759,108760,108762,108764,108766,108768,108770,108772,108774,108777,108780,108782,108785],{"class":27,"line":28},[25,108761,1153],{"class":244},[25,108763,108586],{"class":51371},[25,108765,15030],{"class":31},[25,108767,290],{"class":244},[25,108769,108591],{"class":45},[25,108771,101177],{"class":31},[25,108773,290],{"class":244},[25,108775,108776],{"class":45},"\"1.5 -2.0 1.2\"",[25,108778,108779],{"class":31}," xyaxes",[25,108781,290],{"class":244},[25,108783,108784],{"class":45},"\"1 0.75 0 0 0 1\"",[25,108786,101215],{"class":244},[99,108788,108789],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[210,108791,108793],{"id":108792},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[15,108795,108797],{"className":30449,"code":108796,"language":30451,"meta":20,"style":20},"import time\n",[22,108798,108799],{"__ignoreMap":20},[25,108800,108801,108803],{"class":27,"line":28},[25,108802,30463],{"class":240},[25,108804,31900],{"class":244},[99,108806,108807],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[15,108809,108811],{"className":30449,"code":108810,"language":30451,"meta":20,"style":20},"import mujoco\nimport mujoco.viewer\n",[22,108812,108813,108819],{"__ignoreMap":20},[25,108814,108815,108817],{"class":27,"line":28},[25,108816,30463],{"class":240},[25,108818,101372],{"class":244},[25,108820,108821,108823],{"class":27,"line":39},[25,108822,30463],{"class":240},[25,108824,107623],{"class":244},[99,108826,108827],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[15,108829,108830],{"className":30449,"code":108704,"language":30451,"meta":20,"style":20},[22,108831,108832],{"__ignoreMap":20},[25,108833,108834,108836,108838,108840],{"class":27,"line":28},[25,108835,107904],{"class":240},[25,108837,107907],{"class":244},[25,108839,31454],{"class":240},[25,108841,107912],{"class":244},[99,108843,108844,108845,108848],{},"打开一个 viewer 窗口。",[22,108846,108847],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[15,108850,108851],{"className":30449,"code":108727,"language":30451,"meta":20,"style":20},[22,108852,108853],{"__ignoreMap":20},[25,108854,108855,108857,108859,108861,108863,108865,108867],{"class":27,"line":28},[25,108856,108734],{"class":240},[25,108858,108258],{"class":244},[25,108860,30533],{"class":240},[25,108862,108263],{"class":244},[25,108864,1153],{"class":240},[25,108866,108268],{"class":35},[25,108868,3849],{"class":244},[99,108870,108871,108872,108875],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[22,108873,108874],{},"viewer.is_running()"," 会变成 false，循环结束。",[15,108877,108879],{"className":30449,"code":108878,"language":30451,"meta":20,"style":20},"step_start = time.time()\n",[22,108880,108881],{"__ignoreMap":20},[25,108882,108883,108886,108888],{"class":27,"line":28},[25,108884,108885],{"class":244},"step_start ",[25,108887,290],{"class":240},[25,108889,108280],{"class":244},[99,108891,108892],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[15,108894,108895],{"className":30449,"code":107989,"language":30451,"meta":20,"style":20},[22,108896,108897,108901],{"__ignoreMap":20},[25,108898,108899],{"class":27,"line":28},[25,108900,104576],{"class":244},[25,108902,108903],{"class":27,"line":39},[25,108904,108000],{"class":244},[99,108906,108907,108909,108910,108912,108913,108915,108916,108919],{},[22,108908,101286],{}," 推进物理仿真。",[22,108911,108008],{}," 把最新的 ",[22,108914,33472],{}," 同步到窗口里显示。没有 ",[22,108917,108918],{},"sync()","，窗口可能看不到最新状态。",[15,108921,108922],{"className":30449,"code":108019,"language":30451,"meta":20,"style":20},[22,108923,108924],{"__ignoreMap":20},[25,108925,108926,108928,108930,108932,108934,108936,108938],{"class":27,"line":28},[25,108927,108026],{"class":244},[25,108929,290],{"class":240},[25,108931,108031],{"class":244},[25,108933,775],{"class":240},[25,108935,108036],{"class":244},[25,108937,775],{"class":240},[25,108939,108041],{"class":244},[99,108941,108942],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[15,108944,108946],{"className":30449,"code":108945,"language":30451,"meta":20,"style":20},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[22,108947,108948,108960],{"__ignoreMap":20},[25,108949,108950,108952,108954,108956,108958],{"class":27,"line":28},[25,108951,1642],{"class":240},[25,108953,108318],{"class":244},[25,108955,1203],{"class":240},[25,108957,4203],{"class":35},[25,108959,3849],{"class":244},[25,108961,108962],{"class":27,"line":39},[25,108963,108964],{"class":244},"    time.sleep(sleep_time)\n",[99,108966,108967],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[210,108969,108971],{"id":108970},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[15,108973,108975],{"className":30449,"code":108974,"language":30451,"meta":20,"style":20},"from pathlib import Path\n",[22,108976,108977],{"__ignoreMap":20},[25,108978,108979,108981,108983,108985],{"class":27,"line":28},[25,108980,30808],{"class":240},[25,108982,108382],{"class":244},[25,108984,30463],{"class":240},[25,108986,108387],{"class":244},[99,108988,108989,108990,108993,108994,108997],{},"导入 ",[22,108991,108992],{},"Path","，用来处理文件路径。相比直接写字符串，",[22,108995,108996],{},"Path(\"render_output.png\")"," 更清晰。",[15,108999,109001],{"className":30449,"code":109000,"language":30451,"meta":20,"style":20},"from PIL import Image\n",[22,109002,109003],{"__ignoreMap":20},[25,109004,109005,109007,109009,109011],{"class":27,"line":28},[25,109006,30808],{"class":240},[25,109008,47334],{"class":35},[25,109010,47337],{"class":240},[25,109012,47340],{"class":244},[99,109014,109015],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[15,109017,109018],{"className":53138,"code":108755,"language":53140,"meta":20,"style":20},[22,109019,109020],{"__ignoreMap":20},[25,109021,109022,109024,109026,109028,109030,109032,109034,109036,109038,109040,109042,109044],{"class":27,"line":28},[25,109023,1153],{"class":244},[25,109025,108586],{"class":51371},[25,109027,15030],{"class":31},[25,109029,290],{"class":244},[25,109031,108591],{"class":45},[25,109033,101177],{"class":31},[25,109035,290],{"class":244},[25,109037,108776],{"class":45},[25,109039,108779],{"class":31},[25,109041,290],{"class":244},[25,109043,108784],{"class":45},[25,109045,101215],{"class":244},[99,109047,109048,109049,109051,109052,109054,109055,109058,109059,109061],{},"定义一个相机。",[22,109050,79881],{}," 是相机名字。",[22,109053,104217],{}," 是相机在世界里的位置。",[22,109056,109057],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[22,109060,104217],{}," 来调视角。",[15,109063,109065],{"className":30449,"code":109064,"language":30451,"meta":20,"style":20},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[22,109066,109067],{"__ignoreMap":20},[25,109068,109069,109071,109073,109075,109077,109079,109081,109083,109085,109087,109089],{"class":27,"line":28},[25,109070,107641],{"class":244},[25,109072,290],{"class":240},[25,109074,107945],{"class":244},[25,109076,25088],{"class":5326},[25,109078,290],{"class":240},[25,109080,42413],{"class":35},[25,109082,12545],{"class":244},[25,109084,25084],{"class":5326},[25,109086,290],{"class":240},[25,109088,107960],{"class":35},[25,109090,251],{"class":244},[99,109092,109093,109094,101089,109096,109098],{},"创建离屏渲染器。",[22,109095,25088],{},[22,109097,25084],{}," 决定输出图片大小。",[15,109100,109101],{"className":30449,"code":101747,"language":30451,"meta":20,"style":20},[22,109102,109103,109119],{"__ignoreMap":20},[25,109104,109105,109107,109109,109111,109113,109115,109117],{"class":27,"line":28},[25,109106,3135],{"class":240},[25,109108,101572],{"class":244},[25,109110,26114],{"class":240},[25,109112,32514],{"class":35},[25,109114,245],{"class":244},[25,109116,554],{"class":35},[25,109118,30857],{"class":244},[25,109120,109121],{"class":27,"line":39},[25,109122,101770],{"class":244},[99,109124,109125],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[15,109127,109129],{"className":30449,"code":109128,"language":30451,"meta":20,"style":20},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[22,109130,109131],{"__ignoreMap":20},[25,109132,109133,109136,109138,109140,109142],{"class":27,"line":28},[25,109134,109135],{"class":244},"renderer.update_scene(data, ",[25,109137,108586],{"class":5326},[25,109139,290],{"class":240},[25,109141,108591],{"class":45},[25,109143,251],{"class":244},[99,109145,109146,109147,109149,109150,109153],{},"告诉 renderer：用当前 ",[22,109148,33472],{}," 的状态更新画面，并使用名为 ",[22,109151,109152],{},"fixed_camera"," 的相机视角。",[15,109155,109156],{"className":30449,"code":108051,"language":30451,"meta":20,"style":20},[22,109157,109158],{"__ignoreMap":20},[25,109159,109160,109162,109164],{"class":27,"line":28},[25,109161,107651],{"class":244},[25,109163,290],{"class":240},[25,109165,107656],{"class":244},[99,109167,109168,109169,109172],{},"真正渲染出图像。",[22,109170,109171],{},"image"," 是一个 NumPy 数组，不是文件。",[15,109174,109176],{"className":30449,"code":109175,"language":30451,"meta":20,"style":20},"Image.fromarray(image).save(output_path)\n",[22,109177,109178],{"__ignoreMap":20},[25,109179,109180],{"class":27,"line":28},[25,109181,109175],{"class":244},[99,109183,109184,109185,28456],{},"把数组转换成图片，并保存到 ",[22,109186,109187],{},"render_output.png",[15,109189,109191],{"className":30449,"code":109190,"language":30451,"meta":20,"style":20},"renderer.close()\n",[22,109192,109193],{"__ignoreMap":20},[25,109194,109195],{"class":27,"line":28},[25,109196,109190],{"class":244},[99,109198,109199],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[182,109201,102387],{"id":102386},[99,109203,109204,109205,109207,109208,28456],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[22,109206,109187],{},"，并输出图像数组形状，例如 ",[22,109209,109210],{},"(480, 640, 3)",[99,109212,109213],{},"如果图片里看不到方块，先检查：",[194,109215,109216,109219,109222],{},[106,109217,109218],{},"方块是否掉到相机视野外。",[106,109220,109221],{},"camera 位置是否合理。",[106,109223,109224,109225,109228],{},"是否在 ",[22,109226,109227],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[182,109230,102419],{"id":102418},[99,109232,109233],{},"运行 viewer:",[15,109235,109237],{"className":17,"code":109236,"language":19,"meta":20,"style":20},"python ch5_viewer.py\n",[22,109238,109239],{"__ignoreMap":20},[25,109240,109241,109243],{"class":27,"line":28},[25,109242,30451],{"class":31},[25,109244,108367],{"class":45},[99,109246,109247],{},"运行 renderer:",[15,109249,109251],{"className":17,"code":109250,"language":19,"meta":20,"style":20},"python ch5_renderer.py\n",[22,109252,109253],{"__ignoreMap":20},[25,109254,109255,109257],{"class":27,"line":28},[25,109256,30451],{"class":31},[25,109258,108696],{"class":45},[99,109260,109261],{},"如果在服务器上运行:",[15,109263,109265],{"className":17,"code":109264,"language":19,"meta":20,"style":20},"MUJOCO_GL=egl python ch5_renderer.py\n",[22,109266,109267],{"__ignoreMap":20},[25,109268,109269,109271,109273,109275,109278],{"class":27,"line":28},[25,109270,107885],{"class":244},[25,109272,290],{"class":240},[25,109274,107875],{"class":45},[25,109276,109277],{"class":31}," python",[25,109279,108696],{"class":45},[99,109281,107853],{},[15,109283,109285],{"className":17,"code":109284,"language":19,"meta":20,"style":20},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[22,109286,109287],{"__ignoreMap":20},[25,109288,109289,109291,109293,109295,109297],{"class":27,"line":28},[25,109290,107885],{"class":244},[25,109292,290],{"class":240},[25,109294,107879],{"class":45},[25,109296,109277],{"class":31},[25,109298,108696],{"class":45},[99,109300,109301],{},"再做几个练习：",[194,109303,109304,109311,109314,109320],{},[106,109305,109306,109307,109310],{},"把 renderer 分辨率改成 ",[22,109308,109309],{},"height=240, width=320","，观察输出 shape。",[106,109312,109313],{},"把方块颜色改成蓝色，重新保存图片。",[106,109315,109316,109317,109319],{},"把相机 ",[22,109318,104217],{}," 改远一点，观察画面中物体是否变小。",[106,109321,109322,109323,102485,109326,109329],{},"把 viewer 示例中的 ",[22,109324,109325],{},"data.time \u003C 5.0",[22,109327,109328],{},"data.time \u003C 20.0","，观察更长时间。",[182,109331,102524],{"id":102523},[210,109333,109335],{"id":109334},"viewer-窗口打不开","viewer 窗口打不开",[99,109337,109338],{},"安装:",[15,109340,109342],{"className":17,"code":109341,"language":19,"meta":20,"style":20},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[22,109343,109344],{"__ignoreMap":20},[25,109345,109346,109348,109350,109352,109354,109356,109358,109360,109362,109364,109366],{"class":27,"line":28},[25,109347,24684],{"class":31},[25,109349,26386],{"class":45},[25,109351,23942],{"class":45},[25,109353,26471],{"class":35},[25,109355,102577],{"class":45},[25,109357,100905],{"class":45},[25,109359,102582],{"class":45},[25,109361,100918],{"class":45},[25,109363,100924],{"class":45},[25,109365,100915],{"class":45},[25,109367,109368],{"class":45}," libXinerama\n",[210,109370,109372],{"id":109371},"glfwerror",[22,109373,109374],{},"GLFWError",[99,109376,109377],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[210,109379,109381],{"id":109380},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[99,109383,109384,109385,82610,109387,109389],{},"尝试 ",[22,109386,101108],{},[22,109388,101111],{},"。可能存在版本差异。",[210,109391,109392],{"id":109392},"保存图片是黑的",[99,109394,102646],{},[194,109396,109397,109400,109403,109413],{},[106,109398,109399],{},"XML 里是否有 light。",[106,109401,109402],{},"相机是否对着模型。",[106,109404,109405,109406,109409,109410,28456],{},"是否先 ",[22,109407,109408],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[22,109411,109412],{},"renderer.render()",[106,109414,109415],{},"物体是否已经掉出视野。",[210,109417,109418],{"id":109418},"远程服务器没有显示器",[99,109420,109421],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[15,109423,109424],{"className":17,"code":109264,"language":19,"meta":20,"style":20},[22,109425,109426],{"__ignoreMap":20},[25,109427,109428,109430,109432,109434,109436],{"class":27,"line":28},[25,109429,107885],{"class":244},[25,109431,290],{"class":240},[25,109433,107875],{"class":45},[25,109435,109277],{"class":31},[25,109437,108696],{"class":45},[99,109439,109440],{},"如果 EGL 不可用，再尝试：",[15,109442,109443],{"className":17,"code":109284,"language":19,"meta":20,"style":20},[22,109444,109445],{"__ignoreMap":20},[25,109446,109447,109449,109451,109453,109455],{"class":27,"line":28},[25,109448,107885],{"class":244},[25,109450,290],{"class":240},[25,109452,107879],{"class":45},[25,109454,109277],{"class":31},[25,109456,108696],{"class":45},[182,109458,102678],{"id":102677},[99,109460,109461],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[194,109463,109464,109467,109470],{},[106,109465,109466],{},"先用 viewer 看模型和控制是否正常。",[106,109468,109469],{},"再用 renderer 保存图片或构造视觉观测。",[106,109471,109472],{},"最后把状态、动作、图像、奖励组织成训练数据。",[159,109474,109475],{},"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":20,"searchDepth":39,"depth":39,"links":109477},[109478,109479,109480,109485,109490,109491,109492,109499],{"id":100717,"depth":39,"text":100718},{"id":100840,"depth":39,"text":100841},{"id":101115,"depth":39,"text":101116,"children":109481},[109482,109483,109484],{"id":107982,"depth":51,"text":107983},{"id":108012,"depth":51,"text":108013},{"id":108047,"depth":51,"text":108048},{"id":101323,"depth":39,"text":101324,"children":109486},[109487,109488,109489],{"id":101643,"depth":51,"text":101643},{"id":108792,"depth":51,"text":108793},{"id":108970,"depth":51,"text":108971},{"id":102386,"depth":39,"text":102387},{"id":102418,"depth":39,"text":102419},{"id":102523,"depth":39,"text":102524,"children":109493},[109494,109495,109496,109497,109498],{"id":109334,"depth":51,"text":109335},{"id":109371,"depth":51,"text":109374},{"id":109380,"depth":51,"text":109381},{"id":109392,"depth":51,"text":109392},{"id":109418,"depth":51,"text":109418},{"id":102677,"depth":39,"text":102678},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107590,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109506,"title":109507,"body":109508,"description":20,"extension":165,"meta":111419,"navigation":167,"path":111420,"seo":111421,"stem":111422,"__hash__":111423},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109509,"toc":111395},[109510,109513,109515,109518,109520,109539,109542,109548,109551,109553,109555,109579,109581,109595,109597,109638,109640,109651,109653,109656,109662,109665,109699,109702,109734,109737,109769,109773,109776,109816,109819,109825,109828,109834,109838,109841,109847,109850,109854,109857,109897,109899,109912,109915,109917,110499,110501,110513,110516,110527,110529,110532,110551,110563,110566,110587,110590,110593,110636,110639,110642,110662,110669,110671,110689,110704,110707,110713,110716,110722,110739,110746,110777,110788,110822,110833,110850,110859,110867,110872,110886,110889,110910,110916,110930,110935,110965,110975,111000,111008,111031,111034,111050,111053,111061,111067,111089,111102,111123,111132,111171,111182,111184,111187,111193,111196,111199,111205,111208,111228,111231,111233,111272,111274,111277,111285,111288,111291,111318,111321,111331,111337,111340,111346,111348,111354,111358,111361,111363,111366,111390,111393],[10,109511,109507],{"id":109512},"_6控制任务cartpole",[182,109514,100718],{"id":100717},[99,109516,109517],{},"本章搭建一个最小 Cartpole 控制任务。",[99,109519,104402],{},[194,109521,109522,109525,109527,109530,109533,109536],{},[106,109523,109524],{},"slide joint",[106,109526,106255],{},[106,109528,109529],{},"cart force actuator",[106,109531,109532],{},"状态观测",[106,109534,109535],{},"简单控制循环",[106,109537,109538],{},"reward 设计雏形",[99,109540,109541],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[15,109543,109546],{"className":109544,"code":109545,"language":5297,"meta":20},[5295],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[22,109547,109545],{"__ignoreMap":20},[99,109549,109550],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[182,109552,100841],{"id":100840},[99,109554,100844],{},[15,109556,109557],{"className":17,"code":104459,"language":19,"meta":20,"style":20},[22,109558,109559],{"__ignoreMap":20},[25,109560,109561,109563,109565,109567,109569,109571,109573,109575,109577],{"class":27,"line":28},[25,109562,24684],{"class":31},[25,109564,26386],{"class":45},[25,109566,23942],{"class":45},[25,109568,26471],{"class":35},[25,109570,104474],{"class":45},[25,109572,100869],{"class":45},[25,109574,102572],{"class":45},[25,109576,100885],{"class":45},[25,109578,104483],{"class":45},[99,109580,102890],{},[15,109582,109583],{"className":17,"code":100990,"language":19,"meta":20,"style":20},[22,109584,109585],{"__ignoreMap":20},[25,109586,109587,109589,109591,109593],{"class":27,"line":28},[25,109588,23939],{"class":31},[25,109590,23942],{"class":45},[25,109592,101001],{"class":45},[25,109594,101004],{"class":45},[99,109596,102907],{},[15,109598,109600],{"className":17,"code":109599,"language":19,"meta":20,"style":20},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[22,109601,109602,109619,109628],{"__ignoreMap":20},[25,109603,109604,109606,109608,109610,109613,109615,109617],{"class":27,"line":28},[25,109605,30401],{"class":31},[25,109607,29247],{"class":45},[25,109609,25222],{"class":35},[25,109611,109612],{"class":45}," mujoco-cartpole",[25,109614,101046],{"class":45},[25,109616,101049],{"class":35},[25,109618,101052],{"class":35},[25,109620,109621,109623,109625],{"class":27,"line":39},[25,109622,30401],{"class":31},[25,109624,101059],{"class":45},[25,109626,109627],{"class":45}," mujoco-cartpole\n",[25,109629,109630,109632,109634,109636],{"class":27,"line":51},[25,109631,23939],{"class":31},[25,109633,23942],{"class":45},[25,109635,101001],{"class":45},[25,109637,101004],{"class":45},[99,109639,101075],{},[194,109641,109642,109645,109648],{},[106,109643,109644],{},"本章不依赖 Gymnasium。",[106,109646,109647],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[106,109649,109650],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[182,109652,101116],{"id":101115},[99,109654,109655],{},"Cartpole 的模型结构:",[15,109657,109660],{"className":109658,"code":109659,"language":5297,"meta":20},[5295],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[22,109661,109659],{"__ignoreMap":20},[99,109663,109664],{},"小车通过 slide joint 左右移动:",[15,109666,109668],{"className":53138,"code":109667,"language":53140,"meta":20,"style":20},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[22,109669,109670],{"__ignoreMap":20},[25,109671,109672,109674,109676,109678,109680,109683,109685,109687,109690,109692,109694,109697],{"class":27,"line":28},[25,109673,1153],{"class":244},[25,109675,103027],{"class":51371},[25,109677,15030],{"class":31},[25,109679,290],{"class":244},[25,109681,109682],{"class":45},"\"cart_x\"",[25,109684,53895],{"class":31},[25,109686,290],{"class":244},[25,109688,109689],{"class":45},"\"slide\"",[25,109691,106099],{"class":31},[25,109693,290],{"class":244},[25,109695,109696],{"class":45},"\"1 0 0\"",[25,109698,101215],{"class":244},[99,109700,109701],{},"杆子通过 hinge joint 旋转:",[15,109703,109705],{"className":53138,"code":109704,"language":53140,"meta":20,"style":20},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[22,109706,109707],{"__ignoreMap":20},[25,109708,109709,109711,109713,109715,109717,109720,109722,109724,109726,109728,109730,109732],{"class":27,"line":28},[25,109710,1153],{"class":244},[25,109712,103027],{"class":51371},[25,109714,15030],{"class":31},[25,109716,290],{"class":244},[25,109718,109719],{"class":45},"\"pole_hinge\"",[25,109721,53895],{"class":31},[25,109723,290],{"class":244},[25,109725,106090],{"class":45},[25,109727,106099],{"class":31},[25,109729,290],{"class":244},[25,109731,106104],{"class":45},[25,109733,101215],{"class":244},[99,109735,109736],{},"控制力作用在小车 slide joint 上:",[15,109738,109740],{"className":53138,"code":109739,"language":53140,"meta":20,"style":20},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[22,109741,109742],{"__ignoreMap":20},[25,109743,109744,109746,109748,109750,109752,109755,109757,109759,109761,109763,109765,109767],{"class":27,"line":28},[25,109745,1153],{"class":244},[25,109747,106145],{"class":51371},[25,109749,15030],{"class":31},[25,109751,290],{"class":244},[25,109753,109754],{"class":45},"\"cart_motor\"",[25,109756,106155],{"class":31},[25,109758,290],{"class":244},[25,109760,109682],{"class":45},[25,109762,106162],{"class":31},[25,109764,290],{"class":244},[25,109766,54387],{"class":45},[25,109768,101215],{"class":244},[210,109770,109772],{"id":109771},"cartpole-的状态是什么","Cartpole 的状态是什么",[99,109774,109775],{},"这个简化模型有两个关节：",[380,109777,109778,109789],{},[383,109779,109780],{},[386,109781,109782,109784,109786],{},[389,109783,102830],{"align":23846},[389,109785,23847],{"align":23846},[389,109787,109788],{"align":23846},"对应状态",[427,109790,109791,109804],{},[386,109792,109793,109798,109801],{},[432,109794,109795],{"align":23846},[22,109796,109797],{},"cart_x",[432,109799,109800],{"align":23846},"slide",[432,109802,109803],{"align":23846},"小车 x 位置",[386,109805,109806,109811,109813],{},[432,109807,109808],{"align":23846},[22,109809,109810],{},"pole_hinge",[432,109812,105911],{"align":23846},[432,109814,109815],{"align":23846},"杆子角度",[99,109817,109818],{},"所以：",[15,109820,109823],{"className":109821,"code":109822,"language":5297,"meta":20},[5295],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[22,109824,109822],{"__ignoreMap":20},[99,109826,109827],{},"把它们拼起来就是观测：",[15,109829,109832],{"className":109830,"code":109831,"language":5297,"meta":20},[5295],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[22,109833,109831],{"__ignoreMap":20},[210,109835,109837],{"id":109836},"action-是什么","action 是什么",[99,109839,109840],{},"本章只有一个 actuator：",[15,109842,109845],{"className":109843,"code":109844,"language":5297,"meta":20},[5295],"data.ctrl[0] = action\n",[22,109846,109844],{"__ignoreMap":20},[99,109848,109849],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[210,109851,109853],{"id":109852},"reward-是什么","reward 是什么",[99,109855,109856],{},"奖励函数：",[15,109858,109860],{"className":30449,"code":109859,"language":30451,"meta":20,"style":20},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[22,109861,109862],{"__ignoreMap":20},[25,109863,109864,109866,109869,109871,109873,109875,109878,109880,109883,109885,109887,109889,109892,109894],{"class":27,"line":28},[25,109865,17156],{"class":240},[25,109867,109868],{"class":35}," float",[25,109870,245],{"class":244},[25,109872,102474],{"class":35},[25,109874,52342],{"class":240},[25,109876,109877],{"class":35}," 0.1",[25,109879,6628],{"class":240},[25,109881,109882],{"class":244}," cart_x ",[25,109884,698],{"class":240},[25,109886,109882],{"class":244},[25,109888,775],{"class":240},[25,109890,109891],{"class":244}," pole_angle ",[25,109893,698],{"class":240},[25,109895,109896],{"class":244}," pole_angle)\n",[99,109898,106297],{},[194,109900,109901,109906,109909],{},[106,109902,109903,109904,28456],{},"基础奖励是 ",[22,109905,102474],{},[106,109907,109908],{},"小车离中心越远，扣分越多。",[106,109910,109911],{},"杆子角度越大，扣分越多。",[99,109913,109914],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[182,109916,101324],{"id":101323},[15,109918,109920],{"className":30449,"code":109919,"language":30451,"meta":20,"style":20},"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",[22,109921,109922,109928,109938,109942,109946,109954,109959,109963,109967,109971,109976,109980,109985,109990,109995,109999,110004,110009,110014,110018,110022,110026,110030,110034,110039,110043,110047,110051,110055,110059,110069,110076,110080,110084,110098,110112,110125,110155,110159,110163,110175,110187,110195,110199,110212,110216,110220,110229,110233,110249,110259,110272,110285,110289,110312,110330,110334,110346,110350,110354,110364,110374,110378,110394,110435,110439,110459,110475,110479,110483,110495],{"__ignoreMap":20},[25,109923,109924,109926],{"class":27,"line":28},[25,109925,30463],{"class":240},[25,109927,101372],{"class":244},[25,109929,109930,109932,109934,109936],{"class":27,"line":39},[25,109931,30463],{"class":240},[25,109933,31451],{"class":244},[25,109935,31454],{"class":240},[25,109937,31457],{"class":244},[25,109939,109940],{"class":27,"line":51},[25,109941,2510],{"emptyLinePlaceholder":167},[25,109943,109944],{"class":27,"line":59},[25,109945,2510],{"emptyLinePlaceholder":167},[25,109947,109948,109950,109952],{"class":27,"line":67},[25,109949,101385],{"class":35},[25,109951,13674],{"class":240},[25,109953,101390],{"class":45},[25,109955,109956],{"class":27,"line":75},[25,109957,109958],{"class":45},"\u003Cmujoco model=\"cartpole\">\n",[25,109960,109961],{"class":27,"line":83},[25,109962,101400],{"class":45},[25,109964,109965],{"class":27,"line":91},[25,109966,2510],{"emptyLinePlaceholder":167},[25,109968,109969],{"class":27,"line":1429},[25,109970,101409],{"class":45},[25,109972,109973],{"class":27,"line":1441},[25,109974,109975],{"class":45},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[25,109977,109978],{"class":27,"line":1723},[25,109979,2510],{"emptyLinePlaceholder":167},[25,109981,109982],{"class":27,"line":1728},[25,109983,109984],{"class":45},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[25,109986,109987],{"class":27,"line":1734},[25,109988,109989],{"class":45},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[25,109991,109992],{"class":27,"line":1739},[25,109993,109994],{"class":45},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[25,109996,109997],{"class":27,"line":1753},[25,109998,2510],{"emptyLinePlaceholder":167},[25,110000,110001],{"class":27,"line":1758},[25,110002,110003],{"class":45},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[25,110005,110006],{"class":27,"line":1764},[25,110007,110008],{"class":45},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[25,110010,110011],{"class":27,"line":1785},[25,110012,110013],{"class":45},"        \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",[25,110015,110016],{"class":27,"line":1790},[25,110017,106509],{"class":45},[25,110019,110020],{"class":27,"line":1804},[25,110021,101438],{"class":45},[25,110023,110024],{"class":27,"line":1809},[25,110025,101443],{"class":45},[25,110027,110028],{"class":27,"line":1838},[25,110029,2510],{"emptyLinePlaceholder":167},[25,110031,110032],{"class":27,"line":1843},[25,110033,106526],{"class":45},[25,110035,110036],{"class":27,"line":1860},[25,110037,110038],{"class":45},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[25,110040,110041],{"class":27,"line":1865},[25,110042,106536],{"class":45},[25,110044,110045],{"class":27,"line":1870},[25,110046,101448],{"class":45},[25,110048,110049],{"class":27,"line":1875},[25,110050,95769],{"class":45},[25,110052,110053],{"class":27,"line":1889},[25,110054,2510],{"emptyLinePlaceholder":167},[25,110056,110057],{"class":27,"line":1894},[25,110058,2510],{"emptyLinePlaceholder":167},[25,110060,110061,110063,110066],{"class":27,"line":2687},[25,110062,32018],{"class":240},[25,110064,110065],{"class":31}," get_observation",[25,110067,110068],{"class":244},"(data: mujoco.MjData) -> np.ndarray:\n",[25,110070,110071,110073],{"class":27,"line":2701},[25,110072,4200],{"class":240},[25,110074,110075],{"class":244}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[25,110077,110078],{"class":27,"line":2709},[25,110079,2510],{"emptyLinePlaceholder":167},[25,110081,110082],{"class":27,"line":2714},[25,110083,2510],{"emptyLinePlaceholder":167},[25,110085,110086,110088,110091,110094,110096],{"class":27,"line":2720},[25,110087,32018],{"class":240},[25,110089,110090],{"class":31}," compute_reward",[25,110092,110093],{"class":244},"(obs: np.ndarray) -> ",[25,110095,284],{"class":35},[25,110097,3849],{"class":244},[25,110099,110100,110103,110105,110108,110110],{"class":27,"line":2726},[25,110101,110102],{"class":244},"    cart_x ",[25,110104,290],{"class":240},[25,110106,110107],{"class":244}," obs[",[25,110109,434],{"class":35},[25,110111,33317],{"class":244},[25,110113,110114,110117,110119,110121,110123],{"class":27,"line":2731},[25,110115,110116],{"class":244},"    pole_angle ",[25,110118,290],{"class":240},[25,110120,110107],{"class":244},[25,110122,460],{"class":35},[25,110124,33317],{"class":244},[25,110126,110127,110129,110131,110133,110135,110137,110139,110141,110143,110145,110147,110149,110151,110153],{"class":27,"line":8058},[25,110128,4200],{"class":240},[25,110130,109868],{"class":35},[25,110132,245],{"class":244},[25,110134,102474],{"class":35},[25,110136,52342],{"class":240},[25,110138,109877],{"class":35},[25,110140,6628],{"class":240},[25,110142,109882],{"class":244},[25,110144,698],{"class":240},[25,110146,109882],{"class":244},[25,110148,775],{"class":240},[25,110150,109891],{"class":244},[25,110152,698],{"class":240},[25,110154,109896],{"class":244},[25,110156,110157],{"class":27,"line":8082},[25,110158,2510],{"emptyLinePlaceholder":167},[25,110160,110161],{"class":27,"line":8087},[25,110162,2510],{"emptyLinePlaceholder":167},[25,110164,110165,110167,110169,110171,110173],{"class":27,"line":8093},[25,110166,32018],{"class":240},[25,110168,2083],{"class":31},[25,110170,101469],{"class":244},[25,110172,95757],{"class":35},[25,110174,3849],{"class":244},[25,110176,110177,110179,110181,110183,110185],{"class":27,"line":8120},[25,110178,101478],{"class":244},[25,110180,290],{"class":240},[25,110182,101483],{"class":244},[25,110184,101385],{"class":35},[25,110186,251],{"class":244},[25,110188,110189,110191,110193],{"class":27,"line":8125},[25,110190,101492],{"class":244},[25,110192,290],{"class":240},[25,110194,101497],{"class":244},[25,110196,110197],{"class":27,"line":8131},[25,110198,2510],{"emptyLinePlaceholder":167},[25,110200,110201,110203,110205,110207,110209],{"class":27,"line":8143},[25,110202,105140],{"class":244},[25,110204,460],{"class":35},[25,110206,4553],{"class":244},[25,110208,290],{"class":240},[25,110210,110211],{"class":35}," 0.1\n",[25,110213,110214],{"class":27,"line":8155},[25,110215,105153],{"class":244},[25,110217,110218],{"class":27,"line":8167},[25,110219,2510],{"emptyLinePlaceholder":167},[25,110221,110222,110225,110227],{"class":27,"line":9826},[25,110223,110224],{"class":244},"    total_reward ",[25,110226,290],{"class":240},[25,110228,104832],{"class":35},[25,110230,110231],{"class":27,"line":9851},[25,110232,2510],{"emptyLinePlaceholder":167},[25,110234,110235,110237,110239,110241,110243,110245,110247],{"class":27,"line":9874},[25,110236,3311],{"class":240},[25,110238,31687],{"class":244},[25,110240,26114],{"class":240},[25,110242,32514],{"class":35},[25,110244,245],{"class":244},[25,110246,6520],{"class":35},[25,110248,30857],{"class":244},[25,110250,110251,110254,110256],{"class":27,"line":9898},[25,110252,110253],{"class":244},"        obs ",[25,110255,290],{"class":240},[25,110257,110258],{"class":244}," get_observation(data)\n",[25,110260,110261,110264,110266,110268,110270],{"class":27,"line":9903},[25,110262,110263],{"class":244},"        pole_angle ",[25,110265,290],{"class":240},[25,110267,110107],{"class":244},[25,110269,460],{"class":35},[25,110271,33317],{"class":244},[25,110273,110274,110277,110279,110281,110283],{"class":27,"line":9908},[25,110275,110276],{"class":244},"        pole_angular_velocity ",[25,110278,290],{"class":240},[25,110280,110107],{"class":244},[25,110282,315],{"class":35},[25,110284,33317],{"class":244},[25,110286,110287],{"class":27,"line":9913},[25,110288,2510],{"emptyLinePlaceholder":167},[25,110290,110291,110294,110296,110299,110301,110303,110305,110307,110309],{"class":27,"line":9922},[25,110292,110293],{"class":244},"        action ",[25,110295,290],{"class":240},[25,110297,110298],{"class":35}," 2.0",[25,110300,6628],{"class":240},[25,110302,109891],{"class":244},[25,110304,724],{"class":240},[25,110306,61938],{"class":35},[25,110308,6628],{"class":240},[25,110310,110311],{"class":244}," pole_angular_velocity\n",[25,110313,110314,110316,110318,110320,110322,110324,110326,110328],{"class":27,"line":9927},[25,110315,110293],{"class":244},[25,110317,290],{"class":240},[25,110319,107518],{"class":244},[25,110321,775],{"class":240},[25,110323,102474],{"class":35},[25,110325,12545],{"class":244},[25,110327,102474],{"class":35},[25,110329,251],{"class":244},[25,110331,110332],{"class":27,"line":9933},[25,110333,2510],{"emptyLinePlaceholder":167},[25,110335,110336,110338,110340,110342,110344],{"class":27,"line":9954},[25,110337,106688],{"class":244},[25,110339,434],{"class":35},[25,110341,4553],{"class":244},[25,110343,290],{"class":240},[25,110345,107541],{"class":244},[25,110347,110348],{"class":27,"line":9960},[25,110349,101587],{"class":244},[25,110351,110352],{"class":27,"line":9974},[25,110353,2510],{"emptyLinePlaceholder":167},[25,110355,110356,110359,110361],{"class":27,"line":9980},[25,110357,110358],{"class":244},"        reward ",[25,110360,290],{"class":240},[25,110362,110363],{"class":244}," compute_reward(get_observation(data))\n",[25,110365,110366,110369,110371],{"class":27,"line":10007},[25,110367,110368],{"class":244},"        total_reward ",[25,110370,9587],{"class":240},[25,110372,110373],{"class":244}," reward\n",[25,110375,110376],{"class":27,"line":10016},[25,110377,2510],{"emptyLinePlaceholder":167},[25,110379,110380,110382,110384,110386,110388,110390,110392],{"class":27,"line":10022},[25,110381,2607],{"class":240},[25,110383,31687],{"class":244},[25,110385,571],{"class":240},[25,110387,5864],{"class":35},[25,110389,101630],{"class":240},[25,110391,4203],{"class":35},[25,110393,3849],{"class":244},[25,110395,110396,110398,110400,110403,110406,110409,110412,110414,110417,110420,110422,110424,110426,110428,110431,110433],{"class":27,"line":10030},[25,110397,34721],{"class":35},[25,110399,245],{"class":244},[25,110401,110402],{"class":45},"\"step:\"",[25,110404,110405],{"class":244},", step, ",[25,110407,110408],{"class":45},"\"obs:\"",[25,110410,110411],{"class":244},", np.round(obs, ",[25,110413,315],{"class":35},[25,110415,110416],{"class":244},"), ",[25,110418,110419],{"class":45},"\"action:\"",[25,110421,12545],{"class":244},[25,110423,32089],{"class":35},[25,110425,245],{"class":244},[25,110427,284],{"class":35},[25,110429,110430],{"class":244},"(action), ",[25,110432,315],{"class":35},[25,110434,30568],{"class":244},[25,110436,110437],{"class":27,"line":10035},[25,110438,2510],{"emptyLinePlaceholder":167},[25,110440,110441,110443,110445,110448,110450,110452,110455,110457],{"class":27,"line":16714},[25,110442,31370],{"class":35},[25,110444,245],{"class":244},[25,110446,110447],{"class":45},"\"total_reward:\"",[25,110449,12545],{"class":244},[25,110451,32089],{"class":35},[25,110453,110454],{"class":244},"(total_reward, ",[25,110456,315],{"class":35},[25,110458,30568],{"class":244},[25,110460,110461,110463,110465,110468,110471,110473],{"class":27,"line":16720},[25,110462,31370],{"class":35},[25,110464,245],{"class":244},[25,110466,110467],{"class":45},"\"final obs:\"",[25,110469,110470],{"class":244},", np.round(get_observation(data), ",[25,110472,315],{"class":35},[25,110474,30568],{"class":244},[25,110476,110477],{"class":27,"line":16743},[25,110478,2510],{"emptyLinePlaceholder":167},[25,110480,110481],{"class":27,"line":16749},[25,110482,2510],{"emptyLinePlaceholder":167},[25,110484,110485,110487,110489,110491,110493],{"class":27,"line":16772},[25,110486,1642],{"class":240},[25,110488,31291],{"class":35},[25,110490,101630],{"class":240},[25,110492,101633],{"class":45},[25,110494,3849],{"class":244},[25,110496,110497],{"class":27,"line":16786},[25,110498,101640],{"class":244},[99,110500,103641],{},[15,110502,110504],{"className":17,"code":110503,"language":19,"meta":20,"style":20},"touch ch6_cartpole.py\n",[22,110505,110506],{"__ignoreMap":20},[25,110507,110508,110510],{"class":27,"line":28},[25,110509,101354],{"class":31},[25,110511,110512],{"class":45}," ch6_cartpole.py\n",[99,110514,110515],{},"运行：",[15,110517,110519],{"className":17,"code":110518,"language":19,"meta":20,"style":20},"python ch6_cartpole.py\n",[22,110520,110521],{"__ignoreMap":20},[25,110522,110523,110525],{"class":27,"line":28},[25,110524,30451],{"class":31},[25,110526,110512],{"class":45},[210,110528,101643],{"id":101643},[99,110530,110531],{},"构造观测：",[15,110533,110535],{"className":30449,"code":110534,"language":30451,"meta":20,"style":20},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[22,110536,110537,110545],{"__ignoreMap":20},[25,110538,110539,110541,110543],{"class":27,"line":28},[25,110540,32018],{"class":240},[25,110542,110065],{"class":31},[25,110544,110068],{"class":244},[25,110546,110547,110549],{"class":27,"line":39},[25,110548,4200],{"class":240},[25,110550,110075],{"class":244},[99,110552,110553,110556,110557,110559,110560,110562],{},[22,110554,110555],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[22,110558,104101],{}," 2 维，",[22,110561,104431],{}," 2 维，所以 obs 是 4 维。",[99,110564,110565],{},"设置初始角度：",[15,110567,110569],{"className":30449,"code":110568,"language":30451,"meta":20,"style":20},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[22,110570,110571,110583],{"__ignoreMap":20},[25,110572,110573,110575,110577,110579,110581],{"class":27,"line":28},[25,110574,104770],{"class":244},[25,110576,460],{"class":35},[25,110578,4553],{"class":244},[25,110580,290],{"class":240},[25,110582,110211],{"class":35},[25,110584,110585],{"class":27,"line":39},[25,110586,104614],{"class":244},[99,110588,110589],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[99,110591,110592],{},"简单反馈控制：",[15,110594,110596],{"className":30449,"code":110595,"language":30451,"meta":20,"style":20},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[22,110597,110598,110618],{"__ignoreMap":20},[25,110599,110600,110602,110604,110606,110608,110610,110612,110614,110616],{"class":27,"line":28},[25,110601,107513],{"class":244},[25,110603,290],{"class":240},[25,110605,110298],{"class":35},[25,110607,6628],{"class":240},[25,110609,109891],{"class":244},[25,110611,724],{"class":240},[25,110613,61938],{"class":35},[25,110615,6628],{"class":240},[25,110617,110311],{"class":244},[25,110619,110620,110622,110624,110626,110628,110630,110632,110634],{"class":27,"line":39},[25,110621,107513],{"class":244},[25,110623,290],{"class":240},[25,110625,107518],{"class":244},[25,110627,775],{"class":240},[25,110629,102474],{"class":35},[25,110631,12545],{"class":244},[25,110633,102474],{"class":35},[25,110635,251],{"class":244},[99,110637,110638],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[99,110640,110641],{},"限制动作：",[15,110643,110645],{"className":30449,"code":110644,"language":30451,"meta":20,"style":20},"np.clip(action, -1.0, 1.0)\n",[22,110646,110647],{"__ignoreMap":20},[25,110648,110649,110652,110654,110656,110658,110660],{"class":27,"line":28},[25,110650,110651],{"class":244},"np.clip(action, ",[25,110653,775],{"class":240},[25,110655,102474],{"class":35},[25,110657,12545],{"class":244},[25,110659,102474],{"class":35},[25,110661,251],{"class":244},[99,110663,110664,110665,110668],{},"因为 XML 里 ",[22,110666,110667],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[210,110670,101779],{"id":101779},[15,110672,110673],{"className":30449,"code":110534,"language":30451,"meta":20,"style":20},[22,110674,110675,110683],{"__ignoreMap":20},[25,110676,110677,110679,110681],{"class":27,"line":28},[25,110678,32018],{"class":240},[25,110680,110065],{"class":31},[25,110682,110068],{"class":244},[25,110684,110685,110687],{"class":27,"line":39},[25,110686,4200],{"class":240},[25,110688,110075],{"class":244},[99,110690,110691,110692,110695,110696,110699,110700,110703],{},"这段定义了一个函数，用来获取当前观测。",[22,110693,110694],{},"data.qpos.copy()"," 是位置数组副本，",[22,110697,110698],{},"data.qvel.copy()"," 是速度数组副本。",[22,110701,110702],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[99,110705,110706],{},"在本章模型里：",[15,110708,110711],{"className":110709,"code":110710,"language":5297,"meta":20},[5295],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[22,110712,110710],{"__ignoreMap":20},[99,110714,110715],{},"所以返回的 obs 是：",[15,110717,110720],{"className":110718,"code":110719,"language":5297,"meta":20},[5295],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[22,110721,110719],{"__ignoreMap":20},[15,110723,110725],{"className":30449,"code":110724,"language":30451,"meta":20,"style":20},"def compute_reward(obs: np.ndarray) -> float:\n",[22,110726,110727],{"__ignoreMap":20},[25,110728,110729,110731,110733,110735,110737],{"class":27,"line":28},[25,110730,32018],{"class":240},[25,110732,110090],{"class":31},[25,110734,110093],{"class":244},[25,110736,284],{"class":35},[25,110738,3849],{"class":244},[99,110740,110741,110742,110745],{},"这行定义奖励函数。输入是观测 ",[22,110743,110744],{},"obs","，输出是一个浮点数奖励。",[15,110747,110749],{"className":30449,"code":110748,"language":30451,"meta":20,"style":20},"cart_x = obs[0]\npole_angle = obs[1]\n",[22,110750,110751,110764],{"__ignoreMap":20},[25,110752,110753,110756,110758,110760,110762],{"class":27,"line":28},[25,110754,110755],{"class":244},"cart_x ",[25,110757,290],{"class":240},[25,110759,110107],{"class":244},[25,110761,434],{"class":35},[25,110763,33317],{"class":244},[25,110765,110766,110769,110771,110773,110775],{"class":27,"line":39},[25,110767,110768],{"class":244},"pole_angle ",[25,110770,290],{"class":240},[25,110772,110107],{"class":244},[25,110774,460],{"class":35},[25,110776,33317],{"class":244},[99,110778,110779,110780,110783,110784,110787],{},"数组索引从 0 开始。",[22,110781,110782],{},"obs[0]"," 是第一个元素，也就是小车位置。",[22,110785,110786],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[15,110789,110790],{"className":30449,"code":109859,"language":30451,"meta":20,"style":20},[22,110791,110792],{"__ignoreMap":20},[25,110793,110794,110796,110798,110800,110802,110804,110806,110808,110810,110812,110814,110816,110818,110820],{"class":27,"line":28},[25,110795,17156],{"class":240},[25,110797,109868],{"class":35},[25,110799,245],{"class":244},[25,110801,102474],{"class":35},[25,110803,52342],{"class":240},[25,110805,109877],{"class":35},[25,110807,6628],{"class":240},[25,110809,109882],{"class":244},[25,110811,698],{"class":240},[25,110813,109882],{"class":244},[25,110815,775],{"class":240},[25,110817,109891],{"class":244},[25,110819,698],{"class":240},[25,110821,109896],{"class":244},[99,110823,110824,110825,110828,110829,110832],{},"这行计算奖励。",[22,110826,110827],{},"cart_x * cart_x"," 是小车位置的平方，",[22,110830,110831],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[15,110834,110836],{"className":30449,"code":110835,"language":30451,"meta":20,"style":20},"data.qpos[1] = 0.1\n",[22,110837,110838],{"__ignoreMap":20},[25,110839,110840,110842,110844,110846,110848],{"class":27,"line":28},[25,110841,104770],{"class":244},[25,110843,460],{"class":35},[25,110845,4553],{"class":244},[25,110847,290],{"class":240},[25,110849,110211],{"class":35},[99,110851,110852,110853,110855,110856,110858],{},"手动设置杆子的初始角度。因为 ",[22,110854,105527],{}," 是小车位置，",[22,110857,105530],{}," 是杆子角度，所以这里改的是杆子。",[15,110860,110861],{"className":30449,"code":104614,"language":30451,"meta":20,"style":20},[22,110862,110863],{"__ignoreMap":20},[25,110864,110865],{"class":27,"line":28},[25,110866,104614],{"class":244},[99,110868,105573,110869,110871],{},[22,110870,104101],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[15,110873,110875],{"className":30449,"code":110874,"language":30451,"meta":20,"style":20},"total_reward = 0.0\n",[22,110876,110877],{"__ignoreMap":20},[25,110878,110879,110882,110884],{"class":27,"line":28},[25,110880,110881],{"class":244},"total_reward ",[25,110883,290],{"class":240},[25,110885,104832],{"class":35},[99,110887,110888],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[15,110890,110892],{"className":30449,"code":110891,"language":30451,"meta":20,"style":20},"for step in range(1000):\n",[22,110893,110894],{"__ignoreMap":20},[25,110895,110896,110898,110900,110902,110904,110906,110908],{"class":27,"line":28},[25,110897,3135],{"class":240},[25,110899,31687],{"class":244},[25,110901,26114],{"class":240},[25,110903,32514],{"class":35},[25,110905,245],{"class":244},[25,110907,6520],{"class":35},[25,110909,30857],{"class":244},[99,110911,110912,110913,110915],{},"循环 1000 步。",[22,110914,107205],{}," 是当前步数，从 0 到 999。",[15,110917,110919],{"className":30449,"code":110918,"language":30451,"meta":20,"style":20},"obs = get_observation(data)\n",[22,110920,110921],{"__ignoreMap":20},[25,110922,110923,110926,110928],{"class":27,"line":28},[25,110924,110925],{"class":244},"obs ",[25,110927,290],{"class":240},[25,110929,110258],{"class":244},[99,110931,110932,110933,28456],{},"读取当前状态，保存到 ",[22,110934,110744],{},[15,110936,110938],{"className":30449,"code":110937,"language":30451,"meta":20,"style":20},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[22,110939,110940,110952],{"__ignoreMap":20},[25,110941,110942,110944,110946,110948,110950],{"class":27,"line":28},[25,110943,110768],{"class":244},[25,110945,290],{"class":240},[25,110947,110107],{"class":244},[25,110949,460],{"class":35},[25,110951,33317],{"class":244},[25,110953,110954,110957,110959,110961,110963],{"class":27,"line":39},[25,110955,110956],{"class":244},"pole_angular_velocity ",[25,110958,290],{"class":240},[25,110960,110107],{"class":244},[25,110962,315],{"class":35},[25,110964,33317],{"class":244},[99,110966,110967,110968,110971,110972,28456],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[22,110969,110970],{},"obs[3]","？因为 obs 的顺序是 ",[22,110973,110974],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[15,110976,110978],{"className":30449,"code":110977,"language":30451,"meta":20,"style":20},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[22,110979,110980],{"__ignoreMap":20},[25,110981,110982,110984,110986,110988,110990,110992,110994,110996,110998],{"class":27,"line":28},[25,110983,107513],{"class":244},[25,110985,290],{"class":240},[25,110987,110298],{"class":35},[25,110989,6628],{"class":240},[25,110991,109891],{"class":244},[25,110993,724],{"class":240},[25,110995,61938],{"class":35},[25,110997,6628],{"class":240},[25,110999,110311],{"class":244},[99,111001,111002,111003,101089,111005,111007],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[22,111004,105331],{},[22,111006,35400],{}," 是人为设置的系数，不是固定公式。",[15,111009,111011],{"className":30449,"code":111010,"language":30451,"meta":20,"style":20},"action = np.clip(action, -1.0, 1.0)\n",[22,111012,111013],{"__ignoreMap":20},[25,111014,111015,111017,111019,111021,111023,111025,111027,111029],{"class":27,"line":28},[25,111016,107513],{"class":244},[25,111018,290],{"class":240},[25,111020,107518],{"class":244},[25,111022,775],{"class":240},[25,111024,102474],{"class":35},[25,111026,12545],{"class":244},[25,111028,102474],{"class":35},[25,111030,251],{"class":244},[99,111032,111033],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[15,111035,111036],{"className":30449,"code":109844,"language":30451,"meta":20,"style":20},[22,111037,111038],{"__ignoreMap":20},[25,111039,111040,111042,111044,111046,111048],{"class":27,"line":28},[25,111041,105942],{"class":244},[25,111043,434],{"class":35},[25,111045,4553],{"class":244},[25,111047,290],{"class":240},[25,111049,107541],{"class":244},[99,111051,111052],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[15,111054,111055],{"className":30449,"code":104576,"language":30451,"meta":20,"style":20},[22,111056,111057],{"__ignoreMap":20},[25,111058,111059],{"class":27,"line":28},[25,111060,104576],{"class":244},[99,111062,111063,111064,111066],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[22,111065,106197],{}," 计算小车和杆子的下一刻状态。",[15,111068,111070],{"className":30449,"code":111069,"language":30451,"meta":20,"style":20},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[22,111071,111072,111081],{"__ignoreMap":20},[25,111073,111074,111077,111079],{"class":27,"line":28},[25,111075,111076],{"class":244},"reward ",[25,111078,290],{"class":240},[25,111080,110363],{"class":244},[25,111082,111083,111085,111087],{"class":27,"line":39},[25,111084,110881],{"class":244},[25,111086,9587],{"class":240},[25,111088,110373],{"class":244},[99,111090,111091,111092,111094,111095,111098,111099,28456],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[22,111093,9587],{}," 是简写，",[22,111096,111097],{},"total_reward += reward"," 等价于 ",[22,111100,111101],{},"total_reward = total_reward + reward",[15,111103,111105],{"className":30449,"code":111104,"language":30451,"meta":20,"style":20},"if step % 100 == 0:\n",[22,111106,111107],{"__ignoreMap":20},[25,111108,111109,111111,111113,111115,111117,111119,111121],{"class":27,"line":28},[25,111110,1642],{"class":240},[25,111112,31687],{"class":244},[25,111114,571],{"class":240},[25,111116,5864],{"class":35},[25,111118,101630],{"class":240},[25,111120,4203],{"class":35},[25,111122,3849],{"class":244},[99,111124,111125,111127,111128,111131],{},[22,111126,571],{}," 是取余数。",[22,111129,111130],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[15,111133,111135],{"className":30449,"code":111134,"language":30451,"meta":20,"style":20},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[22,111136,111137],{"__ignoreMap":20},[25,111138,111139,111141,111143,111145,111147,111149,111151,111153,111155,111157,111159,111161,111163,111165,111167,111169],{"class":27,"line":28},[25,111140,30486],{"class":35},[25,111142,245],{"class":244},[25,111144,110402],{"class":45},[25,111146,110405],{"class":244},[25,111148,110408],{"class":45},[25,111150,110411],{"class":244},[25,111152,315],{"class":35},[25,111154,110416],{"class":244},[25,111156,110419],{"class":45},[25,111158,12545],{"class":244},[25,111160,32089],{"class":35},[25,111162,245],{"class":244},[25,111164,284],{"class":35},[25,111166,110430],{"class":244},[25,111168,315],{"class":35},[25,111170,30568],{"class":244},[99,111172,111173,111174,111177,111178,111181],{},"打印当前步数、观测和动作。",[22,111175,111176],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[22,111179,111180],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[182,111183,102387],{"id":102386},[99,111185,111186],{},"观测向量:",[15,111188,111191],{"className":111189,"code":111190,"language":5297,"meta":20},[5295],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[22,111192,111190],{"__ignoreMap":20},[99,111194,111195],{},"控制器是教学用的简单线性反馈，不保证最优。",[99,111197,111198],{},"每隔 100 步会打印一次：",[15,111200,111203],{"className":111201,"code":111202,"language":5297,"meta":20},[5295],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[22,111204,111202],{"__ignoreMap":20},[99,111206,111207],{},"重点观察：",[194,111209,111210,111216,111221],{},[106,111211,111212,111215],{},[22,111213,111214],{},"pole_angle"," 是否越来越大。",[106,111217,111218,111220],{},[22,111219,109797],{}," 是否跑得太远。",[106,111222,111223,111224,82610,111226,28456],{},"action 是否经常被 clip 到 ",[22,111225,103986],{},[22,111227,460],{},[99,111229,111230],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[182,111232,102419],{"id":102418},[194,111234,111235,111241,111244,111250,111260,111266,111269],{},[106,111236,111237,111238,28456],{},"把初始角度改为 ",[22,111239,111240],{},"data.qpos[1] = 0.3",[106,111242,111243],{},"重新运行，观察控制是否变差。",[106,111245,111246,111247,111249],{},"把 actuator ",[22,111248,107138],{}," 改小。",[106,111251,111252,111253,111256,111257,28456],{},"打印 ",[22,111254,111255],{},"model.nq, model.nv, model.nu","，应为 ",[22,111258,111259],{},"2 2 1",[106,111261,111262,111263,111265],{},"把 reward 里的 ",[22,111264,110831],{}," 系数改大，观察总奖励变化。",[106,111267,111268],{},"把控制器改成反号，观察杆子是否更容易倒。",[106,111270,111271],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[182,111273,102524],{"id":102523},[210,111275,111276],{"id":111276},"杆子方向和预期不一致",[99,111278,102467,111279,111281,111282,111284],{},[22,111280,106310],{}," 和 capsule 的 ",[22,111283,103247],{},"，必要时用 viewer 可视化确认。",[210,111286,111287],{"id":111287},"控制器越控越倒",[99,111289,111290],{},"说明反馈符号可能反了，尝试:",[15,111292,111294],{"className":30449,"code":111293,"language":30451,"meta":20,"style":20},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[22,111295,111296],{"__ignoreMap":20},[25,111297,111298,111300,111302,111304,111306,111308,111310,111312,111314,111316],{"class":27,"line":28},[25,111299,107513],{"class":244},[25,111301,290],{"class":240},[25,111303,52342],{"class":240},[25,111305,105331],{"class":35},[25,111307,6628],{"class":240},[25,111309,109891],{"class":244},[25,111311,775],{"class":240},[25,111313,61938],{"class":35},[25,111315,6628],{"class":240},[25,111317,110311],{"class":244},[210,111319,111320],{"id":111320},"小车飞走",[99,111322,111323,111324,111326,111327,111330],{},"降低 ",[22,111325,107138],{}," 或缩小 ",[22,111328,111329],{},"action"," 的 clip 范围。",[210,111332,111334,111336],{"id":111333},"obs3-为什么是杆子角速度",[22,111335,110970],{}," 为什么是杆子角速度",[99,111338,111339],{},"因为这个模型里：",[15,111341,111344],{"className":111342,"code":111343,"language":5297,"meta":20},[5295],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[22,111345,111343],{"__ignoreMap":20},[99,111347,109818],{},[15,111349,111352],{"className":111350,"code":111351,"language":5297,"meta":20},[5295],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[22,111353,111351],{"__ignoreMap":20},[210,111355,111357],{"id":111356},"reward-变成负数是否错误","reward 变成负数是否错误",[99,111359,111360],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[182,111362,102678],{"id":102677},[99,111364,111365],{},"一个控制任务通常包含：",[194,111367,111368,111371,111379,111384,111387],{},[106,111369,111370],{},"模型：Cartpole 的 body、joint、actuator。",[106,111372,111373,111374,455,111376,111378],{},"观测：从 ",[22,111375,104101],{},[22,111377,104431],{}," 里取状态。",[106,111380,111381,111382,28456],{},"动作：写入 ",[22,111383,101147],{},[106,111385,111386],{},"奖励：根据任务目标打分。",[106,111388,111389],{},"循环：obs -> action -> step -> reward。",[99,111391,111392],{},"这就是后面 Gymnasium 环境的基本骨架。",[159,111394,104357],{},{"title":20,"searchDepth":39,"depth":39,"links":111396},[111397,111398,111399,111404,111408,111409,111410,111418],{"id":100717,"depth":39,"text":100718},{"id":100840,"depth":39,"text":100841},{"id":101115,"depth":39,"text":101116,"children":111400},[111401,111402,111403],{"id":109771,"depth":51,"text":109772},{"id":109836,"depth":51,"text":109837},{"id":109852,"depth":51,"text":109853},{"id":101323,"depth":39,"text":101324,"children":111405},[111406,111407],{"id":101643,"depth":51,"text":101643},{"id":101779,"depth":51,"text":101779},{"id":102386,"depth":39,"text":102387},{"id":102418,"depth":39,"text":102419},{"id":102523,"depth":39,"text":102524,"children":111411},[111412,111413,111414,111415,111417],{"id":111276,"depth":51,"text":111276},{"id":111287,"depth":51,"text":111287},{"id":111320,"depth":51,"text":111320},{"id":111333,"depth":51,"text":111416},"obs[3] 为什么是杆子角速度",{"id":111356,"depth":51,"text":111357},{"id":102677,"depth":39,"text":102678},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109507,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111425,"title":111426,"body":111427,"description":20,"extension":165,"meta":113441,"navigation":167,"path":113442,"seo":113443,"stem":113444,"__hash__":113445},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111428,"toc":113417},[111429,111432,111434,111437,111439,111456,111459,111462,111468,111471,111473,111475,111499,111501,111515,111517,111558,111560,111578,111580,111583,111589,111592,111620,111624,111630,111655,111658,111689,111696,111699,111702,111708,111711,111717,111720,111726,111730,111733,111758,111761,111763,112523,112525,112537,112539,112550,112552,112555,112572,112575,112577,112588,112591,112593,112639,112642,112655,112658,112740,112743,112745,112761,112771,112784,112787,112826,112836,112847,112857,112870,112873,112902,112905,112915,112918,112924,112941,112952,112954,112960,112977,112988,113009,113012,113024,113027,113048,113051,113059,113067,113084,113087,113156,113163,113171,113174,113187,113194,113196,113199,113205,113208,113211,113217,113223,113225,113265,113267,113273,113282,113285,113287,113307,113310,113313,113319,113323,113325,113352,113355,113358,113385,113391,113394,113397,113399,113402,113405,113411,113414],[10,111430,111426],{"id":111431},"_7控制任务reacher-机械臂到达目标",[182,111433,100718],{"id":100717},[99,111435,111436],{},"本章搭建一个二维两关节 reacher 任务。",[99,111438,104402],{},[194,111440,111441,111444,111447,111450,111453],{},[106,111442,111443],{},"两个 hinge joint",[106,111445,111446],{},"两个 motor actuator",[106,111448,111449],{},"site 作为末端点和目标点",[106,111451,111452],{},"根据末端和目标距离设计 reward",[106,111454,111455],{},"构造机械臂任务的基本形式",[99,111457,111458],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[99,111460,111461],{},"Reacher 任务可以理解为：",[15,111463,111466],{"className":111464,"code":111465,"language":5297,"meta":20},[5295],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[22,111467,111465],{"__ignoreMap":20},[99,111469,111470],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[182,111472,100841],{"id":100840},[99,111474,100844],{},[15,111476,111477],{"className":17,"code":104459,"language":19,"meta":20,"style":20},[22,111478,111479],{"__ignoreMap":20},[25,111480,111481,111483,111485,111487,111489,111491,111493,111495,111497],{"class":27,"line":28},[25,111482,24684],{"class":31},[25,111484,26386],{"class":45},[25,111486,23942],{"class":45},[25,111488,26471],{"class":35},[25,111490,104474],{"class":45},[25,111492,100869],{"class":45},[25,111494,102572],{"class":45},[25,111496,100885],{"class":45},[25,111498,104483],{"class":45},[99,111500,102890],{},[15,111502,111503],{"className":17,"code":100990,"language":19,"meta":20,"style":20},[22,111504,111505],{"__ignoreMap":20},[25,111506,111507,111509,111511,111513],{"class":27,"line":28},[25,111508,23939],{"class":31},[25,111510,23942],{"class":45},[25,111512,101001],{"class":45},[25,111514,101004],{"class":45},[99,111516,102907],{},[15,111518,111520],{"className":17,"code":111519,"language":19,"meta":20,"style":20},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[22,111521,111522,111539,111548],{"__ignoreMap":20},[25,111523,111524,111526,111528,111530,111533,111535,111537],{"class":27,"line":28},[25,111525,30401],{"class":31},[25,111527,29247],{"class":45},[25,111529,25222],{"class":35},[25,111531,111532],{"class":45}," mujoco-reacher",[25,111534,101046],{"class":45},[25,111536,101049],{"class":35},[25,111538,101052],{"class":35},[25,111540,111541,111543,111545],{"class":27,"line":39},[25,111542,30401],{"class":31},[25,111544,101059],{"class":45},[25,111546,111547],{"class":45}," mujoco-reacher\n",[25,111549,111550,111552,111554,111556],{"class":27,"line":51},[25,111551,23939],{"class":31},[25,111553,23942],{"class":45},[25,111555,101001],{"class":45},[25,111557,101004],{"class":45},[99,111559,101075],{},[194,111561,111562,111565,111568],{},[106,111563,111564],{},"本章使用低维状态，不使用图像输入。",[106,111566,111567],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[106,111569,111570,111571,455,111573,455,111575,111577],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[22,111572,104101],{},[22,111574,104431],{},[22,111576,103751],{}," 的方法一致。",[182,111579,101116],{"id":101115},[99,111581,111582],{},"Reacher 任务核心:",[15,111584,111587],{"className":111585,"code":111586,"language":5297,"meta":20},[5295],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[22,111588,111586],{"__ignoreMap":20},[99,111590,111591],{},"读取 site 世界坐标:",[15,111593,111595],{"className":30449,"code":111594,"language":30451,"meta":20,"style":20},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[22,111596,111597,111610],{"__ignoreMap":20},[25,111598,111599,111601,111603,111605,111608],{"class":27,"line":28},[25,111600,103705],{"class":244},[25,111602,290],{"class":240},[25,111604,103476],{"class":244},[25,111606,111607],{"class":45},"\"tip\"",[25,111609,251],{"class":244},[25,111611,111612,111615,111617],{"class":27,"line":39},[25,111613,111614],{"class":244},"tip_pos ",[25,111616,290],{"class":240},[25,111618,111619],{"class":244}," data.site_xpos[site_id]\n",[210,111621,111623],{"id":111622},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[99,111625,111626,111627,111629],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[22,111628,104101],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[15,111631,111633],{"className":30449,"code":111632,"language":30451,"meta":20,"style":20},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[22,111634,111635,111645],{"__ignoreMap":20},[25,111636,111637,111640,111642],{"class":27,"line":28},[25,111638,111639],{"class":244},"tip ",[25,111641,290],{"class":240},[25,111643,111644],{"class":244}," data.site_xpos[tip_site_id]\n",[25,111646,111647,111650,111652],{"class":27,"line":39},[25,111648,111649],{"class":244},"target ",[25,111651,290],{"class":240},[25,111653,111654],{"class":244}," data.site_xpos[target_site_id]\n",[99,111656,111657],{},"这样 reward 就很容易写：",[15,111659,111661],{"className":30449,"code":111660,"language":30451,"meta":20,"style":20},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[22,111662,111663,111678],{"__ignoreMap":20},[25,111664,111665,111668,111670,111673,111675],{"class":27,"line":28},[25,111666,111667],{"class":244},"dist ",[25,111669,290],{"class":240},[25,111671,111672],{"class":244}," np.linalg.norm(tip ",[25,111674,775],{"class":240},[25,111676,111677],{"class":244}," target)\n",[25,111679,111680,111682,111684,111686],{"class":27,"line":39},[25,111681,111076],{"class":244},[25,111683,290],{"class":240},[25,111685,52342],{"class":240},[25,111687,111688],{"class":244},"dist\n",[99,111690,111691,111692,111695],{},"距离越小，",[22,111693,111694],{},"-dist"," 越接近 0，奖励越高。",[210,111697,111698],{"id":111698},"两关节机械臂的状态",[99,111700,111701],{},"这个模型有两个 hinge joint：",[15,111703,111706],{"className":111704,"code":111705,"language":5297,"meta":20},[5295],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[22,111707,111705],{"__ignoreMap":20},[99,111709,111710],{},"再加上末端和目标位置：",[15,111712,111715],{"className":111713,"code":111714,"language":5297,"meta":20},[5295],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[22,111716,111714],{"__ignoreMap":20},[99,111718,111719],{},"总维度：",[15,111721,111724],{"className":111722,"code":111723,"language":5297,"meta":20},[5295],"2 + 2 + 3 + 3 = 10\n",[22,111725,111723],{"__ignoreMap":20},[210,111727,111729],{"id":111728},"为什么-gravity-是-0","为什么 gravity 是 0",[99,111731,111732],{},"本章把重力设为：",[15,111734,111736],{"className":53138,"code":111735,"language":53140,"meta":20,"style":20},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[22,111737,111738],{"__ignoreMap":20},[25,111739,111740,111742,111744,111746,111748,111750,111752,111754,111756],{"class":27,"line":28},[25,111741,1153],{"class":244},[25,111743,69237],{"class":51371},[25,111745,101265],{"class":31},[25,111747,290],{"class":244},[25,111749,101270],{"class":45},[25,111751,101273],{"class":31},[25,111753,290],{"class":244},[25,111755,103842],{"class":45},[25,111757,101215],{"class":244},[99,111759,111760],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[182,111762,101324],{"id":101323},[15,111764,111766],{"className":30449,"code":111765,"language":30451,"meta":20,"style":20},"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",[22,111767,111768,111774,111784,111788,111792,111800,111805,111810,111814,111818,111823,111828,111832,111837,111842,111847,111851,111856,111861,111866,111871,111875,111879,111883,111887,111891,111896,111901,111905,111909,111913,111917,111921,111936,111945,111957,111980,111987,111991,111995,112005,112019,112033,112040,112044,112048,112062,112074,112086,112099,112114,112131,112135,112139,112151,112163,112171,112179,112183,112199,112204,112217,112230,112245,112249,112284,112316,112320,112324,112333,112337,112353,112363,112374,112390,112406,112422,112438,112442,112460,112480,112499,112503,112507,112519],{"__ignoreMap":20},[25,111769,111770,111772],{"class":27,"line":28},[25,111771,30463],{"class":240},[25,111773,101372],{"class":244},[25,111775,111776,111778,111780,111782],{"class":27,"line":39},[25,111777,30463],{"class":240},[25,111779,31451],{"class":244},[25,111781,31454],{"class":240},[25,111783,31457],{"class":244},[25,111785,111786],{"class":27,"line":51},[25,111787,2510],{"emptyLinePlaceholder":167},[25,111789,111790],{"class":27,"line":59},[25,111791,2510],{"emptyLinePlaceholder":167},[25,111793,111794,111796,111798],{"class":27,"line":67},[25,111795,101385],{"class":35},[25,111797,13674],{"class":240},[25,111799,101390],{"class":45},[25,111801,111802],{"class":27,"line":75},[25,111803,111804],{"class":45},"\u003Cmujoco model=\"two_link_reacher\">\n",[25,111806,111807],{"class":27,"line":83},[25,111808,111809],{"class":45},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[25,111811,111812],{"class":27,"line":91},[25,111813,2510],{"emptyLinePlaceholder":167},[25,111815,111816],{"class":27,"line":1429},[25,111817,101409],{"class":45},[25,111819,111820],{"class":27,"line":1441},[25,111821,111822],{"class":45},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[25,111824,111825],{"class":27,"line":1723},[25,111826,111827],{"class":45},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[25,111829,111830],{"class":27,"line":1728},[25,111831,2510],{"emptyLinePlaceholder":167},[25,111833,111834],{"class":27,"line":1734},[25,111835,111836],{"class":45},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[25,111838,111839],{"class":27,"line":1739},[25,111840,111841],{"class":45},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[25,111843,111844],{"class":27,"line":1753},[25,111845,111846],{"class":45},"      \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",[25,111848,111849],{"class":27,"line":1758},[25,111850,2510],{"emptyLinePlaceholder":167},[25,111852,111853],{"class":27,"line":1764},[25,111854,111855],{"class":45},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[25,111857,111858],{"class":27,"line":1785},[25,111859,111860],{"class":45},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[25,111862,111863],{"class":27,"line":1790},[25,111864,111865],{"class":45},"        \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",[25,111867,111868],{"class":27,"line":1804},[25,111869,111870],{"class":45},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[25,111872,111873],{"class":27,"line":1809},[25,111874,106509],{"class":45},[25,111876,111877],{"class":27,"line":1838},[25,111878,101438],{"class":45},[25,111880,111881],{"class":27,"line":1843},[25,111882,101443],{"class":45},[25,111884,111885],{"class":27,"line":1860},[25,111886,2510],{"emptyLinePlaceholder":167},[25,111888,111889],{"class":27,"line":1865},[25,111890,106526],{"class":45},[25,111892,111893],{"class":27,"line":1870},[25,111894,111895],{"class":45},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[25,111897,111898],{"class":27,"line":1875},[25,111899,111900],{"class":45},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[25,111902,111903],{"class":27,"line":1889},[25,111904,106536],{"class":45},[25,111906,111907],{"class":27,"line":1894},[25,111908,101448],{"class":45},[25,111910,111911],{"class":27,"line":2687},[25,111912,95769],{"class":45},[25,111914,111915],{"class":27,"line":2701},[25,111916,2510],{"emptyLinePlaceholder":167},[25,111918,111919],{"class":27,"line":2709},[25,111920,2510],{"emptyLinePlaceholder":167},[25,111922,111923,111925,111928,111931,111933],{"class":27,"line":2714},[25,111924,32018],{"class":240},[25,111926,111927],{"class":31}," site_position",[25,111929,111930],{"class":244},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[25,111932,1412],{"class":35},[25,111934,111935],{"class":244},") -> np.ndarray:\n",[25,111937,111938,111940,111942],{"class":27,"line":2720},[25,111939,103471],{"class":244},[25,111941,290],{"class":240},[25,111943,111944],{"class":244}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[25,111946,111947,111949,111951,111953,111955],{"class":27,"line":2726},[25,111948,3211],{"class":240},[25,111950,103520],{"class":244},[25,111952,1153],{"class":240},[25,111954,4203],{"class":35},[25,111956,3849],{"class":244},[25,111958,111959,111961,111963,111965,111967,111970,111972,111974,111976,111978],{"class":27,"line":2731},[25,111960,103503],{"class":240},[25,111962,103506],{"class":35},[25,111964,245],{"class":244},[25,111966,296],{"class":240},[25,111968,111969],{"class":45},"\"site not found: ",[25,111971,1139],{"class":35},[25,111973,79881],{"class":244},[25,111975,1189],{"class":35},[25,111977,494],{"class":45},[25,111979,251],{"class":244},[25,111981,111982,111984],{"class":27,"line":8058},[25,111983,4200],{"class":240},[25,111985,111986],{"class":244}," data.site_xpos[site_id].copy()\n",[25,111988,111989],{"class":27,"line":8082},[25,111990,2510],{"emptyLinePlaceholder":167},[25,111992,111993],{"class":27,"line":8087},[25,111994,2510],{"emptyLinePlaceholder":167},[25,111996,111997,111999,112002],{"class":27,"line":8093},[25,111998,32018],{"class":240},[25,112000,112001],{"class":31}," get_obs",[25,112003,112004],{"class":244},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[25,112006,112007,112010,112012,112015,112017],{"class":27,"line":8120},[25,112008,112009],{"class":244},"    tip ",[25,112011,290],{"class":240},[25,112013,112014],{"class":244}," site_position(model, data, ",[25,112016,111607],{"class":45},[25,112018,251],{"class":244},[25,112020,112021,112024,112026,112028,112031],{"class":27,"line":8125},[25,112022,112023],{"class":244},"    target ",[25,112025,290],{"class":240},[25,112027,112014],{"class":244},[25,112029,112030],{"class":45},"\"target\"",[25,112032,251],{"class":244},[25,112034,112035,112037],{"class":27,"line":8131},[25,112036,4200],{"class":240},[25,112038,112039],{"class":244}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[25,112041,112042],{"class":27,"line":8143},[25,112043,2510],{"emptyLinePlaceholder":167},[25,112045,112046],{"class":27,"line":8155},[25,112047,2510],{"emptyLinePlaceholder":167},[25,112049,112050,112052,112055,112058,112060],{"class":27,"line":8167},[25,112051,32018],{"class":240},[25,112053,112054],{"class":31}," reward",[25,112056,112057],{"class":244},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[25,112059,284],{"class":35},[25,112061,3849],{"class":244},[25,112063,112064,112066,112068,112070,112072],{"class":27,"line":9826},[25,112065,112009],{"class":244},[25,112067,290],{"class":240},[25,112069,112014],{"class":244},[25,112071,111607],{"class":45},[25,112073,251],{"class":244},[25,112075,112076,112078,112080,112082,112084],{"class":27,"line":9851},[25,112077,112023],{"class":244},[25,112079,290],{"class":240},[25,112081,112014],{"class":244},[25,112083,112030],{"class":45},[25,112085,251],{"class":244},[25,112087,112088,112091,112093,112095,112097],{"class":27,"line":9874},[25,112089,112090],{"class":244},"    dist ",[25,112092,290],{"class":240},[25,112094,111672],{"class":244},[25,112096,775],{"class":240},[25,112098,111677],{"class":244},[25,112100,112101,112104,112106,112109,112111],{"class":27,"line":9898},[25,112102,112103],{"class":244},"    control_cost ",[25,112105,290],{"class":240},[25,112107,112108],{"class":35}," 0.01",[25,112110,6628],{"class":240},[25,112112,112113],{"class":244}," np.sum(np.square(data.ctrl))\n",[25,112115,112116,112118,112120,112122,112124,112126,112128],{"class":27,"line":9903},[25,112117,4200],{"class":240},[25,112119,109868],{"class":35},[25,112121,245],{"class":244},[25,112123,775],{"class":240},[25,112125,111667],{"class":244},[25,112127,775],{"class":240},[25,112129,112130],{"class":244}," control_cost)\n",[25,112132,112133],{"class":27,"line":9908},[25,112134,2510],{"emptyLinePlaceholder":167},[25,112136,112137],{"class":27,"line":9913},[25,112138,2510],{"emptyLinePlaceholder":167},[25,112140,112141,112143,112145,112147,112149],{"class":27,"line":9922},[25,112142,32018],{"class":240},[25,112144,2083],{"class":31},[25,112146,101469],{"class":244},[25,112148,95757],{"class":35},[25,112150,3849],{"class":244},[25,112152,112153,112155,112157,112159,112161],{"class":27,"line":9927},[25,112154,101478],{"class":244},[25,112156,290],{"class":240},[25,112158,101483],{"class":244},[25,112160,101385],{"class":35},[25,112162,251],{"class":244},[25,112164,112165,112167,112169],{"class":27,"line":9933},[25,112166,101492],{"class":244},[25,112168,290],{"class":240},[25,112170,101497],{"class":244},[25,112172,112173,112175,112177],{"class":27,"line":9954},[25,112174,110224],{"class":244},[25,112176,290],{"class":240},[25,112178,104832],{"class":35},[25,112180,112181],{"class":27,"line":9960},[25,112182,2510],{"emptyLinePlaceholder":167},[25,112184,112185,112187,112189,112191,112193,112195,112197],{"class":27,"line":9974},[25,112186,3311],{"class":240},[25,112188,31687],{"class":244},[25,112190,26114],{"class":240},[25,112192,32514],{"class":35},[25,112194,245],{"class":244},[25,112196,65145],{"class":35},[25,112198,30857],{"class":244},[25,112200,112201],{"class":27,"line":9980},[25,112202,112203],{"class":244},"        mujoco.mj_forward(model, data)\n",[25,112205,112206,112209,112211,112213,112215],{"class":27,"line":10007},[25,112207,112208],{"class":244},"        tip ",[25,112210,290],{"class":240},[25,112212,112014],{"class":244},[25,112214,111607],{"class":45},[25,112216,251],{"class":244},[25,112218,112219,112222,112224,112226,112228],{"class":27,"line":10016},[25,112220,112221],{"class":244},"        target ",[25,112223,290],{"class":240},[25,112225,112014],{"class":244},[25,112227,112030],{"class":45},[25,112229,251],{"class":244},[25,112231,112232,112235,112237,112240,112242],{"class":27,"line":10022},[25,112233,112234],{"class":244},"        error ",[25,112236,290],{"class":240},[25,112238,112239],{"class":244}," target ",[25,112241,775],{"class":240},[25,112243,112244],{"class":244}," tip\n",[25,112246,112247],{"class":27,"line":10030},[25,112248,2510],{"emptyLinePlaceholder":167},[25,112250,112251,112253,112255,112257,112259,112262,112264,112266,112269,112271,112274,112276,112278,112280,112282],{"class":27,"line":10035},[25,112252,106688],{"class":244},[25,112254,434],{"class":35},[25,112256,4553],{"class":244},[25,112258,290],{"class":240},[25,112260,112261],{"class":244}," np.clip(",[25,112263,105331],{"class":35},[25,112265,6628],{"class":240},[25,112267,112268],{"class":244}," error[",[25,112270,321],{"class":35},[25,112272,112273],{"class":244},"], ",[25,112275,775],{"class":240},[25,112277,102474],{"class":35},[25,112279,12545],{"class":244},[25,112281,102474],{"class":35},[25,112283,251],{"class":244},[25,112285,112286,112288,112290,112292,112294,112296,112298,112300,112302,112304,112306,112308,112310,112312,112314],{"class":27,"line":16714},[25,112287,106688],{"class":244},[25,112289,460],{"class":35},[25,112291,4553],{"class":244},[25,112293,290],{"class":240},[25,112295,112261],{"class":244},[25,112297,105331],{"class":35},[25,112299,6628],{"class":240},[25,112301,112268],{"class":244},[25,112303,434],{"class":35},[25,112305,112273],{"class":244},[25,112307,775],{"class":240},[25,112309,102474],{"class":35},[25,112311,12545],{"class":244},[25,112313,102474],{"class":35},[25,112315,251],{"class":244},[25,112317,112318],{"class":27,"line":16720},[25,112319,2510],{"emptyLinePlaceholder":167},[25,112321,112322],{"class":27,"line":16743},[25,112323,101587],{"class":244},[25,112325,112326,112328,112330],{"class":27,"line":16749},[25,112327,110368],{"class":244},[25,112329,9587],{"class":240},[25,112331,112332],{"class":244}," reward(model, data)\n",[25,112334,112335],{"class":27,"line":16772},[25,112336,2510],{"emptyLinePlaceholder":167},[25,112338,112339,112341,112343,112345,112347,112349,112351],{"class":27,"line":16786},[25,112340,2607],{"class":240},[25,112342,31687],{"class":244},[25,112344,571],{"class":240},[25,112346,5864],{"class":35},[25,112348,101630],{"class":240},[25,112350,4203],{"class":35},[25,112352,3849],{"class":244},[25,112354,112355,112358,112360],{"class":27,"line":16806},[25,112356,112357],{"class":244},"            obs ",[25,112359,290],{"class":240},[25,112361,112362],{"class":244}," get_obs(model, data)\n",[25,112364,112365,112367,112369,112371],{"class":27,"line":16812},[25,112366,34721],{"class":35},[25,112368,245],{"class":244},[25,112370,110402],{"class":45},[25,112372,112373],{"class":244},", step)\n",[25,112375,112376,112378,112380,112383,112386,112388],{"class":27,"line":16823},[25,112377,34721],{"class":35},[25,112379,245],{"class":244},[25,112381,112382],{"class":45},"\"  tip:\"",[25,112384,112385],{"class":244},", np.round(tip, ",[25,112387,315],{"class":35},[25,112389,30568],{"class":244},[25,112391,112392,112394,112396,112399,112402,112404],{"class":27,"line":16846},[25,112393,34721],{"class":35},[25,112395,245],{"class":244},[25,112397,112398],{"class":45},"\"  target:\"",[25,112400,112401],{"class":244},", np.round(target, ",[25,112403,315],{"class":35},[25,112405,30568],{"class":244},[25,112407,112408,112410,112412,112415,112418,112420],{"class":27,"line":16868},[25,112409,34721],{"class":35},[25,112411,245],{"class":244},[25,112413,112414],{"class":45},"\"  ctrl:\"",[25,112416,112417],{"class":244},", np.round(data.ctrl.copy(), ",[25,112419,315],{"class":35},[25,112421,30568],{"class":244},[25,112423,112424,112426,112428,112431,112434,112436],{"class":27,"line":16873},[25,112425,34721],{"class":35},[25,112427,245],{"class":244},[25,112429,112430],{"class":45},"\"  obs_dim:\"",[25,112432,112433],{"class":244},", obs.shape[",[25,112435,434],{"class":35},[25,112437,4767],{"class":244},[25,112439,112440],{"class":27,"line":16879},[25,112441,2510],{"emptyLinePlaceholder":167},[25,112443,112444,112446,112448,112450,112452,112454,112456,112458],{"class":27,"line":16893},[25,112445,31370],{"class":35},[25,112447,245],{"class":244},[25,112449,110447],{"class":45},[25,112451,12545],{"class":244},[25,112453,32089],{"class":35},[25,112455,110454],{"class":244},[25,112457,315],{"class":35},[25,112459,30568],{"class":244},[25,112461,112462,112464,112466,112469,112472,112474,112476,112478],{"class":27,"line":16906},[25,112463,31370],{"class":35},[25,112465,245],{"class":244},[25,112467,112468],{"class":45},"\"final tip:\"",[25,112470,112471],{"class":244},", np.round(site_position(model, data, ",[25,112473,111607],{"class":45},[25,112475,110416],{"class":244},[25,112477,315],{"class":35},[25,112479,30568],{"class":244},[25,112481,112482,112484,112486,112489,112491,112493,112495,112497],{"class":27,"line":16911},[25,112483,31370],{"class":35},[25,112485,245],{"class":244},[25,112487,112488],{"class":45},"\"target:\"",[25,112490,112471],{"class":244},[25,112492,112030],{"class":45},[25,112494,110416],{"class":244},[25,112496,315],{"class":35},[25,112498,30568],{"class":244},[25,112500,112501],{"class":27,"line":16925},[25,112502,2510],{"emptyLinePlaceholder":167},[25,112504,112505],{"class":27,"line":16930},[25,112506,2510],{"emptyLinePlaceholder":167},[25,112508,112509,112511,112513,112515,112517],{"class":27,"line":16936},[25,112510,1642],{"class":240},[25,112512,31291],{"class":35},[25,112514,101630],{"class":240},[25,112516,101633],{"class":45},[25,112518,3849],{"class":244},[25,112520,112521],{"class":27,"line":16941},[25,112522,101640],{"class":244},[99,112524,103641],{},[15,112526,112528],{"className":17,"code":112527,"language":19,"meta":20,"style":20},"touch ch7_reacher.py\n",[22,112529,112530],{"__ignoreMap":20},[25,112531,112532,112534],{"class":27,"line":28},[25,112533,101354],{"class":31},[25,112535,112536],{"class":45}," ch7_reacher.py\n",[99,112538,110515],{},[15,112540,112542],{"className":17,"code":112541,"language":19,"meta":20,"style":20},"python ch7_reacher.py\n",[22,112543,112544],{"__ignoreMap":20},[25,112545,112546,112548],{"class":27,"line":28},[25,112547,30451],{"class":31},[25,112549,112536],{"class":45},[210,112551,101643],{"id":101643},[99,112553,112554],{},"读取 site 坐标：",[15,112556,112558],{"className":30449,"code":112557,"language":30451,"meta":20,"style":20},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[22,112559,112560],{"__ignoreMap":20},[25,112561,112562,112564,112566,112568,112570],{"class":27,"line":28},[25,112563,32018],{"class":240},[25,112565,111927],{"class":31},[25,112567,111930],{"class":244},[25,112569,1412],{"class":35},[25,112571,111935],{"class":244},[99,112573,112574],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[99,112576,110531],{},[15,112578,112580],{"className":30449,"code":112579,"language":30451,"meta":20,"style":20},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[22,112581,112582],{"__ignoreMap":20},[25,112583,112584,112586],{"class":27,"line":28},[25,112585,17156],{"class":240},[25,112587,112039],{"class":244},[99,112589,112590],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[99,112592,109856],{},[15,112594,112596],{"className":30449,"code":112595,"language":30451,"meta":20,"style":20},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[22,112597,112598,112610,112623],{"__ignoreMap":20},[25,112599,112600,112602,112604,112606,112608],{"class":27,"line":28},[25,112601,111667],{"class":244},[25,112603,290],{"class":240},[25,112605,111672],{"class":244},[25,112607,775],{"class":240},[25,112609,111677],{"class":244},[25,112611,112612,112615,112617,112619,112621],{"class":27,"line":39},[25,112613,112614],{"class":244},"control_cost ",[25,112616,290],{"class":240},[25,112618,112108],{"class":35},[25,112620,6628],{"class":240},[25,112622,112113],{"class":244},[25,112624,112625,112627,112629,112631,112633,112635,112637],{"class":27,"line":51},[25,112626,17156],{"class":240},[25,112628,109868],{"class":35},[25,112630,245],{"class":244},[25,112632,775],{"class":240},[25,112634,111667],{"class":244},[25,112636,775],{"class":240},[25,112638,112130],{"class":244},[99,112640,112641],{},"奖励由两部分组成：",[194,112643,112644,112649],{},[106,112645,112646,112648],{},[22,112647,111694],{},"：末端离目标越远，奖励越低。",[106,112650,112651,112654],{},[22,112652,112653],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[99,112656,112657],{},"简单控制器：",[15,112659,112661],{"className":30449,"code":112660,"language":30451,"meta":20,"style":20},"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",[22,112662,112663,112676,112708],{"__ignoreMap":20},[25,112664,112665,112668,112670,112672,112674],{"class":27,"line":28},[25,112666,112667],{"class":244},"error ",[25,112669,290],{"class":240},[25,112671,112239],{"class":244},[25,112673,775],{"class":240},[25,112675,112244],{"class":244},[25,112677,112678,112680,112682,112684,112686,112688,112690,112692,112694,112696,112698,112700,112702,112704,112706],{"class":27,"line":39},[25,112679,105942],{"class":244},[25,112681,434],{"class":35},[25,112683,4553],{"class":244},[25,112685,290],{"class":240},[25,112687,112261],{"class":244},[25,112689,105331],{"class":35},[25,112691,6628],{"class":240},[25,112693,112268],{"class":244},[25,112695,321],{"class":35},[25,112697,112273],{"class":244},[25,112699,775],{"class":240},[25,112701,102474],{"class":35},[25,112703,12545],{"class":244},[25,112705,102474],{"class":35},[25,112707,251],{"class":244},[25,112709,112710,112712,112714,112716,112718,112720,112722,112724,112726,112728,112730,112732,112734,112736,112738],{"class":27,"line":51},[25,112711,105942],{"class":244},[25,112713,460],{"class":35},[25,112715,4553],{"class":244},[25,112717,290],{"class":240},[25,112719,112261],{"class":244},[25,112721,105331],{"class":35},[25,112723,6628],{"class":240},[25,112725,112268],{"class":244},[25,112727,434],{"class":35},[25,112729,112273],{"class":244},[25,112731,775],{"class":240},[25,112733,102474],{"class":35},[25,112735,12545],{"class":244},[25,112737,102474],{"class":35},[25,112739,251],{"class":244},[99,112741,112742],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[210,112744,101779],{"id":101779},[15,112746,112747],{"className":30449,"code":112557,"language":30451,"meta":20,"style":20},[22,112748,112749],{"__ignoreMap":20},[25,112750,112751,112753,112755,112757,112759],{"class":27,"line":28},[25,112752,32018],{"class":240},[25,112754,111927],{"class":31},[25,112756,111930],{"class":244},[25,112758,1412],{"class":35},[25,112760,111935],{"class":244},[99,112762,112763,112764,112766,112767,82610,112769,28456],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[22,112765,79881],{}," 是 site 的名字，比如 ",[22,112768,111607],{},[22,112770,112030],{},[15,112772,112774],{"className":30449,"code":112773,"language":30451,"meta":20,"style":20},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[22,112775,112776],{"__ignoreMap":20},[25,112777,112778,112780,112782],{"class":27,"line":28},[25,112779,103705],{"class":244},[25,112781,290],{"class":240},[25,112783,111944],{"class":244},[99,112785,112786],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[15,112788,112790],{"className":30449,"code":112789,"language":30451,"meta":20,"style":20},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[22,112791,112792,112804],{"__ignoreMap":20},[25,112793,112794,112796,112798,112800,112802],{"class":27,"line":28},[25,112795,1642],{"class":240},[25,112797,103520],{"class":244},[25,112799,1153],{"class":240},[25,112801,4203],{"class":35},[25,112803,3849],{"class":244},[25,112805,112806,112808,112810,112812,112814,112816,112818,112820,112822,112824],{"class":27,"line":39},[25,112807,103966],{"class":240},[25,112809,103506],{"class":35},[25,112811,245],{"class":244},[25,112813,296],{"class":240},[25,112815,111969],{"class":45},[25,112817,1139],{"class":35},[25,112819,79881],{"class":244},[25,112821,1189],{"class":35},[25,112823,494],{"class":45},[25,112825,251],{"class":244},[99,112827,112828,112829,112832,112833,112835],{},"如果 site 没找到，就主动报错。",[22,112830,112831],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[22,112834,79881],{}," 的值放进字符串里。",[15,112837,112839],{"className":30449,"code":112838,"language":30451,"meta":20,"style":20},"return data.site_xpos[site_id].copy()\n",[22,112840,112841],{"__ignoreMap":20},[25,112842,112843,112845],{"class":27,"line":28},[25,112844,17156],{"class":240},[25,112846,111986],{"class":244},[99,112848,112849,112850,112852,112853,112856],{},"返回这个 site 的世界坐标。",[22,112851,103751],{}," 里的每一行都是一个 site 的 ",[22,112854,112855],{},"(x, y, z)"," 坐标。",[15,112858,112860],{"className":30449,"code":112859,"language":30451,"meta":20,"style":20},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[22,112861,112862],{"__ignoreMap":20},[25,112863,112864,112866,112868],{"class":27,"line":28},[25,112865,32018],{"class":240},[25,112867,112001],{"class":31},[25,112869,112004],{"class":244},[99,112871,112872],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[15,112874,112876],{"className":30449,"code":112875,"language":30451,"meta":20,"style":20},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[22,112877,112878,112890],{"__ignoreMap":20},[25,112879,112880,112882,112884,112886,112888],{"class":27,"line":28},[25,112881,111639],{"class":244},[25,112883,290],{"class":240},[25,112885,112014],{"class":244},[25,112887,111607],{"class":45},[25,112889,251],{"class":244},[25,112891,112892,112894,112896,112898,112900],{"class":27,"line":39},[25,112893,111649],{"class":244},[25,112895,290],{"class":240},[25,112897,112014],{"class":244},[25,112899,112030],{"class":45},[25,112901,251],{"class":244},[99,112903,112904],{},"分别读取末端点和目标点的世界坐标。",[15,112906,112907],{"className":30449,"code":112579,"language":30451,"meta":20,"style":20},[22,112908,112909],{"__ignoreMap":20},[25,112910,112911,112913],{"class":27,"line":28},[25,112912,17156],{"class":240},[25,112914,112039],{"class":244},[99,112916,112917],{},"把四部分拼成一个观测数组：",[15,112919,112922],{"className":112920,"code":112921,"language":5297,"meta":20},[5295],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[22,112923,112921],{"__ignoreMap":20},[15,112925,112927],{"className":30449,"code":112926,"language":30451,"meta":20,"style":20},"dist = np.linalg.norm(tip - target)\n",[22,112928,112929],{"__ignoreMap":20},[25,112930,112931,112933,112935,112937,112939],{"class":27,"line":28},[25,112932,111667],{"class":244},[25,112934,290],{"class":240},[25,112936,111672],{"class":244},[25,112938,775],{"class":240},[25,112940,111677],{"class":244},[99,112942,112943,112944,112947,112948,112951],{},"计算 tip 到 target 的距离。",[22,112945,112946],{},"tip - target"," 得到一个三维向量，",[22,112949,112950],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[99,112953,14743],{},[15,112955,112958],{"className":112956,"code":112957,"language":5297,"meta":20},[5295],"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",[22,112959,112957],{"__ignoreMap":20},[15,112961,112963],{"className":30449,"code":112962,"language":30451,"meta":20,"style":20},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[22,112964,112965],{"__ignoreMap":20},[25,112966,112967,112969,112971,112973,112975],{"class":27,"line":28},[25,112968,112614],{"class":244},[25,112970,290],{"class":240},[25,112972,112108],{"class":35},[25,112974,6628],{"class":240},[25,112976,112113],{"class":244},[99,112978,112979,112980,112983,112984,112987],{},"计算动作惩罚。",[22,112981,112982],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[22,112985,112986],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[15,112989,112991],{"className":30449,"code":112990,"language":30451,"meta":20,"style":20},"return float(-dist - control_cost)\n",[22,112992,112993],{"__ignoreMap":20},[25,112994,112995,112997,112999,113001,113003,113005,113007],{"class":27,"line":28},[25,112996,17156],{"class":240},[25,112998,109868],{"class":35},[25,113000,245],{"class":244},[25,113002,775],{"class":240},[25,113004,111667],{"class":244},[25,113006,775],{"class":240},[25,113008,112130],{"class":244},[99,113010,113011],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[15,113013,113014],{"className":30449,"code":110874,"language":30451,"meta":20,"style":20},[22,113015,113016],{"__ignoreMap":20},[25,113017,113018,113020,113022],{"class":27,"line":28},[25,113019,110881],{"class":244},[25,113021,290],{"class":240},[25,113023,104832],{"class":35},[99,113025,113026],{},"累计奖励变量，记录整个运行过程的总分。",[15,113028,113030],{"className":30449,"code":113029,"language":30451,"meta":20,"style":20},"for step in range(500):\n",[22,113031,113032],{"__ignoreMap":20},[25,113033,113034,113036,113038,113040,113042,113044,113046],{"class":27,"line":28},[25,113035,3135],{"class":240},[25,113037,31687],{"class":244},[25,113039,26114],{"class":240},[25,113041,32514],{"class":35},[25,113043,245],{"class":244},[25,113045,65145],{"class":35},[25,113047,30857],{"class":244},[99,113049,113050],{},"运行 500 个控制步。",[15,113052,113053],{"className":30449,"code":104614,"language":30451,"meta":20,"style":20},[22,113054,113055],{"__ignoreMap":20},[25,113056,113057],{"class":27,"line":28},[25,113058,104614],{"class":244},[99,113060,113061,113062,101089,113064,113066],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[22,113063,103302],{},[22,113065,103305],{}," 是当前状态下的坐标。",[15,113068,113070],{"className":30449,"code":113069,"language":30451,"meta":20,"style":20},"error = target - tip\n",[22,113071,113072],{"__ignoreMap":20},[25,113073,113074,113076,113078,113080,113082],{"class":27,"line":28},[25,113075,112667],{"class":244},[25,113077,290],{"class":240},[25,113079,112239],{"class":244},[25,113081,775],{"class":240},[25,113083,112244],{"class":244},[99,113085,113086],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[15,113088,113090],{"className":30449,"code":113089,"language":30451,"meta":20,"style":20},"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",[22,113091,113092,113124],{"__ignoreMap":20},[25,113093,113094,113096,113098,113100,113102,113104,113106,113108,113110,113112,113114,113116,113118,113120,113122],{"class":27,"line":28},[25,113095,105942],{"class":244},[25,113097,434],{"class":35},[25,113099,4553],{"class":244},[25,113101,290],{"class":240},[25,113103,112261],{"class":244},[25,113105,105331],{"class":35},[25,113107,6628],{"class":240},[25,113109,112268],{"class":244},[25,113111,321],{"class":35},[25,113113,112273],{"class":244},[25,113115,775],{"class":240},[25,113117,102474],{"class":35},[25,113119,12545],{"class":244},[25,113121,102474],{"class":35},[25,113123,251],{"class":244},[25,113125,113126,113128,113130,113132,113134,113136,113138,113140,113142,113144,113146,113148,113150,113152,113154],{"class":27,"line":39},[25,113127,105942],{"class":244},[25,113129,460],{"class":35},[25,113131,4553],{"class":244},[25,113133,290],{"class":240},[25,113135,112261],{"class":244},[25,113137,105331],{"class":35},[25,113139,6628],{"class":240},[25,113141,112268],{"class":244},[25,113143,434],{"class":35},[25,113145,112273],{"class":244},[25,113147,775],{"class":240},[25,113149,102474],{"class":35},[25,113151,12545],{"class":244},[25,113153,102474],{"class":35},[25,113155,251],{"class":244},[99,113157,113158,113159,113162],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[22,113160,113161],{},"error -> ctrl -> step"," 的流程。",[15,113164,113165],{"className":30449,"code":104576,"language":30451,"meta":20,"style":20},[22,113166,113167],{"__ignoreMap":20},[25,113168,113169],{"class":27,"line":28},[25,113170,104576],{"class":244},[99,113172,113173],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[15,113175,113177],{"className":30449,"code":113176,"language":30451,"meta":20,"style":20},"obs = get_obs(model, data)\n",[22,113178,113179],{"__ignoreMap":20},[25,113180,113181,113183,113185],{"class":27,"line":28},[25,113182,110925],{"class":244},[25,113184,290],{"class":240},[25,113186,112362],{"class":244},[99,113188,113189,113190,113193],{},"读取最新观测。后面打印 ",[22,113191,113192],{},"obs.shape[0]","，用来确认观测维度是 10。",[182,113195,102387],{"id":102386},[99,113197,113198],{},"观测维度为:",[15,113200,113203],{"className":113201,"code":113202,"language":5297,"meta":20},[5295],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[22,113204,113202],{"__ignoreMap":20},[99,113206,113207],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[99,113209,113210],{},"程序每 100 步打印：",[15,113212,113215],{"className":113213,"code":113214,"language":5297,"meta":20},[5295],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[22,113216,113214],{"__ignoreMap":20},[99,113218,113219,113220,113222],{},"如果控制有效，你应该看到最终 ",[22,113221,103302],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[182,113224,102419],{"id":102418},[194,113226,113227,113230,113233,113239,113245,113252,113262],{},[106,113228,113229],{},"修改目标点位置。",[106,113231,113232],{},"重新运行，观察最终 tip 是否变化。",[106,113234,113235,113236,113238],{},"把 gravity 改成 ",[22,113237,102660],{},"，观察控制是否变差。",[106,113240,111252,113241,111256,113243,28456],{},[22,113242,102229],{},[22,113244,321],{},[106,113246,102482,113247,102485,113249,113251],{},[22,113248,110667],{},[22,113250,107378],{},"，观察机械臂是否更难移动。",[106,113253,102482,113254,82601,113256,102485,113258,113261],{},[22,113255,103305],{},[22,113257,104217],{},[22,113259,113260],{},"0.2 0 0.6","，观察 reward 和 final tip。",[106,113263,113264],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[182,113266,102524],{"id":102523},[210,113268,113270],{"id":113269},"site-not-found",[22,113271,113272],{},"site not found",[99,113274,113275,113276,101089,113279,28456],{},"检查 XML 中是否有 ",[22,113277,113278],{},"site name=\"tip\"",[22,113280,113281],{},"site name=\"target\"",[210,113283,113284],{"id":113284},"机械臂完全不动",[99,113286,102594],{},[194,113288,113289,113294,113297,113302],{},[106,113290,113291,113293],{},[22,113292,102229],{}," 是否为 2",[106,113295,113296],{},"actuator 是否引用正确 joint",[106,113298,113299,113301],{},[22,113300,101147],{}," 是否被赋值",[106,113303,113304,113305],{},"是否执行了 ",[22,113306,100756],{},[210,113308,113309],{"id":113309},"控制效果不好",[99,113311,113312],{},"正常。本章重点不是控制器最优，而是任务结构:",[15,113314,113317],{"className":113315,"code":113316,"language":5297,"meta":20},[5295],"obs → action → mj_step → reward → next_obs\n",[22,113318,113316],{"__ignoreMap":20},[210,113320,113322],{"id":113321},"tip-坐标不变化","tip 坐标不变化",[99,113324,102646],{},[194,113326,113327,113332,113340,113349],{},[106,113328,113329,113330,28456],{},"是否每步调用了 ",[22,113331,100756],{},[106,113333,113334,113335,101089,113337,28456],{},"是否写入了 ",[22,113336,106197],{},[22,113338,113339],{},"data.ctrl[1]",[106,113341,113342,113343,455,113346,28456],{},"actuator 是否正确引用 ",[22,113344,113345],{},"joint1",[22,113347,113348],{},"joint2",[106,113350,113351],{},"控制输入是否太小。",[210,113353,113354],{"id":113354},"目标点不会动",[99,113356,113357],{},"本章的 target 是固定 site：",[15,113359,113361],{"className":53138,"code":113360,"language":53140,"meta":20,"style":20},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[22,113362,113363],{"__ignoreMap":20},[25,113364,113365,113367,113369,113371,113373,113375,113377,113379,113382],{"class":27,"line":28},[25,113366,1153],{"class":244},[25,113368,103281],{"class":51371},[25,113370,15030],{"class":31},[25,113372,290],{"class":244},[25,113374,112030],{"class":45},[25,113376,101177],{"class":31},[25,113378,290],{"class":244},[25,113380,113381],{"class":45},"\"0.5 0 0.4\"",[25,113383,113384],{"class":244}," ...\u002F>\n",[99,113386,113387,113388,113390],{},"它直接挂在 ",[22,113389,101912],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[210,113392,113393],{"id":113393},"机械臂不像真实机械臂",[99,113395,113396],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[182,113398,102678],{"id":102677},[99,113400,113401],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[99,113403,113404],{},"核心公式：",[15,113406,113409],{"className":113407,"code":113408,"language":5297,"meta":20},[5295],"distance = ||tip - target||\nreward = -distance - action_cost\n",[22,113410,113408],{"__ignoreMap":20},[99,113412,113413],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[159,113415,113416],{},"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":20,"searchDepth":39,"depth":39,"links":113418},[113419,113420,113421,113426,113430,113431,113432,113440],{"id":100717,"depth":39,"text":100718},{"id":100840,"depth":39,"text":100841},{"id":101115,"depth":39,"text":101116,"children":113422},[113423,113424,113425],{"id":111622,"depth":51,"text":111623},{"id":111698,"depth":51,"text":111698},{"id":111728,"depth":51,"text":111729},{"id":101323,"depth":39,"text":101324,"children":113427},[113428,113429],{"id":101643,"depth":51,"text":101643},{"id":101779,"depth":51,"text":101779},{"id":102386,"depth":39,"text":102387},{"id":102418,"depth":39,"text":102419},{"id":102523,"depth":39,"text":102524,"children":113433},[113434,113435,113436,113437,113438,113439],{"id":113269,"depth":51,"text":113272},{"id":113284,"depth":51,"text":113284},{"id":113309,"depth":51,"text":113309},{"id":113321,"depth":51,"text":113322},{"id":113354,"depth":51,"text":113354},{"id":113393,"depth":51,"text":113393},{"id":102677,"depth":39,"text":102678},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111426,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113447,"title":113448,"body":113449,"description":20,"extension":165,"meta":116911,"navigation":167,"path":116912,"seo":116913,"stem":116914,"__hash__":116915},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113450,"toc":116882},[113451,113454,113456,113459,113462,113487,113490,113496,113499,113505,113507,113509,113533,113535,113553,113555,113598,113600,113627,113629,113632,113684,113687,113693,113702,113705,113743,113746,113785,113788,113796,113803,113806,113812,113814,113868,113875,113920,113923,113927,113943,113953,113955,115216,115218,115230,115232,115243,115245,115248,115269,115272,115275,115308,115314,115317,115350,115353,115356,115397,115402,115416,115419,115432,115437,115460,115462,115477,115487,115502,115509,115529,115544,115562,115565,115582,115590,115606,115612,115644,115657,115689,115699,115734,115748,115794,115808,115850,115861,115874,115880,115913,115916,115943,115953,115993,116003,116020,116027,116045,116048,116089,116102,116117,116120,116143,116146,116158,116161,116180,116185,116206,116209,116224,116227,116261,116273,116288,116291,116316,116319,116338,116341,116373,116376,116400,116406,116436,116443,116456,116459,116461,116463,116469,116472,116475,116487,116490,116492,116546,116548,116552,116558,116567,116570,116577,116579,116602,116605,116609,116611,116629,116635,116637,116670,116673,116679,116683,116686,116706,116711,116715,116722,116742,116747,116751,116754,116774,116777,116863,116867,116870,116876,116879],[10,113452,113448],{"id":113453},"_8gymnasium-风格强化学习接口基础",[182,113455,100718],{"id":100717},[99,113457,113458],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[99,113460,113461],{},"你将实现:",[15,113463,113465],{"className":30449,"code":113464,"language":30451,"meta":20,"style":20},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[22,113466,113467,113477],{"__ignoreMap":20},[25,113468,113469,113472,113474],{"class":27,"line":28},[25,113470,113471],{"class":244},"obs, info ",[25,113473,290],{"class":240},[25,113475,113476],{"class":244}," env.reset()\n",[25,113478,113479,113482,113484],{"class":27,"line":39},[25,113480,113481],{"class":244},"obs, reward, terminated, truncated, info ",[25,113483,290],{"class":240},[25,113485,113486],{"class":244}," env.step(action)\n",[99,113488,113489],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[99,113491,113492,113493,113495],{},"前面章节的代码都是“脚本式”的：在 ",[22,113494,102366],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[99,113497,113498],{},"可以先记住 Gymnasium 环境的核心交互：",[15,113500,113503],{"className":113501,"code":113502,"language":5297,"meta":20},[5295],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[22,113504,113502],{"__ignoreMap":20},[182,113506,100841],{"id":100840},[99,113508,100844],{},[15,113510,113511],{"className":17,"code":104459,"language":19,"meta":20,"style":20},[22,113512,113513],{"__ignoreMap":20},[25,113514,113515,113517,113519,113521,113523,113525,113527,113529,113531],{"class":27,"line":28},[25,113516,24684],{"class":31},[25,113518,26386],{"class":45},[25,113520,23942],{"class":45},[25,113522,26471],{"class":35},[25,113524,104474],{"class":45},[25,113526,100869],{"class":45},[25,113528,102572],{"class":45},[25,113530,100885],{"class":45},[25,113532,104483],{"class":45},[99,113534,102890],{},[15,113536,113538],{"className":17,"code":113537,"language":19,"meta":20,"style":20},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[22,113539,113540],{"__ignoreMap":20},[25,113541,113542,113544,113546,113548,113550],{"class":27,"line":28},[25,113543,23939],{"class":31},[25,113545,23942],{"class":45},[25,113547,101001],{"class":45},[25,113549,107782],{"class":45},[25,113551,113552],{"class":45}," gymnasium\n",[99,113554,102907],{},[15,113556,113558],{"className":17,"code":113557,"language":19,"meta":20,"style":20},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[22,113559,113560,113577,113586],{"__ignoreMap":20},[25,113561,113562,113564,113566,113568,113571,113573,113575],{"class":27,"line":28},[25,113563,30401],{"class":31},[25,113565,29247],{"class":45},[25,113567,25222],{"class":35},[25,113569,113570],{"class":45}," mujoco-gym-api",[25,113572,101046],{"class":45},[25,113574,101049],{"class":35},[25,113576,101052],{"class":35},[25,113578,113579,113581,113583],{"class":27,"line":39},[25,113580,30401],{"class":31},[25,113582,101059],{"class":45},[25,113584,113585],{"class":45}," mujoco-gym-api\n",[25,113587,113588,113590,113592,113594,113596],{"class":27,"line":51},[25,113589,23939],{"class":31},[25,113591,23942],{"class":45},[25,113593,101001],{"class":45},[25,113595,107782],{"class":45},[25,113597,113552],{"class":45},[99,113599,101075],{},[194,113601,113602,113612,113615,113621],{},[106,113603,113604,113605,113608,113609,28456],{},"本章使用 ",[22,113606,113607],{},"gymnasium","，不是旧版 ",[22,113610,113611],{},"gym",[106,113613,113614],{},"Gymnasium API 与旧 Gym API 有差异。",[106,113616,113617,113618,28456],{},"旧 Gym 常见返回值是 4 个: ",[22,113619,113620],{},"obs, reward, done, info",[106,113622,113623,113624,28456],{},"Gymnasium 返回值是 5 个: ",[22,113625,113626],{},"obs, reward, terminated, truncated, info",[182,113628,101116],{"id":101115},[99,113630,113631],{},"强化学习环境接口包含:",[380,113633,113634,113643],{},[383,113635,113636],{},[386,113637,113638,113641],{},[389,113639,113640],{"align":23846},"方法",[389,113642,102767],{"align":23846},[427,113644,113645,113655,113665,113675],{},[386,113646,113647,113652],{},[432,113648,113649],{"align":23846},[22,113650,113651],{},"reset()",[432,113653,113654],{"align":23846},"重置环境",[386,113656,113657,113662],{},[432,113658,113659],{"align":23846},[22,113660,113661],{},"step(action)",[432,113663,113664],{"align":23846},"执行动作",[386,113666,113667,113672],{},[432,113668,113669],{"align":23846},[22,113670,113671],{},"observation_space",[432,113673,113674],{"align":23846},"观测空间",[386,113676,113677,113682],{},[432,113678,113679],{"align":23846},[22,113680,113681],{},"action_space",[432,113683,23764],{"align":23846},[99,113685,113686],{},"一个最小环境需要完成:",[15,113688,113691],{"className":113689,"code":113690,"language":5297,"meta":20},[5295],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[22,113692,113690],{"__ignoreMap":20},[210,113694,113696,101089,113699,104709],{"id":113695},"terminated-和-truncated-的区别",[22,113697,113698],{},"terminated",[22,113700,113701],{},"truncated",[99,113703,113704],{},"Gymnasium 把“结束”拆成两个概念：",[380,113706,113707,113717],{},[383,113708,113709],{},[386,113710,113711,113713,113715],{},[389,113712,104645],{"align":23846},[389,113714,100771],{"align":23846},[389,113716,21297],{"align":23846},[427,113718,113719,113731],{},[386,113720,113721,113725,113728],{},[432,113722,113723],{"align":23846},[22,113724,113698],{},[432,113726,113727],{"align":23846},"任务自然结束",[432,113729,113730],{"align":23846},"机械臂到达目标、机器人摔倒",[386,113732,113733,113737,113740],{},[432,113734,113735],{"align":23846},[22,113736,113701],{},[432,113738,113739],{"align":23846},"因外部限制截断",[432,113741,113742],{"align":23846},"达到最大步数、时间限制",[99,113744,113745],{},"本章中：",[15,113747,113749],{"className":30449,"code":113748,"language":30451,"meta":20,"style":20},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[22,113750,113751,113766],{"__ignoreMap":20},[25,113752,113753,113756,113758,113761,113763],{"class":27,"line":28},[25,113754,113755],{"class":244},"terminated ",[25,113757,290],{"class":240},[25,113759,113760],{"class":244}," dist ",[25,113762,1153],{"class":240},[25,113764,113765],{"class":35}," 0.05\n",[25,113767,113768,113771,113773,113775,113778,113780,113782],{"class":27,"line":39},[25,113769,113770],{"class":244},"truncated ",[25,113772,290],{"class":240},[25,113774,38944],{"class":35},[25,113776,113777],{"class":244},".steps ",[25,113779,1821],{"class":240},[25,113781,38944],{"class":35},[25,113783,113784],{"class":244},".max_steps\n",[99,113786,113787],{},"也就是：",[194,113789,113790,113793],{},[106,113791,113792],{},"末端距离目标小于 0.05，任务成功结束。",[106,113794,113795],{},"步数超过上限，episode 被截断。",[210,113797,113799,101089,113801],{"id":113798},"observation_space-和-action_space",[22,113800,113671],{},[22,113802,113681],{},[99,113804,113805],{},"这两个对象告诉算法：",[15,113807,113810],{"className":113808,"code":113809,"language":5297,"meta":20},[5295],"观测长什么样\n动作允许多大\n",[22,113811,113809],{"__ignoreMap":20},[99,113813,14743],{},[15,113815,113817],{"className":30449,"code":113816,"language":30451,"meta":20,"style":20},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[22,113818,113819],{"__ignoreMap":20},[25,113820,113821,113823,113826,113828,113831,113834,113837,113839,113841,113844,113846,113848,113850,113852,113854,113856,113858,113861,113863,113865],{"class":27,"line":28},[25,113822,30894],{"class":35},[25,113824,113825],{"class":244},".action_space ",[25,113827,290],{"class":240},[25,113829,113830],{"class":244}," spaces.Box(",[25,113832,113833],{"class":5326},"low",[25,113835,113836],{"class":240},"=-",[25,113838,102474],{"class":35},[25,113840,12545],{"class":244},[25,113842,113843],{"class":5326},"high",[25,113845,290],{"class":240},[25,113847,102474],{"class":35},[25,113849,12545],{"class":244},[25,113851,96034],{"class":5326},[25,113853,290],{"class":240},[25,113855,245],{"class":244},[25,113857,321],{"class":35},[25,113859,113860],{"class":244},",), ",[25,113862,93571],{"class":5326},[25,113864,290],{"class":240},[25,113866,113867],{"class":244},"np.float32)\n",[99,113869,113870,113871,113874],{},"表示动作是 2 维数组，每个值都在 ",[22,113872,113873],{},"[-1, 1]"," 范围内。",[15,113876,113878],{"className":30449,"code":113877,"language":30451,"meta":20,"style":20},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[22,113879,113880],{"__ignoreMap":20},[25,113881,113882,113884,113887,113889,113891,113893,113895,113898,113900,113902,113904,113906,113908,113910,113912,113914,113916,113918],{"class":27,"line":28},[25,113883,30894],{"class":35},[25,113885,113886],{"class":244},".observation_space ",[25,113888,290],{"class":240},[25,113890,113830],{"class":244},[25,113892,113833],{"class":5326},[25,113894,113836],{"class":240},[25,113896,113897],{"class":244},"np.inf, ",[25,113899,113843],{"class":5326},[25,113901,290],{"class":240},[25,113903,113897],{"class":244},[25,113905,96034],{"class":5326},[25,113907,290],{"class":240},[25,113909,245],{"class":244},[25,113911,689],{"class":35},[25,113913,113860],{"class":244},[25,113915,93571],{"class":5326},[25,113917,290],{"class":240},[25,113919,113867],{"class":244},[99,113921,113922],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[210,113924,113926],{"id":113925},"frame_skip-是什么","frame_skip 是什么",[15,113928,113930],{"className":30449,"code":113929,"language":30451,"meta":20,"style":20},"self.frame_skip = 5\n",[22,113931,113932],{"__ignoreMap":20},[25,113933,113934,113936,113939,113941],{"class":27,"line":28},[25,113935,30894],{"class":35},[25,113937,113938],{"class":244},".frame_skip ",[25,113940,290],{"class":240},[25,113942,54498],{"class":35},[99,113944,113945,113946,113949,113950,113952],{},"表示外部调用一次 ",[22,113947,113948],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[22,113951,101286],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[182,113954,101324],{"id":101323},[15,113956,113958],{"className":30449,"code":113957,"language":30451,"meta":20,"style":20},"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",[22,113959,113960,113972,113978,113988,113999,114003,114007,114015,114020,114024,114028,114032,114036,114040,114044,114048,114053,114057,114061,114065,114070,114074,114078,114082,114086,114090,114094,114098,114102,114106,114110,114114,114118,114122,114140,114155,114159,114172,114182,114197,114214,114218,114239,114258,114283,114297,114301,114311,114323,114333,114337,114379,114417,114421,114431,114447,114462,114481,114488,114492,114505,114520,114535,114548,114567,114583,114587,114628,114643,114658,114662,114701,114712,114725,114729,114739,114748,114752,114762,114777,114795,114799,114810,114827,114840,114844,114854,114858,114869,114880,114884,114898,114912,114928,114932,114945,114962,114977,114984,114988,114992,115004,115014,115032,115044,115056,115060,115068,115084,115093,115102,115110,115152,115165,115170,115174,115192,115196,115200,115212],{"__ignoreMap":20},[25,113961,113962,113964,113967,113969],{"class":27,"line":28},[25,113963,30463],{"class":240},[25,113965,113966],{"class":244}," gymnasium ",[25,113968,31454],{"class":240},[25,113970,113971],{"class":244}," gym\n",[25,113973,113974,113976],{"class":27,"line":39},[25,113975,30463],{"class":240},[25,113977,101372],{"class":244},[25,113979,113980,113982,113984,113986],{"class":27,"line":51},[25,113981,30463],{"class":240},[25,113983,31451],{"class":244},[25,113985,31454],{"class":240},[25,113987,31457],{"class":244},[25,113989,113990,113992,113994,113996],{"class":27,"line":59},[25,113991,30808],{"class":240},[25,113993,113966],{"class":244},[25,113995,30463],{"class":240},[25,113997,113998],{"class":244}," spaces\n",[25,114000,114001],{"class":27,"line":67},[25,114002,2510],{"emptyLinePlaceholder":167},[25,114004,114005],{"class":27,"line":75},[25,114006,2510],{"emptyLinePlaceholder":167},[25,114008,114009,114011,114013],{"class":27,"line":83},[25,114010,101385],{"class":35},[25,114012,13674],{"class":240},[25,114014,101390],{"class":45},[25,114016,114017],{"class":27,"line":91},[25,114018,114019],{"class":45},"\u003Cmujoco model=\"gym_reacher\">\n",[25,114021,114022],{"class":27,"line":1429},[25,114023,111809],{"class":45},[25,114025,114026],{"class":27,"line":1441},[25,114027,2510],{"emptyLinePlaceholder":167},[25,114029,114030],{"class":27,"line":1723},[25,114031,101409],{"class":45},[25,114033,114034],{"class":27,"line":1728},[25,114035,111827],{"class":45},[25,114037,114038],{"class":27,"line":1734},[25,114039,2510],{"emptyLinePlaceholder":167},[25,114041,114042],{"class":27,"line":1739},[25,114043,111836],{"class":45},[25,114045,114046],{"class":27,"line":1753},[25,114047,111841],{"class":45},[25,114049,114050],{"class":27,"line":1758},[25,114051,114052],{"class":45},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[25,114054,114055],{"class":27,"line":1764},[25,114056,2510],{"emptyLinePlaceholder":167},[25,114058,114059],{"class":27,"line":1785},[25,114060,111855],{"class":45},[25,114062,114063],{"class":27,"line":1790},[25,114064,111860],{"class":45},[25,114066,114067],{"class":27,"line":1804},[25,114068,114069],{"class":45},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[25,114071,114072],{"class":27,"line":1809},[25,114073,111870],{"class":45},[25,114075,114076],{"class":27,"line":1838},[25,114077,106509],{"class":45},[25,114079,114080],{"class":27,"line":1843},[25,114081,101438],{"class":45},[25,114083,114084],{"class":27,"line":1860},[25,114085,101443],{"class":45},[25,114087,114088],{"class":27,"line":1865},[25,114089,2510],{"emptyLinePlaceholder":167},[25,114091,114092],{"class":27,"line":1870},[25,114093,106526],{"class":45},[25,114095,114096],{"class":27,"line":1875},[25,114097,111895],{"class":45},[25,114099,114100],{"class":27,"line":1889},[25,114101,111900],{"class":45},[25,114103,114104],{"class":27,"line":1894},[25,114105,106536],{"class":45},[25,114107,114108],{"class":27,"line":2687},[25,114109,101448],{"class":45},[25,114111,114112],{"class":27,"line":2701},[25,114113,95769],{"class":45},[25,114115,114116],{"class":27,"line":2709},[25,114117,2510],{"emptyLinePlaceholder":167},[25,114119,114120],{"class":27,"line":2714},[25,114121,2510],{"emptyLinePlaceholder":167},[25,114123,114124,114126,114129,114131,114133,114135,114138],{"class":27,"line":2720},[25,114125,14804],{"class":240},[25,114127,114128],{"class":31}," ReacherEnv",[25,114130,245],{"class":244},[25,114132,113611],{"class":31},[25,114134,801],{"class":244},[25,114136,114137],{"class":31},"Env",[25,114139,30857],{"class":244},[25,114141,114142,114145,114147,114149,114152],{"class":27,"line":2726},[25,114143,114144],{"class":244},"    metadata ",[25,114146,290],{"class":240},[25,114148,4558],{"class":244},[25,114150,114151],{"class":45},"\"render_modes\"",[25,114153,114154],{"class":244},": []}\n",[25,114156,114157],{"class":27,"line":2731},[25,114158,2510],{"emptyLinePlaceholder":167},[25,114160,114161,114163,114165,114168,114170],{"class":27,"line":8058},[25,114162,30872],{"class":240},[25,114164,30875],{"class":35},[25,114166,114167],{"class":244},"(self) -> ",[25,114169,95757],{"class":35},[25,114171,3849],{"class":244},[25,114173,114174,114176,114178,114180],{"class":27,"line":8082},[25,114175,30888],{"class":35},[25,114177,17371],{"class":244},[25,114179,30900],{"class":35},[25,114181,2086],{"class":244},[25,114183,114184,114186,114189,114191,114193,114195],{"class":27,"line":8087},[25,114185,30916],{"class":35},[25,114187,114188],{"class":244},".model ",[25,114190,290],{"class":240},[25,114192,101483],{"class":244},[25,114194,101385],{"class":35},[25,114196,251],{"class":244},[25,114198,114199,114201,114204,114206,114209,114211],{"class":27,"line":8093},[25,114200,30916],{"class":35},[25,114202,114203],{"class":244},".data ",[25,114205,290],{"class":240},[25,114207,114208],{"class":244}," mujoco.MjData(",[25,114210,30894],{"class":35},[25,114212,114213],{"class":244},".model)\n",[25,114215,114216],{"class":27,"line":8120},[25,114217,2510],{"emptyLinePlaceholder":167},[25,114219,114220,114222,114225,114227,114230,114232,114235,114237],{"class":27,"line":8125},[25,114221,30916],{"class":35},[25,114223,114224],{"class":244},".tip_site_id ",[25,114226,290],{"class":240},[25,114228,114229],{"class":244}," mujoco.mj_name2id(",[25,114231,30894],{"class":35},[25,114233,114234],{"class":244},".model, mujoco.mjtObj.mjOBJ_SITE, ",[25,114236,111607],{"class":45},[25,114238,251],{"class":244},[25,114240,114241,114243,114246,114248,114250,114252,114254,114256],{"class":27,"line":8131},[25,114242,30916],{"class":35},[25,114244,114245],{"class":244},".target_site_id ",[25,114247,290],{"class":240},[25,114249,114229],{"class":244},[25,114251,30894],{"class":35},[25,114253,114234],{"class":244},[25,114255,112030],{"class":45},[25,114257,251],{"class":244},[25,114259,114260,114262,114264,114266,114268,114270,114273,114275,114277,114279,114281],{"class":27,"line":8143},[25,114261,2607],{"class":240},[25,114263,38944],{"class":35},[25,114265,114224],{"class":244},[25,114267,1153],{"class":240},[25,114269,4203],{"class":35},[25,114271,114272],{"class":240}," or",[25,114274,38944],{"class":35},[25,114276,114245],{"class":244},[25,114278,1153],{"class":240},[25,114280,4203],{"class":35},[25,114282,3849],{"class":244},[25,114284,114285,114288,114290,114292,114295],{"class":27,"line":8155},[25,114286,114287],{"class":240},"            raise",[25,114289,103506],{"class":35},[25,114291,245],{"class":244},[25,114293,114294],{"class":45},"\"required sites not found\"",[25,114296,251],{"class":244},[25,114298,114299],{"class":27,"line":8167},[25,114300,2510],{"emptyLinePlaceholder":167},[25,114302,114303,114305,114307,114309],{"class":27,"line":9826},[25,114304,30916],{"class":35},[25,114306,113938],{"class":244},[25,114308,290],{"class":240},[25,114310,54498],{"class":35},[25,114312,114313,114315,114318,114320],{"class":27,"line":9851},[25,114314,30916],{"class":35},[25,114316,114317],{"class":244},".max_steps ",[25,114319,290],{"class":240},[25,114321,114322],{"class":35}," 200\n",[25,114324,114325,114327,114329,114331],{"class":27,"line":9874},[25,114326,30916],{"class":35},[25,114328,113777],{"class":244},[25,114330,290],{"class":240},[25,114332,47404],{"class":35},[25,114334,114335],{"class":27,"line":9898},[25,114336,2510],{"emptyLinePlaceholder":167},[25,114338,114339,114341,114343,114345,114347,114349,114351,114353,114355,114357,114359,114361,114363,114365,114367,114369,114371,114373,114375,114377],{"class":27,"line":9903},[25,114340,30916],{"class":35},[25,114342,113825],{"class":244},[25,114344,290],{"class":240},[25,114346,113830],{"class":244},[25,114348,113833],{"class":5326},[25,114350,113836],{"class":240},[25,114352,102474],{"class":35},[25,114354,12545],{"class":244},[25,114356,113843],{"class":5326},[25,114358,290],{"class":240},[25,114360,102474],{"class":35},[25,114362,12545],{"class":244},[25,114364,96034],{"class":5326},[25,114366,290],{"class":240},[25,114368,245],{"class":244},[25,114370,321],{"class":35},[25,114372,113860],{"class":244},[25,114374,93571],{"class":5326},[25,114376,290],{"class":240},[25,114378,113867],{"class":244},[25,114380,114381,114383,114385,114387,114389,114391,114393,114395,114397,114399,114401,114403,114405,114407,114409,114411,114413,114415],{"class":27,"line":9908},[25,114382,30916],{"class":35},[25,114384,113886],{"class":244},[25,114386,290],{"class":240},[25,114388,113830],{"class":244},[25,114390,113833],{"class":5326},[25,114392,113836],{"class":240},[25,114394,113897],{"class":244},[25,114396,113843],{"class":5326},[25,114398,290],{"class":240},[25,114400,113897],{"class":244},[25,114402,96034],{"class":5326},[25,114404,290],{"class":240},[25,114406,245],{"class":244},[25,114408,689],{"class":35},[25,114410,113860],{"class":244},[25,114412,93571],{"class":5326},[25,114414,290],{"class":240},[25,114416,113867],{"class":244},[25,114418,114419],{"class":27,"line":9913},[25,114420,2510],{"emptyLinePlaceholder":167},[25,114422,114423,114425,114428],{"class":27,"line":9922},[25,114424,30872],{"class":240},[25,114426,114427],{"class":31}," _get_obs",[25,114429,114430],{"class":244},"(self) -> np.ndarray:\n",[25,114432,114433,114435,114437,114439,114442,114444],{"class":27,"line":9927},[25,114434,112208],{"class":244},[25,114436,290],{"class":240},[25,114438,38944],{"class":35},[25,114440,114441],{"class":244},".data.site_xpos[",[25,114443,30894],{"class":35},[25,114445,114446],{"class":244},".tip_site_id].copy()\n",[25,114448,114449,114451,114453,114455,114457,114459],{"class":27,"line":9933},[25,114450,112221],{"class":244},[25,114452,290],{"class":240},[25,114454,38944],{"class":35},[25,114456,114441],{"class":244},[25,114458,30894],{"class":35},[25,114460,114461],{"class":244},".target_site_id].copy()\n",[25,114463,114464,114466,114468,114471,114473,114476,114478],{"class":27,"line":9954},[25,114465,110253],{"class":244},[25,114467,290],{"class":240},[25,114469,114470],{"class":244}," np.concatenate([",[25,114472,30894],{"class":35},[25,114474,114475],{"class":244},".data.qpos.copy(), ",[25,114477,30894],{"class":35},[25,114479,114480],{"class":244},".data.qvel.copy(), tip, target])\n",[25,114482,114483,114485],{"class":27,"line":9960},[25,114484,14862],{"class":240},[25,114486,114487],{"class":244}," obs.astype(np.float32)\n",[25,114489,114490],{"class":27,"line":9974},[25,114491,2510],{"emptyLinePlaceholder":167},[25,114493,114494,114496,114499,114501,114503],{"class":27,"line":9980},[25,114495,30872],{"class":240},[25,114497,114498],{"class":31}," _get_reward",[25,114500,114167],{"class":244},[25,114502,284],{"class":35},[25,114504,3849],{"class":244},[25,114506,114507,114509,114511,114513,114515,114517],{"class":27,"line":10007},[25,114508,112208],{"class":244},[25,114510,290],{"class":240},[25,114512,38944],{"class":35},[25,114514,114441],{"class":244},[25,114516,30894],{"class":35},[25,114518,114519],{"class":244},".tip_site_id]\n",[25,114521,114522,114524,114526,114528,114530,114532],{"class":27,"line":10016},[25,114523,112221],{"class":244},[25,114525,290],{"class":240},[25,114527,38944],{"class":35},[25,114529,114441],{"class":244},[25,114531,30894],{"class":35},[25,114533,114534],{"class":244},".target_site_id]\n",[25,114536,114537,114540,114542,114544,114546],{"class":27,"line":10022},[25,114538,114539],{"class":244},"        dist ",[25,114541,290],{"class":240},[25,114543,111672],{"class":244},[25,114545,775],{"class":240},[25,114547,111677],{"class":244},[25,114549,114550,114553,114555,114557,114559,114562,114564],{"class":27,"line":10030},[25,114551,114552],{"class":244},"        control_cost ",[25,114554,290],{"class":240},[25,114556,112108],{"class":35},[25,114558,6628],{"class":240},[25,114560,114561],{"class":244}," np.sum(np.square(",[25,114563,30894],{"class":35},[25,114565,114566],{"class":244},".data.ctrl))\n",[25,114568,114569,114571,114573,114575,114577,114579,114581],{"class":27,"line":10035},[25,114570,14862],{"class":240},[25,114572,109868],{"class":35},[25,114574,245],{"class":244},[25,114576,775],{"class":240},[25,114578,111667],{"class":244},[25,114580,775],{"class":240},[25,114582,112130],{"class":244},[25,114584,114585],{"class":27,"line":16714},[25,114586,2510],{"emptyLinePlaceholder":167},[25,114588,114589,114591,114594,114597,114599,114602,114604,114606,114608,114610,114612,114615,114618,114620,114622,114624,114626],{"class":27,"line":16720},[25,114590,30872],{"class":240},[25,114592,114593],{"class":31}," reset",[25,114595,114596],{"class":244},"(self, ",[25,114598,698],{"class":240},[25,114600,114601],{"class":244},", seed: ",[25,114603,248],{"class":35},[25,114605,25216],{"class":240},[25,114607,39004],{"class":35},[25,114609,13674],{"class":240},[25,114611,39004],{"class":35},[25,114613,114614],{"class":244},", options: ",[25,114616,114617],{"class":35},"dict",[25,114619,25216],{"class":240},[25,114621,39004],{"class":35},[25,114623,13674],{"class":240},[25,114625,39004],{"class":35},[25,114627,30857],{"class":244},[25,114629,114630,114632,114635,114638,114640],{"class":27,"line":16743},[25,114631,30888],{"class":35},[25,114633,114634],{"class":244},"().reset(",[25,114636,114637],{"class":5326},"seed",[25,114639,290],{"class":240},[25,114641,114642],{"class":244},"seed)\n",[25,114644,114645,114648,114650,114653,114655],{"class":27,"line":16749},[25,114646,114647],{"class":244},"        mujoco.mj_resetData(",[25,114649,30894],{"class":35},[25,114651,114652],{"class":244},".model, ",[25,114654,30894],{"class":35},[25,114656,114657],{"class":244},".data)\n",[25,114659,114660],{"class":27,"line":16772},[25,114661,2510],{"emptyLinePlaceholder":167},[25,114663,114664,114666,114669,114671,114673,114676,114678,114680,114682,114684,114686,114688,114690,114692,114694,114696,114698],{"class":27,"line":16786},[25,114665,30916],{"class":35},[25,114667,114668],{"class":244},".data.qpos[:] ",[25,114670,290],{"class":240},[25,114672,38944],{"class":35},[25,114674,114675],{"class":244},".np_random.uniform(",[25,114677,113833],{"class":5326},[25,114679,113836],{"class":240},[25,114681,86281],{"class":35},[25,114683,12545],{"class":244},[25,114685,113843],{"class":5326},[25,114687,290],{"class":240},[25,114689,86281],{"class":35},[25,114691,12545],{"class":244},[25,114693,31567],{"class":5326},[25,114695,290],{"class":240},[25,114697,30894],{"class":35},[25,114699,114700],{"class":244},".model.nq)\n",[25,114702,114703,114705,114708,114710],{"class":27,"line":16806},[25,114704,30916],{"class":35},[25,114706,114707],{"class":244},".data.qvel[:] ",[25,114709,290],{"class":240},[25,114711,104832],{"class":35},[25,114713,114714,114717,114719,114721,114723],{"class":27,"line":16812},[25,114715,114716],{"class":244},"        mujoco.mj_forward(",[25,114718,30894],{"class":35},[25,114720,114652],{"class":244},[25,114722,30894],{"class":35},[25,114724,114657],{"class":244},[25,114726,114727],{"class":27,"line":16823},[25,114728,2510],{"emptyLinePlaceholder":167},[25,114730,114731,114733,114735,114737],{"class":27,"line":16846},[25,114732,30916],{"class":35},[25,114734,113777],{"class":244},[25,114736,290],{"class":240},[25,114738,47404],{"class":35},[25,114740,114741,114743,114745],{"class":27,"line":16868},[25,114742,14862],{"class":240},[25,114744,38944],{"class":35},[25,114746,114747],{"class":244},"._get_obs(), {}\n",[25,114749,114750],{"class":27,"line":16873},[25,114751,2510],{"emptyLinePlaceholder":167},[25,114753,114754,114756,114759],{"class":27,"line":16879},[25,114755,30872],{"class":240},[25,114757,114758],{"class":31}," step",[25,114760,114761],{"class":244},"(self, action):\n",[25,114763,114764,114766,114768,114771,114773,114775],{"class":27,"line":16893},[25,114765,110293],{"class":244},[25,114767,290],{"class":240},[25,114769,114770],{"class":244}," np.asarray(action, ",[25,114772,93571],{"class":5326},[25,114774,290],{"class":240},[25,114776,113867],{"class":244},[25,114778,114779,114781,114783,114785,114787,114790,114792],{"class":27,"line":16906},[25,114780,110293],{"class":244},[25,114782,290],{"class":240},[25,114784,107518],{"class":244},[25,114786,30894],{"class":35},[25,114788,114789],{"class":244},".action_space.low, ",[25,114791,30894],{"class":35},[25,114793,114794],{"class":244},".action_space.high)\n",[25,114796,114797],{"class":27,"line":16911},[25,114798,2510],{"emptyLinePlaceholder":167},[25,114800,114801,114803,114806,114808],{"class":27,"line":16925},[25,114802,30916],{"class":35},[25,114804,114805],{"class":244},".data.ctrl[:] ",[25,114807,290],{"class":240},[25,114809,107541],{"class":244},[25,114811,114812,114814,114816,114818,114820,114822,114824],{"class":27,"line":16930},[25,114813,3513],{"class":240},[25,114815,101572],{"class":244},[25,114817,26114],{"class":240},[25,114819,32514],{"class":35},[25,114821,245],{"class":244},[25,114823,30894],{"class":35},[25,114825,114826],{"class":244},".frame_skip):\n",[25,114828,114829,114832,114834,114836,114838],{"class":27,"line":16936},[25,114830,114831],{"class":244},"            mujoco.mj_step(",[25,114833,30894],{"class":35},[25,114835,114652],{"class":244},[25,114837,30894],{"class":35},[25,114839,114657],{"class":244},[25,114841,114842],{"class":27,"line":16941},[25,114843,2510],{"emptyLinePlaceholder":167},[25,114845,114846,114848,114850,114852],{"class":27,"line":16955},[25,114847,30916],{"class":35},[25,114849,113777],{"class":244},[25,114851,9587],{"class":240},[25,114853,55770],{"class":35},[25,114855,114856],{"class":27,"line":16960},[25,114857,2510],{"emptyLinePlaceholder":167},[25,114859,114860,114862,114864,114866],{"class":27,"line":16965},[25,114861,110253],{"class":244},[25,114863,290],{"class":240},[25,114865,38944],{"class":35},[25,114867,114868],{"class":244},"._get_obs()\n",[25,114870,114871,114873,114875,114877],{"class":27,"line":16979},[25,114872,110358],{"class":244},[25,114874,290],{"class":240},[25,114876,38944],{"class":35},[25,114878,114879],{"class":244},"._get_reward()\n",[25,114881,114882],{"class":27,"line":16991},[25,114883,2510],{"emptyLinePlaceholder":167},[25,114885,114886,114888,114890,114892,114894,114896],{"class":27,"line":16996},[25,114887,112208],{"class":244},[25,114889,290],{"class":240},[25,114891,38944],{"class":35},[25,114893,114441],{"class":244},[25,114895,30894],{"class":35},[25,114897,114519],{"class":244},[25,114899,114900,114902,114904,114906,114908,114910],{"class":27,"line":17009},[25,114901,112221],{"class":244},[25,114903,290],{"class":240},[25,114905,38944],{"class":35},[25,114907,114441],{"class":244},[25,114909,30894],{"class":35},[25,114911,114534],{"class":244},[25,114913,114914,114916,114918,114920,114923,114925],{"class":27,"line":17014},[25,114915,114539],{"class":244},[25,114917,290],{"class":240},[25,114919,109868],{"class":35},[25,114921,114922],{"class":244},"(np.linalg.norm(tip ",[25,114924,775],{"class":240},[25,114926,114927],{"class":244}," target))\n",[25,114929,114930],{"class":27,"line":17019},[25,114931,2510],{"emptyLinePlaceholder":167},[25,114933,114934,114937,114939,114941,114943],{"class":27,"line":17024},[25,114935,114936],{"class":244},"        terminated ",[25,114938,290],{"class":240},[25,114940,113760],{"class":244},[25,114942,1153],{"class":240},[25,114944,113765],{"class":35},[25,114946,114947,114950,114952,114954,114956,114958,114960],{"class":27,"line":17037},[25,114948,114949],{"class":244},"        truncated ",[25,114951,290],{"class":240},[25,114953,38944],{"class":35},[25,114955,113777],{"class":244},[25,114957,1821],{"class":240},[25,114959,38944],{"class":35},[25,114961,113784],{"class":244},[25,114963,114964,114967,114969,114971,114974],{"class":27,"line":17042},[25,114965,114966],{"class":244},"        info ",[25,114968,290],{"class":240},[25,114970,4558],{"class":244},[25,114972,114973],{"class":45},"\"distance\"",[25,114975,114976],{"class":244},": dist}\n",[25,114978,114979,114981],{"class":27,"line":32704},[25,114980,14862],{"class":240},[25,114982,114983],{"class":244}," obs, reward, terminated, truncated, info\n",[25,114985,114986],{"class":27,"line":32710},[25,114987,2510],{"emptyLinePlaceholder":167},[25,114989,114990],{"class":27,"line":32716},[25,114991,2510],{"emptyLinePlaceholder":167},[25,114993,114994,114996,114998,115000,115002],{"class":27,"line":32722},[25,114995,32018],{"class":240},[25,114997,2083],{"class":31},[25,114999,101469],{"class":244},[25,115001,95757],{"class":35},[25,115003,3849],{"class":244},[25,115005,115006,115009,115011],{"class":27,"line":32728},[25,115007,115008],{"class":244},"    env ",[25,115010,290],{"class":240},[25,115012,115013],{"class":244}," ReacherEnv()\n",[25,115015,115016,115019,115021,115024,115026,115028,115030],{"class":27,"line":32739},[25,115017,115018],{"class":244},"    obs, info ",[25,115020,290],{"class":240},[25,115022,115023],{"class":244}," env.reset(",[25,115025,114637],{"class":5326},[25,115027,290],{"class":240},[25,115029,434],{"class":35},[25,115031,251],{"class":244},[25,115033,115034,115036,115038,115041],{"class":27,"line":32745},[25,115035,31370],{"class":35},[25,115037,245],{"class":244},[25,115039,115040],{"class":45},"\"initial obs shape:\"",[25,115042,115043],{"class":244},", obs.shape)\n",[25,115045,115046,115048,115050,115053],{"class":27,"line":32765},[25,115047,31370],{"class":35},[25,115049,245],{"class":244},[25,115051,115052],{"class":45},"\"initial info:\"",[25,115054,115055],{"class":244},", info)\n",[25,115057,115058],{"class":27,"line":32771},[25,115059,2510],{"emptyLinePlaceholder":167},[25,115061,115062,115064,115066],{"class":27,"line":32782},[25,115063,110224],{"class":244},[25,115065,290],{"class":240},[25,115067,104832],{"class":35},[25,115069,115070,115072,115074,115076,115078,115080,115082],{"class":27,"line":32788},[25,115071,3311],{"class":240},[25,115073,31687],{"class":244},[25,115075,26114],{"class":240},[25,115077,32514],{"class":35},[25,115079,245],{"class":244},[25,115081,943],{"class":35},[25,115083,30857],{"class":244},[25,115085,115086,115088,115090],{"class":27,"line":32794},[25,115087,110293],{"class":244},[25,115089,290],{"class":240},[25,115091,115092],{"class":244}," env.action_space.sample()\n",[25,115094,115095,115098,115100],{"class":27,"line":32800},[25,115096,115097],{"class":244},"        obs, reward, terminated, truncated, info ",[25,115099,290],{"class":240},[25,115101,113486],{"class":244},[25,115103,115104,115106,115108],{"class":27,"line":32806},[25,115105,110368],{"class":244},[25,115107,9587],{"class":240},[25,115109,110373],{"class":244},[25,115111,115112,115114,115116,115118,115120,115123,115125,115127,115130,115132,115134,115137,115139,115141,115144,115146,115148,115150],{"class":27,"line":32812},[25,115113,32522],{"class":35},[25,115115,245],{"class":244},[25,115117,110402],{"class":45},[25,115119,110405],{"class":244},[25,115121,115122],{"class":45},"\"reward:\"",[25,115124,12545],{"class":244},[25,115126,32089],{"class":35},[25,115128,115129],{"class":244},"(reward, ",[25,115131,315],{"class":35},[25,115133,110416],{"class":244},[25,115135,115136],{"class":45},"\"distance:\"",[25,115138,12545],{"class":244},[25,115140,32089],{"class":35},[25,115142,115143],{"class":244},"(info[",[25,115145,114973],{"class":45},[25,115147,112273],{"class":244},[25,115149,315],{"class":35},[25,115151,30568],{"class":244},[25,115153,115154,115156,115159,115162],{"class":27,"line":32818},[25,115155,2607],{"class":240},[25,115157,115158],{"class":244}," terminated ",[25,115160,115161],{"class":240},"or",[25,115163,115164],{"class":244}," truncated:\n",[25,115166,115167],{"class":27,"line":32824},[25,115168,115169],{"class":240},"            break\n",[25,115171,115172],{"class":27,"line":32844},[25,115173,2510],{"emptyLinePlaceholder":167},[25,115175,115176,115178,115180,115182,115184,115186,115188,115190],{"class":27,"line":32850},[25,115177,31370],{"class":35},[25,115179,245],{"class":244},[25,115181,110447],{"class":45},[25,115183,12545],{"class":244},[25,115185,32089],{"class":35},[25,115187,110454],{"class":244},[25,115189,315],{"class":35},[25,115191,30568],{"class":244},[25,115193,115194],{"class":27,"line":32866},[25,115195,2510],{"emptyLinePlaceholder":167},[25,115197,115198],{"class":27,"line":32872},[25,115199,2510],{"emptyLinePlaceholder":167},[25,115201,115202,115204,115206,115208,115210],{"class":27,"line":32886},[25,115203,1642],{"class":240},[25,115205,31291],{"class":35},[25,115207,101630],{"class":240},[25,115209,101633],{"class":45},[25,115211,3849],{"class":244},[25,115213,115214],{"class":27,"line":32892},[25,115215,101640],{"class":244},[99,115217,103641],{},[15,115219,115221],{"className":17,"code":115220,"language":19,"meta":20,"style":20},"touch ch8_gym_env.py\n",[22,115222,115223],{"__ignoreMap":20},[25,115224,115225,115227],{"class":27,"line":28},[25,115226,101354],{"class":31},[25,115228,115229],{"class":45}," ch8_gym_env.py\n",[99,115231,110515],{},[15,115233,115235],{"className":17,"code":115234,"language":19,"meta":20,"style":20},"python ch8_gym_env.py\n",[22,115236,115237],{"__ignoreMap":20},[25,115238,115239,115241],{"class":27,"line":28},[25,115240,30451],{"class":31},[25,115242,115229],{"class":45},[210,115244,101643],{"id":101643},[99,115246,115247],{},"继承 Gymnasium 环境：",[15,115249,115251],{"className":30449,"code":115250,"language":30451,"meta":20,"style":20},"class ReacherEnv(gym.Env):\n",[22,115252,115253],{"__ignoreMap":20},[25,115254,115255,115257,115259,115261,115263,115265,115267],{"class":27,"line":28},[25,115256,14804],{"class":240},[25,115258,114128],{"class":31},[25,115260,245],{"class":244},[25,115262,113611],{"class":31},[25,115264,801],{"class":244},[25,115266,114137],{"class":31},[25,115268,30857],{"class":244},[99,115270,115271],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[99,115273,115274],{},"初始化模型：",[15,115276,115278],{"className":30449,"code":115277,"language":30451,"meta":20,"style":20},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[22,115279,115280,115294],{"__ignoreMap":20},[25,115281,115282,115284,115286,115288,115290,115292],{"class":27,"line":28},[25,115283,30894],{"class":35},[25,115285,114188],{"class":244},[25,115287,290],{"class":240},[25,115289,101483],{"class":244},[25,115291,101385],{"class":35},[25,115293,251],{"class":244},[25,115295,115296,115298,115300,115302,115304,115306],{"class":27,"line":39},[25,115297,30894],{"class":35},[25,115299,114203],{"class":244},[25,115301,290],{"class":240},[25,115303,114208],{"class":244},[25,115305,30894],{"class":35},[25,115307,114213],{"class":244},[99,115309,115310,115311,115313],{},"这和前面章节一样，只是现在放到了类的 ",[22,115312,30900],{}," 里。",[99,115315,115316],{},"缓存 site ID：",[15,115318,115320],{"className":30449,"code":115319,"language":30451,"meta":20,"style":20},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[22,115321,115322,115336],{"__ignoreMap":20},[25,115323,115324,115326,115328,115330,115332,115334],{"class":27,"line":28},[25,115325,30894],{"class":35},[25,115327,114224],{"class":244},[25,115329,290],{"class":240},[25,115331,114229],{"class":244},[25,115333,89625],{"class":35},[25,115335,251],{"class":244},[25,115337,115338,115340,115342,115344,115346,115348],{"class":27,"line":39},[25,115339,30894],{"class":35},[25,115341,114245],{"class":244},[25,115343,290],{"class":240},[25,115345,114229],{"class":244},[25,115347,89625],{"class":35},[25,115349,251],{"class":244},[99,115351,115352],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[99,115354,115355],{},"reset：",[15,115357,115359],{"className":30449,"code":115358,"language":30451,"meta":20,"style":20},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[22,115360,115361],{"__ignoreMap":20},[25,115362,115363,115365,115367,115369,115371,115373,115375,115377,115379,115381,115383,115385,115387,115389,115391,115393,115395],{"class":27,"line":28},[25,115364,32018],{"class":240},[25,115366,114593],{"class":31},[25,115368,114596],{"class":244},[25,115370,698],{"class":240},[25,115372,114601],{"class":244},[25,115374,248],{"class":35},[25,115376,25216],{"class":240},[25,115378,39004],{"class":35},[25,115380,13674],{"class":240},[25,115382,39004],{"class":35},[25,115384,114614],{"class":244},[25,115386,114617],{"class":35},[25,115388,25216],{"class":240},[25,115390,39004],{"class":35},[25,115392,13674],{"class":240},[25,115394,39004],{"class":35},[25,115396,30857],{"class":244},[99,115398,115399,115401],{},[22,115400,70127],{}," 做四件事：",[194,115403,115404,115407,115410,115413],{},[106,115405,115406],{},"设置随机种子。",[106,115408,115409],{},"重置 MuJoCo data。",[106,115411,115412],{},"随机初始化关节角。",[106,115414,115415],{},"返回初始观测和 info。",[99,115417,115418],{},"step：",[15,115420,115422],{"className":30449,"code":115421,"language":30451,"meta":20,"style":20},"def step(self, action):\n",[22,115423,115424],{"__ignoreMap":20},[25,115425,115426,115428,115430],{"class":27,"line":28},[25,115427,32018],{"class":240},[25,115429,114758],{"class":31},[25,115431,114761],{"class":244},[99,115433,115434,115436],{},[22,115435,107205],{}," 做六件事：",[194,115438,115439,115442,115448,115451,115454,115457],{},[106,115440,115441],{},"检查并裁剪 action。",[106,115443,115444,115445,28456],{},"写入 ",[22,115446,115447],{},"self.data.ctrl",[106,115449,115450],{},"连续推进若干个 MuJoCo 物理步。",[106,115452,115453],{},"计算新观测。",[106,115455,115456],{},"计算奖励和结束条件。",[106,115458,115459],{},"返回 Gymnasium 标准五元组。",[210,115461,101779],{"id":101779},[15,115463,115465],{"className":30449,"code":115464,"language":30451,"meta":20,"style":20},"import gymnasium as gym\n",[22,115466,115467],{"__ignoreMap":20},[25,115468,115469,115471,115473,115475],{"class":27,"line":28},[25,115470,30463],{"class":240},[25,115472,113966],{"class":244},[25,115474,31454],{"class":240},[25,115476,113971],{"class":244},[99,115478,115479,115480,115482,115483,115486],{},"导入 Gymnasium，并起别名 ",[22,115481,113611],{},"。后面写 ",[22,115484,115485],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[15,115488,115490],{"className":30449,"code":115489,"language":30451,"meta":20,"style":20},"from gymnasium import spaces\n",[22,115491,115492],{"__ignoreMap":20},[25,115493,115494,115496,115498,115500],{"class":27,"line":28},[25,115495,30808],{"class":240},[25,115497,113966],{"class":244},[25,115499,30463],{"class":240},[25,115501,113998],{"class":244},[99,115503,115504,115505,115508],{},"导入空间定义工具。",[22,115506,115507],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[15,115510,115511],{"className":30449,"code":115250,"language":30451,"meta":20,"style":20},[22,115512,115513],{"__ignoreMap":20},[25,115514,115515,115517,115519,115521,115523,115525,115527],{"class":27,"line":28},[25,115516,14804],{"class":240},[25,115518,114128],{"class":31},[25,115520,245],{"class":244},[25,115522,113611],{"class":31},[25,115524,801],{"class":244},[25,115526,114137],{"class":31},[25,115528,30857],{"class":244},[99,115530,115531,115532,115535,115536,115538,115539,101089,115541,115543],{},"定义一个类，名字叫 ",[22,115533,115534],{},"ReacherEnv","。括号里的 ",[22,115537,115485],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[22,115540,70127],{},[22,115542,107205],{}," 这两个核心方法。",[15,115545,115547],{"className":30449,"code":115546,"language":30451,"meta":20,"style":20},"metadata = {\"render_modes\": []}\n",[22,115548,115549],{"__ignoreMap":20},[25,115550,115551,115554,115556,115558,115560],{"class":27,"line":28},[25,115552,115553],{"class":244},"metadata ",[25,115555,290],{"class":240},[25,115557,4558],{"class":244},[25,115559,114151],{"class":45},[25,115561,114154],{"class":244},[99,115563,115564],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[15,115566,115568],{"className":30449,"code":115567,"language":30451,"meta":20,"style":20},"def __init__(self) -> None:\n",[22,115569,115570],{"__ignoreMap":20},[25,115571,115572,115574,115576,115578,115580],{"class":27,"line":28},[25,115573,32018],{"class":240},[25,115575,30875],{"class":35},[25,115577,114167],{"class":244},[25,115579,95757],{"class":35},[25,115581,3849],{"class":244},[99,115583,115584,115586,115587,28456],{},[22,115585,30900],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[22,115588,115589],{},"env = ReacherEnv()",[15,115591,115593],{"className":30449,"code":115592,"language":30451,"meta":20,"style":20},"super().__init__()\n",[22,115594,115595],{"__ignoreMap":20},[25,115596,115597,115600,115602,115604],{"class":27,"line":28},[25,115598,115599],{"class":35},"super",[25,115601,17371],{"class":244},[25,115603,30900],{"class":35},[25,115605,2086],{"class":244},[99,115607,115608,115609,115611],{},"调用父类 ",[22,115610,115485],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[15,115613,115614],{"className":30449,"code":115277,"language":30451,"meta":20,"style":20},[22,115615,115616,115630],{"__ignoreMap":20},[25,115617,115618,115620,115622,115624,115626,115628],{"class":27,"line":28},[25,115619,30894],{"class":35},[25,115621,114188],{"class":244},[25,115623,290],{"class":240},[25,115625,101483],{"class":244},[25,115627,101385],{"class":35},[25,115629,251],{"class":244},[25,115631,115632,115634,115636,115638,115640,115642],{"class":27,"line":39},[25,115633,30894],{"class":35},[25,115635,114203],{"class":244},[25,115637,290],{"class":240},[25,115639,114208],{"class":244},[25,115641,30894],{"class":35},[25,115643,114213],{"class":244},[99,115645,115646,115647,115649,115650,101089,115653,115656],{},"把 MuJoCo 模型和状态保存到 ",[22,115648,30894],{}," 上。",[22,115651,115652],{},"self.model",[22,115654,115655],{},"self.data"," 表示这个环境对象自己的模型和状态。",[15,115658,115659],{"className":30449,"code":115319,"language":30451,"meta":20,"style":20},[22,115660,115661,115675],{"__ignoreMap":20},[25,115662,115663,115665,115667,115669,115671,115673],{"class":27,"line":28},[25,115664,30894],{"class":35},[25,115666,114224],{"class":244},[25,115668,290],{"class":240},[25,115670,114229],{"class":244},[25,115672,89625],{"class":35},[25,115674,251],{"class":244},[25,115676,115677,115679,115681,115683,115685,115687],{"class":27,"line":39},[25,115678,30894],{"class":35},[25,115680,114245],{"class":244},[25,115682,290],{"class":240},[25,115684,114229],{"class":244},[25,115686,89625],{"class":35},[25,115688,251],{"class":244},[99,115690,115691,115692,101089,115695,115698],{},"提前查好 tip 和 target 的 site ID。这样 ",[22,115693,115694],{},"_get_obs",[22,115696,115697],{},"_get_reward"," 里就不用每次按名字查找。",[15,115700,115702],{"className":30449,"code":115701,"language":30451,"meta":20,"style":20},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[22,115703,115704,115714,115724],{"__ignoreMap":20},[25,115705,115706,115708,115710,115712],{"class":27,"line":28},[25,115707,30894],{"class":35},[25,115709,113938],{"class":244},[25,115711,290],{"class":240},[25,115713,54498],{"class":35},[25,115715,115716,115718,115720,115722],{"class":27,"line":39},[25,115717,30894],{"class":35},[25,115719,114317],{"class":244},[25,115721,290],{"class":240},[25,115723,114322],{"class":35},[25,115725,115726,115728,115730,115732],{"class":27,"line":51},[25,115727,30894],{"class":35},[25,115729,113777],{"class":244},[25,115731,290],{"class":240},[25,115733,47404],{"class":35},[99,115735,115736,115739,115740,115743,115744,115747],{},[22,115737,115738],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[22,115741,115742],{},"max_steps"," 是一个 episode 最多运行多少步。",[22,115745,115746],{},"steps"," 记录当前 episode 已经走了多少步。",[15,115749,115750],{"className":30449,"code":113816,"language":30451,"meta":20,"style":20},[22,115751,115752],{"__ignoreMap":20},[25,115753,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774,115776,115778,115780,115782,115784,115786,115788,115790,115792],{"class":27,"line":28},[25,115755,30894],{"class":35},[25,115757,113825],{"class":244},[25,115759,290],{"class":240},[25,115761,113830],{"class":244},[25,115763,113833],{"class":5326},[25,115765,113836],{"class":240},[25,115767,102474],{"class":35},[25,115769,12545],{"class":244},[25,115771,113843],{"class":5326},[25,115773,290],{"class":240},[25,115775,102474],{"class":35},[25,115777,12545],{"class":244},[25,115779,96034],{"class":5326},[25,115781,290],{"class":240},[25,115783,245],{"class":244},[25,115785,321],{"class":35},[25,115787,113860],{"class":244},[25,115789,93571],{"class":5326},[25,115791,290],{"class":240},[25,115793,113867],{"class":244},[99,115795,115796,115797,115800,115801,101089,115804,115807],{},"定义动作空间。",[22,115798,115799],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[22,115802,115803],{},"low=-1.0",[22,115805,115806],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[15,115809,115810],{"className":30449,"code":113877,"language":30451,"meta":20,"style":20},[22,115811,115812],{"__ignoreMap":20},[25,115813,115814,115816,115818,115820,115822,115824,115826,115828,115830,115832,115834,115836,115838,115840,115842,115844,115846,115848],{"class":27,"line":28},[25,115815,30894],{"class":35},[25,115817,113886],{"class":244},[25,115819,290],{"class":240},[25,115821,113830],{"class":244},[25,115823,113833],{"class":5326},[25,115825,113836],{"class":240},[25,115827,113897],{"class":244},[25,115829,113843],{"class":5326},[25,115831,290],{"class":240},[25,115833,113897],{"class":244},[25,115835,96034],{"class":5326},[25,115837,290],{"class":240},[25,115839,245],{"class":244},[25,115841,689],{"class":35},[25,115843,113860],{"class":244},[25,115845,93571],{"class":5326},[25,115847,290],{"class":240},[25,115849,113867],{"class":244},[99,115851,115852,115853,115856,115857,115860],{},"定义观测空间。",[22,115854,115855],{},"shape=(10,)"," 表示观测是 10 个数。",[22,115858,115859],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[15,115862,115864],{"className":30449,"code":115863,"language":30451,"meta":20,"style":20},"def _get_obs(self) -> np.ndarray:\n",[22,115865,115866],{"__ignoreMap":20},[25,115867,115868,115870,115872],{"class":27,"line":28},[25,115869,32018],{"class":240},[25,115871,114427],{"class":31},[25,115873,114430],{"class":244},[99,115875,115876,115877,115879],{},"定义内部函数，用来生成观测。函数名前面的 ",[22,115878,1235],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[15,115881,115883],{"className":30449,"code":115882,"language":30451,"meta":20,"style":20},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[22,115884,115885,115899],{"__ignoreMap":20},[25,115886,115887,115889,115891,115893,115895,115897],{"class":27,"line":28},[25,115888,111639],{"class":244},[25,115890,290],{"class":240},[25,115892,38944],{"class":35},[25,115894,114441],{"class":244},[25,115896,30894],{"class":35},[25,115898,114446],{"class":244},[25,115900,115901,115903,115905,115907,115909,115911],{"class":27,"line":39},[25,115902,111649],{"class":244},[25,115904,290],{"class":240},[25,115906,38944],{"class":35},[25,115908,114441],{"class":244},[25,115910,30894],{"class":35},[25,115912,114461],{"class":244},[99,115914,115915],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[15,115917,115919],{"className":30449,"code":115918,"language":30451,"meta":20,"style":20},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[22,115920,115921,115937],{"__ignoreMap":20},[25,115922,115923,115925,115927,115929,115931,115933,115935],{"class":27,"line":28},[25,115924,110925],{"class":244},[25,115926,290],{"class":240},[25,115928,114470],{"class":244},[25,115930,30894],{"class":35},[25,115932,114475],{"class":244},[25,115934,30894],{"class":35},[25,115936,114480],{"class":244},[25,115938,115939,115941],{"class":27,"line":39},[25,115940,17156],{"class":240},[25,115942,114487],{"class":244},[99,115944,115945,115946,115949,115950,115952],{},"拼接观测，并转换成 ",[22,115947,115948],{},"float32","。很多强化学习库默认使用 ",[22,115951,115948],{},"，所以这里主动转换。",[15,115954,115955],{"className":30449,"code":115358,"language":30451,"meta":20,"style":20},[22,115956,115957],{"__ignoreMap":20},[25,115958,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991],{"class":27,"line":28},[25,115960,32018],{"class":240},[25,115962,114593],{"class":31},[25,115964,114596],{"class":244},[25,115966,698],{"class":240},[25,115968,114601],{"class":244},[25,115970,248],{"class":35},[25,115972,25216],{"class":240},[25,115974,39004],{"class":35},[25,115976,13674],{"class":240},[25,115978,39004],{"class":35},[25,115980,114614],{"class":244},[25,115982,114617],{"class":35},[25,115984,25216],{"class":240},[25,115986,39004],{"class":35},[25,115988,13674],{"class":240},[25,115990,39004],{"class":35},[25,115992,30857],{"class":244},[99,115994,115995,115996,115998,115999,116002],{},"定义 reset。",[22,115997,114637],{}," 用来控制随机数，保证实验可以复现。",[22,116000,116001],{},"options"," 用来接收额外配置，本章暂时不用。",[15,116004,116006],{"className":30449,"code":116005,"language":30451,"meta":20,"style":20},"super().reset(seed=seed)\n",[22,116007,116008],{"__ignoreMap":20},[25,116009,116010,116012,116014,116016,116018],{"class":27,"line":28},[25,116011,115599],{"class":35},[25,116013,114634],{"class":244},[25,116015,114637],{"class":5326},[25,116017,290],{"class":240},[25,116019,114642],{"class":244},[99,116021,116022,116023,116026],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[22,116024,116025],{},"self.np_random"," 生成可复现的随机数。",[15,116028,116030],{"className":30449,"code":116029,"language":30451,"meta":20,"style":20},"mujoco.mj_resetData(self.model, self.data)\n",[22,116031,116032],{"__ignoreMap":20},[25,116033,116034,116037,116039,116041,116043],{"class":27,"line":28},[25,116035,116036],{"class":244},"mujoco.mj_resetData(",[25,116038,30894],{"class":35},[25,116040,114652],{"class":244},[25,116042,30894],{"class":35},[25,116044,114657],{"class":244},[99,116046,116047],{},"把 MuJoCo 状态重置到默认状态。",[15,116049,116051],{"className":30449,"code":116050,"language":30451,"meta":20,"style":20},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[22,116052,116053],{"__ignoreMap":20},[25,116054,116055,116057,116059,116061,116063,116065,116067,116069,116071,116073,116075,116077,116079,116081,116083,116085,116087],{"class":27,"line":28},[25,116056,30894],{"class":35},[25,116058,114668],{"class":244},[25,116060,290],{"class":240},[25,116062,38944],{"class":35},[25,116064,114675],{"class":244},[25,116066,113833],{"class":5326},[25,116068,113836],{"class":240},[25,116070,86281],{"class":35},[25,116072,12545],{"class":244},[25,116074,113843],{"class":5326},[25,116076,290],{"class":240},[25,116078,86281],{"class":35},[25,116080,12545],{"class":244},[25,116082,31567],{"class":5326},[25,116084,290],{"class":240},[25,116086,30894],{"class":35},[25,116088,114700],{"class":244},[99,116090,115412,116091,116094,116095,116098,116099,116101],{},[22,116092,116093],{},"[:]"," 表示修改整个数组。",[22,116096,116097],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[22,116100,102221],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[15,116103,116105],{"className":30449,"code":116104,"language":30451,"meta":20,"style":20},"self.data.qvel[:] = 0.0\n",[22,116106,116107],{"__ignoreMap":20},[25,116108,116109,116111,116113,116115],{"class":27,"line":28},[25,116110,30894],{"class":35},[25,116112,114707],{"class":244},[25,116114,290],{"class":240},[25,116116,104832],{"class":35},[99,116118,116119],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[15,116121,116123],{"className":30449,"code":116122,"language":30451,"meta":20,"style":20},"self.steps = 0\nreturn self._get_obs(), {}\n",[22,116124,116125,116135],{"__ignoreMap":20},[25,116126,116127,116129,116131,116133],{"class":27,"line":28},[25,116128,30894],{"class":35},[25,116130,113777],{"class":244},[25,116132,290],{"class":240},[25,116134,47404],{"class":35},[25,116136,116137,116139,116141],{"class":27,"line":39},[25,116138,17156],{"class":240},[25,116140,38944],{"class":35},[25,116142,114747],{"class":244},[99,116144,116145],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[15,116147,116148],{"className":30449,"code":115421,"language":30451,"meta":20,"style":20},[22,116149,116150],{"__ignoreMap":20},[25,116151,116152,116154,116156],{"class":27,"line":28},[25,116153,32018],{"class":240},[25,116155,114758],{"class":31},[25,116157,114761],{"class":244},[99,116159,116160],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[15,116162,116164],{"className":30449,"code":116163,"language":30451,"meta":20,"style":20},"action = np.asarray(action, dtype=np.float32)\n",[22,116165,116166],{"__ignoreMap":20},[25,116167,116168,116170,116172,116174,116176,116178],{"class":27,"line":28},[25,116169,107513],{"class":244},[25,116171,290],{"class":240},[25,116173,114770],{"class":244},[25,116175,93571],{"class":5326},[25,116177,290],{"class":240},[25,116179,113867],{"class":244},[99,116181,116182,116183,28456],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[22,116184,115948],{},[15,116186,116188],{"className":30449,"code":116187,"language":30451,"meta":20,"style":20},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[22,116189,116190],{"__ignoreMap":20},[25,116191,116192,116194,116196,116198,116200,116202,116204],{"class":27,"line":28},[25,116193,107513],{"class":244},[25,116195,290],{"class":240},[25,116197,107518],{"class":244},[25,116199,30894],{"class":35},[25,116201,114789],{"class":244},[25,116203,30894],{"class":35},[25,116205,114794],{"class":244},[99,116207,116208],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[15,116210,116212],{"className":30449,"code":116211,"language":30451,"meta":20,"style":20},"self.data.ctrl[:] = action\n",[22,116213,116214],{"__ignoreMap":20},[25,116215,116216,116218,116220,116222],{"class":27,"line":28},[25,116217,30894],{"class":35},[25,116219,114805],{"class":244},[25,116221,290],{"class":240},[25,116223,107541],{"class":244},[99,116225,116226],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[15,116228,116230],{"className":30449,"code":116229,"language":30451,"meta":20,"style":20},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[22,116231,116232,116248],{"__ignoreMap":20},[25,116233,116234,116236,116238,116240,116242,116244,116246],{"class":27,"line":28},[25,116235,3135],{"class":240},[25,116237,101572],{"class":244},[25,116239,26114],{"class":240},[25,116241,32514],{"class":35},[25,116243,245],{"class":244},[25,116245,30894],{"class":35},[25,116247,114826],{"class":244},[25,116249,116250,116253,116255,116257,116259],{"class":27,"line":39},[25,116251,116252],{"class":244},"    mujoco.mj_step(",[25,116254,30894],{"class":35},[25,116256,114652],{"class":244},[25,116258,30894],{"class":35},[25,116260,114657],{"class":244},[99,116262,116263,116264,116267,116268,116270,116271,28456],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[22,116265,116266],{},"frame_skip=5","，所以外部调用一次 ",[22,116269,113948],{},"，内部实际执行 5 次 ",[22,116272,101286],{},[15,116274,116276],{"className":30449,"code":116275,"language":30451,"meta":20,"style":20},"self.steps += 1\n",[22,116277,116278],{"__ignoreMap":20},[25,116279,116280,116282,116284,116286],{"class":27,"line":28},[25,116281,30894],{"class":35},[25,116283,113777],{"class":244},[25,116285,9587],{"class":240},[25,116287,55770],{"class":35},[99,116289,116290],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[15,116292,116294],{"className":30449,"code":116293,"language":30451,"meta":20,"style":20},"obs = self._get_obs()\nreward = self._get_reward()\n",[22,116295,116296,116306],{"__ignoreMap":20},[25,116297,116298,116300,116302,116304],{"class":27,"line":28},[25,116299,110925],{"class":244},[25,116301,290],{"class":240},[25,116303,38944],{"class":35},[25,116305,114868],{"class":244},[25,116307,116308,116310,116312,116314],{"class":27,"line":39},[25,116309,111076],{"class":244},[25,116311,290],{"class":240},[25,116313,38944],{"class":35},[25,116315,114879],{"class":244},[99,116317,116318],{},"计算新的观测和奖励。",[15,116320,116322],{"className":30449,"code":116321,"language":30451,"meta":20,"style":20},"dist = float(np.linalg.norm(tip - target))\n",[22,116323,116324],{"__ignoreMap":20},[25,116325,116326,116328,116330,116332,116334,116336],{"class":27,"line":28},[25,116327,111667],{"class":244},[25,116329,290],{"class":240},[25,116331,109868],{"class":35},[25,116333,114922],{"class":244},[25,116335,775],{"class":240},[25,116337,114927],{"class":244},[99,116339,116340],{},"计算末端到目标的距离，并转换成 Python float。",[15,116342,116343],{"className":30449,"code":113748,"language":30451,"meta":20,"style":20},[22,116344,116345,116357],{"__ignoreMap":20},[25,116346,116347,116349,116351,116353,116355],{"class":27,"line":28},[25,116348,113755],{"class":244},[25,116350,290],{"class":240},[25,116352,113760],{"class":244},[25,116354,1153],{"class":240},[25,116356,113765],{"class":35},[25,116358,116359,116361,116363,116365,116367,116369,116371],{"class":27,"line":39},[25,116360,113770],{"class":244},[25,116362,290],{"class":240},[25,116364,38944],{"class":35},[25,116366,113777],{"class":244},[25,116368,1821],{"class":240},[25,116370,38944],{"class":35},[25,116372,113784],{"class":244},[99,116374,116375],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[15,116377,116379],{"className":30449,"code":116378,"language":30451,"meta":20,"style":20},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[22,116380,116381,116394],{"__ignoreMap":20},[25,116382,116383,116386,116388,116390,116392],{"class":27,"line":28},[25,116384,116385],{"class":244},"info ",[25,116387,290],{"class":240},[25,116389,4558],{"class":244},[25,116391,114973],{"class":45},[25,116393,114976],{"class":244},[25,116395,116396,116398],{"class":27,"line":39},[25,116397,17156],{"class":240},[25,116399,114983],{"class":244},[99,116401,116402,116405],{},[22,116403,116404],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[15,116407,116409],{"className":30449,"code":116408,"language":30451,"meta":20,"style":20},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[22,116410,116411,116420],{"__ignoreMap":20},[25,116412,116413,116416,116418],{"class":27,"line":28},[25,116414,116415],{"class":244},"env ",[25,116417,290],{"class":240},[25,116419,115013],{"class":244},[25,116421,116422,116424,116426,116428,116430,116432,116434],{"class":27,"line":39},[25,116423,113471],{"class":244},[25,116425,290],{"class":240},[25,116427,115023],{"class":244},[25,116429,114637],{"class":5326},[25,116431,290],{"class":240},[25,116433,434],{"class":35},[25,116435,251],{"class":244},[99,116437,116438,116439,116442],{},"创建环境并重置。",[22,116440,116441],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[15,116444,116446],{"className":30449,"code":116445,"language":30451,"meta":20,"style":20},"action = env.action_space.sample()\n",[22,116447,116448],{"__ignoreMap":20},[25,116449,116450,116452,116454],{"class":27,"line":28},[25,116451,107513],{"class":244},[25,116453,290],{"class":240},[25,116455,115092],{"class":244},[99,116457,116458],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[182,116460,102387],{"id":102386},[99,116462,105555],{},[15,116464,116467],{"className":116465,"code":116466,"language":5297,"meta":20},[5295],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[22,116468,116466],{"__ignoreMap":20},[99,116470,116471],{},"这个环境已经具备强化学习环境的基本结构。",[99,116473,116474],{},"主函数里使用随机动作：",[15,116476,116477],{"className":30449,"code":116445,"language":30451,"meta":20,"style":20},[22,116478,116479],{"__ignoreMap":20},[25,116480,116481,116483,116485],{"class":27,"line":28},[25,116482,107513],{"class":244},[25,116484,290],{"class":240},[25,116486,115092],{"class":244},[99,116488,116489],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[182,116491,102419],{"id":102418},[194,116493,116494,116497,116503,116512,116521,116530,116536],{},[106,116495,116496],{},"运行程序。",[106,116498,116499,116500,28456],{},"确认 ",[22,116501,116502],{},"obs.shape == (10,)",[106,116504,111252,116505,116508,116509,28456],{},[22,116506,116507],{},"env.action_space","，应类似 ",[22,116510,116511],{},"Box(-1.0, 1.0, (2,), float32)",[106,116513,105656,116514,116517,116518,28456],{},[22,116515,116516],{},"self.max_steps = 10","，确认环境会更快 ",[22,116519,116520],{},"truncated=True",[106,116522,102482,116523,102485,116526,116529],{},[22,116524,116525],{},"terminated = dist \u003C 0.05",[22,116527,116528],{},"dist \u003C 0.2","，观察是否更容易结束。",[106,116531,102482,116532,116535],{},[22,116533,116534],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[106,116537,116538,116539,116541,116542,116545],{},"在 ",[22,116540,116404],{}," 里加入 ",[22,116543,116544],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[182,116547,102524],{"id":102523},[210,116549,116551],{"id":116550},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[99,116553,116554,116555,116557],{},"Gymnasium 的 ",[22,116556,107205],{}," 返回 5 个值:",[15,116559,116561],{"className":30449,"code":116560,"language":30451,"meta":20,"style":20},"obs, reward, terminated, truncated, info\n",[22,116562,116563],{"__ignoreMap":20},[25,116564,116565],{"class":27,"line":28},[25,116566,116560],{"class":244},[99,116568,116569],{},"不是旧 Gym 的 4 个值。",[210,116571,116573,116576],{"id":116572},"datactrl-action-维度错误",[22,116574,116575],{},"data.ctrl[:] = action"," 维度错误",[99,116578,102594],{},[15,116580,116582],{"className":30449,"code":116581,"language":30451,"meta":20,"style":20},"print(self.model.nu)\nprint(action.shape)\n",[22,116583,116584,116595],{"__ignoreMap":20},[25,116585,116586,116588,116590,116592],{"class":27,"line":28},[25,116587,30486],{"class":35},[25,116589,245],{"class":244},[25,116591,30894],{"class":35},[25,116593,116594],{"class":244},".model.nu)\n",[25,116596,116597,116599],{"class":27,"line":39},[25,116598,30486],{"class":35},[25,116600,116601],{"class":244},"(action.shape)\n",[99,116603,116604],{},"两者必须匹配。",[210,116606,116608],{"id":116607},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[99,116610,102533],{},[15,116612,116614],{"className":30449,"code":116613,"language":30451,"meta":20,"style":20},"mujoco.mj_forward(self.model, self.data)\n",[22,116615,116616],{"__ignoreMap":20},[25,116617,116618,116621,116623,116625,116627],{"class":27,"line":28},[25,116619,116620],{"class":244},"mujoco.mj_forward(",[25,116622,30894],{"class":35},[25,116624,114652],{"class":244},[25,116626,30894],{"class":35},[25,116628,114657],{"class":244},[210,116630,116632,116634],{"id":116631},"observation_space-维度和-obs-不一致",[22,116633,113671],{}," 维度和 obs 不一致",[99,116636,102646],{},[15,116638,116640],{"className":30449,"code":116639,"language":30451,"meta":20,"style":20},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[22,116641,116642,116652,116659],{"__ignoreMap":20},[25,116643,116644,116646,116648,116650],{"class":27,"line":28},[25,116645,110925],{"class":244},[25,116647,290],{"class":240},[25,116649,38944],{"class":35},[25,116651,114868],{"class":244},[25,116653,116654,116656],{"class":27,"line":39},[25,116655,30486],{"class":35},[25,116657,116658],{"class":244},"(obs.shape)\n",[25,116660,116661,116663,116665,116667],{"class":27,"line":51},[25,116662,30486],{"class":35},[25,116664,245],{"class":244},[25,116666,30894],{"class":35},[25,116668,116669],{"class":244},".observation_space.shape)\n",[99,116671,116672],{},"两者必须一致。本章观测是：",[15,116674,116677],{"className":116675,"code":116676,"language":5297,"meta":20},[5295],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[22,116678,116676],{"__ignoreMap":20},[210,116680,116682],{"id":116681},"action-超过范围","action 超过范围",[99,116684,116685],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[15,116687,116688],{"className":30449,"code":116187,"language":30451,"meta":20,"style":20},[22,116689,116690],{"__ignoreMap":20},[25,116691,116692,116694,116696,116698,116700,116702,116704],{"class":27,"line":28},[25,116693,107513],{"class":244},[25,116695,290],{"class":240},[25,116697,107518],{"class":244},[25,116699,30894],{"class":35},[25,116701,114789],{"class":244},[25,116703,30894],{"class":35},[25,116705,114794],{"class":244},[99,116707,116708,116709,28456],{},"这能避免无效动作直接写入 ",[22,116710,101147],{},[210,116712,116714],{"id":116713},"忘记返回-info","忘记返回 info",[99,116716,116554,116717,101089,116719,116721],{},[22,116718,70127],{},[22,116720,107205],{}," 都会返回 info：",[15,116723,116724],{"className":30449,"code":113464,"language":30451,"meta":20,"style":20},[22,116725,116726,116734],{"__ignoreMap":20},[25,116727,116728,116730,116732],{"class":27,"line":28},[25,116729,113471],{"class":244},[25,116731,290],{"class":240},[25,116733,113476],{"class":244},[25,116735,116736,116738,116740],{"class":27,"line":39},[25,116737,113481],{"class":244},[25,116739,290],{"class":240},[25,116741,113486],{"class":244},[99,116743,116744,116745,28456],{},"即使暂时没有额外信息，也返回 ",[22,116746,32530],{},[182,116748,116750],{"id":116749},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[99,116752,116753],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[194,116755,116756,116759,116762,116765,116768,116771],{},[106,116757,116758],{},"更稳定的 reward。",[106,116760,116761],{},"合理的 episode 长度。",[106,116763,116764],{},"可重复的随机目标采样。",[106,116766,116767],{},"render 接口。",[106,116769,116770],{},"环境注册代码。",[106,116772,116773],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[99,116775,116776],{},"如果只是自己写训练循环，最小形式是：",[15,116778,116780],{"className":30449,"code":116779,"language":30451,"meta":20,"style":20},"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",[22,116781,116782,116790,116806,116810,116826,116835,116844,116854],{"__ignoreMap":20},[25,116783,116784,116786,116788],{"class":27,"line":28},[25,116785,116415],{"class":244},[25,116787,290],{"class":240},[25,116789,115013],{"class":244},[25,116791,116792,116794,116796,116798,116800,116802,116804],{"class":27,"line":39},[25,116793,113471],{"class":244},[25,116795,290],{"class":240},[25,116797,115023],{"class":244},[25,116799,114637],{"class":5326},[25,116801,290],{"class":240},[25,116803,434],{"class":35},[25,116805,251],{"class":244},[25,116807,116808],{"class":27,"line":51},[25,116809,2510],{"emptyLinePlaceholder":167},[25,116811,116812,116814,116816,116818,116820,116822,116824],{"class":27,"line":59},[25,116813,3135],{"class":240},[25,116815,101572],{"class":244},[25,116817,26114],{"class":240},[25,116819,32514],{"class":35},[25,116821,245],{"class":244},[25,116823,6520],{"class":35},[25,116825,30857],{"class":244},[25,116827,116828,116831,116833],{"class":27,"line":67},[25,116829,116830],{"class":244},"    action ",[25,116832,290],{"class":240},[25,116834,115092],{"class":244},[25,116836,116837,116840,116842],{"class":27,"line":75},[25,116838,116839],{"class":244},"    obs, reward, terminated, truncated, info ",[25,116841,290],{"class":240},[25,116843,113486],{"class":244},[25,116845,116846,116848,116850,116852],{"class":27,"line":83},[25,116847,3211],{"class":240},[25,116849,115158],{"class":244},[25,116851,115161],{"class":240},[25,116853,115164],{"class":244},[25,116855,116856,116859,116861],{"class":27,"line":91},[25,116857,116858],{"class":244},"        obs, info ",[25,116860,290],{"class":240},[25,116862,113476],{"class":244},[182,116864,116866],{"id":116865},"_9本章小结","9.本章小结",[99,116868,116869],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[15,116871,116874],{"className":116872,"code":116873,"language":5297,"meta":20},[5295],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[22,116875,116873],{"__ignoreMap":20},[99,116877,116878],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[159,116880,116881],{},"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":20,"searchDepth":39,"depth":39,"links":116883},[116884,116885,116886,116893,116897,116898,116899,116909,116910],{"id":100717,"depth":39,"text":100718},{"id":100840,"depth":39,"text":100841},{"id":101115,"depth":39,"text":101116,"children":116887},[116888,116890,116892],{"id":113695,"depth":51,"text":116889},"terminated 和 truncated 的区别",{"id":113798,"depth":51,"text":116891},"observation_space 和 action_space",{"id":113925,"depth":51,"text":113926},{"id":101323,"depth":39,"text":101324,"children":116894},[116895,116896],{"id":101643,"depth":51,"text":101643},{"id":101779,"depth":51,"text":101779},{"id":102386,"depth":39,"text":102387},{"id":102418,"depth":39,"text":102419},{"id":102523,"depth":39,"text":102524,"children":116900},[116901,116902,116904,116905,116907,116908],{"id":116550,"depth":51,"text":116551},{"id":116572,"depth":51,"text":116903},"data.ctrl[:] = action 维度错误",{"id":116607,"depth":51,"text":116608},{"id":116631,"depth":51,"text":116906},"observation_space 维度和 obs 不一致",{"id":116681,"depth":51,"text":116682},{"id":116713,"depth":51,"text":116714},{"id":116749,"depth":39,"text":116750},{"id":116865,"depth":39,"text":116866},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113448,"description":20},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116917,"title":116918,"body":116919,"description":117342,"extension":165,"meta":117343,"navigation":167,"path":117344,"seo":117345,"stem":117346,"__hash__":117347},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116920,"toc":117332},[116921,116925,116928,116931,116951,116957,116963,116973,116976,116979,116999,117002,117006,117009,117015,117018,117032,117035,117038,117112,117115,117121,117124,117147,117150,117200,117203,117209,117212,117215,117218,117237,117240,117246,117249,117252,117255,117275,117278,117281,117284,117329],[10,116922,116924],{"id":116923},"mujoco-学习","MuJoCo 学习",[99,116926,116927],{},"初版",[99,116929,116930],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[194,116932,116933,116936,116939,116948],{},[106,116934,116935],{},"MuJoCo 模型文件在描述什么。",[106,116937,116938],{},"Python 代码怎样读取和推进仿真。",[106,116940,116941,455,116943,455,116945,116947],{},[22,116942,104101],{},[22,116944,104431],{},[22,116946,104434],{}," 这些数组为什么重要。",[106,116949,116950],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[99,116952,116953,116954,116956],{},"默认环境为 Fedora 44、Python >= 3.10、",[22,116955,101098],{}," 官方 Python bindings。",[99,116958,116959,116960,116962],{},"注意：本文禁止使用 ",[22,116961,101083],{},"。所有示例均使用：",[15,116964,116965],{"className":30449,"code":101649,"language":30451,"meta":20,"style":20},[22,116966,116967],{"__ignoreMap":20},[25,116968,116969,116971],{"class":27,"line":28},[25,116970,30463],{"class":240},[25,116972,101372],{"class":244},[182,116974,116975],{"id":116975},"适合谁阅读",[99,116977,116978],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[194,116980,116981,116984,116987,116990],{},[106,116982,116983],{},"没学过 MuJoCo，只会一点 Python。",[106,116985,116986],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[106,116988,116989],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[106,116991,116992,116993,116995,116996,116998],{},"以前接触过 ",[22,116994,101083],{},"，现在想迁移到官方 ",[22,116997,101092],{}," Python bindings。",[99,117000,117001],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[182,117003,117005],{"id":117004},"mujoco-到底是什么","MuJoCo 到底是什么",[99,117007,117008],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[15,117010,117013],{"className":117011,"code":117012,"language":5297,"meta":20},[5295],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[22,117014,117012],{"__ignoreMap":20},[99,117016,117017],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[194,117019,117020,117023,117026,117029],{},[106,117021,117022],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[106,117024,117025],{},"快速测试控制算法，不必一开始就上真实机器人。",[106,117027,117028],{},"生成强化学习环境。",[106,117030,117031],{},"采集状态、动作、图像、奖励等训练数据。",[182,117033,117034],{"id":117034},"学习前的心智模型",[99,117036,117037],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[380,117039,117040,117052],{},[383,117041,117042],{},[386,117043,117044,117047,117050],{},[389,117045,117046],{"align":23846},"部分",[389,117048,117049],{"align":23846},"负责什么",[389,117051,21297],{"align":23846},[427,117053,117054,117065,117077,117089,117101],{},[386,117055,117056,117059,117062],{},[432,117057,117058],{"align":23846},"MJCF XML",[432,117060,117061],{"align":23846},"定义世界和机器人结构",[432,117063,117064],{"align":23846},"地面、盒子、关节、电机、摄像头",[386,117066,117067,117071,117074],{},[432,117068,117069],{"align":23846},[22,117070,100780],{},[432,117072,117073],{"align":23846},"编译后的静态模型",[432,117075,117076],{"align":23846},"有几个关节、有几个电机、时间步长是多少",[386,117078,117079,117083,117086],{},[432,117080,117081],{"align":23846},[22,117082,100790],{},[432,117084,117085],{"align":23846},"运行中的动态状态",[432,117087,117088],{"align":23846},"当前时间、位置、速度、电机输入",[386,117090,117091,117095,117098],{},[432,117092,117093],{"align":23846},[22,117094,101286],{},[432,117096,117097],{"align":23846},"推进一步物理仿真",[432,117099,117100],{"align":23846},"根据重力、力、碰撞更新状态",[386,117102,117103,117106,117109],{},[432,117104,117105],{"align":23846},"Viewer \u002F Renderer",[432,117107,117108],{"align":23846},"把仿真显示出来",[432,117110,117111],{"align":23846},"打开窗口或保存图片",[99,117113,117114],{},"一句话总结：",[15,117116,117119],{"className":117117,"code":117118,"language":5297,"meta":20},[5295],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[22,117120,117118],{"__ignoreMap":20},[99,117122,117123],{},"参考来源：",[103,117125,117126,117133,117140],{},[106,117127,117128,117129],{},"MuJoCo Python 官方文档：",[481,117130,117131],{"href":117131,"rel":117132},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23973],[106,117134,117135,117136],{},"MuJoCo XML Reference：",[481,117137,117138],{"href":117138,"rel":117139},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23973],[106,117141,117142,117143],{},"MuJoCo Overview：",[481,117144,117145],{"href":117145,"rel":117146},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23973],[182,117148,117149],{"id":117149},"章节目录",[194,117151,117152,117158,117164,117170,117176,117182,117188,117194],{},[106,117153,117154],{},[481,117155,117157],{"href":117156},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[106,117159,117160],{},[481,117161,117163],{"href":117162},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[106,117165,117166],{},[481,117167,117169],{"href":117168},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[106,117171,117172],{},[481,117173,117175],{"href":117174},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[106,117177,117178],{},[481,117179,117181],{"href":117180},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[106,117183,117184],{},[481,117185,117187],{"href":117186},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[106,117189,117190],{},[481,117191,117193],{"href":117192},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[106,117195,117196],{},[481,117197,117199],{"href":117198},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[182,117201,117202],{"id":117202},"推荐学习路线",[15,117204,117207],{"className":117205,"code":117206,"language":5297,"meta":20},[5295],"环境安装\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",[22,117208,117206],{"__ignoreMap":20},[99,117210,117211],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[182,117213,117214],{"id":117214},"建议的目录结构",[99,117216,117217],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[15,117219,117221],{"className":17,"code":117220,"language":19,"meta":20,"style":20},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[22,117222,117223,117231],{"__ignoreMap":20},[25,117224,117225,117227,117229],{"class":27,"line":28},[25,117226,101337],{"class":31},[25,117228,29287],{"class":35},[25,117230,101342],{"class":45},[25,117232,117233,117235],{"class":27,"line":39},[25,117234,101347],{"class":35},[25,117236,101342],{"class":45},[99,117238,117239],{},"每一章的代码都单独保存：",[15,117241,117244],{"className":117242,"code":117243,"language":5297,"meta":20},[5295],"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",[22,117245,117243],{"__ignoreMap":20},[99,117247,117248],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[182,117250,117251],{"id":117251},"学习方法",[99,117253,117254],{},"每章建议按这个顺序操作：",[194,117256,117257,117260,117263,117266,117269,117272],{},[106,117258,117259],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[106,117261,117262],{},"复制最小可运行代码，保存成指定文件。",[106,117264,117265],{},"运行代码，确认没有报错。",[106,117267,117268],{},"对照“运行结果说明”理解输出。",[106,117270,117271],{},"做“验证步骤”，主动改一两个参数。",[106,117273,117274],{},"遇到报错先看“常见错误与解决方案”。",[99,117276,117277],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[182,117279,117280],{"id":117280},"全局排错顺序",[99,117282,117283],{},"遇到问题时，按下面顺序查：",[194,117285,117286,117292,117298,117303,117306,117309,117316,117326],{},[106,117287,117288,117289],{},"Python 环境是否激活：",[22,117290,117291],{},"which python",[106,117293,117294,117295],{},"MuJoCo 是否能导入：",[22,117296,117297],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[106,117299,117300,117301],{},"是否误装了 ",[22,117302,101083],{},[106,117304,117305],{},"XML 标签是否闭合、属性是否拼写正确",[106,117307,117308],{},"actuator 引用的 joint 名字是否存在",[106,117310,117311,117313,117314],{},[22,117312,101147],{}," 的长度是否等于 ",[22,117315,102229],{},[106,117317,105656,117318,82610,117320,117322,117323],{},[22,117319,104101],{},[22,117321,104431],{}," 后是否调用了 ",[22,117324,117325],{},"mujoco.mj_forward",[106,117327,117328],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[159,117330,117331],{},"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":20,"searchDepth":39,"depth":39,"links":117333},[117334,117335,117336,117337,117338,117339,117340,117341],{"id":116975,"depth":39,"text":116975},{"id":117004,"depth":39,"text":117005},{"id":117034,"depth":39,"text":117034},{"id":117149,"depth":39,"text":117149},{"id":117202,"depth":39,"text":117202},{"id":117214,"depth":39,"text":117214},{"id":117251,"depth":39,"text":117251},{"id":117280,"depth":39,"text":117280},"仿真搭建。",{"category":23488},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116918,"description":117342},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117349,"title":117350,"body":117351,"description":164,"extension":165,"meta":117806,"navigation":167,"path":117807,"seo":117808,"stem":117809,"__hash__":117810},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117352,"toc":117804},[117353,117356,117359,117365,117801],[10,117354,117350],{"id":117355},"_1-最常用的基本操作更新",[99,117357,117358],{},"装linux系统教程：",[99,117360,117361],{},[481,117362,117363],{"href":117363,"rel":117364},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23973],[15,117366,117370],{"className":117367,"code":117368,"language":117369,"meta":20,"style":20},"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",[22,117371,117372,117377,117382,117391,117396,117405,117410,117430,117435,117446,117451,117460,117465,117493,117498,117517,117522,117541,117545,117550,117566,117570,117575,117605,117609,117614,117630,117634,117639,117654,117658,117663,117679,117683,117688,117700,117712,117716,117721,117738,117742,117747,117765,117769,117774,117783,117787,117792],{"__ignoreMap":20},[25,117373,117374],{"class":27,"line":28},[25,117375,117376],{"class":302},"#更新相关的知识\n",[25,117378,117379],{"class":27,"line":39},[25,117380,117381],{"class":302},"# 更新软件包列表（从服务器获取最新软件信息）\n",[25,117383,117384,117386,117389],{"class":27,"line":51},[25,117385,24684],{"class":31},[25,117387,117388],{"class":45}," apt",[25,117390,26313],{"class":45},[25,117392,117393],{"class":27,"line":59},[25,117394,117395],{"class":302},"# 升级所有可更新的软件包（不删除旧包）\n",[25,117397,117398,117400,117402],{"class":27,"line":67},[25,117399,24684],{"class":31},[25,117401,117388],{"class":45},[25,117403,117404],{"class":45}," upgrade\n",[25,117406,117407],{"class":27,"line":75},[25,117408,117409],{"class":302},"#更新和升级软件包\n",[25,117411,117412,117414,117416,117419,117421,117423,117425,117428],{"class":27,"line":83},[25,117413,24684],{"class":31},[25,117415,117388],{"class":45},[25,117417,117418],{"class":45}," update",[25,117420,26261],{"class":244},[25,117422,24684],{"class":31},[25,117424,117388],{"class":45},[25,117426,117427],{"class":45}," upgrade",[25,117429,101052],{"class":35},[25,117431,117432],{"class":27,"line":91},[25,117433,117434],{"class":302},"#列出可更新的软件包及版本信息\n",[25,117436,117437,117440,117443],{"class":27,"line":1429},[25,117438,117439],{"class":31},"apt",[25,117441,117442],{"class":45}," list",[25,117444,117445],{"class":35}," --upgradable\n",[25,117447,117448],{"class":27,"line":1441},[25,117449,117450],{"class":302},"#彻底升级（处理依赖关系，可能删除旧包）\n",[25,117452,117453,117455,117457],{"class":27,"line":1723},[25,117454,24684],{"class":31},[25,117456,117388],{"class":45},[25,117458,117459],{"class":45}," full-upgrade\n",[25,117461,117462],{"class":27,"line":1728},[25,117463,117464],{"class":302},"#设置指定版本\n",[25,117466,117467,117469,117471,117473,117475,117478,117480,117482,117484,117486,117489,117491],{"class":27,"line":1734},[25,117468,24684],{"class":31},[25,117470,117388],{"class":45},[25,117472,23942],{"class":45},[25,117474,28973],{"class":240},[25,117476,117477],{"class":45},"package_nam",[25,117479,318],{"class":244},[25,117481,1203],{"class":240},[25,117483,290],{"class":45},[25,117485,1153],{"class":240},[25,117487,117488],{"class":45},"version_numbe",[25,117490,913],{"class":244},[25,117492,51378],{"class":240},[25,117494,117495],{"class":27,"line":1739},[25,117496,117497],{"class":302},"#只安装软件包不升级\n",[25,117499,117500,117502,117504,117506,117508,117510,117512,117514],{"class":27,"line":1753},[25,117501,24684],{"class":31},[25,117503,117388],{"class":45},[25,117505,23942],{"class":45},[25,117507,28973],{"class":240},[25,117509,117477],{"class":45},[25,117511,318],{"class":244},[25,117513,1203],{"class":240},[25,117515,117516],{"class":35}," --no-upgrade\n",[25,117518,117519],{"class":27,"line":1758},[25,117520,117521],{"class":302},"#只升级，不存在就不安装\n",[25,117523,117524,117526,117528,117530,117532,117534,117536,117538],{"class":27,"line":1764},[25,117525,24684],{"class":31},[25,117527,117388],{"class":45},[25,117529,23942],{"class":45},[25,117531,28973],{"class":240},[25,117533,117477],{"class":45},[25,117535,318],{"class":244},[25,117537,1203],{"class":240},[25,117539,117540],{"class":35}," --only-upgrade\n",[25,117542,117543],{"class":27,"line":1785},[25,117544,2510],{"emptyLinePlaceholder":167},[25,117546,117547],{"class":27,"line":1790},[25,117548,117549],{"class":302},"#安装指定的软件命令\n",[25,117551,117552,117554,117556,117558,117560,117562,117564],{"class":27,"line":1804},[25,117553,24684],{"class":31},[25,117555,117388],{"class":45},[25,117557,23942],{"class":45},[25,117559,28973],{"class":240},[25,117561,117477],{"class":45},[25,117563,318],{"class":244},[25,117565,51378],{"class":240},[25,117567,117568],{"class":27,"line":1809},[25,117569,2510],{"emptyLinePlaceholder":167},[25,117571,117572],{"class":27,"line":1838},[25,117573,117574],{"class":302},"#安装多个软件包\n",[25,117576,117577,117579,117581,117583,117585,117588,117591,117593,117595,117598,117600,117602],{"class":27,"line":1843},[25,117578,24684],{"class":31},[25,117580,117388],{"class":45},[25,117582,23942],{"class":45},[25,117584,28973],{"class":240},[25,117586,117587],{"class":45},"package_",[25,117589,117590],{"class":240},"1>",[25,117592,28973],{"class":240},[25,117594,117587],{"class":45},[25,117596,117597],{"class":240},"2>",[25,117599,28973],{"class":240},[25,117601,117587],{"class":45},[25,117603,117604],{"class":240},"3>\n",[25,117606,117607],{"class":27,"line":1860},[25,117608,2510],{"emptyLinePlaceholder":167},[25,117610,117611],{"class":27,"line":1865},[25,117612,117613],{"class":302},"#更新指定的软件命令\n",[25,117615,117616,117618,117620,117622,117624,117626,117628],{"class":27,"line":1870},[25,117617,24684],{"class":31},[25,117619,117388],{"class":45},[25,117621,117418],{"class":45},[25,117623,28973],{"class":240},[25,117625,117477],{"class":45},[25,117627,318],{"class":244},[25,117629,51378],{"class":240},[25,117631,117632],{"class":27,"line":1875},[25,117633,2510],{"emptyLinePlaceholder":167},[25,117635,117636],{"class":27,"line":1889},[25,117637,117638],{"class":302},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[25,117640,117641,117643,117646,117648,117650,117652],{"class":27,"line":1894},[25,117642,117439],{"class":31},[25,117644,117645],{"class":45}," show",[25,117647,28973],{"class":240},[25,117649,117477],{"class":45},[25,117651,318],{"class":244},[25,117653,51378],{"class":240},[25,117655,117656],{"class":27,"line":2687},[25,117657,2510],{"emptyLinePlaceholder":167},[25,117659,117660],{"class":27,"line":2701},[25,117661,117662],{"class":302},"#删除软件包命令\n",[25,117664,117665,117667,117669,117671,117673,117675,117677],{"class":27,"line":2709},[25,117666,24684],{"class":31},[25,117668,117388],{"class":45},[25,117670,26150],{"class":45},[25,117672,28973],{"class":240},[25,117674,117477],{"class":45},[25,117676,318],{"class":244},[25,117678,51378],{"class":240},[25,117680,117681],{"class":27,"line":2714},[25,117682,2510],{"emptyLinePlaceholder":167},[25,117684,117685],{"class":27,"line":2720},[25,117686,117687],{"class":302},"# 清理旧版本和缓存（释放磁盘空间）\n",[25,117689,117690,117692,117694,117697],{"class":27,"line":2726},[25,117691,24684],{"class":31},[25,117693,117388],{"class":45},[25,117695,117696],{"class":45}," autoremove",[25,117698,117699],{"class":302},"  # 删除不再需要的依赖和库文件\n",[25,117701,117702,117704,117706,117709],{"class":27,"line":2731},[25,117703,24684],{"class":31},[25,117705,117388],{"class":45},[25,117707,117708],{"class":45}," clean",[25,117710,117711],{"class":302},"       # 清理下载的缓存包\n",[25,117713,117714],{"class":27,"line":8058},[25,117715,2510],{"emptyLinePlaceholder":167},[25,117717,117718],{"class":27,"line":8082},[25,117719,117720],{"class":302},"#移除软件包及配置文件\n",[25,117722,117723,117725,117727,117730,117732,117734,117736],{"class":27,"line":8087},[25,117724,24684],{"class":31},[25,117726,117388],{"class":45},[25,117728,117729],{"class":45}," purge",[25,117731,28973],{"class":240},[25,117733,117477],{"class":45},[25,117735,318],{"class":244},[25,117737,51378],{"class":240},[25,117739,117740],{"class":27,"line":8093},[25,117741,2510],{"emptyLinePlaceholder":167},[25,117743,117744],{"class":27,"line":8120},[25,117745,117746],{"class":302},"#查找软件包命令\n",[25,117748,117749,117751,117753,117756,117758,117761,117763],{"class":27,"line":8125},[25,117750,24684],{"class":31},[25,117752,117388],{"class":45},[25,117754,117755],{"class":45}," search",[25,117757,28973],{"class":240},[25,117759,117760],{"class":45},"keywor",[25,117762,557],{"class":244},[25,117764,51378],{"class":240},[25,117766,117767],{"class":27,"line":8131},[25,117768,2510],{"emptyLinePlaceholder":167},[25,117770,117771],{"class":27,"line":8143},[25,117772,117773],{"class":302},"#列出所有已安装的包\n",[25,117775,117776,117778,117780],{"class":27,"line":8155},[25,117777,117439],{"class":31},[25,117779,117442],{"class":45},[25,117781,117782],{"class":35}," --installed\n",[25,117784,117785],{"class":27,"line":8167},[25,117786,2510],{"emptyLinePlaceholder":167},[25,117788,117789],{"class":27,"line":9826},[25,117790,117791],{"class":302},"#列出所有已安装的包的版本信息\n",[25,117793,117794,117796,117798],{"class":27,"line":9851},[25,117795,117439],{"class":31},[25,117797,117442],{"class":45},[25,117799,117800],{"class":35}," --all-versions\n",[159,117802,117803],{},"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":20,"searchDepth":39,"depth":39,"links":117805},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117350,"description":164},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117812,"title":117813,"body":117814,"description":164,"extension":165,"meta":118555,"navigation":167,"path":118556,"seo":118557,"stem":118558,"__hash__":118559},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117815,"toc":118542},[117816,117819,117823,117826,117832,117836,117840,117846,117851,117856,117861,117866,117871,117874,117877,117880,117883,117887,117890,117895,117898,117903,117906,117911,117918,117921,117924,117927,117930,117933,117944,117948,117952,117957,117962,117966,117971,117975,117980,117984,117988,117993,117996,118041,118046,118050,118054,118059,118065,118070,118080,118085,118095,118100,118105,118132,118136,118139,118144,118147,118172,118176,118181,118184,118189,118194,118214,118219,118222,118237,118241,118294,118297,118302,118306,118309,118324,118327,118330,118335,118339,118343,118346,118350,118354,118357,118362,118367,118371,118378,118386,118389,118396,118401,118406,118409,118414,118421,118426,118433,118437,118439,118444,118448,118451,118454,118459,118462,118467,118470,118475,118480,118485,118489,118494,118498,118539],[10,117817,117813],{"id":117818},"_2-linux装机教程",[182,117820,117822],{"id":117821},"_21-实体机","2.1 实体机",[99,117824,117825],{},"使用清华源：（Ubuntu24.04）",[99,117827,117828],{},[481,117829,117830],{"href":117830,"rel":117831},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23973],[182,117833,117835],{"id":117834},"_22-普通虚拟机","2.2 普通虚拟机",[210,117837,117839],{"id":117838},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[99,117841,117842],{},[481,117843,117844],{"href":117844,"rel":117845},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23973],[99,117847,117848],{},[155,117849],{"alt":20,"src":117850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[99,117852,117853],{},[155,117854],{"alt":20,"src":117855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[99,117857,117858],{},[155,117859],{"alt":20,"src":117860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[99,117862,117863],{},[155,117864],{"alt":20,"src":117865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[99,117867,117868],{},[155,117869],{"alt":20,"src":117870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[99,117872,117873],{},"内存4G（4096MB）；",[99,117875,117876],{},"CPU给4个核；",[99,117878,117879],{},"硬盘动态分配60G；",[99,117881,117882],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[210,117884,117886],{"id":117885},"_222-安装ubuntu","2.2.2 安装Ubuntu",[99,117888,117889],{},"按照1.1的步骤下载Ubuntu",[99,117891,117892],{},[155,117893],{"alt":20,"src":117894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[99,117896,117897],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[99,117899,117900],{},[155,117901],{"alt":20,"src":117902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[99,117904,117905],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[99,117907,117908],{},[155,117909],{"alt":20,"src":117910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[99,117912,117913,117914,117917],{},"选择“正常安装”(找不到都用Alt+F7)， ",[392,117915,117916],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[99,117919,117920],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[99,117922,117923],{},"将改动写入磁盘吗 继续",[99,117925,117926],{},"选择东八区（shanghai，大致在地图上点一下），继续",[99,117928,117929],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[99,117931,117932],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[99,117934,117935,117936,117939,117940,117943],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[392,117937,117938],{},"除了"," 选不发送系统信息与不升级之外， ",[392,117941,117942],{},"其它"," 都跳过或前进）",[210,117945,117947],{"id":117946},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22108,117949,117951],{"id":117950},"_2231-全屏","2.2.3.1 全屏",[99,117953,117954],{},[155,117955],{"alt":20,"src":117956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[99,117958,117959],{},[155,117960],{"alt":20,"src":117961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22108,117963,117965],{"id":117964},"_2232-文件交换","2.2.3.2 文件交换",[99,117967,117968],{},[155,117969],{"alt":20,"src":117970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22108,117972,117974],{"id":117973},"_2233-新建文本文档","2.2.3.3 新建文本文档",[99,117976,117977],{},[155,117978],{"alt":20,"src":117979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[182,117981,117983],{"id":117982},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[210,117985,117987],{"id":117986},"_231-简介与优缺点","2.3.1 简介与优缺点",[194,117989,117990],{},[106,117991,117992],{},"什么情况下推荐？",[99,117994,117995],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[194,117997,117998],{"start":39},[106,117999,118000,118001],{},"优缺点：",[194,118002,118003,118033],{},[106,118004,118005,118006],{},"优点：",[194,118007,118008,118011,118018,118021,118024,118027,118030],{},[106,118009,118010],{},"WSL2是最好的Linux发行版;(bushi)",[106,118012,118013,118014,118017],{},"性能损耗极低。且比在Windows上跑深度性能 ",[392,118015,118016],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[106,118019,118020],{},"非常方便调用USB设备，可以USB直通;",[106,118022,118023],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[106,118025,118026],{},"非常方便Win与WSL2互相传文件等协同操作;",[106,118028,118029],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[106,118031,118032],{},"非常方便使用Windows的VScode远程开发;",[106,118034,118035,118036],{},"缺点：",[194,118037,118038],{},[106,118039,118040],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[99,118042,118043],{},[155,118044],{"alt":20,"src":118045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[210,118047,118049],{"id":118048},"_232-安装教程","2.3.2 安装教程",[22108,118051,118053],{"id":118052},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[194,118055,118056],{},[106,118057,118058],{},"方法一(图形界面)",[99,118060,118061,118062,24726],{},"用Win+R输入",[22,118063,118064],{},"appwiz.cpl",[99,118066,118067],{},[155,118068],{"alt":20,"src":118069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[99,118071,118072,118073,118076,118077,26544],{},"点击OK进入 ",[392,118074,118075],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[392,118078,118079],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[99,118081,118082],{},[155,118083],{"alt":20,"src":118084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[99,118086,118087,118088,101089,118091,118094],{},"选择 ",[392,118089,118090],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[392,118092,118093],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[99,118096,118097],{},[155,118098],{"alt":20,"src":118099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[194,118101,118102],{"start":39},[106,118103,118104],{},"方法二(命令行)",[15,118106,118110],{"className":118107,"code":118108,"language":118109,"meta":20,"style":20},"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",[22,118111,118112,118117,118122,118127],{"__ignoreMap":20},[25,118113,118114],{"class":27,"line":28},[25,118115,118116],{},"# 开启 Linux 子系统\n",[25,118118,118119],{"class":27,"line":39},[25,118120,118121],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[25,118123,118124],{"class":27,"line":51},[25,118125,118126],{},"# 开启虚拟机平台\n",[25,118128,118129],{"class":27,"line":59},[25,118130,118131],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22108,118133,118135],{"id":118134},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[99,118137,118138],{},"用管理员权限打开powershell",[99,118140,118141],{},[155,118142],{"alt":20,"src":118143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[99,118145,118146],{},"升级WSL并设置默认版本为WSL2",[15,118148,118150],{"className":118107,"code":118149,"language":118109,"meta":20,"style":20},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[22,118151,118152,118157,118162,118167],{"__ignoreMap":20},[25,118153,118154],{"class":27,"line":28},[25,118155,118156],{},"# 更新 wsl\n",[25,118158,118159],{"class":27,"line":39},[25,118160,118161],{},"wsl --update\n",[25,118163,118164],{"class":27,"line":51},[25,118165,118166],{},"# 将 wsl 版本设置为 wsl2\n",[25,118168,118169],{"class":27,"line":59},[25,118170,118171],{},"wsl --set-default-version 2\n",[22108,118173,118175],{"id":118174},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[194,118177,118178],{},[106,118179,118180],{},"方式一(商店下载)",[99,118182,118183],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[99,118185,118186],{},[155,118187],{"alt":20,"src":118188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[194,118190,118191],{"start":39},[106,118192,118193],{},"方式二(命令行安装)",[15,118195,118197],{"className":118107,"code":118196,"language":118109,"meta":20,"style":20},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[22,118198,118199,118204,118209],{"__ignoreMap":20},[25,118200,118201],{"class":27,"line":28},[25,118202,118203],{},"# 列出可安装的 Linux 版本\n",[25,118205,118206],{"class":27,"line":39},[25,118207,118208],{},"#（需要科学手段）\n",[25,118210,118211],{"class":27,"line":51},[25,118212,118213],{},"wsl --list --online\n",[99,118215,118216],{},[155,118217],{"alt":20,"src":118218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[99,118220,118221],{},"选择对应发行版并安装",[15,118223,118225],{"className":118107,"code":118224,"language":118109,"meta":20,"style":20},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[22,118226,118227,118232],{"__ignoreMap":20},[25,118228,118229],{"class":27,"line":28},[25,118230,118231],{},"# Ubuntu安装完毕后需要重启系统\n",[25,118233,118234],{"class":27,"line":39},[25,118235,118236],{},"wsl --install -d Ubuntu-24.04\n",[22108,118238,118240],{"id":118239},"_2324-查看系统状态","2.3.2.4 查看系统状态",[15,118242,118244],{"className":118107,"code":118243,"language":118109,"meta":20,"style":20},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[22,118245,118246,118251,118256,118261,118266,118270,118274,118279,118284,118289],{"__ignoreMap":20},[25,118247,118248],{"class":27,"line":28},[25,118249,118250],{},"# 查看 wsl\n",[25,118252,118253],{"class":27,"line":39},[25,118254,118255],{},"wsl -l\n",[25,118257,118258],{"class":27,"line":51},[25,118259,118260],{},"# 查看 wsl 运行版本或模式\n",[25,118262,118263],{"class":27,"line":59},[25,118264,118265],{},"wsl -l -v\n",[25,118267,118268],{"class":27,"line":67},[25,118269,2510],{"emptyLinePlaceholder":167},[25,118271,118272],{"class":27,"line":75},[25,118273,2510],{"emptyLinePlaceholder":167},[25,118275,118276],{"class":27,"line":83},[25,118277,118278],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[25,118280,118281],{"class":27,"line":91},[25,118282,118283],{},"wsl --set-version \u003Cdistro> 2\n",[25,118285,118286],{"class":27,"line":1429},[25,118287,118288],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[25,118290,118291],{"class":27,"line":1441},[25,118292,118293],{},"wsl --unregister \u003Cdistro>\n",[99,118295,118296],{},"输出Version为2即正常",[99,118298,118299],{},[155,118300],{"alt":20,"src":118301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22108,118303,118305],{"id":118304},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[99,118307,118308],{},"直接在Powershell里输入wsl命令进入子系统",[15,118310,118312],{"className":118107,"code":118311,"language":118109,"meta":20,"style":20},"# 进入子系统\nwsl\n",[22,118313,118314,118319],{"__ignoreMap":20},[25,118315,118316],{"class":27,"line":28},[25,118317,118318],{},"# 进入子系统\n",[25,118320,118321],{"class":27,"line":39},[25,118322,118323],{},"wsl\n",[99,118325,118326],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[99,118328,118329],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[99,118331,118332],{},[155,118333],{"alt":20,"src":118334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[210,118336,118338],{"id":118337},"_233-配置各种环境","2.3.3 配置各种环境",[22108,118340,118342],{"id":118341},"_2331-换源","2.3.3.1 换源",[99,118344,118345],{},"(同实体机LINUX，往下找教程)",[22108,118347,118349],{"id":118348},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23020,118351,118353],{"id":118352},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[99,118355,118356],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[99,118358,118359],{},[155,118360],{"alt":20,"src":118361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[99,118363,118364],{},[155,118365],{"alt":20,"src":118366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23020,118368,118370],{"id":118369},"_23322-cuda","2.3.3.2.2 CUDA",[99,118372,118373,118374],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[481,118375,118376],{"href":118376,"rel":118377},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23973],[99,118379,118380,118383],{},[155,118381],{"alt":20,"src":118382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[155,118384],{"alt":20,"src":118385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[99,118387,118388],{},"在下方的网站，选择合适的版本。",[99,118390,118391,118392],{},"WSL2 专属 CUDA 指南：",[481,118393,118394],{"href":118394,"rel":118395},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23973],[99,118397,118398],{},[392,118399,118400],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[99,118402,118403],{},[155,118404],{"alt":20,"src":118405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[99,118407,118408],{},"挨行敲一遍",[99,118410,118411],{},[155,118412],{"alt":20,"src":118413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[99,118415,118416,118417,118420],{},"敲完后，输入",[22,118418,118419],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[99,118422,118423],{},[155,118424],{"alt":20,"src":118425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[99,118427,118428,118429,118432],{},"（请详看下方教程的",[392,118430,118431],{},"安装CUDA的配置环境来看","如何配置环境）",[23020,118434,118436],{"id":118435},"_23323-cudnn","2.3.3.2.3 cuDNN",[99,118438,118345],{},[99,118440,118441],{},[155,118442],{"alt":20,"src":118443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22108,118445,118447],{"id":118446},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[99,118449,118450],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[99,118452,118453],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[99,118455,118456],{},[155,118457],{"alt":20,"src":118458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[99,118460,118461],{},"连接WSL2",[99,118463,118464],{},[155,118465],{"alt":20,"src":118466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[99,118468,118469],{},"远程开发成功。",[99,118471,118472],{},[155,118473],{"alt":20,"src":118474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[99,118476,118477],{},[155,118478],{"alt":20,"src":118479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[99,118481,118482],{},[155,118483],{"alt":20,"src":118484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22108,118486,118488],{"id":118487},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[99,118490,118491],{},[155,118492],{"alt":20,"src":118493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22108,118495,118497],{"id":118496},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[15,118499,118501],{"className":117367,"code":118500,"language":117369,"meta":20,"style":20},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[22,118502,118503,118511,118519,118530,118534],{"__ignoreMap":20},[25,118504,118505,118507,118509],{"class":27,"line":28},[25,118506,24684],{"class":31},[25,118508,117388],{"class":45},[25,118510,26313],{"class":45},[25,118512,118513,118515,118517],{"class":27,"line":39},[25,118514,24684],{"class":31},[25,118516,117388],{"class":45},[25,118518,117404],{"class":45},[25,118520,118521,118523,118525,118527],{"class":27,"line":51},[25,118522,24684],{"class":31},[25,118524,117388],{"class":45},[25,118526,23942],{"class":45},[25,118528,118529],{"class":45}," mesa-utils\n",[25,118531,118532],{"class":27,"line":59},[25,118533,2510],{"emptyLinePlaceholder":167},[25,118535,118536],{"class":27,"line":67},[25,118537,118538],{"class":302},"#然后重启wsl2即可\n",[159,118540,118541],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":20,"searchDepth":39,"depth":39,"links":118543},[118544,118545,118550],{"id":117821,"depth":39,"text":117822},{"id":117834,"depth":39,"text":117835,"children":118546},[118547,118548,118549],{"id":117838,"depth":51,"text":117839},{"id":117885,"depth":51,"text":117886},{"id":117946,"depth":51,"text":117947},{"id":117982,"depth":39,"text":117983,"children":118551},[118552,118553,118554],{"id":117986,"depth":51,"text":117987},{"id":118048,"depth":51,"text":118049},{"id":118337,"depth":51,"text":118338},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117813,"description":164},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118561,"title":118562,"body":118563,"description":164,"extension":165,"meta":121499,"navigation":167,"path":121500,"seo":121501,"stem":121502,"__hash__":121503},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118564,"toc":121471},[118565,118568,118572,118578,118582,118588,118592,118780,118783,118788,118792,118796,118799,118802,118808,118813,118816,118819,118824,118857,118862,118866,118943,118946,118951,118955,118958,118997,119000,119009,119027,119032,119039,119156,119161,119164,119191,119196,119200,119209,119259,119266,119270,119273,119287,119294,119328,119333,119337,119360,119363,119368,119372,119375,119378,119381,119423,119427,119430,119433,119474,119478,119482,119485,119490,119495,119498,119521,119524,119532,119537,119540,119545,119550,119553,119558,119562,119567,119590,119595,119657,119665,119670,119675,119678,119683,119686,119691,119696,119714,119719,119725,119730,119744,119748,119751,119754,119757,119800,119803,119808,119909,119912,119917,119921,119925,119962,119966,119970,119974,120020,120024,120069,120073,120080,120088,120143,120146,120223,120226,120249,120253,120256,120261,120266,120274,120277,120282,120287,120292,120295,120300,120309,120312,120317,120320,120391,120396,120399,120404,120407,120412,120415,120420,120423,120428,120433,120436,120511,120514,120527,120532,120535,120549,120552,120581,120586,120615,120618,120623,120627,120632,120641,120644,120649,120652,120657,120660,120663,120668,120671,120676,120681,120684,120689,120692,120817,120822,120852,120855,120860,120865,120882,120885,120928,120931,120958,120963,120976,121119,121123,121128,121142,121145,121196,121199,121229,121232,121248,121253,121267,121270,121337,121342,121351,121356,121359,121371,121376,121383,121407,121410,121415,121418,121437,121442,121449,121461,121468],[10,118566,118562],{"id":118567},"_3-安装必备配置",[182,118569,118571],{"id":118570},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[15,118573,118576],{"className":118574,"code":118575,"language":5297},[5295],"  打开下方网站（注意，该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",[22,118577,118575],{"__ignoreMap":20},[210,118579,118581],{"id":118580},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[15,118583,118586],{"className":118584,"code":118585,"language":5297},[5295],"  输入以下命令\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",[22,118587,118585],{"__ignoreMap":20},[210,118589,118591],{"id":118590},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[15,118593,118597],{"className":118594,"code":118595,"language":118596,"meta":20,"style":20},"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",[22,118598,118599,118607,118618,118630,118644,118648,118658,118663,118667,118671,118676,118680,118692,118696,118701,118705,118716,118720,118736,118740,118751,118755,118760,118764,118772],{"__ignoreMap":20},[25,118600,118601,118603,118605],{"class":27,"line":28},[25,118602,24684],{"class":31},[25,118604,117388],{"class":45},[25,118606,26313],{"class":45},[25,118608,118609,118611,118613,118615],{"class":27,"line":39},[25,118610,24684],{"class":31},[25,118612,117388],{"class":45},[25,118614,23942],{"class":45},[25,118616,118617],{"class":45}," vim\n",[25,118619,118620,118622,118625,118627],{"class":27,"line":51},[25,118621,24684],{"class":31},[25,118623,118624],{"class":45}," rm",[25,118626,25430],{"class":35},[25,118628,118629],{"class":45}," \u002Fetc\u002Fapt\u002Fsources.list\n",[25,118631,118632,118634,118636,118638,118641],{"class":27,"line":59},[25,118633,24684],{"class":31},[25,118635,118624],{"class":45},[25,118637,25430],{"class":35},[25,118639,118640],{"class":45}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[25,118642,118643],{"class":35},"**\n",[25,118645,118646],{"class":27,"line":67},[25,118647,2510],{"emptyLinePlaceholder":167},[25,118649,118650,118652,118655],{"class":27,"line":75},[25,118651,24684],{"class":31},[25,118653,118654],{"class":45}," vim",[25,118656,118657],{"class":45}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[25,118659,118660],{"class":27,"line":83},[25,118661,118662],{"class":45},"```\n",[25,118664,118665],{"class":27,"line":91},[25,118666,2510],{"emptyLinePlaceholder":167},[25,118668,118669],{"class":27,"line":1429},[25,118670,2510],{"emptyLinePlaceholder":167},[25,118672,118673],{"class":27,"line":1441},[25,118674,118675],{"class":31},"选择好Ubuntu版本后，复制下方的内容。\n",[25,118677,118678],{"class":27,"line":1723},[25,118679,2510],{"emptyLinePlaceholder":167},[25,118681,118682,118684,118687,118690],{"class":27,"line":1728},[25,118683,469],{"class":240},[25,118685,118686],{"class":45},"[](",[25,118688,118689],{"class":31},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[25,118691,251],{"class":45},[25,118693,118694],{"class":27,"line":1734},[25,118695,2510],{"emptyLinePlaceholder":167},[25,118697,118698],{"class":27,"line":1739},[25,118699,118700],{"class":31},"粘贴进去\n",[25,118702,118703],{"class":27,"line":1753},[25,118704,2510],{"emptyLinePlaceholder":167},[25,118706,118707,118709,118711,118714],{"class":27,"line":1758},[25,118708,469],{"class":240},[25,118710,118686],{"class":45},[25,118712,118713],{"class":31},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[25,118715,251],{"class":45},[25,118717,118718],{"class":27,"line":1764},[25,118719,2510],{"emptyLinePlaceholder":167},[25,118721,118722,118725,118728,118731,118733],{"class":27,"line":1785},[25,118723,118724],{"class":31},"按一下ESC，然后英文冒号，输入",[25,118726,118727],{"class":45}," `",[25,118729,118730],{"class":31},":wq!",[25,118732,1215],{"class":45},[25,118734,118735],{"class":31},"然后回车\n",[25,118737,118738],{"class":27,"line":1790},[25,118739,2510],{"emptyLinePlaceholder":167},[25,118741,118742,118744,118746,118749],{"class":27,"line":1804},[25,118743,469],{"class":240},[25,118745,118686],{"class":45},[25,118747,118748],{"class":31},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[25,118750,251],{"class":45},[25,118752,118753],{"class":27,"line":1809},[25,118754,2510],{"emptyLinePlaceholder":167},[25,118756,118757],{"class":27,"line":1838},[25,118758,118759],{"class":31},"输入以下命令\n",[25,118761,118762],{"class":27,"line":1843},[25,118763,2510],{"emptyLinePlaceholder":167},[25,118765,118766,118769],{"class":27,"line":1860},[25,118767,118768],{"class":45},"```",[25,118770,118771],{"class":31},"Bash\n",[25,118773,118774,118776,118778],{"class":27,"line":1865},[25,118775,24684],{"class":31},[25,118777,117388],{"class":45},[25,118779,26313],{"class":45},[99,118781,118782],{},"这里被替换成对应学校则成功",[99,118784,118785],{},[155,118786],{"alt":20,"src":118787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[182,118789,118791],{"id":118790},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[210,118793,118795],{"id":118794},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[99,118797,118798],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[99,118800,118801],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[99,118803,118804],{},[481,118805,118806],{"href":118806,"rel":118807},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23973],[99,118809,118810],{},[155,118811],{"alt":20,"src":118812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[99,118814,118815],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[99,118817,118818],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[99,118820,118821],{},[155,118822],{"alt":20,"src":118823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[15,118825,118827],{"className":117367,"code":118826,"language":117369,"meta":20,"style":20},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[22,118828,118829,118834,118841,118846],{"__ignoreMap":20},[25,118830,118831],{"class":27,"line":28},[25,118832,118833],{"class":302},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[25,118835,118836,118838],{"class":27,"line":39},[25,118837,101347],{"class":35},[25,118839,118840],{"class":45}," ~\u002FDownloads\n",[25,118842,118843],{"class":27,"line":51},[25,118844,118845],{"class":302},"#下方chrome安装包名不一定是这个，根据名字来看\n",[25,118847,118848,118850,118852,118854],{"class":27,"line":59},[25,118849,24684],{"class":31},[25,118851,117388],{"class":45},[25,118853,23942],{"class":45},[25,118855,118856],{"class":45}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[99,118858,118859],{},[155,118860],{"alt":20,"src":118861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[210,118863,118865],{"id":118864},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[15,118867,118869],{"className":117367,"code":118868,"language":117369,"meta":20,"style":20},"# 老版\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",[22,118870,118871,118876,118884,118895,118900,118904,118909,118919,118927,118938],{"__ignoreMap":20},[25,118872,118873],{"class":27,"line":28},[25,118874,118875],{"class":302},"# 老版\n",[25,118877,118878,118880,118882],{"class":27,"line":39},[25,118879,24684],{"class":31},[25,118881,117388],{"class":45},[25,118883,26313],{"class":45},[25,118885,118886,118888,118890,118892],{"class":27,"line":51},[25,118887,24684],{"class":31},[25,118889,117388],{"class":45},[25,118891,23942],{"class":45},[25,118893,118894],{"class":45}," neofetch\n",[25,118896,118897],{"class":27,"line":59},[25,118898,118899],{"class":31},"neofetch\n",[25,118901,118902],{"class":27,"line":67},[25,118903,2510],{"emptyLinePlaceholder":167},[25,118905,118906],{"class":27,"line":75},[25,118907,118908],{"class":302},"# 新版\n",[25,118910,118911,118913,118916],{"class":27,"line":83},[25,118912,24684],{"class":31},[25,118914,118915],{"class":45}," add-apt-repository",[25,118917,118918],{"class":45}," ppa:zhangsongcui3371\u002Ffastfetch\n",[25,118920,118921,118923,118925],{"class":27,"line":91},[25,118922,24684],{"class":31},[25,118924,117388],{"class":45},[25,118926,26313],{"class":45},[25,118928,118929,118931,118933,118935],{"class":27,"line":1429},[25,118930,24684],{"class":31},[25,118932,117388],{"class":45},[25,118934,23942],{"class":45},[25,118936,118937],{"class":45}," fastfetch\n",[25,118939,118940],{"class":27,"line":1441},[25,118941,118942],{"class":31},"fastfetch\n",[99,118944,118945],{},"这里显示，一共有3162个debian的程序，7个snap程序",[99,118947,118948],{},[155,118949],{"alt":20,"src":118950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[210,118952,118954],{"id":118953},"_323-移除snap应用","3.2.3 移除snap应用",[99,118956,118957],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[15,118959,118961],{"className":117367,"code":118960,"language":117369,"meta":20,"style":20},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[22,118962,118963,118975,118986],{"__ignoreMap":20},[25,118964,118965,118967,118969,118972],{"class":27,"line":28},[25,118966,24684],{"class":31},[25,118968,26584],{"class":45},[25,118970,118971],{"class":45}," disable",[25,118973,118974],{"class":45}," snapd.service\n",[25,118976,118977,118979,118981,118983],{"class":27,"line":39},[25,118978,24684],{"class":31},[25,118980,26584],{"class":45},[25,118982,118971],{"class":45},[25,118984,118985],{"class":45}," snapd.socket\n",[25,118987,118988,118990,118992,118994],{"class":27,"line":51},[25,118989,24684],{"class":31},[25,118991,26584],{"class":45},[25,118993,118971],{"class":45},[25,118995,118996],{"class":45}," snapd.seeded.service\n",[99,118998,118999],{},"然后查看snap应用列表",[99,119001,119002,119003,119008],{},"根据你安装的选择不同（最小安装或普通安装），有",[481,119004,119007],{"href":119005,"rel":119006},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23973],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[15,119010,119012],{"className":117367,"code":119011,"language":117369,"meta":20,"style":20},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[22,119013,119014,119019],{"__ignoreMap":20},[25,119015,119016],{"class":27,"line":28},[25,119017,119018],{"class":302},"# 查询当前系统上snap安装了哪些app\n",[25,119020,119021,119024],{"class":27,"line":39},[25,119022,119023],{"class":31},"snap",[25,119025,119026],{"class":45}," list\n",[99,119028,119029],{},[155,119030],{"alt":20,"src":119031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[99,119033,119034,119035,119038],{},"卸载掉图中所有应用，按照 ",[392,119036,119037],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[15,119040,119042],{"className":117367,"code":119041,"language":117369,"meta":20,"style":20},"#移除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",[22,119043,119044,119049,119061,119066,119077,119082,119093,119098,119109,119114,119118,119123,119134,119145],{"__ignoreMap":20},[25,119045,119046],{"class":27,"line":28},[25,119047,119048],{"class":302},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[25,119050,119051,119053,119056,119058],{"class":27,"line":39},[25,119052,24684],{"class":31},[25,119054,119055],{"class":45}," snap",[25,119057,26150],{"class":45},[25,119059,119060],{"class":45}," snap-store\n",[25,119062,119063],{"class":27,"line":51},[25,119064,119065],{"class":302},"#移除firefox浏览器\n",[25,119067,119068,119070,119072,119074],{"class":27,"line":59},[25,119069,24684],{"class":31},[25,119071,119055],{"class":45},[25,119073,26150],{"class":45},[25,119075,119076],{"class":45}," firefox\n",[25,119078,119079],{"class":27,"line":67},[25,119080,119081],{"class":302},"#移除gnome-42-2204\n",[25,119083,119084,119086,119088,119090],{"class":27,"line":75},[25,119085,24684],{"class":31},[25,119087,119055],{"class":45},[25,119089,26150],{"class":45},[25,119091,119092],{"class":45}," gnome-42-2204\n",[25,119094,119095],{"class":27,"line":83},[25,119096,119097],{"class":302},"#移除gtk-common-themes\n",[25,119099,119100,119102,119104,119106],{"class":27,"line":91},[25,119101,24684],{"class":31},[25,119103,119055],{"class":45},[25,119105,26150],{"class":45},[25,119107,119108],{"class":45}," gtk-common-themes\n",[25,119110,119111],{"class":27,"line":1429},[25,119112,119113],{"class":302},"#移除其它...\n",[25,119115,119116],{"class":27,"line":1441},[25,119117,2784],{"class":244},[25,119119,119120],{"class":27,"line":1723},[25,119121,119122],{"class":302},"#移除core22,bare以及snapd\n",[25,119124,119125,119127,119129,119131],{"class":27,"line":1728},[25,119126,24684],{"class":31},[25,119128,119055],{"class":45},[25,119130,26150],{"class":45},[25,119132,119133],{"class":45}," core22\n",[25,119135,119136,119138,119140,119142],{"class":27,"line":1734},[25,119137,24684],{"class":31},[25,119139,119055],{"class":45},[25,119141,26150],{"class":45},[25,119143,119144],{"class":45}," bare\n",[25,119146,119147,119149,119151,119153],{"class":27,"line":1739},[25,119148,24684],{"class":31},[25,119150,119055],{"class":45},[25,119152,26150],{"class":45},[25,119154,119155],{"class":45}," snapd\n",[99,119157,119158],{},[155,119159],{"alt":20,"src":119160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[99,119162,119163],{},"输入以下命令查看是否还有snap包",[15,119165,119167],{"className":117367,"code":119166,"language":117369,"meta":20,"style":20},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[22,119168,119169,119175,119179,119183,119187],{"__ignoreMap":20},[25,119170,119171,119173],{"class":27,"line":28},[25,119172,119023],{"class":31},[25,119174,119026],{"class":45},[25,119176,119177],{"class":27,"line":39},[25,119178,118875],{"class":302},[25,119180,119181],{"class":27,"line":51},[25,119182,118899],{"class":31},[25,119184,119185],{"class":27,"line":59},[25,119186,118908],{"class":302},[25,119188,119189],{"class":27,"line":67},[25,119190,118942],{"class":31},[99,119192,119193],{},[155,119194],{"alt":20,"src":119195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[210,119197,119199],{"id":119198},"_324-移除snap","3.2.4 移除snap",[99,119201,119202,119203,119208],{},"在删除掉",[481,119204,119207],{"href":119205,"rel":119206},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23973],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[15,119210,119212],{"className":117367,"code":119211,"language":117369,"meta":20,"style":20}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[22,119213,119214,119219,119232,119237,119248],{"__ignoreMap":20},[25,119215,119216],{"class":27,"line":28},[25,119217,119218],{"class":302}," #使用apt移除掉snap\n",[25,119220,119221,119223,119225,119227,119230],{"class":27,"line":39},[25,119222,24684],{"class":31},[25,119224,117388],{"class":45},[25,119226,117696],{"class":45},[25,119228,119229],{"class":35}," --purge",[25,119231,119155],{"class":45},[25,119233,119234],{"class":27,"line":51},[25,119235,119236],{"class":302},"#移除snapd的一些目录\n",[25,119238,119239,119241,119243,119245],{"class":27,"line":59},[25,119240,24684],{"class":31},[25,119242,118624],{"class":45},[25,119244,25430],{"class":35},[25,119246,119247],{"class":45}," \u002Fvar\u002Fcache\u002Fsnapd\n",[25,119249,119250,119252,119254,119256],{"class":27,"line":67},[25,119251,24684],{"class":31},[25,119253,118624],{"class":45},[25,119255,25430],{"class":35},[25,119257,119258],{"class":45}," ~\u002Fsnap\n",[99,119260,119261,119262,119265],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[22,119263,119264],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[210,119267,119269],{"id":119268},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[99,119271,119272],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[15,119274,119276],{"className":117367,"code":119275,"language":117369,"meta":20,"style":20},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[22,119277,119278],{"__ignoreMap":20},[25,119279,119280,119282,119284],{"class":27,"line":28},[25,119281,24684],{"class":31},[25,119283,118654],{"class":45},[25,119285,119286],{"class":45}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[99,119288,119289,119290,119293],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[22,119291,119292],{},":wq"," 回车",[15,119295,119297],{"className":117367,"code":119296,"language":117369,"meta":20,"style":20},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[22,119298,119299,119306,119320],{"__ignoreMap":20},[25,119300,119301,119304],{"class":27,"line":28},[25,119302,119303],{"class":31},"Package:",[25,119305,119155],{"class":45},[25,119307,119308,119311,119314,119317],{"class":27,"line":39},[25,119309,119310],{"class":31},"Pin:",[25,119312,119313],{"class":45}," release",[25,119315,119316],{"class":45}," a=",[25,119318,119319],{"class":35},"*\n",[25,119321,119322,119325],{"class":27,"line":51},[25,119323,119324],{"class":31},"Pin-Priority:",[25,119326,119327],{"class":35}," -10\n",[99,119329,119330],{},[155,119331],{"alt":20,"src":119332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[210,119334,119336],{"id":119335},"_326-测试是否成功","3.2.6 测试是否成功",[15,119338,119340],{"className":117367,"code":119339,"language":117369,"meta":20,"style":20},"sudo apt update\nsudo apt install firefox\n",[22,119341,119342,119350],{"__ignoreMap":20},[25,119343,119344,119346,119348],{"class":27,"line":28},[25,119345,24684],{"class":31},[25,119347,117388],{"class":45},[25,119349,26313],{"class":45},[25,119351,119352,119354,119356,119358],{"class":27,"line":39},[25,119353,24684],{"class":31},[25,119355,117388],{"class":45},[25,119357,23942],{"class":45},[25,119359,119076],{"class":45},[99,119361,119362],{},"这里提示snapd无法被安装，就证明成功了",[99,119364,119365],{},[155,119366],{"alt":20,"src":119367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[210,119369,119371],{"id":119370},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[99,119373,119374],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[99,119376,119377],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[99,119379,119380],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[15,119382,119384],{"className":117367,"code":119383,"language":117369,"meta":20,"style":20},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[22,119385,119386,119391,119400,119405,119413],{"__ignoreMap":20},[25,119387,119388],{"class":27,"line":28},[25,119389,119390],{"class":302},"# 添加Mozilla提供的源\n",[25,119392,119393,119395,119397],{"class":27,"line":39},[25,119394,24684],{"class":31},[25,119396,118915],{"class":45},[25,119398,119399],{"class":45}," ppa:mozillateam\u002Fppa\n",[25,119401,119402],{"class":27,"line":51},[25,119403,119404],{"class":302},"# 安装Firefox\n",[25,119406,119407,119409,119411],{"class":27,"line":59},[25,119408,24684],{"class":31},[25,119410,117388],{"class":45},[25,119412,26313],{"class":45},[25,119414,119415,119417,119419,119421],{"class":27,"line":67},[25,119416,24684],{"class":31},[25,119418,117388],{"class":45},[25,119420,23942],{"class":45},[25,119422,119076],{"class":45},[210,119424,119426],{"id":119425},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[99,119428,119429],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[99,119431,119432],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[15,119434,119436],{"className":117367,"code":119435,"language":117369,"meta":20,"style":20},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[22,119437,119438,119443,119453,119461,119465],{"__ignoreMap":20},[25,119439,119440],{"class":27,"line":28},[25,119441,119442],{"class":302},"#删掉禁止安装snap的配置文件\n",[25,119444,119445,119447,119449,119451],{"class":27,"line":39},[25,119446,24684],{"class":31},[25,119448,118624],{"class":45},[25,119450,25430],{"class":35},[25,119452,119286],{"class":45},[25,119454,119455,119457,119459],{"class":27,"line":51},[25,119456,24684],{"class":31},[25,119458,117388],{"class":45},[25,119460,26313],{"class":45},[25,119462,119463],{"class":27,"line":59},[25,119464,2510],{"emptyLinePlaceholder":167},[25,119466,119467,119469,119471],{"class":27,"line":67},[25,119468,24684],{"class":31},[25,119470,117388],{"class":45},[25,119472,119473],{"class":45}," dist-update\n",[182,119475,119477],{"id":119476},"_33-中文输入法","3.3 中文输入法",[210,119479,119481],{"id":119480},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[99,119483,119484],{},"官网下载搜狗输入法",[99,119486,119487],{},[155,119488],{"alt":20,"src":119489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[99,119491,119492],{},[155,119493],{"alt":20,"src":119494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[99,119496,119497],{},"打开终端输入如下",[15,119499,119501],{"className":117367,"code":119500,"language":117369,"meta":20,"style":20},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[22,119502,119503,119510],{"__ignoreMap":20},[25,119504,119505,119507],{"class":27,"line":28},[25,119506,101347],{"class":35},[25,119508,119509],{"class":45}," ~\u002FDownloads\u002F\n",[25,119511,119512,119514,119516,119518],{"class":27,"line":39},[25,119513,24684],{"class":31},[25,119515,117388],{"class":45},[25,119517,23942],{"class":45},[25,119519,119520],{"class":45}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[99,119522,119523],{},"打开Fcitx",[99,119525,119526,119529],{},[155,119527],{"alt":20,"src":119528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[155,119530],{"alt":20,"src":119531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[99,119533,119534],{},[155,119535],{"alt":20,"src":119536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[99,119538,119539],{},"添加搜狗输入法",[99,119541,119542],{},[155,119543],{"alt":20,"src":119544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[99,119546,119547],{},[155,119548],{"alt":20,"src":119549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[99,119551,119552],{},"将搜狗输入法设置为唯一输入法",[99,119554,119555],{},[155,119556],{"alt":20,"src":119557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[210,119559,119561],{"id":119560},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[194,119563,119564],{},[106,119565,119566],{},"卸载旧输入法",[15,119568,119570],{"className":118594,"code":119569,"language":118596,"meta":20,"style":20},"sudo apt purge fcitx* ibus*\n",[22,119571,119572],{"__ignoreMap":20},[25,119573,119574,119576,119578,119580,119583,119585,119588],{"class":27,"line":28},[25,119575,24684],{"class":31},[25,119577,117388],{"class":45},[25,119579,117729],{"class":45},[25,119581,119582],{"class":45}," fcitx",[25,119584,698],{"class":35},[25,119586,119587],{"class":45}," ibus",[25,119589,119319],{"class":35},[194,119591,119592],{"start":39},[106,119593,119594],{},"安装Fcitx5",[15,119596,119598],{"className":117367,"code":119597,"language":117369,"meta":20,"style":20},"# 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",[22,119599,119600,119605,119619,119623,119628,119637,119645],{"__ignoreMap":20},[25,119601,119602],{"class":27,"line":28},[25,119603,119604],{"class":302},"# Ubuntu22.04及以上、Debian12及以上\n",[25,119606,119607,119609,119611,119613,119616],{"class":27,"line":39},[25,119608,24684],{"class":31},[25,119610,117388],{"class":45},[25,119612,23942],{"class":45},[25,119614,119615],{"class":45}," fcitx5",[25,119617,119618],{"class":45}," fcitx5-chinese-addons\n",[25,119620,119621],{"class":27,"line":51},[25,119622,2510],{"emptyLinePlaceholder":167},[25,119624,119625],{"class":27,"line":59},[25,119626,119627],{"class":302},"# Ubuntu20.04\n",[25,119629,119630,119632,119634],{"class":27,"line":67},[25,119631,24684],{"class":31},[25,119633,118915],{"class":45},[25,119635,119636],{"class":45}," ppa:zhsj\u002Ffcitx5\n",[25,119638,119639,119641,119643],{"class":27,"line":75},[25,119640,24684],{"class":31},[25,119642,117388],{"class":45},[25,119644,26313],{"class":45},[25,119646,119647,119649,119651,119653,119655],{"class":27,"line":83},[25,119648,24684],{"class":31},[25,119650,117388],{"class":45},[25,119652,23942],{"class":45},[25,119654,119615],{"class":45},[25,119656,119618],{"class":45},[194,119658,119659,119662],{"start":51},[106,119660,119661],{},"Reboot System",[106,119663,119664],{},"启动Fcitx5",[99,119666,119667],{},[155,119668],{"alt":20,"src":119669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[194,119671,119672],{"start":67},[106,119673,119674],{},"修改一些设置",[99,119676,119677],{},"将Pinyin和Keyboard - English US加入到左边。",[99,119679,119680],{},[155,119681],{"alt":20,"src":119682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[99,119684,119685],{},"添加快捷键以便于更好切换中英文",[99,119687,119688],{},[155,119689],{"alt":20,"src":119690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[194,119692,119693],{"start":75},[106,119694,119695],{},"重启",[15,119697,119699],{"className":118594,"code":119698,"language":118596,"meta":20,"style":20},"sudo shutdown -r now\n",[22,119700,119701],{"__ignoreMap":20},[25,119702,119703,119705,119708,119711],{"class":27,"line":28},[25,119704,24684],{"class":31},[25,119706,119707],{"class":45}," shutdown",[25,119709,119710],{"class":35}," -r",[25,119712,119713],{"class":45}," now\n",[194,119715,119716],{"start":83},[106,119717,119718],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[99,119720,119721],{},[481,119722,119723],{"href":119723,"rel":119724},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23973],[194,119726,119727],{"start":91},[106,119728,119729],{},"再重启",[15,119731,119732],{"className":118594,"code":119698,"language":118596,"meta":20,"style":20},[22,119733,119734],{"__ignoreMap":20},[25,119735,119736,119738,119740,119742],{"class":27,"line":28},[25,119737,24684],{"class":31},[25,119739,119707],{"class":45},[25,119741,119710],{"class":35},[25,119743,119713],{"class":45},[182,119745,119747],{"id":119746},"_34-pip3源替换","3.4 pip3源替换",[99,119749,119750],{},"非Debian系发行版需要做。",[99,119752,119753],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[99,119755,119756],{},"使用dnf的系统也可能不用做。",[15,119758,119760],{"className":117367,"code":119759,"language":117369,"meta":20,"style":20},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[22,119761,119762,119767,119774,119779,119784],{"__ignoreMap":20},[25,119763,119764],{"class":27,"line":28},[25,119765,119766],{"class":302},"# 检查是否已安装 pip\n",[25,119768,119769,119772],{"class":27,"line":39},[25,119770,119771],{"class":31},"pip3",[25,119773,26364],{"class":35},[25,119775,119776],{"class":27,"line":51},[25,119777,119778],{"class":302},"# 如果未安装，先安装 pip3（见下方）\n",[25,119780,119781],{"class":27,"line":59},[25,119782,119783],{"class":302},"# 配置 pip 使用清华源\n",[25,119785,119786,119788,119791,119794,119797],{"class":27,"line":67},[25,119787,119771],{"class":31},[25,119789,119790],{"class":45}," config",[25,119792,119793],{"class":45}," set",[25,119795,119796],{"class":45}," global.index-url",[25,119798,119799],{"class":45}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[99,119801,119802],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[99,119804,119805],{},[155,119806],{"alt":20,"src":119807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[15,119809,119811],{"className":117367,"code":119810,"language":117369,"meta":20,"style":20},"#安装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",[22,119812,119813,119818,119826,119837,119841,119846,119865,119869,119874,119886,119890,119895],{"__ignoreMap":20},[25,119814,119815],{"class":27,"line":28},[25,119816,119817],{"class":302},"#安装pip3\n",[25,119819,119820,119822,119824],{"class":27,"line":39},[25,119821,24684],{"class":31},[25,119823,117388],{"class":45},[25,119825,26313],{"class":45},[25,119827,119828,119830,119832,119834],{"class":27,"line":51},[25,119829,24684],{"class":31},[25,119831,26147],{"class":45},[25,119833,23942],{"class":45},[25,119835,119836],{"class":45}," python3-pip\n",[25,119838,119839],{"class":27,"line":59},[25,119840,2510],{"emptyLinePlaceholder":167},[25,119842,119843],{"class":27,"line":67},[25,119844,119845],{"class":302},"#更新pip3\n",[25,119847,119848,119850,119852,119854,119856,119858,119861,119863],{"class":27,"line":75},[25,119849,100950],{"class":31},[25,119851,100953],{"class":35},[25,119853,100976],{"class":45},[25,119855,23942],{"class":45},[25,119857,26501],{"class":35},[25,119859,119860],{"class":45}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[25,119862,100981],{"class":35},[25,119864,100984],{"class":45},[25,119866,119867],{"class":27,"line":83},[25,119868,2510],{"emptyLinePlaceholder":167},[25,119870,119871],{"class":27,"line":91},[25,119872,119873],{"class":302},"#设置pip源为清华源\n",[25,119875,119876,119878,119880,119882,119884],{"class":27,"line":1429},[25,119877,119771],{"class":31},[25,119879,119790],{"class":45},[25,119881,119793],{"class":45},[25,119883,119796],{"class":45},[25,119885,119799],{"class":45},[25,119887,119888],{"class":27,"line":1441},[25,119889,2510],{"emptyLinePlaceholder":167},[25,119891,119892],{"class":27,"line":1723},[25,119893,119894],{"class":302},"#测试\n",[25,119896,119897,119899,119901,119903,119905,119907],{"class":27,"line":1728},[25,119898,100950],{"class":31},[25,119900,100953],{"class":35},[25,119902,100976],{"class":45},[25,119904,23942],{"class":45},[25,119906,100981],{"class":35},[25,119908,100984],{"class":45},[99,119910,119911],{},"成功的话，会看到Looking后面是tsinghua字样。",[99,119913,119914],{},[155,119915],{"alt":20,"src":119916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[182,119918,119920],{"id":119919},"_35-显卡驱动安装","3.5 显卡驱动安装",[210,119922,119924],{"id":119923},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[15,119926,119928],{"className":118594,"code":119927,"language":118596,"meta":20,"style":20},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[22,119929,119930,119935,119950,119955],{"__ignoreMap":20},[25,119931,119932],{"class":27,"line":28},[25,119933,119934],{"class":302},"# 如果是使用apt安装的驱动\n",[25,119936,119937,119939,119941,119943,119945,119948],{"class":27,"line":39},[25,119938,24684],{"class":31},[25,119940,26147],{"class":45},[25,119942,26150],{"class":45},[25,119944,119229],{"class":35},[25,119946,119947],{"class":45}," nvidia",[25,119949,119319],{"class":35},[25,119951,119952],{"class":27,"line":51},[25,119953,119954],{"class":302},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[25,119956,119957,119959],{"class":27,"line":59},[25,119958,24684],{"class":31},[25,119960,119961],{"class":45}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[210,119963,119965],{"id":119964},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22108,119967,119969],{"id":119968},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23020,119971,119973],{"id":119972},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[15,119975,119977],{"className":118594,"code":119976,"language":118596,"meta":20,"style":20},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[22,119978,119979,119984,119995,120000,120010,120015],{"__ignoreMap":20},[25,119980,119981],{"class":27,"line":28},[25,119982,119983],{"class":302},"# 安装英伟达驱动\n",[25,119985,119986,119988,119990,119992],{"class":27,"line":39},[25,119987,24684],{"class":31},[25,119989,117388],{"class":45},[25,119991,23942],{"class":45},[25,119993,119994],{"class":45}," nvidia-driver-版本号\n",[25,119996,119997],{"class":27,"line":51},[25,119998,119999],{"class":302},"# 重启 \n",[25,120001,120002,120004,120006,120008],{"class":27,"line":59},[25,120003,24684],{"class":31},[25,120005,119707],{"class":45},[25,120007,119710],{"class":35},[25,120009,119713],{"class":45},[25,120011,120012],{"class":27,"line":67},[25,120013,120014],{"class":302},"# 检查驱动是否安装成功\n",[25,120016,120017],{"class":27,"line":75},[25,120018,120019],{"class":31},"nvidia-smi\n",[23020,120021,120023],{"id":120022},"_35212-debian","3.5.2.1.2 Debian",[15,120025,120027],{"className":118594,"code":120026,"language":118596,"meta":20,"style":20},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[22,120028,120029,120033,120047,120051,120061,120065],{"__ignoreMap":20},[25,120030,120031],{"class":27,"line":28},[25,120032,119983],{"class":302},[25,120034,120035,120037,120039,120041,120044],{"class":27,"line":39},[25,120036,24684],{"class":31},[25,120038,117388],{"class":45},[25,120040,23942],{"class":45},[25,120042,120043],{"class":45}," nvidia-driver",[25,120045,120046],{"class":45}," nvidia-settings\n",[25,120048,120049],{"class":27,"line":51},[25,120050,119999],{"class":302},[25,120052,120053,120055,120057,120059],{"class":27,"line":59},[25,120054,24684],{"class":31},[25,120056,119707],{"class":45},[25,120058,119710],{"class":35},[25,120060,119713],{"class":45},[25,120062,120063],{"class":27,"line":67},[25,120064,120014],{"class":302},[25,120066,120067],{"class":27,"line":75},[25,120068,120019],{"class":31},[22108,120070,120072],{"id":120071},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[99,120074,120075,120076,120079],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[392,120077,120078],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[99,120081,120082,120083],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23663,120084,120085],{},[392,120086,120087],{},"（也可以不禁用桌面环境，直接进行下一步。）",[15,120089,120091],{"className":118594,"code":120090,"language":118596,"meta":20,"style":20},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[22,120092,120093,120098,120108,120113,120126,120131],{"__ignoreMap":20},[25,120094,120095],{"class":27,"line":28},[25,120096,120097],{"class":302},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[25,120099,120100,120102,120105],{"class":27,"line":39},[25,120101,24684],{"class":31},[25,120103,120104],{"class":45}," telinit",[25,120106,120107],{"class":35}," 3\n",[25,120109,120110],{"class":27,"line":51},[25,120111,120112],{"class":302},"# ubuntu 使用下方命令\n",[25,120114,120115,120117,120120,120123],{"class":27,"line":59},[25,120116,24684],{"class":31},[25,120118,120119],{"class":45}," service",[25,120121,120122],{"class":45}," lightdm",[25,120124,120125],{"class":45}," stop\n",[25,120127,120128],{"class":27,"line":67},[25,120129,120130],{"class":302},"# Fedora 使用下方命令\n",[25,120132,120133,120135,120137,120140],{"class":27,"line":75},[25,120134,24684],{"class":31},[25,120136,26584],{"class":45},[25,120138,120139],{"class":45}," isolate",[25,120141,120142],{"class":45}," multi-user.target\n",[99,120144,120145],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[15,120147,120149],{"className":118594,"code":120148,"language":118596,"meta":20,"style":20},"# 编译环境+准备工作\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",[22,120150,120151,120156,120167,120172,120179,120184,120196,120201,120208,120213],{"__ignoreMap":20},[25,120152,120153],{"class":27,"line":28},[25,120154,120155],{"class":302},"# 编译环境+准备工作\n",[25,120157,120158,120160,120162,120164],{"class":27,"line":39},[25,120159,24684],{"class":31},[25,120161,117388],{"class":45},[25,120163,23942],{"class":45},[25,120165,120166],{"class":45}," build-essential\n",[25,120168,120169],{"class":27,"line":51},[25,120170,120171],{"class":302},"# 进入到.run目录中\n",[25,120173,120174,120176],{"class":27,"line":59},[25,120175,101347],{"class":35},[25,120177,120178],{"class":45}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[25,120180,120181],{"class":27,"line":67},[25,120182,120183],{"class":302},"# 给驱动文件增加可执行权限：\n",[25,120185,120186,120188,120190,120193],{"class":27,"line":75},[25,120187,24684],{"class":31},[25,120189,24687],{"class":45},[25,120191,120192],{"class":45}," a+x",[25,120194,120195],{"class":45}," NVIDIA-Linux-x86_64-550.107.02.run\n",[25,120197,120198],{"class":27,"line":83},[25,120199,120200],{"class":302},"# 然后执行安装：\n",[25,120202,120203,120205],{"class":27,"line":91},[25,120204,24684],{"class":31},[25,120206,120207],{"class":45}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[25,120209,120210],{"class":27,"line":1429},[25,120211,120212],{"class":302},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[25,120214,120215,120217,120220],{"class":27,"line":1441},[25,120216,24684],{"class":31},[25,120218,120219],{"class":45}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[25,120221,120222],{"class":35},"  --no-opengl-files\n",[99,120224,120225],{},"安装完毕重启即可",[15,120227,120229],{"className":118594,"code":120228,"language":118596,"meta":20,"style":20},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[22,120230,120231,120235,120241,120245],{"__ignoreMap":20},[25,120232,120233],{"class":27,"line":28},[25,120234,119999],{"class":302},[25,120236,120237,120239],{"class":27,"line":39},[25,120238,24684],{"class":31},[25,120240,26718],{"class":45},[25,120242,120243],{"class":27,"line":51},[25,120244,120014],{"class":302},[25,120246,120247],{"class":27,"line":59},[25,120248,120019],{"class":31},[210,120250,120252],{"id":120251},"_353-安装cuda","3.5.3 安装CUDA",[99,120254,120255],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[99,120257,120258],{},[155,120259],{"alt":20,"src":120260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[194,120262,120263],{},[106,120264,120265],{},"先查看显卡驱动所支持的最高CUDA版本",[15,120267,120268],{"className":118594,"code":120019,"language":118596,"meta":20,"style":20},[22,120269,120270],{"__ignoreMap":20},[25,120271,120272],{"class":27,"line":28},[25,120273,120019],{"class":31},[99,120275,120276],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[99,120278,120279],{},[155,120280],{"alt":20,"src":120281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[194,120283,120284],{"start":39},[106,120285,120286],{},"下载CUDA并安装CUDA",[99,120288,118373,120289],{},[481,120290,118376],{"href":118376,"rel":120291},[23973],[99,120293,120294],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[99,120296,120297],{},[155,120298],{"alt":20,"src":120299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[99,120301,120302,120303,120308],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[481,120304,120307],{"href":120305,"rel":120306},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23973],"Vinci机器人队单片机教程","）",[99,120310,120311],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[99,120313,120314],{},[155,120315],{"alt":20,"src":120316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[99,120318,120319],{},"将最下方框框里的命令敲入终端",[15,120321,120323],{"className":118594,"code":120322,"language":118596,"meta":20,"style":20},"# 在当前文件夹下创建一个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",[22,120324,120325,120330,120339,120344,120351,120356,120364,120369,120380,120385],{"__ignoreMap":20},[25,120326,120327],{"class":27,"line":28},[25,120328,120329],{"class":302},"# 在当前文件夹下创建一个ttt的子文件夹\n",[25,120331,120332,120334,120336],{"class":27,"line":39},[25,120333,101337],{"class":31},[25,120335,29287],{"class":35},[25,120337,120338],{"class":45}," .\u002Fttt\n",[25,120340,120341],{"class":27,"line":51},[25,120342,120343],{"class":302},"# 进入ttt文件夹\n",[25,120345,120346,120348],{"class":27,"line":59},[25,120347,101347],{"class":35},[25,120349,120350],{"class":45}," ttt\n",[25,120352,120353],{"class":27,"line":67},[25,120354,120355],{"class":302},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[25,120357,120358,120361],{"class":27,"line":75},[25,120359,120360],{"class":31},"wget",[25,120362,120363],{"class":45}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[25,120365,120366],{"class":27,"line":83},[25,120367,120368],{"class":302},"# 给予权限\n",[25,120370,120371,120373,120375,120377],{"class":27,"line":91},[25,120372,24684],{"class":31},[25,120374,24687],{"class":45},[25,120376,120192],{"class":45},[25,120378,120379],{"class":45}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[25,120381,120382],{"class":27,"line":1429},[25,120383,120384],{"class":302},"# 运行脚本\n",[25,120386,120387,120389],{"class":27,"line":1441},[25,120388,24684],{"class":31},[25,120390,120379],{"class":45},[99,120392,120393],{},[155,120394],{"alt":20,"src":120395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[99,120397,120398],{},"正在安装中：",[99,120400,120401],{},[155,120402],{"alt":20,"src":120403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[99,120405,120406],{},"输入accept接受即可",[99,120408,120409],{},[155,120410],{"alt":20,"src":120411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[99,120413,120414],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[99,120416,120417],{},[155,120418],{"alt":20,"src":120419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[99,120421,120422],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[99,120424,120425],{},[155,120426],{"alt":20,"src":120427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[194,120429,120430],{"start":51},[106,120431,120432],{},"配置环境",[99,120434,120435],{},"根据上方确认一下路径，比如我上面红色框起来的为",[15,120437,120439],{"className":118594,"code":120438,"language":118596,"meta":20,"style":20},"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",[22,120440,120441,120457,120472],{"__ignoreMap":20},[25,120442,120443,120446,120449,120452,120455],{"class":27,"line":28},[25,120444,120445],{"class":31},"Please",[25,120447,120448],{"class":45}," make",[25,120450,120451],{"class":45}," sure",[25,120453,120454],{"class":45}," that",[25,120456,2784],{"class":244},[25,120458,120459,120461,120464,120467,120470],{"class":27,"line":39},[25,120460,52342],{"class":31},[25,120462,120463],{"class":45},"   PATH",[25,120465,120466],{"class":45}," includes",[25,120468,120469],{"class":45}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[25,120471,2784],{"class":244},[25,120473,120474,120476,120479,120481,120484,120487,120489,120492,120495,120498,120501,120503,120506,120508],{"class":27,"line":51},[25,120475,52342],{"class":31},[25,120477,120478],{"class":45},"   LD_LIBRARY_PATH",[25,120480,120466],{"class":45},[25,120482,120483],{"class":45}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[25,120485,120486],{"class":45}," or,",[25,120488,5319],{"class":45},[25,120490,120491],{"class":45}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[25,120493,120494],{"class":45}," to",[25,120496,120497],{"class":45}," \u002Fetc\u002Fld.so.conf",[25,120499,120500],{"class":45}," and",[25,120502,27301],{"class":45},[25,120504,120505],{"class":45}," ldconfig",[25,120507,64675],{"class":45},[25,120509,120510],{"class":45}," root\n",[99,120512,120513],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[15,120515,120517],{"className":118594,"code":120516,"language":118596,"meta":20,"style":20},"which nvcc\n",[22,120518,120519],{"__ignoreMap":20},[25,120520,120521,120524],{"class":27,"line":28},[25,120522,120523],{"class":35},"which",[25,120525,120526],{"class":45}," nvcc\n",[99,120528,120529],{},[155,120530],{"alt":20,"src":120531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[99,120533,120534],{},"所以我进行以下操作：",[15,120536,120538],{"className":118594,"code":120537,"language":118596,"meta":20,"style":20},"sudo vim ~\u002F.bashrc\n",[22,120539,120540],{"__ignoreMap":20},[25,120541,120542,120544,120546],{"class":27,"line":28},[25,120543,24684],{"class":31},[25,120545,118654],{"class":45},[25,120547,120548],{"class":45}," ~\u002F.bashrc\n",[99,120550,120551],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[15,120553,120555],{"className":118594,"code":120554,"language":118596,"meta":20,"style":20},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[22,120556,120557,120569],{"__ignoreMap":20},[25,120558,120559,120561,120564,120566],{"class":27,"line":28},[25,120560,25149],{"class":240},[25,120562,120563],{"class":244}," PATH",[25,120565,290],{"class":240},[25,120567,120568],{"class":244},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[25,120570,120571,120573,120576,120578],{"class":27,"line":39},[25,120572,25149],{"class":240},[25,120574,120575],{"class":244}," LD_LIBRARY_PATH",[25,120577,290],{"class":240},[25,120579,120580],{"class":244},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[99,120582,120583],{},[155,120584],{"alt":20,"src":120585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[15,120587,120589],{"className":118594,"code":120588,"language":118596,"meta":20,"style":20},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[22,120590,120591,120596,120602,120607],{"__ignoreMap":20},[25,120592,120593],{"class":27,"line":28},[25,120594,120595],{"class":302},"# 刷新当前终端的环境变量\n",[25,120597,120598,120600],{"class":27,"line":39},[25,120599,100964],{"class":35},[25,120601,120548],{"class":45},[25,120603,120604],{"class":27,"line":51},[25,120605,120606],{"class":302},"# 验证CUDA是否安装成功\n",[25,120608,120609,120612],{"class":27,"line":59},[25,120610,120611],{"class":31},"nvcc",[25,120613,120614],{"class":35}," -V\n",[99,120616,120617],{},"出现下图这种则安装成功。",[99,120619,120620],{},[155,120621],{"alt":20,"src":120622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[210,120624,120626],{"id":120625},"_354-安装cudnn","3.5.4 安装cuDNN",[194,120628,120629],{},[106,120630,120631],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[99,120633,120634,120635,120640],{},"前往 NVIDIA cuDNN 下载页面：",[481,120636,120639],{"href":120637,"rel":120638},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23973],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[99,120642,120643],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[99,120645,120646],{},[155,120647],{"alt":20,"src":120648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[99,120650,120651],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[99,120653,120654],{},[155,120655],{"alt":20,"src":120656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[99,120658,120659],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[99,120661,120662],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[99,120664,120665],{},[392,120666,120667],{},"我这里选择所有Linux X86_64最通用的办法：",[99,120669,120670],{},"下载好的：",[99,120672,120673],{},[155,120674],{"alt":20,"src":120675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[194,120677,120678],{"start":39},[106,120679,120680],{},"安装cuDNN",[99,120682,120683],{},"找到该文件所在目录，并打开终端，cd到该目录。",[99,120685,120686],{},[155,120687],{"alt":20,"src":120688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[99,120690,120691],{},"解压文件，并复制到对应位置完成安装",[15,120693,120695],{"className":118594,"code":120694,"language":118596,"meta":20,"style":20},"# 解压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",[22,120696,120697,120702,120713,120718,120725,120730,120746,120760,120765,120776,120785,120789,120805],{"__ignoreMap":20},[25,120698,120699],{"class":27,"line":28},[25,120700,120701],{"class":302},"# 解压cuDNN文件\n",[25,120703,120704,120707,120710],{"class":27,"line":39},[25,120705,120706],{"class":31},"tar",[25,120708,120709],{"class":35}," -xvf",[25,120711,120712],{"class":45}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[25,120714,120715],{"class":27,"line":51},[25,120716,120717],{"class":302},"# cd进文件夹\n",[25,120719,120720,120722],{"class":27,"line":59},[25,120721,101347],{"class":35},[25,120723,120724],{"class":45}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[25,120726,120727],{"class":27,"line":67},[25,120728,120729],{"class":302},"# 复制cuDNN文件到CUDA目录\n",[25,120731,120732,120734,120736,120739,120741,120744],{"class":27,"line":75},[25,120733,24684],{"class":31},[25,120735,27932],{"class":45},[25,120737,120738],{"class":45}," include\u002Fcudnn",[25,120740,698],{"class":35},[25,120742,120743],{"class":45},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[25,120745,2784],{"class":244},[25,120747,120748,120750,120752,120755,120757],{"class":27,"line":83},[25,120749,24684],{"class":31},[25,120751,27932],{"class":45},[25,120753,120754],{"class":45}," lib\u002Flibcudnn",[25,120756,698],{"class":35},[25,120758,120759],{"class":45},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[25,120761,120762],{"class":27,"line":91},[25,120763,120764],{"class":302},"# 对比一下有没有缺文件\n",[25,120766,120767,120769,120772,120774],{"class":27,"line":1429},[25,120768,26832],{"class":31},[25,120770,120771],{"class":45}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[25,120773,698],{"class":35},[25,120775,2784],{"class":244},[25,120777,120778,120780,120783],{"class":27,"line":1441},[25,120779,26832],{"class":31},[25,120781,120782],{"class":45}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[25,120784,119319],{"class":35},[25,120786,120787],{"class":27,"line":1723},[25,120788,120368],{"class":302},[25,120790,120791,120793,120795,120798,120800,120802],{"class":27,"line":1728},[25,120792,24684],{"class":31},[25,120794,24687],{"class":45},[25,120796,120797],{"class":45}," a+r",[25,120799,120771],{"class":45},[25,120801,698],{"class":35},[25,120803,120804],{"class":244},"   \n",[25,120806,120807,120809,120811,120813,120815],{"class":27,"line":1734},[25,120808,24684],{"class":31},[25,120810,24687],{"class":45},[25,120812,120797],{"class":45},[25,120814,120782],{"class":45},[25,120816,119319],{"class":35},[194,120818,120819],{"start":51},[106,120820,120821],{},"检查是否安装成功",[15,120823,120825],{"className":118594,"code":120824,"language":118596,"meta":20,"style":20},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[22,120826,120827,120832],{"__ignoreMap":20},[25,120828,120829],{"class":27,"line":28},[25,120830,120831],{"class":302},"# 检查cuDNN版本命令\n",[25,120833,120834,120837,120840,120842,120844,120847,120850],{"class":27,"line":39},[25,120835,120836],{"class":31},"cat",[25,120838,120839],{"class":45}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[25,120841,25216],{"class":240},[25,120843,30307],{"class":31},[25,120845,120846],{"class":45}," CUDNN_MAJOR",[25,120848,120849],{"class":35}," -A",[25,120851,47794],{"class":35},[99,120853,120854],{},"出现下图这样的就是安装成功了",[99,120856,120857],{},[155,120858],{"alt":20,"src":120859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[194,120861,120862],{"start":59},[106,120863,120864],{},"软链接(一般不需要)",[15,120866,120868],{"className":118594,"code":120867,"language":118596,"meta":20,"style":20},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[22,120869,120870,120875],{"__ignoreMap":20},[25,120871,120872],{"class":27,"line":28},[25,120873,120874],{"class":302},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[25,120876,120877,120879],{"class":27,"line":39},[25,120878,24684],{"class":31},[25,120880,120881],{"class":45}," ldconfig\n",[99,120883,120884],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[15,120886,120891],{"className":120887,"code":120888,"language":120889,"meta":120890,"style":20},"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",[22,120892,120893,120898,120903,120908,120913,120918,120923],{"__ignoreMap":20},[25,120894,120895],{"class":27,"line":28},[25,120896,120897],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[25,120899,120900],{"class":27,"line":39},[25,120901,120902],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[25,120904,120905],{"class":27,"line":51},[25,120906,120907],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[25,120909,120910],{"class":27,"line":59},[25,120911,120912],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[25,120914,120915],{"class":27,"line":67},[25,120916,120917],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[25,120919,120920],{"class":27,"line":75},[25,120921,120922],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[25,120924,120925],{"class":27,"line":83},[25,120926,120927],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[99,120929,120930],{},"运行下方的命令",[15,120932,120934],{"className":118594,"code":120933,"language":118596,"meta":20,"style":20},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[22,120935,120936,120941,120948,120953],{"__ignoreMap":20},[25,120937,120938],{"class":27,"line":28},[25,120939,120940],{"class":302},"# cd进入CUDA路径\n",[25,120942,120943,120945],{"class":27,"line":39},[25,120944,101347],{"class":35},[25,120946,120947],{"class":45}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[25,120949,120950],{"class":27,"line":51},[25,120951,120952],{"class":302}," # 查看本路径下的需要软链接的文件名\n",[25,120954,120955],{"class":27,"line":59},[25,120956,120957],{"class":31}," ls\n",[99,120959,120960],{},[155,120961],{"alt":20,"src":120962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[99,120964,120965,120966,18520,120969,18520,120972,120975],{},"如上图，我需要将",[22,120967,120968],{},"libcudnn_xxx_xxxxx.so.8.9.7",[22,120970,120971],{},"libcudnn_xxx_xxxxx.so.8",[22,120973,120974],{},"libcudnn_xxx_xxxxx.so","软链接",[15,120977,120979],{"className":118594,"code":120978,"language":118596,"meta":20,"style":20},"# 创建符号链接。对于每个 .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",[22,120980,120981,120986,121002,121016,121030,121044,121058,121072,121086,121091,121097,121102],{"__ignoreMap":20},[25,120982,120983],{"class":27,"line":28},[25,120984,120985],{"class":302},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[25,120987,120988,120990,120993,120996,120999],{"class":27,"line":39},[25,120989,24684],{"class":31},[25,120991,120992],{"class":45}," ln",[25,120994,120995],{"class":35}," -sf",[25,120997,120998],{"class":45}," libcudnn_cnn_train.so.8.9.7",[25,121000,121001],{"class":45}," libcudnn_cnn_train.so.8\n",[25,121003,121004,121006,121008,121010,121013],{"class":27,"line":51},[25,121005,24684],{"class":31},[25,121007,120992],{"class":45},[25,121009,120995],{"class":35},[25,121011,121012],{"class":45}," libcudnn_adv_infer.so.8.9.7",[25,121014,121015],{"class":45}," libcudnn_adv_infer.so.8\n",[25,121017,121018,121020,121022,121024,121027],{"class":27,"line":59},[25,121019,24684],{"class":31},[25,121021,120992],{"class":45},[25,121023,120995],{"class":35},[25,121025,121026],{"class":45}," libcudnn_adv_train.so.8.9.7",[25,121028,121029],{"class":45}," libcudnn_adv_train.so.8\n",[25,121031,121032,121034,121036,121038,121041],{"class":27,"line":67},[25,121033,24684],{"class":31},[25,121035,120992],{"class":45},[25,121037,120995],{"class":35},[25,121039,121040],{"class":45}," libcudnn_cnn_infer.so.8.9.7",[25,121042,121043],{"class":45}," libcudnn_cnn_infer.so.8\n",[25,121045,121046,121048,121050,121052,121055],{"class":27,"line":75},[25,121047,24684],{"class":31},[25,121049,120992],{"class":45},[25,121051,120995],{"class":35},[25,121053,121054],{"class":45}," libcudnn.so.8.9.7",[25,121056,121057],{"class":45}," libcudnn.so.8\n",[25,121059,121060,121062,121064,121066,121069],{"class":27,"line":83},[25,121061,24684],{"class":31},[25,121063,120992],{"class":45},[25,121065,120995],{"class":35},[25,121067,121068],{"class":45}," libcudnn_ops_infer.so.8.9.7",[25,121070,121071],{"class":45}," libcudnn_ops_infer.so.8\n",[25,121073,121074,121076,121078,121080,121083],{"class":27,"line":91},[25,121075,24684],{"class":31},[25,121077,120992],{"class":45},[25,121079,120995],{"class":35},[25,121081,121082],{"class":45}," libcudnn_ops_train.so.8.9.7",[25,121084,121085],{"class":45}," libcudnn_ops_train.so.8\n",[25,121087,121088],{"class":27,"line":1429},[25,121089,121090],{"class":302},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[25,121092,121093,121095],{"class":27,"line":1441},[25,121094,24684],{"class":31},[25,121096,120881],{"class":45},[25,121098,121099],{"class":27,"line":1723},[25,121100,121101],{"class":302},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[25,121103,121104,121106,121109,121112,121114,121117],{"class":27,"line":1728},[25,121105,26832],{"class":31},[25,121107,121108],{"class":35}," -l",[25,121110,121111],{"class":45}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[25,121113,698],{"class":35},[25,121115,121116],{"class":45},".so",[25,121118,119319],{"class":35},[210,121120,121122],{"id":121121},"_355-常见问题","3.5.5 常见问题",[194,121124,121125],{},[106,121126,121127],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[15,121129,121131],{"className":118594,"code":121130,"language":118596,"meta":20,"style":20},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[22,121132,121133],{"__ignoreMap":20},[25,121134,121135,121137,121139],{"class":27,"line":28},[25,121136,24684],{"class":31},[25,121138,118654],{"class":45},[25,121140,121141],{"class":45}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[99,121143,121144],{},"blacklist-nouveau.conf文件内容如下：",[15,121146,121148],{"className":118594,"code":121147,"language":118596,"meta":20,"style":20},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[22,121149,121150,121158,121165,121177,121187],{"__ignoreMap":20},[25,121151,121152,121155],{"class":27,"line":28},[25,121153,121154],{"class":31},"blacklist",[25,121156,121157],{"class":45}," nouveau\n",[25,121159,121160,121162],{"class":27,"line":39},[25,121161,121154],{"class":31},[25,121163,121164],{"class":45}," lbm-nouveau\n",[25,121166,121167,121169,121172,121175],{"class":27,"line":51},[25,121168,116001],{"class":31},[25,121170,121171],{"class":45}," nouveau",[25,121173,121174],{"class":45}," modeset=",[25,121176,3195],{"class":35},[25,121178,121179,121182,121184],{"class":27,"line":59},[25,121180,121181],{"class":35},"alias",[25,121183,121171],{"class":45},[25,121185,121186],{"class":45}," off\n",[25,121188,121189,121191,121194],{"class":27,"line":67},[25,121190,121181],{"class":35},[25,121192,121193],{"class":45}," lbm-nouveau",[25,121195,121186],{"class":45},[99,121197,121198],{},"接着运行下方命令",[15,121200,121202],{"className":118594,"code":121201,"language":118596,"meta":20,"style":20},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[22,121203,121204,121214,121219],{"__ignoreMap":20},[25,121205,121206,121208,121211],{"class":27,"line":28},[25,121207,24684],{"class":31},[25,121209,121210],{"class":45}," update-initramfs",[25,121212,121213],{"class":35}," -u\n",[25,121215,121216],{"class":27,"line":39},[25,121217,121218],{"class":31},"或者\n",[25,121220,121221,121223,121226],{"class":27,"line":51},[25,121222,24684],{"class":31},[25,121224,121225],{"class":45}," dracut",[25,121227,121228],{"class":35}," --force\n",[99,121230,121231],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[15,121233,121235],{"className":118594,"code":121234,"language":118596,"meta":20,"style":20},"lsmod | grep nouveau\n",[22,121236,121237],{"__ignoreMap":20},[25,121238,121239,121242,121244,121246],{"class":27,"line":28},[25,121240,121241],{"class":31},"lsmod",[25,121243,25216],{"class":240},[25,121245,30307],{"class":31},[25,121247,121157],{"class":45},[194,121249,121250],{"start":39},[106,121251,121252],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[15,121254,121256],{"className":118594,"code":121255,"language":118596,"meta":20,"style":20},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[22,121257,121258],{"__ignoreMap":20},[25,121259,121260,121262,121264],{"class":27,"line":28},[25,121261,24684],{"class":31},[25,121263,118654],{"class":45},[25,121265,121266],{"class":45}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[99,121268,121269],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[15,121271,121273],{"className":118594,"code":121272,"language":118596,"meta":20,"style":20},"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",[22,121274,121275,121283,121291,121299,121306,121314,121324,121332],{"__ignoreMap":20},[25,121276,121277,121280],{"class":27,"line":28},[25,121278,121279],{"class":31},"Section",[25,121281,121282],{"class":45}," \"OutputClass\"\n",[25,121284,121285,121288],{"class":27,"line":39},[25,121286,121287],{"class":31},"   Identifier",[25,121289,121290],{"class":45}," \"nvidia\"\n",[25,121292,121293,121296],{"class":27,"line":51},[25,121294,121295],{"class":31},"   MatchDriver",[25,121297,121298],{"class":45}," \"nvidia-drm\"\n",[25,121300,121301,121304],{"class":27,"line":59},[25,121302,121303],{"class":31},"   Driver",[25,121305,121290],{"class":45},[25,121307,121308,121311],{"class":27,"line":67},[25,121309,121310],{"class":31},"   Option",[25,121312,121313],{"class":45}," \"AllowEmptyInitialConfiguration\"\n",[25,121315,121316,121318,121321],{"class":27,"line":75},[25,121317,121310],{"class":31},[25,121319,121320],{"class":45}," \"PrimaryGPU\"",[25,121322,121323],{"class":45}," \"yes\"\n",[25,121325,121326,121329],{"class":27,"line":83},[25,121327,121328],{"class":31},"   ModulePath",[25,121330,121331],{"class":45}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[25,121333,121334],{"class":27,"line":91},[25,121335,121336],{"class":31},"EndSection\n",[194,121338,121339],{"start":51},[106,121340,121341],{},"安装N卡驱动提示错误",[15,121343,121345],{"className":120887,"code":121344,"language":120889,"meta":120890,"style":20},"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",[22,121346,121347],{"__ignoreMap":20},[25,121348,121349],{"class":27,"line":28},[25,121350,121344],{},[194,121352,121353],{},[106,121354,121355],{},"检查当前运行的内核版本：",[99,121357,121358],{},"运行以下命令以查看你当前正在使用的内核版本：",[15,121360,121362],{"className":117367,"code":121361,"language":117369,"meta":20,"style":20},"uname -r\n",[22,121363,121364],{"__ignoreMap":20},[25,121365,121366,121368],{"class":27,"line":28},[25,121367,70275],{"class":31},[25,121369,121370],{"class":35}," -r\n",[194,121372,121373],{"start":39},[106,121374,121375],{},"安装内核开发文件：",[99,121377,121378,121379,121382],{},"确保你已经安装了与当前内核版本相匹配的 ",[22,121380,121381],{},"kernel-devel"," 包。运行以下命令来安装：",[15,121384,121386],{"className":117367,"code":121385,"language":117369,"meta":20,"style":20},"sudo dnf install kernel-devel-$(uname -r)\n",[22,121387,121388],{"__ignoreMap":20},[25,121389,121390,121392,121394,121396,121399,121401,121403,121405],{"class":27,"line":28},[25,121391,24684],{"class":31},[25,121393,26386],{"class":45},[25,121395,23942],{"class":45},[25,121397,121398],{"class":45}," kernel-devel-",[25,121400,25206],{"class":244},[25,121402,70275],{"class":31},[25,121404,119710],{"class":35},[25,121406,251],{"class":244},[99,121408,121409],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[194,121411,121412],{"start":51},[106,121413,121414],{},"安装内核源代码（如果需要）：",[99,121416,121417],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[15,121419,121421],{"className":117367,"code":121420,"language":117369,"meta":20,"style":20},"sudo dnf install kernel-headers kernel-source\n",[22,121422,121423],{"__ignoreMap":20},[25,121424,121425,121427,121429,121431,121434],{"class":27,"line":28},[25,121426,24684],{"class":31},[25,121428,26386],{"class":45},[25,121430,23942],{"class":45},[25,121432,121433],{"class":45}," kernel-headers",[25,121435,121436],{"class":45}," kernel-source\n",[194,121438,121439],{"start":59},[106,121440,121441],{},"检查安装：",[99,121443,121444,121445,121448],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[22,121446,121447],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[15,121450,121452],{"className":117367,"code":121451,"language":117369,"meta":20,"style":20},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[22,121453,121454],{"__ignoreMap":20},[25,121455,121456,121458],{"class":27,"line":28},[25,121457,26832],{"class":31},[25,121459,121460],{"class":45}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[99,121462,121463,121464,121467],{},"如果仍然遇到问题，可以通过 ",[22,121465,121466],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[159,121469,121470],{},"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":20,"searchDepth":39,"depth":39,"links":121472},[121473,121477,121487,121491,121492],{"id":118570,"depth":39,"text":118571,"children":121474},[121475,121476],{"id":118580,"depth":51,"text":118581},{"id":118590,"depth":51,"text":118591},{"id":118790,"depth":39,"text":118791,"children":121478},[121479,121480,121481,121482,121483,121484,121485,121486],{"id":118794,"depth":51,"text":118795},{"id":118864,"depth":51,"text":118865},{"id":118953,"depth":51,"text":118954},{"id":119198,"depth":51,"text":119199},{"id":119268,"depth":51,"text":119269},{"id":119335,"depth":51,"text":119336},{"id":119370,"depth":51,"text":119371},{"id":119425,"depth":51,"text":119426},{"id":119476,"depth":39,"text":119477,"children":121488},[121489,121490],{"id":119480,"depth":51,"text":119481},{"id":119560,"depth":51,"text":119561},{"id":119746,"depth":39,"text":119747},{"id":119919,"depth":39,"text":119920,"children":121493},[121494,121495,121496,121497,121498],{"id":119923,"depth":51,"text":119924},{"id":119964,"depth":51,"text":119965},{"id":120251,"depth":51,"text":120252},{"id":120625,"depth":51,"text":120626},{"id":121121,"depth":51,"text":121122},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118562,"description":164},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121505,"title":121506,"body":121507,"description":164,"extension":165,"meta":121847,"navigation":167,"path":121848,"seo":121849,"stem":121850,"__hash__":121851},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121508,"toc":121845},[121509,121512,121517,121520,121766,121771,121774,121810,121813,121842],[10,121510,121506],{"id":121511},"_4-命令教程长期积累",[194,121513,121514],{},[106,121515,121516],{},"大多数命令",[99,121518,121519],{},"常用 Linux 命令速查：",[15,121521,121523],{"className":117367,"code":121522,"language":117369,"meta":20,"style":20},"# 文件与目录\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",[22,121524,121525,121530,121537,121544,121552,121559,121566,121574,121582,121589,121596,121604,121608,121613,121620,121628,121635,121639,121644,121651,121659,121667,121675,121683,121687,121692,121700,121707,121714,121722,121730,121734,121739,121748,121757],{"__ignoreMap":20},[25,121526,121527],{"class":27,"line":28},[25,121528,121529],{"class":302},"# 文件与目录\n",[25,121531,121532,121534],{"class":27,"line":39},[25,121533,26832],{"class":31},[25,121535,121536],{"class":302},"        # 列出目录内容\n",[25,121538,121539,121541],{"class":27,"line":51},[25,121540,101347],{"class":35},[25,121542,121543],{"class":302},"        # 切换目录\n",[25,121545,121546,121549],{"class":27,"line":59},[25,121547,121548],{"class":35},"pwd",[25,121550,121551],{"class":302},"       # 显示当前路径\n",[25,121553,121554,121556],{"class":27,"line":67},[25,121555,101337],{"class":31},[25,121557,121558],{"class":302},"     # 创建目录\n",[25,121560,121561,121563],{"class":27,"line":75},[25,121562,25427],{"class":31},[25,121564,121565],{"class":302},"        # 删除文件或目录\n",[25,121567,121568,121571],{"class":27,"line":83},[25,121569,121570],{"class":31},"cp",[25,121572,121573],{"class":302},"        # 复制文件或目录\n",[25,121575,121576,121579],{"class":27,"line":91},[25,121577,121578],{"class":31},"mv",[25,121580,121581],{"class":302},"        # 移动\u002F重命名文件或目录\n",[25,121583,121584,121586],{"class":27,"line":1429},[25,121585,101354],{"class":31},[25,121587,121588],{"class":302},"     # 创建空文件\n",[25,121590,121591,121593],{"class":27,"line":1441},[25,121592,120836],{"class":31},[25,121594,121595],{"class":302},"       # 查看文件内容\n",[25,121597,121598,121601],{"class":27,"line":1723},[25,121599,121600],{"class":31},"head\u002Ftail",[25,121602,121603],{"class":302}," # 查看文件头部\u002F尾部\n",[25,121605,121606],{"class":27,"line":1728},[25,121607,2510],{"emptyLinePlaceholder":167},[25,121609,121610],{"class":27,"line":1734},[25,121611,121612],{"class":302},"# 权限管理\n",[25,121614,121615,121617],{"class":27,"line":1739},[25,121616,24719],{"class":31},[25,121618,121619],{"class":302},"     # 修改文件权限\n",[25,121621,121622,121625],{"class":27,"line":1753},[25,121623,121624],{"class":31},"chown",[25,121626,121627],{"class":302},"     # 修改文件所有者\n",[25,121629,121630,121632],{"class":27,"line":1758},[25,121631,24684],{"class":31},[25,121633,121634],{"class":302},"      # 以管理员身份执行\n",[25,121636,121637],{"class":27,"line":1764},[25,121638,2510],{"emptyLinePlaceholder":167},[25,121640,121641],{"class":27,"line":1785},[25,121642,121643],{"class":302},"# 系统信息\n",[25,121645,121646,121648],{"class":27,"line":1790},[25,121647,70275],{"class":31},[25,121649,121650],{"class":302},"     # 系统信息\n",[25,121652,121653,121656],{"class":27,"line":1804},[25,121654,121655],{"class":31},"df",[25,121657,121658],{"class":302},"        # 磁盘使用情况\n",[25,121660,121661,121664],{"class":27,"line":1809},[25,121662,121663],{"class":31},"free",[25,121665,121666],{"class":302},"      # 内存使用情况\n",[25,121668,121669,121672],{"class":27,"line":1838},[25,121670,121671],{"class":31},"top\u002Fhtop",[25,121673,121674],{"class":302},"  # 进程监控\n",[25,121676,121677,121680],{"class":27,"line":1843},[25,121678,121679],{"class":31},"ps",[25,121681,121682],{"class":302},"        # 查看进程\n",[25,121684,121685],{"class":27,"line":1860},[25,121686,2510],{"emptyLinePlaceholder":167},[25,121688,121689],{"class":27,"line":1865},[25,121690,121691],{"class":302},"# 网络\n",[25,121693,121694,121697],{"class":27,"line":1870},[25,121695,121696],{"class":31},"ping",[25,121698,121699],{"class":302},"      # 测试网络连通性\n",[25,121701,121702,121704],{"class":27,"line":1875},[25,121703,26920],{"class":31},[25,121705,121706],{"class":302},"      # 发送 HTTP 请求\n",[25,121708,121709,121711],{"class":27,"line":1889},[25,121710,120360],{"class":31},[25,121712,121713],{"class":302},"      # 下载文件\n",[25,121715,121716,121719],{"class":27,"line":1894},[25,121717,121718],{"class":31},"ssh",[25,121720,121721],{"class":302},"       # 远程登录\n",[25,121723,121724,121727],{"class":27,"line":2687},[25,121725,121726],{"class":31},"scp",[25,121728,121729],{"class":302},"       # 远程文件传输\n",[25,121731,121732],{"class":27,"line":2701},[25,121733,2510],{"emptyLinePlaceholder":167},[25,121735,121736],{"class":27,"line":2709},[25,121737,121738],{"class":302},"# 包管理（Debian\u002FUbuntu）\n",[25,121740,121741,121743,121745],{"class":27,"line":2714},[25,121742,117439],{"class":31},[25,121744,117418],{"class":45},[25,121746,121747],{"class":302},"   # 更新软件源\n",[25,121749,121750,121752,121754],{"class":27,"line":2720},[25,121751,117439],{"class":31},[25,121753,23942],{"class":45},[25,121755,121756],{"class":302},"  # 安装软件包\n",[25,121758,121759,121761,121763],{"class":27,"line":2726},[25,121760,117439],{"class":31},[25,121762,26150],{"class":45},[25,121764,121765],{"class":302},"   # 卸载软件包\n",[194,121767,121768],{"start":39},[106,121769,121770],{},"KDE Dolphin 以root打开",[99,121772,121773],{},"kde5",[15,121775,121777],{"className":117367,"code":121776,"language":117369,"meta":20,"style":20},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[22,121778,121779],{"__ignoreMap":20},[25,121780,121781,121784,121787,121790,121792,121794,121797,121800,121802,121805,121807],{"class":27,"line":28},[25,121782,121783],{"class":31},"pkexec",[25,121785,121786],{"class":45}," env",[25,121788,121789],{"class":45}," DISPLAY=",[25,121791,28214],{"class":244},[25,121793,28272],{"class":45},[25,121795,121796],{"class":244},"$XAUTHORITY ",[25,121798,121799],{"class":45},"KDE_SESSION_VERSION=",[25,121801,562],{"class":35},[25,121803,121804],{"class":45}," KDE_FULL_SESSION=",[25,121806,1474],{"class":35},[25,121808,121809],{"class":45}," dolphin\n",[99,121811,121812],{},"kde6",[15,121814,121816],{"className":117367,"code":121815,"language":117369,"meta":20,"style":20},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[22,121817,121818],{"__ignoreMap":20},[25,121819,121820,121822,121824,121826,121828,121830,121832,121834,121836,121838,121840],{"class":27,"line":28},[25,121821,121783],{"class":31},[25,121823,121786],{"class":45},[25,121825,121789],{"class":45},[25,121827,28214],{"class":244},[25,121829,28272],{"class":45},[25,121831,121796],{"class":244},[25,121833,121799],{"class":45},[25,121835,587],{"class":35},[25,121837,121804],{"class":45},[25,121839,1474],{"class":35},[25,121841,121809],{"class":45},[159,121843,121844],{},"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":20,"searchDepth":39,"depth":39,"links":121846},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121506,"description":164},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121853,"title":121854,"body":121855,"description":164,"extension":165,"meta":121869,"navigation":167,"path":121870,"seo":121871,"stem":121872,"__hash__":121873},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121856,"toc":121867},[121857,121860],[10,121858,121854],{"id":121859},"_5-各种环境配置",[99,121861,121862],{},[481,121863,121866],{"href":121864,"rel":121865},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23973],"电控组环境搭建大全",{"title":20,"searchDepth":39,"depth":39,"links":121868},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121854,"description":164},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121875,"title":121876,"body":121877,"description":164,"extension":165,"meta":122225,"navigation":167,"path":122226,"seo":122227,"stem":122228,"__hash__":122229},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121878,"toc":122217},[121879,121882,121886,121890,121894,121899,121906,121910,122203,122207,122214],[10,121880,121876],{"id":121881},"_6-拓展功能",[182,121883,121885],{"id":121884},"_61-wine","6.1 Wine",[182,121887,121889],{"id":121888},"_62-android","6.2 Android",[210,121891,121893],{"id":121892},"_621-i卡a卡","6.2.1 I卡、A卡",[194,121895,121896],{},[106,121897,121898],{},"Wayland-Waydroid(体验超级好)",[99,121900,121901,121902],{},"Waydroid 官网与安装指南：",[481,121903,121904],{"href":121904,"rel":121905},"https:\u002F\u002Fwaydro.id\u002F",[23973],[210,121907,121909],{"id":121908},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[194,121911,121912],{},[106,121913,121914,121915,121917,121918,121922,121924,121927,121932,122129],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53787,121916],{},"BlissOS 官网下载：",[481,121919,121920],{"href":121920,"rel":121921},"https:\u002F\u002Fblissos.org\u002F",[23973],[53787,121923],{},[155,121925],{"alt":20,"src":121926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[194,121928,121929],{"start":51},[106,121930,121931],{},"比较推荐的配置",[15,121933,121935],{"className":117367,"code":121934,"language":117369,"meta":20,"style":20},"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",[22,121936,121937,121944,121954,121964,121974,121986,121996,122003,122013,122022,122031,122041,122051,122060,122070,122080,122092,122102,122111,122121],{"__ignoreMap":20},[25,121938,121939,121942],{"class":27,"line":28},[25,121940,121941],{"class":31},"qemu-system-x86_64",[25,121943,36],{"class":35},[25,121945,121946,121949,121952],{"class":27,"line":39},[25,121947,121948],{"class":35},"        -M",[25,121950,121951],{"class":45}," q35,vmport=off",[25,121953,36],{"class":35},[25,121955,121956,121959,121962],{"class":27,"line":51},[25,121957,121958],{"class":35},"        -accel",[25,121960,121961],{"class":45}," kvm",[25,121963,36],{"class":35},[25,121965,121966,121969,121972],{"class":27,"line":59},[25,121967,121968],{"class":35},"        -cpu",[25,121970,121971],{"class":45}," qemu64,+sse3,+sse4.2",[25,121973,36],{"class":35},[25,121975,121976,121979,121982,121984],{"class":27,"line":67},[25,121977,121978],{"class":35},"        -smp",[25,121980,121981],{"class":45}," 8,cores=",[25,121983,536],{"class":35},[25,121985,36],{"class":35},[25,121987,121988,121991,121994],{"class":27,"line":75},[25,121989,121990],{"class":35},"        -m",[25,121992,121993],{"class":45}," 6G",[25,121995,36],{"class":35},[25,121997,121998,122001],{"class":27,"line":83},[25,121999,122000],{"class":35},"        -usb",[25,122002,36],{"class":35},[25,122004,122005,122008,122011],{"class":27,"line":91},[25,122006,122007],{"class":35},"        -device",[25,122009,122010],{"class":45}," virtio-tablet",[25,122012,36],{"class":35},[25,122014,122015,122017,122020],{"class":27,"line":1429},[25,122016,122007],{"class":35},[25,122018,122019],{"class":45}," virtio-keyboard",[25,122021,36],{"class":35},[25,122023,122024,122026,122029],{"class":27,"line":1441},[25,122025,122007],{"class":35},[25,122027,122028],{"class":45}," usb-tablet",[25,122030,36],{"class":35},[25,122032,122033,122036,122039],{"class":27,"line":1723},[25,122034,122035],{"class":35},"        -bios",[25,122037,122038],{"class":45}," OVMF-pure-efi64.fd",[25,122040,36],{"class":35},[25,122042,122043,122046,122049],{"class":27,"line":1728},[25,122044,122045],{"class":35},"        -net",[25,122047,122048],{"class":45}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[25,122050,36],{"class":35},[25,122052,122053,122055,122058],{"class":27,"line":1734},[25,122054,122045],{"class":35},[25,122056,122057],{"class":45}," nic,model=virtio",[25,122059,36],{"class":35},[25,122061,122062,122065,122068],{"class":27,"line":1739},[25,122063,122064],{"class":35},"        -audio",[25,122066,122067],{"class":45}," sdl,model=hda",[25,122069,36],{"class":35},[25,122071,122072,122075,122078],{"class":27,"line":1753},[25,122073,122074],{"class":35},"        -display",[25,122076,122077],{"class":45}," sdl,gl=on,show-cursor=on",[25,122079,36],{"class":35},[25,122081,122082,122084,122087,122090],{"class":27,"line":1758},[25,122083,122007],{"class":35},[25,122085,122086],{"class":45}," virtio-vga-gl,xres=1920,yres=",[25,122088,122089],{"class":35},"1080",[25,122091,36],{"class":35},[25,122093,122094,122097,122100],{"class":27,"line":1764},[25,122095,122096],{"class":35},"        -drive",[25,122098,122099],{"class":45}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[25,122101,36],{"class":35},[25,122103,122104,122106,122109],{"class":27,"line":1785},[25,122105,122096],{"class":35},[25,122107,122108],{"class":45}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[25,122110,36],{"class":35},[25,122112,122113,122116,122119],{"class":27,"line":1790},[25,122114,122115],{"class":35},"        -monitor",[25,122117,122118],{"class":45}," stdio",[25,122120,36],{"class":35},[25,122122,122123,122126],{"class":27,"line":1804},[25,122124,122125],{"class":35},"        -serial",[25,122127,122128],{"class":45}," none\n",[194,122130,122131],{"start":67},[106,122132,122133,122134],{},"常用操作：",[194,122135,122136,122139,122195],{},[106,122137,122138],{},"全屏：Ctrl+Alt+F",[106,122140,122141,122142,122147],{},"adb调试",[194,122143,122144],{},[106,122145,122146],{},"使Linux与Android用ADB连接。",[15,122148,122150],{"className":117367,"code":122149,"language":117369,"meta":20,"style":20},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[22,122151,122152,122157,122168,122173,122185,122190],{"__ignoreMap":20},[25,122153,122154],{"class":27,"line":28},[25,122155,122156],{"class":302},"# 连接安卓\n",[25,122158,122159,122162,122165],{"class":27,"line":39},[25,122160,122161],{"class":31},"adb",[25,122163,122164],{"class":45}," connect",[25,122166,122167],{"class":35}," 127.0.0.1\n",[25,122169,122170],{"class":27,"line":51},[25,122171,122172],{"class":302},"# 打开shell\n",[25,122174,122175,122177,122179,122182],{"class":27,"line":59},[25,122176,122161],{"class":31},[25,122178,26954],{"class":35},[25,122180,122181],{"class":45}," 127.0.0.1:5555",[25,122183,122184],{"class":45}," shell\n",[25,122186,122187],{"class":27,"line":67},[25,122188,122189],{"class":302},"# 使用root权限\n",[25,122191,122192],{"class":27,"line":75},[25,122193,122194],{"class":31},"su\n",[106,122196,122197,122198],{},"中文输入法",[194,122199,122200],{},[106,122201,122202],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[182,122204,122206],{"id":122205},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[99,122208,122209,122210],{},"rEFInd 官网与文档：",[481,122211,122212],{"href":122212,"rel":122213},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23973],[159,122215,122216],{},"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":20,"searchDepth":39,"depth":39,"links":122218},[122219,122220,122224],{"id":121884,"depth":39,"text":121885},{"id":121888,"depth":39,"text":121889,"children":122221},[122222,122223],{"id":121892,"depth":51,"text":121893},{"id":121908,"depth":51,"text":121909},{"id":122205,"depth":39,"text":122206},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121876,"description":164},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122231,"title":122232,"body":122233,"description":164,"extension":165,"meta":125532,"navigation":167,"path":125533,"seo":125534,"stem":125535,"__hash__":125536},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122234,"toc":125506},[122235,122238,122242,122245,122252,122502,122505,122577,122580,122584,122588,122593,122596,122599,122602,122607,122610,122613,122616,122621,122624,122629,122632,122635,122640,122643,122648,122651,122655,122659,122662,122667,122670,122684,122687,122690,122699,122702,122711,122714,122717,122726,122729,122738,122741,122744,122753,122756,122759,122774,122777,122780,122789,122794,122797,122800,122809,122812,122821,122824,122833,122836,122845,122850,122853,122861,122866,122869,122878,122881,122889,122894,122897,122906,122909,122912,122916,122919,122924,122927,122932,122946,122951,122956,122967,122972,122978,122983,122998,123003,123006,123011,123016,123021,123029,123034,123041,123046,123057,123062,123065,123069,123072,123075,123080,123083,123102,123107,123110,123119,123124,123127,123149,123152,123182,123185,123190,123193,123207,123212,123231,123234,123237,123242,123254,123259,123264,123267,123272,123275,123290,123293,123298,123303,123307,123312,123352,123355,123359,123365,123371,123376,123379,123386,123391,123398,123401,123404,123411,123425,123428,123488,123491,123505,123517,123520,123523,123526,123590,123593,123596,123599,123619,123622,123627,123634,123638,123641,123645,123650,123655,123659,123662,123665,123707,123712,123715,123737,123752,123754,123759,123771,123831,123833,123835,123889,123891,123893,123899,123904,123907,123912,123916,123919,123981,123986,123989,123991,123995,124007,124089,124091,124093,124147,124153,124155,124159,124164,124166,124171,124175,124195,124230,124234,124237,124240,124243,124250,124253,124265,124268,124283,124286,124305,124353,124356,124373,124376,124390,124395,124398,124407,124422,124434,124472,124477,124486,124491,124496,124522,124531,124535,124539,124544,124547,124551,124555,124560,124563,124568,124571,124576,124579,124584,124587,124591,124596,124599,124604,124607,124611,124616,124619,124624,124627,124632,124635,124639,124644,124647,124652,124655,124660,124663,124667,124672,124675,124680,124683,124688,124691,124696,124699,124704,124707,124712,124715,124719,124724,124727,124732,124739,124743,124748,124751,124756,124759,124763,124768,124771,124774,124777,124780,124783,124787,124790,124800,124805,124810,124832,124837,124842,124849,124853,124858,124861,124864,124869,124872,124875,124878,124881,124884,124887,124890,124893,124896,124899,124902,124905,124910,124915,124920,124925,124930,124935,124940,124943,124947,124950,124954,124959,124964,124969,124974,124978,124984,124992,124997,125000,125005,125020,125023,125028,125062,125077,125080,125135,125161,125173,125176,125185,125188,125203,125208,125211,125217,125222,125225,125230,125233,125238,125243,125250,125253,125268,125271,125306,125311,125319,125357,125360,125363,125368,125371,125376,125387,125421,125426,125429,125438,125443,125449,125452,125457,125466,125471,125474,125477,125482,125490,125493,125498,125503],[10,122236,122232],{"id":122237},"_7-其他操作",[182,122239,122241],{"id":122240},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[99,122243,122244],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[99,122246,122247,122248,122251],{},"进入工控机的硬盘目录，进入",[22,122249,122250],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[15,122253,122257],{"className":122254,"code":122255,"language":122256,"meta":20,"style":20},"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",[22,122258,122259,122267,122278,122285,122292,122304,122311,122323,122334,122345,122352,122359,122366,122378,122390,122397,122409,122421,122428,122440,122452,122464,122475,122482,122493],{"__ignoreMap":20},[25,122260,122261,122264],{"class":27,"line":28},[25,122262,122263],{"class":51371},"network",[25,122265,122266],{"class":244},": \n",[25,122268,122269,122272,122274,122276],{"class":27,"line":39},[25,122270,122271],{"class":51371},"  version",[25,122273,51508],{"class":244},[25,122275,321],{"class":35},[25,122277,2784],{"class":244},[25,122279,122280,122283],{"class":27,"line":51},[25,122281,122282],{"class":51371},"  wifis",[25,122284,122266],{"class":244},[25,122286,122287,122290],{"class":27,"line":59},[25,122288,122289],{"class":51371},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[25,122291,122266],{"class":244},[25,122293,122294,122297,122299,122302],{"class":27,"line":67},[25,122295,122296],{"class":51371},"      renderer",[25,122298,51508],{"class":244},[25,122300,122301],{"class":45},"NetworkManager",[25,122303,2784],{"class":244},[25,122305,122306,122309],{"class":27,"line":75},[25,122307,122308],{"class":51371},"      match",[25,122310,122266],{"class":244},[25,122312,122313,122316,122318,122321],{"class":27,"line":83},[25,122314,122315],{"class":51371},"        name",[25,122317,51508],{"class":244},[25,122319,122320],{"class":45},"\"wlan0\"",[25,122322,2784],{"class":244},[25,122324,122325,122328,122330,122332],{"class":27,"line":91},[25,122326,122327],{"class":51371},"      dhcp4",[25,122329,51508],{"class":244},[25,122331,1474],{"class":35},[25,122333,2784],{"class":244},[25,122335,122336,122339,122341,122343],{"class":27,"line":1429},[25,122337,122338],{"class":51371},"      dhcp6",[25,122340,51508],{"class":244},[25,122342,1474],{"class":35},[25,122344,2784],{"class":244},[25,122346,122347,122350],{"class":27,"line":1441},[25,122348,122349],{"class":51371},"      access-points",[25,122351,122266],{"class":244},[25,122353,122354,122357],{"class":27,"line":1723},[25,122355,122356],{"class":45},"        \"EMIS_Vinci_Robocon_5G\"",[25,122358,122266],{"class":244},[25,122360,122361,122364],{"class":27,"line":1728},[25,122362,122363],{"class":51371},"          auth",[25,122365,122266],{"class":244},[25,122367,122368,122371,122373,122376],{"class":27,"line":1734},[25,122369,122370],{"class":51371},"            key-management",[25,122372,51508],{"class":244},[25,122374,122375],{"class":45},"\"psk\"",[25,122377,2784],{"class":244},[25,122379,122380,122383,122385,122388],{"class":27,"line":1739},[25,122381,122382],{"class":51371},"            password",[25,122384,51508],{"class":244},[25,122386,122387],{"class":45},"\"vinci666\"",[25,122389,2784],{"class":244},[25,122391,122392,122395],{"class":27,"line":1753},[25,122393,122394],{"class":51371},"          networkmanager",[25,122396,122266],{"class":244},[25,122398,122399,122402,122404,122407],{"class":27,"line":1758},[25,122400,122401],{"class":51371},"            uuid",[25,122403,51508],{"class":244},[25,122405,122406],{"class":45},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[25,122408,2784],{"class":244},[25,122410,122411,122414,122416,122419],{"class":27,"line":1764},[25,122412,122413],{"class":51371},"            name",[25,122415,51508],{"class":244},[25,122417,122418],{"class":45},"\"EMIS_Vinci_Robocon_5G\"",[25,122420,2784],{"class":244},[25,122422,122423,122426],{"class":27,"line":1785},[25,122424,122425],{"class":51371},"            passthrough",[25,122427,122266],{"class":244},[25,122429,122430,122433,122435,122438],{"class":27,"line":1790},[25,122431,122432],{"class":51371},"              wifi-security.auth-alg",[25,122434,51508],{"class":244},[25,122436,122437],{"class":45},"\"open\"",[25,122439,2784],{"class":244},[25,122441,122442,122445,122447,122450],{"class":27,"line":1804},[25,122443,122444],{"class":51371},"              ipv6.addr-gen-mode",[25,122446,51508],{"class":244},[25,122448,122449],{"class":45},"\"default\"",[25,122451,2784],{"class":244},[25,122453,122454,122457,122459,122462],{"class":27,"line":1809},[25,122455,122456],{"class":51371},"              ipv6.ip6-privacy",[25,122458,51508],{"class":244},[25,122460,122461],{"class":45},"\"-1\"",[25,122463,2784],{"class":244},[25,122465,122466,122469,122471,122473],{"class":27,"line":1838},[25,122467,122468],{"class":51371},"              proxy._",[25,122470,51508],{"class":244},[25,122472,7762],{"class":45},[25,122474,2784],{"class":244},[25,122476,122477,122480],{"class":27,"line":1843},[25,122478,122479],{"class":51371},"      networkmanager",[25,122481,122266],{"class":244},[25,122483,122484,122487,122489,122491],{"class":27,"line":1860},[25,122485,122486],{"class":51371},"        uuid",[25,122488,51508],{"class":244},[25,122490,122406],{"class":45},[25,122492,2784],{"class":244},[25,122494,122495,122497,122499],{"class":27,"line":1865},[25,122496,122315],{"class":51371},[25,122498,51508],{"class":244},[25,122500,122501],{"class":45},"\"EMIS_Vinci_Robocon_5G\"\n",[99,122503,122504],{},"将其改为新wifi的名和密码：",[15,122506,122508],{"className":122254,"code":122507,"language":122256,"meta":20,"style":20},"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",[22,122509,122510,122516,122525,122531,122538,122547,122555,122561,122567],{"__ignoreMap":20},[25,122511,122512,122514],{"class":27,"line":28},[25,122513,122263],{"class":51371},[25,122515,3849],{"class":244},[25,122517,122518,122520,122522],{"class":27,"line":39},[25,122519,122271],{"class":51371},[25,122521,51508],{"class":244},[25,122523,122524],{"class":35},"2\n",[25,122526,122527,122529],{"class":27,"line":51},[25,122528,122282],{"class":51371},[25,122530,3849],{"class":244},[25,122532,122533,122536],{"class":27,"line":59},[25,122534,122535],{"class":51371},"    wlan0",[25,122537,3849],{"class":244},[25,122539,122540,122542,122544],{"class":27,"line":67},[25,122541,122327],{"class":51371},[25,122543,51508],{"class":244},[25,122545,122546],{"class":35},"true\n",[25,122548,122549,122551,122553],{"class":27,"line":75},[25,122550,122338],{"class":51371},[25,122552,51508],{"class":244},[25,122554,122546],{"class":35},[25,122556,122557,122559],{"class":27,"line":83},[25,122558,122349],{"class":51371},[25,122560,3849],{"class":244},[25,122562,122563,122565],{"class":27,"line":91},[25,122564,122356],{"class":45},[25,122566,3849],{"class":244},[25,122568,122569,122572,122574],{"class":27,"line":1429},[25,122570,122571],{"class":51371},"          password",[25,122573,51508],{"class":244},[25,122575,122576],{"class":45},"\"vinci666\"\n",[99,122578,122579],{},"工控机开机即可连上网。",[182,122581,122583],{"id":122582},"_72-ssh远程开发","7.2 SSH远程开发",[210,122585,122587],{"id":122586},"_721-环境准备","7.2.1 环境准备",[99,122589,122590],{},[392,122591,122592],{},"1.硬件准备",[99,122594,122595],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[99,122597,122598],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[99,122600,122601],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[99,122603,122604],{},[392,122605,122606],{},"2.设置固定IP",[99,122608,122609],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[99,122611,122612],{},"1.进入设置界面",[99,122614,122615],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[99,122617,122618],{},[155,122619],{"alt":20,"src":122620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[99,122622,122623],{},"2.配置所连接的网络",[99,122625,122626],{},[155,122627],{"alt":20,"src":122628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[99,122630,122631],{},"3.设置固定IP",[99,122633,122634],{},"查看当前IP地址。",[99,122636,122637],{},[155,122638],{"alt":20,"src":122639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[99,122641,122642],{},"设置固定IP。",[99,122644,122645],{},[155,122646],{"alt":20,"src":122647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[99,122649,122650],{},"至此，IP配置完毕。",[210,122652,122654],{"id":122653},"_722-环境搭建","7.2.2 环境搭建",[99,122656,122657],{},[392,122658,25824],{},[99,122660,122661],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[99,122663,122664],{},[392,122665,122666],{},"实现",[99,122668,122669],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[194,122671,122672,122675,122678,122681],{},[106,122673,122674],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[106,122676,122677],{},"远程主机启动SSH服务；",[106,122679,122680],{},"本地主机登陆远程主机；",[106,122682,122683],{},"实现数据传输。",[99,122685,122686],{},"1.安装SSH客户端与服务端",[99,122688,122689],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[15,122691,122693],{"className":120887,"code":122692,"language":120889,"meta":120890,"style":20}," sudo apt install openssh-server\n",[22,122694,122695],{"__ignoreMap":20},[25,122696,122697],{"class":27,"line":28},[25,122698,122692],{},[99,122700,122701],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[15,122703,122705],{"className":120887,"code":122704,"language":120889,"meta":120890,"style":20},"sudo apt install openssh-client\n",[22,122706,122707],{"__ignoreMap":20},[25,122708,122709],{"class":27,"line":28},[25,122710,122704],{},[99,122712,122713],{},"2.远程主机启动SSH服务",[99,122715,122716],{},"远程主机启动 ssh 服务命令如下：",[15,122718,122720],{"className":120887,"code":122719,"language":120889,"meta":120890,"style":20},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[22,122721,122722],{"__ignoreMap":20},[25,122723,122724],{"class":27,"line":28},[25,122725,122719],{},[99,122727,122728],{},"启动后可使用如下命令查看服务是否正常运行：",[15,122730,122732],{"className":120887,"code":122731,"language":120889,"meta":120890,"style":20},"ps -e | grep ssh\n",[22,122733,122734],{"__ignoreMap":20},[25,122735,122736],{"class":27,"line":28},[25,122737,122731],{},[99,122739,122740],{},"如果启动成功，会包含 sshd 程序。",[99,122742,122743],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[15,122745,122747],{"className":120887,"code":122746,"language":120889,"meta":120890,"style":20},"sudo systemctl enable ssh\n",[22,122748,122749],{"__ignoreMap":20},[25,122750,122751],{"class":27,"line":28},[25,122752,122746],{},[99,122754,122755],{},"3.本地远程登录",[99,122757,122758],{},"登录远程主机可以调用如下命令:",[15,122760,122762],{"className":117367,"code":122761,"language":117369,"meta":20,"style":20},"ssh -X 用户名@ip地址\n",[22,122763,122764],{"__ignoreMap":20},[25,122765,122766,122768,122771],{"class":27,"line":28},[25,122767,121718],{"class":31},[25,122769,122770],{"class":35}," -X",[25,122772,122773],{"class":45}," 用户名@ip地址\n",[99,122775,122776],{},"然后根据提示，录入登陆密码，即可成功登录。",[99,122778,122779],{},"如果退出，可以调用exit命令：",[15,122781,122783],{"className":120887,"code":122782,"language":120889,"meta":120890,"style":20},"exit\n",[22,122784,122785],{"__ignoreMap":20},[25,122786,122787],{"class":27,"line":28},[25,122788,122782],{},[99,122790,122791],{},[392,122792,122793],{},"4.实现数据传输",[99,122795,122796],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[99,122798,122799],{},"上传文件指令格式如下：",[15,122801,122803],{"className":120887,"code":122802,"language":120889,"meta":120890,"style":20},"scp 本地文件路径 账号@ip:路径\n",[22,122804,122805],{"__ignoreMap":20},[25,122806,122807],{"class":27,"line":28},[25,122808,122802],{},[99,122810,122811],{},"上传文件夹指令格式如下：",[15,122813,122815],{"className":120887,"code":122814,"language":120889,"meta":120890,"style":20},"scp -r 本地文件夹路径 账号@ip:路径\n",[22,122816,122817],{"__ignoreMap":20},[25,122818,122819],{"class":27,"line":28},[25,122820,122814],{},[99,122822,122823],{},"下载文件指令格式如下：",[15,122825,122827],{"className":120887,"code":122826,"language":120889,"meta":120890,"style":20},"scp 账号@ip:路径 本地文件夹路径\n",[22,122828,122829],{"__ignoreMap":20},[25,122830,122831],{"class":27,"line":28},[25,122832,122826],{},[99,122834,122835],{},"下载文件夹指令格式如下：",[15,122837,122839],{"className":120887,"code":122838,"language":120889,"meta":120890,"style":20},"scp -r 账号@ip:路径 本地文件夹路径\n",[22,122840,122841],{"__ignoreMap":20},[25,122842,122843],{"class":27,"line":28},[25,122844,122838],{},[99,122846,122847],{},[392,122848,122849],{},"优化",[99,122851,122852],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[194,122854,122855,122858],{},[106,122856,122857],{},"本地生成密钥对；",[106,122859,122860],{},"将公钥上传至远程主机。",[99,122862,122863],{},[392,122864,122865],{},"1.生成密钥对",[99,122867,122868],{},"本地客户端生成公私钥：（一路回车默认即可）",[15,122870,122872],{"className":120887,"code":122871,"language":120889,"meta":120890,"style":20},"ssh-keygen\n",[22,122873,122874],{"__ignoreMap":20},[25,122875,122876],{"class":27,"line":28},[25,122877,122871],{},[99,122879,122880],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[194,122882,122883,122886],{},[106,122884,122885],{},"id_rsa （私钥）；",[106,122887,122888],{},"id_rsa.pub (公钥)。",[99,122890,122891],{},[392,122892,122893],{},"2.公钥上传",[99,122895,122896],{},"上传指令如下：",[15,122898,122900],{"className":120887,"code":122899,"language":120889,"meta":120890,"style":20},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[22,122901,122902],{"__ignoreMap":20},[25,122903,122904],{"class":27,"line":28},[25,122905,122899],{},[99,122907,122908],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[99,122910,122911],{},"以后再远程登录就无需录入密码了。",[210,122913,122915],{"id":122914},"_723-使用vscode优化","7.2.3 使用VScode优化",[99,122917,122918],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[99,122920,122921],{},[392,122922,122923],{},"1.准备工作",[99,122925,122926],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[99,122928,122929],{},[392,122930,122931],{},"2.为VScode安装远程开发插件",[99,122933,122934,122935,122938,122939,122942,122943,28456],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[22,122936,122937],{},"扩展：商店","的搜索栏输入",[22,122940,122941],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[22,122944,122945],{},"安装",[99,122947,122948],{},[155,122949],{"alt":20,"src":122950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[99,122952,122953],{},[392,122954,122955],{},"3.配置远程连接",[99,122957,122958,122959,122962,122963,122966],{},"步骤1：使用快捷键",[22,122960,122961],{},"ctrl + shift + p","打开命令输入窗口，并输入",[22,122964,122965],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[99,122968,122969],{},[155,122970],{"alt":20,"src":122971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[99,122973,122974,122975,28456],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[22,122976,122977],{},"Add New SSH Host",[99,122979,122980],{},[155,122981],{"alt":20,"src":122982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[99,122984,122985,122986,122989,122990,122993,122994,122997],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[22,122987,122988],{},"ssh +X ubuntu@192.168.43.164","，其中，",[22,122991,122992],{},"ubuntu","需要替换为你的登录用户名，",[22,122995,122996],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[99,122999,123000],{},[155,123001],{"alt":20,"src":123002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[99,123004,123005],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[99,123007,123008],{},[155,123009],{"alt":20,"src":123010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[99,123012,123013],{},[155,123014],{"alt":20,"src":123015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[99,123017,123018],{},[392,123019,123020],{},"4.使用",[99,123022,123023,123024,122962,123026,123028],{},"步骤1：继续使用快捷键",[22,123025,122961],{},[22,123027,122965],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[99,123030,123031],{},[155,123032],{"alt":20,"src":123033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[99,123035,123036,123037,123040],{},"或者，也可以点击侧边栏的",[22,123038,123039],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[99,123042,123043],{},[155,123044],{"alt":20,"src":123045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[99,123047,123048,123049,123052,123053,123056],{},"步骤2：选择菜单栏的",[22,123050,123051],{},"文件","下的",[22,123054,123055],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[99,123058,123059],{},[155,123060],{"alt":20,"src":123061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[99,123063,123064],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[182,123066,123068],{"id":123067},"_73-远程桌面","7.3 远程桌面",[99,123070,123071],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[99,123073,123074],{},"我们选择使用VNC来看。",[194,123076,123077],{},[106,123078,123079],{},"安装VNC服务器：",[99,123081,123082],{},"这里以TigerVNC为例进行安装：",[15,123084,123086],{"className":117367,"code":123085,"language":117369,"meta":20,"style":20},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[22,123087,123088],{"__ignoreMap":20},[25,123089,123090,123092,123094,123096,123099],{"class":27,"line":28},[25,123091,24684],{"class":31},[25,123093,117388],{"class":45},[25,123095,23942],{"class":45},[25,123097,123098],{"class":45}," tigervnc-standalone-server",[25,123100,123101],{"class":45}," tigervnc-common\n",[194,123103,123104],{"start":39},[106,123105,123106],{},"设置VNC密码：",[99,123108,123109],{},"为VNC用户设置密码，运行以下命令：",[15,123111,123113],{"className":117367,"code":123112,"language":117369,"meta":20,"style":20},"vncpasswd\n",[22,123114,123115],{"__ignoreMap":20},[25,123116,123117],{"class":27,"line":28},[25,123118,123112],{"class":31},[194,123120,123121],{"start":51},[106,123122,123123],{},"配置VNC启动脚本:",[99,123125,123126],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[15,123128,123130],{"className":117367,"code":123129,"language":117369,"meta":20,"style":20},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[22,123131,123132,123141],{"__ignoreMap":20},[25,123133,123134,123136,123138],{"class":27,"line":28},[25,123135,101337],{"class":31},[25,123137,29287],{"class":35},[25,123139,123140],{"class":45}," ~\u002F.vnc\n",[25,123142,123143,123146],{"class":27,"line":39},[25,123144,123145],{"class":31},"nano",[25,123147,123148],{"class":45}," ~\u002F.vnc\u002Fxstartup\n",[99,123150,123151],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[15,123153,123155],{"className":117367,"code":123154,"language":117369,"meta":20,"style":20},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[22,123156,123157,123162,123170,123177],{"__ignoreMap":20},[25,123158,123159],{"class":27,"line":28},[25,123160,123161],{"class":302},"#!\u002Fbin\u002Fsh\n",[25,123163,123164,123167],{"class":27,"line":39},[25,123165,123166],{"class":35},"unset",[25,123168,123169],{"class":45}," SESSION_MANAGER\n",[25,123171,123172,123174],{"class":27,"line":51},[25,123173,123166],{"class":35},[25,123175,123176],{"class":45}," DBUS_SESSION_BUS_ADDRESS\n",[25,123178,123179],{"class":27,"line":59},[25,123180,123181],{"class":31},"gnome-session\n",[99,123183,123184],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[194,123186,123187],{"start":59},[106,123188,123189],{},"给予执行权限：",[99,123191,123192],{},"为xstartup文件设置执行权限：",[15,123194,123196],{"className":117367,"code":123195,"language":117369,"meta":20,"style":20},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[22,123197,123198],{"__ignoreMap":20},[25,123199,123200,123202,123205],{"class":27,"line":28},[25,123201,24719],{"class":31},[25,123203,123204],{"class":45}," +x",[25,123206,123148],{"class":45},[194,123208,123209],{"start":67},[106,123210,123211],{},"启动VNC服务器：",[15,123213,123215],{"className":117367,"code":123214,"language":117369,"meta":20,"style":20},"vncserver -geometry 1920x1080 -localhost=0\n",[22,123216,123217],{"__ignoreMap":20},[25,123218,123219,123222,123225,123228],{"class":27,"line":28},[25,123220,123221],{"class":31},"vncserver",[25,123223,123224],{"class":35}," -geometry",[25,123226,123227],{"class":45}," 1920x1080",[25,123229,123230],{"class":35}," -localhost=0\n",[99,123232,123233],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[99,123235,123236],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[194,123238,123239],{"start":75},[106,123240,123241],{},"查看已开启的VNC服务器：",[15,123243,123245],{"className":117367,"code":123244,"language":117369,"meta":20,"style":20},"vncserver -list\n",[22,123246,123247],{"__ignoreMap":20},[25,123248,123249,123251],{"class":27,"line":28},[25,123250,123221],{"class":31},[25,123252,123253],{"class":35}," -list\n",[99,123255,123256],{},[155,123257],{"alt":20,"src":123258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[194,123260,123261],{"start":83},[106,123262,123263],{},"连接到VNC服务器：",[99,123265,123266],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[194,123268,123269],{"start":91},[106,123270,123271],{},"停止VNC服务器：",[99,123273,123274],{},"如果需要停止VNC服务器，可以使用以下命令：",[15,123276,123278],{"className":117367,"code":123277,"language":117369,"meta":20,"style":20},"vncserver -kill :1\n",[22,123279,123280],{"__ignoreMap":20},[25,123281,123282,123284,123287],{"class":27,"line":28},[25,123283,123221],{"class":31},[25,123285,123286],{"class":35}," -kill",[25,123288,123289],{"class":45}," :1\n",[99,123291,123292],{},"将:1替换为你实际使用的显示编号。",[99,123294,123295],{},[155,123296],{"alt":20,"src":123297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[99,123299,123300],{},[155,123301],{"alt":20,"src":123302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[182,123304,123306],{"id":123305},"_74-usb端口设置","7.4 USB端口设置",[99,123308,123309],{},[392,123310,123311],{},"首先先配置好权限",[15,123313,123315],{"className":117367,"code":123314,"language":117369,"meta":20,"style":20},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[22,123316,123317,123322,123335,123342,123347],{"__ignoreMap":20},[25,123318,123319],{"class":27,"line":28},[25,123320,123321],{"class":302},"# 将用户权限提高\n",[25,123323,123324,123326,123328,123330,123333],{"class":27,"line":39},[25,123325,24684],{"class":31},[25,123327,26645],{"class":45},[25,123329,26648],{"class":35},[25,123331,123332],{"class":45}," dialout",[25,123334,26653],{"class":244},[25,123336,123337,123339],{"class":27,"line":51},[25,123338,26672],{"class":31},[25,123340,123341],{"class":45}," dialout\n",[25,123343,123344],{"class":27,"line":59},[25,123345,123346],{"class":302},"# 查看下面命令是否输出dialout（若输出才正常）\n",[25,123348,123349],{"class":27,"line":67},[25,123350,123351],{"class":31},"groups\n",[99,123353,123354],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[210,123356,123358],{"id":123357},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[99,123360,123361,123364],{},[392,123362,123363],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[99,123366,123367,123370],{},[392,123368,123369],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[99,123372,123373],{},[392,123374,123375],{},"流程如下：",[99,123377,123378],{},"（1）.查找设备idVendor和idProduct",[99,123380,123381,123382,123385],{},"接入两个USB设备，在终端调用指令",[22,123383,123384],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[99,123387,123388],{},[155,123389],{"alt":20,"src":123390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[99,123392,123393,123394,123397],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[22,123395,123396],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[99,123399,123400],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[99,123402,123403],{},"（2）.编写映射规则",[99,123405,123406,123407,123410],{},"在",[22,123408,123409],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[15,123412,123414],{"className":117367,"code":123413,"language":117369,"meta":20,"style":20},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[22,123415,123416],{"__ignoreMap":20},[25,123417,123418,123420,123422],{"class":27,"line":28},[25,123419,24684],{"class":31},[25,123421,118654],{"class":45},[25,123423,123424],{"class":45}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[99,123426,123427],{},"输入如下内容：",[15,123429,123431],{"className":117367,"code":123430,"language":117369,"meta":20,"style":20},"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",[22,123432,123433,123463],{"__ignoreMap":20},[25,123434,123435,123438,123440,123443,123446,123449,123452,123454,123457,123460],{"class":27,"line":28},[25,123436,123437],{"class":244},"KERNEL",[25,123439,290],{"class":240},[25,123441,123442],{"class":45},"=\"ttyUSB*\",",[25,123444,123445],{"class":31}," ATTRS",[25,123447,123448],{"class":45},"{idVendor}==",[25,123450,123451],{"class":31},"\"10c4\"",[25,123453,621],{"class":31},[25,123455,123456],{"class":45}," ATTRS{idProduct}==\"ea60\",",[25,123458,123459],{"class":45}," MODE:=\"0777\",",[25,123461,123462],{"class":45}," SYMLINK+=\"mylidar\"\n",[25,123464,123465,123467,123469,123471,123473,123475,123478,123480,123483,123485],{"class":27,"line":39},[25,123466,123437],{"class":244},[25,123468,290],{"class":240},[25,123470,123442],{"class":45},[25,123472,123445],{"class":31},[25,123474,123448],{"class":45},[25,123476,123477],{"class":31},"\"1a86\"",[25,123479,621],{"class":31},[25,123481,123482],{"class":45}," ATTRS{idProduct}==\"7523\",",[25,123484,123459],{"class":45},[25,123486,123487],{"class":45}," SYMLINK+=\"mycar\"\n",[99,123489,123490],{},"代码解释：",[103,123492,123493,123496,123499,123502],{},[106,123494,123495],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[106,123497,123498],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[106,123500,123501],{},"SYMLINK是符号连接，即绑定的别名；",[106,123503,123504],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[99,123506,123507,123508,123511,123514],{},"***小提示：***",[23663,123509,123510],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[22,123512,123513],{},"\u002Fetc\u002Fudev\u002Frule.d",[23663,123515,123516],{},"目录即可。",[99,123518,123519],{},"表格 还在加载中，请等待加载完成后再尝试复制",[99,123521,123522],{},"（3）.使规则生效",[99,123524,123525],{},"在终端下输入如下指令：",[15,123527,123529],{"className":117367,"code":123528,"language":117369,"meta":20,"style":20},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[22,123530,123531,123536,123548,123559,123563,123568,123581],{"__ignoreMap":20},[25,123532,123533],{"class":27,"line":28},[25,123534,123535],{"class":302},"# Ubuntu用下方命令\n",[25,123537,123538,123540,123542,123545],{"class":27,"line":39},[25,123539,24684],{"class":31},[25,123541,120119],{"class":45},[25,123543,123544],{"class":45}," udev",[25,123546,123547],{"class":45}," reload\n",[25,123549,123550,123552,123554,123556],{"class":27,"line":51},[25,123551,24684],{"class":31},[25,123553,120119],{"class":45},[25,123555,123544],{"class":45},[25,123557,123558],{"class":45}," restart\n",[25,123560,123561],{"class":27,"line":59},[25,123562,2510],{"emptyLinePlaceholder":167},[25,123564,123565],{"class":27,"line":67},[25,123566,123567],{"class":302},"#Fedora用下方命令\n",[25,123569,123570,123572,123575,123578],{"class":27,"line":75},[25,123571,24684],{"class":31},[25,123573,123574],{"class":45}," udevadm",[25,123576,123577],{"class":45}," control",[25,123579,123580],{"class":35}," --reload\n",[25,123582,123583,123585,123587],{"class":27,"line":83},[25,123584,24684],{"class":31},[25,123586,123574],{"class":45},[25,123588,123589],{"class":45}," trigger\n",[99,123591,123592],{},"再重新插拔设备即可。",[99,123594,123595],{},"（4）.测试",[99,123597,123598],{},"终端下输入如下指令",[15,123600,123602],{"className":117367,"code":123601,"language":117369,"meta":20,"style":20},"ll \u002Fdev | grep ttyUSB\n",[22,123603,123604],{"__ignoreMap":20},[25,123605,123606,123609,123612,123614,123616],{"class":27,"line":28},[25,123607,123608],{"class":31},"ll",[25,123610,123611],{"class":45}," \u002Fdev",[25,123613,25216],{"class":240},[25,123615,30307],{"class":31},[25,123617,123618],{"class":45}," ttyUSB\n",[99,123620,123621],{},"运行结果如下：",[99,123623,123624],{},[155,123625],{"alt":20,"src":123626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[99,123628,123629,123630,123633],{},"也可以多次插拔USB设备，会发现设备端口",[22,123631,123632],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[99,123635,123636],{},[392,123637,118035],{},[99,123639,123640],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[210,123642,123644],{"id":123643},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[99,123646,123647,123649],{},[392,123648,123363],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[99,123651,123652,123654],{},[392,123653,123369],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[99,123656,123657],{},[392,123658,123375],{},[99,123660,123661],{},"（1）.查看所连接的主机USB接口的KERNELS",[99,123663,123664],{},"调用如下指令查看第一台雷达的USB信息：",[15,123666,123668],{"className":117367,"code":123667,"language":117369,"meta":20,"style":20},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[22,123669,123670,123690],{"__ignoreMap":20},[25,123671,123672,123675,123677,123680,123683,123685,123687],{"class":27,"line":28},[25,123673,123674],{"class":31},"udevadm",[25,123676,69892],{"class":45},[25,123678,123679],{"class":35}," --attribute-walk",[25,123681,123682],{"class":35}," --name=\u002Fdev\u002FttyUSB0",[25,123684,25216],{"class":240},[25,123686,30307],{"class":31},[25,123688,123689],{"class":45}," KERNELS\n",[25,123691,123692,123694,123696,123698,123701,123703,123705],{"class":27,"line":39},[25,123693,123674],{"class":31},[25,123695,69892],{"class":45},[25,123697,123679],{"class":35},[25,123699,123700],{"class":35}," --name=\u002Fdev\u002FttyACM0",[25,123702,25216],{"class":240},[25,123704,30307],{"class":31},[25,123706,123689],{"class":45},[99,123708,123709],{},[155,123710],{"alt":20,"src":123711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[99,123713,123714],{},"调用如下指令查看第二台雷达的USB信息：",[15,123716,123718],{"className":117367,"code":123717,"language":117369,"meta":20,"style":20},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[22,123719,123720],{"__ignoreMap":20},[25,123721,123722,123724,123726,123728,123731,123733,123735],{"class":27,"line":28},[25,123723,123674],{"class":31},[25,123725,69892],{"class":45},[25,123727,123679],{"class":35},[25,123729,123730],{"class":35}," --name=\u002Fdev\u002FttyUSB1",[25,123732,25216],{"class":240},[25,123734,30307],{"class":31},[25,123736,123689],{"class":45},[99,123738,123739,123740,123743,123744,123747,123748,123751],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[22,123741,123742],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[22,123745,123746],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[392,123749,123750],{},"唯一性标识","”。",[99,123753,123403],{},[99,123755,123406,123756,123758],{},[22,123757,123409],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[15,123760,123761],{"className":117367,"code":123413,"language":117369,"meta":20,"style":20},[22,123762,123763],{"__ignoreMap":20},[25,123764,123765,123767,123769],{"class":27,"line":28},[25,123766,24684],{"class":31},[25,123768,118654],{"class":45},[25,123770,123424],{"class":45},[15,123772,123774],{"className":117367,"code":123773,"language":117369,"meta":20,"style":20},"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",[22,123775,123776,123805],{"__ignoreMap":20},[25,123777,123778,123780,123782,123784,123787,123789,123792,123795,123797,123800,123802],{"class":27,"line":28},[25,123779,123437],{"class":244},[25,123781,290],{"class":240},[25,123783,123442],{"class":45},[25,123785,123786],{"class":244}," KERNELS",[25,123788,290],{"class":240},[25,123790,123791],{"class":45},"=\"1-1.3:1.0\",",[25,123793,123794],{"class":31}," MODE:",[25,123796,290],{"class":45},[25,123798,123799],{"class":31},"\"0777\"",[25,123801,621],{"class":31},[25,123803,123804],{"class":45}," SYMLINK+=\"rplidar_front\"\n",[25,123806,123807,123809,123811,123813,123815,123817,123820,123822,123824,123826,123828],{"class":27,"line":39},[25,123808,123437],{"class":244},[25,123810,290],{"class":240},[25,123812,123442],{"class":45},[25,123814,123786],{"class":244},[25,123816,290],{"class":240},[25,123818,123819],{"class":45},"=\"1-1.4:1.0\",",[25,123821,123794],{"class":31},[25,123823,290],{"class":45},[25,123825,123799],{"class":31},[25,123827,621],{"class":31},[25,123829,123830],{"class":45}," SYMLINK+=\"rplidar_back\"\n",[99,123832,123522],{},[99,123834,123525],{},[15,123836,123837],{"className":117367,"code":123528,"language":117369,"meta":20,"style":20},[22,123838,123839,123843,123853,123863,123867,123871,123881],{"__ignoreMap":20},[25,123840,123841],{"class":27,"line":28},[25,123842,123535],{"class":302},[25,123844,123845,123847,123849,123851],{"class":27,"line":39},[25,123846,24684],{"class":31},[25,123848,120119],{"class":45},[25,123850,123544],{"class":45},[25,123852,123547],{"class":45},[25,123854,123855,123857,123859,123861],{"class":27,"line":51},[25,123856,24684],{"class":31},[25,123858,120119],{"class":45},[25,123860,123544],{"class":45},[25,123862,123558],{"class":45},[25,123864,123865],{"class":27,"line":59},[25,123866,2510],{"emptyLinePlaceholder":167},[25,123868,123869],{"class":27,"line":67},[25,123870,123567],{"class":302},[25,123872,123873,123875,123877,123879],{"class":27,"line":75},[25,123874,24684],{"class":31},[25,123876,123574],{"class":45},[25,123878,123577],{"class":45},[25,123880,123580],{"class":35},[25,123882,123883,123885,123887],{"class":27,"line":83},[25,123884,24684],{"class":31},[25,123886,123574],{"class":45},[25,123888,123589],{"class":45},[99,123890,123592],{},[99,123892,123595],{},[99,123894,123598,123895,123898],{},[22,123896,123897],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[99,123900,123901],{},[155,123902],{"alt":20,"src":123903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[99,123905,123906],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[99,123908,123909,123911],{},[392,123910,118035],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[210,123913,123915],{"id":123914},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[99,123917,123918],{},"（1）.查看所连接的主机USB接口的信息",[15,123920,123922],{"className":117367,"code":123921,"language":117369,"meta":20,"style":20},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[22,123923,123924,123954],{"__ignoreMap":20},[25,123925,123926,123928,123930,123933,123935,123937,123939,123941,123944,123947,123949,123952],{"class":27,"line":28},[25,123927,123674],{"class":31},[25,123929,69892],{"class":45},[25,123931,123932],{"class":35}," -a",[25,123934,29287],{"class":35},[25,123936,28493],{"class":244},[25,123938,123674],{"class":31},[25,123940,69892],{"class":45},[25,123942,123943],{"class":35}," -q",[25,123945,123946],{"class":45}," path",[25,123948,25222],{"class":35},[25,123950,123951],{"class":45}," \u002Fdev\u002FttyACM0",[25,123953,251],{"class":244},[25,123955,123956,123958,123960,123962,123964,123966,123968,123970,123972,123974,123976,123979],{"class":27,"line":39},[25,123957,123674],{"class":31},[25,123959,69892],{"class":45},[25,123961,123932],{"class":35},[25,123963,29287],{"class":35},[25,123965,28493],{"class":244},[25,123967,123674],{"class":31},[25,123969,69892],{"class":45},[25,123971,123943],{"class":35},[25,123973,123946],{"class":45},[25,123975,25222],{"class":35},[25,123977,123978],{"class":45}," \u002Fdev\u002FttyUSB0",[25,123980,251],{"class":244},[99,123982,123983],{},[155,123984],{"alt":20,"src":123985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[99,123987,123988],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[99,123990,123403],{},[99,123992,123406,123993,123758],{},[22,123994,123409],{},[15,123996,123997],{"className":117367,"code":123413,"language":117369,"meta":20,"style":20},[22,123998,123999],{"__ignoreMap":20},[25,124000,124001,124003,124005],{"class":27,"line":28},[25,124002,24684],{"class":31},[25,124004,118654],{"class":45},[25,124006,123424],{"class":45},[15,124008,124010],{"className":117367,"code":124009,"language":117369,"meta":20,"style":20},"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",[22,124011,124012,124040,124066],{"__ignoreMap":20},[25,124013,124014,124016,124018,124021,124023,124025,124027,124029,124032,124035,124037],{"class":27,"line":28},[25,124015,123437],{"class":244},[25,124017,290],{"class":240},[25,124019,124020],{"class":45},"=\"ttyACM*\",",[25,124022,123445],{"class":31},[25,124024,123448],{"class":45},[25,124026,123477],{"class":31},[25,124028,621],{"class":31},[25,124030,124031],{"class":45}," ATTRS{idProduct}==\"55d4\",",[25,124033,124034],{"class":45}," ATTRS{serial}==\"0001\",",[25,124036,123459],{"class":45},[25,124038,124039],{"class":45}," SYMLINK+=\"ttyACM_MCU\"\n",[25,124041,124042,124044,124046,124048,124050,124052,124054,124056,124058,124061,124063],{"class":27,"line":39},[25,124043,123437],{"class":244},[25,124045,290],{"class":240},[25,124047,124020],{"class":45},[25,124049,123445],{"class":31},[25,124051,123448],{"class":45},[25,124053,123477],{"class":31},[25,124055,621],{"class":31},[25,124057,124031],{"class":45},[25,124059,124060],{"class":45}," ATTRS{serial}==\"0002\",",[25,124062,123459],{"class":45},[25,124064,124065],{"class":45}," SYMLINK+=\"ttyACM_Lidar\"\n",[25,124067,124068,124070,124072,124074,124076,124078,124080,124082,124084,124086],{"class":27,"line":51},[25,124069,123437],{"class":244},[25,124071,290],{"class":240},[25,124073,123442],{"class":45},[25,124075,123445],{"class":31},[25,124077,123448],{"class":45},[25,124079,123477],{"class":31},[25,124081,621],{"class":31},[25,124083,123482],{"class":45},[25,124085,123459],{"class":45},[25,124087,124088],{"class":45}," SYMLINK+=\"ttyUSB_IMU\"\n",[99,124090,123522],{},[99,124092,123525],{},[15,124094,124095],{"className":117367,"code":123528,"language":117369,"meta":20,"style":20},[22,124096,124097,124101,124111,124121,124125,124129,124139],{"__ignoreMap":20},[25,124098,124099],{"class":27,"line":28},[25,124100,123535],{"class":302},[25,124102,124103,124105,124107,124109],{"class":27,"line":39},[25,124104,24684],{"class":31},[25,124106,120119],{"class":45},[25,124108,123544],{"class":45},[25,124110,123547],{"class":45},[25,124112,124113,124115,124117,124119],{"class":27,"line":51},[25,124114,24684],{"class":31},[25,124116,120119],{"class":45},[25,124118,123544],{"class":45},[25,124120,123558],{"class":45},[25,124122,124123],{"class":27,"line":59},[25,124124,2510],{"emptyLinePlaceholder":167},[25,124126,124127],{"class":27,"line":67},[25,124128,123567],{"class":302},[25,124130,124131,124133,124135,124137],{"class":27,"line":75},[25,124132,24684],{"class":31},[25,124134,123574],{"class":45},[25,124136,123577],{"class":45},[25,124138,123580],{"class":35},[25,124140,124141,124143,124145],{"class":27,"line":83},[25,124142,24684],{"class":31},[25,124144,123574],{"class":45},[25,124146,123589],{"class":45},[99,124148,124149,124150],{},"再重新插拔设备即可，或者 ",[392,124151,124152],{},"直接重启系统。",[99,124154,123595],{},[99,124156,123598,124157,123898],{},[22,124158,123897],{},[99,124160,124161],{},[155,124162],{"alt":20,"src":124163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[99,124165,123906],{},[99,124167,124168,124170],{},[392,124169,118035],{}," 一些设备可能没有串口号等。",[210,124172,124174],{"id":124173},"_744-其他注意事项","7.4.4 其他注意事项",[99,124176,124177,124178,124180,124181,124184,124185,18520,124188,124191,124192,124194],{},"并非所有的USB设备端口号都是",[22,124179,123632],{},"的格式，比如Arduino的端口号可能是",[22,124182,124183],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[22,124186,124187],{},"videon",[22,124189,124190],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[22,124193,124187],{},"端口，绑定时需要关联的也是该接口。",[99,124196,124197,124198,124201,124202,124205,124206,124208,124209,124212,124213,124216,124217,124220,124221,124220,124224,124220,124227,28456],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[22,124199,124200],{},"KERNEL==\"ttyUSB*\"","修改为",[22,124203,124204],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[22,124207,124200],{},"修改为类似于",[22,124210,124211],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[22,124214,124215],{},"video[0,2,4,6]","表示可以绑定的端口为",[22,124218,124219],{},"video0","或",[22,124222,124223],{},"video2",[22,124225,124226],{},"video4",[22,124228,124229],{},"video6",[182,124231,124233],{"id":124232},"_75-挂载内网网页","7.5 挂载内网网页",[99,124235,124236],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[99,124238,124239],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[99,124241,124242],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[99,124244,124245,124246],{},"Termux 下载地址（F-Droid）：",[481,124247,124248],{"href":124248,"rel":124249},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23973],[99,124251,124252],{},"首先打开app后，先更新软件缓存：",[15,124254,124256],{"className":117367,"code":124255,"language":117369,"meta":20,"style":20},"pkg update\n",[22,124257,124258],{"__ignoreMap":20},[25,124259,124260,124263],{"class":27,"line":28},[25,124261,124262],{"class":31},"pkg",[25,124264,26313],{"class":45},[99,124266,124267],{},"然后换源",[15,124269,124271],{"className":117367,"code":124270,"language":117369,"meta":20,"style":20},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[22,124272,124273],{"__ignoreMap":20},[25,124274,124275,124277,124280],{"class":27,"line":28},[25,124276,123145],{"class":31},[25,124278,124279],{"class":244}," $PREFIX",[25,124281,124282],{"class":45},"\u002Fetc\u002Fapt\u002Fsources.list\n",[99,124284,124285],{},"将该文件内容替换为下面：",[15,124287,124289],{"className":117367,"code":124288,"language":117369,"meta":20,"style":20},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[22,124290,124291],{"__ignoreMap":20},[25,124292,124293,124296,124299,124302],{"class":27,"line":28},[25,124294,124295],{"class":31},"deb",[25,124297,124298],{"class":45}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[25,124300,124301],{"class":45}," stable",[25,124303,124304],{"class":45}," main\n",[103,124306,124307,124334],{},[106,124308,124309,124310,124312,124313],{},"如果你使用的是",[22,124311,123145],{},"编辑器：",[103,124314,124315,124322,124328],{},[106,124316,124317,124318,124321],{},"按 ",[22,124319,124320],{},"Ctrl+O"," 保存文件。",[106,124323,124317,124324,124327],{},[22,124325,124326],{},"Enter"," 确认文件名。",[106,124329,124317,124330,124333],{},[22,124331,124332],{},"Ctrl+X"," 退出编辑器。",[106,124335,124309,124336,124312,124339],{},[22,124337,124338],{},"vim",[103,124340,124341,124347],{},[106,124342,124317,124343,124346],{},[22,124344,124345],{},"Esc"," 退出编辑模式。",[106,124348,124349,124350,124352],{},"输入 ",[22,124351,119292],{}," 保存并退出。",[99,124354,124355],{},"接下来重新更新软件源：",[15,124357,124359],{"className":117367,"code":124358,"language":117369,"meta":20,"style":20},"pkg update && pkg upgrade\n",[22,124360,124361],{"__ignoreMap":20},[25,124362,124363,124365,124367,124369,124371],{"class":27,"line":28},[25,124364,124262],{"class":31},[25,124366,117418],{"class":45},[25,124368,26261],{"class":244},[25,124370,124262],{"class":31},[25,124372,117404],{"class":45},[99,124374,124375],{},"安装python：",[15,124377,124379],{"className":117367,"code":124378,"language":117369,"meta":20,"style":20},"pkg install python\n",[22,124380,124381],{"__ignoreMap":20},[25,124382,124383,124385,124387],{"class":27,"line":28},[25,124384,124262],{"class":31},[25,124386,23942],{"class":45},[25,124388,124389],{"class":45}," python\n",[99,124391,124392,26544],{},[392,124393,124394],{},"通过Termux访问设备存储",[99,124396,124397],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[15,124399,124401],{"className":117367,"code":124400,"language":117369,"meta":20,"style":20},"termux-setup-storage\n",[22,124402,124403],{"__ignoreMap":20},[25,124404,124405],{"class":27,"line":28},[25,124406,124400],{"class":31},[194,124408,124409],{},[106,124410,124411,26544,124414],{},[392,124412,124413],{},"进入HTML文件所在的目录",[194,124415,124416],{},[106,124417,124418,124419,124421],{},"使用",[22,124420,101347],{},"命令进入HTML文件所在的目录：",[15,124423,124425],{"className":117367,"code":124424,"language":117369,"meta":20,"style":20},"cd ~\u002Fyour_html_folder\n",[22,124426,124427],{"__ignoreMap":20},[25,124428,124429,124431],{"class":27,"line":28},[25,124430,101347],{"class":35},[25,124432,124433],{"class":45}," ~\u002Fyour_html_folder\n",[194,124435,124436],{"start":39},[106,124437,124438,26544,124441,124446,124463],{},[392,124439,124440],{},"启动Python HTTP服务器",[194,124442,124443],{},[106,124444,124445],{},"运行以下命令启动一个简单的HTTP服务器：",[15,124447,124449],{"className":117367,"code":124448,"language":117369,"meta":20,"style":20},"python -m http.server 8000\n",[22,124450,124451],{"__ignoreMap":20},[25,124452,124453,124455,124457,124460],{"class":27,"line":28},[25,124454,30451],{"class":31},[25,124456,100953],{"class":35},[25,124458,124459],{"class":45}," http.server",[25,124461,124462],{"class":35}," 8000\n",[194,124464,124465],{"start":51},[106,124466,124467,124468,124471],{},"这会在端口",[22,124469,124470],{},"8000","上启动一个Web服务器。",[103,124473,124474],{},[106,124475,124476],{},"启动服务器后，Termux会显示日志信息，例如：",[15,124478,124480],{"className":120887,"code":124479,"language":120889,"meta":120890,"style":20},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[22,124481,124482],{"__ignoreMap":20},[25,124483,124484],{"class":27,"line":28},[25,124485,124479],{},[103,124487,124488],{},[106,124489,124490],{},"这表示服务器已成功启动。",[99,124492,124493],{},[392,124494,124495],{},"在浏览器中访问HTML文件",[194,124497,124498],{},[106,124499,124500,26544,124503,124508],{},[392,124501,124502],{},"在同一设备上访问",[194,124504,124505],{},[106,124506,124507],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[15,124509,124512],{"className":124510,"code":124511,"language":71735,"meta":20,"style":20},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[22,124513,124514],{"__ignoreMap":20},[25,124515,124516,124519],{"class":27,"line":28},[25,124517,124518],{"class":244},"http:",[25,124520,124521],{"class":302},"\u002F\u002Flocalhost:8000\n",[103,124523,124524],{},[106,124525,124526,124527,124530],{},"如果HTML文件中有",[22,124528,124529],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[182,124532,124534],{"id":124533},"_76-linux重点知识","7.6 Linux重点知识",[210,124536,124538],{"id":124537},"_761-关于点的说明","7.6.1 关于点的说明",[99,124540,124541],{},[155,124542],{"alt":20,"src":124543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[99,124545,124546],{},"一点本目录，两点上目录",[210,124548,124550],{"id":124549},"_762-目录","7.6.2 目录",[22108,124552,124554],{"id":124553},"_7621-系统启动必须","7.6.2.1 系统启动必须",[99,124556,124557],{},[392,124558,124559],{},"\u002Fboot:",[99,124561,124562],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[99,124564,124565],{},[392,124566,124567],{},"\u002Fetc:",[99,124569,124570],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[99,124572,124573],{},[392,124574,124575],{},"\u002Flib：",[99,124577,124578],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[99,124580,124581],{},[392,124582,124583],{},"\u002Fsys:",[99,124585,124586],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22108,124588,124590],{"id":124589},"_7622-指令集合","7.6.2.2 指令集合",[99,124592,124593],{},[392,124594,124595],{},"\u002Fbin:",[99,124597,124598],{},"为二进制文件的缩写，存放最经常使用的命令",[99,124600,124601],{},[392,124602,124603],{},"\u002Fsbin:",[99,124605,124606],{},"只有系统管理员才能使用的程序和指令",[22108,124608,124610],{"id":124609},"_7623-外部文件管理","7.6.2.3 外部文件管理",[99,124612,124613],{},[392,124614,124615],{},"\u002Fdev:",[99,124617,124618],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[99,124620,124621],{},[392,124622,124623],{},"\u002Fmedia:",[99,124625,124626],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[99,124628,124629],{},[392,124630,124631],{},"\u002Fmnt:",[99,124633,124634],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22108,124636,124638],{"id":124637},"_7624-临时文件","7.6.2.4 临时文件",[99,124640,124641],{},[392,124642,124643],{},"\u002Frun:",[99,124645,124646],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[99,124648,124649],{},[392,124650,124651],{},"\u002Flost+found:",[99,124653,124654],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[99,124656,124657],{},[392,124658,124659],{},"\u002Ftmp:",[99,124661,124662],{},"这个目录是用来存放一些临时文件的",[22108,124664,124666],{"id":124665},"_7625-账户","7.6.2.5 账户",[99,124668,124669],{},[392,124670,124671],{},"\u002Froot：",[99,124673,124674],{},"系统管理员的用户主目录",[99,124676,124677,26544],{},[392,124678,124679],{},"\u002Fhome",[99,124681,124682],{},"用户的主目录，以用户的账号命名的",[99,124684,124685,26544],{},[392,124686,124687],{},"\u002Fusr",[99,124689,124690],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[99,124692,124693],{},[392,124694,124695],{},"\u002Fusr\u002Fbin：",[99,124697,124698],{},"系统用户使用的应用程序与指令",[99,124700,124701],{},[392,124702,124703],{},"\u002Fusr\u002Fsbin：",[99,124705,124706],{},"超级用户使用的比较高级的管理程序和系统守护程序",[99,124708,124709],{},[392,124710,124711],{},"\u002Fusr\u002Fsrc：",[99,124713,124714],{},"内核源代码默认的放置目录",[22108,124716,124718],{"id":124717},"_7626-运行过程要用","7.6.2.6 运行过程要用",[99,124720,124721],{},[392,124722,124723],{},"\u002Fvar：",[99,124725,124726],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[99,124728,124729],{},[392,124730,124731],{},"\u002Fproc:",[99,124733,124734,124735,124738],{},"管理 ",[392,124736,124737],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22108,124740,124742],{"id":124741},"_7627-扩展用的","7.6.2.7 扩展用的",[99,124744,124745],{},[392,124746,124747],{},"\u002Fopt:",[99,124749,124750],{},"默认是空的，我们安装额外软件可以放在这个里面",[99,124752,124753],{},[392,124754,124755],{},"\u002Fsrv:",[99,124757,124758],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[210,124760,124762],{"id":124761},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[99,124764,124765],{},[155,124766],{"alt":20,"src":124767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[99,124769,124770],{},"windows-->linux:",[99,124772,124773],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[99,124775,124776],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[99,124778,124779],{},"linux传输文件到windows",[99,124781,124782],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[210,124784,124786],{"id":124785},"_764-易忘知识","7.6.4 易忘知识",[99,124788,124789],{},"操作系统内核查看",[15,124791,124792],{"className":117367,"code":121361,"language":117369,"meta":20,"style":20},[22,124793,124794],{"__ignoreMap":20},[25,124795,124796,124798],{"class":27,"line":28},[25,124797,70275],{"class":31},[25,124799,121370],{"class":35},[99,124801,124802],{},[155,124803],{"alt":20,"src":124804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[99,124806,124807],{},[155,124808],{"alt":20,"src":124809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[15,124811,124813],{"className":117367,"code":124812,"language":117369,"meta":20,"style":20},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[22,124814,124815,124827],{"__ignoreMap":20},[25,124816,124817,124819,124822,124825],{"class":27,"line":28},[25,124818,121578],{"class":31},[25,124820,124821],{"class":45}," mvtest",[25,124823,124824],{"class":45}," mvtest2",[25,124826,2784],{"class":244},[25,124828,124829],{"class":27,"line":39},[25,124830,124831],{"class":31},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[99,124833,124834],{},[155,124835],{"alt":20,"src":124836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[99,124838,124839],{},[155,124840],{"alt":20,"src":124841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[99,124843,124844,124845,124848],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[22,124846,124847],{},"du -a"," 可以快速查看磁盘使用细节。",[210,124850,124852],{"id":124851},"_765-vim","7.6.5 Vim",[99,124854,124855],{},[155,124856],{"alt":20,"src":124857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[99,124859,124860],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[99,124862,124863],{},"一开始进去为命令模式，此时点击输入的字母为命令",[99,124865,124866],{},[392,124867,124868],{},"1.命令模式：",[99,124870,124871],{},"i 切换到输入模式，在光标当前位置开始输入文本",[99,124873,124874],{},"x 删除当前光标所在处的字符",[99,124876,124877],{},"：切换到底线命令模式，以在最底一行输入命令",[99,124879,124880],{},"a 进行插入模式，在光标下一个位置输入文本",[99,124882,124883],{},"o 在当前的下方插入一个新行，并进入插入模式",[99,124885,124886],{},"0 在当前行的上方插入一个新行，并进入插入模式",[99,124888,124889],{},"dd 剪切当前行",[99,124891,124892],{},"yy 复制当前行",[99,124894,124895],{},"p 粘贴剪贴板内容到光标下方",[99,124897,124898],{},"P 粘贴剪贴板内容到光标上方",[99,124900,124901],{},"u 撤销上一次操作",[99,124903,124904],{},"ctrl+r 重做上一次操作",[99,124906,124907,124909],{},[1038,124908],{}," 保存文件",[99,124911,124912,124914],{},[888,124913],{}," 退出Vim编辑器",[99,124916,124917,124919],{},[888,124918],{},"! 强制退出Vim编辑器，不保存修改",[99,124921,124922],{},[392,124923,124924],{},"2.输入模式：",[99,124926,124927],{},[155,124928],{"alt":20,"src":124929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[99,124931,124932],{},[392,124933,124934],{},"3.底线命令模式：",[99,124936,124937],{},[155,124938],{"alt":20,"src":124939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[99,124941,124942],{},"按下esc可以退出底线命令模式",[210,124944,124946],{"id":124945},"_766-apt","7.6.6 apt",[99,124948,124949],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[210,124951,124953],{"id":124952},"_767-home与root的区别","7.6.7 home与root的区别",[99,124955,124956],{},[155,124957],{"alt":20,"src":124958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[99,124960,124961],{},[155,124962],{"alt":20,"src":124963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[99,124965,124966],{},[155,124967],{"alt":20,"src":124968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[99,124970,124971],{},[155,124972],{"alt":20,"src":124973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[210,124975,124977],{"id":124976},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[99,124979,124980],{},[481,124981,124982],{"href":124982,"rel":124983},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23973],[194,124985,124986,124989],{},[106,124987,124988],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[106,124990,124991],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[99,124993,124994],{},[155,124995],{"alt":20,"src":124996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[99,124998,124999],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[99,125001,125002],{},[155,125003],{"alt":20,"src":125004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[15,125006,125008],{"className":120887,"code":125007,"language":120889,"meta":120890,"style":20},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[22,125009,125010,125015],{"__ignoreMap":20},[25,125011,125012],{"class":27,"line":28},[25,125013,125014],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[25,125016,125017],{"class":27,"line":39},[25,125018,125019],{},".\u002Fpycharm.sh\n",[99,125021,125022],{},"3️⃣创建.desktop文件",[99,125024,125025],{},[392,125026,125027],{},"原理：",[103,125029,125030,125040],{},[106,125031,125032,125033,125039],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[392,125034,125035,125038],{},[22,125036,125037],{},".desktop"," 文件"," 来识别应用。",[106,125041,125042,125044,125045],{},[22,125043,125037],{}," 文件相当于一个“应用注册表”，告诉系统：",[103,125046,125047,125050,125053,125056,125059],{},[106,125048,125049],{},"应用名字（Name）",[106,125051,125052],{},"图标（Icon）",[106,125054,125055],{},"执行命令（Exec）",[106,125057,125058],{},"分类（Categories）",[106,125060,125061],{},"是否需要终端（Terminal）",[15,125063,125065],{"className":120887,"code":125064,"language":120889,"meta":120890,"style":20},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[22,125066,125067,125072],{"__ignoreMap":20},[25,125068,125069],{"class":27,"line":28},[25,125070,125071],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[25,125073,125074],{"class":27,"line":39},[25,125075,125076],{},"nano pycharm.desktop\n",[99,125078,125079],{},"nano是一个命令行下的编辑器，也可以使用vim",[15,125081,125083],{"className":120887,"code":125082,"language":120889,"meta":120890,"style":20},"[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",[22,125084,125085,125090,125095,125100,125105,125110,125115,125120,125125,125130],{"__ignoreMap":20},[25,125086,125087],{"class":27,"line":28},[25,125088,125089],{},"[Desktop Entry]\n",[25,125091,125092],{"class":27,"line":39},[25,125093,125094],{},"Version=1.0\n",[25,125096,125097],{"class":27,"line":51},[25,125098,125099],{},"Type=Application\n",[25,125101,125102],{"class":27,"line":59},[25,125103,125104],{},"Name=PyCharm\n",[25,125106,125107],{"class":27,"line":67},[25,125108,125109],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[25,125111,125112],{"class":27,"line":75},[25,125113,125114],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[25,125116,125117],{"class":27,"line":83},[25,125118,125119],{},"Comment=JetBrains PyCharm IDE\n",[25,125121,125122],{"class":27,"line":91},[25,125123,125124],{},"Categories=Development;IDE;\n",[25,125126,125127],{"class":27,"line":1429},[25,125128,125129],{},"Terminal=false\n",[25,125131,125132],{"class":27,"line":1441},[25,125133,125134],{},"StartupWMClass=jetbrains-pycharm\n",[103,125136,125137,125143,125149,125155],{},[106,125138,125139,125142],{},[22,125140,125141],{},"Exec"," → 点击图标时执行的命令",[106,125144,125145,125148],{},[22,125146,125147],{},"Icon"," → 显示在菜单和桌面上的图标",[106,125150,125151,125154],{},[22,125152,125153],{},"Terminal=false"," → 不打开终端",[106,125156,125157,125160],{},[22,125158,125159],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125162,125163,125164],"blockquote",{},[99,125165,125166,125167,125169,125170],{},"可以理解成 ",[22,125168,125037],{}," 文件是 Linux 的 ",[392,125171,125172],{},"快捷方式配置文件",[99,125174,125175],{},"4️⃣设置可执行权限",[15,125177,125179],{"className":120887,"code":125178,"language":120889,"meta":120890,"style":20},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[22,125180,125181],{"__ignoreMap":20},[25,125182,125183],{"class":27,"line":28},[25,125184,125178],{},[99,125186,125187],{},"5️⃣桌面图标启动的话如下：",[15,125189,125191],{"className":120887,"code":125190,"language":120889,"meta":120890,"style":20},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[22,125192,125193,125198],{"__ignoreMap":20},[25,125194,125195],{"class":27,"line":28},[25,125196,125197],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[25,125199,125200],{"class":27,"line":39},[25,125201,125202],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[194,125204,125205],{"start":51},[106,125206,125207],{},"下载Appimage文件实现软件的安装",[99,125209,125210],{},"1️⃣先下载appimage",[99,125212,125213],{},[481,125214,125215],{"href":125215,"rel":125216},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23973],[99,125218,125219],{},[155,125220],{"alt":20,"src":125221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[99,125223,125224],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[99,125226,125227],{},[155,125228],{"alt":20,"src":125229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[99,125231,125232],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[99,125234,125235],{},[155,125236],{"alt":20,"src":125237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[99,125239,125240],{},[155,125241],{"alt":20,"src":125242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[99,125244,125245,125246,125249],{},"3️⃣给他们放在",[22,125247,125248],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[99,125251,125252],{},"4️⃣给软件执行权限",[15,125254,125256],{"className":120887,"code":125255,"language":120889,"meta":120890,"style":20},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[22,125257,125258,125263],{"__ignoreMap":20},[25,125259,125260],{"class":27,"line":28},[25,125261,125262],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[25,125264,125265],{"class":27,"line":39},[25,125266,125267],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[99,125269,125270],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[15,125272,125274],{"className":117367,"code":125273,"language":117369,"meta":20,"style":20},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[22,125275,125276,125283,125290,125296],{"__ignoreMap":20},[25,125277,125278,125280],{"class":27,"line":28},[25,125279,101347],{"class":35},[25,125281,125282],{"class":45}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[25,125284,125285,125287],{"class":27,"line":39},[25,125286,101354],{"class":31},[25,125288,125289],{"class":45}," .\u002Fqqmusic.desktop\n",[25,125291,125292,125294],{"class":27,"line":51},[25,125293,124338],{"class":31},[25,125295,125289],{"class":45},[25,125297,125298,125300,125302,125304],{"class":27,"line":59},[25,125299,24684],{"class":31},[25,125301,24687],{"class":45},[25,125303,123204],{"class":45},[25,125305,125289],{"class":45},[99,125307,125308,125310],{},[22,125309,101354],{},"：一个 Linux 命令，主要功能是：",[103,125312,125313,125316],{},[106,125314,125315],{},"如果文件不存在，就创建一个新的空文件",[106,125317,125318],{},"如果文件已存在，就更新该文件的最后修改时间",[15,125320,125322],{"className":120887,"code":125321,"language":120889,"meta":120890,"style":20},"[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",[22,125323,125324,125328,125333,125338,125343,125347,125352],{"__ignoreMap":20},[25,125325,125326],{"class":27,"line":28},[25,125327,125089],{},[25,125329,125330],{"class":27,"line":39},[25,125331,125332],{},"Name=QQ音乐\n",[25,125334,125335],{"class":27,"line":51},[25,125336,125337],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[25,125339,125340],{"class":27,"line":59},[25,125341,125342],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[25,125344,125345],{"class":27,"line":67},[25,125346,125099],{},[25,125348,125349],{"class":27,"line":75},[25,125350,125351],{},"Categories=Audio;Music;Player;\n",[25,125353,125354],{"class":27,"line":83},[25,125355,125356],{},"Comment=QQ Music Client for Linux\n",[99,125358,125359],{},"将文件复制进去",[99,125361,125362],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[99,125364,125365],{},[155,125366],{"alt":20,"src":125367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[99,125369,125370],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[99,125372,125373],{},[155,125374],{"alt":20,"src":125375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[99,125377,125378,125379,125382,125383,125386],{},"如果你用的不是KDE，那么也可以直接修改",[22,125380,125381],{},"qqmuic.desktop","：在exec的末尾加上",[22,125384,125385],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[15,125388,125390],{"className":120887,"code":125389,"language":120889,"meta":120890,"style":20},"[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",[22,125391,125392,125396,125400,125405,125409,125413,125417],{"__ignoreMap":20},[25,125393,125394],{"class":27,"line":28},[25,125395,125089],{},[25,125397,125398],{"class":27,"line":39},[25,125399,125332],{},[25,125401,125402],{"class":27,"line":51},[25,125403,125404],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[25,125406,125407],{"class":27,"line":59},[25,125408,125342],{},[25,125410,125411],{"class":27,"line":67},[25,125412,125099],{},[25,125414,125415],{"class":27,"line":75},[25,125416,125351],{},[25,125418,125419],{"class":27,"line":83},[25,125420,125356],{},[99,125422,125423],{},[155,125424],{"alt":20,"src":125425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[99,125427,125428],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[15,125430,125432],{"className":120887,"code":125431,"language":120889,"meta":120890,"style":20},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[22,125433,125434],{"__ignoreMap":20},[25,125435,125436],{"class":27,"line":28},[25,125437,125431],{},[194,125439,125440],{"start":59},[106,125441,125442],{},"去Flathub上安装软件",[99,125444,125445],{},[481,125446,125447],{"href":125447,"rel":125448},"https:\u002F\u002Fflathub.org\u002F",[23973],[99,125450,125451],{},"1️⃣去上面的官网搜索软件+下载软件",[99,125453,125454],{},[155,125455],{"alt":20,"src":125456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[15,125458,125460],{"className":120887,"code":125459,"language":120889,"meta":120890,"style":20},"flatpak install flathub com.obsproject.Studio\n",[22,125461,125462],{"__ignoreMap":20},[25,125463,125464],{"class":27,"line":28},[25,125465,125459],{},[99,125467,125468],{},[155,125469],{"alt":20,"src":125470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[99,125472,125473],{},"2️⃣运行软件",[99,125475,125476],{},"a.官方方式：",[99,125478,125479],{},[155,125480],{"alt":20,"src":125481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[15,125483,125484],{"className":120887,"code":125459,"language":120889,"meta":120890,"style":20},[22,125485,125486],{"__ignoreMap":20},[25,125487,125488],{"class":27,"line":28},[25,125489,125459],{},[99,125491,125492],{},"b.当普通软件运行：",[99,125494,125495],{},[155,125496],{"alt":20,"src":125497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[99,125499,125500],{},[155,125501],{"alt":20,"src":125502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[159,125504,125505],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":20,"searchDepth":39,"depth":39,"links":125507},[125508,125509,125514,125515,125521,125522],{"id":122240,"depth":39,"text":122241},{"id":122582,"depth":39,"text":122583,"children":125510},[125511,125512,125513],{"id":122586,"depth":51,"text":122587},{"id":122653,"depth":51,"text":122654},{"id":122914,"depth":51,"text":122915},{"id":123067,"depth":39,"text":123068},{"id":123305,"depth":39,"text":123306,"children":125516},[125517,125518,125519,125520],{"id":123357,"depth":51,"text":123358},{"id":123643,"depth":51,"text":123644},{"id":123914,"depth":51,"text":123915},{"id":124173,"depth":51,"text":124174},{"id":124232,"depth":39,"text":124233},{"id":124533,"depth":39,"text":124534,"children":125523},[125524,125525,125526,125527,125528,125529,125530,125531],{"id":124537,"depth":51,"text":124538},{"id":124549,"depth":51,"text":124550},{"id":124761,"depth":51,"text":124762},{"id":124785,"depth":51,"text":124786},{"id":124851,"depth":51,"text":124852},{"id":124945,"depth":51,"text":124946},{"id":124952,"depth":51,"text":124953},{"id":124976,"depth":51,"text":124977},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122232,"description":164},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125538,"title":125539,"body":125540,"description":164,"extension":165,"meta":125544,"navigation":167,"path":125545,"seo":125546,"stem":125547,"__hash__":125548},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125541,"toc":125542},[],{"title":20,"searchDepth":39,"depth":39,"links":125543},[],{"category":30334},"\u002Fwiki\u002F2025-01-27-linux",{"title":125539,"description":164},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125550,"title":125551,"body":125552,"description":125556,"extension":165,"meta":125947,"navigation":167,"path":125948,"seo":125949,"stem":125950,"__hash__":125951},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125553,"toc":125945},[125554,125557,125561,125578,125581,125634,125638,125640,125680,125689,125693,125696,125937,125942],[99,125555,125556],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125558,125560],{"id":125559},"_1ubuntu环境配置","1.Ubuntu环境配置",[194,125562,125563,125566,125569,125572,125575],{},[106,125564,125565],{},"ubuntu环境换源",[106,125567,125568],{},"安装cuda",[106,125570,125571],{},"安装miniconda",[106,125573,125574],{},"安装pytorch",[106,125576,125577],{},"安装genesis",[99,125579,125580],{},"参考链接：",[15,125582,125584],{"className":17,"code":125583,"language":19,"meta":20,"style":20},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[22,125585,125586],{"__ignoreMap":20},[25,125587,125588,125591,125594,125597,125599,125602,125605,125607,125610,125613,125615,125618,125621,125623,125626,125629,125631],{"class":27,"line":28},[25,125589,125590],{"class":31},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[25,125592,125593],{"class":45},"=blogdetail",[25,125595,125596],{"class":244},"&sharetype",[25,125598,290],{"class":240},[25,125600,125601],{"class":45},"blogdetail",[25,125603,125604],{"class":244},"&sharerId",[25,125606,290],{"class":240},[25,125608,125609],{"class":45},"144728092",[25,125611,125612],{"class":244},"&sharerefer",[25,125614,290],{"class":240},[25,125616,125617],{"class":45},"PC",[25,125619,125620],{"class":244},"&sharesource",[25,125622,290],{"class":240},[25,125624,125625],{"class":45},"qq_69379513",[25,125627,125628],{"class":244},"&sharefrom",[25,125630,290],{"class":240},[25,125632,125633],{"class":45},"from_link\n",[10,125635,125637],{"id":125636},"_2genesis-报错issue","2.Genesis 报错issue",[99,125639,125580],{},[15,125641,125642],{"className":17,"code":125583,"language":19,"meta":20,"style":20},[22,125643,125644],{"__ignoreMap":20},[25,125645,125646,125648,125650,125652,125654,125656,125658,125660,125662,125664,125666,125668,125670,125672,125674,125676,125678],{"class":27,"line":28},[25,125647,125590],{"class":31},[25,125649,125593],{"class":45},[25,125651,125596],{"class":244},[25,125653,290],{"class":240},[25,125655,125601],{"class":45},[25,125657,125604],{"class":244},[25,125659,290],{"class":240},[25,125661,125609],{"class":45},[25,125663,125612],{"class":244},[25,125665,290],{"class":240},[25,125667,125617],{"class":45},[25,125669,125620],{"class":244},[25,125671,290],{"class":240},[25,125673,125625],{"class":45},[25,125675,125628],{"class":244},[25,125677,290],{"class":240},[25,125679,125633],{"class":45},[15,125681,125683],{"className":17,"code":125682,"language":19,"meta":20,"style":20},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[22,125684,125685],{"__ignoreMap":20},[25,125686,125687],{"class":27,"line":28},[25,125688,125682],{"class":31},[10,125690,125692],{"id":125691},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[99,125694,125695],{},"hello_robot.py",[15,125697,125699],{"className":30449,"code":125698,"language":30451,"meta":20,"style":20},"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",[22,125700,125701,125707,125722,125726,125738,125750,125754,125767,125771,125790,125800,125810,125824,125828,125832,125837,125841,125851,125858,125872,125879,125889,125894,125898,125916,125921,125925,125932],{"__ignoreMap":20},[25,125702,125703,125705],{"class":27,"line":28},[25,125704,30463],{"class":240},[25,125706,45376],{"class":244},[25,125708,125709,125712,125715,125717,125719],{"class":27,"line":39},[25,125710,125711],{"class":244},"os.environ[",[25,125713,125714],{"class":45},"'PYOPENGL_PLATFORM'",[25,125716,4553],{"class":244},[25,125718,290],{"class":240},[25,125720,125721],{"class":45}," 'glx'\n",[25,125723,125724],{"class":27,"line":51},[25,125725,2510],{"emptyLinePlaceholder":167},[25,125727,125728,125730,125733,125735],{"class":27,"line":59},[25,125729,30463],{"class":240},[25,125731,125732],{"class":244}," genesis ",[25,125734,31454],{"class":240},[25,125736,125737],{"class":244}," gs\n",[25,125739,125740,125742,125745,125747],{"class":27,"line":67},[25,125741,30808],{"class":240},[25,125743,125744],{"class":244}," pynput ",[25,125746,30463],{"class":240},[25,125748,125749],{"class":244}," keyboard\n",[25,125751,125752],{"class":27,"line":75},[25,125753,2510],{"emptyLinePlaceholder":167},[25,125755,125756,125759,125762,125764],{"class":27,"line":83},[25,125757,125758],{"class":244},"gs.init(",[25,125760,125761],{"class":5326},"backend",[25,125763,290],{"class":240},[25,125765,125766],{"class":244},"gs.gpu)\n",[25,125768,125769],{"class":27,"line":91},[25,125770,2510],{"emptyLinePlaceholder":167},[25,125772,125773,125776,125778,125781,125784,125786,125788],{"class":27,"line":1429},[25,125774,125775],{"class":244},"scene ",[25,125777,290],{"class":240},[25,125779,125780],{"class":244}," gs.Scene(",[25,125782,125783],{"class":5326},"show_viewer",[25,125785,290],{"class":240},[25,125787,31547],{"class":35},[25,125789,251],{"class":244},[25,125791,125792,125795,125797],{"class":27,"line":1441},[25,125793,125794],{"class":244},"plane ",[25,125796,290],{"class":240},[25,125798,125799],{"class":244}," scene.add_entity(gs.morphs.Plane())\n",[25,125801,125802,125805,125807],{"class":27,"line":1723},[25,125803,125804],{"class":244},"franka ",[25,125806,290],{"class":240},[25,125808,125809],{"class":244}," scene.add_entity(\n",[25,125811,125812,125815,125817,125819,125822],{"class":27,"line":1728},[25,125813,125814],{"class":244},"    gs.morphs.MJCF(",[25,125816,45425],{"class":5326},[25,125818,290],{"class":240},[25,125820,125821],{"class":45},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[25,125823,38118],{"class":244},[25,125825,125826],{"class":27,"line":1734},[25,125827,251],{"class":244},[25,125829,125830],{"class":27,"line":1739},[25,125831,2510],{"emptyLinePlaceholder":167},[25,125833,125834],{"class":27,"line":1753},[25,125835,125836],{"class":244},"scene.build()\n",[25,125838,125839],{"class":27,"line":1758},[25,125840,2510],{"emptyLinePlaceholder":167},[25,125842,125843,125845,125848],{"class":27,"line":1764},[25,125844,32018],{"class":240},[25,125846,125847],{"class":31}," on_press",[25,125849,125850],{"class":244},"(key):\n",[25,125852,125853,125856],{"class":27,"line":1785},[25,125854,125855],{"class":240},"    try",[25,125857,3849],{"class":244},[25,125859,125860,125862,125865,125867,125870],{"class":27,"line":1790},[25,125861,2607],{"class":240},[25,125863,125864],{"class":244}," key.char ",[25,125866,3059],{"class":240},[25,125868,125869],{"class":45}," 'q'",[25,125871,3849],{"class":244},[25,125873,125874,125876],{"class":27,"line":1804},[25,125875,15842],{"class":240},[25,125877,125878],{"class":35}," False\n",[25,125880,125881,125884,125887],{"class":27,"line":1809},[25,125882,125883],{"class":240},"    except",[25,125885,125886],{"class":35}," AttributeError",[25,125888,3849],{"class":244},[25,125890,125891],{"class":27,"line":1838},[25,125892,125893],{"class":240},"        pass\n",[25,125895,125896],{"class":27,"line":1843},[25,125897,2510],{"emptyLinePlaceholder":167},[25,125899,125900,125903,125905,125908,125911,125913],{"class":27,"line":1860},[25,125901,125902],{"class":244},"listener ",[25,125904,290],{"class":240},[25,125906,125907],{"class":244}," keyboard.Listener(",[25,125909,125910],{"class":5326},"on_press",[25,125912,290],{"class":240},[25,125914,125915],{"class":244},"on_press)\n",[25,125917,125918],{"class":27,"line":1865},[25,125919,125920],{"class":244},"listener.start()\n",[25,125922,125923],{"class":27,"line":1870},[25,125924,2510],{"emptyLinePlaceholder":167},[25,125926,125927,125929],{"class":27,"line":1875},[25,125928,108734],{"class":240},[25,125930,125931],{"class":244}," listener.running:\n",[25,125933,125934],{"class":27,"line":1889},[25,125935,125936],{"class":244},"    scene.step()\n",[99,125938,125939],{},[155,125940],{"alt":20,"src":125941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[159,125943,125944],{},"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":20,"searchDepth":39,"depth":39,"links":125946},[],{"category":23488},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125551,"description":125556},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125953,"title":125954,"body":125955,"description":164,"extension":165,"meta":125970,"navigation":167,"path":125971,"seo":125972,"stem":125973,"__hash__":125974},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125956,"toc":125967},[125957,125960,125964],[10,125958,125954],{"id":125959},"_1-基础知识",[182,125961,125963],{"id":125962},"_11-js的组成","1.1 js的组成",[99,125965,125966],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":20,"searchDepth":39,"depth":39,"links":125968},[125969],{"id":125962,"depth":39,"text":125963},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125954,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125976,"title":125977,"body":125978,"description":164,"extension":165,"meta":126117,"navigation":167,"path":126118,"seo":126119,"stem":126120,"__hash__":126121},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125979,"toc":126105},[125980,125983,125987,125990,125994,126004,126008,126011,126014,126017,126021,126028,126034,126038,126044,126055,126059,126062,126066,126069,126073,126076,126080,126083,126087,126090,126093,126096,126099,126102],[10,125981,125977],{"id":125982},"_2-vscode必备内容",[182,125984,125986],{"id":125985},"_21-标签分类","2.1 标签分类",[99,125988,125989],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[182,125991,125993],{"id":125992},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[99,125995,125996,125997,125999,126000,126003],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[22,125998,469],{}," 然后按 ",[22,126001,126002],{},"Tab","，快速自动生成基本结构。",[182,126005,126007],{"id":126006},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[99,126009,126010],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[99,126012,126013],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[99,126015,126016],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[182,126018,126020],{"id":126019},"_24-视图缩放","2.4 视图缩放",[99,126022,126023,126024,126027],{},"缩放视图 ",[22,126025,126026],{},"ctrl+"," 可实现代码增大。",[99,126029,126030,126033],{},[22,126031,126032],{},"ctrl-"," 可实现代码减小。",[182,126035,126037],{"id":126036},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[99,126039,126040,126041,28456],{},"VSCode 新建文件快捷键为 ",[22,126042,126043],{},"ctrl+N",[99,126045,126046,126047,126050,126051,126054],{},"保存快捷键为 ",[22,126048,126049],{},"ctrl+S","，将文本保存为 ",[22,126052,126053],{},".html"," 文件。",[182,126056,126058],{"id":126057},"_26-auto-rename-tag","2.6 Auto Rename Tag",[99,126060,126061],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[182,126063,126065],{"id":126064},"_27-vscode-icons","2.7 vscode-icons",[99,126067,126068],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[182,126070,126072],{"id":126071},"_28-easy-less","2.8 Easy LESS",[99,126074,126075],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[182,126077,126079],{"id":126078},"_29-会了吧插件","2.9 会了吧插件",[99,126081,126082],{},"会了吧插件可以展示代码中英语单词的意思。",[182,126084,126086],{"id":126085},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[99,126088,126089],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[99,126091,126092],{},"②选定多个相同的单词:ctrl+D",[99,126094,126095],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[99,126097,126098],{},"④全局替换某些单词:ctrl+h",[99,126100,126101],{},"⑤快速定位到某一行:ctrl+g",[99,126103,126104],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":20,"searchDepth":39,"depth":39,"links":126106},[126107,126108,126109,126110,126111,126112,126113,126114,126115,126116],{"id":125985,"depth":39,"text":125986},{"id":125992,"depth":39,"text":125993},{"id":126006,"depth":39,"text":126007},{"id":126019,"depth":39,"text":126020},{"id":126036,"depth":39,"text":126037},{"id":126057,"depth":39,"text":126058},{"id":126064,"depth":39,"text":126065},{"id":126071,"depth":39,"text":126072},{"id":126078,"depth":39,"text":126079},{"id":126085,"depth":39,"text":126086},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125977,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126123,"title":126124,"body":126125,"description":164,"extension":165,"meta":126284,"navigation":167,"path":126285,"seo":126286,"stem":126287,"__hash__":126288},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126126,"toc":126276},[126127,126130,126134,126144,126150,126156,126160,126169,126173,126178,126181,126184,126188,126191,126201,126210,126219,126228,126238,126245,126250,126255,126268],[10,126128,126124],{"id":126129},"_3-html文本与容器标签",[182,126131,126133],{"id":126132},"_31-标题标签","3.1 标题标签",[99,126135,126136,126139,126140,126143],{},[22,126137,126138],{},"\u003Ch1>","我是一级标签",[22,126141,126142],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[99,126145,126146,126139,126148],{},[22,126147,126138],{},[22,126149,126142],{},[99,126151,123406,126152,126155],{},[22,126153,126154],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[182,126157,126159],{"id":126158},"_32-段落标签","3.2 段落标签",[99,126161,126162,126165,126166],{},[22,126163,126164],{},"\u003Cp>","....",[22,126167,126168],{},"\u003C\u002Fp>",[182,126170,126172],{"id":126171},"_33-换行标签","3.3 换行标签",[99,126174,126175],{},[22,126176,126177],{},"\u003Cbr \u002F>",[99,126179,126180],{},"具有强制换行的作用",[99,126182,126183],{},"单标签",[182,126185,126187],{"id":126186},"_34-文本格式化标签","3.4 文本格式化标签",[99,126189,126190],{},"提供粗体、斜体和下划线等效果",[99,126192,126193,126194,82610,126197,126200],{},"加粗：",[22,126195,126196],{},"\u003Cstrong>...\u003C\u002Fstrong>",[22,126198,126199],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[99,126202,126203,126204,82610,126207,126200],{},"斜体：",[22,126205,126206],{},"\u003Cem>...\u003C\u002Fem>",[22,126208,126209],{},"\u003Ci>...\u003C\u002Fi>",[99,126211,126212,126213,82610,126216,126200],{},"删除线：",[22,126214,126215],{},"\u003Cdel>...\u003C\u002Fdel>",[22,126217,126218],{},"\u003Cs>...\u003C\u002Fs>",[99,126220,126221,126222,82610,126225,126200],{},"下划线：",[22,126223,126224],{},"\u003Cins>...\u003C\u002Fins>",[22,126226,126227],{},"\u003Cu>...\u003C\u002Fu>",[182,126229,126231,126232,18520,126235,102764],{"id":126230},"_35-div和span标签","3.5 ",[22,126233,126234],{},"\u003Cdiv>",[22,126236,126237],{},"\u003Cspan>",[99,126239,126240,101089,126242,126244],{},[22,126241,126234],{},[22,126243,126237],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[99,126246,126247],{},[22,126248,126249],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[99,126251,126252],{},[22,126253,126254],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[99,126256,126257,126258,126260,126261,126263,126264,126267],{},"两者特点：①",[22,126259,126234],{}," 标签用来布局，但一行通常只放一个 ",[22,126262,126234],{},"。可以理解为一个大盒子，独占一行，在 ",[22,126265,126266],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[99,126269,77320,126270,126272,126273,126275],{},[22,126271,126237],{}," 标签也可用于布局，一行可以放多个 ",[22,126274,126237],{},"，可理解为小盒子。",{"title":20,"searchDepth":39,"depth":39,"links":126277},[126278,126279,126280,126281,126282],{"id":126132,"depth":39,"text":126133},{"id":126158,"depth":39,"text":126159},{"id":126171,"depth":39,"text":126172},{"id":126186,"depth":39,"text":126187},{"id":126230,"depth":39,"text":126283},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126124,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126290,"title":126291,"body":126292,"description":164,"extension":165,"meta":126489,"navigation":167,"path":126490,"seo":126491,"stem":126492,"__hash__":126493},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126293,"toc":126481},[126294,126297,126301,126304,126310,126317,126323,126329,126332,126335,126338,126341,126344,126347,126350,126354,126357,126360,126363,126369,126375,126381,126388,126392,126398,126404,126407,126410,126416,126422,126428,126431,126434,126438,126441,126451,126457,126461,126470,126474,126477],[10,126295,126291],{"id":126296},"_4-html图像与链接",[182,126298,126300],{"id":126299},"_41-图像标签","4.1 图像标签",[99,126302,126303],{},"（1）标签",[99,126305,126306,126309],{},[22,126307,126308],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[99,126311,126312,126313,126316],{},"src是",[22,126314,126315],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[99,126318,126319,126320],{},"alt:文本，替换文本。图像不能显示的文字 ",[22,126321,126322],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[99,126324,126325,126326],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[22,126327,126328],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[99,126330,126331],{},"width:像素，设置图像的宽度",[99,126333,126334],{},"height:像素，设置图像的高度",[99,126336,126337],{},"border：像素，设置图像的边框粗细",[99,126339,126340],{},"（2）图像标签属性的注意点：",[99,126342,126343],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[99,126345,126346],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[99,126348,126349],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[182,126351,126353],{"id":126352},"_42-路径注意要点","4.2 路径注意要点：",[99,126355,126356],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[99,126358,126359],{},"（2）根目录：就是打开文件夹的第一层根目录",[99,126361,126362],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[99,126364,126365,126366],{},"①同一级路径：图像文件位于HTML文件同一级，如",[22,126367,126368],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[99,126370,126371,126372],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[22,126373,126374],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[99,126376,126377,126378],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[22,126379,126380],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[99,126382,126383,126384,494],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[481,126385,126386],{"href":126386,"rel":126387},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23973],[182,126389,126391],{"id":126390},"_43-超链接标签","4.3 超链接标签",[99,126393,126394,126397],{},[22,126395,126396],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[99,126399,126400,126401],{},"①语法格式：",[22,126402,126403],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[99,126405,126406],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[99,126408,126409],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[99,126411,126412,126413],{},"③链接分类：外部链接：",[22,126414,126415],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[99,126417,126418,126419],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[22,126420,126421],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[99,126423,126424,126425],{},"空链接：如果当时没有确定链接目标时，",[22,126426,126427],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[99,126429,126430],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[99,126432,126433],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[182,126435,126437],{"id":126436},"_44-锚点链接","4.4 锚点链接",[99,126439,126440],{},"点我们点击链接，可以快速定位到页面中的某个位置",[99,126442,126443,126444,126447,126448],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[22,126445,126446],{},"\u003Ca href=\"#two\">","第二级",[22,126449,126450],{},"\u003C\u002Fa>",[99,126452,126453,126454],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[22,126455,126456],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[182,126458,126460],{"id":126459},"_45-注释标签","4.5 注释标签",[99,126462,126463,126466,126467],{},[22,126464,126465],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[22,126468,126469],{},"ctrl+\u002F",[182,126471,126473],{"id":126472},"_46-特殊字符","4.6 特殊字符",[99,126475,126476],{},"可以实现添加多个空格",[155,126478],{"style":126479,"src":126480},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":20,"searchDepth":39,"depth":39,"links":126482},[126483,126484,126485,126486,126487,126488],{"id":126299,"depth":39,"text":126300},{"id":126352,"depth":39,"text":126353},{"id":126390,"depth":39,"text":126391},{"id":126436,"depth":39,"text":126437},{"id":126459,"depth":39,"text":126460},{"id":126472,"depth":39,"text":126473},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126291,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126495,"title":126496,"body":126497,"description":164,"extension":165,"meta":126790,"navigation":167,"path":126791,"seo":126792,"stem":126793,"__hash__":126794},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126498,"toc":126781},[126499,126502,126506,126509,126512,126515,126518,126521,126524,126527,126530,126533,126553,126559,126563,126566,126569,126572,126575,126578,126581,126585,126588,126591,126594,126597,126610,126615,126618,126621,126636,126639,126642,126645,126648,126651,126655,126658,126665,126668,126671,126674,126677,126680,126686,126689,126692,126698,126701,126704,126707,126713,126716,126719,126733,126740,126743,126746,126753,126762,126765,126768,126771,126775,126778],[10,126500,126496],{"id":126501},"_5-html表格列表与表单",[182,126503,126505],{"id":126504},"_51-表格标签","5.1 表格标签",[99,126507,126508],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[99,126510,126511],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[99,126513,126514],{},"②表格基本语法：",[155,126516],{"style":126479,"src":126517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[99,126519,126520],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[155,126522],{"style":126479,"src":126523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[99,126525,126526],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[155,126528],{"style":126479,"src":126529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[99,126531,126532],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[99,126534,126535,126538,126539,126541,126542,126545,126546,126548,126549,126552],{},[22,126536,126537],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[22,126540,126537],{},"内部必须拥有",[22,126543,126544],{},"\u003Ctr>","标签，一般位于第一行，",[22,126547,126537],{},"比",[22,126550,126551],{},"\u003Cth>","范围广",[99,126554,126555,126558],{},[22,126556,126557],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[182,126560,126562],{"id":126561},"_52-合并单元格","5.2 合并单元格",[99,126564,126565],{},"（1）合并单元格方式：",[99,126567,126568],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[99,126570,126571],{},"②跨列合并：colspan=\"合并单元格的个数\"",[99,126573,126574],{},"（2）目标单元格：",[99,126576,126577],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[99,126579,126580],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[182,126582,126584],{"id":126583},"_53-列表标签","5.3 列表标签",[99,126586,126587],{},"（1）分类：无序列表、有序列表、自定义列表",[99,126589,126590],{},"①无序列表：",[155,126592],{"style":126479,"src":126593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[99,126595,126596],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[99,126598,126599,126602,126603,126606,126607,126609],{},[22,126600,126601],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[22,126604,126605],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[22,126608,126601],{},"中输入其他标签或文字是不对的",[99,126611,126612,126614],{},[22,126613,126605],{},"之间相当于一个容器，可以容纳所有元素",[99,126616,126617],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[99,126619,126620],{},"在css中去除前边的小圆点采用如下代码:",[15,126622,126626],{"className":126623,"code":126624,"language":126625,"meta":20,"style":20},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[22,126627,126628],{"__ignoreMap":20},[25,126629,126630,126633],{"class":27,"line":28},[25,126631,126632],{"class":51371},"list-style",[25,126634,126635],{"class":244},": none;\n",[99,126637,126638],{},"②有序列表：",[155,126640],{"style":126479,"src":126641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[99,126643,126644],{},"③自定义列表：",[155,126646],{"style":126479,"src":126647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[155,126649],{"style":126479,"src":126650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[182,126652,126654],{"id":126653},"_54-表单标签","5.4 表单标签",[99,126656,126657],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[99,126659,126660,126661,126664],{},"（1）表单域：包含单元素的区域，",[22,126662,126663],{},"\u003Cform>","标签可以实现信息的收集和传递。",[155,126666],{"style":126479,"src":126667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[99,126669,126670],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[99,126672,126673],{},"表单元素提交必须有name属性",[99,126675,126676],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[99,126678,126679],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[99,126681,77297,126682,126685],{},[22,126683,126684],{},"\u003Cinput>","输入表单元素",[155,126687],{"style":126479,"src":126688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[155,126690],{"style":126479,"src":126691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[99,126693,126694,126695],{},"单选按钮：",[22,126696,126697],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[155,126699],{"style":126479,"src":126700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[99,126702,126703],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[155,126705],{"style":126479,"src":126706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[99,126708,126709,126712],{},[392,126710,126711],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[99,126714,126715],{},"②select下拉表单元素：可以节约页面控件",[155,126717],{"style":126479,"src":126718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[99,126720,126721,13905,126723,126726,126727,126729,126730,126732],{},[392,126722,274],{},[22,126724,126725],{},"\u003Cselect>","中至少包含一对",[22,126728,102785],{},"；在",[22,126731,102785],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[99,126734,126735,126736,126739],{},"③",[22,126737,126738],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[155,126741],{"style":126479,"src":126742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[99,126744,126745],{},"3行20列",[182,126747,126749,126750,102764],{"id":126748},"_55-lable标签","5.5 ",[22,126751,126752],{},"\u003Clable>",[99,126754,126755,126756,126758,126759,126761],{},"它不是表单标签，但常常与表单标签搭配使用，",[22,126757,126752],{},"标签用于绑定一个表单标签，当点击",[22,126760,126752],{},"标签内的文本",[99,126763,126764],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[155,126766],{"style":126479,"src":126767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[155,126769],{"style":126479,"src":126770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[182,126772,126774],{"id":126773},"_56-实例","5.6 实例",[155,126776],{"style":126479,"src":126777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[159,126779,126780],{},"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":20,"searchDepth":39,"depth":39,"links":126782},[126783,126784,126785,126786,126787,126789],{"id":126504,"depth":39,"text":126505},{"id":126561,"depth":39,"text":126562},{"id":126583,"depth":39,"text":126584},{"id":126653,"depth":39,"text":126654},{"id":126748,"depth":39,"text":126788},"5.5 \u003Clable>标签",{"id":126773,"depth":39,"text":126774},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126496,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126796,"title":126797,"body":126798,"description":164,"extension":165,"meta":127347,"navigation":167,"path":127348,"seo":127349,"stem":127350,"__hash__":127351},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126799,"toc":127322},[126800,126803,126807,126810,126813,126817,126820,126823,126826,126829,126832,126835,126838,126842,126845,126849,126852,126855,126858,126862,126865,126868,126871,126877,126880,126883,126886,126889,126892,126895,126898,126931,126935,126938,126941,126944,126948,126951,126954,126957,126960,126963,126967,126970,126973,126976,126980,126983,126987,126990,126994,126997,127002,127006,127009,127013,127016,127019,127022,127025,127052,127055,127059,127062,127065,127070,127073,127076,127080,127083,127088,127091,127094,127097,127101,127104,127107,127110,127114,127117,127120,127123,127127,127131,127134,127174,127177,127181,127188,127191,127195,127198,127244,127248,127251,127254,127257,127285,127289,127292,127319],[10,126801,126797],{"id":126802},"_6-css语法与文本样式",[182,126804,126806],{"id":126805},"_61-css语法规范","6.1 css语法规范",[99,126808,126809],{},"由两部分组成，选择器及一条或多条声明",[155,126811],{"style":126479,"src":126812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[99,126814,126815],{},[392,126816,274],{},[99,126818,126819],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[99,126821,126822],{},"②属性与属性值以“键值对”的形式出现",[99,126824,126825],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[99,126827,126828],{},"④属性和属性值之间用英文“;”分开",[155,126830],{"style":126479,"src":126831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[155,126833],{"style":126479,"src":126834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[155,126836],{"style":126479,"src":126837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[182,126839,126841],{"id":126840},"_62-css选择器","6.2 css选择器",[99,126843,126844],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[210,126846,126848],{"id":126847},"_621-标签选择器","6.2.1 标签选择器",[99,126850,126851],{},"①优点：能快速为页面中同类型的标签统一设置样式",[99,126853,126854],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[155,126856],{"style":126479,"src":126857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[210,126859,126861],{"id":126860},"_622-类选择器","6.2.2 类选择器",[99,126863,126864],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[99,126866,126867],{},"②样例",[155,126869],{"style":126479,"src":126870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[99,126872,126873,126874,126876],{},"③ ",[392,126875,126711],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[99,126878,126879],{},"可以理解为给这个标签起了个名字，来表示；",[99,126881,126882],{},"长名称或词组可以使用横线来为选择器命名；",[99,126884,126885],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[99,126887,126888],{},"命名要有意义；",[155,126890],{"style":126479,"src":126891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[99,126893,126894],{},"类选择器也可以指定特殊的元素p.center{}",[99,126896,126897],{},"p.center和.center都对",[15,126899,126901],{"className":126623,"code":126900,"language":126625,"meta":20,"style":20},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[22,126902,126903,126908,126917,126927],{"__ignoreMap":20},[25,126904,126905],{"class":27,"line":28},[25,126906,126907],{"class":302},"\u002F* 类选择器指定特殊元素 *\u002F\n",[25,126909,126910,126912,126915],{"class":27,"line":39},[25,126911,99],{"class":51371},[25,126913,126914],{"class":31},".center",[25,126916,15682],{"class":244},[25,126918,126919,126921,126923,126925],{"class":27,"line":51},[25,126920,70597],{"class":35},[25,126922,51508],{"class":244},[25,126924,51663],{"class":35},[25,126926,1403],{"class":244},[25,126928,126929],{"class":27,"line":59},[25,126930,1676],{"class":244},[210,126932,126934],{"id":126933},"_623-多类名使用","6.2.3 多类名使用",[99,126936,126937],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[155,126939],{"style":126479,"src":126940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[99,126942,126943],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[210,126945,126947],{"id":126946},"_624-id选择器","6.2.4 id选择器",[99,126949,126950],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[99,126952,126953],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[155,126955],{"style":126479,"src":126956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[99,126958,126959],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[99,126961,126962],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[210,126964,126966],{"id":126965},"_625-通配符选择器","6.2.5 通配符选择器",[99,126968,126969],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[99,126971,126972],{},"* {",[99,126974,126975],{},"color=\"red\"}",[210,126977,126979],{"id":126978},"_626-总结","6.2.6 总结",[155,126981],{"style":126479,"src":126982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[182,126984,126986],{"id":126985},"_63-css字体属性","6.3 css字体属性",[99,126988,126989],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[210,126991,126993],{"id":126992},"_631-字体系列","6.3.1 字体系列",[99,126995,126996],{},"font-family: '宋体';",[99,126998,126999,127001],{},[392,127000,274],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[210,127003,127005],{"id":127004},"_632-字体大小","6.3.2 字体大小",[99,127007,127008],{},"font-size: 20px",[99,127010,127011,26544],{},[392,127012,126711],{},[99,127014,127015],{},"①px（像素）大小是网页的最常用单位",[99,127017,127018],{},"②谷歌浏览器默认为16px",[99,127020,127021],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[99,127023,127024],{},"④可以给body指定整个页面的大小：会自动引用",[15,127026,127028],{"className":126623,"code":127027,"language":126625,"meta":20,"style":20},"body {\n  font-size: 16px;\n}\n",[22,127029,127030,127036,127048],{"__ignoreMap":20},[25,127031,127032,127034],{"class":27,"line":28},[25,127033,51871],{"class":51371},[25,127035,15682],{"class":244},[25,127037,127038,127040,127042,127044,127046],{"class":27,"line":39},[25,127039,70697],{"class":35},[25,127041,51508],{"class":244},[25,127043,844],{"class":35},[25,127045,51563],{"class":240},[25,127047,1403],{"class":244},[25,127049,127050],{"class":27,"line":51},[25,127051,1676],{"class":244},[99,127053,127054],{},"⑤标题标签比较特殊，需要单独指定大小",[210,127056,127058],{"id":127057},"_633-字体粗细","6.3.3 字体粗细",[99,127060,127061],{},"font-weight: bold;",[99,127063,127064],{},"font-weight: 100；",[99,127066,127067,127069],{},[392,127068,274],{}," ①粗体文字变细：尽量别用normal，多用数字",[99,127071,127072],{},"font-weight= 400;",[99,127074,127075],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[210,127077,127079],{"id":127078},"_634-文字样式","6.3.4 文字样式",[99,127081,127082],{},"font-style: normal；",[99,127084,127085,26544],{},[392,127086,127087],{},"属性值",[99,127089,127090],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[99,127092,127093],{},"②italic：浏览器会显示斜体的字体样式",[155,127095],{"style":126479,"src":127096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[210,127098,127100],{"id":127099},"_635-字体符合属性","6.3.5 字体符合属性",[155,127102],{"style":126479,"src":127103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[155,127105],{"style":126479,"src":127106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[99,127108,127109],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[99,127111,127112,26544],{},[392,127113,126711],{},[99,127115,127116],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[99,127118,127119],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[99,127121,127122],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[182,127124,127126],{"id":127125},"_64-css-test文本属性","6.4 css test文本属性",[210,127128,127130],{"id":127129},"_641-文本颜色","6.4.1 文本颜色",[99,127132,127133],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[15,127135,127137],{"className":126623,"code":127136,"language":126625,"meta":20,"style":20},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[22,127138,127139,127144,127150,127160,127165,127170],{"__ignoreMap":20},[25,127140,127141],{"class":27,"line":28},[25,127142,127143],{"class":302},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[25,127145,127146,127148],{"class":27,"line":39},[25,127147,99],{"class":51371},[25,127149,15682],{"class":244},[25,127151,127152,127154,127156,127158],{"class":27,"line":51},[25,127153,70976],{"class":35},[25,127155,51508],{"class":244},[25,127157,57492],{"class":35},[25,127159,1403],{"class":244},[25,127161,127162],{"class":27,"line":59},[25,127163,127164],{"class":302},"  \u002F* color: #ff0000; *\u002F\n",[25,127166,127167],{"class":27,"line":67},[25,127168,127169],{"class":302},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[25,127171,127172],{"class":27,"line":75},[25,127173,1676],{"class":244},[155,127175],{"style":126479,"src":127176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[210,127178,127180],{"id":127179},"_642-对齐文本","6.4.2 对齐文本",[99,127182,127183,127184,127187],{},"text-align属于用于设置元素内文本内容的 ",[392,127185,127186],{},"水平对齐"," 方式",[99,127189,127190],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[210,127192,127194],{"id":127193},"_643-装饰文本","6.4.3 装饰文本",[99,127196,127197],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[15,127199,127201],{"className":126623,"code":127200,"language":126625,"meta":20,"style":20},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[22,127202,127203,127209,127219,127223,127229,127240],{"__ignoreMap":20},[25,127204,127205,127207],{"class":27,"line":28},[25,127206,481],{"class":51371},[25,127208,15682],{"class":244},[25,127210,127211,127213,127215,127217],{"class":27,"line":39},[25,127212,70573],{"class":35},[25,127214,51508],{"class":244},[25,127216,54808],{"class":35},[25,127218,1403],{"class":244},[25,127220,127221],{"class":27,"line":51},[25,127222,1676],{"class":244},[25,127224,127225,127227],{"class":27,"line":59},[25,127226,99],{"class":51371},[25,127228,15682],{"class":244},[25,127230,127231,127233,127235,127238],{"class":27,"line":67},[25,127232,70573],{"class":35},[25,127234,51508],{"class":244},[25,127236,127237],{"class":35},"underline",[25,127239,1403],{"class":244},[25,127241,127242],{"class":27,"line":75},[25,127243,1676],{"class":244},[210,127245,127247],{"id":127246},"_644-文本缩进","6.4.4 文本缩进",[99,127249,127250],{},"实现文本的第一行首行缩进自己指定的距离",[99,127252,127253],{},"20px往右边走；-20px往左边走",[99,127255,127256],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[15,127258,127260],{"className":126623,"code":127259,"language":126625,"meta":20,"style":20},"p {\n  text-indent: 2em;\n}\n",[22,127261,127262,127268,127281],{"__ignoreMap":20},[25,127263,127264,127266],{"class":27,"line":28},[25,127265,99],{"class":51371},[25,127267,15682],{"class":244},[25,127269,127270,127273,127275,127277,127279],{"class":27,"line":39},[25,127271,127272],{"class":35},"  text-indent",[25,127274,51508],{"class":244},[25,127276,321],{"class":35},[25,127278,23663],{"class":240},[25,127280,1403],{"class":244},[25,127282,127283],{"class":27,"line":51},[25,127284,1676],{"class":244},[210,127286,127288],{"id":127287},"_645-行间距","6.4.5 行间距",[99,127290,127291],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[15,127293,127295],{"className":126623,"code":127294,"language":126625,"meta":20,"style":20},"p {\n  line-height: 1.6;\n}\n",[22,127296,127297,127303,127315],{"__ignoreMap":20},[25,127298,127299,127301],{"class":27,"line":28},[25,127300,99],{"class":51371},[25,127302,15682],{"class":244},[25,127304,127305,127308,127310,127313],{"class":27,"line":39},[25,127306,127307],{"class":35},"  line-height",[25,127309,51508],{"class":244},[25,127311,127312],{"class":35},"1.6",[25,127314,1403],{"class":244},[25,127316,127317],{"class":27,"line":51},[25,127318,1676],{"class":244},[159,127320,127321],{},"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":20,"searchDepth":39,"depth":39,"links":127323},[127324,127325,127333,127340],{"id":126805,"depth":39,"text":126806},{"id":126840,"depth":39,"text":126841,"children":127326},[127327,127328,127329,127330,127331,127332],{"id":126847,"depth":51,"text":126848},{"id":126860,"depth":51,"text":126861},{"id":126933,"depth":51,"text":126934},{"id":126946,"depth":51,"text":126947},{"id":126965,"depth":51,"text":126966},{"id":126978,"depth":51,"text":126979},{"id":126985,"depth":39,"text":126986,"children":127334},[127335,127336,127337,127338,127339],{"id":126992,"depth":51,"text":126993},{"id":127004,"depth":51,"text":127005},{"id":127057,"depth":51,"text":127058},{"id":127078,"depth":51,"text":127079},{"id":127099,"depth":51,"text":127100},{"id":127125,"depth":39,"text":127126,"children":127341},[127342,127343,127344,127345,127346],{"id":127129,"depth":51,"text":127130},{"id":127179,"depth":51,"text":127180},{"id":127193,"depth":51,"text":127194},{"id":127246,"depth":51,"text":127247},{"id":127287,"depth":51,"text":127288},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126797,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127353,"title":127354,"body":127355,"description":164,"extension":165,"meta":128004,"navigation":167,"path":128005,"seo":128006,"stem":128007,"__hash__":128008},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127356,"toc":127985},[127357,127360,127364,127368,127428,127432,127442,127445,127448,127452,127477,127481,127484,127487,127490,127493,127496,127500,127503,127506,127548,127551,127577,127583,127586,127590,127594,127600,127603,127606,127609,127612,127615,127618,127663,127667,127670,127673,127677,127681,127710,127713,127718,127721,127724,127727,127730,127734,127738,127741,127743,127746,127750,127753,127757,127760,127763,127766,127770,127774,127780,127790,127793,127796,127799,127802,127805,127928,127936,127944,127982],[10,127358,127354],{"id":127359},"_7-css引入方式与选择器进阶",[182,127361,127363],{"id":127362},"_71-css引入方式","7.1 css引入方式",[210,127365,127367],{"id":127366},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[15,127369,127373],{"className":127370,"code":127371,"language":127372,"meta":20,"style":20},"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",[22,127374,127375,127383,127390,127402,127415,127420],{"__ignoreMap":20},[25,127376,127377,127379,127381],{"class":27,"line":28},[25,127378,1153],{"class":244},[25,127380,159],{"class":51371},[25,127382,51378],{"class":244},[25,127384,127385,127388],{"class":27,"line":39},[25,127386,127387],{"class":51371},"  h1",[25,127389,15682],{"class":244},[25,127391,127392,127395,127397,127400],{"class":27,"line":51},[25,127393,127394],{"class":35},"    color",[25,127396,51508],{"class":244},[25,127398,127399],{"class":35},"blue",[25,127401,1403],{"class":244},[25,127403,127404,127407,127409,127411,127413],{"class":27,"line":59},[25,127405,127406],{"class":35},"    font-size",[25,127408,51508],{"class":244},[25,127410,1043],{"class":35},[25,127412,51563],{"class":240},[25,127414,1403],{"class":244},[25,127416,127417],{"class":27,"line":67},[25,127418,127419],{"class":244},"  }\n",[25,127421,127422,127424,127426],{"class":27,"line":75},[25,127423,51856],{"class":244},[25,127425,159],{"class":51371},[25,127427,51378],{"class":244},[99,127429,127430,26544],{},[392,127431,126711],{},[99,127433,77297,127434,127437,127438,127441],{},[22,127435,127436],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[22,127439,127440],{},"\u003Chead>","标签中",[99,127443,127444],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[99,127446,127447],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[210,127449,127451],{"id":127450},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[15,127453,127455],{"className":127370,"code":127454,"language":127372,"meta":20,"style":20},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[22,127456,127457],{"__ignoreMap":20},[25,127458,127459,127461,127463,127465,127467,127470,127473,127475],{"class":27,"line":28},[25,127460,1153],{"class":244},[25,127462,99],{"class":51371},[25,127464,62697],{"class":31},[25,127466,290],{"class":244},[25,127468,127469],{"class":45},"\"color: red; font-size: 16px;\"",[25,127471,127472],{"class":244},">这是一个段落\u003C\u002F",[25,127474,99],{"class":51371},[25,127476,51378],{"class":244},[99,127478,127479,26544],{},[392,127480,126711],{},[99,127482,127483],{},"①style其实就是标签的属性",[99,127485,127486],{},"②在双引号中间，写法要符合css规范",[99,127488,127489],{},"③可以控制当前的标签设置样式",[99,127491,127492],{},"④书写繁琐，简单时才用",[99,127494,127495],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[210,127497,127499],{"id":127498},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[99,127501,127502],{},"使用最多，单独建一个css文件，然后html引用",[99,127504,127505],{},"①css文件部分： style.css",[15,127507,127509],{"className":126623,"code":127508,"language":126625,"meta":20,"style":20},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[22,127510,127511,127516,127522,127532,127544],{"__ignoreMap":20},[25,127512,127513],{"class":27,"line":28},[25,127514,127515],{"class":302},"\u002F* style.css *\u002F\n",[25,127517,127518,127520],{"class":27,"line":39},[25,127519,10],{"class":51371},[25,127521,15682],{"class":244},[25,127523,127524,127526,127528,127530],{"class":27,"line":51},[25,127525,70976],{"class":35},[25,127527,51508],{"class":244},[25,127529,127399],{"class":35},[25,127531,1403],{"class":244},[25,127533,127534,127536,127538,127540,127542],{"class":27,"line":59},[25,127535,70697],{"class":35},[25,127537,51508],{"class":244},[25,127539,1043],{"class":35},[25,127541,51563],{"class":240},[25,127543,1403],{"class":244},[25,127545,127546],{"class":27,"line":67},[25,127547,1676],{"class":244},[99,127549,127550],{},"②html部分",[15,127552,127554],{"className":127370,"code":127553,"language":127372,"meta":20,"style":20},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[22,127555,127556],{"__ignoreMap":20},[25,127557,127558,127560,127562,127564,127566,127568,127570,127572,127575],{"class":27,"line":28},[25,127559,1153],{"class":244},[25,127561,69076],{"class":51371},[25,127563,69079],{"class":31},[25,127565,290],{"class":244},[25,127567,69084],{"class":45},[25,127569,61128],{"class":31},[25,127571,290],{"class":244},[25,127573,127574],{"class":45},"\"style.css\"",[25,127576,51378],{"class":244},[99,127578,127579,127582],{},[22,127580,127581],{},"\u003Chr>","水平线标签（但是不常用！）",[99,127584,127585],{},"ctrl+0回到页面原来大小",[182,127587,127589],{"id":127588},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[210,127591,127593],{"id":127592},"_721-快速生成html","7.2.1 快速生成html",[99,127595,127596,127597],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[22,127598,127599],{},"\u003Cdiv>``\u003C\u002Fdiv>",[99,127601,127602],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[99,127604,127605],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[99,127607,127608],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[99,127610,127611],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[99,127613,127614],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[99,127616,127617],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[15,127619,127621],{"className":127370,"code":127620,"language":127372,"meta":20,"style":20},"\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",[22,127622,127623,127628,127633,127638,127643,127648,127653,127658],{"__ignoreMap":20},[25,127624,127625],{"class":27,"line":28},[25,127626,127627],{"class":302},"\u003C!-- Emmet 语法示例 -->\n",[25,127629,127630],{"class":27,"line":39},[25,127631,127632],{"class":302},"\u003C!-- div*3        → 生成3个div -->\n",[25,127634,127635],{"class":27,"line":51},[25,127636,127637],{"class":302},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[25,127639,127640],{"class":27,"line":59},[25,127641,127642],{"class":302},"\u003C!-- div+p        → 兄弟div和p -->\n",[25,127644,127645],{"class":27,"line":67},[25,127646,127647],{"class":302},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[25,127649,127650],{"class":27,"line":75},[25,127651,127652],{"class":302},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[25,127654,127655],{"class":27,"line":83},[25,127656,127657],{"class":302},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[25,127659,127660],{"class":27,"line":91},[25,127661,127662],{"class":302},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[210,127664,127666],{"id":127665},"_722-快速生成css","7.2.2 快速生成css",[99,127668,127669],{},"简写开头",[99,127671,127672],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[182,127674,127676],{"id":127675},"_73-css复合选择器","7.3 css复合选择器",[210,127678,127680],{"id":127679},"_731-后代选择器","7.3.1 后代选择器",[15,127682,127684],{"className":126623,"code":127683,"language":126625,"meta":20,"style":20},".parent .child {\n  color: blue;\n}\n",[22,127685,127686,127696,127706],{"__ignoreMap":20},[25,127687,127688,127691,127694],{"class":27,"line":28},[25,127689,127690],{"class":31},".parent",[25,127692,127693],{"class":31}," .child",[25,127695,15682],{"class":244},[25,127697,127698,127700,127702,127704],{"class":27,"line":39},[25,127699,70976],{"class":35},[25,127701,51508],{"class":244},[25,127703,127399],{"class":35},[25,127705,1403],{"class":244},[25,127707,127708],{"class":27,"line":51},[25,127709,1676],{"class":244},[99,127711,127712],{},"元素1 元素2 {样式声明}",[99,127714,127715],{},[392,127716,127717],{},"注意点:",[99,127719,127720],{},"①元素1和元素2中间用空格隔开",[99,127722,127723],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[99,127725,127726],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[99,127728,127729],{},"④元素1和元素2可以是任意基础选择器",[210,127731,127733],{"id":127732},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[99,127735,127736],{},[392,127737,127717],{},[99,127739,127740],{},"①元素1和元素2中间用大于号隔开",[99,127742,127723],{},[99,127744,127745],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[210,127747,127749],{"id":127748},"_733-并集选择器","7.3.3 并集选择器",[99,127751,127752],{},"元素1，元素2 {样式声明}",[99,127754,127755],{},[392,127756,127717],{},[99,127758,127759],{},"①元素1和元素2中间用逗号隔开",[99,127761,127762],{},"②逗号可以理解为和的意思",[99,127764,127765],{},"③并集选择器通常用于集体声明",[210,127767,127769],{"id":127768},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[99,127771,127772],{},[392,127773,127717],{},[99,127775,127776,127777,127779],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69076,127778],{},"－:visited－:hover－:active。",[99,127781,127782,127783,127786,127787,25811],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127784,127785],"hover",{}," 、 ",[127788,127789],"first-child",{},[99,127791,127792],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[99,127794,127795],{},"link对没访问的进行设置",[99,127797,127798],{},"vistied对已访问的进行改变",[99,127800,127801],{},"hover鼠标经过就会变",[99,127803,127804],{},"active常按(点)就会变",[15,127806,127808],{"className":126623,"code":127807,"language":126625,"meta":20,"style":20},"\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",[22,127809,127810,127815,127824,127834,127844,127848,127857,127868,127872,127880,127890,127900,127904,127913,127924],{"__ignoreMap":20},[25,127811,127812],{"class":27,"line":28},[25,127813,127814],{"class":302},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[25,127816,127817,127819,127822],{"class":27,"line":39},[25,127818,481],{"class":51371},[25,127820,127821],{"class":31},":link",[25,127823,15682],{"class":244},[25,127825,127826,127828,127830,127832],{"class":27,"line":51},[25,127827,70976],{"class":35},[25,127829,51508],{"class":244},[25,127831,62440],{"class":35},[25,127833,1403],{"class":244},[25,127835,127836,127838,127840,127842],{"class":27,"line":59},[25,127837,70573],{"class":35},[25,127839,51508],{"class":244},[25,127841,54808],{"class":35},[25,127843,1403],{"class":244},[25,127845,127846],{"class":27,"line":67},[25,127847,1676],{"class":244},[25,127849,127850,127852,127855],{"class":27,"line":75},[25,127851,481],{"class":51371},[25,127853,127854],{"class":31},":visited",[25,127856,15682],{"class":244},[25,127858,127859,127861,127863,127866],{"class":27,"line":83},[25,127860,70976],{"class":35},[25,127862,51508],{"class":244},[25,127864,127865],{"class":35},"purple",[25,127867,1403],{"class":244},[25,127869,127870],{"class":27,"line":91},[25,127871,1676],{"class":244},[25,127873,127874,127876,127878],{"class":27,"line":1429},[25,127875,481],{"class":51371},[25,127877,61011],{"class":31},[25,127879,15682],{"class":244},[25,127881,127882,127884,127886,127888],{"class":27,"line":1441},[25,127883,70976],{"class":35},[25,127885,51508],{"class":244},[25,127887,54960],{"class":35},[25,127889,1403],{"class":244},[25,127891,127892,127894,127896,127898],{"class":27,"line":1723},[25,127893,70573],{"class":35},[25,127895,51508],{"class":244},[25,127897,127237],{"class":35},[25,127899,1403],{"class":244},[25,127901,127902],{"class":27,"line":1728},[25,127903,1676],{"class":244},[25,127905,127906,127908,127911],{"class":27,"line":1734},[25,127907,481],{"class":51371},[25,127909,127910],{"class":31},":active",[25,127912,15682],{"class":244},[25,127914,127915,127917,127919,127922],{"class":27,"line":1739},[25,127916,70976],{"class":35},[25,127918,51508],{"class":244},[25,127920,127921],{"class":35},"green",[25,127923,1403],{"class":244},[25,127925,127926],{"class":27,"line":1753},[25,127927,1676],{"class":244},[210,127929,127931,127932,127935],{"id":127930},"_735-伪类选择器","7.3.5 ",[127933,127934],"focus",{},"伪类选择器",[99,127937,127938,127940,127941,127943],{},[127933,127939],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[22,127942,126684],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[15,127945,127947],{"className":126623,"code":127946,"language":126625,"meta":20,"style":20},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[22,127948,127949,127957,127968,127978],{"__ignoreMap":20},[25,127950,127951,127953,127955],{"class":27,"line":28},[25,127952,53892],{"class":51371},[25,127954,61971],{"class":31},[25,127956,15682],{"class":244},[25,127958,127959,127962,127964,127966],{"class":27,"line":39},[25,127960,127961],{"class":35},"  border-color",[25,127963,51508],{"class":244},[25,127965,54960],{"class":35},[25,127967,1403],{"class":244},[25,127969,127970,127972,127974,127976],{"class":27,"line":51},[25,127971,70869],{"class":35},[25,127973,51508],{"class":244},[25,127975,54808],{"class":35},[25,127977,1403],{"class":244},[25,127979,127980],{"class":27,"line":59},[25,127981,1676],{"class":244},[159,127983,127984],{},"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":20,"searchDepth":39,"depth":39,"links":127986},[127987,127992,127996],{"id":127362,"depth":39,"text":127363,"children":127988},[127989,127990,127991],{"id":127366,"depth":51,"text":127367},{"id":127450,"depth":51,"text":127451},{"id":127498,"depth":51,"text":127499},{"id":127588,"depth":39,"text":127589,"children":127993},[127994,127995],{"id":127592,"depth":51,"text":127593},{"id":127665,"depth":51,"text":127666},{"id":127675,"depth":39,"text":127676,"children":127997},[127998,127999,128000,128001,128002],{"id":127679,"depth":51,"text":127680},{"id":127732,"depth":51,"text":127733},{"id":127748,"depth":51,"text":127749},{"id":127768,"depth":51,"text":127769},{"id":127930,"depth":51,"text":128003},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127354,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128010,"title":128011,"body":128012,"description":164,"extension":165,"meta":129935,"navigation":167,"path":129936,"seo":129937,"stem":129938,"__hash__":129939},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128013,"toc":129909},[128014,128017,128021,128030,128034,128060,128065,128068,128071,128074,128077,128081,128084,128094,128102,128106,128141,128146,128149,128152,128155,128158,128162,128165,128174,128178,128191,128196,128199,128202,128205,128209,128212,128216,128219,128274,128277,128308,128311,128365,128369,128372,128538,128661,128664,128667,128670,128673,128677,128680,128684,128687,128690,128694,128697,128728,128755,128783,128786,128790,128816,128859,128863,128957,128960,128987,128990,128993,128996,128999,129002,129005,129008,129011,129014,129018,129075,129102,129106,129154,129158,129199,129201,129204,129207,129210,129213,129217,129309,129312,129315,129318,129322,129445,129646,129650,129654,129657,129660,129663,129667,129670,129673,129698,129701,129704,129707,129710,129713,129717,129725,129787,129790,129848,129851,129854,129857,129860,129863,129866,129869,129906],[10,128015,128011],{"id":128016},"_8-css显示模式与背景特性",[182,128018,128020],{"id":128019},"_81-css元素显示模式","8.1 css元素显示模式",[99,128022,128023,128024,128026,128027,128029],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[22,128025,126234],{},"自己占一行，比如一行可以放多个",[22,128028,126237],{},"，HTML 元素一般分为块元素和行内元素两种类型",[210,128031,128033],{"id":128032},"_811-块元素","8.1.1 块元素",[99,128035,128036,128037,128039,128040,455,128043,455,128045,455,128047,455,128050,455,128053,128056,128057,128059],{},"常见的块元素有",[22,128038,126138],{},"~",[22,128041,128042],{},"\u003Ch6>",[22,128044,126164],{},[22,128046,126234],{},[22,128048,128049],{},"\u003Cul>",[22,128051,128052],{},"\u003Col>",[22,128054,128055],{},"\u003Cli>","等，其中 ",[22,128058,126234],{}," 标签是最典型的块元素",[99,128061,128062],{},[392,128063,128064],{},"块级元素的特点：",[99,128066,128067],{},"① 比较霸道，自己独占一行。",[99,128069,128070],{},"② 高度，宽度、外边距以及内边距都可以控制。",[99,128072,128073],{},"③ 宽度默认是容器（父级宽度）的100%。",[99,128075,128076],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[99,128078,128079],{},[392,128080,274],{},[99,128082,128083],{},"①文字类的元素内不能使用块级元素",[99,128085,77320,128086,128088,128089,128091,128092],{},[22,128087,126164],{}," 标签主要用于存放文字，因此 ",[22,128090,126164],{}," 里面不能放块级元素，特别是不能放",[22,128093,126234],{},[99,128095,128096,128097,128039,128099,128101],{},"⑥同理， ",[22,128098,126138],{},[22,128100,128042],{},"等都是文字类块级标签，里面也不能放其他块级元素",[210,128103,128105],{"id":128104},"_812-行内元素","8.1.2 行内元素",[99,128107,128108,128109,455,128111,455,128114,455,128117,455,128120,455,128123,455,128126,455,128129,455,128132,455,128135,128137,128138,128140],{},"常见的行内元素有 ",[22,128110,126396],{},[22,128112,128113],{},"\u003Cstrong>",[22,128115,128116],{},"\u003Cb>",[22,128118,128119],{},"\u003Cem>",[22,128121,128122],{},"\u003Ci>",[22,128124,128125],{},"\u003Cdel>",[22,128127,128128],{},"\u003Cs>",[22,128130,128131],{},"\u003Cins>",[22,128133,128134],{},"\u003Cu>",[22,128136,126237],{}," 等，其中 ",[22,128139,126237],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[99,128142,128143],{},[392,128144,128145],{},"特点：",[99,128147,128148],{},"① 相邻行内元素在一行上，一行可以显示多个。",[99,128150,128151],{},"② 高、宽直接设置是无效的。",[99,128153,128154],{},"③ 默认宽度就是它本身内容的宽度。",[99,128156,128157],{},"④ 行内元素只能容纳文本或其他行内元素。",[99,128159,128160],{},[392,128161,274],{},[99,128163,128164],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[99,128166,128167,128168,128170,128171,128173],{},"②特殊情况链接 ",[22,128169,126396],{}," 里面可以放块级元素，但是给 ",[22,128172,126396],{}," 转换一下块级模式最安全",[210,128175,128177],{"id":128176},"_813-行内块元素","8.1.3 行内块元素",[99,128179,128180,128181,455,128184,455,128187,128190],{},"在行内元素中有几个特殊的标签 —— ",[22,128182,128183],{},"\u003Cimg \u002F>",[22,128185,128186],{},"\u003Cinput \u002F>",[22,128188,128189],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[99,128192,128193],{},[392,128194,128195],{},"行内块元素的特点：",[99,128197,128198],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[99,128200,128201],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[99,128203,128204],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[210,128206,128208],{"id":128207},"_814-总结","8.1.4 总结",[155,128210],{"style":126479,"src":128211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[210,128213,128215],{"id":128214},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[99,128217,128218],{},"①转换为块元素：display:block;",[15,128220,128222],{"className":126623,"code":128221,"language":126625,"meta":20,"style":20},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[22,128223,128224,128229,128235,128246,128258,128270],{"__ignoreMap":20},[25,128225,128226],{"class":27,"line":28},[25,128227,128228],{"class":302},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[25,128230,128231,128233],{"class":27,"line":39},[25,128232,481],{"class":51371},[25,128234,15682],{"class":244},[25,128236,128237,128240,128242,128244],{"class":27,"line":51},[25,128238,128239],{"class":35},"  display",[25,128241,51508],{"class":244},[25,128243,60940],{"class":35},[25,128245,1403],{"class":244},[25,128247,128248,128250,128252,128254,128256],{"class":27,"line":59},[25,128249,70639],{"class":35},[25,128251,51508],{"class":244},[25,128253,554],{"class":35},[25,128255,51563],{"class":240},[25,128257,1403],{"class":244},[25,128259,128260,128262,128264,128266,128268],{"class":27,"line":67},[25,128261,70859],{"class":35},[25,128263,51508],{"class":244},[25,128265,644],{"class":35},[25,128267,51563],{"class":240},[25,128269,1403],{"class":244},[25,128271,128272],{"class":27,"line":75},[25,128273,1676],{"class":244},[99,128275,128276],{},"②转换为行内元素：display:inline;",[15,128278,128280],{"className":126623,"code":128279,"language":126625,"meta":20,"style":20},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[22,128281,128282,128287,128293,128304],{"__ignoreMap":20},[25,128283,128284],{"class":27,"line":28},[25,128285,128286],{"class":302},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[25,128288,128289,128291],{"class":27,"line":39},[25,128290,51682],{"class":51371},[25,128292,15682],{"class":244},[25,128294,128295,128297,128299,128302],{"class":27,"line":51},[25,128296,128239],{"class":35},[25,128298,51508],{"class":244},[25,128300,128301],{"class":35},"inline",[25,128303,1403],{"class":244},[25,128305,128306],{"class":27,"line":59},[25,128307,1676],{"class":244},[99,128309,128310],{},"③转换为行内块：display:inline-block;",[15,128312,128314],{"className":126623,"code":128313,"language":126625,"meta":20,"style":20},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[22,128315,128316,128321,128327,128337,128349,128361],{"__ignoreMap":20},[25,128317,128318],{"class":27,"line":28},[25,128319,128320],{"class":302},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[25,128322,128323,128325],{"class":27,"line":39},[25,128324,25],{"class":51371},[25,128326,15682],{"class":244},[25,128328,128329,128331,128333,128335],{"class":27,"line":51},[25,128330,128239],{"class":35},[25,128332,51508],{"class":244},[25,128334,72454],{"class":35},[25,128336,1403],{"class":244},[25,128338,128339,128341,128343,128345,128347],{"class":27,"line":59},[25,128340,70639],{"class":35},[25,128342,51508],{"class":244},[25,128344,855],{"class":35},[25,128346,51563],{"class":240},[25,128348,1403],{"class":244},[25,128350,128351,128353,128355,128357,128359],{"class":27,"line":67},[25,128352,70859],{"class":35},[25,128354,51508],{"class":244},[25,128356,1194],{"class":35},[25,128358,51563],{"class":240},[25,128360,1403],{"class":244},[25,128362,128363],{"class":27,"line":75},[25,128364,1676],{"class":244},[210,128366,128368],{"id":128367},"_816-小米侧边栏","8.1.6 小米侧边栏",[155,128370],{"style":126479,"src":128371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[15,128373,128375],{"className":127370,"code":128374,"language":127372,"meta":20,"style":20},"\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",[22,128376,128377,128382,128397,128416,128435,128454,128473,128492,128511,128530],{"__ignoreMap":20},[25,128378,128379],{"class":27,"line":28},[25,128380,128381],{"class":302},"\u003C!-- 小米侧边栏案例 -->\n",[25,128383,128384,128386,128388,128390,128392,128395],{"class":27,"line":39},[25,128385,1153],{"class":244},[25,128387,51682],{"class":51371},[25,128389,53557],{"class":31},[25,128391,290],{"class":244},[25,128393,128394],{"class":45},"\"sidebar\"",[25,128396,51378],{"class":244},[25,128398,128399,128401,128403,128405,128407,128409,128412,128414],{"class":27,"line":51},[25,128400,52215],{"class":244},[25,128402,481],{"class":51371},[25,128404,61128],{"class":31},[25,128406,290],{"class":244},[25,128408,61133],{"class":45},[25,128410,128411],{"class":244},">手机 电话卡\u003C\u002F",[25,128413,481],{"class":51371},[25,128415,51378],{"class":244},[25,128417,128418,128420,128422,128424,128426,128428,128431,128433],{"class":27,"line":59},[25,128419,52215],{"class":244},[25,128421,481],{"class":51371},[25,128423,61128],{"class":31},[25,128425,290],{"class":244},[25,128427,61133],{"class":45},[25,128429,128430],{"class":244},">电视 盒子\u003C\u002F",[25,128432,481],{"class":51371},[25,128434,51378],{"class":244},[25,128436,128437,128439,128441,128443,128445,128447,128450,128452],{"class":27,"line":67},[25,128438,52215],{"class":244},[25,128440,481],{"class":51371},[25,128442,61128],{"class":31},[25,128444,290],{"class":244},[25,128446,61133],{"class":45},[25,128448,128449],{"class":244},">笔记本 平板\u003C\u002F",[25,128451,481],{"class":51371},[25,128453,51378],{"class":244},[25,128455,128456,128458,128460,128462,128464,128466,128469,128471],{"class":27,"line":75},[25,128457,52215],{"class":244},[25,128459,481],{"class":51371},[25,128461,61128],{"class":31},[25,128463,290],{"class":244},[25,128465,61133],{"class":45},[25,128467,128468],{"class":244},">出行 穿戴\u003C\u002F",[25,128470,481],{"class":51371},[25,128472,51378],{"class":244},[25,128474,128475,128477,128479,128481,128483,128485,128488,128490],{"class":27,"line":83},[25,128476,52215],{"class":244},[25,128478,481],{"class":51371},[25,128480,61128],{"class":31},[25,128482,290],{"class":244},[25,128484,61133],{"class":45},[25,128486,128487],{"class":244},">智能 路由器\u003C\u002F",[25,128489,481],{"class":51371},[25,128491,51378],{"class":244},[25,128493,128494,128496,128498,128500,128502,128504,128507,128509],{"class":27,"line":91},[25,128495,52215],{"class":244},[25,128497,481],{"class":51371},[25,128499,61128],{"class":31},[25,128501,290],{"class":244},[25,128503,61133],{"class":45},[25,128505,128506],{"class":244},">健康 儿童\u003C\u002F",[25,128508,481],{"class":51371},[25,128510,51378],{"class":244},[25,128512,128513,128515,128517,128519,128521,128523,128526,128528],{"class":27,"line":1429},[25,128514,52215],{"class":244},[25,128516,481],{"class":51371},[25,128518,61128],{"class":31},[25,128520,290],{"class":244},[25,128522,61133],{"class":45},[25,128524,128525],{"class":244},">耳机 音响\u003C\u002F",[25,128527,481],{"class":51371},[25,128529,51378],{"class":244},[25,128531,128532,128534,128536],{"class":27,"line":1441},[25,128533,51856],{"class":244},[25,128535,51682],{"class":51371},[25,128537,51378],{"class":244},[15,128539,128541],{"className":126623,"code":128540,"language":126625,"meta":20,"style":20},".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",[22,128542,128543,128552,128562,128575,128587,128599,128611,128621,128632,128636,128646,128657],{"__ignoreMap":20},[25,128544,128545,128548,128550],{"class":27,"line":28},[25,128546,128547],{"class":31},".sidebar",[25,128549,1510],{"class":51371},[25,128551,15682],{"class":244},[25,128553,128554,128556,128558,128560],{"class":27,"line":39},[25,128555,128239],{"class":35},[25,128557,51508],{"class":244},[25,128559,60940],{"class":35},[25,128561,1403],{"class":244},[25,128563,128564,128566,128568,128571,128573],{"class":27,"line":51},[25,128565,70639],{"class":35},[25,128567,51508],{"class":244},[25,128569,128570],{"class":35},"234",[25,128572,51563],{"class":240},[25,128574,1403],{"class":244},[25,128576,128577,128579,128581,128583,128585],{"class":27,"line":59},[25,128578,70859],{"class":35},[25,128580,51508],{"class":244},[25,128582,695],{"class":35},[25,128584,51563],{"class":240},[25,128586,1403],{"class":244},[25,128588,128589,128591,128593,128595,128597],{"class":27,"line":67},[25,128590,127307],{"class":35},[25,128592,51508],{"class":244},[25,128594,695],{"class":35},[25,128596,51563],{"class":240},[25,128598,1403],{"class":244},[25,128600,128601,128603,128605,128607,128609],{"class":27,"line":75},[25,128602,70894],{"class":35},[25,128604,51508],{"class":244},[25,128606,1194],{"class":35},[25,128608,51563],{"class":240},[25,128610,1403],{"class":244},[25,128612,128613,128615,128617,128619],{"class":27,"line":83},[25,128614,70976],{"class":35},[25,128616,51508],{"class":244},[25,128618,60913],{"class":35},[25,128620,1403],{"class":244},[25,128622,128623,128625,128627,128630],{"class":27,"line":91},[25,128624,70949],{"class":35},[25,128626,51508],{"class":244},[25,128628,128629],{"class":35},"#55585a",[25,128631,1403],{"class":244},[25,128633,128634],{"class":27,"line":1429},[25,128635,1676],{"class":244},[25,128637,128638,128640,128642,128644],{"class":27,"line":1441},[25,128639,128547],{"class":31},[25,128641,1510],{"class":51371},[25,128643,61011],{"class":31},[25,128645,15682],{"class":244},[25,128647,128648,128650,128652,128655],{"class":27,"line":1723},[25,128649,70949],{"class":35},[25,128651,51508],{"class":244},[25,128653,128654],{"class":35},"#ff6700",[25,128656,1403],{"class":244},[25,128658,128659],{"class":27,"line":1728},[25,128660,1676],{"class":244},[155,128662],{"style":126479,"src":128663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[99,128665,128666],{},"行高=盒子高度：实现文字的垂直居中",[99,128668,128669],{},"原理讲解：",[155,128671],{"style":126479,"src":128672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[182,128674,128676],{"id":128675},"_82-css背景","8.2 css背景",[99,128678,128679],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[210,128681,128683],{"id":128682},"_821-背景颜色","8.2.1 背景颜色",[99,128685,128686],{},"background-color:颜色值;",[99,128688,128689],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[210,128691,128693],{"id":128692},"_822-背景图片","8.2.2 背景图片",[99,128695,128696],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[15,128698,128700],{"className":126623,"code":128699,"language":126625,"meta":20,"style":20},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[22,128701,128702,128708,128724],{"__ignoreMap":20},[25,128703,128704,128706],{"class":27,"line":28},[25,128705,51682],{"class":51371},[25,128707,15682],{"class":244},[25,128709,128710,128713,128715,128717,128719,128722],{"class":27,"line":39},[25,128711,128712],{"class":35},"  background-image",[25,128714,51508],{"class":244},[25,128716,61797],{"class":35},[25,128718,245],{"class":244},[25,128720,128721],{"class":5326},"images\u002Fbg.png",[25,128723,2829],{"class":244},[25,128725,128726],{"class":27,"line":51},[25,128727,1676],{"class":244},[380,128729,128730,128739],{},[383,128731,128732],{},[386,128733,128734,128737],{},[389,128735,128736],{"align":23846},"参数值",[389,128738,102767],{"align":23846},[427,128740,128741,128748],{},[386,128742,128743,128745],{},[432,128744,54808],{"align":23846},[432,128746,128747],{"align":23846},"无背景图（默认的）",[386,128749,128750,128752],{},[432,128751,61797],{"align":23846},[432,128753,128754],{"align":23846},"使用绝对或相对地址指定背景图像",[15,128756,128757],{"className":126623,"code":128699,"language":126625,"meta":20,"style":20},[22,128758,128759,128765,128779],{"__ignoreMap":20},[25,128760,128761,128763],{"class":27,"line":28},[25,128762,51682],{"class":51371},[25,128764,15682],{"class":244},[25,128766,128767,128769,128771,128773,128775,128777],{"class":27,"line":39},[25,128768,128712],{"class":35},[25,128770,51508],{"class":244},[25,128772,61797],{"class":35},[25,128774,245],{"class":244},[25,128776,128721],{"class":5326},[25,128778,2829],{"class":244},[25,128780,128781],{"class":27,"line":51},[25,128782,1676],{"class":244},[99,128784,128785],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[210,128787,128789],{"id":128788},"_823-背景平铺","8.2.3 背景平铺",[15,128791,128793],{"className":126623,"code":128792,"language":126625,"meta":20,"style":20},"div {\n  background-repeat: no-repeat;\n}\n",[22,128794,128795,128801,128812],{"__ignoreMap":20},[25,128796,128797,128799],{"class":27,"line":28},[25,128798,51682],{"class":51371},[25,128800,15682],{"class":244},[25,128802,128803,128806,128808,128810],{"class":27,"line":39},[25,128804,128805],{"class":35},"  background-repeat",[25,128807,51508],{"class":244},[25,128809,61807],{"class":35},[25,128811,1403],{"class":244},[25,128813,128814],{"class":27,"line":51},[25,128815,1676],{"class":244},[380,128817,128818,128826],{},[383,128819,128820],{},[386,128821,128822,128824],{},[389,128823,128736],{"align":23846},[389,128825,102767],{"align":23846},[427,128827,128828,128836,128843,128851],{},[386,128829,128830,128833],{},[432,128831,128832],{"align":23846},"repeat",[432,128834,128835],{"align":23846},"背景图像在纵向和横向上平铺（默认的）",[386,128837,128838,128840],{},[432,128839,61807],{"align":23846},[432,128841,128842],{"align":23846},"背景图像不平铺",[386,128844,128845,128848],{},[432,128846,128847],{"align":23846},"repeat-x",[432,128849,128850],{"align":23846},"背景图像在横向上平铺",[386,128852,128853,128856],{},[432,128854,128855],{"align":23846},"repeat-y",[432,128857,128858],{"align":23846},"背景图像在纵向平铺",[210,128860,128862],{"id":128861},"_824-背景图片位置","8.2.4 背景图片位置",[15,128864,128866],{"className":126623,"code":128865,"language":126625,"meta":20,"style":20},"\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",[22,128867,128868,128873,128879,128893,128897,128902,128908,128924,128928,128933,128939,128953],{"__ignoreMap":20},[25,128869,128870],{"class":27,"line":28},[25,128871,128872],{"class":302},"\u002F* 方位名词 *\u002F\n",[25,128874,128875,128877],{"class":27,"line":39},[25,128876,51682],{"class":51371},[25,128878,15682],{"class":244},[25,128880,128881,128884,128886,128888,128891],{"class":27,"line":51},[25,128882,128883],{"class":35},"  background-position",[25,128885,51508],{"class":244},[25,128887,51663],{"class":35},[25,128889,128890],{"class":35}," top",[25,128892,1403],{"class":244},[25,128894,128895],{"class":27,"line":59},[25,128896,1676],{"class":244},[25,128898,128899],{"class":27,"line":67},[25,128900,128901],{"class":302},"\u002F* 精确单位 *\u002F\n",[25,128903,128904,128906],{"class":27,"line":75},[25,128905,51682],{"class":51371},[25,128907,15682],{"class":244},[25,128909,128910,128912,128914,128916,128918,128920,128922],{"class":27,"line":83},[25,128911,128883],{"class":35},[25,128913,51508],{"class":244},[25,128915,943],{"class":35},[25,128917,51563],{"class":240},[25,128919,57575],{"class":35},[25,128921,51563],{"class":240},[25,128923,1403],{"class":244},[25,128925,128926],{"class":27,"line":91},[25,128927,1676],{"class":244},[25,128929,128930],{"class":27,"line":1429},[25,128931,128932],{"class":302},"\u002F* 混合单位 *\u002F\n",[25,128934,128935,128937],{"class":27,"line":1441},[25,128936,51682],{"class":51371},[25,128938,15682],{"class":244},[25,128940,128941,128943,128945,128947,128949,128951],{"class":27,"line":1723},[25,128942,128883],{"class":35},[25,128944,51508],{"class":244},[25,128946,943],{"class":35},[25,128948,51563],{"class":240},[25,128950,17254],{"class":35},[25,128952,1403],{"class":244},[25,128954,128955],{"class":27,"line":1728},[25,128956,1676],{"class":244},[99,128958,128959],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[380,128961,128962,128970],{},[383,128963,128964],{},[386,128965,128966,128968],{},[389,128967,128736],{"align":23846},[389,128969,25940],{"align":23846},[427,128971,128972,128979],{},[386,128973,128974,128976],{},[432,128975,52039],{"align":23846},[432,128977,128978],{"align":23846},"百分数|由浮点数和单位标识符组成的长度值",[386,128980,128981,128984],{},[432,128982,128983],{"align":23846},"position",[432,128985,128986],{"align":23846},"top|center|bottom|left|center|right 方位名词",[99,128988,128989],{},"其他说明：",[99,128991,128992],{},"①参数是方位名词",[99,128994,128995],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[99,128997,128998],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[99,129000,129001],{},"②参数是精确单位",[99,129003,129004],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[99,129006,129007],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[99,129009,129010],{},"③参数是混合单位",[99,129012,129013],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[210,129015,129017],{"id":129016},"_825-背景图片固定","8.2.5 背景图片固定",[15,129019,129021],{"className":126623,"code":129020,"language":126625,"meta":20,"style":20},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[22,129022,129023,129028,129034,129046,129050,129055,129061,129071],{"__ignoreMap":20},[25,129024,129025],{"class":27,"line":28},[25,129026,129027],{"class":302},"\u002F* 背景滚动（默认） *\u002F\n",[25,129029,129030,129032],{"class":27,"line":39},[25,129031,51682],{"class":51371},[25,129033,15682],{"class":244},[25,129035,129036,129039,129041,129044],{"class":27,"line":51},[25,129037,129038],{"class":35},"  background-attachment",[25,129040,51508],{"class":244},[25,129042,129043],{"class":35},"scroll",[25,129045,1403],{"class":244},[25,129047,129048],{"class":27,"line":59},[25,129049,1676],{"class":244},[25,129051,129052],{"class":27,"line":67},[25,129053,129054],{"class":302},"\u002F* 背景固定 *\u002F\n",[25,129056,129057,129059],{"class":27,"line":75},[25,129058,51682],{"class":51371},[25,129060,15682],{"class":244},[25,129062,129063,129065,129067,129069],{"class":27,"line":83},[25,129064,129038],{"class":35},[25,129066,51508],{"class":244},[25,129068,86304],{"class":35},[25,129070,1403],{"class":244},[25,129072,129073],{"class":27,"line":91},[25,129074,1676],{"class":244},[380,129076,129077,129086],{},[383,129078,129079],{},[386,129080,129081,129084],{},[389,129082,129083],{"align":23846},"参数",[389,129085,102767],{"align":23846},[427,129087,129088,129095],{},[386,129089,129090,129092],{},[432,129091,129043],{"align":23846},[432,129093,129094],{"align":23846},"背景图像是随对象内容滚动",[386,129096,129097,129099],{},[432,129098,86304],{"align":23846},[432,129100,129101],{"align":23846},"背景图像固定",[210,129103,129105],{"id":129104},"_826-背景样式合写","8.2.6 背景样式合写",[15,129107,129109],{"className":126623,"code":129108,"language":126625,"meta":20,"style":20},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[22,129110,129111,129116,129122,129150],{"__ignoreMap":20},[25,129112,129113],{"class":27,"line":28},[25,129114,129115],{"class":302},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[25,129117,129118,129120],{"class":27,"line":39},[25,129119,51682],{"class":51371},[25,129121,15682],{"class":244},[25,129123,129124,129126,129128,129130,129133,129135,129137,129139,129141,129144,129146,129148],{"class":27,"line":51},[25,129125,70682],{"class":35},[25,129127,51508],{"class":244},[25,129129,60913],{"class":35},[25,129131,129132],{"class":35}," url",[25,129134,245],{"class":244},[25,129136,128721],{"class":5326},[25,129138,13824],{"class":244},[25,129140,61807],{"class":35},[25,129142,129143],{"class":35}," fixed",[25,129145,17254],{"class":35},[25,129147,128890],{"class":35},[25,129149,1403],{"class":244},[25,129151,129152],{"class":27,"line":59},[25,129153,1676],{"class":244},[210,129155,129157],{"id":129156},"_827-背景色半透明","8.2.7 背景色半透明",[15,129159,129161],{"className":126623,"code":129160,"language":126625,"meta":20,"style":20},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[22,129162,129163,129169,129195],{"__ignoreMap":20},[25,129164,129165,129167],{"class":27,"line":28},[25,129166,51682],{"class":51371},[25,129168,15682],{"class":244},[25,129170,129171,129173,129175,129177,129179,129181,129183,129185,129187,129189,129191,129193],{"class":27,"line":39},[25,129172,70682],{"class":35},[25,129174,51508],{"class":244},[25,129176,55181],{"class":35},[25,129178,245],{"class":244},[25,129180,434],{"class":35},[25,129182,12545],{"class":244},[25,129184,434],{"class":35},[25,129186,12545],{"class":244},[25,129188,434],{"class":35},[25,129190,12545],{"class":244},[25,129192,100592],{"class":35},[25,129194,2829],{"class":244},[25,129196,129197],{"class":27,"line":51},[25,129198,1676],{"class":244},[99,129200,99467],{},[99,129202,129203],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[99,129205,129206],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[99,129208,129209],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[99,129211,129212],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[210,129214,129216],{"id":129215},"_828-总结","8.2.8 总结",[380,129218,129219,129230],{},[383,129220,129221],{},[386,129222,129223,129226,129228],{},[389,129224,129225],{"align":23846},"属性",[389,129227,102767],{"align":23846},[389,129229,395],{"align":23846},[427,129231,129232,129243,129254,129265,129276,129287,129298],{},[386,129233,129234,129237,129240],{},[432,129235,129236],{"align":23846},"background-color",[432,129238,129239],{"align":23846},"背景颜色",[432,129241,129242],{"align":23846},"预定义的颜色值\u002F十六进制\u002FRGB代码",[386,129244,129245,129248,129251],{},[432,129246,129247],{"align":23846},"background-image",[432,129249,129250],{"align":23846},"背景图片",[432,129252,129253],{"align":23846},"url(图片路径)",[386,129255,129256,129259,129262],{},[432,129257,129258],{"align":23846},"background-repeat",[432,129260,129261],{"align":23846},"是否平铺",[432,129263,129264],{"align":23846},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[386,129266,129267,129270,129273],{},[432,129268,129269],{"align":23846},"background-position",[432,129271,129272],{"align":23846},"背景位置",[432,129274,129275],{"align":23846},"length\u002Fposition 分别是x和y坐标",[386,129277,129278,129281,129284],{},[432,129279,129280],{"align":23846},"background-attachment",[432,129282,129283],{"align":23846},"背景附着",[432,129285,129286],{"align":23846},"scroll(背景滚动) \u002Ffixed (背景固定)",[386,129288,129289,129292,129295],{},[432,129290,129291],{"align":23846},"背景简写",[432,129293,129294],{"align":23846},"书写更简单",[432,129296,129297],{"align":23846},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[386,129299,129300,129303,129306],{},[432,129301,129302],{"align":23846},"背景半透明",[432,129304,129305],{"align":23846},"背景颜色半透明",[432,129307,129308],{"align":23846},"background: rgba(0,0,0.3); 后面必须是4个值",[99,129310,129311],{},"颜色渐变：",[155,129313],{"style":126479,"src":129314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[155,129316],{"style":126479,"src":129317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[210,129319,129321],{"id":129320},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[15,129323,129325],{"className":127370,"code":129324,"language":127372,"meta":20,"style":20},"\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",[22,129326,129327,129342,129361,129380,129399,129418,129437],{"__ignoreMap":20},[25,129328,129329,129331,129333,129335,129337,129340],{"class":27,"line":28},[25,129330,1153],{"class":244},[25,129332,51682],{"class":51371},[25,129334,53557],{"class":31},[25,129336,290],{"class":244},[25,129338,129339],{"class":45},"\"nav\"",[25,129341,51378],{"class":244},[25,129343,129344,129346,129348,129350,129352,129354,129357,129359],{"class":27,"line":39},[25,129345,52215],{"class":244},[25,129347,481],{"class":51371},[25,129349,61128],{"class":31},[25,129351,290],{"class":244},[25,129353,61133],{"class":45},[25,129355,129356],{"class":244},">五彩导航1\u003C\u002F",[25,129358,481],{"class":51371},[25,129360,51378],{"class":244},[25,129362,129363,129365,129367,129369,129371,129373,129376,129378],{"class":27,"line":51},[25,129364,52215],{"class":244},[25,129366,481],{"class":51371},[25,129368,61128],{"class":31},[25,129370,290],{"class":244},[25,129372,61133],{"class":45},[25,129374,129375],{"class":244},">五彩导航2\u003C\u002F",[25,129377,481],{"class":51371},[25,129379,51378],{"class":244},[25,129381,129382,129384,129386,129388,129390,129392,129395,129397],{"class":27,"line":59},[25,129383,52215],{"class":244},[25,129385,481],{"class":51371},[25,129387,61128],{"class":31},[25,129389,290],{"class":244},[25,129391,61133],{"class":45},[25,129393,129394],{"class":244},">五彩导航3\u003C\u002F",[25,129396,481],{"class":51371},[25,129398,51378],{"class":244},[25,129400,129401,129403,129405,129407,129409,129411,129414,129416],{"class":27,"line":67},[25,129402,52215],{"class":244},[25,129404,481],{"class":51371},[25,129406,61128],{"class":31},[25,129408,290],{"class":244},[25,129410,61133],{"class":45},[25,129412,129413],{"class":244},">五彩导航4\u003C\u002F",[25,129415,481],{"class":51371},[25,129417,51378],{"class":244},[25,129419,129420,129422,129424,129426,129428,129430,129433,129435],{"class":27,"line":75},[25,129421,52215],{"class":244},[25,129423,481],{"class":51371},[25,129425,61128],{"class":31},[25,129427,290],{"class":244},[25,129429,61133],{"class":45},[25,129431,129432],{"class":244},">五彩导航5\u003C\u002F",[25,129434,481],{"class":51371},[25,129436,51378],{"class":244},[25,129438,129439,129441,129443],{"class":27,"line":83},[25,129440,51856],{"class":244},[25,129442,51682],{"class":51371},[25,129444,51378],{"class":244},[15,129446,129448],{"className":126623,"code":129447,"language":126625,"meta":20,"style":20},".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",[22,129449,129450,129459,129469,129481,129493,129503,129515,129525,129529,129554,129577,129600,129623],{"__ignoreMap":20},[25,129451,129452,129455,129457],{"class":27,"line":28},[25,129453,129454],{"class":31},".nav",[25,129456,1510],{"class":51371},[25,129458,15682],{"class":244},[25,129460,129461,129463,129465,129467],{"class":27,"line":39},[25,129462,128239],{"class":35},[25,129464,51508],{"class":244},[25,129466,72454],{"class":35},[25,129468,1403],{"class":244},[25,129470,129471,129473,129475,129477,129479],{"class":27,"line":51},[25,129472,70639],{"class":35},[25,129474,51508],{"class":244},[25,129476,1060],{"class":35},[25,129478,51563],{"class":240},[25,129480,1403],{"class":244},[25,129482,129483,129485,129487,129489,129491],{"class":27,"line":59},[25,129484,70859],{"class":35},[25,129486,51508],{"class":244},[25,129488,1099],{"class":35},[25,129490,51563],{"class":240},[25,129492,1403],{"class":244},[25,129494,129495,129497,129499,129501],{"class":27,"line":67},[25,129496,70597],{"class":35},[25,129498,51508],{"class":244},[25,129500,51663],{"class":35},[25,129502,1403],{"class":244},[25,129504,129505,129507,129509,129511,129513],{"class":27,"line":75},[25,129506,127307],{"class":35},[25,129508,51508],{"class":244},[25,129510,1099],{"class":35},[25,129512,51563],{"class":240},[25,129514,1403],{"class":244},[25,129516,129517,129519,129521,129523],{"class":27,"line":83},[25,129518,70976],{"class":35},[25,129520,51508],{"class":244},[25,129522,60913],{"class":35},[25,129524,1403],{"class":244},[25,129526,129527],{"class":27,"line":91},[25,129528,1676],{"class":244},[25,129530,129531,129533,129535,129538,129540,129542,129545,129547,129549,129551],{"class":27,"line":1429},[25,129532,129454],{"class":31},[25,129534,1510],{"class":51371},[25,129536,129537],{"class":31},":nth-child",[25,129539,245],{"class":244},[25,129541,460],{"class":35},[25,129543,129544],{"class":244},") { ",[25,129546,129236],{"class":35},[25,129548,51508],{"class":244},[25,129550,128654],{"class":35},[25,129552,129553],{"class":244},"; }\n",[25,129555,129556,129558,129560,129562,129564,129566,129568,129570,129572,129575],{"class":27,"line":1441},[25,129557,129454],{"class":31},[25,129559,1510],{"class":51371},[25,129561,129537],{"class":31},[25,129563,245],{"class":244},[25,129565,321],{"class":35},[25,129567,129544],{"class":244},[25,129569,129236],{"class":35},[25,129571,51508],{"class":244},[25,129573,129574],{"class":35},"#ff0000",[25,129576,129553],{"class":244},[25,129578,129579,129581,129583,129585,129587,129589,129591,129593,129595,129598],{"class":27,"line":1723},[25,129580,129454],{"class":31},[25,129582,1510],{"class":51371},[25,129584,129537],{"class":31},[25,129586,245],{"class":244},[25,129588,315],{"class":35},[25,129590,129544],{"class":244},[25,129592,129236],{"class":35},[25,129594,51508],{"class":244},[25,129596,129597],{"class":35},"#00a4ff",[25,129599,129553],{"class":244},[25,129601,129602,129604,129606,129608,129610,129612,129614,129616,129618,129621],{"class":27,"line":1728},[25,129603,129454],{"class":31},[25,129605,1510],{"class":51371},[25,129607,129537],{"class":31},[25,129609,245],{"class":244},[25,129611,536],{"class":35},[25,129613,129544],{"class":244},[25,129615,129236],{"class":35},[25,129617,51508],{"class":244},[25,129619,129620],{"class":35},"#ff00ff",[25,129622,129553],{"class":244},[25,129624,129625,129627,129629,129631,129633,129635,129637,129639,129641,129644],{"class":27,"line":1734},[25,129626,129454],{"class":31},[25,129628,1510],{"class":51371},[25,129630,129537],{"class":31},[25,129632,245],{"class":244},[25,129634,562],{"class":35},[25,129636,129544],{"class":244},[25,129638,129236],{"class":35},[25,129640,51508],{"class":244},[25,129642,129643],{"class":35},"#00ff00",[25,129645,129553],{"class":244},[182,129647,129649],{"id":129648},"_83-css三大特性","8.3 css三大特性",[210,129651,129653],{"id":129652},"_831-层叠性","8.3.1 层叠性",[99,129655,129656],{},"为了解决样式冲突问题",[99,129658,129659],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[99,129661,129662],{},"   ②样式不冲突，不会层叠",[210,129664,129666],{"id":129665},"_832-继承性","8.3.2 继承性",[99,129668,129669],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[99,129671,129672],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[15,129674,129676],{"className":126623,"code":129675,"language":126625,"meta":20,"style":20},"p {\n  color: #333;\n}\n",[22,129677,129678,129684,129694],{"__ignoreMap":20},[25,129679,129680,129682],{"class":27,"line":28},[25,129681,99],{"class":51371},[25,129683,15682],{"class":244},[25,129685,129686,129688,129690,129692],{"class":27,"line":39},[25,129687,70976],{"class":35},[25,129689,51508],{"class":244},[25,129691,62440],{"class":35},[25,129693,1403],{"class":244},[25,129695,129696],{"class":27,"line":51},[25,129697,1676],{"class":244},[155,129699],{"style":126479,"src":129700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[99,129702,129703],{},"解释：①行高可以跟单位也可以不跟单位",[99,129705,129706],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[99,129708,129709],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[99,129711,129712],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[210,129714,129716],{"id":129715},"_833-优先级","8.3.3 优先级",[194,129718,129719,129722],{},[106,129720,129721],{},"选择器相同，则执行层叠性",[106,129723,129724],{},"选择器不同，则根据选择器权重执行",[380,129726,129727,129737],{},[383,129728,129729],{},[386,129730,129731,129734],{},[389,129732,129733],{"align":23846},"选择器",[389,129735,129736],{"align":23846},"选择器权重",[427,129738,129739,129747,129755,129763,129771,129779],{},[386,129740,129741,129744],{},[432,129742,129743],{"align":23846},"继承 或者*",[432,129745,129746],{"align":23846},"0，0，0，0",[386,129748,129749,129752],{},[432,129750,129751],{"align":23846},"标签选择器",[432,129753,129754],{"align":23846},"0，0，0，1",[386,129756,129757,129760],{},[432,129758,129759],{"align":23846},"类选择器，伪类选择器",[432,129761,129762],{"align":23846},"0，0，1，0",[386,129764,129765,129768],{},[432,129766,129767],{"align":23846},"ID选择器",[432,129769,129770],{"align":23846},"0，1，0，0",[386,129772,129773,129776],{},[432,129774,129775],{"align":23846},"行内样式",[432,129777,129778],{"align":23846},"1，0，0，0",[386,129780,129781,129784],{},[432,129782,129783],{"align":23846},"！important",[432,129785,129786],{"align":23846},"无穷大",[99,129788,129789],{},"! important用法：",[15,129791,129793],{"className":126623,"code":129792,"language":126625,"meta":20,"style":20},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[22,129794,129795,129800,129806,129819,129823,129828,129834,129844],{"__ignoreMap":20},[25,129796,129797],{"class":27,"line":28},[25,129798,129799],{"class":302},"\u002F* !important 拥有最高优先级 *\u002F\n",[25,129801,129802,129804],{"class":27,"line":39},[25,129803,51682],{"class":51371},[25,129805,15682],{"class":244},[25,129807,129808,129810,129812,129814,129817],{"class":27,"line":51},[25,129809,70976],{"class":35},[25,129811,51508],{"class":244},[25,129813,51716],{"class":35},[25,129815,129816],{"class":240}," !important",[25,129818,1403],{"class":244},[25,129820,129821],{"class":27,"line":59},[25,129822,1676],{"class":244},[25,129824,129825],{"class":27,"line":67},[25,129826,129827],{"class":302},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[25,129829,129830,129832],{"class":27,"line":75},[25,129831,51682],{"class":51371},[25,129833,15682],{"class":244},[25,129835,129836,129838,129840,129842],{"class":27,"line":83},[25,129837,70976],{"class":35},[25,129839,51508],{"class":244},[25,129841,57492],{"class":35},[25,129843,1403],{"class":244},[25,129845,129846],{"class":27,"line":91},[25,129847,1676],{"class":244},[99,129849,129850],{},"优先级注意点：",[99,129852,129853],{},"①权重是有4组数字组成,但是不会有进位",[99,129855,129856],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[99,129858,129859],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[99,129861,129862],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[99,129864,129865],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[99,129867,129868],{},"⑥复合选择器",[380,129870,129871,129881],{},[383,129872,129873],{},[386,129874,129875,129878],{},[389,129876,129877],{"align":23846},"div ul li",[389,129879,129880],{"align":23846},"0,0,0,3",[427,129882,129883,129891,129899],{},[386,129884,129885,129888],{},[432,129886,129887],{"align":23846},".nav ul li",[432,129889,129890],{"align":23846},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[386,129892,129893,129896],{},[432,129894,129895],{"align":23846},"a:hover",[432,129897,129898],{"align":23846},"0,0,1,1",[386,129900,129901,129904],{},[432,129902,129903],{"align":23846},".nav a",[432,129905,129898],{"align":23846},[159,129907,129908],{},"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":20,"searchDepth":39,"depth":39,"links":129910},[129911,129919,129930],{"id":128019,"depth":39,"text":128020,"children":129912},[129913,129914,129915,129916,129917,129918],{"id":128032,"depth":51,"text":128033},{"id":128104,"depth":51,"text":128105},{"id":128176,"depth":51,"text":128177},{"id":128207,"depth":51,"text":128208},{"id":128214,"depth":51,"text":128215},{"id":128367,"depth":51,"text":128368},{"id":128675,"depth":39,"text":128676,"children":129920},[129921,129922,129923,129924,129925,129926,129927,129928,129929],{"id":128682,"depth":51,"text":128683},{"id":128692,"depth":51,"text":128693},{"id":128788,"depth":51,"text":128789},{"id":128861,"depth":51,"text":128862},{"id":129016,"depth":51,"text":129017},{"id":129104,"depth":51,"text":129105},{"id":129156,"depth":51,"text":129157},{"id":129215,"depth":51,"text":129216},{"id":129320,"depth":51,"text":129321},{"id":129648,"depth":39,"text":129649,"children":129931},[129932,129933,129934],{"id":129652,"depth":51,"text":129653},{"id":129665,"depth":51,"text":129666},{"id":129715,"depth":51,"text":129716},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128011,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129941,"title":129942,"body":129943,"description":164,"extension":165,"meta":131533,"navigation":167,"path":131534,"seo":131535,"stem":131536,"__hash__":131537},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129944,"toc":131512},[129945,129948,129952,129955,129958,129961,129964,129967,129970,129973,129977,129985,130022,130058,130061,130075,130080,130114,130117,130210,130215,130218,130248,130251,130256,130264,130268,130275,130321,130365,130370,130373,130376,130379,130382,130385,130388,130390,130393,130397,130402,130446,130451,130454,130457,130494,130499,130502,130505,130508,130511,130543,130546,130549,130552,130584,130587,130590,130593,130597,130600,130632,130635,130639,130659,130662,130670,130673,130677,130682,130685,130717,130722,130725,130763,130767,130772,130775,130778,130809,130812,130829,130834,130886,130946,130951,131005,131043,131047,131051,131054,131058,131066,131069,131071,131082,131087,131135,131169,131172,131175,131178,131181,131225,131228,131231,131234,131237,131240,131243,131287,131290,131293,131296,131299,131302,131305,131311,131314,131358,131361,131364,131367,131370,131373,131417,131420,131422,131425,131429,131433,131471,131475,131478,131481,131485,131493,131497,131500,131503,131506,131509],[10,129946,129942],{"id":129947},"_9-css盒模型浮动与切图",[182,129949,129951],{"id":129950},"_91-盒子模型","9.1 盒子模型",[99,129953,129954],{},"利用盒子来设计网页",[99,129956,129957],{},"盒子包含：边框、外边距、内边距、实际内容",[99,129959,129960],{},"网页布局设置：",[99,129962,129963],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[99,129965,129966],{},"②利用css设置好盒子样式，然后摆放到相应位置",[99,129968,129969],{},"③往盒子里装内容",[155,129971],{"style":126479,"src":129972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[210,129974,129976],{"id":129975},"_911-边框border","9.1.1 边框（border）",[194,129978,129979,129982],{},[106,129980,129981],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[106,129983,129984],{},"语法",[15,129986,129988],{"className":126623,"code":129987,"language":126625,"meta":20,"style":20},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[22,129989,129990,129995,130001,130018],{"__ignoreMap":20},[25,129991,129992],{"class":27,"line":28},[25,129993,129994],{"class":302},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[25,129996,129997,129999],{"class":27,"line":39},[25,129998,51682],{"class":51371},[25,130000,15682],{"class":244},[25,130002,130003,130005,130007,130009,130011,130013,130016],{"class":27,"line":51},[25,130004,70967],{"class":35},[25,130006,51508],{"class":244},[25,130008,460],{"class":35},[25,130010,51563],{"class":240},[25,130012,51592],{"class":35},[25,130014,130015],{"class":35}," #ccc",[25,130017,1403],{"class":244},[25,130019,130020],{"class":27,"line":59},[25,130021,1676],{"class":244},[380,130023,130024,130032],{},[383,130025,130026],{},[386,130027,130028,130030],{},[389,130029,129225],{"align":23846},[389,130031,102767],{"align":23846},[427,130033,130034,130042,130050],{},[386,130035,130036,130039],{},[432,130037,130038],{"align":23846},"border-width",[432,130040,130041],{"align":23846},"定义边框粗细，单位是px",[386,130043,130044,130047],{},[432,130045,130046],{"align":23846},"border-style",[432,130048,130049],{"align":23846},"边框的样式",[386,130051,130052,130055],{},[432,130053,130054],{"align":23846},"border-color",[432,130056,130057],{"align":23846},"边框的颜色",[99,130059,130060],{},"边框样式 border-style 可以设置如下值：",[103,130062,130063,130066,130069,130072],{},[106,130064,130065],{},"none：没有边框即忽略所有边框的宽度（默认值）",[106,130067,130068],{},"solid：边框为单实线(最为常用的)",[106,130070,130071],{},"dashed：边框为虚线",[106,130073,130074],{},"dotted：边框为点线",[194,130076,130077],{"start":51},[106,130078,130079],{},"边框的合写分写",[15,130081,130082],{"className":126623,"code":129987,"language":126625,"meta":20,"style":20},[22,130083,130084,130088,130094,130110],{"__ignoreMap":20},[25,130085,130086],{"class":27,"line":28},[25,130087,129994],{"class":302},[25,130089,130090,130092],{"class":27,"line":39},[25,130091,51682],{"class":51371},[25,130093,15682],{"class":244},[25,130095,130096,130098,130100,130102,130104,130106,130108],{"class":27,"line":51},[25,130097,70967],{"class":35},[25,130099,51508],{"class":244},[25,130101,460],{"class":35},[25,130103,51563],{"class":240},[25,130105,51592],{"class":35},[25,130107,130015],{"class":35},[25,130109,1403],{"class":244},[25,130111,130112],{"class":27,"line":59},[25,130113,1676],{"class":244},[99,130115,130116],{},"边框分开写法：",[15,130118,130120],{"className":126623,"code":130119,"language":126625,"meta":20,"style":20},"\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",[22,130121,130122,130127,130133,130151,130169,130188,130206],{"__ignoreMap":20},[25,130123,130124],{"class":27,"line":28},[25,130125,130126],{"class":302},"\u002F* 边框分开写法 *\u002F\n",[25,130128,130129,130131],{"class":27,"line":39},[25,130130,51682],{"class":51371},[25,130132,15682],{"class":244},[25,130134,130135,130138,130140,130142,130144,130146,130149],{"class":27,"line":51},[25,130136,130137],{"class":35},"  border-top",[25,130139,51508],{"class":244},[25,130141,460],{"class":35},[25,130143,51563],{"class":240},[25,130145,51592],{"class":35},[25,130147,130148],{"class":35}," #000",[25,130150,1403],{"class":244},[25,130152,130153,130156,130158,130160,130162,130164,130167],{"class":27,"line":59},[25,130154,130155],{"class":35},"  border-right",[25,130157,51508],{"class":244},[25,130159,321],{"class":35},[25,130161,51563],{"class":240},[25,130163,62312],{"class":35},[25,130165,130166],{"class":35}," #333",[25,130168,1403],{"class":244},[25,130170,130171,130174,130176,130178,130180,130183,130186],{"class":27,"line":67},[25,130172,130173],{"class":35},"  border-bottom",[25,130175,51508],{"class":244},[25,130177,315],{"class":35},[25,130179,51563],{"class":240},[25,130181,130182],{"class":35}," dotted",[25,130184,130185],{"class":35}," #666",[25,130187,1403],{"class":244},[25,130189,130190,130193,130195,130197,130199,130201,130204],{"class":27,"line":75},[25,130191,130192],{"class":35},"  border-left",[25,130194,51508],{"class":244},[25,130196,460],{"class":35},[25,130198,51563],{"class":240},[25,130200,51592],{"class":35},[25,130202,130203],{"class":35}," #999",[25,130205,1403],{"class":244},[25,130207,130208],{"class":27,"line":83},[25,130209,1676],{"class":244},[194,130211,130212],{"start":59},[106,130213,130214],{},"表格的细线边框",[99,130216,130217],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[15,130219,130221],{"className":126623,"code":130220,"language":126625,"meta":20,"style":20},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[22,130222,130223,130228,130234,130244],{"__ignoreMap":20},[25,130224,130225],{"class":27,"line":28},[25,130226,130227],{"class":302},"\u002F* 表格细线边框合并 *\u002F\n",[25,130229,130230,130232],{"class":27,"line":39},[25,130231,380],{"class":51371},[25,130233,15682],{"class":244},[25,130235,130236,130238,130240,130242],{"class":27,"line":51},[25,130237,70649],{"class":35},[25,130239,51508],{"class":244},[25,130241,65106],{"class":35},[25,130243,1403],{"class":244},[25,130245,130246],{"class":27,"line":59},[25,130247,1676],{"class":244},[99,130249,130250],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[194,130252,130253],{"start":67},[106,130254,130255],{},"解决边框额外增加盒子的实际大小的方法：",[103,130257,130258,130261],{},[106,130259,130260],{},"测量盒子大小的时候,不量边框",[106,130262,130263],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[210,130265,130267],{"id":130266},"_912-内边距","9.1.2 内边距",[194,130269,130270,130273],{},[106,130271,130272],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[106,130274,129984],{},[380,130276,130277,130287],{},[383,130278,130279],{},[386,130280,130281,130284],{},[389,130282,130283],{"align":23846},"值的个数",[389,130285,130286],{"align":23846},"表达意思",[427,130288,130289,130297,130305,130313],{},[386,130290,130291,130294],{},[432,130292,130293],{"align":23846},"padding: 5px;",[432,130295,130296],{"align":23846},"1个值，代表上下左右都有5个元素",[386,130298,130299,130302],{},[432,130300,130301],{"align":23846},"padding: 5px 10px;",[432,130303,130304],{"align":23846},"2个值，代表上下内边距为5像素，左右内边距为10像素",[386,130306,130307,130310],{},[432,130308,130309],{"align":23846},"padding: 5px 10px 20px;",[432,130311,130312],{"align":23846},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[386,130314,130315,130318],{},[432,130316,130317],{"align":23846},"padding: 5px 10px 20px 30px;",[432,130319,130320],{"align":23846},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[380,130322,130323,130331],{},[383,130324,130325],{},[386,130326,130327,130329],{},[389,130328,129225],{"align":23846},[389,130330,102767],{"align":23846},[427,130332,130333,130341,130349,130357],{},[386,130334,130335,130338],{},[432,130336,130337],{"align":23846},"padding-left",[432,130339,130340],{"align":23846},"左内边距",[386,130342,130343,130346],{},[432,130344,130345],{"align":23846},"padding-right",[432,130347,130348],{"align":23846},"右内边距",[386,130350,130351,130354],{},[432,130352,130353],{"align":23846},"padding-top",[432,130355,130356],{"align":23846},"上内边距",[386,130358,130359,130362],{},[432,130360,130361],{"align":23846},"padding-bottom",[432,130363,130364],{"align":23846},"下内边距",[194,130366,130367],{"start":51},[106,130368,130369],{},"内边距会影响盒子的实际大小",[99,130371,130372],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[99,130374,130375],{},"①内容和边框有了距离，添加了内边距",[99,130377,130378],{},"②padding影响了盒子实际大小",[99,130380,130381],{},"内边距对盒子大小的影响：",[99,130383,130384],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[99,130386,130387],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[99,130389,95291],{},[99,130391,130392],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[210,130394,130396],{"id":130395},"_913-外边距","9.1.3 外边距",[194,130398,130399],{},[106,130400,130401],{},"控制盒子与盒子之间的距离",[380,130403,130404,130412],{},[383,130405,130406],{},[386,130407,130408,130410],{},[389,130409,129225],{"align":23846},[389,130411,102767],{"align":23846},[427,130413,130414,130422,130430,130438],{},[386,130415,130416,130419],{},[432,130417,130418],{"align":23846},"margin-left",[432,130420,130421],{"align":23846},"左外边距",[386,130423,130424,130427],{},[432,130425,130426],{"align":23846},"margin-right",[432,130428,130429],{"align":23846},"右外边距",[386,130431,130432,130435],{},[432,130433,130434],{"align":23846},"margin-top",[432,130436,130437],{"align":23846},"上外边距",[386,130439,130440,130443],{},[432,130441,130442],{"align":23846},"margin-bottom",[432,130444,130445],{"align":23846},"下外边距",[194,130447,130448],{"start":39},[106,130449,130450],{},"外边距可以让块级盒子水平居中的两个条件：",[99,130452,130453],{},"①盒子必须指定了宽度（width）",[99,130455,130456],{},"②盒子左右的外边距都设置为 auto",[15,130458,130460],{"className":126623,"code":130459,"language":126625,"meta":20,"style":20},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[22,130461,130462,130467,130474,130490],{"__ignoreMap":20},[25,130463,130464],{"class":27,"line":28},[25,130465,130466],{"class":302},"\u002F* margin 复合写法（同上） *\u002F\n",[25,130468,130469,130472],{"class":27,"line":39},[25,130470,130471],{"class":31},".box",[25,130473,15682],{"class":244},[25,130475,130476,130478,130480,130482,130484,130487],{"class":27,"line":51},[25,130477,70541],{"class":35},[25,130479,51508],{"class":244},[25,130481,434],{"class":35},[25,130483,51627],{"class":35},[25,130485,130486],{"class":244},";  ",[25,130488,130489],{"class":302},"\u002F* 块级盒子水平居中 *\u002F\n",[25,130491,130492],{"class":27,"line":59},[25,130493,1676],{"class":244},[194,130495,130496],{"start":51},[106,130497,130498],{},"外边距塌陷问题",[99,130500,130501],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[155,130503],{"style":126479,"src":130504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[99,130506,130507],{},"解决方案：",[99,130509,130510],{},"①可以为父亲元素定义上边距",[15,130512,130513],{"className":126623,"code":130459,"language":126625,"meta":20,"style":20},[22,130514,130515,130519,130525,130539],{"__ignoreMap":20},[25,130516,130517],{"class":27,"line":28},[25,130518,130466],{"class":302},[25,130520,130521,130523],{"class":27,"line":39},[25,130522,130471],{"class":31},[25,130524,15682],{"class":244},[25,130526,130527,130529,130531,130533,130535,130537],{"class":27,"line":51},[25,130528,70541],{"class":35},[25,130530,51508],{"class":244},[25,130532,434],{"class":35},[25,130534,51627],{"class":35},[25,130536,130486],{"class":244},[25,130538,130489],{"class":302},[25,130540,130541],{"class":27,"line":59},[25,130542,1676],{"class":244},[99,130544,130545],{},"②可以为父亲元素定义上内边距",[99,130547,130548],{},"③可以为父亲元素添加overflow:hidden",[155,130550],{"style":126479,"src":130551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[15,130553,130554],{"className":126623,"code":130459,"language":126625,"meta":20,"style":20},[22,130555,130556,130560,130566,130580],{"__ignoreMap":20},[25,130557,130558],{"class":27,"line":28},[25,130559,130466],{"class":302},[25,130561,130562,130564],{"class":27,"line":39},[25,130563,130471],{"class":31},[25,130565,15682],{"class":244},[25,130567,130568,130570,130572,130574,130576,130578],{"class":27,"line":51},[25,130569,70541],{"class":35},[25,130571,51508],{"class":244},[25,130573,434],{"class":35},[25,130575,51627],{"class":35},[25,130577,130486],{"class":244},[25,130579,130489],{"class":302},[25,130581,130582],{"class":27,"line":59},[25,130583,1676],{"class":244},[155,130585],{"style":126479,"src":130586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[99,130588,130589],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[99,130591,130592],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[210,130594,130596],{"id":130595},"_914-清除内外边距","9.1.4 清除内外边距",[99,130598,130599],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[15,130601,130602],{"className":126623,"code":130459,"language":126625,"meta":20,"style":20},[22,130603,130604,130608,130614,130628],{"__ignoreMap":20},[25,130605,130606],{"class":27,"line":28},[25,130607,130466],{"class":302},[25,130609,130610,130612],{"class":27,"line":39},[25,130611,130471],{"class":31},[25,130613,15682],{"class":244},[25,130615,130616,130618,130620,130622,130624,130626],{"class":27,"line":51},[25,130617,70541],{"class":35},[25,130619,51508],{"class":244},[25,130621,434],{"class":35},[25,130623,51627],{"class":35},[25,130625,130486],{"class":244},[25,130627,130489],{"class":302},[25,130629,130630],{"class":27,"line":59},[25,130631,1676],{"class":244},[99,130633,130634],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[210,130636,130638],{"id":130637},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[103,130640,130641,130644,130647,130650,130653,130656],{},[106,130642,130643],{},"文件→打开 ：可以打开我们要测量的图片",[106,130645,130646],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[106,130648,130649],{},"右击标尺，把里面的单位改为像素",[106,130651,130652],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[106,130654,130655],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[106,130657,130658],{},"用选区拖动 可以测量大小",[155,130660],{"style":126479,"src":130661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[103,130663,130664,130667],{},[106,130665,130666],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[106,130668,130669],{},"吸管取色工具",[155,130671],{"style":126479,"src":130672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[210,130674,130676],{"id":130675},"_916-案例","9.1.6 案例",[194,130678,130679],{},[106,130680,130681],{},"小米商品",[155,130683],{"style":126479,"src":130684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[15,130686,130687],{"className":126623,"code":130459,"language":126625,"meta":20,"style":20},[22,130688,130689,130693,130699,130713],{"__ignoreMap":20},[25,130690,130691],{"class":27,"line":28},[25,130692,130466],{"class":302},[25,130694,130695,130697],{"class":27,"line":39},[25,130696,130471],{"class":31},[25,130698,15682],{"class":244},[25,130700,130701,130703,130705,130707,130709,130711],{"class":27,"line":51},[25,130702,70541],{"class":35},[25,130704,51508],{"class":244},[25,130706,434],{"class":35},[25,130708,51627],{"class":35},[25,130710,130486],{"class":244},[25,130712,130489],{"class":302},[25,130714,130715],{"class":27,"line":59},[25,130716,1676],{"class":244},[194,130718,130719],{"start":39},[106,130720,130721],{},"快报模块",[155,130723],{"style":126479,"src":130724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[15,130726,130728],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[22,130729,130730,130735,130750,130755],{"__ignoreMap":20},[25,130731,130732],{"class":27,"line":28},[25,130733,130734],{"class":302},"\u003C!-- HTML 代码示例 -->\n",[25,130736,130737,130739,130741,130743,130745,130748],{"class":27,"line":39},[25,130738,1153],{"class":244},[25,130740,51682],{"class":51371},[25,130742,53557],{"class":31},[25,130744,290],{"class":244},[25,130746,130747],{"class":45},"\"example\"",[25,130749,51378],{"class":244},[25,130751,130752],{"class":27,"line":51},[25,130753,130754],{"class":244},"  示例内容\n",[25,130756,130757,130759,130761],{"class":27,"line":59},[25,130758,51856],{"class":244},[25,130760,51682],{"class":51371},[25,130762,51378],{"class":244},[210,130764,130766],{"id":130765},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[194,130768,130769],{},[106,130770,130771],{},"圆角边框",[99,130773,130774],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[155,130776],{"style":126479,"src":130777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[15,130779,130781],{"className":126623,"code":130780,"language":126625,"meta":20,"style":20},"div {\n  border: 1px solid #ccc;\n}\n",[22,130782,130783,130789,130805],{"__ignoreMap":20},[25,130784,130785,130787],{"class":27,"line":28},[25,130786,51682],{"class":51371},[25,130788,15682],{"class":244},[25,130790,130791,130793,130795,130797,130799,130801,130803],{"class":27,"line":39},[25,130792,70967],{"class":35},[25,130794,51508],{"class":244},[25,130796,460],{"class":35},[25,130798,51563],{"class":240},[25,130800,51592],{"class":35},[25,130802,130015],{"class":35},[25,130804,1403],{"class":244},[25,130806,130807],{"class":27,"line":51},[25,130808,1676],{"class":244},[99,130810,130811],{},"解释:",[103,130813,130814,130817,130820,130823,130826],{},[106,130815,130816],{},"参数值可以为数值或百分比的形式",[106,130818,130819],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[106,130821,130822],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[106,130824,130825],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[106,130827,130828],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[194,130830,130831],{"start":39},[106,130832,130833],{},"盒子阴影",[15,130835,130837],{"className":126623,"code":130836,"language":126625,"meta":20,"style":20},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[22,130838,130839,130845,130882],{"__ignoreMap":20},[25,130840,130841,130843],{"class":27,"line":28},[25,130842,51682],{"class":51371},[25,130844,15682],{"class":244},[25,130846,130847,130850,130852,130854,130856,130858,130860,130862,130864,130866,130868,130870,130872,130874,130876,130878,130880],{"class":27,"line":39},[25,130848,130849],{"class":35},"  box-shadow",[25,130851,51508],{"class":244},[25,130853,434],{"class":35},[25,130855,14865],{"class":35},[25,130857,51563],{"class":240},[25,130859,2148],{"class":35},[25,130861,51563],{"class":240},[25,130863,78838],{"class":35},[25,130865,245],{"class":244},[25,130867,434],{"class":35},[25,130869,12545],{"class":244},[25,130871,434],{"class":35},[25,130873,12545],{"class":244},[25,130875,434],{"class":35},[25,130877,12545],{"class":244},[25,130879,86281],{"class":35},[25,130881,2829],{"class":244},[25,130883,130884],{"class":27,"line":51},[25,130885,1676],{"class":244},[380,130887,130888,130896],{},[383,130889,130890],{},[386,130891,130892,130894],{},[389,130893,395],{"align":23846},[389,130895,27560],{"align":23846},[427,130897,130898,130906,130914,130922,130930,130938],{},[386,130899,130900,130903],{},[432,130901,130902],{"align":23846},"h-shadow",[432,130904,130905],{"align":23846},"必需,水平阴影的位置,允许负值",[386,130907,130908,130911],{},[432,130909,130910],{"align":23846},"v-shadow",[432,130912,130913],{"align":23846},"必需,垂直阴影的位置,允许负值",[386,130915,130916,130919],{},[432,130917,130918],{"align":23846},"blur",[432,130920,130921],{"align":23846},"可选,模糊距离,就是影子的虚实",[386,130923,130924,130927],{},[432,130925,130926],{"align":23846},"spread",[432,130928,130929],{"align":23846},"可选,阴影尺寸",[386,130931,130932,130935],{},[432,130933,130934],{"align":23846},"color",[432,130936,130937],{"align":23846},"可选,阴影的颜色",[386,130939,130940,130943],{},[432,130941,130942],{"align":23846},"inset",[432,130944,130945],{"align":23846},"可选,将外部阴影(outset)改为内部阴影",[194,130947,130948],{"start":51},[106,130949,130950],{},"文字阴影",[15,130952,130954],{"className":126623,"code":130953,"language":126625,"meta":20,"style":20},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[22,130955,130956,130962,131001],{"__ignoreMap":20},[25,130957,130958,130960],{"class":27,"line":28},[25,130959,99],{"class":51371},[25,130961,15682],{"class":244},[25,130963,130964,130967,130969,130971,130973,130975,130977,130979,130981,130983,130985,130987,130989,130991,130993,130995,130997,130999],{"class":27,"line":39},[25,130965,130966],{"class":35},"  text-shadow",[25,130968,51508],{"class":244},[25,130970,460],{"class":35},[25,130972,51563],{"class":240},[25,130974,25225],{"class":35},[25,130976,51563],{"class":240},[25,130978,14865],{"class":35},[25,130980,51563],{"class":240},[25,130982,78838],{"class":35},[25,130984,245],{"class":244},[25,130986,434],{"class":35},[25,130988,12545],{"class":244},[25,130990,434],{"class":35},[25,130992,12545],{"class":244},[25,130994,434],{"class":35},[25,130996,12545],{"class":244},[25,130998,100592],{"class":35},[25,131000,2829],{"class":244},[25,131002,131003],{"class":27,"line":51},[25,131004,1676],{"class":244},[380,131006,131007,131015],{},[383,131008,131009],{},[386,131010,131011,131013],{},[389,131012,395],{"align":23846},[389,131014,27560],{"align":23846},[427,131016,131017,131023,131030,131037],{},[386,131018,131019,131021],{},[432,131020,130902],{"align":23846},[432,131022,130905],{"align":23846},[386,131024,131025,131027],{},[432,131026,130910],{"align":23846},[432,131028,131029],{"align":23846},"必需,垂直阴影位置,允许负值",[386,131031,131032,131034],{},[432,131033,130918],{"align":23846},[432,131035,131036],{"align":23846},"可选,模糊的距离",[386,131038,131039,131041],{},[432,131040,130934],{"align":23846},[432,131042,130937],{"align":23846},[182,131044,131046],{"id":131045},"_92-浮动","9.2 浮动",[210,131048,131050],{"id":131049},"_921-浮动介绍","9.2.1 浮动介绍",[99,131052,131053],{},"在16.2中详细介绍",[210,131055,131057],{"id":131056},"_922-清除浮动","9.2.2 清除浮动",[194,131059,131060,131063],{},[106,131061,131062],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[106,131064,131065],{},"清除浮动的本质",[99,131067,131068],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[99,131070,9135],{},[103,131072,131073,131076,131079],{},[106,131074,131075],{},"如果父盒子本身有高度，则不需要清除浮动",[106,131077,131078],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[106,131080,131081],{},"父级有了高度，就不会影响下面的标准流了",[194,131083,131084],{"start":51},[106,131085,131086],{},"清除浮动样式",[15,131088,131090],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[22,131091,131092,131099,131110,131114,131121,131131],{"__ignoreMap":20},[25,131093,131094,131097],{"class":27,"line":28},[25,131095,131096],{"class":31},".left",[25,131098,15682],{"class":244},[25,131100,131101,131104,131106,131108],{"class":27,"line":39},[25,131102,131103],{"class":35},"  float",[25,131105,51508],{"class":244},[25,131107,23846],{"class":35},[25,131109,1403],{"class":244},[25,131111,131112],{"class":27,"line":51},[25,131113,1676],{"class":244},[25,131115,131116,131119],{"class":27,"line":59},[25,131117,131118],{"class":31},".right",[25,131120,15682],{"class":244},[25,131122,131123,131125,131127,131129],{"class":27,"line":67},[25,131124,131103],{"class":35},[25,131126,51508],{"class":244},[25,131128,72593],{"class":35},[25,131130,1403],{"class":244},[25,131132,131133],{"class":27,"line":75},[25,131134,1676],{"class":244},[380,131136,131137,131145],{},[383,131138,131139],{},[386,131140,131141,131143],{},[389,131142,127087],{"align":23846},[389,131144,27560],{"align":23846},[427,131146,131147,131154,131161],{},[386,131148,131149,131151],{},[432,131150,23846],{"align":23846},[432,131152,131153],{"align":23846},"不允许左侧有浮动元素（清除左侧浮动的影响）",[386,131155,131156,131158],{},[432,131157,72593],{"align":23846},[432,131159,131160],{"align":23846},"不允许右侧有浮动元素（清除右侧浮动的影响）",[386,131162,131163,131166],{},[432,131164,131165],{"align":23846},"both",[432,131167,131168],{"align":23846},"同时清除左右侧浮动的影响",[99,131170,131171],{},"法一",[99,131173,131174],{},"额外标签法也称为隔墙法",[99,131176,131177],{},"使用方式：",[99,131179,131180],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[15,131182,131183],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},[22,131184,131185,131191,131201,131205,131211,131221],{"__ignoreMap":20},[25,131186,131187,131189],{"class":27,"line":28},[25,131188,131096],{"class":31},[25,131190,15682],{"class":244},[25,131192,131193,131195,131197,131199],{"class":27,"line":39},[25,131194,131103],{"class":35},[25,131196,51508],{"class":244},[25,131198,23846],{"class":35},[25,131200,1403],{"class":244},[25,131202,131203],{"class":27,"line":51},[25,131204,1676],{"class":244},[25,131206,131207,131209],{"class":27,"line":59},[25,131208,131118],{"class":31},[25,131210,15682],{"class":244},[25,131212,131213,131215,131217,131219],{"class":27,"line":67},[25,131214,131103],{"class":35},[25,131216,51508],{"class":244},[25,131218,72593],{"class":35},[25,131220,1403],{"class":244},[25,131222,131223],{"class":27,"line":75},[25,131224,1676],{"class":244},[99,131226,131227],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[99,131229,131230],{},"优点： 通俗易懂，书写方便",[99,131232,131233],{},"缺点： 添加许多无意义的标签，结构化较差",[99,131235,131236],{},"注意： 要求这个新的空标签必须是块级元素。",[99,131238,131239],{},"法二",[99,131241,131242],{},"父级添加overflow属性",[15,131244,131245],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},[22,131246,131247,131253,131263,131267,131273,131283],{"__ignoreMap":20},[25,131248,131249,131251],{"class":27,"line":28},[25,131250,131096],{"class":31},[25,131252,15682],{"class":244},[25,131254,131255,131257,131259,131261],{"class":27,"line":39},[25,131256,131103],{"class":35},[25,131258,51508],{"class":244},[25,131260,23846],{"class":35},[25,131262,1403],{"class":244},[25,131264,131265],{"class":27,"line":51},[25,131266,1676],{"class":244},[25,131268,131269,131271],{"class":27,"line":59},[25,131270,131118],{"class":31},[25,131272,15682],{"class":244},[25,131274,131275,131277,131279,131281],{"class":27,"line":67},[25,131276,131103],{"class":35},[25,131278,51508],{"class":244},[25,131280,72593],{"class":35},[25,131282,1403],{"class":244},[25,131284,131285],{"class":27,"line":75},[25,131286,1676],{"class":244},[99,131288,131289],{},"overflow: hidden;",[99,131291,131292],{},"优点：代码简洁",[99,131294,131295],{},"缺点：无法显示溢出的部分",[99,131297,131298],{},"注意：是给父元素添加代码",[99,131300,131301],{},"法三",[99,131303,131304],{},"父级添加after伪元素",[99,131306,131307,131310],{},[131308,131309],"after",{}," 方式是额外标签法的升级版",[99,131312,131313],{},"使用的时候复制就可以",[15,131315,131316],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},[22,131317,131318,131324,131334,131338,131344,131354],{"__ignoreMap":20},[25,131319,131320,131322],{"class":27,"line":28},[25,131321,131096],{"class":31},[25,131323,15682],{"class":244},[25,131325,131326,131328,131330,131332],{"class":27,"line":39},[25,131327,131103],{"class":35},[25,131329,51508],{"class":244},[25,131331,23846],{"class":35},[25,131333,1403],{"class":244},[25,131335,131336],{"class":27,"line":51},[25,131337,1676],{"class":244},[25,131339,131340,131342],{"class":27,"line":59},[25,131341,131118],{"class":31},[25,131343,15682],{"class":244},[25,131345,131346,131348,131350,131352],{"class":27,"line":67},[25,131347,131103],{"class":35},[25,131349,51508],{"class":244},[25,131351,72593],{"class":35},[25,131353,1403],{"class":244},[25,131355,131356],{"class":27,"line":75},[25,131357,1676],{"class":244},[99,131359,131360],{},"优点：没有增加标签，结构更简单",[99,131362,131363],{},"缺点：照顾低版本浏览器",[99,131365,131366],{},"代表网站： 百度、淘宝网、网易等",[99,131368,131369],{},"法四",[99,131371,131372],{},"父级添加双伪元素",[15,131374,131375],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},[22,131376,131377,131383,131393,131397,131403,131413],{"__ignoreMap":20},[25,131378,131379,131381],{"class":27,"line":28},[25,131380,131096],{"class":31},[25,131382,15682],{"class":244},[25,131384,131385,131387,131389,131391],{"class":27,"line":39},[25,131386,131103],{"class":35},[25,131388,51508],{"class":244},[25,131390,23846],{"class":35},[25,131392,1403],{"class":244},[25,131394,131395],{"class":27,"line":51},[25,131396,1676],{"class":244},[25,131398,131399,131401],{"class":27,"line":59},[25,131400,131118],{"class":31},[25,131402,15682],{"class":244},[25,131404,131405,131407,131409,131411],{"class":27,"line":67},[25,131406,131103],{"class":35},[25,131408,51508],{"class":244},[25,131410,72593],{"class":35},[25,131412,1403],{"class":244},[25,131414,131415],{"class":27,"line":75},[25,131416,1676],{"class":244},[99,131418,131419],{},"优点：代码更简洁",[99,131421,131363],{},[99,131423,131424],{},"代表网站：小米、腾讯等",[182,131426,131428],{"id":131427},"_93-ps切图","9.3 PS切图",[210,131430,131432],{"id":131431},"_931-常见图片格式","9.3.1 常见图片格式",[380,131434,131435,131445],{},[383,131436,131437],{},[386,131438,131439,131442],{},[389,131440,131441],{"align":23846},"jpg图像格式",[389,131443,131444],{"align":23846},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[427,131446,131447,131455,131463],{},[386,131448,131449,131452],{},[432,131450,131451],{"align":23846},"gif图像格式",[432,131453,131454],{"align":23846},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[386,131456,131457,131460],{},[432,131458,131459],{"align":23846},"png图像格式",[432,131461,131462],{"align":23846},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[386,131464,131465,131468],{},[432,131466,131467],{"align":23846},"PSD图像格式",[432,131469,131470],{"align":23846},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[210,131472,131474],{"id":131473},"_932-图层切图","9.3.2 图层切图",[99,131476,131477],{},"最简单的切图方式：右击图层 → 导出 → 切片",[99,131479,131480],{},"按住shift选中两个图层->图层菜单->合并图层",[210,131482,131484],{"id":131483},"_933-切片切图","9.3.3 切片切图",[103,131486,131487,131490],{},[106,131488,131489],{},"利用切片工具手动划出",[106,131491,131492],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[210,131494,131496],{"id":131495},"_934-切图步骤","9.3.4 切图步骤",[99,131498,131499],{},"用切片工具选中：",[155,131501],{"style":126479,"src":131502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[99,131504,131505],{},"文件 -> 导出",[155,131507],{"style":126479,"src":131508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[159,131510,131511],{},"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":20,"searchDepth":39,"depth":39,"links":131513},[131514,131523,131527],{"id":129950,"depth":39,"text":129951,"children":131515},[131516,131517,131518,131519,131520,131521,131522],{"id":129975,"depth":51,"text":129976},{"id":130266,"depth":51,"text":130267},{"id":130395,"depth":51,"text":130396},{"id":130595,"depth":51,"text":130596},{"id":130637,"depth":51,"text":130638},{"id":130675,"depth":51,"text":130676},{"id":130765,"depth":51,"text":130766},{"id":131045,"depth":39,"text":131046,"children":131524},[131525,131526],{"id":131049,"depth":51,"text":131050},{"id":131056,"depth":51,"text":131057},{"id":131427,"depth":39,"text":131428,"children":131528},[131529,131530,131531,131532],{"id":131431,"depth":51,"text":131432},{"id":131473,"depth":51,"text":131474},{"id":131483,"depth":51,"text":131484},{"id":131495,"depth":51,"text":131496},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129942,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131539,"title":131540,"body":131541,"description":164,"extension":165,"meta":132182,"navigation":167,"path":132183,"seo":132184,"stem":132185,"__hash__":132186},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131542,"toc":132170},[131543,131546,131550,131576,131610,131614,131618,131621,131663,131670,131680,131688,131690,131693,131696,131699,131706,131720,131724,131727,131756,131760,131763,131777,131781,131784,131812,131816,131819,131845,131849,131854,131887,131892,131920,131924,131941,131987,131992,132036,132053,132160,132168],[10,131544,131540],{"id":131545},"_10-css规范与学成在线案例",[182,131547,131549],{"id":131548},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[194,131551,131552,131558,131564,131570],{},[106,131553,131554,131557],{},[392,131555,131556],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[106,131559,131560,131563],{},[392,131561,131562],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[106,131565,131566,131569],{},[392,131567,131568],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[106,131571,131572,131575],{},[392,131573,131574],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[15,131577,131578],{"className":126623,"code":129987,"language":126625,"meta":20,"style":20},[22,131579,131580,131584,131590,131606],{"__ignoreMap":20},[25,131581,131582],{"class":27,"line":28},[25,131583,129994],{"class":302},[25,131585,131586,131588],{"class":27,"line":39},[25,131587,51682],{"class":51371},[25,131589,15682],{"class":244},[25,131591,131592,131594,131596,131598,131600,131602,131604],{"class":27,"line":51},[25,131593,70967],{"class":35},[25,131595,51508],{"class":244},[25,131597,460],{"class":35},[25,131599,51563],{"class":240},[25,131601,51592],{"class":35},[25,131603,130015],{"class":35},[25,131605,1403],{"class":244},[25,131607,131608],{"class":27,"line":59},[25,131609,1676],{"class":244},[182,131611,131613],{"id":131612},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[210,131615,131617],{"id":131616},"_1021-header头部制作","10.2.1 header头部制作",[155,131619],{"style":126479,"src":131620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[103,131622,131623,131630,131637,131643,131650,131657],{},[106,131624,131625,131626,131629],{},"1号是版心盒子 ",[392,131627,131628],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[106,131631,131632,131633,131636],{},"版心盒子 里面包含 2号盒子 ",[392,131634,131635],{},"logo"," 图标",[106,131638,131639,131640,131642],{},"版心盒子 里面包含 3号盒子 ",[392,131641,53784],{}," 导航栏",[106,131644,131645,131646,131649],{},"版心盒子 里面包含 4号盒子 ",[392,131647,131648],{},"search"," 搜索框",[106,131651,131652,131653,131656],{},"版心盒子 里面包含 5号盒子 ",[392,131654,131655],{},"user"," 个人信息",[106,131658,131659,131660],{},"注意，要求里面的 ",[392,131661,131662],{},"4个子盒子 必须都浮动",[194,131664,131665],{},[106,131666,131667],{},[392,131668,131669],{},"导航栏注意点:",[99,131671,131672,131673,131676,131677],{},"实际开发中， ",[392,131674,131675],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[392,131678,131679],{},"用 li 包含链接(li+a)的做法",[103,131681,131682,131685],{},[106,131683,131684],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[106,131686,131687],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[99,131689,9135],{},[99,131691,131692],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[99,131694,131695],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[99,131697,131698],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[194,131700,131701],{"start":39},[106,131702,131703],{},[392,131704,131705],{},"4号盒子search的细节：",[103,131707,131708,131711,131714],{},[106,131709,131710],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[106,131712,131713],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[106,131715,131716,131719],{},[22,131717,131718],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[210,131721,131723],{"id":131722},"_1022-banner制作","10.2.2 banner制作",[155,131725],{"style":126479,"src":131726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[103,131728,131729,131736,131742,131749],{},[106,131730,131731,131732,131735],{},"1号盒子是通栏的大盒子 ",[392,131733,131734],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[106,131737,131738,131739,131741],{},"2号盒子是版心 ",[392,131740,1038],{}," ， 要水平居中对齐",[106,131743,131744,131745,131748],{},"3号盒子版心内，左对齐 ",[392,131746,131747],{},"subnav"," 侧导航栏",[106,131750,131751,131752,131755],{},"4号盒子版心内，右对齐 ",[392,131753,131754],{},"course"," 课程",[210,131757,131759],{"id":131758},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[155,131761],{"style":126479,"src":131762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[103,131764,131765,131768,131771,131774],{},[106,131766,131767],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[106,131769,131770],{},"1号盒子是标题 H3 左侧浮动",[106,131772,131773],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[106,131775,131776],{},"3号盒子 右浮动 mod 修改",[210,131778,131780],{"id":131779},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[155,131782],{"style":126479,"src":131783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[103,131785,131786,131792,131799,131806,131809],{},[106,131787,131788,131789,131791],{},"1号盒子为最大的盒子 ",[392,131790,53785],{}," 版心水平居中对齐",[106,131793,131794,131795,131798],{},"2号盒子为上面部分 ",[392,131796,131797],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[106,131800,131801,131802,131805],{},"3号盒子为底下部分 ",[392,131803,131804],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[106,131807,131808],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[106,131810,131811],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[210,131813,131815],{"id":131814},"_1025-底部模块制作","10.2.5 底部模块制作",[155,131817],{"style":126479,"src":131818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[103,131820,131821,131828,131831,131838],{},[106,131822,131823,131824,131827],{},"1号盒子通栏大盒子 底部 ",[392,131825,131826],{},"footer"," 给高度 底色是白色",[106,131829,131830],{},"2号盒子版心水平居中",[106,131832,131833,131834,131837],{},"3号盒子版权 ",[392,131835,131836],{},"copyright"," 左对齐",[106,131839,131840,131841,131844],{},"4号盒子 链接组 ",[392,131842,131843],{},"links"," 右对齐",[210,131846,131848],{"id":131847},"_1026-代码模块","10.2.6 代码模块",[194,131850,131851],{},[106,131852,131853],{},"html部分",[15,131855,131857],{"className":127370,"code":131856,"language":127372,"meta":20,"style":20},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[22,131858,131859],{"__ignoreMap":20},[25,131860,131861,131863,131865,131867,131869,131872,131875,131877,131880,131883,131885],{"class":27,"line":28},[25,131862,1153],{"class":244},[25,131864,481],{"class":51371},[25,131866,61128],{"class":31},[25,131868,290],{"class":244},[25,131870,131871],{"class":45},"\"https:\u002F\u002Fexample.com\"",[25,131873,131874],{"class":31}," target",[25,131876,290],{"class":244},[25,131878,131879],{"class":45},"\"_blank\"",[25,131881,131882],{"class":244},">链接文字\u003C\u002F",[25,131884,481],{"class":51371},[25,131886,51378],{"class":244},[194,131888,131889],{"start":39},[106,131890,131891],{},"css部分",[15,131893,131894],{"className":127370,"code":131856,"language":127372,"meta":20,"style":20},[22,131895,131896],{"__ignoreMap":20},[25,131897,131898,131900,131902,131904,131906,131908,131910,131912,131914,131916,131918],{"class":27,"line":28},[25,131899,1153],{"class":244},[25,131901,481],{"class":51371},[25,131903,61128],{"class":31},[25,131905,290],{"class":244},[25,131907,131871],{"class":45},[25,131909,131874],{"class":31},[25,131911,290],{"class":244},[25,131913,131879],{"class":45},[25,131915,131882],{"class":244},[25,131917,481],{"class":51371},[25,131919,51378],{"class":244},[210,131921,131923],{"id":131922},"_1027-收获","10.2.7 收获",[194,131925,131926,131929,131932,131935,131938],{},[106,131927,131928],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[106,131930,131931],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[106,131933,131934],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[106,131936,131937],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[106,131939,131940],{},"遗忘代码",[15,131942,131944],{"className":126623,"code":131943,"language":126625,"meta":20,"style":20},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[22,131945,131946,131968,131973,131983],{"__ignoreMap":20},[25,131947,131948,131950,131952,131954,131956,131958,131960,131962,131964,131966],{"class":27,"line":28},[25,131949,51682],{"class":51371},[25,131951,12545],{"class":244},[25,131953,99],{"class":51371},[25,131955,12545],{"class":244},[25,131957,10],{"class":51371},[25,131959,12545],{"class":244},[25,131961,103],{"class":51371},[25,131963,12545],{"class":244},[25,131965,106],{"class":51371},[25,131967,15682],{"class":244},[25,131969,131970],{"class":27,"line":39},[25,131971,131972],{"class":302},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[25,131974,131975,131977,131979,131981],{"class":27,"line":51},[25,131976,128239],{"class":35},[25,131978,51508],{"class":244},[25,131980,60940],{"class":35},[25,131982,1403],{"class":244},[25,131984,131985],{"class":27,"line":59},[25,131986,1676],{"class":244},[194,131988,131989],{"start":75},[106,131990,131991],{},"html引css的程序",[15,131993,131994],{"className":126623,"code":131943,"language":126625,"meta":20,"style":20},[22,131995,131996,132018,132022,132032],{"__ignoreMap":20},[25,131997,131998,132000,132002,132004,132006,132008,132010,132012,132014,132016],{"class":27,"line":28},[25,131999,51682],{"class":51371},[25,132001,12545],{"class":244},[25,132003,99],{"class":51371},[25,132005,12545],{"class":244},[25,132007,10],{"class":51371},[25,132009,12545],{"class":244},[25,132011,103],{"class":51371},[25,132013,12545],{"class":244},[25,132015,106],{"class":51371},[25,132017,15682],{"class":244},[25,132019,132020],{"class":27,"line":39},[25,132021,131972],{"class":302},[25,132023,132024,132026,132028,132030],{"class":27,"line":51},[25,132025,128239],{"class":35},[25,132027,51508],{"class":244},[25,132029,60940],{"class":35},[25,132031,1403],{"class":244},[25,132033,132034],{"class":27,"line":59},[25,132035,1676],{"class":244},[194,132037,132038,132041,132044,132047,132050],{"start":83},[106,132039,132040],{},"浮动的盒子不会有外边距合并问题",[106,132042,132043],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[106,132045,132046],{},"ctrl+g快速定位行；shift+alt多个光标",[106,132048,132049],{},"学习上方各个模块的选择器起名方法，以后就这样用",[106,132051,132052],{},"在写选择器时尽量写全一些，例如",[15,132054,132056],{"className":126623,"code":132055,"language":126625,"meta":20,"style":20},"\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",[22,132057,132058,132063,132079,132084,132099,132104,132119,132124,132139,132144],{"__ignoreMap":20},[25,132059,132060],{"class":27,"line":28},[25,132061,132062],{"class":302},"\u002F* 静态定位（默认） *\u002F\n",[25,132064,132065,132068,132070,132072,132074,132077],{"class":27,"line":39},[25,132066,132067],{"class":31},".static",[25,132069,79878],{"class":244},[25,132071,128983],{"class":35},[25,132073,51508],{"class":244},[25,132075,132076],{"class":35},"static",[25,132078,129553],{"class":244},[25,132080,132081],{"class":27,"line":51},[25,132082,132083],{"class":302},"\u002F* 相对定位 *\u002F\n",[25,132085,132086,132089,132091,132093,132095,132097],{"class":27,"line":59},[25,132087,132088],{"class":31},".relative",[25,132090,79878],{"class":244},[25,132092,128983],{"class":35},[25,132094,51508],{"class":244},[25,132096,54835],{"class":35},[25,132098,129553],{"class":244},[25,132100,132101],{"class":27,"line":67},[25,132102,132103],{"class":302},"\u002F* 绝对定位 *\u002F\n",[25,132105,132106,132109,132111,132113,132115,132117],{"class":27,"line":75},[25,132107,132108],{"class":31},".absolute",[25,132110,79878],{"class":244},[25,132112,128983],{"class":35},[25,132114,51508],{"class":244},[25,132116,54902],{"class":35},[25,132118,129553],{"class":244},[25,132120,132121],{"class":27,"line":83},[25,132122,132123],{"class":302},"\u002F* 固定定位 *\u002F\n",[25,132125,132126,132129,132131,132133,132135,132137],{"class":27,"line":91},[25,132127,132128],{"class":31},".fixed",[25,132130,79878],{"class":244},[25,132132,128983],{"class":35},[25,132134,51508],{"class":244},[25,132136,86304],{"class":35},[25,132138,129553],{"class":244},[25,132140,132141],{"class":27,"line":1429},[25,132142,132143],{"class":302},"\u002F* 粘性定位 *\u002F\n",[25,132145,132146,132149,132151,132153,132155,132158],{"class":27,"line":1441},[25,132147,132148],{"class":31},".sticky",[25,132150,79878],{"class":244},[25,132152,128983],{"class":35},[25,132154,51508],{"class":244},[25,132156,132157],{"class":35},"sticky",[25,132159,129553],{"class":244},[194,132161,132162,132165],{"start":1728},[106,132163,132164],{},"一定要用好注释",[106,132166,132167],{},"浮动的盒子不会有外边距合并的问题",[159,132169,131511],{},{"title":20,"searchDepth":39,"depth":39,"links":132171},[132172,132173],{"id":131548,"depth":39,"text":131549},{"id":131612,"depth":39,"text":131613,"children":132174},[132175,132176,132177,132178,132179,132180,132181],{"id":131616,"depth":51,"text":131617},{"id":131722,"depth":51,"text":131723},{"id":131758,"depth":51,"text":131759},{"id":131779,"depth":51,"text":131780},{"id":131814,"depth":51,"text":131815},{"id":131847,"depth":51,"text":131848},{"id":131922,"depth":51,"text":131923},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131540,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132188,"title":132189,"body":132190,"description":164,"extension":165,"meta":133676,"navigation":167,"path":133677,"seo":133678,"stem":133679,"__hash__":133680},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132191,"toc":133668},[132192,132195,132199,132203,132214,132218,132235,132279,132312,132315,132332,132335,132338,132382,132386,132390,132393,132396,132400,132403,132414,132477,132518,132521,132536,132590,132598,132601,132612,132666,132692,132695,132708,132762,132794,132848,132871,132925,132928,132931,132938,132992,133013,133067,133070,133073,133158,133166,133223,133246,133250,133253,133271,133275,133294,133348,133386,133390,133393,133396,133418,133422,133430,133433,133438,133449,133452,133456,133470,133514,133517,133521,133524,133529,133555,133560,133637,133640,133644,133647,133650,133653,133656,133659,133662,133665],[10,132193,132189],{"id":132194},"_11-传统布局与定位体系",[182,132196,132198],{"id":132197},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[210,132200,132202],{"id":132201},"_1111-普通流标准流","11.1.1 普通流（标准流）",[103,132204,132205,132208,132211],{},[106,132206,132207],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[106,132209,132210],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[106,132212,132213],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[210,132215,132217],{"id":132216},"_1112-浮动","11.1.2 浮动",[103,132219,132220,132223,132226,132229,132232],{},[106,132221,132222],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[106,132224,132225],{},"浮动可以改变元素标签默认的排列方式",[106,132227,132228],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[106,132230,132231],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[106,132233,132234],{},"在使用行内块转换时盒子之间是有空隙的",[15,132236,132237],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},[22,132238,132239,132245,132255,132259,132265,132275],{"__ignoreMap":20},[25,132240,132241,132243],{"class":27,"line":28},[25,132242,131096],{"class":31},[25,132244,15682],{"class":244},[25,132246,132247,132249,132251,132253],{"class":27,"line":39},[25,132248,131103],{"class":35},[25,132250,51508],{"class":244},[25,132252,23846],{"class":35},[25,132254,1403],{"class":244},[25,132256,132257],{"class":27,"line":51},[25,132258,1676],{"class":244},[25,132260,132261,132263],{"class":27,"line":59},[25,132262,131118],{"class":31},[25,132264,15682],{"class":244},[25,132266,132267,132269,132271,132273],{"class":27,"line":67},[25,132268,131103],{"class":35},[25,132270,51508],{"class":244},[25,132272,72593],{"class":35},[25,132274,1403],{"class":244},[25,132276,132277],{"class":27,"line":75},[25,132278,1676],{"class":244},[380,132280,132281,132289],{},[383,132282,132283],{},[386,132284,132285,132287],{},[389,132286,127087],{"align":23846},[389,132288,27560],{"align":23846},[427,132290,132291,132298,132305],{},[386,132292,132293,132295],{},[432,132294,54808],{"align":23846},[432,132296,132297],{"align":23846},"元素不浮动（默认值）",[386,132299,132300,132302],{},[432,132301,23846],{"align":23846},[432,132303,132304],{"align":23846},"元素向左浮动",[386,132306,132307,132309],{},[432,132308,72593],{"align":23846},[432,132310,132311],{"align":23846},"元素向右浮动",[99,132313,132314],{},"浮动重点：",[103,132316,132317,132320,132323,132326,132329],{},[106,132318,132319],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[106,132321,132322],{},"浮动的元素会一行内显示并且元素顶部对齐",[106,132324,132325],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[106,132327,132328],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[106,132330,132331],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[99,132333,132334],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[99,132336,132337],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[15,132339,132340],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},[22,132341,132342,132348,132358,132362,132368,132378],{"__ignoreMap":20},[25,132343,132344,132346],{"class":27,"line":28},[25,132345,131096],{"class":31},[25,132347,15682],{"class":244},[25,132349,132350,132352,132354,132356],{"class":27,"line":39},[25,132351,131103],{"class":35},[25,132353,51508],{"class":244},[25,132355,23846],{"class":35},[25,132357,1403],{"class":244},[25,132359,132360],{"class":27,"line":51},[25,132361,1676],{"class":244},[25,132363,132364,132366],{"class":27,"line":59},[25,132365,131118],{"class":31},[25,132367,15682],{"class":244},[25,132369,132370,132372,132374,132376],{"class":27,"line":67},[25,132371,131103],{"class":35},[25,132373,51508],{"class":244},[25,132375,72593],{"class":35},[25,132377,1403],{"class":244},[25,132379,132380],{"class":27,"line":75},[25,132381,1676],{"class":244},[210,132383,132385],{"id":132384},"_1113-定位","11.1.3 定位",[22108,132387,132389],{"id":132388},"_11131-使用场景","11.1.3.1 使用场景",[99,132391,132392],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[99,132394,132395],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22108,132397,132399],{"id":132398},"_11132-定位组成","11.1.3.2 定位组成",[99,132401,132402],{},"定位 = 定位模式 + 边偏移",[194,132404,132405],{},[106,132406,132407,132410,132411],{},[392,132408,132409],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[392,132412,132413],{},"定位模式",[15,132415,132417],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[22,132418,132419,132425,132439,132456,132473],{"__ignoreMap":20},[25,132420,132421,132423],{"class":27,"line":28},[25,132422,130471],{"class":31},[25,132424,15682],{"class":244},[25,132426,132427,132430,132432,132434,132436],{"class":27,"line":39},[25,132428,132429],{"class":35},"  position",[25,132431,51508],{"class":244},[25,132433,54835],{"class":35},[25,132435,130486],{"class":244},[25,132437,132438],{"class":302},"\u002F* 定位模式 *\u002F\n",[25,132440,132441,132444,132446,132448,132450,132453],{"class":27,"line":51},[25,132442,132443],{"class":35},"  top",[25,132445,51508],{"class":244},[25,132447,689],{"class":35},[25,132449,51563],{"class":240},[25,132451,132452],{"class":244},";           ",[25,132454,132455],{"class":302},"\u002F* 边偏移：上 *\u002F\n",[25,132457,132458,132461,132463,132465,132467,132470],{"class":27,"line":59},[25,132459,132460],{"class":35},"  left",[25,132462,51508],{"class":244},[25,132464,943],{"class":35},[25,132466,51563],{"class":240},[25,132468,132469],{"class":244},";          ",[25,132471,132472],{"class":302},"\u002F* 边偏移：左 *\u002F\n",[25,132474,132475],{"class":27,"line":67},[25,132476,1676],{"class":244},[380,132478,132479,132488],{},[383,132480,132481],{},[386,132482,132483,132485],{},[389,132484,395],{"align":23846},[389,132486,132487],{"align":23846},"语义",[427,132489,132490,132497,132504,132511],{},[386,132491,132492,132494],{},[432,132493,132076],{"align":23846},[432,132495,132496],{"align":23846},"静态定位",[386,132498,132499,132501],{},[432,132500,54835],{"align":23846},[432,132502,132503],{"align":23846},"相对定位",[386,132505,132506,132508],{},[432,132507,54902],{"align":23846},[432,132509,132510],{"align":23846},"绝对定位",[386,132512,132513,132515],{},[432,132514,86304],{"align":23846},[432,132516,132517],{"align":23846},"固定定位",[99,132519,132520],{},"（1）静态定位：",[103,132522,132523,132534],{},[106,132524,132525,132526,132529,132530,132533],{},"静态定位是元素的 ",[392,132527,132528],{},"默认定位方式"," ， ",[392,132531,132532],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[106,132535,5291],{},[15,132537,132538],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},[22,132539,132540,132546,132558,132572,132586],{"__ignoreMap":20},[25,132541,132542,132544],{"class":27,"line":28},[25,132543,130471],{"class":31},[25,132545,15682],{"class":244},[25,132547,132548,132550,132552,132554,132556],{"class":27,"line":39},[25,132549,132429],{"class":35},[25,132551,51508],{"class":244},[25,132553,54835],{"class":35},[25,132555,130486],{"class":244},[25,132557,132438],{"class":302},[25,132559,132560,132562,132564,132566,132568,132570],{"class":27,"line":51},[25,132561,132443],{"class":35},[25,132563,51508],{"class":244},[25,132565,689],{"class":35},[25,132567,51563],{"class":240},[25,132569,132452],{"class":244},[25,132571,132455],{"class":302},[25,132573,132574,132576,132578,132580,132582,132584],{"class":27,"line":59},[25,132575,132460],{"class":35},[25,132577,51508],{"class":244},[25,132579,943],{"class":35},[25,132581,51563],{"class":240},[25,132583,132469],{"class":244},[25,132585,132472],{"class":302},[25,132587,132588],{"class":27,"line":67},[25,132589,1676],{"class":244},[103,132591,132592,132595],{},[106,132593,132594],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[106,132596,132597],{},"静态定位在布局时我们几乎不用的",[99,132599,132600],{},"（2）相对定位",[103,132602,132603,132610],{},[106,132604,132605,132606,132609],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[392,132607,132608],{},"原来的位置"," 来说的（自恋型）",[106,132611,5291],{},[15,132613,132614],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},[22,132615,132616,132622,132634,132648,132662],{"__ignoreMap":20},[25,132617,132618,132620],{"class":27,"line":28},[25,132619,130471],{"class":31},[25,132621,15682],{"class":244},[25,132623,132624,132626,132628,132630,132632],{"class":27,"line":39},[25,132625,132429],{"class":35},[25,132627,51508],{"class":244},[25,132629,54835],{"class":35},[25,132631,130486],{"class":244},[25,132633,132438],{"class":302},[25,132635,132636,132638,132640,132642,132644,132646],{"class":27,"line":51},[25,132637,132443],{"class":35},[25,132639,51508],{"class":244},[25,132641,689],{"class":35},[25,132643,51563],{"class":240},[25,132645,132452],{"class":244},[25,132647,132455],{"class":302},[25,132649,132650,132652,132654,132656,132658,132660],{"class":27,"line":59},[25,132651,132460],{"class":35},[25,132653,51508],{"class":244},[25,132655,943],{"class":35},[25,132657,51563],{"class":240},[25,132659,132469],{"class":244},[25,132661,132472],{"class":302},[25,132663,132664],{"class":27,"line":67},[25,132665,1676],{"class":244},[103,132667,132668],{},[106,132669,132670,132671,132673,132674,132676,132677,132680,132681,132684,132685,132687,132688,132691],{},"相对定位的特点：",[53787,132672],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53787,132675],{},"  ② ",[392,132678,132679],{},"原来"," 在标准流的 ",[392,132682,132683],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53787,132686],{},"  ③因此， ",[392,132689,132690],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[99,132693,132694],{},"（3）绝对定位",[103,132696,132697,132706],{},[106,132698,132699,132701,132702,132705],{},[392,132700,132510],{}," 是元素在移动位置的时候，是相对于它 ",[392,132703,132704],{},"祖先元素"," 来说的（拼爹型）",[106,132707,5291],{},[15,132709,132710],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},[22,132711,132712,132718,132730,132744,132758],{"__ignoreMap":20},[25,132713,132714,132716],{"class":27,"line":28},[25,132715,130471],{"class":31},[25,132717,15682],{"class":244},[25,132719,132720,132722,132724,132726,132728],{"class":27,"line":39},[25,132721,132429],{"class":35},[25,132723,51508],{"class":244},[25,132725,54835],{"class":35},[25,132727,130486],{"class":244},[25,132729,132438],{"class":302},[25,132731,132732,132734,132736,132738,132740,132742],{"class":27,"line":51},[25,132733,132443],{"class":35},[25,132735,51508],{"class":244},[25,132737,689],{"class":35},[25,132739,51563],{"class":240},[25,132741,132452],{"class":244},[25,132743,132455],{"class":302},[25,132745,132746,132748,132750,132752,132754,132756],{"class":27,"line":59},[25,132747,132460],{"class":35},[25,132749,51508],{"class":244},[25,132751,943],{"class":35},[25,132753,51563],{"class":240},[25,132755,132469],{"class":244},[25,132757,132472],{"class":302},[25,132759,132760],{"class":27,"line":67},[25,132761,1676],{"class":244},[103,132763,132764,132779,132788,132791],{},[106,132765,132766,132767,132769,132770,132772,132773,132775,132776,132778],{},"绝对定位的特点：",[53787,132768],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53787,132771],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53787,132774],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53787,132777],{},"  (4)固定定位",[106,132780,132781,132783,132784,132787],{},[392,132782,132517],{}," 是元素 ",[392,132785,132786],{},"固定于浏览器可视区的位置"," 。（认死理型）",[106,132789,132790],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[106,132792,132793],{},"语法:",[15,132795,132796],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},[22,132797,132798,132804,132816,132830,132844],{"__ignoreMap":20},[25,132799,132800,132802],{"class":27,"line":28},[25,132801,130471],{"class":31},[25,132803,15682],{"class":244},[25,132805,132806,132808,132810,132812,132814],{"class":27,"line":39},[25,132807,132429],{"class":35},[25,132809,51508],{"class":244},[25,132811,54835],{"class":35},[25,132813,130486],{"class":244},[25,132815,132438],{"class":302},[25,132817,132818,132820,132822,132824,132826,132828],{"class":27,"line":51},[25,132819,132443],{"class":35},[25,132821,51508],{"class":244},[25,132823,689],{"class":35},[25,132825,51563],{"class":240},[25,132827,132452],{"class":244},[25,132829,132455],{"class":302},[25,132831,132832,132834,132836,132838,132840,132842],{"class":27,"line":59},[25,132833,132460],{"class":35},[25,132835,51508],{"class":244},[25,132837,943],{"class":35},[25,132839,51563],{"class":240},[25,132841,132469],{"class":244},[25,132843,132472],{"class":302},[25,132845,132846],{"class":27,"line":67},[25,132847,1676],{"class":244},[103,132849,132850,132859],{},[106,132851,132852,132853,132855,132856,132858],{},"特点:",[53787,132854],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53787,132857],{},"  ②固定定位不再占有原先的位置,完全脱标",[106,132860,132861,132862,132864,132865,132867,132868,132870],{},"固定在版心位置的方法:",[53787,132863],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53787,132866],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53787,132869],{},"  实例：",[15,132872,132873],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},[22,132874,132875,132881,132893,132907,132921],{"__ignoreMap":20},[25,132876,132877,132879],{"class":27,"line":28},[25,132878,130471],{"class":31},[25,132880,15682],{"class":244},[25,132882,132883,132885,132887,132889,132891],{"class":27,"line":39},[25,132884,132429],{"class":35},[25,132886,51508],{"class":244},[25,132888,54835],{"class":35},[25,132890,130486],{"class":244},[25,132892,132438],{"class":302},[25,132894,132895,132897,132899,132901,132903,132905],{"class":27,"line":51},[25,132896,132443],{"class":35},[25,132898,51508],{"class":244},[25,132900,689],{"class":35},[25,132902,51563],{"class":240},[25,132904,132452],{"class":244},[25,132906,132455],{"class":302},[25,132908,132909,132911,132913,132915,132917,132919],{"class":27,"line":59},[25,132910,132460],{"class":35},[25,132912,51508],{"class":244},[25,132914,943],{"class":35},[25,132916,51563],{"class":240},[25,132918,132469],{"class":244},[25,132920,132472],{"class":302},[25,132922,132923],{"class":27,"line":67},[25,132924,1676],{"class":244},[155,132926],{"style":126479,"src":132927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[99,132929,132930],{},"(5)粘性定位",[103,132932,132933,132936],{},[106,132934,132935],{},"粘性定位可以被认为是相对定位和固定定位的混合",[106,132937,5291],{},[15,132939,132940],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},[22,132941,132942,132948,132960,132974,132988],{"__ignoreMap":20},[25,132943,132944,132946],{"class":27,"line":28},[25,132945,130471],{"class":31},[25,132947,15682],{"class":244},[25,132949,132950,132952,132954,132956,132958],{"class":27,"line":39},[25,132951,132429],{"class":35},[25,132953,51508],{"class":244},[25,132955,54835],{"class":35},[25,132957,130486],{"class":244},[25,132959,132438],{"class":302},[25,132961,132962,132964,132966,132968,132970,132972],{"class":27,"line":51},[25,132963,132443],{"class":35},[25,132965,51508],{"class":244},[25,132967,689],{"class":35},[25,132969,51563],{"class":240},[25,132971,132452],{"class":244},[25,132973,132455],{"class":302},[25,132975,132976,132978,132980,132982,132984,132986],{"class":27,"line":59},[25,132977,132460],{"class":35},[25,132979,51508],{"class":244},[25,132981,943],{"class":35},[25,132983,51563],{"class":240},[25,132985,132469],{"class":244},[25,132987,132472],{"class":302},[25,132989,132990],{"class":27,"line":67},[25,132991,1676],{"class":244},[103,132993,132994],{},[106,132995,132996,132997,132999,133000,133002,133003,133005,133006,133009,133010,133012],{},"粘性定位的特点：",[53787,132998],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53787,133001],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53787,133004],{},"  ③必须添加 top 、left、right、bottom ",[392,133007,133008],{},"其中一个"," 才有效",[53787,133011],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[15,133014,133015],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},[22,133016,133017,133023,133035,133049,133063],{"__ignoreMap":20},[25,133018,133019,133021],{"class":27,"line":28},[25,133020,130471],{"class":31},[25,133022,15682],{"class":244},[25,133024,133025,133027,133029,133031,133033],{"class":27,"line":39},[25,133026,132429],{"class":35},[25,133028,51508],{"class":244},[25,133030,54835],{"class":35},[25,133032,130486],{"class":244},[25,133034,132438],{"class":302},[25,133036,133037,133039,133041,133043,133045,133047],{"class":27,"line":51},[25,133038,132443],{"class":35},[25,133040,51508],{"class":244},[25,133042,689],{"class":35},[25,133044,51563],{"class":240},[25,133046,132452],{"class":244},[25,133048,132455],{"class":302},[25,133050,133051,133053,133055,133057,133059,133061],{"class":27,"line":59},[25,133052,132460],{"class":35},[25,133054,51508],{"class":244},[25,133056,943],{"class":35},[25,133058,51563],{"class":240},[25,133060,132469],{"class":244},[25,133062,132472],{"class":302},[25,133064,133065],{"class":27,"line":67},[25,133066,1676],{"class":244},[155,133068],{"style":126479,"src":133069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[99,133071,133072],{},"(6)总结",[380,133074,133075,133090],{},[383,133076,133077],{},[386,133078,133079,133081,133084,133087],{},[389,133080,132413],{"align":23846},[389,133082,133083],{"align":23846},"是否脱标",[389,133085,133086],{"align":23846},"移动位置",[389,133088,133089],{"align":23846},"是否常用",[427,133091,133092,133105,133119,133133,133146],{},[386,133093,133094,133097,133099,133102],{},[432,133095,133096],{"align":23846},"Static 静态定位",[432,133098,104749],{"align":23846},[432,133100,133101],{"align":23846},"不能使用边偏移",[432,133103,133104],{"align":23846},"很少",[386,133106,133107,133110,133113,133116],{},[432,133108,133109],{"align":23846},"Relative 相对定位",[432,133111,133112],{"align":23846},"否(占有位置)",[432,133114,133115],{"align":23846},"相对于自身位置移动",[432,133117,133118],{"align":23846},"基本单独使用",[386,133120,133121,133124,133127,133130],{},[432,133122,133123],{"align":23846},"Absolute 绝对定位",[432,133125,133126],{"align":23846},"是(不占有位置)",[432,133128,133129],{"align":23846},"带有定位的父级",[432,133131,133132],{"align":23846},"要和定位父级元素搭配使用",[386,133134,133135,133138,133140,133143],{},[432,133136,133137],{"align":23846},"Fixed 固定定位",[432,133139,133126],{"align":23846},[432,133141,133142],{"align":23846},"浏览器可视区",[432,133144,133145],{"align":23846},"单独使用,不需要父级",[386,133147,133148,133151,133153,133155],{},[432,133149,133150],{"align":23846},"Sticky 粘性定位",[432,133152,133112],{"align":23846},[432,133154,133142],{"align":23846},[432,133156,133157],{"align":23846},"当前阶段少",[194,133159,133160],{"start":39},[106,133161,133162,133165],{},[392,133163,133164],{},"边偏移"," 则决定了该元素的最终位置",[380,133167,133168,133179],{},[383,133169,133170],{},[386,133171,133172,133175,133177],{},[389,133173,133174],{"align":23846},"边偏移属性",[389,133176,27563],{"align":23846},[389,133178,27560],{"align":23846},[427,133180,133181,133192,133203,133213],{},[386,133182,133183,133186,133189],{},[432,133184,133185],{"align":23846},"top",[432,133187,133188],{"align":23846},"top: 80px;",[432,133190,133191],{"align":23846},"顶端偏移量，定义元素相对于父元素上边线的距离",[386,133193,133194,133197,133200],{},[432,133195,133196],{"align":23846},"bottom",[432,133198,133199],{"align":23846},"bottom: 80px ;",[432,133201,133202],{"align":23846},"底部偏移量，定义元素相对于其父元素下边线的距离",[386,133204,133205,133207,133210],{},[432,133206,23846],{"align":23846},[432,133208,133209],{"align":23846},"left: 80px ;",[432,133211,133212],{"align":23846},"左侧偏移量，定义元素相对于其父元素左边线的距离",[386,133214,133215,133217,133220],{},[432,133216,72593],{"align":23846},[432,133218,133219],{"align":23846},"right: 80px ;",[432,133221,133222],{"align":23846},"右侧偏移量，定义元素相对于其父元素右边线的距离",[103,133224,133225],{},[106,133226,9135,133227,133229,133230,133232,133233,133235,133236,133239,133240,133242,133243,133245],{},[53787,133228],{},"  ① ",[392,133231,133164],{}," 需要和 ",[392,133234,132413],{}," 联合使用， ",[392,133237,133238],{},"单独使用无效"," ；",[53787,133241],{},"  ②top和bottom不要同时使用",[53787,133244],{},"  ③left和right不要同时使用",[22108,133247,133249],{"id":133248},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[99,133251,133252],{},"子级是绝对定位的话，父级要用相对定位",[103,133254,133255,133258,133261,133264],{},[106,133256,133257],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[106,133259,133260],{},"父盒子需要加定位限制子盒子在父盒子内显示",[106,133262,133263],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[106,133265,133266,133267,133270],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[392,133268,133269],{},"子绝父绝"," 也会遇到",[22108,133272,133274],{"id":133273},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[103,133276,133277,133292],{},[106,133278,133279,133280,133283,133284,133287,133288,133291],{},"在使用 ",[392,133281,133282],{},"定位"," 布局时，可能会 ",[392,133285,133286],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[392,133289,133290],{},"z-index"," 来控制盒子的前后次序 (z轴)",[106,133293,5291],{},[15,133295,133296],{"className":126623,"code":132416,"language":126625,"meta":20,"style":20},[22,133297,133298,133304,133316,133330,133344],{"__ignoreMap":20},[25,133299,133300,133302],{"class":27,"line":28},[25,133301,130471],{"class":31},[25,133303,15682],{"class":244},[25,133305,133306,133308,133310,133312,133314],{"class":27,"line":39},[25,133307,132429],{"class":35},[25,133309,51508],{"class":244},[25,133311,54835],{"class":35},[25,133313,130486],{"class":244},[25,133315,132438],{"class":302},[25,133317,133318,133320,133322,133324,133326,133328],{"class":27,"line":51},[25,133319,132443],{"class":35},[25,133321,51508],{"class":244},[25,133323,689],{"class":35},[25,133325,51563],{"class":240},[25,133327,132452],{"class":244},[25,133329,132455],{"class":302},[25,133331,133332,133334,133336,133338,133340,133342],{"class":27,"line":59},[25,133333,132460],{"class":35},[25,133335,51508],{"class":244},[25,133337,943],{"class":35},[25,133339,51563],{"class":240},[25,133341,132469],{"class":244},[25,133343,132472],{"class":302},[25,133345,133346],{"class":27,"line":67},[25,133347,1676],{"class":244},[103,133349,133350],{},[106,133351,133352,133353,133229,133355,133357,133358,127786,133361,82610,133364,133366,133367,133369,133370,133373,133374,133239,133377,133379,133380,133383,133385],{},"z-index的特性",[53787,133354],{},[392,133356,127087],{}," ： ",[392,133359,133360],{},"正整数",[392,133362,133363],{},"负整数",[392,133365,434],{}," ，默认值是 0，数值越大，盒子越靠上；",[53787,133368],{},"  ②如果 ",[392,133371,133372],{},"属性值相同"," ，则按照书写顺序， ",[392,133375,133376],{},"后来居上",[53787,133378],{},"  ③数字后面 ",[392,133381,133382],{},"不能加单位",[53787,133384],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22108,133387,133389],{"id":133388},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[99,133391,133392],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[99,133394,133395],{},"方法:",[103,133397,133398,133408],{},[106,133399,133400,133401,133404,133405],{},"left: 50%; 让 ",[392,133402,133403],{},"盒子的左侧"," 移动到 ",[392,133406,133407],{},"父级元素的水平中心位置",[106,133409,133410,133411,133414,133415],{},"margin-left: -100px; 让盒子 ",[392,133412,133413],{},"向左"," 移动 ",[392,133416,133417],{},"自身宽度的一半",[22108,133419,133421],{"id":133420},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[194,133423,133424,133427],{},[106,133425,133426],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[106,133428,133429],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[99,133431,133432],{},"也就是说绝对定位和固定定位和浮动类似",[194,133434,133435],{"start":51},[106,133436,133437],{},"display 是显示模式， 可以改变显示模式有以下方式:",[103,133439,133440,133443,133446],{},[106,133441,133442],{},"可以用inline-block 转换为行内块",[106,133444,133445],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[106,133447,133448],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[99,133450,133451],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22108,133453,133455],{"id":133454},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[194,133457,133458,133461,133464,133467],{},[106,133459,133460],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[106,133462,133463],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[106,133465,133466],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[106,133468,133469],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[15,133471,133472],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},[22,133473,133474,133480,133490,133494,133500,133510],{"__ignoreMap":20},[25,133475,133476,133478],{"class":27,"line":28},[25,133477,131096],{"class":31},[25,133479,15682],{"class":244},[25,133481,133482,133484,133486,133488],{"class":27,"line":39},[25,133483,131103],{"class":35},[25,133485,51508],{"class":244},[25,133487,23846],{"class":35},[25,133489,1403],{"class":244},[25,133491,133492],{"class":27,"line":51},[25,133493,1676],{"class":244},[25,133495,133496,133498],{"class":27,"line":59},[25,133497,131118],{"class":31},[25,133499,15682],{"class":244},[25,133501,133502,133504,133506,133508],{"class":27,"line":67},[25,133503,131103],{"class":35},[25,133505,51508],{"class":244},[25,133507,72593],{"class":35},[25,133509,1403],{"class":244},[25,133511,133512],{"class":27,"line":75},[25,133513,1676],{"class":244},[155,133515],{"style":126479,"src":133516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22108,133518,133520],{"id":133519},"_11138-轮播图","11.1.3.8 轮播图",[155,133522],{"style":126479,"src":133523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[194,133525,133526],{},[106,133527,133528],{},"制作顺序:",[103,133530,133531,133534,133537,133546],{},[106,133532,133533],{},"大盒子我们类名为： tb-promo 淘宝广告",[106,133535,133536],{},"里面先放一张图片",[106,133538,133539,133540,133542,133543,133545],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53787,133541],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53787,133544],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[106,133547,133548,133549,133551,133552,133554],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53787,133550],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53787,133553],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[194,133556,133557],{"start":39},[106,133558,133559],{},"代码模块",[15,133561,133563],{"className":126623,"code":133562,"language":126625,"meta":20,"style":20},"\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",[22,133564,133565,133570,133577,133587,133597,133607,133611,133616,133623,133633],{"__ignoreMap":20},[25,133566,133567],{"class":27,"line":28},[25,133568,133569],{"class":302},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[25,133571,133572,133575],{"class":27,"line":39},[25,133573,133574],{"class":31},".son",[25,133576,15682],{"class":244},[25,133578,133579,133581,133583,133585],{"class":27,"line":51},[25,133580,132429],{"class":35},[25,133582,51508],{"class":244},[25,133584,54902],{"class":35},[25,133586,1403],{"class":244},[25,133588,133589,133591,133593,133595],{"class":27,"line":59},[25,133590,132443],{"class":35},[25,133592,51508],{"class":244},[25,133594,434],{"class":35},[25,133596,1403],{"class":244},[25,133598,133599,133601,133603,133605],{"class":27,"line":67},[25,133600,132460],{"class":35},[25,133602,51508],{"class":244},[25,133604,434],{"class":35},[25,133606,1403],{"class":244},[25,133608,133609],{"class":27,"line":75},[25,133610,1676],{"class":244},[25,133612,133613],{"class":27,"line":83},[25,133614,133615],{"class":302},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[25,133617,133618,133621],{"class":27,"line":91},[25,133619,133620],{"class":31},".father",[25,133622,15682],{"class":244},[25,133624,133625,133627,133629,133631],{"class":27,"line":1429},[25,133626,132429],{"class":35},[25,133628,51508],{"class":244},[25,133630,54835],{"class":35},[25,133632,1403],{"class":244},[25,133634,133635],{"class":27,"line":1441},[25,133636,1676],{"class":244},[99,133638,133639],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[210,133641,133643],{"id":133642},"_1114-定位数值的移动","11.1.4 定位数值的移动",[155,133645],{"style":126479,"src":133646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[99,133648,133649],{},"✨ 黄金口诀：",[99,133651,133652],{},"\"TOP正下负上，LEFT正右负左\"",[99,133654,133655],{},"\"RIGHT正左负右，BOTTOM正上负下",[99,133657,133658],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[99,133660,133661],{},"✨ 简单记：",[99,133663,133664],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[159,133666,133667],{},"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":20,"searchDepth":39,"depth":39,"links":133669},[133670],{"id":132197,"depth":39,"text":132198,"children":133671},[133672,133673,133674,133675],{"id":132201,"depth":51,"text":132202},{"id":132216,"depth":51,"text":132217},{"id":132384,"depth":51,"text":132385},{"id":133642,"depth":51,"text":133643},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132189,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133682,"title":133683,"body":133684,"description":164,"extension":165,"meta":135107,"navigation":167,"path":135108,"seo":135109,"stem":135110,"__hash__":135111},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133685,"toc":135086},[133686,133689,133693,133701,133705,133710,133718,133730,133734,133739,133747,133758,133762,133767,133808,133816,133820,133823,133826,133829,133923,133926,134020,134023,134117,134120,134123,134158,134161,134164,134194,134197,134200,134203,134206,134209,134212,134215,134285,134288,134292,134296,134337,134341,134347,134350,134353,134357,134360,134363,134366,134447,134450,134453,134457,134461,134464,134467,134470,134473,134476,134482,134491,134495,134514,134518,134528,134531,134534,134537,134540,134543,134546,134549,134552,134561,134565,134574,134577,134582,134635,134640,134806,134809,134812,134817,134820,134823,134826,134829,134834,134982,134985,134988,134993,134996,135001,135035,135038,135041,135045,135048,135055,135058,135061,135064,135067,135070,135073,135076,135080,135083],[10,133687,133683],{"id":133688},"_12-显示隐藏与图形资源",[182,133690,133692],{"id":133691},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[103,133694,133695,133698],{},[106,133696,133697],{},"目的:让一个元素在页面中消失或者显示出来",[106,133699,133700],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[210,133702,133704],{"id":133703},"_1211-display-显示","12.1.1 display 显示",[194,133706,133707],{},[106,133708,133709],{},"display 设置或检索对象是否及如何显示",[103,133711,133712,133715],{},[106,133713,133714],{},"display: none;隐藏对象",[106,133716,133717],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[194,133719,133720,133727],{"start":39},[106,133721,133722,133723,133726],{},"特点： display 隐藏元素后， ",[392,133724,133725],{},"不再占"," 有原来的位置",[106,133728,133729],{},"在js中使用非常的广泛",[210,133731,133733],{"id":133732},"_1212-visibility可见性","12.1.2 visibility可见性",[194,133735,133736],{},[106,133737,133738],{},"visibility 属性用于指定一个元素应可见还是隐藏",[103,133740,133741,133744],{},[106,133742,133743],{},"visibility： visible；元素可见",[106,133745,133746],{},"visibility：hidden；元素隐藏",[194,133748,133749,133752,133755],{"start":39},[106,133750,133751],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[106,133753,133754],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[106,133756,133757],{},"隐藏后继续占有原有位置",[210,133759,133761],{"id":133760},"_1213-overflow溢出","12.1.3 overflow溢出",[103,133763,133764],{},[106,133765,133766],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[380,133768,133769,133777],{},[383,133770,133771],{},[386,133772,133773,133775],{},[389,133774,127087],{"align":23846},[389,133776,27560],{"align":23846},[427,133778,133779,133787,133794,133801],{},[386,133780,133781,133784],{},[432,133782,133783],{"align":23846},"visible",[432,133785,133786],{"align":23846},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[386,133788,133789,133791],{},[432,133790,61785],{"align":23846},[432,133792,133793],{"align":23846},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[386,133795,133796,133798],{},[432,133797,129043],{"align":23846},[432,133799,133800],{"align":23846},"不管超出内容否，总是显示滚动条",[386,133802,133803,133805],{},[432,133804,72734],{"align":23846},[432,133806,133807],{"align":23846},"超出自动显示滚动条，不超出不显示滚动条",[103,133809,133810,133813],{},[106,133811,133812],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[106,133814,133815],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[210,133817,133819],{"id":133818},"_1214-案例收获","12.1.4 案例收获",[155,133821],{"style":126479,"src":133822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[99,133824,133825],{},"问题：没做出来动态效果，使用hover没实现",[99,133827,133828],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[15,133830,133831],{"className":126623,"code":132055,"language":126625,"meta":20,"style":20},[22,133832,133833,133837,133851,133855,133869,133873,133887,133891,133905,133909],{"__ignoreMap":20},[25,133834,133835],{"class":27,"line":28},[25,133836,132062],{"class":302},[25,133838,133839,133841,133843,133845,133847,133849],{"class":27,"line":39},[25,133840,132067],{"class":31},[25,133842,79878],{"class":244},[25,133844,128983],{"class":35},[25,133846,51508],{"class":244},[25,133848,132076],{"class":35},[25,133850,129553],{"class":244},[25,133852,133853],{"class":27,"line":51},[25,133854,132083],{"class":302},[25,133856,133857,133859,133861,133863,133865,133867],{"class":27,"line":59},[25,133858,132088],{"class":31},[25,133860,79878],{"class":244},[25,133862,128983],{"class":35},[25,133864,51508],{"class":244},[25,133866,54835],{"class":35},[25,133868,129553],{"class":244},[25,133870,133871],{"class":27,"line":67},[25,133872,132103],{"class":302},[25,133874,133875,133877,133879,133881,133883,133885],{"class":27,"line":75},[25,133876,132108],{"class":31},[25,133878,79878],{"class":244},[25,133880,128983],{"class":35},[25,133882,51508],{"class":244},[25,133884,54902],{"class":35},[25,133886,129553],{"class":244},[25,133888,133889],{"class":27,"line":83},[25,133890,132123],{"class":302},[25,133892,133893,133895,133897,133899,133901,133903],{"class":27,"line":91},[25,133894,132128],{"class":31},[25,133896,79878],{"class":244},[25,133898,128983],{"class":35},[25,133900,51508],{"class":244},[25,133902,86304],{"class":35},[25,133904,129553],{"class":244},[25,133906,133907],{"class":27,"line":1429},[25,133908,132143],{"class":302},[25,133910,133911,133913,133915,133917,133919,133921],{"class":27,"line":1441},[25,133912,132148],{"class":31},[25,133914,79878],{"class":244},[25,133916,128983],{"class":35},[25,133918,51508],{"class":244},[25,133920,132157],{"class":35},[25,133922,129553],{"class":244},[99,133924,133925],{},"完整代码：",[15,133927,133928],{"className":126623,"code":132055,"language":126625,"meta":20,"style":20},[22,133929,133930,133934,133948,133952,133966,133970,133984,133988,134002,134006],{"__ignoreMap":20},[25,133931,133932],{"class":27,"line":28},[25,133933,132062],{"class":302},[25,133935,133936,133938,133940,133942,133944,133946],{"class":27,"line":39},[25,133937,132067],{"class":31},[25,133939,79878],{"class":244},[25,133941,128983],{"class":35},[25,133943,51508],{"class":244},[25,133945,132076],{"class":35},[25,133947,129553],{"class":244},[25,133949,133950],{"class":27,"line":51},[25,133951,132083],{"class":302},[25,133953,133954,133956,133958,133960,133962,133964],{"class":27,"line":59},[25,133955,132088],{"class":31},[25,133957,79878],{"class":244},[25,133959,128983],{"class":35},[25,133961,51508],{"class":244},[25,133963,54835],{"class":35},[25,133965,129553],{"class":244},[25,133967,133968],{"class":27,"line":67},[25,133969,132103],{"class":302},[25,133971,133972,133974,133976,133978,133980,133982],{"class":27,"line":75},[25,133973,132108],{"class":31},[25,133975,79878],{"class":244},[25,133977,128983],{"class":35},[25,133979,51508],{"class":244},[25,133981,54902],{"class":35},[25,133983,129553],{"class":244},[25,133985,133986],{"class":27,"line":83},[25,133987,132123],{"class":302},[25,133989,133990,133992,133994,133996,133998,134000],{"class":27,"line":91},[25,133991,132128],{"class":31},[25,133993,79878],{"class":244},[25,133995,128983],{"class":35},[25,133997,51508],{"class":244},[25,133999,86304],{"class":35},[25,134001,129553],{"class":244},[25,134003,134004],{"class":27,"line":1429},[25,134005,132143],{"class":302},[25,134007,134008,134010,134012,134014,134016,134018],{"class":27,"line":1441},[25,134009,132148],{"class":31},[25,134011,79878],{"class":244},[25,134013,128983],{"class":35},[25,134015,51508],{"class":244},[25,134017,132157],{"class":35},[25,134019,129553],{"class":244},[99,134021,134022],{},"分布思路重点详解：",[15,134024,134025],{"className":126623,"code":132055,"language":126625,"meta":20,"style":20},[22,134026,134027,134031,134045,134049,134063,134067,134081,134085,134099,134103],{"__ignoreMap":20},[25,134028,134029],{"class":27,"line":28},[25,134030,132062],{"class":302},[25,134032,134033,134035,134037,134039,134041,134043],{"class":27,"line":39},[25,134034,132067],{"class":31},[25,134036,79878],{"class":244},[25,134038,128983],{"class":35},[25,134040,51508],{"class":244},[25,134042,132076],{"class":35},[25,134044,129553],{"class":244},[25,134046,134047],{"class":27,"line":51},[25,134048,132083],{"class":302},[25,134050,134051,134053,134055,134057,134059,134061],{"class":27,"line":59},[25,134052,132088],{"class":31},[25,134054,79878],{"class":244},[25,134056,128983],{"class":35},[25,134058,51508],{"class":244},[25,134060,54835],{"class":35},[25,134062,129553],{"class":244},[25,134064,134065],{"class":27,"line":67},[25,134066,132103],{"class":302},[25,134068,134069,134071,134073,134075,134077,134079],{"class":27,"line":75},[25,134070,132108],{"class":31},[25,134072,79878],{"class":244},[25,134074,128983],{"class":35},[25,134076,51508],{"class":244},[25,134078,54902],{"class":35},[25,134080,129553],{"class":244},[25,134082,134083],{"class":27,"line":83},[25,134084,132123],{"class":302},[25,134086,134087,134089,134091,134093,134095,134097],{"class":27,"line":91},[25,134088,132128],{"class":31},[25,134090,79878],{"class":244},[25,134092,128983],{"class":35},[25,134094,51508],{"class":244},[25,134096,86304],{"class":35},[25,134098,129553],{"class":244},[25,134100,134101],{"class":27,"line":1429},[25,134102,132143],{"class":302},[25,134104,134105,134107,134109,134111,134113,134115],{"class":27,"line":1441},[25,134106,132148],{"class":31},[25,134108,79878],{"class":244},[25,134110,128983],{"class":35},[25,134112,51508],{"class":244},[25,134114,132157],{"class":35},[25,134116,129553],{"class":244},[155,134118],{"style":126479,"src":134119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[99,134121,134122],{},"图片太大，盒子太小，此时需要修改图片的大小",[15,134124,134126],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[22,134127,134128],{"__ignoreMap":20},[25,134129,134130,134132,134134,134136,134138,134141,134143,134145,134148,134151,134153,134156],{"class":27,"line":28},[25,134131,1153],{"class":244},[25,134133,155],{"class":51371},[25,134135,55310],{"class":31},[25,134137,290],{"class":244},[25,134139,134140],{"class":45},"\"images\u002Fpic.jpg\"",[25,134142,55318],{"class":31},[25,134144,290],{"class":244},[25,134146,134147],{"class":45},"\"描述文字\"",[25,134149,134150],{"class":31}," title",[25,134152,290],{"class":244},[25,134154,134155],{"class":45},"\"悬停提示\"",[25,134157,51378],{"class":244},[155,134159],{"style":126479,"src":134160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[99,134162,134163],{},"制造遮罩层",[15,134165,134166],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,134167,134168],{"__ignoreMap":20},[25,134169,134170,134172,134174,134176,134178,134180,134182,134184,134186,134188,134190,134192],{"class":27,"line":28},[25,134171,1153],{"class":244},[25,134173,155],{"class":51371},[25,134175,55310],{"class":31},[25,134177,290],{"class":244},[25,134179,134140],{"class":45},[25,134181,55318],{"class":31},[25,134183,290],{"class":244},[25,134185,134147],{"class":45},[25,134187,134150],{"class":31},[25,134189,290],{"class":244},[25,134191,134155],{"class":45},[25,134193,51378],{"class":244},[99,134195,134196],{},"此时是这样的为标准流",[155,134198],{"style":126479,"src":134199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[99,134201,134202],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[99,134204,134205],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[99,134207,134208],{},"让他在中间，用center(background-position)",[99,134210,134211],{},"将需要变的尽可能放到一个盒子中",[99,134213,134214],{},"放大盒子上内部盒子发生变化",[15,134216,134218],{"className":126623,"code":134217,"language":126625,"meta":20,"style":20},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[22,134219,134220,134226,134236,134240,134247,134257,134269,134281],{"__ignoreMap":20},[25,134221,134222,134224],{"class":27,"line":28},[25,134223,127690],{"class":31},[25,134225,15682],{"class":244},[25,134227,134228,134230,134232,134234],{"class":27,"line":39},[25,134229,132429],{"class":35},[25,134231,51508],{"class":244},[25,134233,54835],{"class":35},[25,134235,1403],{"class":244},[25,134237,134238],{"class":27,"line":51},[25,134239,1676],{"class":244},[25,134241,134242,134245],{"class":27,"line":59},[25,134243,134244],{"class":31},".child",[25,134246,15682],{"class":244},[25,134248,134249,134251,134253,134255],{"class":27,"line":67},[25,134250,132429],{"class":35},[25,134252,51508],{"class":244},[25,134254,54902],{"class":35},[25,134256,1403],{"class":244},[25,134258,134259,134261,134263,134265,134267],{"class":27,"line":75},[25,134260,132443],{"class":35},[25,134262,51508],{"class":244},[25,134264,899],{"class":35},[25,134266,571],{"class":240},[25,134268,1403],{"class":244},[25,134270,134271,134273,134275,134277,134279],{"class":27,"line":83},[25,134272,132460],{"class":35},[25,134274,51508],{"class":244},[25,134276,899],{"class":35},[25,134278,571],{"class":240},[25,134280,1403],{"class":244},[25,134282,134283],{"class":27,"line":91},[25,134284,1676],{"class":244},[99,134286,134287],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[182,134289,134291],{"id":134290},"_122-精灵图","12.2 精灵图",[210,134293,134295],{"id":134294},"_1221-理解","12.2.1 理解",[194,134297,134298,134316],{},[106,134299,134300,134301,132529,134304,134307,134308,134311,134312,134315],{},"目的： ",[392,134302,134303],{},"为了有效地减少服务器接收和发送请求的次数",[392,134305,134306],{},"提高"," 页面的 ",[392,134309,134310],{},"加载速度"," ，出现了 ",[392,134313,134314],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[106,134317,134318,134319,134321,134322,134324,134325,134327,134328,134330,134331,134333,134334,134336],{},"使用精灵图核心：",[53787,134320],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53787,134323],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53787,134326],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53787,134329],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53787,134332],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53787,134335],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[210,134338,134340],{"id":134339},"_1222-扒图","12.2.2 扒图",[15,134342,134345],{"className":134343,"code":134344,"language":5297},[5295],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[22,134346,134344],{"__ignoreMap":20},[155,134348],{"style":126479,"src":134349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[155,134351],{"style":126479,"src":134352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[210,134354,134356],{"id":134355},"_1223-精灵图的实现","12.2.3 精灵图的实现",[155,134358],{"style":126479,"src":134359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[99,134361,134362],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[155,134364],{"style":126479,"src":134365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[15,134367,134369],{"className":126623,"code":134368,"language":126625,"meta":20,"style":20},"\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",[22,134370,134371,134376,134383,134395,134407,134426,134443],{"__ignoreMap":20},[25,134372,134373],{"class":27,"line":28},[25,134374,134375],{"class":302},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[25,134377,134378,134381],{"class":27,"line":39},[25,134379,134380],{"class":31},".icon",[25,134382,15682],{"class":244},[25,134384,134385,134387,134389,134391,134393],{"class":27,"line":51},[25,134386,70639],{"class":35},[25,134388,51508],{"class":244},[25,134390,943],{"class":35},[25,134392,51563],{"class":240},[25,134394,1403],{"class":244},[25,134396,134397,134399,134401,134403,134405],{"class":27,"line":59},[25,134398,70859],{"class":35},[25,134400,51508],{"class":244},[25,134402,943],{"class":35},[25,134404,51563],{"class":240},[25,134406,1403],{"class":244},[25,134408,134409,134411,134413,134415,134417,134420,134422,134424],{"class":27,"line":67},[25,134410,70682],{"class":35},[25,134412,51508],{"class":244},[25,134414,61797],{"class":35},[25,134416,245],{"class":244},[25,134418,134419],{"class":5326},"sprites.png",[25,134421,13824],{"class":244},[25,134423,61807],{"class":35},[25,134425,1403],{"class":244},[25,134427,134428,134430,134432,134434,134436,134439,134441],{"class":27,"line":75},[25,134429,128883],{"class":35},[25,134431,51508],{"class":244},[25,134433,51834],{"class":35},[25,134435,51563],{"class":240},[25,134437,134438],{"class":35}," -20",[25,134440,51563],{"class":240},[25,134442,1403],{"class":244},[25,134444,134445],{"class":27,"line":83},[25,134446,1676],{"class":244},[155,134448],{"style":126479,"src":134449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[99,134451,134452],{},"在前端中坐标轴的正方向是右和下",[182,134454,134456],{"id":134455},"_123-字体图标","12.3 字体图标",[210,134458,134460],{"id":134459},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[99,134462,134463],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[99,134465,134466],{},"精灵图是有诸多优点的，但是缺点很明显。",[99,134468,134469],{},"1.图片文件还是比较大的。",[99,134471,134472],{},"2.图片本身放大和缩小会失真。",[99,134474,134475],{},"3.一旦图片制作完毕想要更换非常复杂。",[99,134477,134478,134479,25811],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[392,134480,134481],{},"字体图标 iconfont",[99,134483,134484,134487,134488,28456],{},[392,134485,134486],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[392,134489,134490],{},"展示的是图标，本质属于字体",[210,134492,134494],{"id":134493},"_1232-字体图标的优点","12.3.2 字体图标的优点",[103,134496,134497,134502,134505,134508,134511],{},[106,134498,134499,134501],{},[392,134500,25947],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[106,134503,134504],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[106,134506,134507],{},"兼容性：几乎支持所有的浏览器，请放心使用",[106,134509,134510],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[106,134512,134513],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[210,134515,134517],{"id":134516},"_1233-字体库下载网站","12.3.3 字体库下载网站",[103,134519,134520],{},[106,134521,134522,134523],{},"icomoon字体库：",[481,134524,134527],{"href":134525,"rel":134526},"http:\u002F\u002Ficomoon.io\u002F",[23973],"http:\u002F\u002Ficomoon.io",[99,134529,134530],{},"进去之后点icomoon app",[155,134532],{"style":126479,"src":134533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[99,134535,134536],{},"可以对其编辑：",[155,134538],{"style":126479,"src":134539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[99,134541,134542],{},"生成字体：",[155,134544],{"style":126479,"src":134545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[99,134547,134548],{},"下载：",[155,134550],{"style":126479,"src":134551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[103,134553,134554],{},[106,134555,134556,134557],{},"阿里iconfont字体库： ",[481,134558,134559],{"href":134559,"rel":134560},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23973],[210,134562,134564],{"id":134563},"_1234-字体图标的引入","12.3.4 字体图标的引入",[194,134566,134567],{},[106,134568,134569,134570,134573],{},"把下载包里面的 ",[392,134571,134572],{},"fonts"," 文件夹放入页面根目录下",[155,134575],{"style":126479,"src":134576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[194,134578,134579],{"start":39},[106,134580,134581],{},"字体文件格式",[380,134583,134584,134593],{},[383,134585,134586],{},[386,134587,134588,134591],{},[389,134589,134590],{"align":23846},"格式",[389,134592,23850],{"align":23846},[427,134594,134595,134605,134615,134625],{},[386,134596,134597,134602],{},[432,134598,134599],{"align":23846},[392,134600,134601],{},".ttf",[432,134603,134604],{"align":23846},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[386,134606,134607,134612],{},[432,134608,134609],{"align":23846},[392,134610,134611],{},".woff",[432,134613,134614],{"align":23846},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[386,134616,134617,134622],{},[432,134618,134619],{"align":23846},[392,134620,134621],{},".eot",[432,134623,134624],{"align":23846},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[386,134626,134627,134632],{},[432,134628,134629],{"align":23846},[392,134630,134631],{},"svg",[432,134633,134634],{"align":23846},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[194,134636,134637],{"start":51},[106,134638,134639],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[15,134641,134643],{"className":126623,"code":134642,"language":126625,"meta":20,"style":20},"\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",[22,134644,134645,134650,134657,134669,134685,134710,134731,134751,134771,134775,134781,134791,134802],{"__ignoreMap":20},[25,134646,134647],{"class":27,"line":28},[25,134648,134649],{"class":302},"\u002F* 引入字体图标 *\u002F\n",[25,134651,134652,134655],{"class":27,"line":39},[25,134653,134654],{"class":240},"@font-face",[25,134656,15682],{"class":244},[25,134658,134659,134662,134664,134667],{"class":27,"line":51},[25,134660,134661],{"class":35},"  font-family",[25,134663,51508],{"class":244},[25,134665,134666],{"class":45},"'icomoon'",[25,134668,1403],{"class":244},[25,134670,134671,134674,134676,134678,134680,134683],{"class":27,"line":59},[25,134672,134673],{"class":35},"  src",[25,134675,51508],{"class":244},[25,134677,61797],{"class":35},[25,134679,245],{"class":244},[25,134681,134682],{"class":45},"'fonts\u002Ficomoon.eot'",[25,134684,2829],{"class":244},[25,134686,134687,134689,134691,134693,134695,134698,134700,134703,134705,134708],{"class":27,"line":67},[25,134688,134673],{"class":35},[25,134690,51508],{"class":244},[25,134692,61797],{"class":35},[25,134694,245],{"class":244},[25,134696,134697],{"class":45},"'fonts\u002Ficomoon.eot?#iefix'",[25,134699,13824],{"class":244},[25,134701,134702],{"class":35},"format",[25,134704,245],{"class":244},[25,134706,134707],{"class":45},"'embedded-opentype'",[25,134709,38118],{"class":244},[25,134711,134712,134715,134717,134720,134722,134724,134726,134729],{"class":27,"line":75},[25,134713,134714],{"class":35},"       url",[25,134716,245],{"class":244},[25,134718,134719],{"class":45},"'fonts\u002Ficomoon.woff'",[25,134721,13824],{"class":244},[25,134723,134702],{"class":35},[25,134725,245],{"class":244},[25,134727,134728],{"class":45},"'woff'",[25,134730,38118],{"class":244},[25,134732,134733,134735,134737,134740,134742,134744,134746,134749],{"class":27,"line":83},[25,134734,134714],{"class":35},[25,134736,245],{"class":244},[25,134738,134739],{"class":45},"'fonts\u002Ficomoon.ttf'",[25,134741,13824],{"class":244},[25,134743,134702],{"class":35},[25,134745,245],{"class":244},[25,134747,134748],{"class":45},"'truetype'",[25,134750,38118],{"class":244},[25,134752,134753,134755,134757,134760,134762,134764,134766,134769],{"class":27,"line":91},[25,134754,134714],{"class":35},[25,134756,245],{"class":244},[25,134758,134759],{"class":45},"'fonts\u002Ficomoon.svg#icomoon'",[25,134761,13824],{"class":244},[25,134763,134702],{"class":35},[25,134765,245],{"class":244},[25,134767,134768],{"class":45},"'svg'",[25,134770,2829],{"class":244},[25,134772,134773],{"class":27,"line":1429},[25,134774,1676],{"class":244},[25,134776,134777,134779],{"class":27,"line":1441},[25,134778,134380],{"class":31},[25,134780,15682],{"class":244},[25,134782,134783,134785,134787,134789],{"class":27,"line":1723},[25,134784,134661],{"class":35},[25,134786,51508],{"class":244},[25,134788,134666],{"class":45},[25,134790,1403],{"class":244},[25,134792,134793,134796,134798,134800],{"class":27,"line":1728},[25,134794,134795],{"class":35},"  font-style",[25,134797,51508],{"class":244},[25,134799,63912],{"class":35},[25,134801,1403],{"class":244},[25,134803,134804],{"class":27,"line":1734},[25,134805,1676],{"class":244},[99,134807,134808],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[155,134810],{"style":126479,"src":134811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[194,134813,134814],{"start":59},[106,134815,134816],{},"添加字体",[155,134818],{"style":126479,"src":134819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[99,134821,134822],{},"复制：",[155,134824],{"style":126479,"src":134825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[99,134827,134828],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[194,134830,134831],{"start":67},[106,134832,134833],{},"代码展示：",[15,134835,134836],{"className":126623,"code":134642,"language":126625,"meta":20,"style":20},[22,134837,134838,134842,134848,134858,134872,134894,134912,134930,134948,134952,134958,134968,134978],{"__ignoreMap":20},[25,134839,134840],{"class":27,"line":28},[25,134841,134649],{"class":302},[25,134843,134844,134846],{"class":27,"line":39},[25,134845,134654],{"class":240},[25,134847,15682],{"class":244},[25,134849,134850,134852,134854,134856],{"class":27,"line":51},[25,134851,134661],{"class":35},[25,134853,51508],{"class":244},[25,134855,134666],{"class":45},[25,134857,1403],{"class":244},[25,134859,134860,134862,134864,134866,134868,134870],{"class":27,"line":59},[25,134861,134673],{"class":35},[25,134863,51508],{"class":244},[25,134865,61797],{"class":35},[25,134867,245],{"class":244},[25,134869,134682],{"class":45},[25,134871,2829],{"class":244},[25,134873,134874,134876,134878,134880,134882,134884,134886,134888,134890,134892],{"class":27,"line":67},[25,134875,134673],{"class":35},[25,134877,51508],{"class":244},[25,134879,61797],{"class":35},[25,134881,245],{"class":244},[25,134883,134697],{"class":45},[25,134885,13824],{"class":244},[25,134887,134702],{"class":35},[25,134889,245],{"class":244},[25,134891,134707],{"class":45},[25,134893,38118],{"class":244},[25,134895,134896,134898,134900,134902,134904,134906,134908,134910],{"class":27,"line":75},[25,134897,134714],{"class":35},[25,134899,245],{"class":244},[25,134901,134719],{"class":45},[25,134903,13824],{"class":244},[25,134905,134702],{"class":35},[25,134907,245],{"class":244},[25,134909,134728],{"class":45},[25,134911,38118],{"class":244},[25,134913,134914,134916,134918,134920,134922,134924,134926,134928],{"class":27,"line":83},[25,134915,134714],{"class":35},[25,134917,245],{"class":244},[25,134919,134739],{"class":45},[25,134921,13824],{"class":244},[25,134923,134702],{"class":35},[25,134925,245],{"class":244},[25,134927,134748],{"class":45},[25,134929,38118],{"class":244},[25,134931,134932,134934,134936,134938,134940,134942,134944,134946],{"class":27,"line":91},[25,134933,134714],{"class":35},[25,134935,245],{"class":244},[25,134937,134759],{"class":45},[25,134939,13824],{"class":244},[25,134941,134702],{"class":35},[25,134943,245],{"class":244},[25,134945,134768],{"class":45},[25,134947,2829],{"class":244},[25,134949,134950],{"class":27,"line":1429},[25,134951,1676],{"class":244},[25,134953,134954,134956],{"class":27,"line":1441},[25,134955,134380],{"class":31},[25,134957,15682],{"class":244},[25,134959,134960,134962,134964,134966],{"class":27,"line":1723},[25,134961,134661],{"class":35},[25,134963,51508],{"class":244},[25,134965,134666],{"class":45},[25,134967,1403],{"class":244},[25,134969,134970,134972,134974,134976],{"class":27,"line":1728},[25,134971,134795],{"class":35},[25,134973,51508],{"class":244},[25,134975,63912],{"class":35},[25,134977,1403],{"class":244},[25,134979,134980],{"class":27,"line":1734},[25,134981,1676],{"class":244},[155,134983],{"style":126479,"src":134984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[99,134986,134987],{},"更加细节展示：",[194,134989,134990],{},[106,134991,134992],{},"html 标签内添加小图标",[155,134994],{"style":126479,"src":134995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[194,134997,134998],{"start":39},[106,134999,135000],{},"给标签定义字体",[15,135002,135003],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,135004,135005,135009,135023,135027],{"__ignoreMap":20},[25,135006,135007],{"class":27,"line":28},[25,135008,130734],{"class":302},[25,135010,135011,135013,135015,135017,135019,135021],{"class":27,"line":39},[25,135012,1153],{"class":244},[25,135014,51682],{"class":51371},[25,135016,53557],{"class":31},[25,135018,290],{"class":244},[25,135020,130747],{"class":45},[25,135022,51378],{"class":244},[25,135024,135025],{"class":27,"line":51},[25,135026,130754],{"class":244},[25,135028,135029,135031,135033],{"class":27,"line":59},[25,135030,51856],{"class":244},[25,135032,51682],{"class":51371},[25,135034,51378],{"class":244},[99,135036,135037],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[155,135039],{"style":126479,"src":135040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[210,135042,135044],{"id":135043},"_1235-字体图标的追加","12.3.5 字体图标的追加",[99,135046,135047],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[99,135049,135050,135051,135054],{},"把压缩包里面的 ",[392,135052,135053],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[99,135056,135057],{},"打开网站，点下方：",[155,135059],{"style":126479,"src":135060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[155,135062],{"style":126479,"src":135063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[155,135065],{"style":126479,"src":135066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[99,135068,135069],{},"点yes重新加载",[99,135071,135072],{},"然后重复之前的操作就可以实现了",[99,135074,135075],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[210,135077,135079],{"id":135078},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[155,135081],{"style":126479,"src":135082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[159,135084,135085],{},"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":20,"searchDepth":39,"depth":39,"links":135087},[135088,135094,135099],{"id":133691,"depth":39,"text":133692,"children":135089},[135090,135091,135092,135093],{"id":133703,"depth":51,"text":133704},{"id":133732,"depth":51,"text":133733},{"id":133760,"depth":51,"text":133761},{"id":133818,"depth":51,"text":133819},{"id":134290,"depth":39,"text":134291,"children":135095},[135096,135097,135098],{"id":134294,"depth":51,"text":134295},{"id":134339,"depth":51,"text":134340},{"id":134355,"depth":51,"text":134356},{"id":134455,"depth":39,"text":134456,"children":135100},[135101,135102,135103,135104,135105,135106],{"id":134459,"depth":51,"text":134460},{"id":134493,"depth":51,"text":134494},{"id":134516,"depth":51,"text":134517},{"id":134563,"depth":51,"text":134564},{"id":135043,"depth":51,"text":135044},{"id":135078,"depth":51,"text":135079},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133683,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135113,"title":135114,"body":135115,"description":164,"extension":165,"meta":136342,"navigation":167,"path":136343,"seo":136344,"stem":136345,"__hash__":136346},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135116,"toc":136323},[135117,135120,135124,135127,135141,135209,135239,135242,135246,135250,135352,135399,135403,135406,135409,135443,135446,135449,135452,135455,135458,135461,135464,135466,135469,135472,135475,135478,135481,135484,135487,135515,135518,135522,135525,135532,135535,135538,135564,135567,135571,135574,135577,135584,135588,135591,135593,135625,135628,135631,135643,135649,135652,135655,135658,135660,135664,135667,135670,135673,135718,135722,135724,135727,135734,135776,135779,135783,135788,135802,135806,135809,135812,135815,135818,135821,135855,135858,135861,135915,135918,135921,135924,135927,135979,135982,135985,136034,136038,136040,136043,136046,136049,136052,136055,136113,136116,136122,136125,136128,136160,136163,136167,136171,136174,136206,136210,136213,136257,136261,136264,136267,136270,136273,136276,136279,136282,136284,136287,136289,136292,136295,136298,136301,136306,136309,136311,136314,136317,136320],[10,135118,135114],{"id":135119},"_13-界面样式与布局技巧",[182,135121,135123],{"id":135122},"_131-css三角","13.1 css三角",[99,135125,135126],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[103,135128,135129,135132,135135,135138],{},[106,135130,135131],{},"用css 边框可以模拟三角效果",[106,135133,135134],{},"宽度高度为0",[106,135136,135137],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[106,135139,135140],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[15,135142,135144],{"className":126623,"code":135143,"language":126625,"meta":20,"style":20},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[22,135145,135146,135151,135158,135168,135178,135194,135205],{"__ignoreMap":20},[25,135147,135148],{"class":27,"line":28},[25,135149,135150],{"class":302},"\u002F* CSS 实现三角形 *\u002F\n",[25,135152,135153,135156],{"class":27,"line":39},[25,135154,135155],{"class":31},".triangle",[25,135157,15682],{"class":244},[25,135159,135160,135162,135164,135166],{"class":27,"line":51},[25,135161,70639],{"class":35},[25,135163,51508],{"class":244},[25,135165,434],{"class":35},[25,135167,1403],{"class":244},[25,135169,135170,135172,135174,135176],{"class":27,"line":59},[25,135171,70859],{"class":35},[25,135173,51508],{"class":244},[25,135175,434],{"class":35},[25,135177,1403],{"class":244},[25,135179,135180,135182,135184,135186,135188,135190,135192],{"class":27,"line":67},[25,135181,70967],{"class":35},[25,135183,51508],{"class":244},[25,135185,689],{"class":35},[25,135187,51563],{"class":240},[25,135189,51592],{"class":35},[25,135191,64062],{"class":35},[25,135193,1403],{"class":244},[25,135195,135196,135199,135201,135203],{"class":27,"line":75},[25,135197,135198],{"class":35},"  border-bottom-color",[25,135200,51508],{"class":244},[25,135202,62440],{"class":35},[25,135204,1403],{"class":244},[25,135206,135207],{"class":27,"line":83},[25,135208,1676],{"class":244},[15,135210,135211],{"className":126623,"code":130780,"language":126625,"meta":20,"style":20},[22,135212,135213,135219,135235],{"__ignoreMap":20},[25,135214,135215,135217],{"class":27,"line":28},[25,135216,51682],{"class":51371},[25,135218,15682],{"class":244},[25,135220,135221,135223,135225,135227,135229,135231,135233],{"class":27,"line":39},[25,135222,70967],{"class":35},[25,135224,51508],{"class":244},[25,135226,460],{"class":35},[25,135228,51563],{"class":240},[25,135230,51592],{"class":35},[25,135232,130015],{"class":35},[25,135234,1403],{"class":244},[25,135236,135237],{"class":27,"line":51},[25,135238,1676],{"class":244},[155,135240],{"style":126479,"src":135241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[182,135243,135245],{"id":135244},"_132-css用户界面样式","13.2 css用户界面样式",[210,135247,135249],{"id":135248},"_1321-鼠标样式","13.2.1 鼠标样式",[15,135251,135253],{"className":126623,"code":135252,"language":126625,"meta":20,"style":20},"\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",[22,135254,135255,135260,135279,135297,135316,135333],{"__ignoreMap":20},[25,135256,135257],{"class":27,"line":28},[25,135258,135259],{"class":302},"\u002F* 鼠标样式 *\u002F\n",[25,135261,135262,135264,135266,135269,135271,135273,135276],{"class":27,"line":39},[25,135263,51682],{"class":51371},[25,135265,79878],{"class":244},[25,135267,135268],{"class":35},"cursor",[25,135270,51508],{"class":244},[25,135272,62101],{"class":35},[25,135274,135275],{"class":244},"; }   ",[25,135277,135278],{"class":302},"\u002F* 手型 *\u002F\n",[25,135280,135281,135283,135285,135287,135289,135292,135294],{"class":27,"line":51},[25,135282,51682],{"class":51371},[25,135284,79878],{"class":244},[25,135286,135268],{"class":35},[25,135288,51508],{"class":244},[25,135290,135291],{"class":35},"default",[25,135293,135275],{"class":244},[25,135295,135296],{"class":302},"\u002F* 默认 *\u002F\n",[25,135298,135299,135301,135303,135305,135307,135310,135313],{"class":27,"line":59},[25,135300,51682],{"class":51371},[25,135302,79878],{"class":244},[25,135304,135268],{"class":35},[25,135306,51508],{"class":244},[25,135308,135309],{"class":35},"move",[25,135311,135312],{"class":244},"; }      ",[25,135314,135315],{"class":302},"\u002F* 移动 *\u002F\n",[25,135317,135318,135320,135322,135324,135326,135328,135330],{"class":27,"line":67},[25,135319,51682],{"class":51371},[25,135321,79878],{"class":244},[25,135323,135268],{"class":35},[25,135325,51508],{"class":244},[25,135327,5297],{"class":35},[25,135329,135312],{"class":244},[25,135331,135332],{"class":302},"\u002F* 文本 *\u002F\n",[25,135334,135335,135337,135339,135341,135343,135346,135349],{"class":27,"line":75},[25,135336,51682],{"class":51371},[25,135338,79878],{"class":244},[25,135340,135268],{"class":35},[25,135342,51508],{"class":244},[25,135344,135345],{"class":35},"not-allowed",[25,135347,135348],{"class":244},"; } ",[25,135350,135351],{"class":302},"\u002F* 禁止 *\u002F\n",[380,135353,135354,135362],{},[383,135355,135356],{},[386,135357,135358,135360],{},[389,135359,127087],{"align":23846},[389,135361,27560],{"align":23846},[427,135363,135364,135371,135378,135385,135392],{},[386,135365,135366,135368],{},[432,135367,135291],{"align":23846},[432,135369,135370],{"align":23846},"小白 默认",[386,135372,135373,135375],{},[432,135374,62101],{"align":23846},[432,135376,135377],{"align":23846},"小手",[386,135379,135380,135382],{},[432,135381,135309],{"align":23846},[432,135383,135384],{"align":23846},"移动",[386,135386,135387,135389],{},[432,135388,5297],{"align":23846},[432,135390,135391],{"align":23846},"文本",[386,135393,135394,135396],{},[432,135395,135345],{"align":23846},[432,135397,135398],{"align":23846},"禁止",[210,135400,135402],{"id":135401},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[99,135404,135405],{},"去除表单轮廓线",[99,135407,135408],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[15,135410,135411],{"className":126623,"code":129987,"language":126625,"meta":20,"style":20},[22,135412,135413,135417,135423,135439],{"__ignoreMap":20},[25,135414,135415],{"class":27,"line":28},[25,135416,129994],{"class":302},[25,135418,135419,135421],{"class":27,"line":39},[25,135420,51682],{"class":51371},[25,135422,15682],{"class":244},[25,135424,135425,135427,135429,135431,135433,135435,135437],{"class":27,"line":51},[25,135426,70967],{"class":35},[25,135428,51508],{"class":244},[25,135430,460],{"class":35},[25,135432,51563],{"class":240},[25,135434,51592],{"class":35},[25,135436,130015],{"class":35},[25,135438,1403],{"class":244},[25,135440,135441],{"class":27,"line":59},[25,135442,1676],{"class":244},[99,135444,135445],{},"文本域：",[155,135447],{"style":126479,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[99,135450,135451],{},"此时会有一个空白区域",[155,135453],{"style":126479,"src":135454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[99,135456,135457],{},"写在同一行就不会出现这个问题",[155,135459],{"style":126479,"src":135460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[99,135462,135463],{},"文本域是行内块元素，一定记住！！！",[99,135465,98304],{},[155,135467],{"style":126479,"src":135468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[99,135470,135471],{},"文本域尽量放在一行",[99,135473,135474],{},"知识回顾：cols是列，rols是行",[155,135476],{"style":126479,"src":135477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[99,135479,135480],{},"它可以进行拖动，显然这是我们不愿意看到的",[155,135482],{"style":126479,"src":135483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[99,135485,135486],{},"使用resize进行解决",[15,135488,135490],{"className":126623,"code":135489,"language":126625,"meta":20,"style":20},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[22,135491,135492,135498,135511],{"__ignoreMap":20},[25,135493,135494,135496],{"class":27,"line":28},[25,135495,53892],{"class":51371},[25,135497,15682],{"class":244},[25,135499,135500,135502,135504,135506,135508],{"class":27,"line":39},[25,135501,70869],{"class":35},[25,135503,51508],{"class":244},[25,135505,54808],{"class":35},[25,135507,130486],{"class":244},[25,135509,135510],{"class":302},"\u002F* 取消表单轮廓线 *\u002F\n",[25,135512,135513],{"class":27,"line":51},[25,135514,1676],{"class":244},[99,135516,135517],{},"此时就无法通过右下方实现拖动了",[210,135519,135521],{"id":135520},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[99,135523,135524],{},"实现一个盒子中的文字和图片对齐",[99,135526,135527,135528,135531],{},"用于设置一个元素的 ",[392,135529,135530],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[99,135533,135534],{},"图片和文字默认是基线对齐",[155,135536],{"style":126479,"src":135537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[15,135539,135540],{"className":126623,"code":135489,"language":126625,"meta":20,"style":20},[22,135541,135542,135548,135560],{"__ignoreMap":20},[25,135543,135544,135546],{"class":27,"line":28},[25,135545,53892],{"class":51371},[25,135547,15682],{"class":244},[25,135549,135550,135552,135554,135556,135558],{"class":27,"line":39},[25,135551,70869],{"class":35},[25,135553,51508],{"class":244},[25,135555,54808],{"class":35},[25,135557,130486],{"class":244},[25,135559,135510],{"class":302},[25,135561,135562],{"class":27,"line":51},[25,135563,1676],{"class":244},[155,135565],{"style":126479,"src":135566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22108,135568,135570],{"id":135569},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[99,135572,135573],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[155,135575],{"style":126479,"src":135576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[99,135578,135579,135580,135583],{},"此时可以给图片、表单这些行内块元素的 ",[392,135581,135582],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22108,135585,135587],{"id":135586},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[99,135589,135590],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[99,135592,14743],{},[15,135594,135596],{"className":126623,"code":135595,"language":126625,"meta":20,"style":20},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[22,135597,135598,135603,135609,135621],{"__ignoreMap":20},[25,135599,135600],{"class":27,"line":28},[25,135601,135602],{"class":302},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[25,135604,135605,135607],{"class":27,"line":39},[25,135606,155],{"class":51371},[25,135608,15682],{"class":244},[25,135610,135611,135614,135616,135619],{"class":27,"line":51},[25,135612,135613],{"class":35},"  vertical-align",[25,135615,51508],{"class":244},[25,135617,135618],{"class":35},"middle",[25,135620,1403],{"class":244},[25,135622,135623],{"class":27,"line":59},[25,135624,1676],{"class":244},[155,135626],{"style":126479,"src":135627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[99,135629,135630],{},"主要解决方法有两种：",[194,135632,135633],{},[106,135634,135635,135638,135639,135642],{},[392,135636,135637],{},"给图片"," 添加 ",[392,135640,135641],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[99,135644,135645,135646],{},"2.把图片转换为块级元素 ",[392,135647,135648],{},"display: block",[99,135650,135651],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[99,135653,135654],{},"img {",[99,135656,135657],{},"vertical-align:middle;",[99,135659,1189],{},[210,135661,135663],{"id":135662},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[99,135665,135666],{},"效果：",[155,135668],{"style":126479,"src":135669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[99,135671,135672],{},"单行文本溢出显示省略号--必须满足三个条件：",[15,135674,135676],{"className":126623,"code":135675,"language":126625,"meta":20,"style":20},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[22,135677,135678,135683,135689,135699,135704,135714],{"__ignoreMap":20},[25,135679,135680],{"class":27,"line":28},[25,135681,135682],{"class":302},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[25,135684,135685,135687],{"class":27,"line":39},[25,135686,155],{"class":51371},[25,135688,15682],{"class":244},[25,135690,135691,135693,135695,135697],{"class":27,"line":51},[25,135692,135613],{"class":35},[25,135694,51508],{"class":244},[25,135696,135618],{"class":35},[25,135698,1403],{"class":244},[25,135700,135701],{"class":27,"line":59},[25,135702,135703],{"class":302},"  \u002F* 或 *\u002F\n",[25,135705,135706,135708,135710,135712],{"class":27,"line":67},[25,135707,128239],{"class":35},[25,135709,51508],{"class":244},[25,135711,60940],{"class":35},[25,135713,1403],{"class":244},[25,135715,135716],{"class":27,"line":75},[25,135717,1676],{"class":244},[210,135719,135721],{"id":135720},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[99,135723,135666],{},[155,135725],{"style":126479,"src":135726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[99,135728,135729,135730,135733],{},"多行文本溢出显示省略号， ",[392,135731,135732],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[15,135735,135736],{"className":126623,"code":135675,"language":126625,"meta":20,"style":20},[22,135737,135738,135742,135748,135758,135762,135772],{"__ignoreMap":20},[25,135739,135740],{"class":27,"line":28},[25,135741,135682],{"class":302},[25,135743,135744,135746],{"class":27,"line":39},[25,135745,155],{"class":51371},[25,135747,15682],{"class":244},[25,135749,135750,135752,135754,135756],{"class":27,"line":51},[25,135751,135613],{"class":35},[25,135753,51508],{"class":244},[25,135755,135618],{"class":35},[25,135757,1403],{"class":244},[25,135759,135760],{"class":27,"line":59},[25,135761,135703],{"class":302},[25,135763,135764,135766,135768,135770],{"class":27,"line":67},[25,135765,128239],{"class":35},[25,135767,51508],{"class":244},[25,135769,60940],{"class":35},[25,135771,1403],{"class":244},[25,135773,135774],{"class":27,"line":75},[25,135775,1676],{"class":244},[99,135777,135778],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[182,135780,135782],{"id":135781},"_133-常见布局技巧","13.3 常见布局技巧",[99,135784,135785],{},[392,135786,135787],{},"巧妙利用一个技术更快更好的布局：",[194,135789,135790,135793,135796,135799],{},[106,135791,135792],{},"margin负值的运用",[106,135794,135795],{},"文字围绕浮动元素",[106,135797,135798],{},"行内块的巧妙运用",[106,135800,135801],{},"CSS三角强化",[210,135803,135805],{"id":135804},"_1331-margin负值的运用","13.3.1 margin负值的运用",[99,135807,135808],{},"应用场景：",[155,135810],{"style":126479,"src":135811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[155,135813],{"style":126479,"src":135814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[99,135816,135817],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[99,135819,135820],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[15,135822,135823],{"className":126623,"code":129987,"language":126625,"meta":20,"style":20},[22,135824,135825,135829,135835,135851],{"__ignoreMap":20},[25,135826,135827],{"class":27,"line":28},[25,135828,129994],{"class":302},[25,135830,135831,135833],{"class":27,"line":39},[25,135832,51682],{"class":51371},[25,135834,15682],{"class":244},[25,135836,135837,135839,135841,135843,135845,135847,135849],{"class":27,"line":51},[25,135838,70967],{"class":35},[25,135840,51508],{"class":244},[25,135842,460],{"class":35},[25,135844,51563],{"class":240},[25,135846,51592],{"class":35},[25,135848,130015],{"class":35},[25,135850,1403],{"class":244},[25,135852,135853],{"class":27,"line":59},[25,135854,1676],{"class":244},[155,135856],{"style":126479,"src":135857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[99,135859,135860],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[15,135862,135864],{"className":126623,"code":135863,"language":126625,"meta":20,"style":20},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[22,135865,135866,135871,135877,135887,135899,135911],{"__ignoreMap":20},[25,135867,135868],{"class":27,"line":28},[25,135869,135870],{"class":302},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[25,135872,135873,135875],{"class":27,"line":39},[25,135874,130471],{"class":31},[25,135876,15682],{"class":244},[25,135878,135879,135881,135883,135885],{"class":27,"line":51},[25,135880,132429],{"class":35},[25,135882,51508],{"class":244},[25,135884,54835],{"class":35},[25,135886,1403],{"class":244},[25,135888,135889,135891,135893,135895,135897],{"class":27,"line":59},[25,135890,132443],{"class":35},[25,135892,51508],{"class":244},[25,135894,689],{"class":35},[25,135896,51563],{"class":240},[25,135898,1403],{"class":244},[25,135900,135901,135903,135905,135907,135909],{"class":27,"line":67},[25,135902,132460],{"class":35},[25,135904,51508],{"class":244},[25,135906,943],{"class":35},[25,135908,51563],{"class":240},[25,135910,1403],{"class":244},[25,135912,135913],{"class":27,"line":75},[25,135914,1676],{"class":244},[99,135916,135917],{},"加上上述代码会发现：",[155,135919],{"style":126479,"src":135920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[99,135922,135923],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[99,135925,135926],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[15,135928,135929],{"className":126623,"code":135863,"language":126625,"meta":20,"style":20},[22,135930,135931,135935,135941,135951,135963,135975],{"__ignoreMap":20},[25,135932,135933],{"class":27,"line":28},[25,135934,135870],{"class":302},[25,135936,135937,135939],{"class":27,"line":39},[25,135938,130471],{"class":31},[25,135940,15682],{"class":244},[25,135942,135943,135945,135947,135949],{"class":27,"line":51},[25,135944,132429],{"class":35},[25,135946,51508],{"class":244},[25,135948,54835],{"class":35},[25,135950,1403],{"class":244},[25,135952,135953,135955,135957,135959,135961],{"class":27,"line":59},[25,135954,132443],{"class":35},[25,135956,51508],{"class":244},[25,135958,689],{"class":35},[25,135960,51563],{"class":240},[25,135962,1403],{"class":244},[25,135964,135965,135967,135969,135971,135973],{"class":27,"line":67},[25,135966,132460],{"class":35},[25,135968,51508],{"class":244},[25,135970,943],{"class":35},[25,135972,51563],{"class":240},[25,135974,1403],{"class":244},[25,135976,135977],{"class":27,"line":75},[25,135978,1676],{"class":244},[99,135980,135981],{},"解决方式2：",[99,135983,135984],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[15,135986,135988],{"className":126623,"code":135987,"language":126625,"meta":20,"style":20},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[22,135989,135990,135996,136006,136018,136030],{"__ignoreMap":20},[25,135991,135992,135994],{"class":27,"line":28},[25,135993,51682],{"class":51371},[25,135995,15682],{"class":244},[25,135997,135998,136000,136002,136004],{"class":27,"line":39},[25,135999,132429],{"class":35},[25,136001,51508],{"class":244},[25,136003,54835],{"class":35},[25,136005,1403],{"class":244},[25,136007,136008,136010,136012,136014,136016],{"class":27,"line":51},[25,136009,132443],{"class":35},[25,136011,51508],{"class":244},[25,136013,689],{"class":35},[25,136015,51563],{"class":240},[25,136017,1403],{"class":244},[25,136019,136020,136022,136024,136026,136028],{"class":27,"line":59},[25,136021,132460],{"class":35},[25,136023,51508],{"class":244},[25,136025,943],{"class":35},[25,136027,51563],{"class":240},[25,136029,1403],{"class":244},[25,136031,136032],{"class":27,"line":67},[25,136033,1676],{"class":244},[210,136035,136037],{"id":136036},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[99,136039,135808],{},[155,136041],{"style":126479,"src":136042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[99,136044,136045],{},"实现结构图：",[155,136047],{"style":126479,"src":136048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[99,136050,136051],{},"巧妙运用浮动元素不会压住文字的特性",[99,136053,136054],{},"代码显示：",[15,136056,136058],{"className":126623,"code":136057,"language":126625,"meta":20,"style":20},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[22,136059,136060,136066,136076,136080,136085,136089,136095,136109],{"__ignoreMap":20},[25,136061,136062,136064],{"class":27,"line":28},[25,136063,130471],{"class":31},[25,136065,15682],{"class":244},[25,136067,136068,136070,136072,136074],{"class":27,"line":39},[25,136069,131103],{"class":35},[25,136071,51508],{"class":244},[25,136073,23846],{"class":35},[25,136075,1403],{"class":244},[25,136077,136078],{"class":27,"line":51},[25,136079,1676],{"class":244},[25,136081,136082],{"class":27,"line":59},[25,136083,136084],{"class":244},"```Css\n",[25,136086,136087],{"class":27,"line":67},[25,136088,130466],{"class":302},[25,136090,136091,136093],{"class":27,"line":75},[25,136092,130471],{"class":31},[25,136094,15682],{"class":244},[25,136096,136097,136099,136101,136103,136105,136107],{"class":27,"line":83},[25,136098,70541],{"class":35},[25,136100,51508],{"class":244},[25,136102,434],{"class":35},[25,136104,51627],{"class":35},[25,136106,130486],{"class":244},[25,136108,130489],{"class":302},[25,136110,136111],{"class":27,"line":91},[25,136112,1676],{"class":244},[99,136114,136115],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[15,136117,136120],{"className":136118,"code":136119,"language":5297},[5295],"\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",[22,136121,136119],{"__ignoreMap":20},[155,136123],{"style":126479,"src":136124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[99,136126,136127],{},"最终展示结果：",[15,136129,136130],{"className":126623,"code":130459,"language":126625,"meta":20,"style":20},[22,136131,136132,136136,136142,136156],{"__ignoreMap":20},[25,136133,136134],{"class":27,"line":28},[25,136135,130466],{"class":302},[25,136137,136138,136140],{"class":27,"line":39},[25,136139,130471],{"class":31},[25,136141,15682],{"class":244},[25,136143,136144,136146,136148,136150,136152,136154],{"class":27,"line":51},[25,136145,70541],{"class":35},[25,136147,51508],{"class":244},[25,136149,434],{"class":35},[25,136151,51627],{"class":35},[25,136153,130486],{"class":244},[25,136155,130489],{"class":302},[25,136157,136158],{"class":27,"line":59},[25,136159,1676],{"class":244},[155,136161],{"style":126479,"src":136162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[182,136164,136166],{"id":136165},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[210,136168,136170],{"id":136169},"_1341-原理","13.4.1 原理",[155,136172],{"style":126479,"src":136173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[15,136175,136176],{"className":126623,"code":130459,"language":126625,"meta":20,"style":20},[22,136177,136178,136182,136188,136202],{"__ignoreMap":20},[25,136179,136180],{"class":27,"line":28},[25,136181,130466],{"class":302},[25,136183,136184,136186],{"class":27,"line":39},[25,136185,130471],{"class":31},[25,136187,15682],{"class":244},[25,136189,136190,136192,136194,136196,136198,136200],{"class":27,"line":51},[25,136191,70541],{"class":35},[25,136193,51508],{"class":244},[25,136195,434],{"class":35},[25,136197,51627],{"class":35},[25,136199,130486],{"class":244},[25,136201,130489],{"class":302},[25,136203,136204],{"class":27,"line":59},[25,136205,1676],{"class":244},[210,136207,136209],{"id":136208},"_1342-实例","13.4.2 实例",[155,136211],{"style":126479,"src":136212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[15,136214,136215],{"className":126623,"code":131089,"language":126625,"meta":20,"style":20},[22,136216,136217,136223,136233,136237,136243,136253],{"__ignoreMap":20},[25,136218,136219,136221],{"class":27,"line":28},[25,136220,131096],{"class":31},[25,136222,15682],{"class":244},[25,136224,136225,136227,136229,136231],{"class":27,"line":39},[25,136226,131103],{"class":35},[25,136228,51508],{"class":244},[25,136230,23846],{"class":35},[25,136232,1403],{"class":244},[25,136234,136235],{"class":27,"line":51},[25,136236,1676],{"class":244},[25,136238,136239,136241],{"class":27,"line":59},[25,136240,131118],{"class":31},[25,136242,15682],{"class":244},[25,136244,136245,136247,136249,136251],{"class":27,"line":67},[25,136246,131103],{"class":35},[25,136248,51508],{"class":244},[25,136250,72593],{"class":35},[25,136252,1403],{"class":244},[25,136254,136255],{"class":27,"line":75},[25,136256,1676],{"class":244},[182,136258,136260],{"id":136259},"_135-css的初始化","13.5 css的初始化",[99,136262,136263],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[99,136265,136266],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[99,136268,136269],{},"每个网页都必须首先进行 CSS初始化。",[99,136271,136272],{},"这里我们以 京东CSS初始化代码为例。",[99,136274,136275],{},"在网页右键查看网页源代码",[99,136277,136278],{},"找到css的link引入语句",[99,136280,136281],{},"然后ctrl+f 输入body",[99,136283,77297],{},[155,136285],{"style":126479,"src":136286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[99,136288,77320],{},[155,136290],{"style":126479,"src":136291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[99,136293,136294],{},"③打开了网页上传压缩的代码",[155,136296],{"style":126479,"src":136297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[99,136299,136300],{},"④从body前可以查看这个网页的初始化代码",[99,136302,136303],{},[392,136304,136305],{},"Unicode编码字体：",[99,136307,136308],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[99,136310,83278],{},[99,136312,136313],{},"黑体 \\9ED1\\4F53",[99,136315,136316],{},"宋体 \\5B8B\\4F53",[99,136318,136319],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[159,136321,136322],{},"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":20,"searchDepth":39,"depth":39,"links":136324},[136325,136326,136333,136337,136341],{"id":135122,"depth":39,"text":135123},{"id":135244,"depth":39,"text":135245,"children":136327},[136328,136329,136330,136331,136332],{"id":135248,"depth":51,"text":135249},{"id":135401,"depth":51,"text":135402},{"id":135520,"depth":51,"text":135521},{"id":135662,"depth":51,"text":135663},{"id":135720,"depth":51,"text":135721},{"id":135781,"depth":39,"text":135782,"children":136334},[136335,136336],{"id":135804,"depth":51,"text":135805},{"id":136036,"depth":51,"text":136037},{"id":136165,"depth":39,"text":136166,"children":136338},[136339,136340],{"id":136169,"depth":51,"text":136170},{"id":136208,"depth":51,"text":136209},{"id":136259,"depth":39,"text":136260},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135114,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136348,"title":136349,"body":136350,"description":164,"extension":165,"meta":138036,"navigation":167,"path":138037,"seo":138038,"stem":138039,"__hash__":138040},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136351,"toc":138025},[136352,136355,136359,136363,136366,136373,136376,136379,136417,136420,136422,136436,136440,136449,136453,136458,136461,136464,136467,136502,136507,136510,136540,136543,136548,136551,136554,136584,136587,136641,136644,136648,136653,136665,136668,136672,136702,136705,136710,136713,136743,136746,136750,136767,136771,136775,136778,136811,136814,136818,136821,136824,136827,136830,136833,136944,136947,136950,136953,137055,137058,137062,137066,137070,137073,137113,137116,137118,137134,137138,137141,137146,137227,137230,137233,137359,137364,137367,137375,137378,137383,137468,137471,137475,137478,137481,137485,137505,137510,137594,137597,137602,137605,137608,137686,137689,137692,137695,137698,137701,137706,137709,137712,137784,137787,137792,137795,137892,137895,137901,137904,137907,137910,137913,137916,137919,137922,137925,137929,137934,137937,137970,137975,137978,138019,138022],[10,136353,136349],{"id":136354},"_14-html5与css3新特性",[182,136356,136358],{"id":136357},"_141-html5的新特性","14.1 HTML5的新特性",[210,136360,136362],{"id":136361},"_1411-基本标签","14.1.1 基本标签",[99,136364,136365],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[99,136367,136368,136369,136372],{},"这些新特性都有兼容性问题，基本是 ",[392,136370,136371],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[99,136374,136375],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[99,136377,136378],{},"现在使用的是新特性：",[103,136380,136381,136387,136393,136399,136405,136411],{},[106,136382,136383,136386],{},[22,136384,136385],{},"\u003Cheader>"," 头部标签",[106,136388,136389,136392],{},[22,136390,136391],{},"\u003Cnav>"," 导航标签",[106,136394,136395,136398],{},[22,136396,136397],{},"\u003Carticle>"," 内容标签",[106,136400,136401,136404],{},[22,136402,136403],{},"\u003Csection>"," 定义文档某个区域",[106,136406,136407,136410],{},[22,136408,136409],{},"\u003Caside>"," 侧边栏标签",[106,136412,136413,136416],{},[22,136414,136415],{},"\u003Cfooter>"," 尾部标签",[155,136418],{"style":126479,"src":136419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[99,136421,274],{},[103,136423,136424,136427,136430,136433],{},[106,136425,136426],{},"这种语义化标准主要是针对搜索引擎的",[106,136428,136429],{},"这些标签页面中可以经常使用",[106,136431,136432],{},"在IE9中，需要把这些元素转换为块级元素",[106,136434,136435],{},"移动端更喜欢使用这些标签",[210,136437,136439],{"id":136438},"_1412-多媒体标签","14.1.2 多媒体标签",[99,136441,136442,136443,136445,136446,136448],{},"音频 ",[392,136444,28245],{}," 和视频 ",[392,136447,28254],{}," 两个标签",[22108,136450,136452],{"id":136451},"_14121-视频标签-video","14.1.2.1 视频标签- video",[194,136454,136455],{},[106,136456,136457],{},"支持格式：",[155,136459],{"style":126479,"src":136460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[99,136462,136463],{},"尽量使用MP4，兼容性好",[99,136465,136466],{},"用MP4就可以",[15,136468,136470],{"className":127370,"code":136469,"language":127372,"meta":20,"style":20},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[22,136471,136472],{"__ignoreMap":20},[25,136473,136474,136476,136478,136480,136482,136485,136487,136490,136493,136496,136498,136500],{"class":27,"line":28},[25,136475,1153],{"class":244},[25,136477,28254],{"class":51371},[25,136479,55310],{"class":31},[25,136481,290],{"class":244},[25,136483,136484],{"class":45},"\"movie.mp4\"",[25,136486,92494],{"class":31},[25,136488,136489],{"class":31}," autoplay",[25,136491,136492],{"class":31}," muted",[25,136494,136495],{"class":31}," loop",[25,136497,55385],{"class":244},[25,136499,28254],{"class":51371},[25,136501,51378],{"class":244},[194,136503,136504],{"start":39},[106,136505,136506],{},"兼容写法",[99,136508,136509],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[15,136511,136512],{"className":127370,"code":136469,"language":127372,"meta":20,"style":20},[22,136513,136514],{"__ignoreMap":20},[25,136515,136516,136518,136520,136522,136524,136526,136528,136530,136532,136534,136536,136538],{"class":27,"line":28},[25,136517,1153],{"class":244},[25,136519,28254],{"class":51371},[25,136521,55310],{"class":31},[25,136523,290],{"class":244},[25,136525,136484],{"class":45},[25,136527,92494],{"class":31},[25,136529,136489],{"class":31},[25,136531,136492],{"class":31},[25,136533,136495],{"class":31},[25,136535,55385],{"class":244},[25,136537,28254],{"class":51371},[25,136539,51378],{"class":244},[99,136541,136542],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[194,136544,136545],{"start":51},[106,136546,136547],{},"video常用属性",[155,136549],{"style":126479,"src":136550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[99,136552,136553],{},"poster属性后面是跟的等待加载图片的地址",[15,136555,136556],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,136557,136558],{"__ignoreMap":20},[25,136559,136560,136562,136564,136566,136568,136570,136572,136574,136576,136578,136580,136582],{"class":27,"line":28},[25,136561,1153],{"class":244},[25,136563,155],{"class":51371},[25,136565,55310],{"class":31},[25,136567,290],{"class":244},[25,136569,134140],{"class":45},[25,136571,55318],{"class":31},[25,136573,290],{"class":244},[25,136575,134147],{"class":45},[25,136577,134150],{"class":31},[25,136579,290],{"class":244},[25,136581,134155],{"class":45},[25,136583,51378],{"class":244},[99,136585,136586],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[15,136588,136590],{"className":126623,"code":136589,"language":126625,"meta":20,"style":20},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[22,136591,136592,136597,136603,136627,136632,136637],{"__ignoreMap":20},[25,136593,136594],{"class":27,"line":28},[25,136595,136596],{"class":302},"\u002F* 2D 位移 *\u002F\n",[25,136598,136599,136601],{"class":27,"line":39},[25,136600,51682],{"class":51371},[25,136602,15682],{"class":244},[25,136604,136605,136608,136610,136613,136615,136617,136619,136621,136623,136625],{"class":27,"line":51},[25,136606,136607],{"class":35},"  transform",[25,136609,51508],{"class":244},[25,136611,136612],{"class":35},"translate",[25,136614,245],{"class":244},[25,136616,554],{"class":35},[25,136618,51563],{"class":240},[25,136620,12545],{"class":244},[25,136622,899],{"class":35},[25,136624,51563],{"class":240},[25,136626,2829],{"class":244},[25,136628,136629],{"class":27,"line":59},[25,136630,136631],{"class":302},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[25,136633,136634],{"class":27,"line":67},[25,136635,136636],{"class":302},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[25,136638,136639],{"class":27,"line":75},[25,136640,1676],{"class":244},[99,136642,136643],{},"muted:自动静音属性",[22108,136645,136647],{"id":136646},"_14122-音频标签audio","14.1.2.2 音频标签audio",[194,136649,136650],{},[106,136651,136652],{},"基本使用",[99,136654,136655,136656,136661,136662],{},"当前 ",[392,136657,136658],{},[22,136659,136660],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[392,136663,136664],{},"mp3格式",[155,136666],{"style":126479,"src":136667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[194,136669,136670],{"start":39},[106,136671,136506],{},[15,136673,136674],{"className":127370,"code":136469,"language":127372,"meta":20,"style":20},[22,136675,136676],{"__ignoreMap":20},[25,136677,136678,136680,136682,136684,136686,136688,136690,136692,136694,136696,136698,136700],{"class":27,"line":28},[25,136679,1153],{"class":244},[25,136681,28254],{"class":51371},[25,136683,55310],{"class":31},[25,136685,290],{"class":244},[25,136687,136484],{"class":45},[25,136689,92494],{"class":31},[25,136691,136489],{"class":31},[25,136693,136492],{"class":31},[25,136695,136495],{"class":31},[25,136697,55385],{"class":244},[25,136699,28254],{"class":51371},[25,136701,51378],{"class":244},[99,136703,136704],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[194,136706,136707],{"start":51},[106,136708,136709],{},"常用属性",[155,136711],{"style":126479,"src":136712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[15,136714,136715],{"className":127370,"code":136469,"language":127372,"meta":20,"style":20},[22,136716,136717],{"__ignoreMap":20},[25,136718,136719,136721,136723,136725,136727,136729,136731,136733,136735,136737,136739,136741],{"class":27,"line":28},[25,136720,1153],{"class":244},[25,136722,28254],{"class":51371},[25,136724,55310],{"class":31},[25,136726,290],{"class":244},[25,136728,136484],{"class":45},[25,136730,92494],{"class":31},[25,136732,136489],{"class":31},[25,136734,136492],{"class":31},[25,136736,136495],{"class":31},[25,136738,55385],{"class":244},[25,136740,28254],{"class":51371},[25,136742,51378],{"class":244},[99,136744,136745],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22108,136747,136749],{"id":136748},"_14123-总结","14.1.2.3 总结",[103,136751,136752,136755,136758,136761,136764],{},[106,136753,136754],{},"音频标签和视频标签使用方式基本一致",[106,136756,136757],{},"浏览器支持情况不同",[106,136759,136760],{},"谷歌浏览器把音频和视频自动播放禁止了",[106,136762,136763],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[106,136765,136766],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[210,136768,136770],{"id":136769},"_1413-表单元素","14.1.3 表单元素",[22108,136772,136774],{"id":136773},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[155,136776],{"style":126479,"src":136777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[15,136779,136781],{"className":127370,"code":136780,"language":127372,"meta":20,"style":20},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[22,136782,136783],{"__ignoreMap":20},[25,136784,136785,136787,136789,136791,136793,136795,136797,136799,136802,136804,136806,136809],{"class":27,"line":28},[25,136786,1153],{"class":244},[25,136788,53892],{"class":51371},[25,136790,53895],{"class":31},[25,136792,290],{"class":244},[25,136794,62770],{"class":45},[25,136796,15030],{"class":31},[25,136798,290],{"class":244},[25,136800,136801],{"class":45},"\"username\"",[25,136803,61091],{"class":31},[25,136805,290],{"class":244},[25,136807,136808],{"class":45},"\"请输入用户名\"",[25,136810,51378],{"class":244},[155,136812],{"style":126479,"src":136813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22108,136815,136817],{"id":136816},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[155,136819],{"style":126479,"src":136820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[99,136822,136823],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[99,136825,136826],{},"快捷操作：",[155,136828],{"style":126479,"src":136829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[99,136831,136832],{},"例子1：",[15,136834,136836],{"className":127370,"code":136835,"language":127372,"meta":20,"style":20},"\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",[22,136837,136838,136861,136888,136917,136936],{"__ignoreMap":20},[25,136839,136840,136842,136844,136846,136848,136851,136854,136856,136859],{"class":27,"line":28},[25,136841,1153],{"class":244},[25,136843,66696],{"class":51371},[25,136845,66699],{"class":31},[25,136847,290],{"class":244},[25,136849,136850],{"class":45},"\"\u002Fsubmit\"",[25,136852,136853],{"class":31}," method",[25,136855,290],{"class":244},[25,136857,136858],{"class":45},"\"post\"",[25,136860,51378],{"class":244},[25,136862,136863,136865,136867,136869,136871,136873,136875,136877,136879,136881,136883,136886],{"class":27,"line":39},[25,136864,52215],{"class":244},[25,136866,53892],{"class":51371},[25,136868,53895],{"class":31},[25,136870,290],{"class":244},[25,136872,62770],{"class":45},[25,136874,15030],{"class":31},[25,136876,290],{"class":244},[25,136878,136801],{"class":45},[25,136880,61091],{"class":31},[25,136882,290],{"class":244},[25,136884,136885],{"class":45},"\"用户名\"",[25,136887,51378],{"class":244},[25,136889,136890,136892,136894,136896,136898,136901,136903,136905,136908,136910,136912,136915],{"class":27,"line":51},[25,136891,52215],{"class":244},[25,136893,53892],{"class":51371},[25,136895,53895],{"class":31},[25,136897,290],{"class":244},[25,136899,136900],{"class":45},"\"password\"",[25,136902,15030],{"class":31},[25,136904,290],{"class":244},[25,136906,136907],{"class":45},"\"pwd\"",[25,136909,61091],{"class":31},[25,136911,290],{"class":244},[25,136913,136914],{"class":45},"\"密码\"",[25,136916,51378],{"class":244},[25,136918,136919,136921,136923,136925,136927,136929,136932,136934],{"class":27,"line":59},[25,136920,52215],{"class":244},[25,136922,53958],{"class":51371},[25,136924,53895],{"class":31},[25,136926,290],{"class":244},[25,136928,66719],{"class":45},[25,136930,136931],{"class":244},">提交\u003C\u002F",[25,136933,53958],{"class":51371},[25,136935,51378],{"class":244},[25,136937,136938,136940,136942],{"class":27,"line":67},[25,136939,51856],{"class":244},[25,136941,66696],{"class":51371},[25,136943,51378],{"class":244},[155,136945],{"style":126479,"src":136946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[99,136948,136949],{},"value是表单域的内容",[99,136951,136952],{},"例子2：",[15,136954,136955],{"className":127370,"code":136835,"language":127372,"meta":20,"style":20},[22,136956,136957,136977,137003,137029,137047],{"__ignoreMap":20},[25,136958,136959,136961,136963,136965,136967,136969,136971,136973,136975],{"class":27,"line":28},[25,136960,1153],{"class":244},[25,136962,66696],{"class":51371},[25,136964,66699],{"class":31},[25,136966,290],{"class":244},[25,136968,136850],{"class":45},[25,136970,136853],{"class":31},[25,136972,290],{"class":244},[25,136974,136858],{"class":45},[25,136976,51378],{"class":244},[25,136978,136979,136981,136983,136985,136987,136989,136991,136993,136995,136997,136999,137001],{"class":27,"line":39},[25,136980,52215],{"class":244},[25,136982,53892],{"class":51371},[25,136984,53895],{"class":31},[25,136986,290],{"class":244},[25,136988,62770],{"class":45},[25,136990,15030],{"class":31},[25,136992,290],{"class":244},[25,136994,136801],{"class":45},[25,136996,61091],{"class":31},[25,136998,290],{"class":244},[25,137000,136885],{"class":45},[25,137002,51378],{"class":244},[25,137004,137005,137007,137009,137011,137013,137015,137017,137019,137021,137023,137025,137027],{"class":27,"line":51},[25,137006,52215],{"class":244},[25,137008,53892],{"class":51371},[25,137010,53895],{"class":31},[25,137012,290],{"class":244},[25,137014,136900],{"class":45},[25,137016,15030],{"class":31},[25,137018,290],{"class":244},[25,137020,136907],{"class":45},[25,137022,61091],{"class":31},[25,137024,290],{"class":244},[25,137026,136914],{"class":45},[25,137028,51378],{"class":244},[25,137030,137031,137033,137035,137037,137039,137041,137043,137045],{"class":27,"line":59},[25,137032,52215],{"class":244},[25,137034,53958],{"class":51371},[25,137036,53895],{"class":31},[25,137038,290],{"class":244},[25,137040,66719],{"class":45},[25,137042,136931],{"class":244},[25,137044,53958],{"class":51371},[25,137046,51378],{"class":244},[25,137048,137049,137051,137053],{"class":27,"line":67},[25,137050,51856],{"class":244},[25,137052,66696],{"class":51371},[25,137054,51378],{"class":244},[155,137056],{"style":126479,"src":137057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[182,137059,137061],{"id":137060},"_142-css新特性","14.2 CSS新特性",[210,137063,137065],{"id":137064},"_1421-新增选择器","14.2.1 新增选择器",[22108,137067,137069],{"id":137068},"_14211-属性选择器","14.2.1.1 属性选择器",[155,137071],{"style":126479,"src":137072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[15,137074,137076],{"className":126623,"code":137075,"language":126625,"meta":20,"style":20},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[22,137077,137078,137093,137109],{"__ignoreMap":20},[25,137079,137080,137082,137084,137086,137088,137090],{"class":27,"line":28},[25,137081,53892],{"class":51371},[25,137083,1133],{"class":244},[25,137085,103178],{"class":31},[25,137087,290],{"class":240},[25,137089,62770],{"class":45},[25,137091,137092],{"class":244},"] {\n",[25,137094,137095,137097,137099,137101,137103,137105,137107],{"class":27,"line":39},[25,137096,70967],{"class":35},[25,137098,51508],{"class":244},[25,137100,460],{"class":35},[25,137102,51563],{"class":240},[25,137104,51592],{"class":35},[25,137106,130203],{"class":35},[25,137108,1403],{"class":244},[25,137110,137111],{"class":27,"line":51},[25,137112,1676],{"class":244},[155,137114],{"style":126479,"src":137115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[99,137117,274],{},[103,137119,137120,137123,137126,137129],{},[106,137121,137122],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[106,137124,137125],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[106,137127,137128],{},"属性选择器也可以选择出来自定义的属性",[106,137130,137131,137133],{},[392,137132,9135],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22108,137135,137137],{"id":137136},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[155,137139],{"style":126479,"src":137140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[194,137142,137143],{},[106,137144,137145],{},"fist-child",[15,137147,137149],{"className":126623,"code":137148,"language":126625,"meta":20,"style":20},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[22,137150,137151,137156,137171,137191,137209],{"__ignoreMap":20},[25,137152,137153],{"class":27,"line":28},[25,137154,137155],{"class":302},"\u002F* 属性选择器 *\u002F\n",[25,137157,137158,137160,137162,137164,137166,137168],{"class":27,"line":39},[25,137159,53892],{"class":51371},[25,137161,1133],{"class":244},[25,137163,103178],{"class":31},[25,137165,290],{"class":240},[25,137167,62770],{"class":45},[25,137169,137170],{"class":244},"] { }\n",[25,137172,137173,137175,137177,137179,137182,137185,137188],{"class":27,"line":51},[25,137174,53892],{"class":51371},[25,137176,1133],{"class":244},[25,137178,14804],{"class":31},[25,137180,137181],{"class":240},"^=",[25,137183,137184],{"class":45},"\"icon\"",[25,137186,137187],{"class":244},"] { }  ",[25,137189,137190],{"class":302},"\u002F* 以 icon 开头 *\u002F\n",[25,137192,137193,137195,137197,137199,137202,137204,137206],{"class":27,"line":59},[25,137194,53892],{"class":51371},[25,137196,1133],{"class":244},[25,137198,14804],{"class":31},[25,137200,137201],{"class":240},"$=",[25,137203,137184],{"class":45},[25,137205,137187],{"class":244},[25,137207,137208],{"class":302},"\u002F* 以 icon 结尾 *\u002F\n",[25,137210,137211,137213,137215,137217,137220,137222,137224],{"class":27,"line":67},[25,137212,53892],{"class":51371},[25,137214,1133],{"class":244},[25,137216,14804],{"class":31},[25,137218,137219],{"class":240},"*=",[25,137221,137184],{"class":45},[25,137223,137187],{"class":244},[25,137225,137226],{"class":302},"\u002F* 包含 icon *\u002F\n",[99,137228,137229],{},"ul的第一个儿子文本为红色",[99,137231,137232],{},"一定要在冒号前加空格，不然就是选中所有的了",[15,137234,137236],{"className":126623,"code":137235,"language":126625,"meta":20,"style":20},".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",[22,137237,137238,137244,137254,137258,137262,137267,137280,137293,137309,137326,137343],{"__ignoreMap":20},[25,137239,137240,137242],{"class":27,"line":28},[25,137241,126914],{"class":31},[25,137243,15682],{"class":244},[25,137245,137246,137248,137250,137252],{"class":27,"line":39},[25,137247,70976],{"class":35},[25,137249,51508],{"class":244},[25,137251,57492],{"class":35},[25,137253,1403],{"class":244},[25,137255,137256],{"class":27,"line":51},[25,137257,1676],{"class":244},[25,137259,137260],{"class":27,"line":59},[25,137261,136084],{"class":244},[25,137263,137264],{"class":27,"line":67},[25,137265,137266],{"class":302},"\u002F* 结构伪类选择器 *\u002F\n",[25,137268,137269,137271,137274,137277],{"class":27,"line":75},[25,137270,106],{"class":51371},[25,137272,137273],{"class":31},":first-child",[25,137275,137276],{"class":244}," { }           ",[25,137278,137279],{"class":302},"\u002F* 第一个 *\u002F\n",[25,137281,137282,137284,137287,137290],{"class":27,"line":83},[25,137283,106],{"class":51371},[25,137285,137286],{"class":31},":last-child",[25,137288,137289],{"class":244}," { }            ",[25,137291,137292],{"class":302},"\u002F* 最后一个 *\u002F\n",[25,137294,137295,137297,137299,137301,137303,137306],{"class":27,"line":91},[25,137296,106],{"class":51371},[25,137298,129537],{"class":31},[25,137300,245],{"class":244},[25,137302,321],{"class":35},[25,137304,137305],{"class":244},") { }          ",[25,137307,137308],{"class":302},"\u002F* 第2个 *\u002F\n",[25,137310,137311,137313,137315,137317,137320,137323],{"class":27,"line":1429},[25,137312,106],{"class":51371},[25,137314,129537],{"class":31},[25,137316,245],{"class":244},[25,137318,137319],{"class":35},"2n",[25,137321,137322],{"class":244},") { }         ",[25,137324,137325],{"class":302},"\u002F* 偶数 *\u002F\n",[25,137327,137328,137330,137332,137334,137337,137340],{"class":27,"line":1441},[25,137329,106],{"class":51371},[25,137331,129537],{"class":31},[25,137333,245],{"class":244},[25,137335,137336],{"class":35},"2n+1",[25,137338,137339],{"class":244},") { }       ",[25,137341,137342],{"class":302},"\u002F* 奇数 *\u002F\n",[25,137344,137345,137347,137349,137351,137354,137356],{"class":27,"line":1723},[25,137346,106],{"class":51371},[25,137348,129537],{"class":31},[25,137350,245],{"class":244},[25,137352,137353],{"class":35},"-n+3",[25,137355,137339],{"class":244},[25,137357,137358],{"class":302},"\u002F* 前3个 *\u002F\n",[51682,137360,137363],{"className":137361},[137362],"example","\n  示例内容\n",[99,137365,137366],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[103,137368,137369],{},[106,137370,137371,137374],{},[22,137372,137373],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[99,137376,137377],{},"也就是说它选择的是熊大",[194,137379,137380],{"start":75},[106,137381,137382],{},"权重",[15,137384,137386],{"className":126623,"code":137385,"language":126625,"meta":20,"style":20},"\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",[22,137387,137388,137392,137402,137412,137426,137440,137454],{"__ignoreMap":20},[25,137389,137390],{"class":27,"line":28},[25,137391,137266],{"class":302},[25,137393,137394,137396,137398,137400],{"class":27,"line":39},[25,137395,106],{"class":51371},[25,137397,137273],{"class":31},[25,137399,137276],{"class":244},[25,137401,137279],{"class":302},[25,137403,137404,137406,137408,137410],{"class":27,"line":51},[25,137405,106],{"class":51371},[25,137407,137286],{"class":31},[25,137409,137289],{"class":244},[25,137411,137292],{"class":302},[25,137413,137414,137416,137418,137420,137422,137424],{"class":27,"line":59},[25,137415,106],{"class":51371},[25,137417,129537],{"class":31},[25,137419,245],{"class":244},[25,137421,321],{"class":35},[25,137423,137305],{"class":244},[25,137425,137308],{"class":302},[25,137427,137428,137430,137432,137434,137436,137438],{"class":27,"line":67},[25,137429,106],{"class":51371},[25,137431,129537],{"class":31},[25,137433,245],{"class":244},[25,137435,137319],{"class":35},[25,137437,137322],{"class":244},[25,137439,137325],{"class":302},[25,137441,137442,137444,137446,137448,137450,137452],{"class":27,"line":75},[25,137443,106],{"class":51371},[25,137445,129537],{"class":31},[25,137447,245],{"class":244},[25,137449,137336],{"class":35},[25,137451,137339],{"class":244},[25,137453,137342],{"class":302},[25,137455,137456,137458,137460,137462,137464,137466],{"class":27,"line":83},[25,137457,106],{"class":51371},[25,137459,129537],{"class":31},[25,137461,245],{"class":244},[25,137463,137353],{"class":35},[25,137465,137339],{"class":244},[25,137467,137358],{"class":302},[99,137469,137470],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22108,137472,137474],{"id":137473},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[99,137476,137477],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[155,137479],{"style":126479,"src":137480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[194,137482,137483],{},[106,137484,274],{},[103,137486,137487,137490,137493,137496,137499,137502],{},[106,137488,137489],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[106,137491,137492],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[106,137494,137495],{},"语法： element::before {}",[106,137497,137498],{},"before 和 after 必须有 content 属性",[106,137500,137501],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[106,137503,137504],{},"伪元素选择器和标签选择器一样，权重为 1",[194,137506,137507],{"start":39},[106,137508,137509],{},"实例",[15,137511,137512],{"className":126623,"code":137385,"language":126625,"meta":20,"style":20},[22,137513,137514,137518,137528,137538,137552,137566,137580],{"__ignoreMap":20},[25,137515,137516],{"class":27,"line":28},[25,137517,137266],{"class":302},[25,137519,137520,137522,137524,137526],{"class":27,"line":39},[25,137521,106],{"class":51371},[25,137523,137273],{"class":31},[25,137525,137276],{"class":244},[25,137527,137279],{"class":302},[25,137529,137530,137532,137534,137536],{"class":27,"line":51},[25,137531,106],{"class":51371},[25,137533,137286],{"class":31},[25,137535,137289],{"class":244},[25,137537,137292],{"class":302},[25,137539,137540,137542,137544,137546,137548,137550],{"class":27,"line":59},[25,137541,106],{"class":51371},[25,137543,129537],{"class":31},[25,137545,245],{"class":244},[25,137547,321],{"class":35},[25,137549,137305],{"class":244},[25,137551,137308],{"class":302},[25,137553,137554,137556,137558,137560,137562,137564],{"class":27,"line":67},[25,137555,106],{"class":51371},[25,137557,129537],{"class":31},[25,137559,245],{"class":244},[25,137561,137319],{"class":35},[25,137563,137322],{"class":244},[25,137565,137325],{"class":302},[25,137567,137568,137570,137572,137574,137576,137578],{"class":27,"line":75},[25,137569,106],{"class":51371},[25,137571,129537],{"class":31},[25,137573,245],{"class":244},[25,137575,137336],{"class":35},[25,137577,137339],{"class":244},[25,137579,137342],{"class":302},[25,137581,137582,137584,137586,137588,137590,137592],{"class":27,"line":83},[25,137583,106],{"class":51371},[25,137585,129537],{"class":31},[25,137587,245],{"class":244},[25,137589,137353],{"class":35},[25,137591,137339],{"class":244},[25,137593,137358],{"class":302},[155,137595],{"style":126479,"src":137596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[194,137598,137599],{"start":51},[106,137600,137601],{},"使用场景1",[155,137603],{"style":126479,"src":137604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[99,137606,137607],{},"不需要再加盒子来整红色那部分了",[15,137609,137611],{"className":126623,"code":137610,"language":126625,"meta":20,"style":20},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[22,137612,137613,137618,137627,137638,137648,137652,137661,137672,137682],{"__ignoreMap":20},[25,137614,137615],{"class":27,"line":28},[25,137616,137617],{"class":302},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[25,137619,137620,137622,137625],{"class":27,"line":39},[25,137621,51682],{"class":51371},[25,137623,137624],{"class":31},"::before",[25,137626,15682],{"class":244},[25,137628,137629,137632,137634,137636],{"class":27,"line":51},[25,137630,137631],{"class":35},"  content",[25,137633,51508],{"class":244},[25,137635,7762],{"class":45},[25,137637,1403],{"class":244},[25,137639,137640,137642,137644,137646],{"class":27,"line":59},[25,137641,128239],{"class":35},[25,137643,51508],{"class":244},[25,137645,60940],{"class":35},[25,137647,1403],{"class":244},[25,137649,137650],{"class":27,"line":67},[25,137651,1676],{"class":244},[25,137653,137654,137656,137659],{"class":27,"line":75},[25,137655,51682],{"class":51371},[25,137657,137658],{"class":31},"::after",[25,137660,15682],{"class":244},[25,137662,137663,137665,137667,137670],{"class":27,"line":83},[25,137664,137631],{"class":35},[25,137666,51508],{"class":244},[25,137668,137669],{"class":45},"\"→\"",[25,137671,1403],{"class":244},[25,137673,137674,137676,137678,137680],{"class":27,"line":91},[25,137675,70976],{"class":35},[25,137677,51508],{"class":244},[25,137679,62141],{"class":35},[25,137681,1403],{"class":244},[25,137683,137684],{"class":27,"line":1429},[25,137685,1676],{"class":244},[155,137687],{"style":126479,"src":137688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[99,137690,137691],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[155,137693],{"style":126479,"src":137694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[99,137696,137697],{},"但是在引用时需要先转义一下",[99,137699,137700],{},"content='\\e930'",[194,137702,137703],{"start":59},[106,137704,137705],{},"使用场景2",[99,137707,137708],{},"仿土豆效果",[99,137710,137711],{},"通过使用伪元素选择器可以减少body中盒子的数量",[15,137713,137714],{"className":126623,"code":137610,"language":126625,"meta":20,"style":20},[22,137715,137716,137720,137728,137738,137748,137752,137760,137770,137780],{"__ignoreMap":20},[25,137717,137718],{"class":27,"line":28},[25,137719,137617],{"class":302},[25,137721,137722,137724,137726],{"class":27,"line":39},[25,137723,51682],{"class":51371},[25,137725,137624],{"class":31},[25,137727,15682],{"class":244},[25,137729,137730,137732,137734,137736],{"class":27,"line":51},[25,137731,137631],{"class":35},[25,137733,51508],{"class":244},[25,137735,7762],{"class":45},[25,137737,1403],{"class":244},[25,137739,137740,137742,137744,137746],{"class":27,"line":59},[25,137741,128239],{"class":35},[25,137743,51508],{"class":244},[25,137745,60940],{"class":35},[25,137747,1403],{"class":244},[25,137749,137750],{"class":27,"line":67},[25,137751,1676],{"class":244},[25,137753,137754,137756,137758],{"class":27,"line":75},[25,137755,51682],{"class":51371},[25,137757,137658],{"class":31},[25,137759,15682],{"class":244},[25,137761,137762,137764,137766,137768],{"class":27,"line":83},[25,137763,137631],{"class":35},[25,137765,51508],{"class":244},[25,137767,137669],{"class":45},[25,137769,1403],{"class":244},[25,137771,137772,137774,137776,137778],{"class":27,"line":91},[25,137773,70976],{"class":35},[25,137775,51508],{"class":244},[25,137777,62141],{"class":35},[25,137779,1403],{"class":244},[25,137781,137782],{"class":27,"line":1429},[25,137783,1676],{"class":244},[155,137785],{"style":126479,"src":137786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[194,137788,137789],{"start":67},[106,137790,137791],{},"使用场景3",[99,137793,137794],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[15,137796,137798],{"className":126623,"code":137797,"language":126625,"meta":20,"style":20},".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",[22,137799,137800,137806,137816,137820,137824,137828,137836,137846,137856,137860,137868,137878,137888],{"__ignoreMap":20},[25,137801,137802,137804],{"class":27,"line":28},[25,137803,130471],{"class":31},[25,137805,15682],{"class":244},[25,137807,137808,137810,137812,137814],{"class":27,"line":39},[25,137809,131103],{"class":35},[25,137811,51508],{"class":244},[25,137813,23846],{"class":35},[25,137815,1403],{"class":244},[25,137817,137818],{"class":27,"line":51},[25,137819,1676],{"class":244},[25,137821,137822],{"class":27,"line":59},[25,137823,136084],{"class":244},[25,137825,137826],{"class":27,"line":67},[25,137827,137617],{"class":302},[25,137829,137830,137832,137834],{"class":27,"line":75},[25,137831,51682],{"class":51371},[25,137833,137624],{"class":31},[25,137835,15682],{"class":244},[25,137837,137838,137840,137842,137844],{"class":27,"line":83},[25,137839,137631],{"class":35},[25,137841,51508],{"class":244},[25,137843,7762],{"class":45},[25,137845,1403],{"class":244},[25,137847,137848,137850,137852,137854],{"class":27,"line":91},[25,137849,128239],{"class":35},[25,137851,51508],{"class":244},[25,137853,60940],{"class":35},[25,137855,1403],{"class":244},[25,137857,137858],{"class":27,"line":1429},[25,137859,1676],{"class":244},[25,137861,137862,137864,137866],{"class":27,"line":1441},[25,137863,51682],{"class":51371},[25,137865,137658],{"class":31},[25,137867,15682],{"class":244},[25,137869,137870,137872,137874,137876],{"class":27,"line":1723},[25,137871,137631],{"class":35},[25,137873,51508],{"class":244},[25,137875,137669],{"class":45},[25,137877,1403],{"class":244},[25,137879,137880,137882,137884,137886],{"class":27,"line":1728},[25,137881,70976],{"class":35},[25,137883,51508],{"class":244},[25,137885,62141],{"class":35},[25,137887,1403],{"class":244},[25,137889,137890],{"class":27,"line":1734},[25,137891,1676],{"class":244},[99,137893,137894],{},"div {\nmargin: 0 auto;\n}",[15,137896,137899],{"className":137897,"code":137898,"language":5297},[5295],"\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",[22,137900,137898],{"__ignoreMap":20},[99,137902,137903],{},"如果想让多个元素都发生变化",[99,137905,137906],{},"不能如下操作：",[99,137908,137909],{},"transition: width 2s ease 0.5s;",[99,137911,137912],{},"transition: height 2s ease 0.5s;不对！！！",[99,137914,137915],{},"上方会样式冲突，导致不显示任何过渡效果",[99,137917,137918],{},"使用如下：加逗号隔开",[99,137920,137921],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[99,137923,137924],{},"transition all 2s ease;",[210,137926,137928],{"id":137927},"_1426-过渡练习","14.2.6 过渡练习",[194,137930,137931],{},[106,137932,137933],{},"进度条",[155,137935],{"style":126479,"src":137936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[15,137938,137940],{"className":126623,"code":137939,"language":126625,"meta":20,"style":20},"div {\n  transition: all 0.3s ease;\n}\n",[22,137941,137942,137948,137966],{"__ignoreMap":20},[25,137943,137944,137946],{"class":27,"line":28},[25,137945,51682],{"class":51371},[25,137947,15682],{"class":244},[25,137949,137950,137953,137955,137957,137960,137962,137964],{"class":27,"line":39},[25,137951,137952],{"class":35},"  transition",[25,137954,51508],{"class":244},[25,137956,28192],{"class":35},[25,137958,137959],{"class":35}," 0.3",[25,137961,938],{"class":240},[25,137963,78751],{"class":35},[25,137965,1403],{"class":244},[25,137967,137968],{"class":27,"line":51},[25,137969,1676],{"class":244},[194,137971,137972],{"start":39},[106,137973,137974],{},"小米logo",[99,137976,137977],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[15,137979,137981],{"className":126623,"code":137980,"language":126625,"meta":20,"style":20},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[22,137982,137983,137988,137994,138010,138015],{"__ignoreMap":20},[25,137984,137985],{"class":27,"line":28},[25,137986,137987],{"class":302},"\u002F* CSS3 过渡 *\u002F\n",[25,137989,137990,137992],{"class":27,"line":39},[25,137991,51682],{"class":51371},[25,137993,15682],{"class":244},[25,137995,137996,137998,138000,138002,138004,138006,138008],{"class":27,"line":51},[25,137997,137952],{"class":35},[25,137999,51508],{"class":244},[25,138001,28192],{"class":35},[25,138003,137959],{"class":35},[25,138005,938],{"class":240},[25,138007,78751],{"class":35},[25,138009,1403],{"class":244},[25,138011,138012],{"class":27,"line":59},[25,138013,138014],{"class":302},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[25,138016,138017],{"class":27,"line":67},[25,138018,1676],{"class":244},[99,138020,138021],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[159,138023,138024],{},"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":20,"searchDepth":39,"depth":39,"links":138026},[138027,138032],{"id":136357,"depth":39,"text":136358,"children":138028},[138029,138030,138031],{"id":136361,"depth":51,"text":136362},{"id":136438,"depth":51,"text":136439},{"id":136769,"depth":51,"text":136770},{"id":137060,"depth":39,"text":137061,"children":138033},[138034,138035],{"id":137064,"depth":51,"text":137065},{"id":137927,"depth":51,"text":137928},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136349,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138042,"title":138043,"body":138044,"description":164,"extension":165,"meta":139788,"navigation":167,"path":139789,"seo":139790,"stem":139791,"__hash__":139792},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138045,"toc":139769},[138046,138049,138053,138056,138062,138068,138072,138074,138077,138080,138083,138086,138089,138092,138095,138099,138103,138106,138109,138112,138116,138119,138122,138127,138130,138133,138136,138140,138143,138152,138155,138158,138162,138165,138168,138173,138180,138194,138202,138209,138214,138217,138220,138223,138230,138234,138240,138246,138249,138252,138257,138263,138265,138273,138278,138281,138287,138289,138294,138299,138302,138304,138309,138312,138317,138322,138356,138360,138364,138367,138371,138374,138460,138463,138500,138503,138539,138543,138548,138561,138615,138617,138645,138647,138675,138681,138695,138697,138741,138743,138787,138790,138797,138808,138810,138837,138839,138865,138872,138888,138890,138984,138986,139080,139087,139090,139095,139101,139175,139178,139180,139216,139218,139254,139257,139264,139283,139286,139289,139291,139316,139318,139342,139345,139348,139378,139382,139385,139448,139450,139516,139518,139582,139585,139617,139619,139645,139647,139673,139676,139707,139709,139735,139737,139763,139766],[10,138047,138043],{"id":138048},"_15-品优购项目上篇-搭建与公共模块",[182,138050,138052],{"id":138051},"_151-项目规划","15.1 项目规划",[155,138054],{"style":126479,"src":138055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[99,138057,138058,138061],{},[392,138059,138060],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[99,138063,138064,138067],{},[392,138065,138066],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[182,138069,138071],{"id":138070},"_152-项目介绍","15.2 项目介绍",[99,138073,138060],{},[155,138075],{"style":126479,"src":138076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[99,138078,138079],{},"主页：",[155,138081],{"style":126479,"src":138082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[99,138084,138085],{},"列表页：",[155,138087],{"style":126479,"src":138088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[99,138090,138091],{},"注册页：",[155,138093],{"style":126479,"src":138094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[182,138096,138098],{"id":138097},"_153-项目搭建工作","15.3 项目搭建工作",[210,138100,138102],{"id":138101},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[155,138104],{"style":126479,"src":138105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[99,138107,138108],{},"经常更换的图片要放到upload文件夹中",[99,138110,138111],{},"不经常换的放到images文件夹中",[210,138113,138115],{"id":138114},"_1532-创建文件如下","15.3.2 创建文件如下",[155,138117],{"style":126479,"src":138118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[155,138120],{"style":126479,"src":138121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[99,138123,138124],{},[392,138125,138126],{},"初始化样式：",[99,138128,138129],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[99,138131,138132],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[99,138134,138135],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[210,138137,138139],{"id":138138},"_1533-项目模块化开发","15.3.3 项目模块化开发",[99,138141,138142],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[99,138144,138145,138146,138151],{},"这里最典型的应用就是 ",[392,138147,138148],{},[22,138149,138150],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[155,138153],{"style":126479,"src":138154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[99,138156,138157],{},"通过link方法来引入",[210,138159,138161],{"id":138160},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[155,138163],{"style":126479,"src":138164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[99,138166,138167],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[194,138169,138170],{},[106,138171,138172],{},"制作favicon图标",[99,138174,138175,138176,138179],{},"①把品优购图标切成 ",[22,138177,138178],{},"png"," 图片",[99,138181,138182,138183,138185,138186,138189,138190],{},"②把 ",[22,138184,138178],{}," 图片转换为 ",[22,138187,138188],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[481,138191,138192],{"href":138192,"rel":138193},"http:\u002F\u002Fwww.bitbug.net\u002F",[23973],[194,138195,138196,138199],{"start":39},[106,138197,138198],{},"favicon图标放到网站根目录下",[106,138200,138201],{},"HTML页面引入favicon",[99,138203,138204,138205,138208],{},"在html 页面里面的 ",[22,138206,138207],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[99,138210,138211],{},[22,138212,138213],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[99,138215,138216],{},"复制这行代码或者在生成这个的网站进行复制",[155,138218],{"style":126479,"src":138219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[99,138221,138222],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[99,138224,138225,138226],{},"例如:",[481,138227,138228],{"href":138228,"rel":138229},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23973],[210,138231,138233],{"id":138232},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[99,138235,138236,138239],{},[392,138237,138238],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[99,138241,138242,138245],{},[392,138243,138244],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[99,138247,138248],{},"页面必须有三个标签用来符合 SEO 优化",[155,138250],{"style":126479,"src":138251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[194,138253,138254],{},[106,138255,138256],{},"title网站标题",[99,138258,138259,138262],{},[392,138260,138261],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[99,138264,68861],{},[103,138266,138267,138270],{},[106,138268,138269],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[106,138271,138272],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[194,138274,138275],{"start":39},[106,138276,138277],{},"description网站描述",[99,138279,138280],{},"简要说明我们网站主要是做什么的",[99,138282,138283,138286],{},[392,138284,138285],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[99,138288,68861],{},[99,138290,138291],{},[22,138292,138293],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[194,138295,138296],{"start":51},[106,138297,138298],{},"keywords关键词",[99,138300,138301],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[99,138303,68861],{},[99,138305,138306],{},[22,138307,138308],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[99,138310,138311],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[99,138313,138314],{},[392,138315,138316],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[194,138318,138319],{"start":59},[106,138320,138321],{},"代码总结",[15,138323,138324],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,138325,138326,138330,138344,138348],{"__ignoreMap":20},[25,138327,138328],{"class":27,"line":28},[25,138329,130734],{"class":302},[25,138331,138332,138334,138336,138338,138340,138342],{"class":27,"line":39},[25,138333,1153],{"class":244},[25,138335,51682],{"class":51371},[25,138337,53557],{"class":31},[25,138339,290],{"class":244},[25,138341,130747],{"class":45},[25,138343,51378],{"class":244},[25,138345,138346],{"class":27,"line":51},[25,138347,130754],{"class":244},[25,138349,138350,138352,138354],{"class":27,"line":59},[25,138351,51856],{"class":244},[25,138353,51682],{"class":51371},[25,138355,51378],{"class":244},[182,138357,138359],{"id":138358},"_154-项目公共部分制作","15.4 项目公共部分制作",[210,138361,138363],{"id":138362},"_1541-常用模块类命名","15.4.1 常用模块类命名",[155,138365],{"style":126479,"src":138366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[210,138368,138370],{"id":138369},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[99,138372,138373],{},"布局思路：",[103,138375,138376,138379,138382,138404,138437],{},[106,138377,138378],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[106,138380,138381],{},"里面包含版心的盒子",[106,138383,138384,138385],{},"版心盒子里面包含 1 号左侧盒子左浮动",[103,138386,138387,138395,138401],{},[106,138388,138389,138390,21610,138392,138394],{},"1 号盒子 里面包含一个",[22,138391,103],{},[22,138393,103],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[106,138396,138397,138398,138400],{},"里面的内容是水平排列，所以需要给",[22,138399,106],{},"设置浮动",[106,138402,138403],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[106,138405,138406,138407],{},"版心盒子里面包含 2 号右侧盒子右浮动",[103,138408,138409,138423,138428],{},[106,138410,138411,138412,21610,138414,138416,138417,138419,138420,138422],{},"2 号盒子 里面包含一个",[22,138413,103],{},[22,138415,103],{},"包裹",[22,138418,106],{},"，中间的",[22,138421,1164],{},"可以用样式去设置，也可以用字符 |",[106,138424,138425,138426,138400],{},"里面内容水平排列，给",[22,138427,106],{},[106,138429,138430,138431,138433,138434,138436],{},"找到里面所有偶数的 ",[22,138432,106],{}," 设置样式（偶数的 ",[22,138435,106],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[106,138438,138439,138440],{},"需要用到字体图标",[103,138441,138442,138448,138451,138454,138457],{},[106,138443,138444,138445],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[22,138446,138447],{},"arrow-icon",[106,138449,138450],{},"先要引入字体图片的资源",[106,138452,138453],{},"在样式里面利用 font-face 来进行声明",[106,138455,138456],{},"在伪元素的 content属性设置 图标的编码",[106,138458,138459],{},"给伪元素设置font-family属性",[99,138461,138462],{},"结构实例代码：",[15,138464,138466],{"className":126623,"code":138465,"language":126625,"meta":20,"style":20},"div::before {\n  content: \"\";\n  display: block;\n}\n",[22,138467,138468,138476,138486,138496],{"__ignoreMap":20},[25,138469,138470,138472,138474],{"class":27,"line":28},[25,138471,51682],{"class":51371},[25,138473,137624],{"class":31},[25,138475,15682],{"class":244},[25,138477,138478,138480,138482,138484],{"class":27,"line":39},[25,138479,137631],{"class":35},[25,138481,51508],{"class":244},[25,138483,7762],{"class":45},[25,138485,1403],{"class":244},[25,138487,138488,138490,138492,138494],{"class":27,"line":51},[25,138489,128239],{"class":35},[25,138491,51508],{"class":244},[25,138493,60940],{"class":35},[25,138495,1403],{"class":244},[25,138497,138498],{"class":27,"line":59},[25,138499,1676],{"class":244},[99,138501,138502],{},"样式实例代码：",[15,138504,138505],{"className":126623,"code":138465,"language":126625,"meta":20,"style":20},[22,138506,138507,138515,138525,138535],{"__ignoreMap":20},[25,138508,138509,138511,138513],{"class":27,"line":28},[25,138510,51682],{"class":51371},[25,138512,137624],{"class":31},[25,138514,15682],{"class":244},[25,138516,138517,138519,138521,138523],{"class":27,"line":39},[25,138518,137631],{"class":35},[25,138520,51508],{"class":244},[25,138522,7762],{"class":45},[25,138524,1403],{"class":244},[25,138526,138527,138529,138531,138533],{"class":27,"line":51},[25,138528,128239],{"class":35},[25,138530,51508],{"class":244},[25,138532,60940],{"class":35},[25,138534,1403],{"class":244},[25,138536,138537],{"class":27,"line":59},[25,138538,1676],{"class":244},[210,138540,138542],{"id":138541},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[103,138544,138545],{},[106,138546,138547],{},"header 盒子必须要有高度",[99,138549,138550,138551,138553,138554],{},"1 号盒子是 ",[22,138552,131635],{}," 标志定位，在正常开发过程中， ",[392,138555,138556,138557,138560],{},"logo的布局其实是有讲究的，需要进行 ",[22,138558,138559],{},"logoSEO","的优化 （★★★）",[103,138562,138563,138571,138579,138606],{},[106,138564,138565,138567,138568,138570],{},[22,138566,131635],{}," 里面首先放一个 ",[22,138569,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[106,138572,138573,138575,138576,138578],{},[22,138574,10],{}," 里面再放一个链接，可以返回首页的，把 ",[22,138577,131635],{}," 的背景图片给链接即可",[106,138580,138581,138582],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[103,138583,138584,138599],{},[106,138585,138586,138587,138590,138591,138594,138595,138598],{},"方法1：",[22,138588,138589],{},"text-indent"," 移到盒子外面（",[22,138592,138593],{},"text-indent: -9999px",") ，然后 ",[22,138596,138597],{},"overflow:hidden"," ，淘宝的做法",[106,138600,138601,138602,138605],{},"方法2：直接给 ",[22,138603,138604],{},"font-size: 0;"," 就看不到文字了，京东的做法",[106,138607,138608,138609,138611,138612,138614],{},"最后给链接一个 ",[22,138610,51478],{}," 属性，这样鼠标放到 ",[22,138613,131635],{}," 上就可以看到提示文字了",[99,138616,138462],{},[15,138618,138619],{"className":127370,"code":131856,"language":127372,"meta":20,"style":20},[22,138620,138621],{"__ignoreMap":20},[25,138622,138623,138625,138627,138629,138631,138633,138635,138637,138639,138641,138643],{"class":27,"line":28},[25,138624,1153],{"class":244},[25,138626,481],{"class":51371},[25,138628,61128],{"class":31},[25,138630,290],{"class":244},[25,138632,131871],{"class":45},[25,138634,131874],{"class":31},[25,138636,290],{"class":244},[25,138638,131879],{"class":45},[25,138640,131882],{"class":244},[25,138642,481],{"class":51371},[25,138644,51378],{"class":244},[99,138646,138502],{},[15,138648,138649],{"className":127370,"code":131856,"language":127372,"meta":20,"style":20},[22,138650,138651],{"__ignoreMap":20},[25,138652,138653,138655,138657,138659,138661,138663,138665,138667,138669,138671,138673],{"class":27,"line":28},[25,138654,1153],{"class":244},[25,138656,481],{"class":51371},[25,138658,61128],{"class":31},[25,138660,290],{"class":244},[25,138662,131871],{"class":45},[25,138664,131874],{"class":31},[25,138666,290],{"class":244},[25,138668,131879],{"class":45},[25,138670,131882],{"class":244},[25,138672,481],{"class":51371},[25,138674,51378],{"class":244},[99,138676,138677,138678,138680],{},"2 号盒子是 ",[22,138679,131648],{}," 搜索模块定位",[103,138682,138683,138686,138689,138692],{},[106,138684,138685],{},"search盒子利用定位的方式放在对应的位置",[106,138687,138688],{},"search盒子设置绝对定位，header盒子设置相对定位",[106,138690,138691],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[106,138693,138694],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[99,138696,138462],{},[15,138698,138699],{"className":126623,"code":131943,"language":126625,"meta":20,"style":20},[22,138700,138701,138723,138727,138737],{"__ignoreMap":20},[25,138702,138703,138705,138707,138709,138711,138713,138715,138717,138719,138721],{"class":27,"line":28},[25,138704,51682],{"class":51371},[25,138706,12545],{"class":244},[25,138708,99],{"class":51371},[25,138710,12545],{"class":244},[25,138712,10],{"class":51371},[25,138714,12545],{"class":244},[25,138716,103],{"class":51371},[25,138718,12545],{"class":244},[25,138720,106],{"class":51371},[25,138722,15682],{"class":244},[25,138724,138725],{"class":27,"line":39},[25,138726,131972],{"class":302},[25,138728,138729,138731,138733,138735],{"class":27,"line":51},[25,138730,128239],{"class":35},[25,138732,51508],{"class":244},[25,138734,60940],{"class":35},[25,138736,1403],{"class":244},[25,138738,138739],{"class":27,"line":59},[25,138740,1676],{"class":244},[99,138742,138502],{},[15,138744,138745],{"className":126623,"code":131943,"language":126625,"meta":20,"style":20},[22,138746,138747,138769,138773,138783],{"__ignoreMap":20},[25,138748,138749,138751,138753,138755,138757,138759,138761,138763,138765,138767],{"class":27,"line":28},[25,138750,51682],{"class":51371},[25,138752,12545],{"class":244},[25,138754,99],{"class":51371},[25,138756,12545],{"class":244},[25,138758,10],{"class":51371},[25,138760,12545],{"class":244},[25,138762,103],{"class":51371},[25,138764,12545],{"class":244},[25,138766,106],{"class":51371},[25,138768,15682],{"class":244},[25,138770,138771],{"class":27,"line":39},[25,138772,131972],{"class":302},[25,138774,138775,138777,138779,138781],{"class":27,"line":51},[25,138776,128239],{"class":35},[25,138778,51508],{"class":244},[25,138780,60940],{"class":35},[25,138782,1403],{"class":244},[25,138784,138785],{"class":27,"line":59},[25,138786,1676],{"class":244},[99,138788,138789],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[99,138791,138792,138793,138796],{},"3 号盒子是 ",[22,138794,138795],{},"hotwords"," 热词模块定位",[103,138798,138799,138802,138805],{},[106,138800,138801],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[106,138803,138804],{},"给里面所有的a标签设置 左右10px的外边距",[106,138806,138807],{},"给第一个a标签设置文字变红色（#c81623）",[99,138809,138462],{},[15,138811,138813],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},"div {\n  margin: 0 auto;\n}\n",[22,138814,138815,138821,138833],{"__ignoreMap":20},[25,138816,138817,138819],{"class":27,"line":28},[25,138818,51682],{"class":51371},[25,138820,15682],{"class":244},[25,138822,138823,138825,138827,138829,138831],{"class":27,"line":39},[25,138824,70541],{"class":35},[25,138826,51508],{"class":244},[25,138828,434],{"class":35},[25,138830,51627],{"class":35},[25,138832,1403],{"class":244},[25,138834,138835],{"class":27,"line":51},[25,138836,1676],{"class":244},[99,138838,138502],{},[15,138840,138841],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},[22,138842,138843,138849,138861],{"__ignoreMap":20},[25,138844,138845,138847],{"class":27,"line":28},[25,138846,51682],{"class":51371},[25,138848,15682],{"class":244},[25,138850,138851,138853,138855,138857,138859],{"class":27,"line":39},[25,138852,70541],{"class":35},[25,138854,51508],{"class":244},[25,138856,434],{"class":35},[25,138858,51627],{"class":35},[25,138860,1403],{"class":244},[25,138862,138863],{"class":27,"line":51},[25,138864,1676],{"class":244},[99,138866,138867,138868,138871],{},"4 号盒子是 ",[22,138869,138870],{},"shopcar"," 购物车模块",[103,138873,138874,138879,138882,138885],{},[106,138875,123406,138876,138878],{},[22,138877,138870],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[106,138880,138881],{},"count 统计部分用绝对定位做",[106,138883,138884],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[106,138886,138887],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[99,138889,138462],{},[15,138891,138892],{"className":126623,"code":132055,"language":126625,"meta":20,"style":20},[22,138893,138894,138898,138912,138916,138930,138934,138948,138952,138966,138970],{"__ignoreMap":20},[25,138895,138896],{"class":27,"line":28},[25,138897,132062],{"class":302},[25,138899,138900,138902,138904,138906,138908,138910],{"class":27,"line":39},[25,138901,132067],{"class":31},[25,138903,79878],{"class":244},[25,138905,128983],{"class":35},[25,138907,51508],{"class":244},[25,138909,132076],{"class":35},[25,138911,129553],{"class":244},[25,138913,138914],{"class":27,"line":51},[25,138915,132083],{"class":302},[25,138917,138918,138920,138922,138924,138926,138928],{"class":27,"line":59},[25,138919,132088],{"class":31},[25,138921,79878],{"class":244},[25,138923,128983],{"class":35},[25,138925,51508],{"class":244},[25,138927,54835],{"class":35},[25,138929,129553],{"class":244},[25,138931,138932],{"class":27,"line":67},[25,138933,132103],{"class":302},[25,138935,138936,138938,138940,138942,138944,138946],{"class":27,"line":75},[25,138937,132108],{"class":31},[25,138939,79878],{"class":244},[25,138941,128983],{"class":35},[25,138943,51508],{"class":244},[25,138945,54902],{"class":35},[25,138947,129553],{"class":244},[25,138949,138950],{"class":27,"line":83},[25,138951,132123],{"class":302},[25,138953,138954,138956,138958,138960,138962,138964],{"class":27,"line":91},[25,138955,132128],{"class":31},[25,138957,79878],{"class":244},[25,138959,128983],{"class":35},[25,138961,51508],{"class":244},[25,138963,86304],{"class":35},[25,138965,129553],{"class":244},[25,138967,138968],{"class":27,"line":1429},[25,138969,132143],{"class":302},[25,138971,138972,138974,138976,138978,138980,138982],{"class":27,"line":1441},[25,138973,132148],{"class":31},[25,138975,79878],{"class":244},[25,138977,128983],{"class":35},[25,138979,51508],{"class":244},[25,138981,132157],{"class":35},[25,138983,129553],{"class":244},[99,138985,138502],{},[15,138987,138988],{"className":126623,"code":132055,"language":126625,"meta":20,"style":20},[22,138989,138990,138994,139008,139012,139026,139030,139044,139048,139062,139066],{"__ignoreMap":20},[25,138991,138992],{"class":27,"line":28},[25,138993,132062],{"class":302},[25,138995,138996,138998,139000,139002,139004,139006],{"class":27,"line":39},[25,138997,132067],{"class":31},[25,138999,79878],{"class":244},[25,139001,128983],{"class":35},[25,139003,51508],{"class":244},[25,139005,132076],{"class":35},[25,139007,129553],{"class":244},[25,139009,139010],{"class":27,"line":51},[25,139011,132083],{"class":302},[25,139013,139014,139016,139018,139020,139022,139024],{"class":27,"line":59},[25,139015,132088],{"class":31},[25,139017,79878],{"class":244},[25,139019,128983],{"class":35},[25,139021,51508],{"class":244},[25,139023,54835],{"class":35},[25,139025,129553],{"class":244},[25,139027,139028],{"class":27,"line":67},[25,139029,132103],{"class":302},[25,139031,139032,139034,139036,139038,139040,139042],{"class":27,"line":75},[25,139033,132108],{"class":31},[25,139035,79878],{"class":244},[25,139037,128983],{"class":35},[25,139039,51508],{"class":244},[25,139041,54902],{"class":35},[25,139043,129553],{"class":244},[25,139045,139046],{"class":27,"line":83},[25,139047,132123],{"class":302},[25,139049,139050,139052,139054,139056,139058,139060],{"class":27,"line":91},[25,139051,132128],{"class":31},[25,139053,79878],{"class":244},[25,139055,128983],{"class":35},[25,139057,51508],{"class":244},[25,139059,86304],{"class":35},[25,139061,129553],{"class":244},[25,139063,139064],{"class":27,"line":1429},[25,139065,132143],{"class":302},[25,139067,139068,139070,139072,139074,139076,139078],{"class":27,"line":1441},[25,139069,132148],{"class":31},[25,139071,79878],{"class":244},[25,139073,128983],{"class":35},[25,139075,51508],{"class":244},[25,139077,132157],{"class":35},[25,139079,129553],{"class":244},[210,139081,139083,139084,139086],{"id":139082},"_1544-nav导航模块制作","15.4.4 ",[22,139085,53784],{},"导航模块制作",[155,139088],{"style":126479,"src":139089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[99,139091,139092,139094],{},[22,139093,53784],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[99,139096,139097,139098],{},"1 号盒子左侧浮动，",[22,139099,139100],{},"dropdown",[103,139102,139103,139113,139121,139127,139135,139145,139153,139164],{},[106,139104,139105,139106,101089,139109,139112],{},"1号盒子有讲究，根据相关性 里面包含 ",[22,139107,139108],{},".dt",[22,139110,139111],{},".dd"," 两个盒子",[106,139114,139115,139117,139118,139120],{},[22,139116,139108],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[22,139119,139111],{}," 挤到下面去了",[106,139122,139123,139124,139126],{},"给 ",[22,139125,139111],{}," 盒子设置宽度 和 高度，以及背景颜色",[106,139128,139123,139129,139131,139132,120308],{},[22,139130,139111],{}," 盒子里面定义 无序列表 （",[22,139133,139134],{},"ul > li > a",[106,139136,139137,139138,139140,139141,139144],{},"每个 ",[22,139139,106],{}," 都有一个高度（",[22,139142,139143],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[106,139146,139123,139147,139149,139150,120308],{},[22,139148,106],{}," 里面的a设置文字大小（",[22,139151,139152],{},"14px",[106,139154,139123,139155,139157,139158,139160,139161,139163],{},[22,139156,106],{}," 设置 ",[22,139159,127784],{},"，当鼠标移入的时候，让",[22,139162,106],{},"的背景变成白色，让里面的文字变成红色",[106,139165,139166,139168,139169,139171,139172,139174],{},[22,139167,106],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[22,139170,106],{},"的右侧，那么给",[22,139173,106],{},"设置相对定位",[99,139176,139177],{},"一定要注意相关性",[99,139179,138462],{},[15,139181,139182],{"className":126623,"code":138465,"language":126625,"meta":20,"style":20},[22,139183,139184,139192,139202,139212],{"__ignoreMap":20},[25,139185,139186,139188,139190],{"class":27,"line":28},[25,139187,51682],{"class":51371},[25,139189,137624],{"class":31},[25,139191,15682],{"class":244},[25,139193,139194,139196,139198,139200],{"class":27,"line":39},[25,139195,137631],{"class":35},[25,139197,51508],{"class":244},[25,139199,7762],{"class":45},[25,139201,1403],{"class":244},[25,139203,139204,139206,139208,139210],{"class":27,"line":51},[25,139205,128239],{"class":35},[25,139207,51508],{"class":244},[25,139209,60940],{"class":35},[25,139211,1403],{"class":244},[25,139213,139214],{"class":27,"line":59},[25,139215,1676],{"class":244},[99,139217,138502],{},[15,139219,139220],{"className":126623,"code":138465,"language":126625,"meta":20,"style":20},[22,139221,139222,139230,139240,139250],{"__ignoreMap":20},[25,139223,139224,139226,139228],{"class":27,"line":28},[25,139225,51682],{"class":51371},[25,139227,137624],{"class":31},[25,139229,15682],{"class":244},[25,139231,139232,139234,139236,139238],{"class":27,"line":39},[25,139233,137631],{"class":35},[25,139235,51508],{"class":244},[25,139237,7762],{"class":45},[25,139239,1403],{"class":244},[25,139241,139242,139244,139246,139248],{"class":27,"line":51},[25,139243,128239],{"class":35},[25,139245,51508],{"class":244},[25,139247,60940],{"class":35},[25,139249,1403],{"class":244},[25,139251,139252],{"class":27,"line":59},[25,139253,1676],{"class":244},[99,139255,139256],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[99,139258,139259,139260,139263],{},"2 号盒子左侧浮动，",[22,139261,139262],{},"navitems"," 导航栏组",[103,139265,139266,139271,139280],{},[106,139267,139268,139269],{},"里面结构是 ",[22,139270,139134],{},[106,139272,139273,139274,139276,139277,139279],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[22,139275,481],{},"左右的",[22,139278,30954],{},"把两侧撑开",[106,139281,139282],{},"让文字垂直居中（行高等于高度）",[155,139284],{"style":126479,"src":139285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[99,139287,139288],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[99,139290,138462],{},[15,139292,139294],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},".box {\n  float: left;\n}\n",[22,139295,139296,139302,139312],{"__ignoreMap":20},[25,139297,139298,139300],{"class":27,"line":28},[25,139299,130471],{"class":31},[25,139301,15682],{"class":244},[25,139303,139304,139306,139308,139310],{"class":27,"line":39},[25,139305,131103],{"class":35},[25,139307,51508],{"class":244},[25,139309,23846],{"class":35},[25,139311,1403],{"class":244},[25,139313,139314],{"class":27,"line":51},[25,139315,1676],{"class":244},[99,139317,138502],{},[15,139319,139320],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,139321,139322,139328,139338],{"__ignoreMap":20},[25,139323,139324,139326],{"class":27,"line":28},[25,139325,130471],{"class":31},[25,139327,15682],{"class":244},[25,139329,139330,139332,139334,139336],{"class":27,"line":39},[25,139331,131103],{"class":35},[25,139333,51508],{"class":244},[25,139335,23846],{"class":35},[25,139337,1403],{"class":244},[25,139339,139340],{"class":27,"line":51},[25,139341,1676],{"class":244},[99,139343,139344],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[155,139346],{"style":126479,"src":139347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[15,139349,139350],{"className":126623,"code":130780,"language":126625,"meta":20,"style":20},[22,139351,139352,139358,139374],{"__ignoreMap":20},[25,139353,139354,139356],{"class":27,"line":28},[25,139355,51682],{"class":51371},[25,139357,15682],{"class":244},[25,139359,139360,139362,139364,139366,139368,139370,139372],{"class":27,"line":39},[25,139361,70967],{"class":35},[25,139363,51508],{"class":244},[25,139365,460],{"class":35},[25,139367,51563],{"class":240},[25,139369,51592],{"class":35},[25,139371,130015],{"class":35},[25,139373,1403],{"class":244},[25,139375,139376],{"class":27,"line":51},[25,139377,1676],{"class":244},[210,139379,139381],{"id":139380},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[155,139383],{"style":126479,"src":139384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[103,139386,139387,139392,139397],{},[106,139388,139389,139391],{},[22,139390,131826],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[106,139393,139394,139396],{},[22,139395,131826],{}," 里面有一个大的版心",[106,139398,139399,139400,139403,139404],{},"版心里面包含 1 号盒子，",[22,139401,139402],{},"mod_service"," 是服务模块，mod 是模块的意思",[103,139405,139406,139411,139424,139440,139445],{},[106,139407,139123,139408,139410],{},[22,139409,139402],{}," 设置高度（80px）和下边框",[106,139412,139413,139414,139417,139418,139420,139421,139423],{},"在里面定义 ",[22,139415,139416],{},"ul > li"," ,每个",[22,139419,106],{}," 宽度是300px 高度是 50px，给每个",[22,139422,106],{},"设置35px的左内边距",[106,139425,139426,139427,139429,139430,139432,139433,139435,139436,18520,139438,120308],{},"在每个",[22,139428,106],{},"里面，放一个 ",[22,139431,23020],{},"（里面放图标），一个",[22,139434,51682],{},"（里面放",[22,139437,51682],{},[22,139439,99],{},[106,139441,139123,139442,139444],{},[22,139443,23020],{},"设置浮动，让h5与这个div左右排列",[106,139446,139447],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[99,139449,138462],{},[15,139451,139453],{"className":126623,"code":139452,"language":126625,"meta":20,"style":20},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[22,139454,139455,139461,139473,139485,139512],{"__ignoreMap":20},[25,139456,139457,139459],{"class":27,"line":28},[25,139458,134380],{"class":31},[25,139460,15682],{"class":244},[25,139462,139463,139465,139467,139469,139471],{"class":27,"line":39},[25,139464,70639],{"class":35},[25,139466,51508],{"class":244},[25,139468,943],{"class":35},[25,139470,51563],{"class":240},[25,139472,1403],{"class":244},[25,139474,139475,139477,139479,139481,139483],{"class":27,"line":51},[25,139476,70859],{"class":35},[25,139478,51508],{"class":244},[25,139480,943],{"class":35},[25,139482,51563],{"class":240},[25,139484,1403],{"class":244},[25,139486,139487,139489,139491,139493,139495,139497,139499,139501,139504,139506,139508,139510],{"class":27,"line":59},[25,139488,70682],{"class":35},[25,139490,51508],{"class":244},[25,139492,61797],{"class":35},[25,139494,245],{"class":244},[25,139496,134419],{"class":5326},[25,139498,13824],{"class":244},[25,139500,61807],{"class":35},[25,139502,139503],{"class":35}," -10",[25,139505,51563],{"class":240},[25,139507,134438],{"class":35},[25,139509,51563],{"class":240},[25,139511,1403],{"class":244},[25,139513,139514],{"class":27,"line":67},[25,139515,1676],{"class":244},[99,139517,138502],{},[15,139519,139520],{"className":126623,"code":139452,"language":126625,"meta":20,"style":20},[22,139521,139522,139528,139540,139552,139578],{"__ignoreMap":20},[25,139523,139524,139526],{"class":27,"line":28},[25,139525,134380],{"class":31},[25,139527,15682],{"class":244},[25,139529,139530,139532,139534,139536,139538],{"class":27,"line":39},[25,139531,70639],{"class":35},[25,139533,51508],{"class":244},[25,139535,943],{"class":35},[25,139537,51563],{"class":240},[25,139539,1403],{"class":244},[25,139541,139542,139544,139546,139548,139550],{"class":27,"line":51},[25,139543,70859],{"class":35},[25,139545,51508],{"class":244},[25,139547,943],{"class":35},[25,139549,51563],{"class":240},[25,139551,1403],{"class":244},[25,139553,139554,139556,139558,139560,139562,139564,139566,139568,139570,139572,139574,139576],{"class":27,"line":59},[25,139555,70682],{"class":35},[25,139557,51508],{"class":244},[25,139559,61797],{"class":35},[25,139561,245],{"class":244},[25,139563,134419],{"class":5326},[25,139565,13824],{"class":244},[25,139567,61807],{"class":35},[25,139569,139503],{"class":35},[25,139571,51563],{"class":240},[25,139573,134438],{"class":35},[25,139575,51563],{"class":240},[25,139577,1403],{"class":244},[25,139579,139580],{"class":27,"line":67},[25,139581,1676],{"class":244},[99,139583,139584],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[103,139586,139587,139590,139596,139602,139614],{},[106,139588,139589],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[106,139591,139592,139593,120308],{},"里面的布局利用 自定义列表来实现（",[22,139594,139595],{},"dl > dt + dd",[106,139597,139123,139598,139601],{},[22,139599,139600],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[106,139603,139123,139604,139607,139608,18520,139610,139613],{},[22,139605,139606],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[22,139609,139606],{},[22,139611,139612],{},"dd","之间有些距离",[106,139615,139616],{},"最后一个 dl 结构和样式不一样，需要单独设置",[99,139618,138462],{},[15,139620,139621],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},[22,139622,139623,139629,139641],{"__ignoreMap":20},[25,139624,139625,139627],{"class":27,"line":28},[25,139626,51682],{"class":51371},[25,139628,15682],{"class":244},[25,139630,139631,139633,139635,139637,139639],{"class":27,"line":39},[25,139632,70541],{"class":35},[25,139634,51508],{"class":244},[25,139636,434],{"class":35},[25,139638,51627],{"class":35},[25,139640,1403],{"class":244},[25,139642,139643],{"class":27,"line":51},[25,139644,1676],{"class":244},[99,139646,138502],{},[15,139648,139649],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},[22,139650,139651,139657,139669],{"__ignoreMap":20},[25,139652,139653,139655],{"class":27,"line":28},[25,139654,51682],{"class":51371},[25,139656,15682],{"class":244},[25,139658,139659,139661,139663,139665,139667],{"class":27,"line":39},[25,139660,70541],{"class":35},[25,139662,51508],{"class":244},[25,139664,434],{"class":35},[25,139666,51627],{"class":35},[25,139668,1403],{"class":244},[25,139670,139671],{"class":27,"line":51},[25,139672,1676],{"class":244},[99,139674,139675],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[103,139677,139678,139687,139690,139701],{},[106,139679,139680,139681,139683,139684,139686],{},"分为上下两块，上面是 ",[22,139682,131843],{}," 友情链接，下面是 ",[22,139685,131836],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[106,139688,139689],{},"把内容分别复制到相应模块中",[106,139691,139123,139692,139694,139695,139697,139698,139700],{},[22,139693,131843],{}," 设置 15px 的下外边距，给",[22,139696,131843],{}," 里面 的 ",[22,139699,481],{}," 标签设置 左右 3px 的外边距",[106,139702,139703,139704,139706],{},"给",[22,139705,131836],{}," 设置 20px 的行高",[99,139708,138462],{},[15,139710,139711],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},[22,139712,139713,139719,139731],{"__ignoreMap":20},[25,139714,139715,139717],{"class":27,"line":28},[25,139716,51682],{"class":51371},[25,139718,15682],{"class":244},[25,139720,139721,139723,139725,139727,139729],{"class":27,"line":39},[25,139722,70541],{"class":35},[25,139724,51508],{"class":244},[25,139726,434],{"class":35},[25,139728,51627],{"class":35},[25,139730,1403],{"class":244},[25,139732,139733],{"class":27,"line":51},[25,139734,1676],{"class":244},[99,139736,138502],{},[15,139738,139739],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},[22,139740,139741,139747,139759],{"__ignoreMap":20},[25,139742,139743,139745],{"class":27,"line":28},[25,139744,51682],{"class":51371},[25,139746,15682],{"class":244},[25,139748,139749,139751,139753,139755,139757],{"class":27,"line":39},[25,139750,70541],{"class":35},[25,139752,51508],{"class":244},[25,139754,434],{"class":35},[25,139756,51627],{"class":35},[25,139758,1403],{"class":244},[25,139760,139761],{"class":27,"line":51},[25,139762,1676],{"class":244},[99,139764,139765],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[159,139767,139768],{},"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":20,"searchDepth":39,"depth":39,"links":139770},[139771,139772,139773,139780],{"id":138051,"depth":39,"text":138052},{"id":138070,"depth":39,"text":138071},{"id":138097,"depth":39,"text":138098,"children":139774},[139775,139776,139777,139778,139779],{"id":138101,"depth":51,"text":138102},{"id":138114,"depth":51,"text":138115},{"id":138138,"depth":51,"text":138139},{"id":138160,"depth":51,"text":138161},{"id":138232,"depth":51,"text":138233},{"id":138358,"depth":39,"text":138359,"children":139781},[139782,139783,139784,139785,139787],{"id":138362,"depth":51,"text":138363},{"id":138369,"depth":51,"text":138370},{"id":138541,"depth":51,"text":138542},{"id":139082,"depth":51,"text":139786},"15.4.4 nav导航模块制作",{"id":139380,"depth":51,"text":139381},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138043,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139794,"title":139795,"body":139796,"description":164,"extension":165,"meta":142198,"navigation":167,"path":142199,"seo":142200,"stem":142201,"__hash__":142202},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139797,"toc":142175},[139798,139801,139805,139809,139821,139824,139827,139830,139841,139843,139867,139869,139893,139898,139901,139903,139939,139941,139977,139980,139985,139988,139991,139994,140024,140031,140034,140044,140046,140080,140083,140117,140123,140140,140142,140178,140180,140216,140221,140246,140248,140274,140276,140300,140307,140310,140374,140376,140418,140420,140460,140467,140472,140474,140504,140506,140536,140540,140543,140550,140562,140564,140590,140592,140616,140619,140621,140645,140651,140661,140663,140693,140695,140725,140732,140773,140775,140811,140813,140849,140853,140856,140859,140862,140868,140873,140876,140899,140902,140926,140929,140953,140958,140961,140964,140967,140970,140973,141047,141049,141079,141081,141111,141114,141117,141149,141153,141157,141171,141180,141183,141188,141190,141284,141286,141380,141403,141405,141429,141431,141455,141462,141465,141475,141477,141501,141506,141514,141516,141546,141551,141591,141593,141619,141621,141647,141651,141654,141659,141662,141666,141674,141681,141689,141691,141721,141723,141753,141761,141764,141767,141769,141799,141801,141831,141834,141839,141841,141865,141867,141891,141894,141979,141981,142005,142007,142031,142035,142037,142061,142063,142097,142101,142115,142118,142123,142126,142131,142134,142164,142172],[10,139799,139795],{"id":139800},"_16-品优购项目下篇-主体与页面开发",[182,139802,139804],{"id":139803},"_161-项目主体模块制作","16.1 项目主体模块制作",[210,139806,139808],{"id":139807},"_1611-首页制作","16.1.1 首页制作",[99,139810,139811,139813,139814,139816,139817,139820],{},[392,139812,102129],{}," 主体模块是 ",[392,139815,74129],{}," 里面专有的，注意需要新的样式文件 ",[392,139818,139819],{},"index.css，"," 就不要写在common.css中了",[155,139822],{"style":126479,"src":139823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[155,139825],{"style":126479,"src":139826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[99,139828,139829],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[103,139831,139832,139835,139838],{},[106,139833,139834],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[106,139836,139837],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[106,139839,139840],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[99,139842,138462],{},[15,139844,139845],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,139846,139847,139853,139863],{"__ignoreMap":20},[25,139848,139849,139851],{"class":27,"line":28},[25,139850,130471],{"class":31},[25,139852,15682],{"class":244},[25,139854,139855,139857,139859,139861],{"class":27,"line":39},[25,139856,131103],{"class":35},[25,139858,51508],{"class":244},[25,139860,23846],{"class":35},[25,139862,1403],{"class":244},[25,139864,139865],{"class":27,"line":51},[25,139866,1676],{"class":244},[99,139868,138502],{},[15,139870,139871],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,139872,139873,139879,139889],{"__ignoreMap":20},[25,139874,139875,139877],{"class":27,"line":28},[25,139876,130471],{"class":31},[25,139878,15682],{"class":244},[25,139880,139881,139883,139885,139887],{"class":27,"line":39},[25,139882,131103],{"class":35},[25,139884,51508],{"class":244},[25,139886,23846],{"class":35},[25,139888,1403],{"class":244},[25,139890,139891],{"class":27,"line":51},[25,139892,1676],{"class":244},[194,139894,139895],{},[106,139896,139897],{},"左侧focus模块制作",[155,139899],{"style":126479,"src":139900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[99,139902,138462],{},[15,139904,139905],{"className":126623,"code":127946,"language":126625,"meta":20,"style":20},[22,139906,139907,139915,139925,139935],{"__ignoreMap":20},[25,139908,139909,139911,139913],{"class":27,"line":28},[25,139910,53892],{"class":51371},[25,139912,61971],{"class":31},[25,139914,15682],{"class":244},[25,139916,139917,139919,139921,139923],{"class":27,"line":39},[25,139918,127961],{"class":35},[25,139920,51508],{"class":244},[25,139922,54960],{"class":35},[25,139924,1403],{"class":244},[25,139926,139927,139929,139931,139933],{"class":27,"line":51},[25,139928,70869],{"class":35},[25,139930,51508],{"class":244},[25,139932,54808],{"class":35},[25,139934,1403],{"class":244},[25,139936,139937],{"class":27,"line":59},[25,139938,1676],{"class":244},[99,139940,138502],{},[15,139942,139943],{"className":126623,"code":127946,"language":126625,"meta":20,"style":20},[22,139944,139945,139953,139963,139973],{"__ignoreMap":20},[25,139946,139947,139949,139951],{"class":27,"line":28},[25,139948,53892],{"class":51371},[25,139950,61971],{"class":31},[25,139952,15682],{"class":244},[25,139954,139955,139957,139959,139961],{"class":27,"line":39},[25,139956,127961],{"class":35},[25,139958,51508],{"class":244},[25,139960,54960],{"class":35},[25,139962,1403],{"class":244},[25,139964,139965,139967,139969,139971],{"class":27,"line":51},[25,139966,70869],{"class":35},[25,139968,51508],{"class":244},[25,139970,54808],{"class":35},[25,139972,1403],{"class":244},[25,139974,139975],{"class":27,"line":59},[25,139976,1676],{"class":244},[99,139978,139979],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[194,139981,139982],{"start":39},[106,139983,139984],{},"右侧newsflash模块制作",[155,139986],{"style":126479,"src":139987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[99,139989,139990],{},"右侧的模块 分为上中下三个盒子",[99,139992,139993],{},"结构代码：",[15,139995,139996],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,139997,139998],{"__ignoreMap":20},[25,139999,140000,140002,140004,140006,140008,140010,140012,140014,140016,140018,140020,140022],{"class":27,"line":28},[25,140001,1153],{"class":244},[25,140003,155],{"class":51371},[25,140005,55310],{"class":31},[25,140007,290],{"class":244},[25,140009,134140],{"class":45},[25,140011,55318],{"class":31},[25,140013,290],{"class":244},[25,140015,134147],{"class":45},[25,140017,134150],{"class":31},[25,140019,290],{"class":244},[25,140021,134155],{"class":45},[25,140023,51378],{"class":244},[99,140025,140026,140027,140030],{},"1 号盒子为 ",[22,140028,140029],{},"news"," 新闻模块 高度为 165px",[155,140032],{"style":126479,"src":140033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[99,140035,140036,140037,140040,140041],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[22,140038,140039],{},"news-hd","，下面是 ",[22,140042,140043],{},"news-bd",[99,140045,139993],{},[15,140047,140048],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,140049,140050,140054,140068,140072],{"__ignoreMap":20},[25,140051,140052],{"class":27,"line":28},[25,140053,130734],{"class":302},[25,140055,140056,140058,140060,140062,140064,140066],{"class":27,"line":39},[25,140057,1153],{"class":244},[25,140059,51682],{"class":51371},[25,140061,53557],{"class":31},[25,140063,290],{"class":244},[25,140065,130747],{"class":45},[25,140067,51378],{"class":244},[25,140069,140070],{"class":27,"line":51},[25,140071,130754],{"class":244},[25,140073,140074,140076,140078],{"class":27,"line":59},[25,140075,51856],{"class":244},[25,140077,51682],{"class":51371},[25,140079,51378],{"class":244},[99,140081,140082],{},"样式代码：",[15,140084,140085],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,140086,140087,140091,140105,140109],{"__ignoreMap":20},[25,140088,140089],{"class":27,"line":28},[25,140090,130734],{"class":302},[25,140092,140093,140095,140097,140099,140101,140103],{"class":27,"line":39},[25,140094,1153],{"class":244},[25,140096,51682],{"class":51371},[25,140098,53557],{"class":31},[25,140100,290],{"class":244},[25,140102,130747],{"class":45},[25,140104,51378],{"class":244},[25,140106,140107],{"class":27,"line":51},[25,140108,130754],{"class":244},[25,140110,140111,140113,140115],{"class":27,"line":59},[25,140112,51856],{"class":244},[25,140114,51682],{"class":51371},[25,140116,51378],{"class":244},[99,140118,140119,140120,140122],{},"上面是",[22,140121,140039],{},"，设置高度是 33px，设置下边框",[103,140124,140125,140131],{},[106,140126,140127,140128,140130],{},"里面放一个",[22,140129,23020],{}," 标题",[106,140132,140133,140134,140136,140137,140139],{},"放一个a",[22,140135,102764],{},"，内容是 更多，然后让 ",[22,140138,481],{}," 进行右浮动，三角用伪元素设置字体图标就好",[99,140141,139993],{},[15,140143,140144],{"className":126623,"code":138465,"language":126625,"meta":20,"style":20},[22,140145,140146,140154,140164,140174],{"__ignoreMap":20},[25,140147,140148,140150,140152],{"class":27,"line":28},[25,140149,51682],{"class":51371},[25,140151,137624],{"class":31},[25,140153,15682],{"class":244},[25,140155,140156,140158,140160,140162],{"class":27,"line":39},[25,140157,137631],{"class":35},[25,140159,51508],{"class":244},[25,140161,7762],{"class":45},[25,140163,1403],{"class":244},[25,140165,140166,140168,140170,140172],{"class":27,"line":51},[25,140167,128239],{"class":35},[25,140169,51508],{"class":244},[25,140171,60940],{"class":35},[25,140173,1403],{"class":244},[25,140175,140176],{"class":27,"line":59},[25,140177,1676],{"class":244},[99,140179,140082],{},[15,140181,140182],{"className":126623,"code":138465,"language":126625,"meta":20,"style":20},[22,140183,140184,140192,140202,140212],{"__ignoreMap":20},[25,140185,140186,140188,140190],{"class":27,"line":28},[25,140187,51682],{"class":51371},[25,140189,137624],{"class":31},[25,140191,15682],{"class":244},[25,140193,140194,140196,140198,140200],{"class":27,"line":39},[25,140195,137631],{"class":35},[25,140197,51508],{"class":244},[25,140199,7762],{"class":45},[25,140201,1403],{"class":244},[25,140203,140204,140206,140208,140210],{"class":27,"line":51},[25,140205,128239],{"class":35},[25,140207,51508],{"class":244},[25,140209,60940],{"class":35},[25,140211,1403],{"class":244},[25,140213,140214],{"class":27,"line":59},[25,140215,1676],{"class":244},[99,140217,140218,140219],{},"下面是",[22,140220,140043],{},[103,140222,140223,140231],{},[106,140224,140225,140226,101089,140228,140230],{},"里面包含 ",[22,140227,103],{},[22,140229,106],{}," 还有链接",[106,140232,139703,140233,140235,140236,140238,140239,140242,140243],{},[22,140234,106],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[22,140237,131289],{}," 2.设置 ",[22,140240,140241],{},"white-space: nowrap;"," 3. 设置 ",[22,140244,140245],{},"text-overflow: ellipsis;",[99,140247,139993],{},[15,140249,140251],{"className":126623,"code":140250,"language":126625,"meta":20,"style":20},"div {\n  overflow: hidden;\n}\n",[22,140252,140253,140259,140270],{"__ignoreMap":20},[25,140254,140255,140257],{"class":27,"line":28},[25,140256,51682],{"class":51371},[25,140258,15682],{"class":244},[25,140260,140261,140264,140266,140268],{"class":27,"line":39},[25,140262,140263],{"class":35},"  overflow",[25,140265,51508],{"class":244},[25,140267,61785],{"class":35},[25,140269,1403],{"class":244},[25,140271,140272],{"class":27,"line":51},[25,140273,1676],{"class":244},[99,140275,140082],{},[15,140277,140278],{"className":126623,"code":140250,"language":126625,"meta":20,"style":20},[22,140279,140280,140286,140296],{"__ignoreMap":20},[25,140281,140282,140284],{"class":27,"line":28},[25,140283,51682],{"class":51371},[25,140285,15682],{"class":244},[25,140287,140288,140290,140292,140294],{"class":27,"line":39},[25,140289,140263],{"class":35},[25,140291,51508],{"class":244},[25,140293,61785],{"class":35},[25,140295,1403],{"class":244},[25,140297,140298],{"class":27,"line":51},[25,140299,1676],{"class":244},[99,140301,140302,140303,140306],{},"2 号盒子为 ",[22,140304,140305],{},"lifeservice"," 生活服务模块 高度为 209px",[155,140308],{"style":126479,"src":140309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[103,140311,140312,140315,140325,140349,140360],{},[106,140313,140314],{},"设置边框（左右下边框）",[106,140316,140317,140318,140321,140322,140324],{},"里面的内容 是 ",[22,140319,140320],{},"ul > 12*li","，给",[22,140323,106],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[106,140326,140327,140328],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[103,140329,140330,140335,140344],{},[106,140331,140332,140334],{},[22,140333,140305],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[106,140336,140337,140338,140340,140341,140343],{},"可以让 ",[22,140339,140305],{}," 里面的 ",[22,140342,103],{}," 宽度为 252，就可以装的下 4 个 小 li",[106,140345,140346,140348],{},[22,140347,140305],{}," 盒子 overflow 隐藏多余的部分就可以了",[106,140350,116538,140351,140353,140354,140356,140357,140359],{},[22,140352,106],{}," 里面放一个 ",[22,140355,684],{},"（里面放图标），下面的文本用 ",[22,140358,99],{}," 标签包裹",[106,140361,139123,140362,140364,140365,140367,140368,139157,140370,140373],{},[22,140363,684],{}," 设置 24px宽和28px的高（注意 ",[22,140366,684],{}," 是行内元素， 转成行内块），给 ",[22,140369,106],{},[22,140371,140372],{},"text-align:center"," 让里面内容居中显示",[99,140375,139993],{},[15,140377,140379],{"className":126623,"code":140378,"language":126625,"meta":20,"style":20},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[22,140380,140381,140399,140404,140414],{"__ignoreMap":20},[25,140382,140383,140385,140387,140389,140391,140393,140395,140397],{"class":27,"line":28},[25,140384,25],{"class":51371},[25,140386,12545],{"class":244},[25,140388,481],{"class":51371},[25,140390,12545],{"class":244},[25,140392,23663],{"class":51371},[25,140394,12545],{"class":244},[25,140396,392],{"class":51371},[25,140398,15682],{"class":244},[25,140400,140401],{"class":27,"line":39},[25,140402,140403],{"class":302},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[25,140405,140406,140408,140410,140412],{"class":27,"line":51},[25,140407,128239],{"class":35},[25,140409,51508],{"class":244},[25,140411,128301],{"class":35},[25,140413,1403],{"class":244},[25,140415,140416],{"class":27,"line":59},[25,140417,1676],{"class":244},[99,140419,140082],{},[15,140421,140422],{"className":126623,"code":140378,"language":126625,"meta":20,"style":20},[22,140423,140424,140442,140446,140456],{"__ignoreMap":20},[25,140425,140426,140428,140430,140432,140434,140436,140438,140440],{"class":27,"line":28},[25,140427,25],{"class":51371},[25,140429,12545],{"class":244},[25,140431,481],{"class":51371},[25,140433,12545],{"class":244},[25,140435,23663],{"class":51371},[25,140437,12545],{"class":244},[25,140439,392],{"class":51371},[25,140441,15682],{"class":244},[25,140443,140444],{"class":27,"line":39},[25,140445,140403],{"class":302},[25,140447,140448,140450,140452,140454],{"class":27,"line":51},[25,140449,128239],{"class":35},[25,140451,51508],{"class":244},[25,140453,128301],{"class":35},[25,140455,1403],{"class":244},[25,140457,140458],{"class":27,"line":59},[25,140459,1676],{"class":244},[99,140461,140462,140463,140466],{},"3 号盒子为 ",[22,140464,140465],{},"bargain"," 特价商品",[103,140468,140469],{},[106,140470,140471],{},"这个比较简单，直接插入一张图片即可",[99,140473,139993],{},[15,140475,140476],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,140477,140478],{"__ignoreMap":20},[25,140479,140480,140482,140484,140486,140488,140490,140492,140494,140496,140498,140500,140502],{"class":27,"line":28},[25,140481,1153],{"class":244},[25,140483,155],{"class":51371},[25,140485,55310],{"class":31},[25,140487,290],{"class":244},[25,140489,134140],{"class":45},[25,140491,55318],{"class":31},[25,140493,290],{"class":244},[25,140495,134147],{"class":45},[25,140497,134150],{"class":31},[25,140499,290],{"class":244},[25,140501,134155],{"class":45},[25,140503,51378],{"class":244},[99,140505,140082],{},[15,140507,140508],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,140509,140510],{"__ignoreMap":20},[25,140511,140512,140514,140516,140518,140520,140522,140524,140526,140528,140530,140532,140534],{"class":27,"line":28},[25,140513,1153],{"class":244},[25,140515,155],{"class":51371},[25,140517,55310],{"class":31},[25,140519,290],{"class":244},[25,140521,134140],{"class":45},[25,140523,55318],{"class":31},[25,140525,290],{"class":244},[25,140527,134147],{"class":45},[25,140529,134150],{"class":31},[25,140531,290],{"class":244},[25,140533,134155],{"class":45},[25,140535,51378],{"class":244},[210,140537,140539],{"id":140538},"_1612-推荐模块制作","16.1.2 推荐模块制作",[155,140541],{"style":126479,"src":140542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[99,140544,140545,140546,140549],{},"大盒子 ",[22,140547,140548],{},"recom"," 推荐模块 recommend",[103,140551,140552],{},[106,140553,140554,140555,140557,140558,140561],{},"给这个 ",[22,140556,140548],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[22,140559,140560],{},"#ebebeb","），设置距离上边 12px",[99,140563,139993],{},[15,140565,140567],{"className":126623,"code":140566,"language":126625,"meta":20,"style":20},"div {\n  background-color: #f0f0f0;\n}\n",[22,140568,140569,140575,140586],{"__ignoreMap":20},[25,140570,140571,140573],{"class":27,"line":28},[25,140572,51682],{"class":51371},[25,140574,15682],{"class":244},[25,140576,140577,140579,140581,140584],{"class":27,"line":39},[25,140578,70949],{"class":35},[25,140580,51508],{"class":244},[25,140582,140583],{"class":35},"#f0f0f0",[25,140585,1403],{"class":244},[25,140587,140588],{"class":27,"line":51},[25,140589,1676],{"class":244},[99,140591,140082],{},[15,140593,140594],{"className":126623,"code":140566,"language":126625,"meta":20,"style":20},[22,140595,140596,140602,140612],{"__ignoreMap":20},[25,140597,140598,140600],{"class":27,"line":28},[25,140599,51682],{"class":51371},[25,140601,15682],{"class":244},[25,140603,140604,140606,140608,140610],{"class":27,"line":39},[25,140605,70949],{"class":35},[25,140607,51508],{"class":244},[25,140609,140583],{"class":35},[25,140611,1403],{"class":244},[25,140613,140614],{"class":27,"line":51},[25,140615,1676],{"class":244},[99,140617,140618],{},"里面包含 2 个盒子， 浮动即可",[99,140620,139993],{},[15,140622,140623],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,140624,140625,140631,140641],{"__ignoreMap":20},[25,140626,140627,140629],{"class":27,"line":28},[25,140628,130471],{"class":31},[25,140630,15682],{"class":244},[25,140632,140633,140635,140637,140639],{"class":27,"line":39},[25,140634,131103],{"class":35},[25,140636,51508],{"class":244},[25,140638,23846],{"class":35},[25,140640,1403],{"class":244},[25,140642,140643],{"class":27,"line":51},[25,140644,1676],{"class":244},[99,140646,140647,140648],{},"1 号盒子 ",[22,140649,140650],{},"recom_hd",[103,140652,140653,140656],{},[106,140654,140655],{},"设置宽度205px，高度163px",[106,140657,140127,140658,140660],{},[22,140659,155],{},"标签，插入图片即可",[99,140662,139993],{},[15,140664,140665],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,140666,140667],{"__ignoreMap":20},[25,140668,140669,140671,140673,140675,140677,140679,140681,140683,140685,140687,140689,140691],{"class":27,"line":28},[25,140670,1153],{"class":244},[25,140672,155],{"class":51371},[25,140674,55310],{"class":31},[25,140676,290],{"class":244},[25,140678,134140],{"class":45},[25,140680,55318],{"class":31},[25,140682,290],{"class":244},[25,140684,134147],{"class":45},[25,140686,134150],{"class":31},[25,140688,290],{"class":244},[25,140690,134155],{"class":45},[25,140692,51378],{"class":244},[99,140694,140082],{},[15,140696,140697],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,140698,140699],{"__ignoreMap":20},[25,140700,140701,140703,140705,140707,140709,140711,140713,140715,140717,140719,140721,140723],{"class":27,"line":28},[25,140702,1153],{"class":244},[25,140704,155],{"class":51371},[25,140706,55310],{"class":31},[25,140708,290],{"class":244},[25,140710,134140],{"class":45},[25,140712,55318],{"class":31},[25,140714,290],{"class":244},[25,140716,134147],{"class":45},[25,140718,134150],{"class":31},[25,140720,290],{"class":244},[25,140722,134155],{"class":45},[25,140724,51378],{"class":244},[99,140726,140727,140728,140731],{},"2 号盒子 ",[22,140729,140730],{},"recom_bd"," ，注意里面的小竖线",[103,140733,140734,140745,140748,140753,140758],{},[106,140735,140736,140737,140739,140740,140742,140743],{},"右侧结构里面放 ",[22,140738,103],{}," 包含 4个 ",[22,140741,106],{},"，每个li里面包含一个",[22,140744,155],{},[106,140746,140747],{},"直接利用切片工具把里面的内容当成一张图片",[106,140749,139123,140750,140752],{},[22,140751,106],{}," 设置浮动",[106,140754,139123,140755,140757],{},[22,140756,155],{}," 设置宽高，宽度 248px，高度 163px",[106,140759,140760,140761,140321,140764,140766,140767,140769,140770],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[22,140762,140763],{},"top 10px",[22,140765,106],{},"设置相对定位（注意，最后一个",[22,140768,106],{},"不用设置伪元素），可以利用 ",[22,140771,140772],{},"nth-child(-n+3){...}",[99,140774,139993],{},[15,140776,140777],{"className":126623,"code":138465,"language":126625,"meta":20,"style":20},[22,140778,140779,140787,140797,140807],{"__ignoreMap":20},[25,140780,140781,140783,140785],{"class":27,"line":28},[25,140782,51682],{"class":51371},[25,140784,137624],{"class":31},[25,140786,15682],{"class":244},[25,140788,140789,140791,140793,140795],{"class":27,"line":39},[25,140790,137631],{"class":35},[25,140792,51508],{"class":244},[25,140794,7762],{"class":45},[25,140796,1403],{"class":244},[25,140798,140799,140801,140803,140805],{"class":27,"line":51},[25,140800,128239],{"class":35},[25,140802,51508],{"class":244},[25,140804,60940],{"class":35},[25,140806,1403],{"class":244},[25,140808,140809],{"class":27,"line":59},[25,140810,1676],{"class":244},[99,140812,140082],{},[15,140814,140815],{"className":126623,"code":138465,"language":126625,"meta":20,"style":20},[22,140816,140817,140825,140835,140845],{"__ignoreMap":20},[25,140818,140819,140821,140823],{"class":27,"line":28},[25,140820,51682],{"class":51371},[25,140822,137624],{"class":31},[25,140824,15682],{"class":244},[25,140826,140827,140829,140831,140833],{"class":27,"line":39},[25,140828,137631],{"class":35},[25,140830,51508],{"class":244},[25,140832,7762],{"class":45},[25,140834,1403],{"class":244},[25,140836,140837,140839,140841,140843],{"class":27,"line":51},[25,140838,128239],{"class":35},[25,140840,51508],{"class":244},[25,140842,60940],{"class":35},[25,140844,1403],{"class":244},[25,140846,140847],{"class":27,"line":59},[25,140848,1676],{"class":244},[210,140850,140852],{"id":140851},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[155,140854],{"style":126479,"src":140855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[99,140857,140858],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[99,140860,140861],{},"第一楼是家用电器模块： 里面包含两个盒子",[99,140863,140864,140867],{},[22,140865,140866],{},"box_hd"," 制作",[99,140869,140647,140870,140872],{},[22,140871,140866],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[155,140874],{"style":126479,"src":140875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[103,140877,140878,140883,140888,140891],{},[106,140879,140880,140882],{},[22,140881,140866],{}," 给 30px 的高度，2个像素的下边框",[106,140884,140885,140886],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[22,140887,139134],{},[106,140889,140890],{},"左侧盒左浮动，右侧盒子右浮动",[106,140892,140893,140895,140896,140898],{},[22,140894,481],{},"标签之间的距离用左右的",[22,140897,30954],{},"撑开即可",[99,140900,140901],{},"结构代码",[15,140903,140904],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,140905,140906,140912,140922],{"__ignoreMap":20},[25,140907,140908,140910],{"class":27,"line":28},[25,140909,130471],{"class":31},[25,140911,15682],{"class":244},[25,140913,140914,140916,140918,140920],{"class":27,"line":39},[25,140915,131103],{"class":35},[25,140917,51508],{"class":244},[25,140919,23846],{"class":35},[25,140921,1403],{"class":244},[25,140923,140924],{"class":27,"line":51},[25,140925,1676],{"class":244},[99,140927,140928],{},"样式代码",[15,140930,140931],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,140932,140933,140939,140949],{"__ignoreMap":20},[25,140934,140935,140937],{"class":27,"line":28},[25,140936,130471],{"class":31},[25,140938,15682],{"class":244},[25,140940,140941,140943,140945,140947],{"class":27,"line":39},[25,140942,131103],{"class":35},[25,140944,51508],{"class":244},[25,140946,23846],{"class":35},[25,140948,1403],{"class":244},[25,140950,140951],{"class":27,"line":51},[25,140952,1676],{"class":244},[99,140954,140955,140867],{},[22,140956,140957],{},"box_bd",[99,140959,140960],{},"2 号盒子 box_bd，不要给高度",[155,140962],{"style":126479,"src":140963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[99,140965,140966],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[99,140968,140969],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[99,140971,140972],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[103,140974,140975,140987,141003],{},[106,140976,140977,140979,140980,140983,140984,140986],{},[22,140978,140957],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[22,140981,140982],{},"tab_content","，在",[22,140985,140982],{}," 里面包裹tab选项卡对应的内容",[106,140988,140989,140990,140993,140994,140996,140997,140999,141000,141002],{},"内容被一个大盒子包裹（",[22,140991,140992],{},"tab_list_item","），里面是 ",[22,140995,103],{}," 包裹 5个 ",[22,140998,106],{},"，每个",[22,141001,106],{},"设置对应的宽度，然后设置浮动",[106,141004,141005,141006,141008,141009,141011,141012],{},"而这5个",[22,141007,106],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[22,141010,106],{},"设置",[103,141013,141014,141032,141035],{},[106,141015,141016,141017,141019,141020,141022,141023,141025,141026,141028,141029,141031],{},"第一个小 ",[22,141018,106],{}," 分为上下结构，上面是 ",[22,141021,103],{}," 包裹 ",[22,141024,106],{}," ，",[22,141027,106],{},"里面包裹 ",[22,141030,481],{},"，下面插入一张图片",[106,141033,141034],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[106,141036,141037,141038,141040,141041,141043,141044,141046],{},"后面的小 ",[22,141039,106],{}," 里面先放一个",[22,141042,481],{},"标签，然后在",[22,141045,481],{},"标签里面插入图片即可",[99,141048,140901],{},[15,141050,141051],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,141052,141053],{"__ignoreMap":20},[25,141054,141055,141057,141059,141061,141063,141065,141067,141069,141071,141073,141075,141077],{"class":27,"line":28},[25,141056,1153],{"class":244},[25,141058,155],{"class":51371},[25,141060,55310],{"class":31},[25,141062,290],{"class":244},[25,141064,134140],{"class":45},[25,141066,55318],{"class":31},[25,141068,290],{"class":244},[25,141070,134147],{"class":45},[25,141072,134150],{"class":31},[25,141074,290],{"class":244},[25,141076,134155],{"class":45},[25,141078,51378],{"class":244},[99,141080,140928],{},[15,141082,141083],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,141084,141085],{"__ignoreMap":20},[25,141086,141087,141089,141091,141093,141095,141097,141099,141101,141103,141105,141107,141109],{"class":27,"line":28},[25,141088,1153],{"class":244},[25,141090,155],{"class":51371},[25,141092,55310],{"class":31},[25,141094,290],{"class":244},[25,141096,134140],{"class":45},[25,141098,55318],{"class":31},[25,141100,290],{"class":244},[25,141102,134147],{"class":45},[25,141104,134150],{"class":31},[25,141106,290],{"class":244},[25,141108,134155],{"class":45},[25,141110,51378],{"class":244},[99,141112,141113],{},"tab栏切换需求！！！！！！介绍：",[155,141115],{"style":126479,"src":141116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[103,141118,141119,141127,141133,141136],{},[106,141120,141121,141124,141125],{},[22,141122,141123],{},"tab","栏的布局是 ",[22,141126,139134],{},[106,141128,141129,141130,141132],{},"有多少个",[22,141131,141123],{},"选项卡，那么对应就有多少个内容",[106,141134,141135],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[106,141137,141138,141139,141142,141143,141145,141146,141148],{},"等后面我们学习了",[22,141140,141141],{},"js","之后，我们就会配合",[22,141144,141141],{},"来实现，",[22,141147,141123],{},"栏的切换",[182,141150,141152],{"id":141151},"_162-列表制作","16.2 列表制作",[210,141154,141156],{"id":141155},"_1621-准备工作","16.2.1 准备工作",[103,141158,141159,141162,141165,141168],{},[106,141160,141161],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[106,141163,141164],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[106,141166,141167],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[106,141169,141170],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[210,141172,141174,141175,101089,141177,141179],{"id":141173},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[22,141176,131628],{},[22,141178,53784],{}," 修改",[155,141181],{"style":126479,"src":141182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[103,141184,141185],{},[106,141186,141187],{},"秒杀盒子 sk（ second kill ） 定位即可",[99,141189,139993],{},[15,141191,141192],{"className":126623,"code":132055,"language":126625,"meta":20,"style":20},[22,141193,141194,141198,141212,141216,141230,141234,141248,141252,141266,141270],{"__ignoreMap":20},[25,141195,141196],{"class":27,"line":28},[25,141197,132062],{"class":302},[25,141199,141200,141202,141204,141206,141208,141210],{"class":27,"line":39},[25,141201,132067],{"class":31},[25,141203,79878],{"class":244},[25,141205,128983],{"class":35},[25,141207,51508],{"class":244},[25,141209,132076],{"class":35},[25,141211,129553],{"class":244},[25,141213,141214],{"class":27,"line":51},[25,141215,132083],{"class":302},[25,141217,141218,141220,141222,141224,141226,141228],{"class":27,"line":59},[25,141219,132088],{"class":31},[25,141221,79878],{"class":244},[25,141223,128983],{"class":35},[25,141225,51508],{"class":244},[25,141227,54835],{"class":35},[25,141229,129553],{"class":244},[25,141231,141232],{"class":27,"line":67},[25,141233,132103],{"class":302},[25,141235,141236,141238,141240,141242,141244,141246],{"class":27,"line":75},[25,141237,132108],{"class":31},[25,141239,79878],{"class":244},[25,141241,128983],{"class":35},[25,141243,51508],{"class":244},[25,141245,54902],{"class":35},[25,141247,129553],{"class":244},[25,141249,141250],{"class":27,"line":83},[25,141251,132123],{"class":302},[25,141253,141254,141256,141258,141260,141262,141264],{"class":27,"line":91},[25,141255,132128],{"class":31},[25,141257,79878],{"class":244},[25,141259,128983],{"class":35},[25,141261,51508],{"class":244},[25,141263,86304],{"class":35},[25,141265,129553],{"class":244},[25,141267,141268],{"class":27,"line":1429},[25,141269,132143],{"class":302},[25,141271,141272,141274,141276,141278,141280,141282],{"class":27,"line":1441},[25,141273,132148],{"class":31},[25,141275,79878],{"class":244},[25,141277,128983],{"class":35},[25,141279,51508],{"class":244},[25,141281,132157],{"class":35},[25,141283,129553],{"class":244},[99,141285,140082],{},[15,141287,141288],{"className":126623,"code":132055,"language":126625,"meta":20,"style":20},[22,141289,141290,141294,141308,141312,141326,141330,141344,141348,141362,141366],{"__ignoreMap":20},[25,141291,141292],{"class":27,"line":28},[25,141293,132062],{"class":302},[25,141295,141296,141298,141300,141302,141304,141306],{"class":27,"line":39},[25,141297,132067],{"class":31},[25,141299,79878],{"class":244},[25,141301,128983],{"class":35},[25,141303,51508],{"class":244},[25,141305,132076],{"class":35},[25,141307,129553],{"class":244},[25,141309,141310],{"class":27,"line":51},[25,141311,132083],{"class":302},[25,141313,141314,141316,141318,141320,141322,141324],{"class":27,"line":59},[25,141315,132088],{"class":31},[25,141317,79878],{"class":244},[25,141319,128983],{"class":35},[25,141321,51508],{"class":244},[25,141323,54835],{"class":35},[25,141325,129553],{"class":244},[25,141327,141328],{"class":27,"line":67},[25,141329,132103],{"class":302},[25,141331,141332,141334,141336,141338,141340,141342],{"class":27,"line":75},[25,141333,132108],{"class":31},[25,141335,79878],{"class":244},[25,141337,128983],{"class":35},[25,141339,51508],{"class":244},[25,141341,54902],{"class":35},[25,141343,129553],{"class":244},[25,141345,141346],{"class":27,"line":83},[25,141347,132123],{"class":302},[25,141349,141350,141352,141354,141356,141358,141360],{"class":27,"line":91},[25,141351,132128],{"class":31},[25,141353,79878],{"class":244},[25,141355,128983],{"class":35},[25,141357,51508],{"class":244},[25,141359,86304],{"class":35},[25,141361,129553],{"class":244},[25,141363,141364],{"class":27,"line":1429},[25,141365,132143],{"class":302},[25,141367,141368,141370,141372,141374,141376,141378],{"class":27,"line":1441},[25,141369,132148],{"class":31},[25,141371,79878],{"class":244},[25,141373,128983],{"class":35},[25,141375,51508],{"class":244},[25,141377,132157],{"class":35},[25,141379,129553],{"class":244},[103,141381,141382,141393],{},[106,141383,141384,141385,141388,141389,101089,141391],{},"1 号盒子左侧浮动 ",[22,141386,141387],{},"sk_list"," 里面包含 ",[22,141390,103],{},[22,141392,106],{},[106,141394,141395,141396,141388,141399,101089,141401],{},"2 号盒子左侧浮动 ",[22,141397,141398],{},"sk_con",[22,141400,103],{},[22,141402,106],{},[99,141404,139993],{},[15,141406,141407],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,141408,141409,141415,141425],{"__ignoreMap":20},[25,141410,141411,141413],{"class":27,"line":28},[25,141412,130471],{"class":31},[25,141414,15682],{"class":244},[25,141416,141417,141419,141421,141423],{"class":27,"line":39},[25,141418,131103],{"class":35},[25,141420,51508],{"class":244},[25,141422,23846],{"class":35},[25,141424,1403],{"class":244},[25,141426,141427],{"class":27,"line":51},[25,141428,1676],{"class":244},[99,141430,140082],{},[15,141432,141433],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,141434,141435,141441,141451],{"__ignoreMap":20},[25,141436,141437,141439],{"class":27,"line":28},[25,141438,130471],{"class":31},[25,141440,15682],{"class":244},[25,141442,141443,141445,141447,141449],{"class":27,"line":39},[25,141444,131103],{"class":35},[25,141446,51508],{"class":244},[25,141448,23846],{"class":35},[25,141450,1403],{"class":244},[25,141452,141453],{"class":27,"line":51},[25,141454,1676],{"class":244},[210,141456,141458,141459],{"id":141457},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[22,141460,141461],{},"sk_container",[155,141463],{"style":126479,"src":141464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[103,141466,141467,141472],{},[106,141468,140647,141469,141471],{},[22,141470,141461],{}," 给宽度 1200，不要给高度",[106,141473,141474],{},"一定不要忘记清除浮动",[99,141476,139993],{},[15,141478,141479],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,141480,141481,141487,141497],{"__ignoreMap":20},[25,141482,141483,141485],{"class":27,"line":28},[25,141484,130471],{"class":31},[25,141486,15682],{"class":244},[25,141488,141489,141491,141493,141495],{"class":27,"line":39},[25,141490,131103],{"class":35},[25,141492,51508],{"class":244},[25,141494,23846],{"class":35},[25,141496,1403],{"class":244},[25,141498,141499],{"class":27,"line":51},[25,141500,1676],{"class":244},[194,141502,141503],{},[106,141504,141505],{},"sk_hd制作",[103,141507,141508],{},[106,141509,140727,141510,141513],{},[22,141511,141512],{},"sk_hd"," ，插入图片即可",[99,141515,139993],{},[15,141517,141518],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,141519,141520],{"__ignoreMap":20},[25,141521,141522,141524,141526,141528,141530,141532,141534,141536,141538,141540,141542,141544],{"class":27,"line":28},[25,141523,1153],{"class":244},[25,141525,155],{"class":51371},[25,141527,55310],{"class":31},[25,141529,290],{"class":244},[25,141531,134140],{"class":45},[25,141533,55318],{"class":31},[25,141535,290],{"class":244},[25,141537,134147],{"class":45},[25,141539,134150],{"class":31},[25,141541,290],{"class":244},[25,141543,134155],{"class":45},[25,141545,51378],{"class":244},[194,141547,141548],{"start":39},[106,141549,141550],{},"sk_bd制作",[103,141552,141553],{},[106,141554,141555,141556,141559,141560,101089,141562,141564],{},"3 号盒子 ",[22,141557,141558],{},"sk_bd"," ，里面包含很多的 ",[22,141561,103],{},[22,141563,106],{},[103,141565,141566,141575],{},[106,141567,141568,141569,141571,141572,141574],{},"当鼠标移入到 ",[22,141570,106],{}," 上面的时候显示红色的边框，在这里先给 ",[22,141573,106],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[106,141576,141577,141578,141580,141581,141583,141584,141587,141588,141590],{},"由于给每个 ",[22,141579,106],{}," 都设置了外边距，导致一行的最后一个 ",[22,141582,106],{}," 掉了下来，在这里我们利用 ",[22,141585,141586],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[22,141589,106],{},"，去掉外边距就好了",[99,141592,139993],{},[15,141594,141595],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},[22,141596,141597,141603,141615],{"__ignoreMap":20},[25,141598,141599,141601],{"class":27,"line":28},[25,141600,51682],{"class":51371},[25,141602,15682],{"class":244},[25,141604,141605,141607,141609,141611,141613],{"class":27,"line":39},[25,141606,70541],{"class":35},[25,141608,51508],{"class":244},[25,141610,434],{"class":35},[25,141612,51627],{"class":35},[25,141614,1403],{"class":244},[25,141616,141617],{"class":27,"line":51},[25,141618,1676],{"class":244},[99,141620,140082],{},[15,141622,141623],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},[22,141624,141625,141631,141643],{"__ignoreMap":20},[25,141626,141627,141629],{"class":27,"line":28},[25,141628,51682],{"class":51371},[25,141630,15682],{"class":244},[25,141632,141633,141635,141637,141639,141641],{"class":27,"line":39},[25,141634,70541],{"class":35},[25,141636,51508],{"class":244},[25,141638,434],{"class":35},[25,141640,51627],{"class":35},[25,141642,1403],{"class":244},[25,141644,141645],{"class":27,"line":51},[25,141646,1676],{"class":244},[182,141648,141650],{"id":141649},"_163-注册页面制作","16.3 注册页面制作",[155,141652],{"style":126479,"src":141653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[99,141655,141656,141658],{},[392,141657,9135],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[155,141660],{"style":126479,"src":141661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[210,141663,141665],{"id":141664},"_1631-准备工作","16.3.1 准备工作",[103,141667,141668,141671],{},[106,141669,141670],{},"创建register.html，引入 base.css，引入favicon图标",[106,141672,141673],{},"创建register.css ，在html页面进行引入",[210,141675,141677,141678,141680],{"id":141676},"_1632-header-头部实现","16.3.2 ",[22,141679,131628],{}," 头部实现",[103,141682,141683,141686],{},[106,141684,141685],{},"整个内容用 版心 进行包裹",[106,141687,141688],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[99,141690,139993],{},[15,141692,141693],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,141694,141695],{"__ignoreMap":20},[25,141696,141697,141699,141701,141703,141705,141707,141709,141711,141713,141715,141717,141719],{"class":27,"line":28},[25,141698,1153],{"class":244},[25,141700,155],{"class":51371},[25,141702,55310],{"class":31},[25,141704,290],{"class":244},[25,141706,134140],{"class":45},[25,141708,55318],{"class":31},[25,141710,290],{"class":244},[25,141712,134147],{"class":45},[25,141714,134150],{"class":31},[25,141716,290],{"class":244},[25,141718,134155],{"class":45},[25,141720,51378],{"class":244},[99,141722,140082],{},[15,141724,141725],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,141726,141727],{"__ignoreMap":20},[25,141728,141729,141731,141733,141735,141737,141739,141741,141743,141745,141747,141749,141751],{"class":27,"line":28},[25,141730,1153],{"class":244},[25,141732,155],{"class":51371},[25,141734,55310],{"class":31},[25,141736,290],{"class":244},[25,141738,134140],{"class":45},[25,141740,55318],{"class":31},[25,141742,290],{"class":244},[25,141744,134147],{"class":45},[25,141746,134150],{"class":31},[25,141748,290],{"class":244},[25,141750,134155],{"class":45},[25,141752,51378],{"class":244},[210,141754,141756,141757,141760],{"id":141755},"_1633-registerarea-主体模块实现","16.3.3 ",[22,141758,141759],{},"registerarea"," 主体模块实现",[155,141762],{"style":126479,"src":141763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[99,141765,141766],{},"整个大盒子 高度为 522px，设置4个边框",[99,141768,139993],{},[15,141770,141771],{"className":126623,"code":130780,"language":126625,"meta":20,"style":20},[22,141772,141773,141779,141795],{"__ignoreMap":20},[25,141774,141775,141777],{"class":27,"line":28},[25,141776,51682],{"class":51371},[25,141778,15682],{"class":244},[25,141780,141781,141783,141785,141787,141789,141791,141793],{"class":27,"line":39},[25,141782,70967],{"class":35},[25,141784,51508],{"class":244},[25,141786,460],{"class":35},[25,141788,51563],{"class":240},[25,141790,51592],{"class":35},[25,141792,130015],{"class":35},[25,141794,1403],{"class":244},[25,141796,141797],{"class":27,"line":51},[25,141798,1676],{"class":244},[99,141800,140082],{},[15,141802,141803],{"className":126623,"code":130780,"language":126625,"meta":20,"style":20},[22,141804,141805,141811,141827],{"__ignoreMap":20},[25,141806,141807,141809],{"class":27,"line":28},[25,141808,51682],{"class":51371},[25,141810,15682],{"class":244},[25,141812,141813,141815,141817,141819,141821,141823,141825],{"class":27,"line":39},[25,141814,70967],{"class":35},[25,141816,51508],{"class":244},[25,141818,460],{"class":35},[25,141820,51563],{"class":240},[25,141822,51592],{"class":35},[25,141824,130015],{"class":35},[25,141826,1403],{"class":244},[25,141828,141829],{"class":27,"line":51},[25,141830,1676],{"class":244},[99,141832,141833],{},"1号盒子 是一个 h3 标签，放标题",[103,141835,141836],{},[106,141837,141838],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[99,141840,139993],{},[15,141842,141843],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,141844,141845,141851,141861],{"__ignoreMap":20},[25,141846,141847,141849],{"class":27,"line":28},[25,141848,130471],{"class":31},[25,141850,15682],{"class":244},[25,141852,141853,141855,141857,141859],{"class":27,"line":39},[25,141854,131103],{"class":35},[25,141856,51508],{"class":244},[25,141858,23846],{"class":35},[25,141860,1403],{"class":244},[25,141862,141863],{"class":27,"line":51},[25,141864,1676],{"class":244},[99,141866,140082],{},[15,141868,141869],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,141870,141871,141877,141887],{"__ignoreMap":20},[25,141872,141873,141875],{"class":27,"line":28},[25,141874,130471],{"class":31},[25,141876,15682],{"class":244},[25,141878,141879,141881,141883,141885],{"class":27,"line":39},[25,141880,131103],{"class":35},[25,141882,51508],{"class":244},[25,141884,23846],{"class":35},[25,141886,1403],{"class":244},[25,141888,141889],{"class":27,"line":51},[25,141890,1676],{"class":244},[99,141892,141893],{},"2号盒子 里面放注册的内容",[103,141895,141896,141899,141908,141922,141935,141938,141941,141959,141973],{},[106,141897,141898],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[106,141900,141901,141902,141904,141905,141907],{},"里面的内容利用 ",[22,141903,103],{}," 包含 ",[22,141906,106],{}," 来实现的（不需要用表格）",[106,141909,139137,141910,141912,141913,141915,141916,141918,141919,141921],{},[22,141911,106],{}," 里面，左侧放 ",[22,141914,33679],{}," 标签， 中间放",[22,141917,53892],{}," 标签， 右侧放 ",[22,141920,25],{}," 提示信息",[106,141923,141924,141925,141927,141928,141930,141931,141934],{},"左侧 ",[22,141926,33679],{},"里面的文字都是右对齐，我们可以给",[22,141929,33679],{},"设置一个宽度（88px），然后利用",[22,141932,141933],{},"text-align"," 来设置右对齐",[106,141936,141937],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[106,141939,141940],{},"右侧 span修饰一下文字颜色",[106,141942,141943,141944],{},"提示信息的样式优化",[103,141945,141946,141949,141952],{},[106,141947,141948],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[106,141950,141951],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[106,141953,141954,141955,141958],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[22,141956,141957],{},"vertical-algin"," 来设置 图片与文字对齐方式",[106,141960,141961,141962],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[103,141963,141964,141970],{},[106,141965,141966,141967,141969],{},"设置 ",[22,141968,23663],{}," 的 左右 12px 的内边距，设置一下文字颜色",[106,141971,141972],{},"分别设置 背景颜色",[106,141974,141975,141976,141978],{},"同意协议 和 完成注册 都是用 ",[22,141977,106],{}," 进行包裹",[99,141980,139993],{},[15,141982,141983],{"className":126623,"code":140566,"language":126625,"meta":20,"style":20},[22,141984,141985,141991,142001],{"__ignoreMap":20},[25,141986,141987,141989],{"class":27,"line":28},[25,141988,51682],{"class":51371},[25,141990,15682],{"class":244},[25,141992,141993,141995,141997,141999],{"class":27,"line":39},[25,141994,70949],{"class":35},[25,141996,51508],{"class":244},[25,141998,140583],{"class":35},[25,142000,1403],{"class":244},[25,142002,142003],{"class":27,"line":51},[25,142004,1676],{"class":244},[99,142006,140082],{},[15,142008,142009],{"className":126623,"code":140566,"language":126625,"meta":20,"style":20},[22,142010,142011,142017,142027],{"__ignoreMap":20},[25,142012,142013,142015],{"class":27,"line":28},[25,142014,51682],{"class":51371},[25,142016,15682],{"class":244},[25,142018,142019,142021,142023,142025],{"class":27,"line":39},[25,142020,70949],{"class":35},[25,142022,51508],{"class":244},[25,142024,140583],{"class":35},[25,142026,1403],{"class":244},[25,142028,142029],{"class":27,"line":51},[25,142030,1676],{"class":244},[210,142032,142034],{"id":142033},"_1634-底部实现","16.3.4 底部实现",[99,142036,139993],{},[15,142038,142039],{"className":126623,"code":140566,"language":126625,"meta":20,"style":20},[22,142040,142041,142047,142057],{"__ignoreMap":20},[25,142042,142043,142045],{"class":27,"line":28},[25,142044,51682],{"class":51371},[25,142046,15682],{"class":244},[25,142048,142049,142051,142053,142055],{"class":27,"line":39},[25,142050,70949],{"class":35},[25,142052,51508],{"class":244},[25,142054,140583],{"class":35},[25,142056,1403],{"class":244},[25,142058,142059],{"class":27,"line":51},[25,142060,1676],{"class":244},[99,142062,140082],{},[15,142064,142065],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,142066,142067,142071,142085,142089],{"__ignoreMap":20},[25,142068,142069],{"class":27,"line":28},[25,142070,130734],{"class":302},[25,142072,142073,142075,142077,142079,142081,142083],{"class":27,"line":39},[25,142074,1153],{"class":244},[25,142076,51682],{"class":51371},[25,142078,53557],{"class":31},[25,142080,290],{"class":244},[25,142082,130747],{"class":45},[25,142084,51378],{"class":244},[25,142086,142087],{"class":27,"line":51},[25,142088,130754],{"class":244},[25,142090,142091,142093,142095],{"class":27,"line":59},[25,142092,51856],{"class":244},[25,142094,51682],{"class":51371},[25,142096,51378],{"class":244},[182,142098,142100],{"id":142099},"_164-项目总结","16.4 项目总结",[194,142102,142103,142106,142109,142112],{},[106,142104,142105],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[106,142107,142108],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[106,142110,142111],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[106,142113,142114],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[155,142116],{"style":126479,"src":142117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[194,142119,142120],{"start":67},[106,142121,142122],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[155,142124],{"style":126479,"src":142125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[194,142127,142128],{"start":75},[106,142129,142130],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[155,142132],{"style":126479,"src":142133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[15,142135,142136],{"className":127370,"code":136780,"language":127372,"meta":20,"style":20},[22,142137,142138],{"__ignoreMap":20},[25,142139,142140,142142,142144,142146,142148,142150,142152,142154,142156,142158,142160,142162],{"class":27,"line":28},[25,142141,1153],{"class":244},[25,142143,53892],{"class":51371},[25,142145,53895],{"class":31},[25,142147,290],{"class":244},[25,142149,62770],{"class":45},[25,142151,15030],{"class":31},[25,142153,290],{"class":244},[25,142155,136801],{"class":45},[25,142157,61091],{"class":31},[25,142159,290],{"class":244},[25,142161,136808],{"class":45},[25,142163,51378],{"class":244},[194,142165,142166,142169],{"start":83},[106,142167,142168],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[106,142170,142171],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[159,142173,142174],{},"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":20,"searchDepth":39,"depth":39,"links":142176},[142177,142182,142189,142197],{"id":139803,"depth":39,"text":139804,"children":142178},[142179,142180,142181],{"id":139807,"depth":51,"text":139808},{"id":140538,"depth":51,"text":140539},{"id":140851,"depth":51,"text":140852},{"id":141151,"depth":39,"text":141152,"children":142183},[142184,142185,142187],{"id":141155,"depth":51,"text":141156},{"id":141173,"depth":51,"text":142186},"16.2.2 列表页 header 和 nav 修改",{"id":141457,"depth":51,"text":142188},"16.2.3 列表页主体 sk_container",{"id":141649,"depth":39,"text":141650,"children":142190},[142191,142192,142194,142196],{"id":141664,"depth":51,"text":141665},{"id":141676,"depth":51,"text":142193},"16.3.2 header 头部实现",{"id":141755,"depth":51,"text":142195},"16.3.3 registerarea 主体模块实现",{"id":142033,"depth":51,"text":142034},{"id":142099,"depth":39,"text":142100},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139795,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142204,"title":142205,"body":142206,"description":164,"extension":165,"meta":142314,"navigation":167,"path":142315,"seo":142316,"stem":142317,"__hash__":142318},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142207,"toc":142309},[142208,142211,142215,142218,142221,142230,142239,142243,142248,142255,142273,142276,142279,142282,142285,142288,142291,142294,142297,142300,142303,142306],[10,142209,142205],{"id":142210},"_17-web服务器与网站发布",[182,142212,142214],{"id":142213},"_171-web服务器","17.1 Web服务器",[99,142216,142217],{},"把自己网站上传到服务器上，可以让其他人访问",[155,142219],{"style":126479,"src":142220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[99,142222,142223,142226,142227],{},[392,142224,142225],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[392,142228,142229],{},"Web 服务器等",[99,142231,142232,142233,101089,142236,25811],{},"根据服务器在网络中所在的位置不同，又可分为 ",[392,142234,142235],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[392,142237,142238],{},"远程服务器",[210,142240,142242],{"id":142241},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[99,142244,142245],{},[392,142246,142247],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[99,142249,142250,142251],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[481,142252,142253],{"href":142253,"rel":142254},"http:\u002F\u002Ffree.3v.do\u002F",[23973],[103,142256,142257,142260,142263,142270],{},[106,142258,142259],{},"去免费空间网站注册账号。",[106,142261,142262],{},"记录下主机名、用户名、密码、域名。",[106,142264,142265,142266,142269],{},"利用 ",[22,142267,142268],{},"utftp"," 软件 上传网站到远程服务器",[106,142271,142272],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[99,142274,142275],{},"使用软件上传，对上传软件文件进行解压",[155,142277],{"style":126479,"src":142278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[155,142280],{"style":126479,"src":142281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[99,142283,142284],{},"输入刚刚申请的服务器账号信息：",[155,142286],{"style":126479,"src":142287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[155,142289],{"style":126479,"src":142290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[155,142292],{"style":126479,"src":142293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[155,142295],{"style":126479,"src":142296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[99,142298,142299],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[155,142301],{"style":126479,"src":142302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[99,142304,142305],{},"浏览器输入域名即可访问",[99,142307,142308],{},"首页一定必须是index",{"title":20,"searchDepth":39,"depth":39,"links":142310},[142311],{"id":142213,"depth":39,"text":142214,"children":142312},[142313],{"id":142241,"depth":51,"text":142242},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142205,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142320,"title":142321,"body":142322,"description":164,"extension":165,"meta":143249,"navigation":167,"path":143250,"seo":143251,"stem":143252,"__hash__":143253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142323,"toc":143232},[142324,142327,142331,142334,142337,142348,142351,142355,142359,142364,142367,142370,142373,142376,142380,142406,142410,142414,142417,142420,142424,142457,142461,142464,142467,142531,142535,142539,142542,142545,142548,142552,142597,142601,142604,142634,142638,142642,142645,142648,142652,142655,142724,142727,142835,142837,142843,142847,142850,142853,142949,142952,142956,142980,142984,142987,142991,142994,142998,143001,143004,143007,143010,143014,143017,143020,143024,143028,143031,143034,143037,143040,143044,143047,143051,143054,143057,143102,143106,143110,143113,143116,143119,143151,143155,143158,143192,143196,143199,143229],[10,142325,142321],{"id":142326},"_18-2d动画与3d转换",[182,142328,142330],{"id":142329},"_181-css3-2d转换","18.1 CSS3 2D转换",[99,142332,142333],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[99,142335,142336],{},"转换（transform）你可以简单理解为变形",[103,142338,142339,142342,142345],{},[106,142340,142341],{},"移动：translate",[106,142343,142344],{},"旋转：rotate",[106,142346,142347],{},"缩放：scale",[155,142349],{"style":126479,"src":142350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[210,142352,142354],{"id":142353},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22108,142356,142358],{"id":142357},"_18111-translate介绍","18.1.1.1 translate介绍",[99,142360,142361,142362],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[392,142363,133282],{},[155,142365],{"style":126479,"src":142366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[99,142368,142369],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[99,142371,142372],{},"对于行内元素无效",[99,142374,142375],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22108,142377,142379],{"id":142378},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[15,142381,142382],{"className":126623,"code":138812,"language":126625,"meta":20,"style":20},[22,142383,142384,142390,142402],{"__ignoreMap":20},[25,142385,142386,142388],{"class":27,"line":28},[25,142387,51682],{"class":51371},[25,142389,15682],{"class":244},[25,142391,142392,142394,142396,142398,142400],{"class":27,"line":39},[25,142393,70541],{"class":35},[25,142395,51508],{"class":244},[25,142397,434],{"class":35},[25,142399,51627],{"class":35},[25,142401,1403],{"class":244},[25,142403,142404],{"class":27,"line":51},[25,142405,1676],{"class":244},[210,142407,142409],{"id":142408},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22108,142411,142413],{"id":142412},"_18121-rotate介绍","18.1.2.1 rotate介绍",[99,142415,142416],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[155,142418],{"style":126479,"src":142419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22108,142421,142423],{"id":142422},"_18122-旋转效果","18.1.2.2 旋转效果",[15,142425,142427],{"className":126623,"code":142426,"language":126625,"meta":20,"style":20},"div {\n  transform: rotate(45deg);\n}\n",[22,142428,142429,142435,142453],{"__ignoreMap":20},[25,142430,142431,142433],{"class":27,"line":28},[25,142432,51682],{"class":51371},[25,142434,15682],{"class":244},[25,142436,142437,142439,142441,142444,142446,142448,142451],{"class":27,"line":39},[25,142438,136607],{"class":35},[25,142440,51508],{"class":244},[25,142442,142443],{"class":35},"rotate",[25,142445,245],{"class":244},[25,142447,772],{"class":35},[25,142449,142450],{"class":240},"deg",[25,142452,2829],{"class":244},[25,142454,142455],{"class":27,"line":51},[25,142456,1676],{"class":244},[22108,142458,142460],{"id":142459},"_18123-三角做法","18.1.2.3 三角做法",[99,142462,142463],{},"该下标当经过最外层大盒子时会实现向上反转",[155,142465],{"style":126479,"src":142466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[15,142468,142469],{"className":126623,"code":135143,"language":126625,"meta":20,"style":20},[22,142470,142471,142475,142481,142491,142501,142517,142527],{"__ignoreMap":20},[25,142472,142473],{"class":27,"line":28},[25,142474,135150],{"class":302},[25,142476,142477,142479],{"class":27,"line":39},[25,142478,135155],{"class":31},[25,142480,15682],{"class":244},[25,142482,142483,142485,142487,142489],{"class":27,"line":51},[25,142484,70639],{"class":35},[25,142486,51508],{"class":244},[25,142488,434],{"class":35},[25,142490,1403],{"class":244},[25,142492,142493,142495,142497,142499],{"class":27,"line":59},[25,142494,70859],{"class":35},[25,142496,51508],{"class":244},[25,142498,434],{"class":35},[25,142500,1403],{"class":244},[25,142502,142503,142505,142507,142509,142511,142513,142515],{"class":27,"line":67},[25,142504,70967],{"class":35},[25,142506,51508],{"class":244},[25,142508,689],{"class":35},[25,142510,51563],{"class":240},[25,142512,51592],{"class":35},[25,142514,64062],{"class":35},[25,142516,1403],{"class":244},[25,142518,142519,142521,142523,142525],{"class":27,"line":75},[25,142520,135198],{"class":35},[25,142522,51508],{"class":244},[25,142524,62440],{"class":35},[25,142526,1403],{"class":244},[25,142528,142529],{"class":27,"line":83},[25,142530,1676],{"class":244},[210,142532,142534],{"id":142533},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22108,142536,142538],{"id":142537},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[99,142540,142541],{},"设置中心点",[155,142543],{"style":126479,"src":142544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[99,142546,142547],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22108,142549,142551],{"id":142550},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[15,142553,142555],{"className":126623,"code":142554,"language":126625,"meta":20,"style":20},"\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",[22,142556,142557,142562,142568,142583,142588,142593],{"__ignoreMap":20},[25,142558,142559],{"class":27,"line":28},[25,142560,142561],{"class":302},"\u002F* 转换中心点 *\u002F\n",[25,142563,142564,142566],{"class":27,"line":39},[25,142565,51682],{"class":51371},[25,142567,15682],{"class":244},[25,142569,142570,142573,142575,142577,142579,142581],{"class":27,"line":51},[25,142571,142572],{"class":35},"  transform-origin",[25,142574,51508],{"class":244},[25,142576,51663],{"class":35},[25,142578,17254],{"class":35},[25,142580,130486],{"class":244},[25,142582,135296],{"class":302},[25,142584,142585],{"class":27,"line":59},[25,142586,142587],{"class":302},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[25,142589,142590],{"class":27,"line":67},[25,142591,142592],{"class":302},"  \u002F* transform-origin: left top; *\u002F\n",[25,142594,142595],{"class":27,"line":75},[25,142596,1676],{"class":244},[22108,142598,142600],{"id":142599},"_18133-旋转案例","18.1.3.3 旋转案例",[155,142602],{"style":126479,"src":142603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[15,142605,142606],{"className":126623,"code":142426,"language":126625,"meta":20,"style":20},[22,142607,142608,142614,142630],{"__ignoreMap":20},[25,142609,142610,142612],{"class":27,"line":28},[25,142611,51682],{"class":51371},[25,142613,15682],{"class":244},[25,142615,142616,142618,142620,142622,142624,142626,142628],{"class":27,"line":39},[25,142617,136607],{"class":35},[25,142619,51508],{"class":244},[25,142621,142443],{"class":35},[25,142623,245],{"class":244},[25,142625,772],{"class":35},[25,142627,142450],{"class":240},[25,142629,2829],{"class":244},[25,142631,142632],{"class":27,"line":51},[25,142633,1676],{"class":244},[210,142635,142637],{"id":142636},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22108,142639,142641],{"id":142640},"_18141-scale介绍","18.1.4.1 scale介绍",[99,142643,142644],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[155,142646],{"style":126479,"src":142647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22108,142649,142651],{"id":142650},"_18142-分页按钮","18.1.4.2 分页按钮",[155,142653],{"style":126479,"src":142654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[15,142656,142658],{"className":126623,"code":142657,"language":126625,"meta":20,"style":20},"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",[22,142659,142660,142666,142682,142686,142690,142695,142701,142715,142720],{"__ignoreMap":20},[25,142661,142662,142664],{"class":27,"line":28},[25,142663,51682],{"class":51371},[25,142665,15682],{"class":244},[25,142667,142668,142670,142672,142675,142677,142680],{"class":27,"line":39},[25,142669,136607],{"class":35},[25,142671,51508],{"class":244},[25,142673,142674],{"class":35},"scale",[25,142676,245],{"class":244},[25,142678,142679],{"class":35},"1.2",[25,142681,2829],{"class":244},[25,142683,142684],{"class":27,"line":51},[25,142685,1676],{"class":244},[25,142687,142688],{"class":27,"line":59},[25,142689,136084],{"class":244},[25,142691,142692],{"class":27,"line":67},[25,142693,142694],{"class":302},"\u002F* 2D 缩放 *\u002F\n",[25,142696,142697,142699],{"class":27,"line":75},[25,142698,51682],{"class":51371},[25,142700,15682],{"class":244},[25,142702,142703,142705,142707,142709,142711,142713],{"class":27,"line":83},[25,142704,136607],{"class":35},[25,142706,51508],{"class":244},[25,142708,142674],{"class":35},[25,142710,245],{"class":244},[25,142712,142679],{"class":35},[25,142714,2829],{"class":244},[25,142716,142717],{"class":27,"line":91},[25,142718,142719],{"class":302},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[25,142721,142722],{"class":27,"line":1429},[25,142723,1676],{"class":244},[99,142725,142726],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[15,142728,142730],{"className":126623,"code":142729,"language":126625,"meta":20,"style":20},"\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",[22,142731,142732,142737,142747,142768,142789,142793,142798,142804,142831],{"__ignoreMap":20},[25,142733,142734],{"class":27,"line":28},[25,142735,142736],{"class":302},"\u002F* 定义动画 *\u002F\n",[25,142738,142739,142742,142745],{"class":27,"line":39},[25,142740,142741],{"class":240},"@keyframes",[25,142743,142744],{"class":5326}," move",[25,142746,15682],{"class":244},[25,142748,142749,142752,142754,142756,142758,142761,142763,142765],{"class":27,"line":51},[25,142750,142751],{"class":31},"  0%",[25,142753,79878],{"class":244},[25,142755,48205],{"class":35},[25,142757,51508],{"class":244},[25,142759,142760],{"class":35},"translateX",[25,142762,245],{"class":244},[25,142764,434],{"class":35},[25,142766,142767],{"class":244},"); }\n",[25,142769,142770,142773,142775,142777,142779,142781,142783,142785,142787],{"class":27,"line":59},[25,142771,142772],{"class":31},"  100%",[25,142774,79878],{"class":244},[25,142776,48205],{"class":35},[25,142778,51508],{"class":244},[25,142780,142760],{"class":35},[25,142782,245],{"class":244},[25,142784,554],{"class":35},[25,142786,51563],{"class":240},[25,142788,142767],{"class":244},[25,142790,142791],{"class":27,"line":67},[25,142792,1676],{"class":244},[25,142794,142795],{"class":27,"line":75},[25,142796,142797],{"class":302},"\u002F* 调用动画 *\u002F\n",[25,142799,142800,142802],{"class":27,"line":83},[25,142801,51682],{"class":51371},[25,142803,15682],{"class":244},[25,142805,142806,142809,142811,142813,142815,142817,142819,142821,142823,142826,142829],{"class":27,"line":91},[25,142807,142808],{"class":35},"  animation",[25,142810,51508],{"class":244},[25,142812,135309],{"class":35},[25,142814,25225],{"class":35},[25,142816,938],{"class":240},[25,142818,78751],{"class":35},[25,142820,4203],{"class":35},[25,142822,938],{"class":240},[25,142824,142825],{"class":35}," infinite",[25,142827,142828],{"class":35}," alternate",[25,142830,1403],{"class":244},[25,142832,142833],{"class":27,"line":1429},[25,142834,1676],{"class":244},[99,142836,142726],{},[15,142838,142841],{"className":142839,"code":142840,"language":5297},[5295],"\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",[22,142842,142840],{"__ignoreMap":20},[22108,142844,142846],{"id":142845},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[99,142848,142849],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[155,142851],{"style":126479,"src":142852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[15,142854,142855],{"className":126623,"code":142729,"language":126625,"meta":20,"style":20},[22,142856,142857,142861,142869,142887,142907,142911,142915,142921,142945],{"__ignoreMap":20},[25,142858,142859],{"class":27,"line":28},[25,142860,142736],{"class":302},[25,142862,142863,142865,142867],{"class":27,"line":39},[25,142864,142741],{"class":240},[25,142866,142744],{"class":5326},[25,142868,15682],{"class":244},[25,142870,142871,142873,142875,142877,142879,142881,142883,142885],{"class":27,"line":51},[25,142872,142751],{"class":31},[25,142874,79878],{"class":244},[25,142876,48205],{"class":35},[25,142878,51508],{"class":244},[25,142880,142760],{"class":35},[25,142882,245],{"class":244},[25,142884,434],{"class":35},[25,142886,142767],{"class":244},[25,142888,142889,142891,142893,142895,142897,142899,142901,142903,142905],{"class":27,"line":59},[25,142890,142772],{"class":31},[25,142892,79878],{"class":244},[25,142894,48205],{"class":35},[25,142896,51508],{"class":244},[25,142898,142760],{"class":35},[25,142900,245],{"class":244},[25,142902,554],{"class":35},[25,142904,51563],{"class":240},[25,142906,142767],{"class":244},[25,142908,142909],{"class":27,"line":67},[25,142910,1676],{"class":244},[25,142912,142913],{"class":27,"line":75},[25,142914,142797],{"class":302},[25,142916,142917,142919],{"class":27,"line":83},[25,142918,51682],{"class":51371},[25,142920,15682],{"class":244},[25,142922,142923,142925,142927,142929,142931,142933,142935,142937,142939,142941,142943],{"class":27,"line":91},[25,142924,142808],{"class":35},[25,142926,51508],{"class":244},[25,142928,135309],{"class":35},[25,142930,25225],{"class":35},[25,142932,938],{"class":240},[25,142934,78751],{"class":35},[25,142936,4203],{"class":35},[25,142938,938],{"class":240},[25,142940,142825],{"class":35},[25,142942,142828],{"class":35},[25,142944,1403],{"class":244},[25,142946,142947],{"class":27,"line":1429},[25,142948,1676],{"class":244},[99,142950,142951],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[210,142953,142955],{"id":142954},"_1823-知识点回顾","18.2.3 知识点回顾",[15,142957,142958],{"className":126623,"code":128792,"language":126625,"meta":20,"style":20},[22,142959,142960,142966,142976],{"__ignoreMap":20},[25,142961,142962,142964],{"class":27,"line":28},[25,142963,51682],{"class":51371},[25,142965,15682],{"class":244},[25,142967,142968,142970,142972,142974],{"class":27,"line":39},[25,142969,128805],{"class":35},[25,142971,51508],{"class":244},[25,142973,61807],{"class":35},[25,142975,1403],{"class":244},[25,142977,142978],{"class":27,"line":51},[25,142979,1676],{"class":244},[182,142981,142983],{"id":142982},"_183-3d-转换","18.3 3D 转换",[99,142985,142986],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[210,142988,142990],{"id":142989},"_1831-坐标轴认识","18.3.1 坐标轴认识",[155,142992],{"style":126479,"src":142993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[210,142995,142997],{"id":142996},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[155,142999],{"style":126479,"src":143000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[99,143002,143003],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[99,143005,143006],{},"translate3d的效果需要搭配透视perspective来使用",[155,143008],{"style":126479,"src":143009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[210,143011,143013],{"id":143012},"_1833-透视-perspective","18.3.3 透视 perspective",[155,143015],{"style":126479,"src":143016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[99,143018,143019],{},"透视写在父盒子上，单位为像素",[210,143021,143023],{"id":143022},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22108,143025,143027],{"id":143026},"_18341-分开解释","18.3.4.1 分开解释",[155,143029],{"style":126479,"src":143030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[155,143032],{"style":126479,"src":143033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[155,143035],{"style":126479,"src":143036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[99,143038,143039],{},"总结来说就是左手原则",[22108,143041,143043],{"id":143042},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[155,143045],{"style":126479,"src":143046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[210,143048,143050],{"id":143049},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[155,143052],{"style":126479,"src":143053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[155,143055],{"style":126479,"src":143056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[15,143058,143060],{"className":126623,"code":143059,"language":126625,"meta":20,"style":20},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[22,143061,143062,143068,143081,143098],{"__ignoreMap":20},[25,143063,143064,143066],{"class":27,"line":28},[25,143065,51682],{"class":51371},[25,143067,15682],{"class":244},[25,143069,143070,143073,143075,143077,143079],{"class":27,"line":39},[25,143071,143072],{"class":35},"  perspective",[25,143074,51508],{"class":244},[25,143076,65145],{"class":35},[25,143078,51563],{"class":240},[25,143080,1403],{"class":244},[25,143082,143083,143085,143087,143090,143092,143094,143096],{"class":27,"line":51},[25,143084,136607],{"class":35},[25,143086,51508],{"class":244},[25,143088,143089],{"class":35},"rotateX",[25,143091,245],{"class":244},[25,143093,772],{"class":35},[25,143095,142450],{"class":240},[25,143097,2829],{"class":244},[25,143099,143100],{"class":27,"line":59},[25,143101,1676],{"class":244},[210,143103,143105],{"id":143104},"_1836-案例","18.3.6 案例",[22108,143107,143109],{"id":143108},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[155,143111],{"style":126479,"src":143112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[155,143114],{"style":126479,"src":143115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[155,143117],{"style":126479,"src":143118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[15,143120,143122],{"className":126623,"code":143121,"language":126625,"meta":20,"style":20},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[22,143123,143124,143129,143135,143147],{"__ignoreMap":20},[25,143125,143126],{"class":27,"line":28},[25,143127,143128],{"class":302},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[25,143130,143131,143133],{"class":27,"line":39},[25,143132,133620],{"class":31},[25,143134,15682],{"class":244},[25,143136,143137,143139,143141,143143,143145],{"class":27,"line":51},[25,143138,143072],{"class":35},[25,143140,51508],{"class":244},[25,143142,65145],{"class":35},[25,143144,51563],{"class":240},[25,143146,1403],{"class":244},[25,143148,143149],{"class":27,"line":59},[25,143150,1676],{"class":244},[22108,143152,143154],{"id":143153},"_18362-3d导航栏","18.3.6.2 3D导航栏",[155,143156],{"style":126479,"src":143157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[15,143159,143160],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,143161,143162,143166,143180,143184],{"__ignoreMap":20},[25,143163,143164],{"class":27,"line":28},[25,143165,130734],{"class":302},[25,143167,143168,143170,143172,143174,143176,143178],{"class":27,"line":39},[25,143169,1153],{"class":244},[25,143171,51682],{"class":51371},[25,143173,53557],{"class":31},[25,143175,290],{"class":244},[25,143177,130747],{"class":45},[25,143179,51378],{"class":244},[25,143181,143182],{"class":27,"line":51},[25,143183,130754],{"class":244},[25,143185,143186,143188,143190],{"class":27,"line":59},[25,143187,51856],{"class":244},[25,143189,51682],{"class":51371},[25,143191,51378],{"class":244},[22108,143193,143195],{"id":143194},"_18363-旋转木马","18.3.6.3 旋转木马",[155,143197],{"style":126479,"src":143198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[15,143200,143201],{"className":126623,"code":142426,"language":126625,"meta":20,"style":20},[22,143202,143203,143209,143225],{"__ignoreMap":20},[25,143204,143205,143207],{"class":27,"line":28},[25,143206,51682],{"class":51371},[25,143208,15682],{"class":244},[25,143210,143211,143213,143215,143217,143219,143221,143223],{"class":27,"line":39},[25,143212,136607],{"class":35},[25,143214,51508],{"class":244},[25,143216,142443],{"class":35},[25,143218,245],{"class":244},[25,143220,772],{"class":35},[25,143222,142450],{"class":240},[25,143224,2829],{"class":244},[25,143226,143227],{"class":27,"line":51},[25,143228,1676],{"class":244},[159,143230,143231],{},"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":20,"searchDepth":39,"depth":39,"links":143233},[143234,143241],{"id":142329,"depth":39,"text":142330,"children":143235},[143236,143237,143238,143239,143240],{"id":142353,"depth":51,"text":142354},{"id":142408,"depth":51,"text":142409},{"id":142533,"depth":51,"text":142534},{"id":142636,"depth":51,"text":142637},{"id":142954,"depth":51,"text":142955},{"id":142982,"depth":39,"text":142983,"children":143242},[143243,143244,143245,143246,143247,143248],{"id":142989,"depth":51,"text":142990},{"id":142996,"depth":51,"text":142997},{"id":143012,"depth":51,"text":143013},{"id":143022,"depth":51,"text":143023},{"id":143049,"depth":51,"text":143050},{"id":143104,"depth":51,"text":143105},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142321,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143255,"title":143256,"body":143257,"description":164,"extension":165,"meta":143460,"navigation":167,"path":143461,"seo":143462,"stem":143463,"__hash__":143464},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143258,"toc":143449},[143259,143262,143266,143269,143272,143276,143279,143282,143285,143289,143292,143296,143299,143303,143306,143310,143324,143328,143353,143356,143359,143376,143380,143384,143387,143390,143394,143397,143400,143418,143422,143425,143439,143443,143446],[10,143260,143256],{"id":143261},"_19-移动端基础-前缀现状与视口",[182,143263,143265],{"id":143264},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[155,143267],{"style":126479,"src":143268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[99,143270,143271],{},"意思就是加个前缀，增加兼容性",[182,143273,143275],{"id":143274},"_192-移动端现状认识","19.2 移动端现状认识",[155,143277],{"style":126479,"src":143278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[99,143280,143281],{},"调试方法：",[155,143283],{"style":126479,"src":143284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[182,143286,143288],{"id":143287},"_193-视口","19.3 视口",[99,143290,143291],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[210,143293,143295],{"id":143294},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[155,143297],{"style":126479,"src":143298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[210,143300,143302],{"id":143301},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[155,143304],{"style":126479,"src":143305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[210,143307,143309],{"id":143308},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[103,143311,143312,143315,143318,143321],{},[106,143313,143314],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[106,143316,143317],{},"理想视口，对设备来讲，是最理想的视口尺寸",[106,143319,143320],{},"需要手动添写meta视口标签通知浏览器操作",[106,143322,143323],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[210,143325,143327],{"id":143326},"_1934-meta视口标签","19.3.4 meta视口标签",[15,143329,143331],{"className":127370,"code":143330,"language":127372,"meta":20,"style":20},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[22,143332,143333],{"__ignoreMap":20},[25,143334,143335,143337,143339,143341,143343,143345,143347,143349,143351],{"class":27,"line":28},[25,143336,1153],{"class":244},[25,143338,51415],{"class":51371},[25,143340,15030],{"class":31},[25,143342,290],{"class":244},[25,143344,51462],{"class":45},[25,143346,51442],{"class":31},[25,143348,290],{"class":244},[25,143350,51469],{"class":45},[25,143352,51378],{"class":244},[155,143354],{"style":126479,"src":143355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[99,143357,143358],{},"标准视口设置：",[194,143360,143361,143364,143367,143370,143373],{},[106,143362,143363],{},"视口宽度和设备保持一致",[106,143365,143366],{},"视口的默认缩放比例1.0",[106,143368,143369],{},"不允许用户自行缩放",[106,143371,143372],{},"最大允许的缩放比例1.0",[106,143374,143375],{},"最小允许的缩放比例1.0",[210,143377,143379],{"id":143378},"_1935-二倍图","19.3.5 二倍图",[22108,143381,143383],{"id":143382},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[155,143385],{"style":126479,"src":143386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[155,143388],{"style":126479,"src":143389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22108,143391,143393],{"id":143392},"_19352-多倍图","19.3.5.2 多倍图",[155,143395],{"style":126479,"src":143396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[99,143398,143399],{},"二倍图法，代码如下：",[15,143401,143403],{"className":126623,"code":143402,"language":126625,"meta":20,"style":20},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[22,143404,143405,143410],{"__ignoreMap":20},[25,143406,143407],{"class":27,"line":28},[25,143408,143409],{"class":302},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[25,143411,143412,143415],{"class":27,"line":39},[25,143413,143414],{"class":51371},"background-size",[25,143416,143417],{"class":244},": 50% 50%;\n",[22108,143419,143421],{"id":143420},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[155,143423],{"style":126479,"src":143424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[194,143426,143427,143430,143433,143436],{},[106,143428,143429],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[106,143431,143432],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[106,143434,143435],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[106,143437,143438],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22108,143440,143442],{"id":143441},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[155,143444],{"style":126479,"src":143445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[159,143447,143448],{},"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":20,"searchDepth":39,"depth":39,"links":143450},[143451,143452,143453],{"id":143264,"depth":39,"text":143265},{"id":143274,"depth":39,"text":143275},{"id":143287,"depth":39,"text":143288,"children":143454},[143455,143456,143457,143458,143459],{"id":143294,"depth":51,"text":143295},{"id":143301,"depth":51,"text":143302},{"id":143308,"depth":51,"text":143309},{"id":143326,"depth":51,"text":143327},{"id":143378,"depth":51,"text":143379},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143256,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143466,"title":143467,"body":143468,"description":164,"extension":165,"meta":144345,"navigation":167,"path":144346,"seo":144347,"stem":144348,"__hash__":144349},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143469,"toc":144329},[143470,143473,143477,143484,143487,143494,143497,143502,143505,143509,143513,143520,143523,143526,143530,143533,143536,143539,143542,143545,143549,143552,143556,143558,143561,143564,143567,143570,143572,143575,143577,143607,143609,143639,143643,143646,143650,143653,143670,143673,143676,143752,143754,143757,143760,143763,143766,143768,143771,143774,143778,143800,143803,143806,143810,143813,143819,143822,143826,143829,143832,143836,143839,143842,143845,143849,143852,143855,143858,143861,143865,143868,143872,143879,143882,143885,143888,143891,143901,143904,143907,143914,143917,143921,143924,143927,143931,143934,143937,143940,143985,143988,143991,143994,143996,144125,144127,144165,144168,144171,144173,144291,144293,144327],[10,143471,143467],{"id":143472},"_20-移动端布局实战上篇",[182,143474,143476],{"id":143475},"_201-移动端主流方案","20.1 移动端主流方案",[194,143478,143479],{},[106,143480,143481],{},[392,143482,143483],{},"单独移动端页面（主流）",[155,143485],{"style":126479,"src":143486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[194,143488,143489],{"start":39},[106,143490,143491],{},[392,143492,143493],{},"响应式兼容PC移动端",[155,143495],{"style":126479,"src":143496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[194,143498,143499],{"start":51},[106,143500,143501],{},"两种页面选型布局方式",[155,143503],{"style":126479,"src":143504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[182,143506,143508],{"id":143507},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[210,143510,143512],{"id":143511},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[99,143514,143515,143516],{},"官网地址： ",[481,143517,143518],{"href":143518,"rel":143519},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23973],[155,143521],{"style":126479,"src":143522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[155,143524],{"style":126479,"src":143525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[210,143527,143529],{"id":143528},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[155,143531],{"style":126479,"src":143532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[155,143534],{"style":126479,"src":143535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[99,143537,143538],{},"去除高亮：",[99,143540,143541],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[99,143543,143544],{},"-webkit- tap-highlight-color: transparent;",[182,143546,143548],{"id":143547},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[155,143550],{"style":126479,"src":143551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[182,143553,143555],{"id":143554},"_204-流式布局案例","20.4 流式布局案例",[99,143557,274],{},[99,143559,143560],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[99,143562,143563],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[99,143565,143566],{},"图片格式：",[155,143568],{"style":126479,"src":143569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[99,143571,135666],{},[155,143573],{"style":126479,"src":143574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[99,143576,139993],{},[15,143578,143579],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,143580,143581],{"__ignoreMap":20},[25,143582,143583,143585,143587,143589,143591,143593,143595,143597,143599,143601,143603,143605],{"class":27,"line":28},[25,143584,1153],{"class":244},[25,143586,155],{"class":51371},[25,143588,55310],{"class":31},[25,143590,290],{"class":244},[25,143592,134140],{"class":45},[25,143594,55318],{"class":31},[25,143596,290],{"class":244},[25,143598,134147],{"class":45},[25,143600,134150],{"class":31},[25,143602,290],{"class":244},[25,143604,134155],{"class":45},[25,143606,51378],{"class":244},[99,143608,140082],{},[15,143610,143611],{"className":127370,"code":134125,"language":127372,"meta":20,"style":20},[22,143612,143613],{"__ignoreMap":20},[25,143614,143615,143617,143619,143621,143623,143625,143627,143629,143631,143633,143635,143637],{"class":27,"line":28},[25,143616,1153],{"class":244},[25,143618,155],{"class":51371},[25,143620,55310],{"class":31},[25,143622,290],{"class":244},[25,143624,134140],{"class":45},[25,143626,55318],{"class":31},[25,143628,290],{"class":244},[25,143630,134147],{"class":45},[25,143632,134150],{"class":31},[25,143634,290],{"class":244},[25,143636,134155],{"class":45},[25,143638,51378],{"class":244},[182,143640,143642],{"id":143641},"_205-flex布局","20.5 flex布局",[155,143644],{"style":126479,"src":143645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[210,143647,143649],{"id":143648},"_2051-布局原理","20.5.1 布局原理",[99,143651,143652],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[103,143654,143655,143658,143661,143664,143667],{},[106,143656,143657],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[106,143659,143660],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[106,143662,143663],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[106,143665,143666],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[106,143668,143669],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[99,143671,143672],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[99,143674,143675],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[15,143677,143679],{"className":126623,"code":143678,"language":126625,"meta":20,"style":20},"\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",[22,143680,143681,143686,143693,143703,143715,143726,143737,143748],{"__ignoreMap":20},[25,143682,143683],{"class":27,"line":28},[25,143684,143685],{"class":302},"\u002F* Flex 弹性布局 *\u002F\n",[25,143687,143688,143691],{"class":27,"line":39},[25,143689,143690],{"class":31},".container",[25,143692,15682],{"class":244},[25,143694,143695,143697,143699,143701],{"class":27,"line":51},[25,143696,128239],{"class":35},[25,143698,51508],{"class":244},[25,143700,51548],{"class":35},[25,143702,1403],{"class":244},[25,143704,143705,143708,143710,143713],{"class":27,"line":59},[25,143706,143707],{"class":35},"  flex-direction",[25,143709,51508],{"class":244},[25,143711,143712],{"class":35},"row",[25,143714,1403],{"class":244},[25,143716,143717,143720,143722,143724],{"class":27,"line":67},[25,143718,143719],{"class":35},"  justify-content",[25,143721,51508],{"class":244},[25,143723,51739],{"class":35},[25,143725,1403],{"class":244},[25,143727,143728,143731,143733,143735],{"class":27,"line":75},[25,143729,143730],{"class":35},"  align-items",[25,143732,51508],{"class":244},[25,143734,51663],{"class":35},[25,143736,1403],{"class":244},[25,143738,143739,143742,143744,143746],{"class":27,"line":83},[25,143740,143741],{"class":35},"  flex-wrap",[25,143743,51508],{"class":244},[25,143745,78681],{"class":35},[25,143747,1403],{"class":244},[25,143749,143750],{"class":27,"line":91},[25,143751,1676],{"class":244},[99,143753,70524],{},[99,143755,143756],{},".form-item .male-label {",[99,143758,143759],{},"   margin-right: 20px;",[99,143761,143762],{},"   display: inline-flex;",[99,143764,143765],{},"   align-items: center;",[99,143767,1189],{},[155,143769],{"style":126479,"src":143770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[155,143772],{"style":126479,"src":143773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[210,143775,143777],{"id":143776},"_2052-常见父项属性","20.5.2 常见父项属性",[194,143779,143780,143783,143786,143789,143792,143795,143798],{},[106,143781,143782],{},"flex-direction：设置主轴的方向",[106,143784,143785],{},"justify-content：设置主轴上的子元素排列方式",[106,143787,143788],{},"flex-wrap：设置子元素是否换行",[106,143790,143791],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[106,143793,143794],{},"align-items：设置侧轴上的子元素排列方式（单行）",[106,143796,143797],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[106,143799,143782],{},[155,143801],{"style":126479,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[155,143804],{"style":126479,"src":143805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[194,143807,143808],{"start":39},[106,143809,143785],{},[155,143811],{"style":126479,"src":143812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[99,143814,143815,143818],{},[22,143816,143817],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[99,143820,143821],{},"跟着主轴走",[194,143823,143824],{"start":51},[106,143825,143788],{},[155,143827],{"style":126479,"src":143828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[99,143830,143831],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[194,143833,143834],{"start":59},[106,143835,143791],{},[155,143837],{"style":126479,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[99,143840,143841],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[99,143843,143844],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[194,143846,143847],{"start":67},[106,143848,143794],{},[155,143850],{"style":126479,"src":143851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[99,143853,143854],{},"align-items与align-content之间的区别：",[99,143856,143857],{},"单找items，多找content",[155,143859],{"style":126479,"src":143860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[194,143862,143863],{"start":75},[106,143864,143797],{},[155,143866],{"style":126479,"src":143867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[210,143869,143871],{"id":143870},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[194,143873,143874],{},[106,143875,143876],{},[392,143877,143878],{},"flex 属性",[99,143880,143881],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[155,143883],{"style":126479,"src":143884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[99,143886,143887],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[99,143889,143890],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[194,143892,143893],{"start":39},[106,143894,143895,13905,143898],{},[392,143896,143897],{},"align-self",[392,143899,143900],{},"控制子项自己在侧轴上的排列方式",[155,143902],{"style":126479,"src":143903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[99,143905,143906],{},"单个子盒子在父盒子侧轴上的排列方式",[194,143908,143909],{"start":51},[106,143910,143911,143913],{},[392,143912,95368],{}," 属性定义项目的排列顺序",[155,143915],{"style":126479,"src":143916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[210,143918,143920],{"id":143919},"_2054-背景线性渐变","20.5.4 背景线性渐变",[155,143922],{"style":126479,"src":143923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[99,143925,143926],{},"必须要添加浏览器的私有前缀",[210,143928,143930],{"id":143929},"_2055-携程网首页案例","20.5.5 携程网首页案例",[99,143932,143933],{},"学到最重要的知识：",[99,143935,143936],{},"flex处理这样的布局思路",[155,143938],{"style":126479,"src":143939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[15,143941,143943],{"className":126623,"code":143942,"language":126625,"meta":20,"style":20},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[22,143944,143945,143951,143961,143971,143981],{"__ignoreMap":20},[25,143946,143947,143949],{"class":27,"line":28},[25,143948,143690],{"class":31},[25,143950,15682],{"class":244},[25,143952,143953,143955,143957,143959],{"class":27,"line":39},[25,143954,128239],{"class":35},[25,143956,51508],{"class":244},[25,143958,51548],{"class":35},[25,143960,1403],{"class":244},[25,143962,143963,143965,143967,143969],{"class":27,"line":51},[25,143964,143719],{"class":35},[25,143966,51508],{"class":244},[25,143968,51663],{"class":35},[25,143970,1403],{"class":244},[25,143972,143973,143975,143977,143979],{"class":27,"line":59},[25,143974,143730],{"class":35},[25,143976,51508],{"class":244},[25,143978,51663],{"class":35},[25,143980,1403],{"class":244},[25,143982,143983],{"class":27,"line":67},[25,143984,1676],{"class":244},[99,143986,143987],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[99,143989,143990],{},"使用属性选择器",[155,143992],{"style":126479,"src":143993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[99,143995,68960],{},[15,143997,143999],{"className":127370,"code":143998,"language":127372,"meta":20,"style":20},"\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",[22,144000,144001,144006,144020,144025,144045,144050,144069,144074,144093,144098,144117],{"__ignoreMap":20},[25,144002,144003],{"class":27,"line":28},[25,144004,144005],{"class":302},"\u003C!-- 携程网移动端案例结构 -->\n",[25,144007,144008,144010,144012,144014,144016,144018],{"class":27,"line":39},[25,144009,1153],{"class":244},[25,144011,51682],{"class":51371},[25,144013,53557],{"class":31},[25,144015,290],{"class":244},[25,144017,92394],{"class":45},[25,144019,51378],{"class":244},[25,144021,144022],{"class":27,"line":51},[25,144023,144024],{"class":302},"  \u003C!-- 搜索栏 -->\n",[25,144026,144027,144029,144031,144033,144035,144038,144041,144043],{"class":27,"line":59},[25,144028,52215],{"class":244},[25,144030,51682],{"class":51371},[25,144032,53557],{"class":31},[25,144034,290],{"class":244},[25,144036,144037],{"class":45},"\"search-index\"",[25,144039,144040],{"class":244},">...\u003C\u002F",[25,144042,51682],{"class":51371},[25,144044,51378],{"class":244},[25,144046,144047],{"class":27,"line":67},[25,144048,144049],{"class":302},"  \u003C!-- 焦点图 -->\n",[25,144051,144052,144054,144056,144058,144060,144063,144065,144067],{"class":27,"line":75},[25,144053,52215],{"class":244},[25,144055,51682],{"class":51371},[25,144057,53557],{"class":31},[25,144059,290],{"class":244},[25,144061,144062],{"class":45},"\"focus\"",[25,144064,144040],{"class":244},[25,144066,51682],{"class":51371},[25,144068,51378],{"class":244},[25,144070,144071],{"class":27,"line":83},[25,144072,144073],{"class":302},"  \u003C!-- 主导航 -->\n",[25,144075,144076,144078,144080,144082,144084,144087,144089,144091],{"class":27,"line":91},[25,144077,52215],{"class":244},[25,144079,51682],{"class":51371},[25,144081,53557],{"class":31},[25,144083,290],{"class":244},[25,144085,144086],{"class":45},"\"local-nav\"",[25,144088,144040],{"class":244},[25,144090,51682],{"class":51371},[25,144092,51378],{"class":244},[25,144094,144095],{"class":27,"line":1429},[25,144096,144097],{"class":302},"  \u003C!-- 子导航 -->\n",[25,144099,144100,144102,144104,144106,144108,144111,144113,144115],{"class":27,"line":1441},[25,144101,52215],{"class":244},[25,144103,51682],{"class":51371},[25,144105,53557],{"class":31},[25,144107,290],{"class":244},[25,144109,144110],{"class":45},"\"nav-common\"",[25,144112,144040],{"class":244},[25,144114,51682],{"class":51371},[25,144116,51378],{"class":244},[25,144118,144119,144121,144123],{"class":27,"line":1723},[25,144120,51856],{"class":244},[25,144122,51682],{"class":51371},[25,144124,51378],{"class":244},[99,144126,70524],{},[15,144128,144129],{"className":126623,"code":137075,"language":126625,"meta":20,"style":20},[22,144130,144131,144145,144161],{"__ignoreMap":20},[25,144132,144133,144135,144137,144139,144141,144143],{"class":27,"line":28},[25,144134,53892],{"class":51371},[25,144136,1133],{"class":244},[25,144138,103178],{"class":31},[25,144140,290],{"class":240},[25,144142,62770],{"class":45},[25,144144,137092],{"class":244},[25,144146,144147,144149,144151,144153,144155,144157,144159],{"class":27,"line":39},[25,144148,70967],{"class":35},[25,144150,51508],{"class":244},[25,144152,460],{"class":35},[25,144154,51563],{"class":240},[25,144156,51592],{"class":35},[25,144158,130203],{"class":35},[25,144160,1403],{"class":244},[25,144162,144163],{"class":27,"line":51},[25,144164,1676],{"class":244},[99,144166,144167],{},"总代码和效果展示：",[155,144169],{"style":126479,"src":144170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[99,144172,68960],{},[15,144174,144175],{"className":127370,"code":143998,"language":127372,"meta":20,"style":20},[22,144176,144177,144181,144195,144199,144217,144221,144239,144243,144261,144265,144283],{"__ignoreMap":20},[25,144178,144179],{"class":27,"line":28},[25,144180,144005],{"class":302},[25,144182,144183,144185,144187,144189,144191,144193],{"class":27,"line":39},[25,144184,1153],{"class":244},[25,144186,51682],{"class":51371},[25,144188,53557],{"class":31},[25,144190,290],{"class":244},[25,144192,92394],{"class":45},[25,144194,51378],{"class":244},[25,144196,144197],{"class":27,"line":51},[25,144198,144024],{"class":302},[25,144200,144201,144203,144205,144207,144209,144211,144213,144215],{"class":27,"line":59},[25,144202,52215],{"class":244},[25,144204,51682],{"class":51371},[25,144206,53557],{"class":31},[25,144208,290],{"class":244},[25,144210,144037],{"class":45},[25,144212,144040],{"class":244},[25,144214,51682],{"class":51371},[25,144216,51378],{"class":244},[25,144218,144219],{"class":27,"line":67},[25,144220,144049],{"class":302},[25,144222,144223,144225,144227,144229,144231,144233,144235,144237],{"class":27,"line":75},[25,144224,52215],{"class":244},[25,144226,51682],{"class":51371},[25,144228,53557],{"class":31},[25,144230,290],{"class":244},[25,144232,144062],{"class":45},[25,144234,144040],{"class":244},[25,144236,51682],{"class":51371},[25,144238,51378],{"class":244},[25,144240,144241],{"class":27,"line":83},[25,144242,144073],{"class":302},[25,144244,144245,144247,144249,144251,144253,144255,144257,144259],{"class":27,"line":91},[25,144246,52215],{"class":244},[25,144248,51682],{"class":51371},[25,144250,53557],{"class":31},[25,144252,290],{"class":244},[25,144254,144086],{"class":45},[25,144256,144040],{"class":244},[25,144258,51682],{"class":51371},[25,144260,51378],{"class":244},[25,144262,144263],{"class":27,"line":1429},[25,144264,144097],{"class":302},[25,144266,144267,144269,144271,144273,144275,144277,144279,144281],{"class":27,"line":1441},[25,144268,52215],{"class":244},[25,144270,51682],{"class":51371},[25,144272,53557],{"class":31},[25,144274,290],{"class":244},[25,144276,144110],{"class":45},[25,144278,144040],{"class":244},[25,144280,51682],{"class":51371},[25,144282,51378],{"class":244},[25,144284,144285,144287,144289],{"class":27,"line":1723},[25,144286,51856],{"class":244},[25,144288,51682],{"class":51371},[25,144290,51378],{"class":244},[99,144292,70524],{},[15,144294,144295],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,144296,144297,144301,144315,144319],{"__ignoreMap":20},[25,144298,144299],{"class":27,"line":28},[25,144300,130734],{"class":302},[25,144302,144303,144305,144307,144309,144311,144313],{"class":27,"line":39},[25,144304,1153],{"class":244},[25,144306,51682],{"class":51371},[25,144308,53557],{"class":31},[25,144310,290],{"class":244},[25,144312,130747],{"class":45},[25,144314,51378],{"class":244},[25,144316,144317],{"class":27,"line":51},[25,144318,130754],{"class":244},[25,144320,144321,144323,144325],{"class":27,"line":59},[25,144322,51856],{"class":244},[25,144324,51682],{"class":51371},[25,144326,51378],{"class":244},[159,144328,138024],{},{"title":20,"searchDepth":39,"depth":39,"links":144330},[144331,144332,144336,144337,144338],{"id":143475,"depth":39,"text":143476},{"id":143507,"depth":39,"text":143508,"children":144333},[144334,144335],{"id":143511,"depth":51,"text":143512},{"id":143528,"depth":51,"text":143529},{"id":143547,"depth":39,"text":143548},{"id":143554,"depth":39,"text":143555},{"id":143641,"depth":39,"text":143642,"children":144339},[144340,144341,144342,144343,144344],{"id":143648,"depth":51,"text":143649},{"id":143776,"depth":51,"text":143777},{"id":143870,"depth":51,"text":143871},{"id":143919,"depth":51,"text":143920},{"id":143929,"depth":51,"text":143930},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143467,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144351,"title":144352,"body":144353,"description":164,"extension":165,"meta":145580,"navigation":167,"path":145581,"seo":145582,"stem":145583,"__hash__":145584},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144354,"toc":145558},[144355,144358,144362,144366,144369,144372,144376,144381,144384,144387,144390,144393,144396,144453,144456,144461,144464,144467,144471,144482,144486,144489,144492,144499,144504,144508,144511,144517,144520,144524,144527,144534,144537,144540,144547,144550,144557,144560,144563,144570,144573,144576,144578,144595,144599,144602,144605,144608,144612,144615,144618,144621,144624,144627,144630,144632,144635,144638,144700,144703,144813,144820,144826,144829,144832,144836,144839,144843,144848,144851,144858,144861,144867,144872,144875,144878,144881,144884,144887,144890,144893,144896,144952,144954,144980,144984,144987,144990,144993,145001,145004,145007,145011,145067,145070,145074,145080,145091,145094,145099,145102,145105,145111,145114,145117,145120,145123,145126,145129,145132,145135,145160,145166,145169,145172,145175,145178,145181,145184,145189,145192,145195,145198,145206,145209,145216,145219,145222,145224,145248,145250,145253,145256,145259,145262,145265,145268,145271,145305,145308,145311,145345,145352,145355,145358,145361,145364,145367,145370,145377,145380,145383,145386,145389,145396,145399,145402,145409,145412,145415,145419,145422,145425,145428,145431,145434,145437,145440,145443,145445,145469,145471,145495,145499,145510,145513,145516,145519,145522,145525,145528,145531,145534,145537,145540,145543,145546,145549,145552,145555],[10,144356,144352],{"id":144357},"_21-移动端布局实战下篇",[182,144359,144361],{"id":144360},"_211-rem适配布局","21.1 rem适配布局",[210,144363,144365],{"id":144364},"_2111-rem单位","21.1.1 rem单位",[155,144367],{"style":126479,"src":144368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[99,144370,144371],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[210,144373,144375],{"id":144374},"_2112-媒体查询","21.1.2 媒体查询",[194,144377,144378],{},[106,144379,144380],{},"参数介绍",[155,144382],{"style":126479,"src":144383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[155,144385],{"style":126479,"src":144386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[155,144388],{"style":126479,"src":144389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[155,144391],{"style":126479,"src":144392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[155,144394],{"style":126479,"src":144395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[15,144397,144399],{"className":126623,"code":144398,"language":126625,"meta":20,"style":20},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[22,144400,144401,144406,144425,144432,144445,144449],{"__ignoreMap":20},[25,144402,144403],{"class":27,"line":28},[25,144404,144405],{"class":302},"\u002F* 媒体查询 *\u002F\n",[25,144407,144408,144411,144413,144416,144418,144421,144423],{"class":27,"line":39},[25,144409,144410],{"class":240},"@media",[25,144412,1769],{"class":244},[25,144414,144415],{"class":35},"max-width",[25,144417,51508],{"class":244},[25,144419,144420],{"class":35},"768",[25,144422,51563],{"class":240},[25,144424,12552],{"class":244},[25,144426,144427,144430],{"class":27,"line":51},[25,144428,144429],{"class":31},"  .container",[25,144431,15682],{"class":244},[25,144433,144434,144437,144439,144441,144443],{"class":27,"line":59},[25,144435,144436],{"class":35},"    width",[25,144438,51508],{"class":244},[25,144440,554],{"class":35},[25,144442,571],{"class":240},[25,144444,1403],{"class":244},[25,144446,144447],{"class":27,"line":67},[25,144448,127419],{"class":244},[25,144450,144451],{"class":27,"line":75},[25,144452,1676],{"class":244},[99,144454,144455],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[194,144457,144458],{"start":39},[106,144459,144460],{},"引入资源",[155,144462],{"style":126479,"src":144463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[99,144465,144466],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[210,144468,144470],{"id":144469},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[103,144472,144473,144476,144479],{},[106,144474,144475],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[106,144477,144478],{},"媒体查询可以根据不同设备宽度来修改样式",[106,144480,144481],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[182,144483,144485],{"id":144484},"_212-less基础","21.2 Less基础",[99,144487,144488],{},"css冗余度较高，不利于复用，没有很好的计算能力",[99,144490,144491],{},"Less可以解决该问题，它是css的扩展语言",[99,144493,144494,144495],{},"Less中文网址： ",[481,144496,144497],{"href":144497,"rel":144498},"http:\u002F\u002Flesscss.cn\u002F",[23973],[99,144500,144501],{},[392,144502,144503],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[210,144505,144507],{"id":144506},"_2121-less安装","21.2.1 less安装",[99,144509,144510],{},"如果使用vscode，则无需进行下方安装步骤",[99,144512,144513],{},[481,144514,144515],{"href":144515,"rel":144516},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23973],[155,144518],{"style":126479,"src":144519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[210,144521,144523],{"id":144522},"_2122-less使用","21.2.2 less使用",[99,144525,144526],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[194,144528,144529],{},[106,144530,144531],{},[392,144532,144533],{},"Less 变量",[155,144535],{"style":126479,"src":144536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[155,144538],{"style":126479,"src":144539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[194,144541,144542],{"start":39},[106,144543,144544],{},[392,144545,144546],{},"Less 编译",[155,144548],{"style":126479,"src":144549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[194,144551,144552],{"start":51},[106,144553,144554],{},[392,144555,144556],{},"Less 嵌套",[155,144558],{"style":126479,"src":144559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[155,144561],{"style":126479,"src":144562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[194,144564,144565],{"start":59},[106,144566,144567],{},[392,144568,144569],{},"Less 运算",[155,144571],{"style":126479,"src":144572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[99,144574,144575],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[99,144577,274],{},[103,144579,144580,144583,144586,144589,144592],{},[106,144581,144582],{},"乘号（*）和除号（\u002F）的写法",[106,144584,144585],{},"运算符中间左右有个空格隔开 1px + 5",[106,144587,144588],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[106,144590,144591],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[106,144593,144594],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[182,144596,144598],{"id":144597},"_213-rem-适配方案","21.3 rem 适配方案",[99,144600,144601],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[99,144603,144604],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[155,144606],{"style":126479,"src":144607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[210,144609,144611],{"id":144610},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[99,144613,144614],{},"rem + 媒体查询 + less 技术",[155,144616],{"style":126479,"src":144617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[99,144619,144620],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[99,144622,144623],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[155,144625],{"style":126479,"src":144626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[99,144628,144629],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[99,144631,14743],{},[155,144633],{"style":126479,"src":144634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[99,144636,144637],{},"index.html:",[15,144639,144641],{"className":126623,"code":144640,"language":126625,"meta":20,"style":20},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[22,144642,144643,144648,144654,144670,144674,144680,144696],{"__ignoreMap":20},[25,144644,144645],{"class":27,"line":28},[25,144646,144647],{"class":302},"\u002F* rem 适配方案 *\u002F\n",[25,144649,144650,144652],{"class":27,"line":39},[25,144651,50706],{"class":51371},[25,144653,15682],{"class":244},[25,144655,144656,144658,144660,144663,144665,144667],{"class":27,"line":51},[25,144657,70697],{"class":35},[25,144659,51508],{"class":244},[25,144661,144662],{"class":35},"62.5",[25,144664,571],{"class":240},[25,144666,130486],{"class":244},[25,144668,144669],{"class":302},"\u002F* 1rem = 10px *\u002F\n",[25,144671,144672],{"class":27,"line":59},[25,144673,1676],{"class":244},[25,144675,144676,144678],{"class":27,"line":67},[25,144677,130471],{"class":31},[25,144679,15682],{"class":244},[25,144681,144682,144684,144686,144688,144691,144693],{"class":27,"line":75},[25,144683,70639],{"class":35},[25,144685,51508],{"class":244},[25,144687,689],{"class":35},[25,144689,144690],{"class":240},"rem",[25,144692,130486],{"class":244},[25,144694,144695],{"class":302},"\u002F* 100px *\u002F\n",[25,144697,144698],{"class":27,"line":83},[25,144699,1676],{"class":244},[99,144701,144702],{},"common.less",[15,144704,144706],{"className":126623,"code":144705,"language":126625,"meta":20,"style":20},"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",[22,144707,144708,144714,144729,144733,144739,144753,144757,144761,144765,144771,144785,144789,144795,144809],{"__ignoreMap":20},[25,144709,144710,144712],{"class":27,"line":28},[25,144711,50706],{"class":51371},[25,144713,15682],{"class":244},[25,144715,144716,144718,144720,144722,144724,144726],{"class":27,"line":39},[25,144717,70697],{"class":35},[25,144719,51508],{"class":244},[25,144721,144662],{"class":35},[25,144723,571],{"class":240},[25,144725,26138],{"class":244},[25,144727,144728],{"class":302},"\u002F* 10px *\u002F\n",[25,144730,144731],{"class":27,"line":51},[25,144732,1676],{"class":244},[25,144734,144735,144737],{"class":27,"line":59},[25,144736,51682],{"class":51371},[25,144738,15682],{"class":244},[25,144740,144741,144743,144745,144747,144749,144751],{"class":27,"line":67},[25,144742,70639],{"class":35},[25,144744,51508],{"class":244},[25,144746,689],{"class":35},[25,144748,144690],{"class":240},[25,144750,26138],{"class":244},[25,144752,144695],{"class":302},[25,144754,144755],{"class":27,"line":75},[25,144756,1676],{"class":244},[25,144758,144759],{"class":27,"line":83},[25,144760,136084],{"class":244},[25,144762,144763],{"class":27,"line":91},[25,144764,144647],{"class":302},[25,144766,144767,144769],{"class":27,"line":1429},[25,144768,50706],{"class":51371},[25,144770,15682],{"class":244},[25,144772,144773,144775,144777,144779,144781,144783],{"class":27,"line":1441},[25,144774,70697],{"class":35},[25,144776,51508],{"class":244},[25,144778,144662],{"class":35},[25,144780,571],{"class":240},[25,144782,130486],{"class":244},[25,144784,144669],{"class":302},[25,144786,144787],{"class":27,"line":1723},[25,144788,1676],{"class":244},[25,144790,144791,144793],{"class":27,"line":1728},[25,144792,130471],{"class":31},[25,144794,15682],{"class":244},[25,144796,144797,144799,144801,144803,144805,144807],{"class":27,"line":1734},[25,144798,70639],{"class":35},[25,144800,51508],{"class":244},[25,144802,689],{"class":35},[25,144804,144690],{"class":240},[25,144806,130486],{"class":244},[25,144808,144695],{"class":302},[25,144810,144811],{"class":27,"line":1739},[25,144812,1676],{"class":244},[99,144814,144815,144816,144819],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23663,144817,144818],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[15,144821,144824],{"className":144822,"code":144823,"language":5297},[5295],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[22,144825,144823],{"__ignoreMap":20},[99,144827,144828],{},"less保存时会自动变成.css文件",[99,144830,144831],{},"好好搞懂上述代码写法",[210,144833,144835],{"id":144834},"_2132-样式导入样式","21.3.2 样式导入样式",[155,144837],{"style":126479,"src":144838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[210,144840,144842],{"id":144841},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[194,144844,144845],{},[106,144846,144847],{},"准备工作",[155,144849],{"style":126479,"src":144850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[99,144852,144853,144854],{},"github地址：",[481,144855,144856],{"href":144856,"rel":144857},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23973],[99,144859,144860],{},"下载之后，将index.js文件拖到项目中就可以了",[99,144862,144863,144864],{},"js文件引入到index.html中使用的是",[22,144865,144866],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[194,144868,144869],{"start":39},[106,144870,144871],{},"vscode插件",[155,144873],{"style":126479,"src":144874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[99,144876,144877],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[99,144879,144880],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[155,144882],{"style":126479,"src":144883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[99,144885,144886],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[155,144888],{"style":126479,"src":144889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[99,144891,144892],{},"修改成75就可以，alt+z为快捷键",[99,144894,144895],{},"index.css：",[15,144897,144898],{"className":126623,"code":144640,"language":126625,"meta":20,"style":20},[22,144899,144900,144904,144910,144924,144928,144934,144948],{"__ignoreMap":20},[25,144901,144902],{"class":27,"line":28},[25,144903,144647],{"class":302},[25,144905,144906,144908],{"class":27,"line":39},[25,144907,50706],{"class":51371},[25,144909,15682],{"class":244},[25,144911,144912,144914,144916,144918,144920,144922],{"class":27,"line":51},[25,144913,70697],{"class":35},[25,144915,51508],{"class":244},[25,144917,144662],{"class":35},[25,144919,571],{"class":240},[25,144921,130486],{"class":244},[25,144923,144669],{"class":302},[25,144925,144926],{"class":27,"line":59},[25,144927,1676],{"class":244},[25,144929,144930,144932],{"class":27,"line":67},[25,144931,130471],{"class":31},[25,144933,15682],{"class":244},[25,144935,144936,144938,144940,144942,144944,144946],{"class":27,"line":75},[25,144937,70639],{"class":35},[25,144939,51508],{"class":244},[25,144941,689],{"class":35},[25,144943,144690],{"class":240},[25,144945,130486],{"class":244},[25,144947,144695],{"class":302},[25,144949,144950],{"class":27,"line":83},[25,144951,1676],{"class":244},[99,144953,144637],{},[15,144955,144956],{"className":126623,"code":127027,"language":126625,"meta":20,"style":20},[22,144957,144958,144964,144976],{"__ignoreMap":20},[25,144959,144960,144962],{"class":27,"line":28},[25,144961,51871],{"class":51371},[25,144963,15682],{"class":244},[25,144965,144966,144968,144970,144972,144974],{"class":27,"line":39},[25,144967,70697],{"class":35},[25,144969,51508],{"class":244},[25,144971,844],{"class":35},[25,144973,51563],{"class":240},[25,144975,1403],{"class":244},[25,144977,144978],{"class":27,"line":51},[25,144979,1676],{"class":244},[182,144981,144983],{"id":144982},"_214-响应式开发","21.4 响应式开发",[99,144985,144986],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[155,144988],{"style":126479,"src":144989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[99,144991,144992],{},"做法：",[103,144994,144995,144998],{},[106,144996,144997],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[106,144999,145000],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[155,145002],{"style":126479,"src":145003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[99,145005,145006],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[210,145008,145010],{"id":145009},"_2141-简单代码示范","21.4.1 简单代码示范",[15,145012,145013],{"className":126623,"code":144640,"language":126625,"meta":20,"style":20},[22,145014,145015,145019,145025,145039,145043,145049,145063],{"__ignoreMap":20},[25,145016,145017],{"class":27,"line":28},[25,145018,144647],{"class":302},[25,145020,145021,145023],{"class":27,"line":39},[25,145022,50706],{"class":51371},[25,145024,15682],{"class":244},[25,145026,145027,145029,145031,145033,145035,145037],{"class":27,"line":51},[25,145028,70697],{"class":35},[25,145030,51508],{"class":244},[25,145032,144662],{"class":35},[25,145034,571],{"class":240},[25,145036,130486],{"class":244},[25,145038,144669],{"class":302},[25,145040,145041],{"class":27,"line":59},[25,145042,1676],{"class":244},[25,145044,145045,145047],{"class":27,"line":67},[25,145046,130471],{"class":31},[25,145048,15682],{"class":244},[25,145050,145051,145053,145055,145057,145059,145061],{"class":27,"line":75},[25,145052,70639],{"class":35},[25,145054,51508],{"class":244},[25,145056,689],{"class":35},[25,145058,144690],{"class":240},[25,145060,130486],{"class":244},[25,145062,144695],{"class":302},[25,145064,145065],{"class":27,"line":83},[25,145066,1676],{"class":244},[99,145068,145069],{},"父盒子一般命名为container",[210,145071,145073],{"id":145072},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[99,145075,145076,145077],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[392,145078,145079],{},"使得 Web 开发更加快捷",[103,145081,145082],{},[106,145083,145084,145085],{},"官网：",[392,145086,145087],{},[481,145088,145089],{"href":145089,"rel":145090},"http:\u002F\u002Fgetbootstrap.com\u002F",[23973],[99,145092,145093],{},"可以直接去官网拿现成的东西",[194,145095,145096],{},[106,145097,145098],{},"Bootstrap的使用",[99,145100,145101],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[99,145103,145104],{},"Bootstrap 使用四步曲：",[99,145106,145107,145110],{},[392,145108,145109],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[155,145112],{"style":126479,"src":145113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[99,145115,145116],{},"打开Bootstrap官网，然后下载",[155,145118],{"style":126479,"src":145119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[155,145121],{"style":126479,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[99,145124,145125],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[99,145127,145128],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[99,145130,145131],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[155,145133],{"style":126479,"src":145134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[15,145136,145138],{"className":126623,"code":145137,"language":126625,"meta":20,"style":20},".center {\n  color: red;\n}\n",[22,145139,145140,145146,145156],{"__ignoreMap":20},[25,145141,145142,145144],{"class":27,"line":28},[25,145143,126914],{"class":31},[25,145145,15682],{"class":244},[25,145147,145148,145150,145152,145154],{"class":27,"line":39},[25,145149,70976],{"class":35},[25,145151,51508],{"class":244},[25,145153,57492],{"class":35},[25,145155,1403],{"class":244},[25,145157,145158],{"class":27,"line":51},[25,145159,1676],{"class":244},[99,145161,145162,145165],{},[22,145163,145164],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[155,145167],{"style":126479,"src":145168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[155,145170],{"style":126479,"src":145171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[155,145173],{"style":126479,"src":145174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[99,145176,145177],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[155,145179],{"style":126479,"src":145180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[99,145182,145183],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[194,145185,145186],{"start":39},[106,145187,145188],{},"布局容器",[155,145190],{"style":126479,"src":145191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[99,145193,145194],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[99,145196,145197],{},"container-fluid用于移动式布局比较方便",[194,145199,145200],{"start":51},[106,145201,145202,145203],{},"bootstrap ",[392,145204,145205],{},"栅格系统原理",[155,145207],{"style":126479,"src":145208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[194,145210,145211],{"start":59},[106,145212,145213],{},[392,145214,145215],{},"栅格选项参数",[155,145217],{"style":126479,"src":145218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[99,145220,145221],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[99,145223,14743],{},[15,145225,145226],{"className":126623,"code":145137,"language":126625,"meta":20,"style":20},[22,145227,145228,145234,145244],{"__ignoreMap":20},[25,145229,145230,145232],{"class":27,"line":28},[25,145231,126914],{"class":31},[25,145233,15682],{"class":244},[25,145235,145236,145238,145240,145242],{"class":27,"line":39},[25,145237,70976],{"class":35},[25,145239,51508],{"class":244},[25,145241,57492],{"class":35},[25,145243,1403],{"class":244},[25,145245,145246],{"class":27,"line":51},[25,145247,1676],{"class":244},[99,145249,135666],{},[155,145251],{"style":126479,"src":145252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[99,145254,145255],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[99,145257,145258],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[99,145260,145261],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[99,145263,145264],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[99,145266,145267],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[99,145269,145270],{},"汇总展示说明：",[15,145272,145273],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,145274,145275,145279,145293,145297],{"__ignoreMap":20},[25,145276,145277],{"class":27,"line":28},[25,145278,130734],{"class":302},[25,145280,145281,145283,145285,145287,145289,145291],{"class":27,"line":39},[25,145282,1153],{"class":244},[25,145284,51682],{"class":51371},[25,145286,53557],{"class":31},[25,145288,290],{"class":244},[25,145290,130747],{"class":45},[25,145292,51378],{"class":244},[25,145294,145295],{"class":27,"line":51},[25,145296,130754],{"class":244},[25,145298,145299,145301,145303],{"class":27,"line":59},[25,145300,51856],{"class":244},[25,145302,51682],{"class":51371},[25,145304,51378],{"class":244},[155,145306],{"style":126479,"src":145307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[99,145309,145310],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[15,145312,145313],{"className":127370,"code":130727,"language":127372,"meta":20,"style":20},[22,145314,145315,145319,145333,145337],{"__ignoreMap":20},[25,145316,145317],{"class":27,"line":28},[25,145318,130734],{"class":302},[25,145320,145321,145323,145325,145327,145329,145331],{"class":27,"line":39},[25,145322,1153],{"class":244},[25,145324,51682],{"class":51371},[25,145326,53557],{"class":31},[25,145328,290],{"class":244},[25,145330,130747],{"class":45},[25,145332,51378],{"class":244},[25,145334,145335],{"class":27,"line":51},[25,145336,130754],{"class":244},[25,145338,145339,145341,145343],{"class":27,"line":59},[25,145340,51856],{"class":244},[25,145342,51682],{"class":51371},[25,145344,51378],{"class":244},[194,145346,145347],{"start":67},[106,145348,145349],{},[392,145350,145351],{},"列嵌套",[155,145353],{"style":126479,"src":145354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[99,145356,145357],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[99,145359,145360],{},"没加row内部这样：",[155,145362],{"style":126479,"src":145363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[99,145365,145366],{},"加上row之后内部为：",[155,145368],{"style":126479,"src":145369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[194,145371,145372],{"start":75},[106,145373,145374],{},[392,145375,145376],{},"列偏移",[155,145378],{"style":126479,"src":145379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[99,145381,145382],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[99,145384,145385],{},"要加偏移量，即偏移份数",[99,145387,145388],{},"偏移的份数=12-两个盒子的份数",[194,145390,145391],{"start":83},[106,145392,145393],{},[392,145394,145395],{},"列排序",[155,145397],{"style":126479,"src":145398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[99,145400,145401],{},"pull拉左；push推右",[194,145403,145404],{"start":91},[106,145405,145406],{},[392,145407,145408],{},"响应式工具",[155,145410],{"style":126479,"src":145411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[99,145413,145414],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[210,145416,145418],{"id":145417},"_2143-响应式小项目","21.4.3 响应式小项目",[99,145420,145421],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[99,145423,145424],{},"ul {",[99,145426,145427],{},"list-style: none;",[99,145429,145430],{},"margin:0;",[99,145432,145433],{},"padding:0; }",[155,145435],{"style":126479,"src":145436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[155,145438],{"style":126479,"src":145439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[99,145441,145442],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[99,145444,68960],{},[15,145446,145447],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,145448,145449,145455,145465],{"__ignoreMap":20},[25,145450,145451,145453],{"class":27,"line":28},[25,145452,130471],{"class":31},[25,145454,15682],{"class":244},[25,145456,145457,145459,145461,145463],{"class":27,"line":39},[25,145458,131103],{"class":35},[25,145460,51508],{"class":244},[25,145462,23846],{"class":35},[25,145464,1403],{"class":244},[25,145466,145467],{"class":27,"line":51},[25,145468,1676],{"class":244},[99,145470,70524],{},[15,145472,145473],{"className":126623,"code":139293,"language":126625,"meta":20,"style":20},[22,145474,145475,145481,145491],{"__ignoreMap":20},[25,145476,145477,145479],{"class":27,"line":28},[25,145478,130471],{"class":31},[25,145480,15682],{"class":244},[25,145482,145483,145485,145487,145489],{"class":27,"line":39},[25,145484,131103],{"class":35},[25,145486,51508],{"class":244},[25,145488,23846],{"class":35},[25,145490,1403],{"class":244},[25,145492,145493],{"class":27,"line":51},[25,145494,1676],{"class":244},[182,145496,145498],{"id":145497},"_215-swiper-插件使用","21.5 swiper 插件使用",[103,145500,145501,145504,145507],{},[106,145502,145503],{},"下载需要的css和js文件html页面中 引入相关文件",[106,145505,145506],{},"官网找到类似案例，复制html结构，css样式 js 语法",[106,145508,145509],{},"根据需求定制修改模块",[155,145511],{"style":126479,"src":145512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[99,145514,145515],{},"解压后将这两部分放到项目中",[155,145517],{"style":126479,"src":145518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[99,145520,145521],{},"这个插件可以帮助我们实现轮播图效果",[99,145523,145524],{},"用法：",[155,145526],{"style":126479,"src":145527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[99,145529,145530],{},"找到自己喜欢的",[155,145532],{"style":126479,"src":145533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[99,145535,145536],{},"右键，查看网页源代码",[155,145538],{"style":126479,"src":145539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[99,145541,145542],{},"复制人家的结构内容",[99,145544,145545],{},"然后去看API文档：",[155,145547],{"style":126479,"src":145548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[99,145550,145551],{},"可以看看如何修改样式",[99,145553,145554],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[159,145556,145557],{},"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":20,"searchDepth":39,"depth":39,"links":145559},[145560,145565,145569,145574,145579],{"id":144360,"depth":39,"text":144361,"children":145561},[145562,145563,145564],{"id":144364,"depth":51,"text":144365},{"id":144374,"depth":51,"text":144375},{"id":144469,"depth":51,"text":144470},{"id":144484,"depth":39,"text":144485,"children":145566},[145567,145568],{"id":144506,"depth":51,"text":144507},{"id":144522,"depth":51,"text":144523},{"id":144597,"depth":39,"text":144598,"children":145570},[145571,145572,145573],{"id":144610,"depth":51,"text":144611},{"id":144834,"depth":51,"text":144835},{"id":144841,"depth":51,"text":144842},{"id":144982,"depth":39,"text":144983,"children":145575},[145576,145577,145578],{"id":145009,"depth":51,"text":145010},{"id":145072,"depth":51,"text":145073},{"id":145417,"depth":51,"text":145418},{"id":145497,"depth":39,"text":145498},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144352,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145586,"title":145587,"body":145588,"description":164,"extension":165,"meta":145808,"navigation":167,"path":145809,"seo":145810,"stem":145811,"__hash__":145812},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145589,"toc":145804},[145590,145593,145597,145600,145615,145620,145623,145628,145663,145668,145680,145685,145698,145703,145720,145725,145745,145750,145768,145771,145774,145777,145780,145784,145787,145790,145793,145796,145799,145802],[10,145591,145587],{"id":145592},"_22-代码提交与新型相对单位",[182,145594,145596],{"id":145595},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[99,145598,145599],{},"法1：",[194,145601,145602,145609,145612],{},[106,145603,145604,145605],{},"登录网站注册：",[481,145606,145607],{"href":145607,"rel":145608},"https:\u002F\u002Fgitee.com\u002F",[23973],[106,145610,145611],{},"码云创建新的仓库",[106,145613,145614],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[103,145616,145617],{},[106,145618,145619],{},"在网站根目录右键-- Git Bash Here",[155,145621],{"style":126479,"src":145622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[103,145624,145625],{},[106,145626,145627],{},"如果是第一次利用git提交，请配置好全局选项",[15,145629,145631],{"className":117367,"code":145630,"language":117369,"meta":20,"style":20},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[22,145632,145633,145649],{"__ignoreMap":20},[25,145634,145635,145638,145640,145643,145646],{"class":27,"line":28},[25,145636,145637],{"class":31},"git",[25,145639,119790],{"class":45},[25,145641,145642],{"class":35}," --global",[25,145644,145645],{"class":45}," user.name",[25,145647,145648],{"class":45}," \"你的名字\"\n",[25,145650,145651,145653,145655,145657,145660],{"class":27,"line":39},[25,145652,145637],{"class":31},[25,145654,119790],{"class":45},[25,145656,145642],{"class":35},[25,145658,145659],{"class":45}," user.email",[25,145661,145662],{"class":45}," \"你的邮箱\"\n",[103,145664,145665],{},[106,145666,145667],{},"初始化仓库",[15,145669,145671],{"className":117367,"code":145670,"language":117369,"meta":20,"style":20},"git init\n",[22,145672,145673],{"__ignoreMap":20},[25,145674,145675,145677],{"class":27,"line":28},[25,145676,145637],{"class":31},[25,145678,145679],{"class":45}," init\n",[103,145681,145682],{},[106,145683,145684],{},"把本地文件放到暂存区",[15,145686,145688],{"className":117367,"code":145687,"language":117369,"meta":20,"style":20},"git add .\n",[22,145689,145690],{"__ignoreMap":20},[25,145691,145692,145694,145696],{"class":27,"line":28},[25,145693,145637],{"class":31},[25,145695,5319],{"class":45},[25,145697,28812],{"class":45},[103,145699,145700],{},[106,145701,145702],{},"把本地文件放到本地仓库里面",[15,145704,145706],{"className":117367,"code":145705,"language":117369,"meta":20,"style":20},"git commit -m \"first commit\"\n",[22,145707,145708],{"__ignoreMap":20},[25,145709,145710,145712,145715,145717],{"class":27,"line":28},[25,145711,145637],{"class":31},[25,145713,145714],{"class":45}," commit",[25,145716,100953],{"class":35},[25,145718,145719],{"class":45}," \"first commit\"\n",[103,145721,145722],{},[106,145723,145724],{},"链接远程仓库",[15,145726,145728],{"className":117367,"code":145727,"language":117369,"meta":20,"style":20},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[22,145729,145730],{"__ignoreMap":20},[25,145731,145732,145734,145737,145739,145742],{"class":27,"line":28},[25,145733,145637],{"class":31},[25,145735,145736],{"class":45}," remote",[25,145738,5319],{"class":45},[25,145740,145741],{"class":45}," origin",[25,145743,145744],{"class":45}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[103,145746,145747],{},[106,145748,145749],{},"把本地仓库的文件推送到远程仓库 push",[15,145751,145753],{"className":117367,"code":145752,"language":117369,"meta":20,"style":20},"git push -u origin master\n",[22,145754,145755],{"__ignoreMap":20},[25,145756,145757,145759,145761,145763,145765],{"class":27,"line":28},[25,145758,145637],{"class":31},[25,145760,29087],{"class":45},[25,145762,28361],{"class":35},[25,145764,145741],{"class":45},[25,145766,145767],{"class":45}," master\n",[155,145769],{"style":126479,"src":145770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[99,145772,145773],{},"上方方法暂未实现，后边学完git后在整",[99,145775,145776],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[155,145778],{"style":126479,"src":145779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[182,145781,145783],{"id":145782},"_222-新型相对单位","22.2 新型相对单位",[155,145785],{"style":126479,"src":145786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[155,145788],{"style":126479,"src":145789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[99,145791,145792],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[99,145794,145795],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[155,145797],{"style":126479,"src":145798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[99,145800,145801],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[159,145803,24066],{},{"title":20,"searchDepth":39,"depth":39,"links":145805},[145806,145807],{"id":145595,"depth":39,"text":145596},{"id":145782,"depth":39,"text":145783},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145587,"description":164},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145814,"title":145815,"body":145816,"description":145820,"extension":165,"meta":145821,"navigation":167,"path":145822,"seo":145823,"stem":145824,"__hash__":145825},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145817,"toc":145818},[],{"title":20,"searchDepth":39,"depth":39,"links":145819},[],"自己正经开始学编程的第一门语言！",{"category":92910},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145815,"description":145820},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145827,"title":145828,"body":145829,"description":164,"extension":165,"meta":146976,"navigation":167,"path":146977,"seo":146978,"stem":146979,"__hash__":146980},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145830,"toc":146952},[145831,145834,145838,145841,145844,145869,145872,145878,145882,145885,145912,145915,145955,145958,145970,145973,145979,145983,145987,146014,146031,146038,146042,146045,146071,146074,146078,146081,146121,146124,146141,146147,146151,146156,146200,146203,146221,146224,146292,146296,146303,146306,146321,146324,146333,146336,146347,146350,146359,146362,146379,146382,146397,146401,146405,146408,146410,146430,146434,146437,146440,146451,146454,146460,146464,146470,146497,146500,146512,146515,146526,146529,146535,146539,146545,146595,146598,146640,146643,146676,146679,146713,146717,146720,146740,146743,146779,146782,146795,146799,146803,146809,146812,146825,146829,146832,146838,146841,146845,146848,146851,146900,146904,146920,146926,146933,146939,146949],[10,145832,145828],{"id":145833},"_1-python环境与第一个程序",[182,145835,145837],{"id":145836},"_11-什么是python","1.1 什么是Python",[99,145839,145840],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[99,145842,145843],{},"理解 Python 时抓住三个关键词：",[194,145845,145846,145849,145852],{},[106,145847,145848],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[106,145850,145851],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[106,145853,145854,145855,455,145858,455,145861,455,145864,455,145866,28456],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[22,145856,145857],{},"os",[22,145859,145860],{},"sys",[22,145862,145863],{},"json",[22,145865,57931],{},[22,145867,145868],{},"datetime",[99,145870,145871],{},"Python 程序的运行链路：",[15,145873,145876],{"className":145874,"code":145875,"language":5297,"meta":20},[5295],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[22,145877,145875],{"__ignoreMap":20},[182,145879,145881],{"id":145880},"_12-python解释器","1.2 Python解释器",[99,145883,145884],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[15,145886,145888],{"className":17,"code":145887,"language":19,"meta":20,"style":20},"python --version\npython3 --version\npython\npython3\n",[22,145889,145890,145896,145902,145907],{"__ignoreMap":20},[25,145891,145892,145894],{"class":27,"line":28},[25,145893,30451],{"class":31},[25,145895,26364],{"class":35},[25,145897,145898,145900],{"class":27,"line":39},[25,145899,100950],{"class":31},[25,145901,26364],{"class":35},[25,145903,145904],{"class":27,"line":51},[25,145905,145906],{"class":31},"python\n",[25,145908,145909],{"class":27,"line":59},[25,145910,145911],{"class":31},"python3\n",[99,145913,145914],{},"进入交互模式后，可以直接输入表达式：",[15,145916,145918],{"className":30449,"code":145917,"language":30451,"meta":20,"style":20},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[22,145919,145920,145931,145936,145950],{"__ignoreMap":20},[25,145921,145922,145925,145927,145929],{"class":27,"line":28},[25,145923,145924],{"class":240},">>>",[25,145926,25225],{"class":35},[25,145928,45637],{"class":240},[25,145930,47794],{"class":35},[25,145932,145933],{"class":27,"line":39},[25,145934,145935],{"class":35},"3\n",[25,145937,145938,145940,145943,145945,145948],{"class":27,"line":51},[25,145939,145924],{"class":240},[25,145941,145942],{"class":35}," print",[25,145944,245],{"class":244},[25,145946,145947],{"class":45},"\"hello python\"",[25,145949,251],{"class":244},[25,145951,145952],{"class":27,"line":59},[25,145953,145954],{"class":244},"hello python\n",[99,145956,145957],{},"退出交互模式：",[15,145959,145961],{"className":30449,"code":145960,"language":30451,"meta":20,"style":20},"exit()\n",[22,145962,145963],{"__ignoreMap":20},[25,145964,145965,145968],{"class":27,"line":28},[25,145966,145967],{"class":35},"exit",[25,145969,2086],{"class":244},[99,145971,145972],{},"或使用快捷键：",[15,145974,145977],{"className":145975,"code":145976,"language":5297,"meta":20},[5295],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[22,145978,145976],{"__ignoreMap":20},[182,145980,145982],{"id":145981},"_13-安装python","1.3 安装Python",[210,145984,145986],{"id":145985},"_131-windows安装","1.3.1 Windows安装",[194,145988,145989,145996,145999,146005,146011],{},[106,145990,145991,145992],{},"打开 Python 官网：",[481,145993,145994],{"href":145994,"rel":145995},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23973],[106,145997,145998],{},"下载 Windows Installer。",[106,146000,146001,146002,28456],{},"安装时勾选 ",[22,146003,146004],{},"Add Python to PATH",[106,146006,146007,146008,28456],{},"点击 ",[22,146009,146010],{},"Install Now",[106,146012,146013],{},"安装完成后打开命令提示符验证：",[15,146015,146017],{"className":17,"code":146016,"language":19,"meta":20,"style":20},"python --version\npip --version\n",[22,146018,146019,146025],{"__ignoreMap":20},[25,146020,146021,146023],{"class":27,"line":28},[25,146022,30451],{"class":31},[25,146024,26364],{"class":35},[25,146026,146027,146029],{"class":27,"line":39},[25,146028,23939],{"class":31},[25,146030,26364],{"class":35},[99,146032,146033,146034,146037],{},"如果提示 ",[22,146035,146036],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[210,146039,146041],{"id":146040},"_132-macos安装","1.3.2 macOS安装",[99,146043,146044],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[15,146046,146048],{"className":17,"code":146047,"language":19,"meta":20,"style":20},"brew install python\npython3 --version\npip3 --version\n",[22,146049,146050,146059,146065],{"__ignoreMap":20},[25,146051,146052,146055,146057],{"class":27,"line":28},[25,146053,146054],{"class":31},"brew",[25,146056,23942],{"class":45},[25,146058,124389],{"class":45},[25,146060,146061,146063],{"class":27,"line":39},[25,146062,100950],{"class":31},[25,146064,26364],{"class":35},[25,146066,146067,146069],{"class":27,"line":51},[25,146068,119771],{"class":31},[25,146070,26364],{"class":35},[99,146072,146073],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[210,146075,146077],{"id":146076},"_133-linux安装","1.3.3 Linux安装",[99,146079,146080],{},"Ubuntu\u002FDebian：",[15,146082,146084],{"className":17,"code":146083,"language":19,"meta":20,"style":20},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[22,146085,146086,146094,146109,146115],{"__ignoreMap":20},[25,146087,146088,146090,146092],{"class":27,"line":28},[25,146089,24684],{"class":31},[25,146091,117388],{"class":45},[25,146093,26313],{"class":45},[25,146095,146096,146098,146100,146102,146104,146106],{"class":27,"line":39},[25,146097,24684],{"class":31},[25,146099,117388],{"class":45},[25,146101,23942],{"class":45},[25,146103,104474],{"class":45},[25,146105,100869],{"class":45},[25,146107,146108],{"class":45}," python3-venv\n",[25,146110,146111,146113],{"class":27,"line":51},[25,146112,100950],{"class":31},[25,146114,26364],{"class":35},[25,146116,146117,146119],{"class":27,"line":59},[25,146118,119771],{"class":31},[25,146120,26364],{"class":35},[99,146122,146123],{},"Fedora：",[15,146125,146127],{"className":17,"code":146126,"language":19,"meta":20,"style":20},"sudo dnf install python3 python3-pip\n",[22,146128,146129],{"__ignoreMap":20},[25,146130,146131,146133,146135,146137,146139],{"class":27,"line":28},[25,146132,24684],{"class":31},[25,146134,26386],{"class":45},[25,146136,23942],{"class":45},[25,146138,104474],{"class":45},[25,146140,119836],{"class":45},[99,146142,146143,146144,146146],{},"Linux 上通常使用 ",[22,146145,100950],{}," 命令，避免和系统旧版本 Python 冲突。",[182,146148,146150],{"id":146149},"_14-pip包管理器","1.4 pip包管理器",[99,146152,146153,146155],{},[22,146154,23939],{}," 用来安装第三方库。",[15,146157,146159],{"className":17,"code":146158,"language":19,"meta":20,"style":20},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[22,146160,146161,146170,146179,146187,146193],{"__ignoreMap":20},[25,146162,146163,146165,146167],{"class":27,"line":28},[25,146164,23939],{"class":31},[25,146166,23942],{"class":45},[25,146168,146169],{"class":45}," requests\n",[25,146171,146172,146174,146177],{"class":27,"line":39},[25,146173,23939],{"class":31},[25,146175,146176],{"class":45}," uninstall",[25,146178,146169],{"class":45},[25,146180,146181,146183,146185],{"class":27,"line":51},[25,146182,23939],{"class":31},[25,146184,117645],{"class":45},[25,146186,146169],{"class":45},[25,146188,146189,146191],{"class":27,"line":59},[25,146190,23939],{"class":31},[25,146192,119026],{"class":45},[25,146194,146195,146197],{"class":27,"line":67},[25,146196,23939],{"class":31},[25,146198,146199],{"class":45}," freeze\n",[99,146201,146202],{},"国内网络较慢时可以临时使用镜像：",[15,146204,146206],{"className":17,"code":146205,"language":19,"meta":20,"style":20},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[22,146207,146208],{"__ignoreMap":20},[25,146209,146210,146212,146214,146217,146219],{"class":27,"line":28},[25,146211,23939],{"class":31},[25,146213,23942],{"class":45},[25,146215,146216],{"class":45}," requests",[25,146218,26501],{"class":35},[25,146220,119799],{"class":45},[99,146222,146223],{},"常见第三方库：",[380,146225,146226,146235],{},[383,146227,146228],{},[386,146229,146230,146233],{},[389,146231,146232],{},"库",[389,146234,102767],{},[427,146236,146237,146245,146252,146260,146268,146276,146284],{},[386,146238,146239,146242],{},[432,146240,146241],{},"requests",[432,146243,146244],{},"网络请求",[386,146246,146247,146249],{},[432,146248,100697],{},[432,146250,146251],{},"数值计算",[386,146253,146254,146257],{},[432,146255,146256],{},"pandas",[432,146258,146259],{},"表格数据处理",[386,146261,146262,146265],{},[432,146263,146264],{},"matplotlib",[432,146266,146267],{},"绘图",[386,146269,146270,146273],{},[432,146271,146272],{},"pyecharts",[432,146274,146275],{},"ECharts 图表",[386,146277,146278,146281],{},[432,146279,146280],{},"flask",[432,146282,146283],{},"Web 后端",[386,146285,146286,146289],{},[432,146287,146288],{},"pytest",[432,146290,146291],{},"自动化测试",[182,146293,146295],{"id":146294},"_15-虚拟环境","1.5 虚拟环境",[99,146297,146298,146299,146302],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[22,146300,146301],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[99,146304,146305],{},"创建虚拟环境：",[15,146307,146309],{"className":17,"code":146308,"language":19,"meta":20,"style":20},"python -m venv .venv\n",[22,146310,146311],{"__ignoreMap":20},[25,146312,146313,146315,146317,146319],{"class":27,"line":28},[25,146314,30451],{"class":31},[25,146316,100953],{"class":35},[25,146318,100956],{"class":45},[25,146320,100959],{"class":45},[99,146322,146323],{},"Windows 激活：",[15,146325,146327],{"className":17,"code":146326,"language":19,"meta":20,"style":20},".venv\\Scripts\\activate\n",[22,146328,146329],{"__ignoreMap":20},[25,146330,146331],{"class":27,"line":28},[25,146332,146326],{"class":31},[99,146334,146335],{},"macOS\u002FLinux 激活：",[15,146337,146339],{"className":17,"code":146338,"language":19,"meta":20,"style":20},"source .venv\u002Fbin\u002Factivate\n",[22,146340,146341],{"__ignoreMap":20},[25,146342,146343,146345],{"class":27,"line":28},[25,146344,100964],{"class":35},[25,146346,100967],{"class":45},[99,146348,146349],{},"退出虚拟环境：",[15,146351,146353],{"className":17,"code":146352,"language":19,"meta":20,"style":20},"deactivate\n",[22,146354,146355],{"__ignoreMap":20},[25,146356,146357],{"class":27,"line":28},[25,146358,146352],{"class":31},[99,146360,146361],{},"保存依赖：",[15,146363,146365],{"className":17,"code":146364,"language":19,"meta":20,"style":20},"pip freeze > requirements.txt\n",[22,146366,146367],{"__ignoreMap":20},[25,146368,146369,146371,146374,146376],{"class":27,"line":28},[25,146370,23939],{"class":31},[25,146372,146373],{"class":45}," freeze",[25,146375,26293],{"class":240},[25,146377,146378],{"class":45}," requirements.txt\n",[99,146380,146381],{},"安装依赖：",[15,146383,146385],{"className":17,"code":146384,"language":19,"meta":20,"style":20},"pip install -r requirements.txt\n",[22,146386,146387],{"__ignoreMap":20},[25,146388,146389,146391,146393,146395],{"class":27,"line":28},[25,146390,23939],{"class":31},[25,146392,23942],{"class":45},[25,146394,119710],{"class":35},[25,146396,146378],{"class":45},[182,146398,146400],{"id":146399},"_16-开发工具","1.6 开发工具",[210,146402,146404],{"id":146403},"_161-pycharm","1.6.1 PyCharm",[99,146406,146407],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[99,146409,122133],{},[194,146411,146412,146415,146418,146424,146427],{},[106,146413,146414],{},"New Project：创建项目。",[106,146416,146417],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[106,146419,146420,146421,126054],{},"New Python File：创建 ",[22,146422,146423],{},".py",[106,146425,146426],{},"Run：运行当前文件。",[106,146428,146429],{},"Debug：断点调试。",[210,146431,146433],{"id":146432},"_162-vs-code","1.6.2 VS Code",[99,146435,146436],{},"VS Code 轻量，适合后续多语言开发。",[99,146438,146439],{},"建议安装插件：",[194,146441,146442,146445,146448],{},[106,146443,146444],{},"Python。",[106,146446,146447],{},"Pylance。",[106,146449,146450],{},"Jupyter。",[99,146452,146453],{},"选择解释器：",[15,146455,146458],{"className":146456,"code":146457,"language":5297,"meta":20},[5295],"Ctrl + Shift + P -> Python: Select Interpreter\n",[22,146459,146457],{"__ignoreMap":20},[182,146461,146463],{"id":146462},"_17-第一个python程序","1.7 第一个Python程序",[99,146465,146466,146467,24726],{},"创建文件 ",[22,146468,146469],{},"hello.py",[15,146471,146473],{"className":30449,"code":146472,"language":30451,"meta":20,"style":20},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[22,146474,146475,146486],{"__ignoreMap":20},[25,146476,146477,146479,146481,146484],{"class":27,"line":28},[25,146478,30486],{"class":35},[25,146480,245],{"class":244},[25,146482,146483],{"class":45},"\"Hello World\"",[25,146485,251],{"class":244},[25,146487,146488,146490,146492,146495],{"class":27,"line":39},[25,146489,30486],{"class":35},[25,146491,245],{"class":244},[25,146493,146494],{"class":45},"\"你好，Python\"",[25,146496,251],{"class":244},[99,146498,146499],{},"在终端运行：",[15,146501,146503],{"className":17,"code":146502,"language":19,"meta":20,"style":20},"python hello.py\n",[22,146504,146505],{"__ignoreMap":20},[25,146506,146507,146509],{"class":27,"line":28},[25,146508,30451],{"class":31},[25,146510,146511],{"class":45}," hello.py\n",[99,146513,146514],{},"或：",[15,146516,146518],{"className":17,"code":146517,"language":19,"meta":20,"style":20},"python3 hello.py\n",[22,146519,146520],{"__ignoreMap":20},[25,146521,146522,146524],{"class":27,"line":28},[25,146523,100950],{"class":31},[25,146525,146511],{"class":45},[99,146527,146528],{},"输出：",[15,146530,146533],{"className":146531,"code":146532,"language":5297,"meta":20},[5295],"Hello World\n你好，Python\n",[22,146534,146532],{"__ignoreMap":20},[182,146536,146538],{"id":146537},"_18-print函数","1.8 print函数",[99,146540,146541,146544],{},[22,146542,146543],{},"print()"," 用来输出内容。",[15,146546,146548],{"className":30449,"code":146547,"language":30451,"meta":20,"style":20},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[22,146549,146550,146560,146570,146580],{"__ignoreMap":20},[25,146551,146552,146554,146556,146558],{"class":27,"line":28},[25,146553,30486],{"class":35},[25,146555,245],{"class":244},[25,146557,5954],{"class":45},[25,146559,251],{"class":244},[25,146561,146562,146564,146566,146568],{"class":27,"line":39},[25,146563,30486],{"class":35},[25,146565,245],{"class":244},[25,146567,554],{"class":35},[25,146569,251],{"class":244},[25,146571,146572,146574,146576,146578],{"class":27,"line":51},[25,146573,30486],{"class":35},[25,146575,245],{"class":244},[25,146577,293],{"class":35},[25,146579,251],{"class":244},[25,146581,146582,146584,146586,146589,146591,146593],{"class":27,"line":59},[25,146583,30486],{"class":35},[25,146585,245],{"class":244},[25,146587,146588],{"class":45},"\"年龄:\"",[25,146590,12545],{"class":244},[25,146592,893],{"class":35},[25,146594,251],{"class":244},[99,146596,146597],{},"多个内容用逗号隔开，默认中间加空格：",[15,146599,146601],{"className":30449,"code":146600,"language":30451,"meta":20,"style":20},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[22,146602,146603,146613,146623],{"__ignoreMap":20},[25,146604,146605,146608,146610],{"class":27,"line":28},[25,146606,146607],{"class":244},"name ",[25,146609,290],{"class":240},[25,146611,146612],{"class":45}," \"张三\"\n",[25,146614,146615,146618,146620],{"class":27,"line":39},[25,146616,146617],{"class":244},"age ",[25,146619,290],{"class":240},[25,146621,146622],{"class":35}," 18\n",[25,146624,146625,146627,146629,146632,146635,146637],{"class":27,"line":51},[25,146626,30486],{"class":35},[25,146628,245],{"class":244},[25,146630,146631],{"class":45},"\"姓名:\"",[25,146633,146634],{"class":244},", name, ",[25,146636,146588],{"class":45},[25,146638,146639],{"class":244},", age)\n",[99,146641,146642],{},"修改分隔符：",[15,146644,146646],{"className":30449,"code":146645,"language":30451,"meta":20,"style":20},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[22,146647,146648],{"__ignoreMap":20},[25,146649,146650,146652,146654,146657,146659,146661,146663,146665,146667,146670,146672,146674],{"class":27,"line":28},[25,146651,30486],{"class":35},[25,146653,245],{"class":244},[25,146655,146656],{"class":45},"\"2024\"",[25,146658,12545],{"class":244},[25,146660,54387],{"class":45},[25,146662,12545],{"class":244},[25,146664,54387],{"class":45},[25,146666,12545],{"class":244},[25,146668,146669],{"class":5326},"sep",[25,146671,290],{"class":240},[25,146673,32554],{"class":45},[25,146675,251],{"class":244},[99,146677,146678],{},"修改结尾符：",[15,146680,146682],{"className":30449,"code":146681,"language":30451,"meta":20,"style":20},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[22,146683,146684,146702],{"__ignoreMap":20},[25,146685,146686,146688,146690,146692,146694,146696,146698,146700],{"class":27,"line":28},[25,146687,30486],{"class":35},[25,146689,245],{"class":244},[25,146691,5954],{"class":45},[25,146693,12545],{"class":244},[25,146695,45872],{"class":5326},[25,146697,290],{"class":240},[25,146699,4469],{"class":45},[25,146701,251],{"class":244},[25,146703,146704,146706,146708,146711],{"class":27,"line":39},[25,146705,30486],{"class":35},[25,146707,245],{"class":244},[25,146709,146710],{"class":45},"\"python\"",[25,146712,251],{"class":244},[182,146714,146716],{"id":146715},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[99,146718,146719],{},"交互运行适合临时验证：",[15,146721,146723],{"className":30449,"code":146722,"language":30451,"meta":20,"style":20},">>> 10 * 3\n30\n",[22,146724,146725,146735],{"__ignoreMap":20},[25,146726,146727,146729,146731,146733],{"class":27,"line":28},[25,146728,145924],{"class":240},[25,146730,2148],{"class":35},[25,146732,6628],{"class":240},[25,146734,120107],{"class":35},[25,146736,146737],{"class":27,"line":39},[25,146738,146739],{"class":35},"30\n",[99,146741,146742],{},"脚本运行适合保存程序：",[15,146744,146746],{"className":30449,"code":146745,"language":30451,"meta":20,"style":20},"price = 8\ncount = 5\nprint(price * count)\n",[22,146747,146748,146758,146767],{"__ignoreMap":20},[25,146749,146750,146753,146755],{"class":27,"line":28},[25,146751,146752],{"class":244},"price ",[25,146754,290],{"class":240},[25,146756,146757],{"class":35}," 8\n",[25,146759,146760,146763,146765],{"class":27,"line":39},[25,146761,146762],{"class":244},"count ",[25,146764,290],{"class":240},[25,146766,54498],{"class":35},[25,146768,146769,146771,146774,146776],{"class":27,"line":51},[25,146770,30486],{"class":35},[25,146772,146773],{"class":244},"(price ",[25,146775,698],{"class":240},[25,146777,146778],{"class":244}," count)\n",[99,146780,146781],{},"实际学习中推荐：",[194,146783,146784,146787,146792],{},[106,146785,146786],{},"临时试一个语法，用交互模式。",[106,146788,146789,146790,126054],{},"写完整练习，用 ",[22,146791,146423],{},[106,146793,146794],{},"写项目，用独立目录和虚拟环境。",[182,146796,146798],{"id":146797},"_110-常见错误","1.10 常见错误",[210,146800,146802],{"id":146801},"_1101-命令找不到","1.10.1 命令找不到",[15,146804,146807],{"className":146805,"code":146806,"language":5297,"meta":20},[5295],"python: command not found\n",[22,146808,146806],{"__ignoreMap":20},[99,146810,146811],{},"原因：",[194,146813,146814,146817,146820],{},[106,146815,146816],{},"没安装 Python。",[106,146818,146819],{},"PATH 没配置。",[106,146821,146822,146823,28456],{},"Linux\u002FmacOS 应该使用 ",[22,146824,100950],{},[210,146826,146828],{"id":146827},"_1102-文件名冲突","1.10.2 文件名冲突",[99,146830,146831],{},"不要把文件命名为：",[15,146833,146836],{"className":146834,"code":146835,"language":5297,"meta":20},[5295],"random.py\njson.py\ntime.py\nrequests.py\n",[22,146837,146835],{"__ignoreMap":20},[99,146839,146840],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[210,146842,146844],{"id":146843},"_1103-中文乱码","1.10.3 中文乱码",[99,146846,146847],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[99,146849,146850],{},"如果读写文件出现乱码，要明确指定编码：",[15,146852,146854],{"className":30449,"code":146853,"language":30451,"meta":20,"style":20},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[22,146855,146856,146890],{"__ignoreMap":20},[25,146857,146858,146860,146863,146865,146868,146870,146873,146875,146878,146880,146883,146885,146887],{"class":27,"line":28},[25,146859,107904],{"class":240},[25,146861,146862],{"class":35}," open",[25,146864,245],{"class":244},[25,146866,146867],{"class":45},"\"data.txt\"",[25,146869,12545],{"class":244},[25,146871,146872],{"class":45},"\"r\"",[25,146874,12545],{"class":244},[25,146876,146877],{"class":5326},"encoding",[25,146879,290],{"class":240},[25,146881,146882],{"class":45},"\"utf-8\"",[25,146884,13824],{"class":244},[25,146886,31454],{"class":240},[25,146888,146889],{"class":244}," f:\n",[25,146891,146892,146895,146897],{"class":27,"line":39},[25,146893,146894],{"class":244},"    content ",[25,146896,290],{"class":240},[25,146898,146899],{"class":244}," f.read()\n",[182,146901,146903],{"id":146902},"_111-本章练习","1.11 本章练习",[194,146905,146906,146909,146915],{},[106,146907,146908],{},"安装 Python，并在终端输出版本号。",[106,146910,146911,146912,146914],{},"新建 ",[22,146913,146469],{},"，输出自己的姓名、年龄、学习目标。",[106,146916,104437,146917,146919],{},[22,146918,146543],{}," 输出下面格式：",[15,146921,146924],{"className":146922,"code":146923,"language":5297,"meta":20},[5295],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[22,146925,146923],{"__ignoreMap":20},[194,146927,146928],{"start":59},[106,146929,104437,146930,146932],{},[22,146931,146669],{}," 输出日期：",[15,146934,146937],{"className":146935,"code":146936,"language":5297,"meta":20},[5295],"2024-10-10\n",[22,146938,146936],{"__ignoreMap":20},[194,146940,146941],{"start":67},[106,146942,104437,146943,146945,146946,146948],{},[22,146944,45872],{}," 让两次 ",[22,146947,146543],{}," 输出在同一行。",[159,146950,146951],{},"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":20,"searchDepth":39,"depth":39,"links":146953},[146954,146955,146956,146961,146962,146963,146967,146968,146969,146970,146975],{"id":145836,"depth":39,"text":145837},{"id":145880,"depth":39,"text":145881},{"id":145981,"depth":39,"text":145982,"children":146957},[146958,146959,146960],{"id":145985,"depth":51,"text":145986},{"id":146040,"depth":51,"text":146041},{"id":146076,"depth":51,"text":146077},{"id":146149,"depth":39,"text":146150},{"id":146294,"depth":39,"text":146295},{"id":146399,"depth":39,"text":146400,"children":146964},[146965,146966],{"id":146403,"depth":51,"text":146404},{"id":146432,"depth":51,"text":146433},{"id":146462,"depth":39,"text":146463},{"id":146537,"depth":39,"text":146538},{"id":146715,"depth":39,"text":146716},{"id":146797,"depth":39,"text":146798,"children":146971},[146972,146973,146974],{"id":146801,"depth":51,"text":146802},{"id":146827,"depth":51,"text":146828},{"id":146843,"depth":51,"text":146844},{"id":146902,"depth":39,"text":146903},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145828,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146982,"title":146983,"body":146984,"description":164,"extension":165,"meta":149388,"navigation":167,"path":149389,"seo":149390,"stem":149391,"__hash__":149392},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146985,"toc":149373},[146986,146989,146993,146996,146999,147016,147019,147061,147064,147068,147071,147074,147111,147114,147148,147151,147243,147247,147261,147264,147291,147294,147298,147401,147408,147411,147428,147432,147439,147628,147631,147704,147708,147711,147795,147798,147830,147834,148038,148041,148045,148051,148153,148156,148412,148416,148419,148422,148436,148438,148624,148628,148990,148996,149000,149003,149127,149130,149309,149312,149316,149349,149353,149370],[10,146987,146983],{"id":146988},"_10-json与pyecharts折线图",[182,146990,146992],{"id":146991},"_101-数据可视化","10.1 数据可视化",[99,146994,146995],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[99,146997,146998],{},"常见图表：",[194,147000,147001,147004,147007,147010,147013],{},[106,147002,147003],{},"折线图：看趋势。",[106,147005,147006],{},"柱状图：看分类对比。",[106,147008,147009],{},"饼图：看占比。",[106,147011,147012],{},"地图：看地域分布。",[106,147014,147015],{},"散点图：看两个变量之间的关系。",[99,147017,147018],{},"Python 可视化常用库：",[380,147020,147021,147029],{},[383,147022,147023],{},[386,147024,147025,147027],{},[389,147026,146232],{},[389,147028,23850],{},[427,147030,147031,147038,147046,147053],{},[386,147032,147033,147035],{},[432,147034,146264],{},[432,147036,147037],{},"基础、经典、可定制",[386,147039,147040,147043],{},[432,147041,147042],{},"seaborn",[432,147044,147045],{},"统计图表更美观",[386,147047,147048,147050],{},[432,147049,146272],{},[432,147051,147052],{},"生成交互式网页图表",[386,147054,147055,147058],{},[432,147056,147057],{},"plotly",[432,147059,147060],{},"交互图表能力强",[99,147062,147063],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[182,147065,147067],{"id":147066},"_102-json回顾","10.2 JSON回顾",[99,147069,147070],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[99,147072,147073],{},"Python 字典：",[15,147075,147077],{"className":30449,"code":147076,"language":30451,"meta":20,"style":20},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[22,147078,147079,147087,147098,147107],{"__ignoreMap":20},[25,147080,147081,147083,147085],{"class":27,"line":28},[25,147082,101729],{"class":244},[25,147084,290],{"class":240},[25,147086,15682],{"class":244},[25,147088,147089,147092,147094,147096],{"class":27,"line":39},[25,147090,147091],{"class":45},"    \"name\"",[25,147093,51508],{"class":244},[25,147095,69340],{"class":45},[25,147097,31537],{"class":244},[25,147099,147100,147103,147105],{"class":27,"line":51},[25,147101,147102],{"class":45},"    \"value\"",[25,147104,51508],{"class":244},[25,147106,97529],{"class":35},[25,147108,147109],{"class":27,"line":59},[25,147110,1676],{"class":244},[99,147112,147113],{},"JSON 字符串：",[15,147115,147118],{"className":147116,"code":147117,"language":145863,"meta":20,"style":20},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[22,147119,147120,147124,147135,147144],{"__ignoreMap":20},[25,147121,147122],{"class":27,"line":28},[25,147123,1657],{"class":244},[25,147125,147126,147129,147131,147133],{"class":27,"line":39},[25,147127,147128],{"class":35},"  \"name\"",[25,147130,51508],{"class":244},[25,147132,69340],{"class":45},[25,147134,31537],{"class":244},[25,147136,147137,147140,147142],{"class":27,"line":51},[25,147138,147139],{"class":35},"  \"value\"",[25,147141,51508],{"class":244},[25,147143,97529],{"class":35},[25,147145,147146],{"class":27,"line":59},[25,147147,1676],{"class":244},[99,147149,147150],{},"Python 与 JSON 的转换：",[15,147152,147154],{"className":30449,"code":147153,"language":30451,"meta":20,"style":20},"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",[22,147155,147156,147163,147167,147192,147196,147215,147222,147226,147236],{"__ignoreMap":20},[25,147157,147158,147160],{"class":27,"line":28},[25,147159,30463],{"class":240},[25,147161,147162],{"class":244}," json\n",[25,147164,147165],{"class":27,"line":39},[25,147166,2510],{"emptyLinePlaceholder":167},[25,147168,147169,147171,147173,147175,147177,147179,147181,147183,147186,147188,147190],{"class":27,"line":51},[25,147170,101729],{"class":244},[25,147172,290],{"class":240},[25,147174,4558],{"class":244},[25,147176,62750],{"class":45},[25,147178,51508],{"class":244},[25,147180,69340],{"class":45},[25,147182,12545],{"class":244},[25,147184,147185],{"class":45},"\"value\"",[25,147187,51508],{"class":244},[25,147189,554],{"class":35},[25,147191,1676],{"class":244},[25,147193,147194],{"class":27,"line":59},[25,147195,2510],{"emptyLinePlaceholder":167},[25,147197,147198,147201,147203,147206,147209,147211,147213],{"class":27,"line":67},[25,147199,147200],{"class":244},"json_text ",[25,147202,290],{"class":240},[25,147204,147205],{"class":244}," json.dumps(data, ",[25,147207,147208],{"class":5326},"ensure_ascii",[25,147210,290],{"class":240},[25,147212,34058],{"class":35},[25,147214,251],{"class":244},[25,147216,147217,147219],{"class":27,"line":75},[25,147218,30486],{"class":35},[25,147220,147221],{"class":244},"(json_text)\n",[25,147223,147224],{"class":27,"line":83},[25,147225,2510],{"emptyLinePlaceholder":167},[25,147227,147228,147231,147233],{"class":27,"line":91},[25,147229,147230],{"class":244},"new_data ",[25,147232,290],{"class":240},[25,147234,147235],{"class":244}," json.loads(json_text)\n",[25,147237,147238,147240],{"class":27,"line":1429},[25,147239,30486],{"class":35},[25,147241,147242],{"class":244},"(new_data)\n",[182,147244,147246],{"id":147245},"_103-安装pyecharts","10.3 安装pyecharts",[15,147248,147250],{"className":17,"code":147249,"language":19,"meta":20,"style":20},"pip install pyecharts\n",[22,147251,147252],{"__ignoreMap":20},[25,147253,147254,147256,147258],{"class":27,"line":28},[25,147255,23939],{"class":31},[25,147257,23942],{"class":45},[25,147259,147260],{"class":45}," pyecharts\n",[99,147262,147263],{},"验证：",[15,147265,147267],{"className":30449,"code":147266,"language":30451,"meta":20,"style":20},"import pyecharts\n\nprint(pyecharts.__version__)\n",[22,147268,147269,147275,147279],{"__ignoreMap":20},[25,147270,147271,147273],{"class":27,"line":28},[25,147272,30463],{"class":240},[25,147274,147260],{"class":244},[25,147276,147277],{"class":27,"line":39},[25,147278,2510],{"emptyLinePlaceholder":167},[25,147280,147281,147283,147286,147289],{"class":27,"line":51},[25,147282,30486],{"class":35},[25,147284,147285],{"class":244},"(pyecharts.",[25,147287,147288],{"class":35},"__version__",[25,147290,251],{"class":244},[99,147292,147293],{},"如果使用虚拟环境，要先激活环境再安装。",[182,147295,147297],{"id":147296},"_104-第一个折线图","10.4 第一个折线图",[15,147299,147301],{"className":30449,"code":147300,"language":30451,"meta":20,"style":20},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[22,147302,147303,147315,147319,147329,147359,147391],{"__ignoreMap":20},[25,147304,147305,147307,147310,147312],{"class":27,"line":28},[25,147306,30808],{"class":240},[25,147308,147309],{"class":244}," pyecharts.charts ",[25,147311,30463],{"class":240},[25,147313,147314],{"class":244}," Line\n",[25,147316,147317],{"class":27,"line":39},[25,147318,2510],{"emptyLinePlaceholder":167},[25,147320,147321,147324,147326],{"class":27,"line":51},[25,147322,147323],{"class":244},"line ",[25,147325,290],{"class":240},[25,147327,147328],{"class":244}," Line()\n",[25,147330,147331,147334,147337,147339,147342,147344,147347,147349,147352,147354,147357],{"class":27,"line":59},[25,147332,147333],{"class":244},"line.add_xaxis([",[25,147335,147336],{"class":45},"\"周一\"",[25,147338,12545],{"class":244},[25,147340,147341],{"class":45},"\"周二\"",[25,147343,12545],{"class":244},[25,147345,147346],{"class":45},"\"周三\"",[25,147348,12545],{"class":244},[25,147350,147351],{"class":45},"\"周四\"",[25,147353,12545],{"class":244},[25,147355,147356],{"class":45},"\"周五\"",[25,147358,4767],{"class":244},[25,147360,147361,147364,147367,147369,147371,147373,147375,147377,147379,147381,147384,147386,147389],{"class":27,"line":67},[25,147362,147363],{"class":244},"line.add_yaxis(",[25,147365,147366],{"class":45},"\"销售额\"",[25,147368,77589],{"class":244},[25,147370,554],{"class":35},[25,147372,12545],{"class":244},[25,147374,1060],{"class":35},[25,147376,12545],{"class":244},[25,147378,1105],{"class":35},[25,147380,12545],{"class":244},[25,147382,147383],{"class":35},"150",[25,147385,12545],{"class":244},[25,147387,147388],{"class":35},"180",[25,147390,4767],{"class":244},[25,147392,147393,147396,147399],{"class":27,"line":75},[25,147394,147395],{"class":244},"line.render(",[25,147397,147398],{"class":45},"\"line.html\"",[25,147400,251],{"class":244},[99,147402,147403,147404,147407],{},"运行后会生成 ",[22,147405,147406],{},"line.html","，用浏览器打开即可看到图表。",[99,147409,147410],{},"核心步骤：",[194,147412,147413,147416,147419,147422,147425],{},[106,147414,147415],{},"导入图表类。",[106,147417,147418],{},"创建图表对象。",[106,147420,147421],{},"添加 x 轴数据。",[106,147423,147424],{},"添加 y 轴数据。",[106,147426,147427],{},"渲染为 HTML。",[182,147429,147431],{"id":147430},"_105-全局配置","10.5 全局配置",[99,147433,147434,147435,147438],{},"常用配置在 ",[22,147436,147437],{},"pyecharts.options"," 中。",[15,147440,147442],{"className":30449,"code":147441,"language":30451,"meta":20,"style":20},"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",[22,147443,147444,147461,147471,147475,147483,147507,147535,147540,147559,147578,147596,147616,147620],{"__ignoreMap":20},[25,147445,147446,147448,147451,147453,147456,147458],{"class":27,"line":28},[25,147447,30808],{"class":240},[25,147449,147450],{"class":244}," pyecharts ",[25,147452,30463],{"class":240},[25,147454,147455],{"class":244}," options ",[25,147457,31454],{"class":240},[25,147459,147460],{"class":244}," opts\n",[25,147462,147463,147465,147467,147469],{"class":27,"line":39},[25,147464,30808],{"class":240},[25,147466,147309],{"class":244},[25,147468,30463],{"class":240},[25,147470,147314],{"class":244},[25,147472,147473],{"class":27,"line":51},[25,147474,2510],{"emptyLinePlaceholder":167},[25,147476,147477,147479,147481],{"class":27,"line":59},[25,147478,147323],{"class":244},[25,147480,290],{"class":240},[25,147482,147328],{"class":244},[25,147484,147485,147487,147489,147491,147493,147495,147497,147499,147501,147503,147505],{"class":27,"line":67},[25,147486,147333],{"class":244},[25,147488,147336],{"class":45},[25,147490,12545],{"class":244},[25,147492,147341],{"class":45},[25,147494,12545],{"class":244},[25,147496,147346],{"class":45},[25,147498,12545],{"class":244},[25,147500,147351],{"class":45},[25,147502,12545],{"class":244},[25,147504,147356],{"class":45},[25,147506,4767],{"class":244},[25,147508,147509,147511,147513,147515,147517,147519,147521,147523,147525,147527,147529,147531,147533],{"class":27,"line":75},[25,147510,147363],{"class":244},[25,147512,147366],{"class":45},[25,147514,77589],{"class":244},[25,147516,554],{"class":35},[25,147518,12545],{"class":244},[25,147520,1060],{"class":35},[25,147522,12545],{"class":244},[25,147524,1105],{"class":35},[25,147526,12545],{"class":244},[25,147528,147383],{"class":35},[25,147530,12545],{"class":244},[25,147532,147388],{"class":35},[25,147534,4767],{"class":244},[25,147536,147537],{"class":27,"line":83},[25,147538,147539],{"class":244},"line.set_global_opts(\n",[25,147541,147542,147545,147547,147550,147552,147554,147557],{"class":27,"line":91},[25,147543,147544],{"class":5326},"    title_opts",[25,147546,290],{"class":240},[25,147548,147549],{"class":244},"opts.TitleOpts(",[25,147551,51478],{"class":5326},[25,147553,290],{"class":240},[25,147555,147556],{"class":45},"\"一周销售额\"",[25,147558,38118],{"class":244},[25,147560,147561,147564,147566,147569,147571,147573,147576],{"class":27,"line":1429},[25,147562,147563],{"class":5326},"    xaxis_opts",[25,147565,290],{"class":240},[25,147567,147568],{"class":244},"opts.AxisOpts(",[25,147570,79881],{"class":5326},[25,147572,290],{"class":240},[25,147574,147575],{"class":45},"\"日期\"",[25,147577,38118],{"class":244},[25,147579,147580,147583,147585,147587,147589,147591,147594],{"class":27,"line":1441},[25,147581,147582],{"class":5326},"    yaxis_opts",[25,147584,290],{"class":240},[25,147586,147568],{"class":244},[25,147588,79881],{"class":5326},[25,147590,290],{"class":240},[25,147592,147593],{"class":45},"\"金额\"",[25,147595,38118],{"class":244},[25,147597,147598,147601,147603,147606,147609,147611,147614],{"class":27,"line":1723},[25,147599,147600],{"class":5326},"    tooltip_opts",[25,147602,290],{"class":240},[25,147604,147605],{"class":244},"opts.TooltipOpts(",[25,147607,147608],{"class":5326},"trigger",[25,147610,290],{"class":240},[25,147612,147613],{"class":45},"\"axis\"",[25,147615,38118],{"class":244},[25,147617,147618],{"class":27,"line":1728},[25,147619,251],{"class":244},[25,147621,147622,147624,147626],{"class":27,"line":1734},[25,147623,147395],{"class":244},[25,147625,147398],{"class":45},[25,147627,251],{"class":244},[99,147629,147630],{},"常见全局配置：",[380,147632,147633,147642],{},[383,147634,147635],{},[386,147636,147637,147640],{},[389,147638,147639],{},"配置",[389,147641,102767],{},[427,147643,147644,147654,147664,147674,147684,147694],{},[386,147645,147646,147651],{},[432,147647,147648],{},[22,147649,147650],{},"TitleOpts",[432,147652,147653],{},"标题",[386,147655,147656,147661],{},[432,147657,147658],{},[22,147659,147660],{},"LegendOpts",[432,147662,147663],{},"图例",[386,147665,147666,147671],{},[432,147667,147668],{},[22,147669,147670],{},"TooltipOpts",[432,147672,147673],{},"提示框",[386,147675,147676,147681],{},[432,147677,147678],{},[22,147679,147680],{},"AxisOpts",[432,147682,147683],{},"坐标轴",[386,147685,147686,147691],{},[432,147687,147688],{},[22,147689,147690],{},"VisualMapOpts",[432,147692,147693],{},"视觉映射",[386,147695,147696,147701],{},[432,147697,147698],{},[22,147699,147700],{},"DataZoomOpts",[432,147702,147703],{},"区域缩放",[182,147705,147707],{"id":147706},"_106-系列配置","10.6 系列配置",[99,147709,147710],{},"系列配置作用于某一组数据。",[15,147712,147714],{"className":30449,"code":147713,"language":30451,"meta":20,"style":20},"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",[22,147715,147716,147721,147732,147761,147772,147791],{"__ignoreMap":20},[25,147717,147718],{"class":27,"line":28},[25,147719,147720],{"class":244},"line.add_yaxis(\n",[25,147722,147723,147726,147728,147730],{"class":27,"line":39},[25,147724,147725],{"class":5326},"    series_name",[25,147727,290],{"class":240},[25,147729,147366],{"class":45},[25,147731,31537],{"class":244},[25,147733,147734,147737,147739,147741,147743,147745,147747,147749,147751,147753,147755,147757,147759],{"class":27,"line":51},[25,147735,147736],{"class":5326},"    y_axis",[25,147738,290],{"class":240},[25,147740,1133],{"class":244},[25,147742,554],{"class":35},[25,147744,12545],{"class":244},[25,147746,1060],{"class":35},[25,147748,12545],{"class":244},[25,147750,1105],{"class":35},[25,147752,12545],{"class":244},[25,147754,147383],{"class":35},[25,147756,12545],{"class":244},[25,147758,147388],{"class":35},[25,147760,87907],{"class":244},[25,147762,147763,147766,147768,147770],{"class":27,"line":59},[25,147764,147765],{"class":5326},"    is_smooth",[25,147767,290],{"class":240},[25,147769,31547],{"class":35},[25,147771,31537],{"class":244},[25,147773,147774,147777,147779,147782,147785,147787,147789],{"class":27,"line":67},[25,147775,147776],{"class":5326},"    label_opts",[25,147778,290],{"class":240},[25,147780,147781],{"class":244},"opts.LabelOpts(",[25,147783,147784],{"class":5326},"is_show",[25,147786,290],{"class":240},[25,147788,31547],{"class":35},[25,147790,38118],{"class":244},[25,147792,147793],{"class":27,"line":75},[25,147794,251],{"class":244},[99,147796,147797],{},"常用参数：",[194,147799,147800,147806,147812,147818,147824],{},[106,147801,147802,147805],{},[22,147803,147804],{},"series_name","：系列名称。",[106,147807,147808,147811],{},[22,147809,147810],{},"y_axis","：y 轴数据。",[106,147813,147814,147817],{},[22,147815,147816],{},"is_smooth","：是否平滑曲线。",[106,147819,147820,147823],{},[22,147821,147822],{},"label_opts","：标签配置。",[106,147825,147826,147829],{},[22,147827,147828],{},"symbol_size","：标记点大小。",[182,147831,147833],{"id":147832},"_107-多条折线","10.7 多条折线",[15,147835,147837],{"className":30449,"code":147836,"language":30451,"meta":20,"style":20},"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",[22,147838,147839,147853,147863,147867,147896,147900,147908,147913,147951,147988,147992,148009,148025,148029],{"__ignoreMap":20},[25,147840,147841,147843,147845,147847,147849,147851],{"class":27,"line":28},[25,147842,30808],{"class":240},[25,147844,147450],{"class":244},[25,147846,30463],{"class":240},[25,147848,147455],{"class":244},[25,147850,31454],{"class":240},[25,147852,147460],{"class":244},[25,147854,147855,147857,147859,147861],{"class":27,"line":39},[25,147856,30808],{"class":240},[25,147858,147309],{"class":244},[25,147860,30463],{"class":240},[25,147862,147314],{"class":244},[25,147864,147865],{"class":27,"line":51},[25,147866,2510],{"emptyLinePlaceholder":167},[25,147868,147869,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890,147892,147894],{"class":27,"line":59},[25,147870,147871],{"class":244},"dates ",[25,147873,290],{"class":240},[25,147875,52297],{"class":244},[25,147877,147336],{"class":45},[25,147879,12545],{"class":244},[25,147881,147341],{"class":45},[25,147883,12545],{"class":244},[25,147885,147346],{"class":45},[25,147887,12545],{"class":244},[25,147889,147351],{"class":45},[25,147891,12545],{"class":244},[25,147893,147356],{"class":45},[25,147895,33317],{"class":244},[25,147897,147898],{"class":27,"line":67},[25,147899,2510],{"emptyLinePlaceholder":167},[25,147901,147902,147904,147906],{"class":27,"line":75},[25,147903,147323],{"class":244},[25,147905,290],{"class":240},[25,147907,147328],{"class":244},[25,147909,147910],{"class":27,"line":83},[25,147911,147912],{"class":244},"line.add_xaxis(dates)\n",[25,147914,147915,147917,147920,147922,147924,147926,147929,147931,147933,147935,147937,147939,147941,147943,147945,147947,147949],{"class":27,"line":91},[25,147916,147363],{"class":244},[25,147918,147919],{"class":45},"\"线上销售\"",[25,147921,77589],{"class":244},[25,147923,554],{"class":35},[25,147925,12545],{"class":244},[25,147927,147928],{"class":35},"130",[25,147930,12545],{"class":244},[25,147932,1060],{"class":35},[25,147934,12545],{"class":244},[25,147936,21158],{"class":35},[25,147938,12545],{"class":244},[25,147940,1833],{"class":35},[25,147942,112273],{"class":244},[25,147944,147816],{"class":5326},[25,147946,290],{"class":240},[25,147948,31547],{"class":35},[25,147950,251],{"class":244},[25,147952,147953,147955,147958,147960,147962,147964,147966,147968,147970,147972,147974,147976,147978,147980,147982,147984,147986],{"class":27,"line":1429},[25,147954,147363],{"class":244},[25,147956,147957],{"class":45},"\"线下销售\"",[25,147959,77589],{"class":244},[25,147961,855],{"class":35},[25,147963,12545],{"class":244},[25,147965,1105],{"class":35},[25,147967,12545],{"class":244},[25,147969,554],{"class":35},[25,147971,12545],{"class":244},[25,147973,1060],{"class":35},[25,147975,12545],{"class":244},[25,147977,147383],{"class":35},[25,147979,112273],{"class":244},[25,147981,147816],{"class":5326},[25,147983,290],{"class":240},[25,147985,31547],{"class":35},[25,147987,251],{"class":244},[25,147989,147990],{"class":27,"line":1441},[25,147991,147539],{"class":244},[25,147993,147994,147996,147998,148000,148002,148004,148007],{"class":27,"line":1723},[25,147995,147544],{"class":5326},[25,147997,290],{"class":240},[25,147999,147549],{"class":244},[25,148001,51478],{"class":5326},[25,148003,290],{"class":240},[25,148005,148006],{"class":45},"\"线上线下销售趋势\"",[25,148008,38118],{"class":244},[25,148010,148011,148013,148015,148017,148019,148021,148023],{"class":27,"line":1728},[25,148012,147600],{"class":5326},[25,148014,290],{"class":240},[25,148016,147605],{"class":244},[25,148018,147608],{"class":5326},[25,148020,290],{"class":240},[25,148022,147613],{"class":45},[25,148024,38118],{"class":244},[25,148026,148027],{"class":27,"line":1734},[25,148028,251],{"class":244},[25,148030,148031,148033,148036],{"class":27,"line":1739},[25,148032,147395],{"class":244},[25,148034,148035],{"class":45},"\"sales.html\"",[25,148037,251],{"class":244},[99,148039,148040],{},"多条折线适合比较不同指标或不同地区。",[182,148042,148044],{"id":148043},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[99,148046,148047,148048,24726],{},"假设 ",[22,148049,148050],{},"sales.json",[15,148052,148054],{"className":147116,"code":148053,"language":145863,"meta":20,"style":20},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[22,148055,148056,148061,148093,148121,148149],{"__ignoreMap":20},[25,148057,148058],{"class":27,"line":28},[25,148059,148060],{"class":244},"[\n",[25,148062,148063,148066,148069,148071,148073,148075,148078,148080,148082,148084,148087,148089,148091],{"class":27,"line":39},[25,148064,148065],{"class":244},"  {",[25,148067,148068],{"class":35},"\"date\"",[25,148070,51508],{"class":244},[25,148072,147336],{"class":45},[25,148074,12545],{"class":244},[25,148076,148077],{"class":35},"\"online\"",[25,148079,51508],{"class":244},[25,148081,554],{"class":35},[25,148083,12545],{"class":244},[25,148085,148086],{"class":35},"\"offline\"",[25,148088,51508],{"class":244},[25,148090,855],{"class":35},[25,148092,5040],{"class":244},[25,148094,148095,148097,148099,148101,148103,148105,148107,148109,148111,148113,148115,148117,148119],{"class":27,"line":51},[25,148096,148065],{"class":244},[25,148098,148068],{"class":35},[25,148100,51508],{"class":244},[25,148102,147341],{"class":45},[25,148104,12545],{"class":244},[25,148106,148077],{"class":35},[25,148108,51508],{"class":244},[25,148110,147928],{"class":35},[25,148112,12545],{"class":244},[25,148114,148086],{"class":35},[25,148116,51508],{"class":244},[25,148118,1105],{"class":35},[25,148120,5040],{"class":244},[25,148122,148123,148125,148127,148129,148131,148133,148135,148137,148139,148141,148143,148145,148147],{"class":27,"line":59},[25,148124,148065],{"class":244},[25,148126,148068],{"class":35},[25,148128,51508],{"class":244},[25,148130,147346],{"class":45},[25,148132,12545],{"class":244},[25,148134,148077],{"class":35},[25,148136,51508],{"class":244},[25,148138,1060],{"class":35},[25,148140,12545],{"class":244},[25,148142,148086],{"class":35},[25,148144,51508],{"class":244},[25,148146,554],{"class":35},[25,148148,1676],{"class":244},[25,148150,148151],{"class":27,"line":67},[25,148152,33317],{"class":244},[99,148154,148155],{},"读取并绘图：",[15,148157,148159],{"className":30449,"code":148158,"language":30451,"meta":20,"style":20},"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",[22,148160,148161,148167,148181,148191,148195,148227,148240,148244,148252,148261,148270,148274,148286,148295,148304,148313,148317,148325,148329,148346,148363,148367,148384,148400,148404],{"__ignoreMap":20},[25,148162,148163,148165],{"class":27,"line":28},[25,148164,30463],{"class":240},[25,148166,147162],{"class":244},[25,148168,148169,148171,148173,148175,148177,148179],{"class":27,"line":39},[25,148170,30808],{"class":240},[25,148172,147450],{"class":244},[25,148174,30463],{"class":240},[25,148176,147455],{"class":244},[25,148178,31454],{"class":240},[25,148180,147460],{"class":244},[25,148182,148183,148185,148187,148189],{"class":27,"line":51},[25,148184,30808],{"class":240},[25,148186,147309],{"class":244},[25,148188,30463],{"class":240},[25,148190,147314],{"class":244},[25,148192,148193],{"class":27,"line":59},[25,148194,2510],{"emptyLinePlaceholder":167},[25,148196,148197,148199,148201,148203,148206,148208,148210,148212,148214,148216,148218,148220,148222,148225],{"class":27,"line":67},[25,148198,107904],{"class":240},[25,148200,146862],{"class":35},[25,148202,245],{"class":244},[25,148204,148205],{"class":45},"\"sales.json\"",[25,148207,12545],{"class":244},[25,148209,146872],{"class":45},[25,148211,12545],{"class":244},[25,148213,146877],{"class":5326},[25,148215,290],{"class":240},[25,148217,146882],{"class":45},[25,148219,13824],{"class":244},[25,148221,31454],{"class":240},[25,148223,148224],{"class":5326}," file",[25,148226,3849],{"class":244},[25,148228,148229,148231,148233,148236,148238],{"class":27,"line":75},[25,148230,101492],{"class":244},[25,148232,290],{"class":240},[25,148234,148235],{"class":244}," json.load(",[25,148237,45425],{"class":5326},[25,148239,251],{"class":244},[25,148241,148242],{"class":27,"line":83},[25,148243,2510],{"emptyLinePlaceholder":167},[25,148245,148246,148248,148250],{"class":27,"line":91},[25,148247,147871],{"class":244},[25,148249,290],{"class":240},[25,148251,51909],{"class":244},[25,148253,148254,148257,148259],{"class":27,"line":1429},[25,148255,148256],{"class":244},"online_sales ",[25,148258,290],{"class":240},[25,148260,51909],{"class":244},[25,148262,148263,148266,148268],{"class":27,"line":1441},[25,148264,148265],{"class":244},"offline_sales ",[25,148267,290],{"class":240},[25,148269,51909],{"class":244},[25,148271,148272],{"class":27,"line":1723},[25,148273,2510],{"emptyLinePlaceholder":167},[25,148275,148276,148278,148281,148283],{"class":27,"line":1728},[25,148277,3135],{"class":240},[25,148279,148280],{"class":244}," item ",[25,148282,26114],{"class":240},[25,148284,148285],{"class":244}," data:\n",[25,148287,148288,148291,148293],{"class":27,"line":1734},[25,148289,148290],{"class":244},"    dates.append(item[",[25,148292,148068],{"class":45},[25,148294,4767],{"class":244},[25,148296,148297,148300,148302],{"class":27,"line":1739},[25,148298,148299],{"class":244},"    online_sales.append(item[",[25,148301,148077],{"class":45},[25,148303,4767],{"class":244},[25,148305,148306,148309,148311],{"class":27,"line":1753},[25,148307,148308],{"class":244},"    offline_sales.append(item[",[25,148310,148086],{"class":45},[25,148312,4767],{"class":244},[25,148314,148315],{"class":27,"line":1758},[25,148316,2510],{"emptyLinePlaceholder":167},[25,148318,148319,148321,148323],{"class":27,"line":1764},[25,148320,147323],{"class":244},[25,148322,290],{"class":240},[25,148324,147328],{"class":244},[25,148326,148327],{"class":27,"line":1785},[25,148328,147912],{"class":244},[25,148330,148331,148333,148335,148338,148340,148342,148344],{"class":27,"line":1790},[25,148332,147363],{"class":244},[25,148334,147919],{"class":45},[25,148336,148337],{"class":244},", online_sales, ",[25,148339,147816],{"class":5326},[25,148341,290],{"class":240},[25,148343,31547],{"class":35},[25,148345,251],{"class":244},[25,148347,148348,148350,148352,148355,148357,148359,148361],{"class":27,"line":1804},[25,148349,147363],{"class":244},[25,148351,147957],{"class":45},[25,148353,148354],{"class":244},", offline_sales, ",[25,148356,147816],{"class":5326},[25,148358,290],{"class":240},[25,148360,31547],{"class":35},[25,148362,251],{"class":244},[25,148364,148365],{"class":27,"line":1809},[25,148366,147539],{"class":244},[25,148368,148369,148371,148373,148375,148377,148379,148382],{"class":27,"line":1838},[25,148370,147544],{"class":5326},[25,148372,290],{"class":240},[25,148374,147549],{"class":244},[25,148376,51478],{"class":5326},[25,148378,290],{"class":240},[25,148380,148381],{"class":45},"\"销售趋势\"",[25,148383,38118],{"class":244},[25,148385,148386,148388,148390,148392,148394,148396,148398],{"class":27,"line":1843},[25,148387,147600],{"class":5326},[25,148389,290],{"class":240},[25,148391,147605],{"class":244},[25,148393,147608],{"class":5326},[25,148395,290],{"class":240},[25,148397,147613],{"class":45},[25,148399,38118],{"class":244},[25,148401,148402],{"class":27,"line":1860},[25,148403,251],{"class":244},[25,148405,148406,148408,148410],{"class":27,"line":1865},[25,148407,147395],{"class":244},[25,148409,148035],{"class":45},[25,148411,251],{"class":244},[182,148413,148415],{"id":148414},"_109-数据清洗","10.9 数据清洗",[99,148417,148418],{},"真实数据经常不整齐，需要清洗。",[99,148420,148421],{},"常见问题：",[194,148423,148424,148427,148430,148433],{},[106,148425,148426],{},"数字是字符串。",[106,148428,148429],{},"字段缺失。",[106,148431,148432],{},"空值。",[106,148434,148435],{},"日期格式不统一。",[99,148437,15245],{},[15,148439,148441],{"className":30449,"code":148440,"language":30451,"meta":20,"style":20},"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",[22,148442,148443,148452,148475,148495,148516,148520,148524,148532,148541,148545,148556,148570,148579,148584,148588,148596,148606,148610,148617],{"__ignoreMap":20},[25,148444,148445,148448,148450],{"class":27,"line":28},[25,148446,148447],{"class":244},"raw_data ",[25,148449,290],{"class":240},[25,148451,55518],{"class":244},[25,148453,148454,148457,148459,148461,148463,148465,148468,148470,148473],{"class":27,"line":39},[25,148455,148456],{"class":244},"    {",[25,148458,148068],{"class":45},[25,148460,51508],{"class":244},[25,148462,147336],{"class":45},[25,148464,12545],{"class":244},[25,148466,148467],{"class":45},"\"sales\"",[25,148469,51508],{"class":244},[25,148471,148472],{"class":45},"\"100\"",[25,148474,5040],{"class":244},[25,148476,148477,148479,148481,148483,148485,148487,148489,148491,148493],{"class":27,"line":51},[25,148478,148456],{"class":244},[25,148480,148068],{"class":45},[25,148482,51508],{"class":244},[25,148484,147341],{"class":45},[25,148486,12545],{"class":244},[25,148488,148467],{"class":45},[25,148490,51508],{"class":244},[25,148492,7762],{"class":45},[25,148494,5040],{"class":244},[25,148496,148497,148499,148501,148503,148505,148507,148509,148511,148514],{"class":27,"line":59},[25,148498,148456],{"class":244},[25,148500,148068],{"class":45},[25,148502,51508],{"class":244},[25,148504,147346],{"class":45},[25,148506,12545],{"class":244},[25,148508,148467],{"class":45},[25,148510,51508],{"class":244},[25,148512,148513],{"class":45},"\"120\"",[25,148515,5040],{"class":244},[25,148517,148518],{"class":27,"line":67},[25,148519,33317],{"class":244},[25,148521,148522],{"class":27,"line":75},[25,148523,2510],{"emptyLinePlaceholder":167},[25,148525,148526,148528,148530],{"class":27,"line":83},[25,148527,147871],{"class":244},[25,148529,290],{"class":240},[25,148531,51909],{"class":244},[25,148533,148534,148537,148539],{"class":27,"line":91},[25,148535,148536],{"class":244},"sales ",[25,148538,290],{"class":240},[25,148540,51909],{"class":244},[25,148542,148543],{"class":27,"line":1429},[25,148544,2510],{"emptyLinePlaceholder":167},[25,148546,148547,148549,148551,148553],{"class":27,"line":1441},[25,148548,3135],{"class":240},[25,148550,148280],{"class":244},[25,148552,26114],{"class":240},[25,148554,148555],{"class":244}," raw_data:\n",[25,148557,148558,148561,148563,148566,148568],{"class":27,"line":1723},[25,148559,148560],{"class":244},"    value ",[25,148562,290],{"class":240},[25,148564,148565],{"class":244}," item.get(",[25,148567,148467],{"class":45},[25,148569,251],{"class":244},[25,148571,148572,148574,148576],{"class":27,"line":1728},[25,148573,3211],{"class":240},[25,148575,39001],{"class":240},[25,148577,148578],{"class":244}," value:\n",[25,148580,148581],{"class":27,"line":1734},[25,148582,148583],{"class":240},"        continue\n",[25,148585,148586],{"class":27,"line":1739},[25,148587,2510],{"emptyLinePlaceholder":167},[25,148589,148590,148592,148594],{"class":27,"line":1753},[25,148591,148290],{"class":244},[25,148593,148068],{"class":45},[25,148595,4767],{"class":244},[25,148597,148598,148601,148603],{"class":27,"line":1758},[25,148599,148600],{"class":244},"    sales.append(",[25,148602,248],{"class":35},[25,148604,148605],{"class":244},"(value))\n",[25,148607,148608],{"class":27,"line":1764},[25,148609,2510],{"emptyLinePlaceholder":167},[25,148611,148612,148614],{"class":27,"line":1785},[25,148613,30486],{"class":35},[25,148615,148616],{"class":244},"(dates)\n",[25,148618,148619,148621],{"class":27,"line":1790},[25,148620,30486],{"class":35},[25,148622,148623],{"class":244},"(sales)\n",[182,148625,148627],{"id":148626},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[15,148629,148631],{"className":30449,"code":148630,"language":30451,"meta":20,"style":20},"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",[22,148632,148633,148647,148657,148661,148669,148690,148712,148734,148756,148778,148782,148786,148808,148829,148833,148841,148845,148849,148859,148868,148878,148894,148898,148902,148919,148935,148951,148967,148977,148981],{"__ignoreMap":20},[25,148634,148635,148637,148639,148641,148643,148645],{"class":27,"line":28},[25,148636,30808],{"class":240},[25,148638,147450],{"class":244},[25,148640,30463],{"class":240},[25,148642,147455],{"class":244},[25,148644,31454],{"class":240},[25,148646,147460],{"class":244},[25,148648,148649,148651,148653,148655],{"class":27,"line":39},[25,148650,30808],{"class":240},[25,148652,147309],{"class":244},[25,148654,30463],{"class":240},[25,148656,147314],{"class":244},[25,148658,148659],{"class":27,"line":51},[25,148660,2510],{"emptyLinePlaceholder":167},[25,148662,148663,148665,148667],{"class":27,"line":59},[25,148664,148536],{"class":244},[25,148666,290],{"class":240},[25,148668,55518],{"class":244},[25,148670,148671,148673,148675,148677,148680,148682,148684,148686,148688],{"class":27,"line":67},[25,148672,148456],{"class":244},[25,148674,148068],{"class":45},[25,148676,51508],{"class":244},[25,148678,148679],{"class":45},"\"2024-10-01\"",[25,148681,12545],{"class":244},[25,148683,84155],{"class":45},[25,148685,51508],{"class":244},[25,148687,92094],{"class":35},[25,148689,5040],{"class":244},[25,148691,148692,148694,148696,148698,148701,148703,148705,148707,148710],{"class":27,"line":75},[25,148693,148456],{"class":244},[25,148695,148068],{"class":45},[25,148697,51508],{"class":244},[25,148699,148700],{"class":45},"\"2024-10-02\"",[25,148702,12545],{"class":244},[25,148704,84155],{"class":45},[25,148706,51508],{"class":244},[25,148708,148709],{"class":35},"1800",[25,148711,5040],{"class":244},[25,148713,148714,148716,148718,148720,148723,148725,148727,148729,148732],{"class":27,"line":83},[25,148715,148456],{"class":244},[25,148717,148068],{"class":45},[25,148719,51508],{"class":244},[25,148721,148722],{"class":45},"\"2024-10-03\"",[25,148724,12545],{"class":244},[25,148726,84155],{"class":45},[25,148728,51508],{"class":244},[25,148730,148731],{"class":35},"1500",[25,148733,5040],{"class":244},[25,148735,148736,148738,148740,148742,148745,148747,148749,148751,148754],{"class":27,"line":91},[25,148737,148456],{"class":244},[25,148739,148068],{"class":45},[25,148741,51508],{"class":244},[25,148743,148744],{"class":45},"\"2024-10-04\"",[25,148746,12545],{"class":244},[25,148748,84155],{"class":45},[25,148750,51508],{"class":244},[25,148752,148753],{"class":35},"2100",[25,148755,5040],{"class":244},[25,148757,148758,148760,148762,148764,148767,148769,148771,148773,148776],{"class":27,"line":1429},[25,148759,148456],{"class":244},[25,148761,148068],{"class":45},[25,148763,51508],{"class":244},[25,148765,148766],{"class":45},"\"2024-10-05\"",[25,148768,12545],{"class":244},[25,148770,84155],{"class":45},[25,148772,51508],{"class":244},[25,148774,148775],{"class":35},"2600",[25,148777,5040],{"class":244},[25,148779,148780],{"class":27,"line":1441},[25,148781,33317],{"class":244},[25,148783,148784],{"class":27,"line":1723},[25,148785,2510],{"emptyLinePlaceholder":167},[25,148787,148788,148790,148792,148795,148797,148799,148801,148803,148805],{"class":27,"line":1728},[25,148789,147871],{"class":244},[25,148791,290],{"class":240},[25,148793,148794],{"class":244}," [item[",[25,148796,148068],{"class":45},[25,148798,4553],{"class":244},[25,148800,3135],{"class":240},[25,148802,148280],{"class":244},[25,148804,26114],{"class":240},[25,148806,148807],{"class":244}," sales]\n",[25,148809,148810,148813,148815,148817,148819,148821,148823,148825,148827],{"class":27,"line":1734},[25,148811,148812],{"class":244},"amounts ",[25,148814,290],{"class":240},[25,148816,148794],{"class":244},[25,148818,84155],{"class":45},[25,148820,4553],{"class":244},[25,148822,3135],{"class":240},[25,148824,148280],{"class":244},[25,148826,26114],{"class":240},[25,148828,148807],{"class":244},[25,148830,148831],{"class":27,"line":1739},[25,148832,2510],{"emptyLinePlaceholder":167},[25,148834,148835,148837,148839],{"class":27,"line":1753},[25,148836,147323],{"class":244},[25,148838,290],{"class":240},[25,148840,147328],{"class":244},[25,148842,148843],{"class":27,"line":1758},[25,148844,147912],{"class":244},[25,148846,148847],{"class":27,"line":1764},[25,148848,147720],{"class":244},[25,148850,148851,148853,148855,148857],{"class":27,"line":1785},[25,148852,147725],{"class":5326},[25,148854,290],{"class":240},[25,148856,147366],{"class":45},[25,148858,31537],{"class":244},[25,148860,148861,148863,148865],{"class":27,"line":1790},[25,148862,147736],{"class":5326},[25,148864,290],{"class":240},[25,148866,148867],{"class":244},"amounts,\n",[25,148869,148870,148872,148874,148876],{"class":27,"line":1804},[25,148871,147765],{"class":5326},[25,148873,290],{"class":240},[25,148875,31547],{"class":35},[25,148877,31537],{"class":244},[25,148879,148880,148882,148884,148886,148888,148890,148892],{"class":27,"line":1809},[25,148881,147776],{"class":5326},[25,148883,290],{"class":240},[25,148885,147781],{"class":244},[25,148887,147784],{"class":5326},[25,148889,290],{"class":240},[25,148891,31547],{"class":35},[25,148893,38118],{"class":244},[25,148895,148896],{"class":27,"line":1838},[25,148897,251],{"class":244},[25,148899,148900],{"class":27,"line":1843},[25,148901,147539],{"class":244},[25,148903,148904,148906,148908,148910,148912,148914,148917],{"class":27,"line":1860},[25,148905,147544],{"class":5326},[25,148907,290],{"class":240},[25,148909,147549],{"class":244},[25,148911,51478],{"class":5326},[25,148913,290],{"class":240},[25,148915,148916],{"class":45},"\"每日销售额\"",[25,148918,38118],{"class":244},[25,148920,148921,148923,148925,148927,148929,148931,148933],{"class":27,"line":1865},[25,148922,147563],{"class":5326},[25,148924,290],{"class":240},[25,148926,147568],{"class":244},[25,148928,79881],{"class":5326},[25,148930,290],{"class":240},[25,148932,147575],{"class":45},[25,148934,38118],{"class":244},[25,148936,148937,148939,148941,148943,148945,148947,148949],{"class":27,"line":1870},[25,148938,147582],{"class":5326},[25,148940,290],{"class":240},[25,148942,147568],{"class":244},[25,148944,79881],{"class":5326},[25,148946,290],{"class":240},[25,148948,147593],{"class":45},[25,148950,38118],{"class":244},[25,148952,148953,148955,148957,148959,148961,148963,148965],{"class":27,"line":1875},[25,148954,147600],{"class":5326},[25,148956,290],{"class":240},[25,148958,147605],{"class":244},[25,148960,147608],{"class":5326},[25,148962,290],{"class":240},[25,148964,147613],{"class":45},[25,148966,38118],{"class":244},[25,148968,148969,148972,148974],{"class":27,"line":1889},[25,148970,148971],{"class":5326},"    datazoom_opts",[25,148973,290],{"class":240},[25,148975,148976],{"class":244},"[opts.DataZoomOpts()],\n",[25,148978,148979],{"class":27,"line":1894},[25,148980,251],{"class":244},[25,148982,148983,148985,148988],{"class":27,"line":2687},[25,148984,147395],{"class":244},[25,148986,148987],{"class":45},"\"daily_sales.html\"",[25,148989,251],{"class":244},[99,148991,148992,148995],{},[22,148993,148994],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[182,148997,148999],{"id":148998},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[99,149001,149002],{},"如果数据结构如下：",[15,149004,149006],{"className":30449,"code":149005,"language":30451,"meta":20,"style":20},"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",[22,149007,149008,149016,149024,149046,149067,149072,149079,149099,149119,149123],{"__ignoreMap":20},[25,149009,149010,149012,149014],{"class":27,"line":28},[25,149011,101729],{"class":244},[25,149013,290],{"class":240},[25,149015,15682],{"class":244},[25,149017,149018,149021],{"class":27,"line":39},[25,149019,149020],{"class":45},"    \"北京\"",[25,149022,149023],{"class":244},": [\n",[25,149025,149026,149028,149030,149032,149035,149037,149040,149042,149044],{"class":27,"line":51},[25,149027,5027],{"class":244},[25,149029,148068],{"class":45},[25,149031,51508],{"class":244},[25,149033,149034],{"class":45},"\"2024-01-01\"",[25,149036,12545],{"class":244},[25,149038,149039],{"class":45},"\"confirm\"",[25,149041,51508],{"class":244},[25,149043,689],{"class":35},[25,149045,5040],{"class":244},[25,149047,149048,149050,149052,149054,149057,149059,149061,149063,149065],{"class":27,"line":59},[25,149049,5027],{"class":244},[25,149051,148068],{"class":45},[25,149053,51508],{"class":244},[25,149055,149056],{"class":45},"\"2024-01-02\"",[25,149058,12545],{"class":244},[25,149060,149039],{"class":45},[25,149062,51508],{"class":244},[25,149064,741],{"class":35},[25,149066,5040],{"class":244},[25,149068,149069],{"class":27,"line":67},[25,149070,149071],{"class":244},"    ],\n",[25,149073,149074,149077],{"class":27,"line":75},[25,149075,149076],{"class":45},"    \"上海\"",[25,149078,149023],{"class":244},[25,149080,149081,149083,149085,149087,149089,149091,149093,149095,149097],{"class":27,"line":83},[25,149082,5027],{"class":244},[25,149084,148068],{"class":45},[25,149086,51508],{"class":244},[25,149088,149034],{"class":45},[25,149090,12545],{"class":244},[25,149092,149039],{"class":45},[25,149094,51508],{"class":244},[25,149096,638],{"class":35},[25,149098,5040],{"class":244},[25,149100,149101,149103,149105,149107,149109,149111,149113,149115,149117],{"class":27,"line":91},[25,149102,5027],{"class":244},[25,149104,148068],{"class":45},[25,149106,51508],{"class":244},[25,149108,149056],{"class":45},[25,149110,12545],{"class":244},[25,149112,149039],{"class":45},[25,149114,51508],{"class":244},[25,149116,766],{"class":35},[25,149118,5040],{"class":244},[25,149120,149121],{"class":27,"line":1429},[25,149122,149071],{"class":244},[25,149124,149125],{"class":27,"line":1441},[25,149126,1676],{"class":244},[99,149128,149129],{},"绘制多地区趋势：",[15,149131,149133],{"className":30449,"code":149132,"language":30451,"meta":20,"style":20},"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",[22,149134,149135,149149,149159,149163,149188,149192,149200,149204,149208,149220,149242,149255,149259,149263,149280,149296,149300],{"__ignoreMap":20},[25,149136,149137,149139,149141,149143,149145,149147],{"class":27,"line":28},[25,149138,30808],{"class":240},[25,149140,147450],{"class":244},[25,149142,30463],{"class":240},[25,149144,147455],{"class":244},[25,149146,31454],{"class":240},[25,149148,147460],{"class":244},[25,149150,149151,149153,149155,149157],{"class":27,"line":39},[25,149152,30808],{"class":240},[25,149154,147309],{"class":244},[25,149156,30463],{"class":240},[25,149158,147314],{"class":244},[25,149160,149161],{"class":27,"line":51},[25,149162,2510],{"emptyLinePlaceholder":167},[25,149164,149165,149167,149169,149171,149173,149175,149177,149179,149181,149184,149186],{"class":27,"line":59},[25,149166,147871],{"class":244},[25,149168,290],{"class":240},[25,149170,148794],{"class":244},[25,149172,148068],{"class":45},[25,149174,4553],{"class":244},[25,149176,3135],{"class":240},[25,149178,148280],{"class":244},[25,149180,26114],{"class":240},[25,149182,149183],{"class":244}," data[",[25,149185,69340],{"class":45},[25,149187,77598],{"class":244},[25,149189,149190],{"class":27,"line":67},[25,149191,2510],{"emptyLinePlaceholder":167},[25,149193,149194,149196,149198],{"class":27,"line":75},[25,149195,147323],{"class":244},[25,149197,290],{"class":240},[25,149199,147328],{"class":244},[25,149201,149202],{"class":27,"line":83},[25,149203,147912],{"class":244},[25,149205,149206],{"class":27,"line":91},[25,149207,2510],{"emptyLinePlaceholder":167},[25,149209,149210,149212,149215,149217],{"class":27,"line":1429},[25,149211,3135],{"class":240},[25,149213,149214],{"class":244}," city, records ",[25,149216,26114],{"class":240},[25,149218,149219],{"class":244}," data.items():\n",[25,149221,149222,149225,149227,149229,149231,149233,149235,149237,149239],{"class":27,"line":1441},[25,149223,149224],{"class":244},"    values ",[25,149226,290],{"class":240},[25,149228,148794],{"class":244},[25,149230,149039],{"class":45},[25,149232,4553],{"class":244},[25,149234,3135],{"class":240},[25,149236,148280],{"class":244},[25,149238,26114],{"class":240},[25,149240,149241],{"class":244}," records]\n",[25,149243,149244,149247,149249,149251,149253],{"class":27,"line":1723},[25,149245,149246],{"class":244},"    line.add_yaxis(city, values, ",[25,149248,147816],{"class":5326},[25,149250,290],{"class":240},[25,149252,31547],{"class":35},[25,149254,251],{"class":244},[25,149256,149257],{"class":27,"line":1728},[25,149258,2510],{"emptyLinePlaceholder":167},[25,149260,149261],{"class":27,"line":1734},[25,149262,147539],{"class":244},[25,149264,149265,149267,149269,149271,149273,149275,149278],{"class":27,"line":1739},[25,149266,147544],{"class":5326},[25,149268,290],{"class":240},[25,149270,147549],{"class":244},[25,149272,51478],{"class":5326},[25,149274,290],{"class":240},[25,149276,149277],{"class":45},"\"多地区趋势图\"",[25,149279,38118],{"class":244},[25,149281,149282,149284,149286,149288,149290,149292,149294],{"class":27,"line":1753},[25,149283,147600],{"class":5326},[25,149285,290],{"class":240},[25,149287,147605],{"class":244},[25,149289,147608],{"class":5326},[25,149291,290],{"class":240},[25,149293,147613],{"class":45},[25,149295,38118],{"class":244},[25,149297,149298],{"class":27,"line":1758},[25,149299,251],{"class":244},[25,149301,149302,149304,149307],{"class":27,"line":1764},[25,149303,147395],{"class":244},[25,149305,149306],{"class":45},"\"trend.html\"",[25,149308,251],{"class":244},[99,149310,149311],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[182,149313,149315],{"id":149314},"_1012-易错点","10.12 易错点",[194,149317,149318,149324,149330,149340,149346],{},[106,149319,149320,149323],{},[22,149321,149322],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[106,149325,149326,149329],{},[22,149327,149328],{},"render()"," 生成的是 HTML，不是图片。",[106,149331,149332,149333,149336,149337,28456],{},"JSON 字符串用 ",[22,149334,149335],{},"json.loads()","，JSON 文件用 ",[22,149338,149339],{},"json.load()",[106,149341,149342,149343,28456],{},"中文 JSON 保存时加 ",[22,149344,149345],{},"ensure_ascii=False",[106,149347,149348],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[182,149350,149352],{"id":149351},"_1013-本章练习","10.13 本章练习",[194,149354,149355,149358,149361,149364,149367],{},[106,149356,149357],{},"安装 pyecharts 并生成第一个折线图。",[106,149359,149360],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[106,149362,149363],{},"绘制两条折线，对比线上和线下销售额。",[106,149365,149366],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[106,149368,149369],{},"对含有空值的销售数据进行清洗后再绘图。",[159,149371,149372],{},"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":20,"searchDepth":39,"depth":39,"links":149374},[149375,149376,149377,149378,149379,149380,149381,149382,149383,149384,149385,149386,149387],{"id":146991,"depth":39,"text":146992},{"id":147066,"depth":39,"text":147067},{"id":147245,"depth":39,"text":147246},{"id":147296,"depth":39,"text":147297},{"id":147430,"depth":39,"text":147431},{"id":147706,"depth":39,"text":147707},{"id":147832,"depth":39,"text":147833},{"id":148043,"depth":39,"text":148044},{"id":148414,"depth":39,"text":148415},{"id":148626,"depth":39,"text":148627},{"id":148998,"depth":39,"text":148999},{"id":149314,"depth":39,"text":149315},{"id":149351,"depth":39,"text":149352},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146983,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149394,"title":149395,"body":149396,"description":164,"extension":165,"meta":151756,"navigation":167,"path":151757,"seo":151758,"stem":151759,"__hash__":151760},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149397,"toc":151733},[149398,149401,149405,149408,149411,149487,149490,149581,149584,149588,149591,149635,149648,149652,149655,149722,149725,149729,149732,149816,149824,149828,149833,149974,149977,149988,149994,150000,150114,150118,150121,150124,150377,150380,150384,150387,150491,150494,150498,150649,150653,150660,150773,150777,150780,150886,150889,150893,150896,150927,150930,151035,151038,151042,151046,151056,151124,151128,151135,151199,151202,151206,151212,151308,151317,151321,151645,151654,151658,151686,151690,151730],[10,149399,149395],{"id":149400},"_11-面向对象基础",[182,149402,149404],{"id":149403},"_111-什么是面向对象","11.1 什么是面向对象",[99,149406,149407],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[99,149409,149410],{},"面向过程：",[15,149412,149414],{"className":30449,"code":149413,"language":30451,"meta":20,"style":20},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[22,149415,149416,149425,149433,149437,149447,149478,149482],{"__ignoreMap":20},[25,149417,149418,149420,149422],{"class":27,"line":28},[25,149419,146607],{"class":244},[25,149421,290],{"class":240},[25,149423,149424],{"class":45}," \"小明\"\n",[25,149426,149427,149429,149431],{"class":27,"line":39},[25,149428,146617],{"class":244},[25,149430,290],{"class":240},[25,149432,146622],{"class":35},[25,149434,149435],{"class":27,"line":51},[25,149436,2510],{"emptyLinePlaceholder":167},[25,149438,149439,149441,149444],{"class":27,"line":59},[25,149440,32018],{"class":240},[25,149442,149443],{"class":31}," introduce",[25,149445,149446],{"class":244},"(name, age):\n",[25,149448,149449,149451,149453,149455,149458,149460,149462,149464,149467,149469,149471,149473,149476],{"class":27,"line":67},[25,149450,31370],{"class":35},[25,149452,245],{"class":244},[25,149454,296],{"class":240},[25,149456,149457],{"class":45},"\"我叫",[25,149459,1139],{"class":35},[25,149461,79881],{"class":244},[25,149463,1189],{"class":35},[25,149465,149466],{"class":45},"，今年",[25,149468,1139],{"class":35},[25,149470,70292],{"class":244},[25,149472,1189],{"class":35},[25,149474,149475],{"class":45},"岁\"",[25,149477,251],{"class":244},[25,149479,149480],{"class":27,"line":75},[25,149481,2510],{"emptyLinePlaceholder":167},[25,149483,149484],{"class":27,"line":83},[25,149485,149486],{"class":244},"introduce(name, age)\n",[99,149488,149489],{},"面向对象：",[15,149491,149493],{"className":30449,"code":149492,"language":30451,"meta":20,"style":20},"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",[22,149494,149495,149503,149511,149540,149544,149548,149558,149567,149576],{"__ignoreMap":20},[25,149496,149497,149499,149501],{"class":27,"line":28},[25,149498,14804],{"class":240},[25,149500,8008],{"class":31},[25,149502,3849],{"class":244},[25,149504,149505,149507,149509],{"class":27,"line":39},[25,149506,30872],{"class":240},[25,149508,149443],{"class":31},[25,149510,30878],{"class":244},[25,149512,149513,149515,149517,149519,149521,149524,149526,149528,149530,149532,149534,149536,149538],{"class":27,"line":51},[25,149514,32522],{"class":35},[25,149516,245],{"class":244},[25,149518,296],{"class":240},[25,149520,149457],{"class":45},[25,149522,149523],{"class":35},"{self",[25,149525,80372],{"class":244},[25,149527,1189],{"class":35},[25,149529,149466],{"class":45},[25,149531,149523],{"class":35},[25,149533,80384],{"class":244},[25,149535,1189],{"class":35},[25,149537,149475],{"class":45},[25,149539,251],{"class":244},[25,149541,149542],{"class":27,"line":59},[25,149543,2510],{"emptyLinePlaceholder":167},[25,149545,149546],{"class":27,"line":67},[25,149547,2510],{"emptyLinePlaceholder":167},[25,149549,149550,149553,149555],{"class":27,"line":75},[25,149551,149552],{"class":244},"student ",[25,149554,290],{"class":240},[25,149556,149557],{"class":244}," Student()\n",[25,149559,149560,149563,149565],{"class":27,"line":83},[25,149561,149562],{"class":244},"student.name ",[25,149564,290],{"class":240},[25,149566,149424],{"class":45},[25,149568,149569,149572,149574],{"class":27,"line":91},[25,149570,149571],{"class":244},"student.age ",[25,149573,290],{"class":240},[25,149575,146622],{"class":35},[25,149577,149578],{"class":27,"line":1429},[25,149579,149580],{"class":244},"student.introduce()\n",[99,149582,149583],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[182,149585,149587],{"id":149586},"_112-类和对象","11.2 类和对象",[99,149589,149590],{},"类是模板，对象是根据模板创建出来的具体实例。",[15,149592,149594],{"className":30449,"code":149593,"language":30451,"meta":20,"style":20},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[22,149595,149596,149604,149609,149613,149617,149626],{"__ignoreMap":20},[25,149597,149598,149600,149602],{"class":27,"line":28},[25,149599,14804],{"class":240},[25,149601,8008],{"class":31},[25,149603,3849],{"class":244},[25,149605,149606],{"class":27,"line":39},[25,149607,149608],{"class":240},"    pass\n",[25,149610,149611],{"class":27,"line":51},[25,149612,2510],{"emptyLinePlaceholder":167},[25,149614,149615],{"class":27,"line":59},[25,149616,2510],{"emptyLinePlaceholder":167},[25,149618,149619,149622,149624],{"class":27,"line":67},[25,149620,149621],{"class":244},"student1 ",[25,149623,290],{"class":240},[25,149625,149557],{"class":244},[25,149627,149628,149631,149633],{"class":27,"line":75},[25,149629,149630],{"class":244},"student2 ",[25,149632,290],{"class":240},[25,149634,149557],{"class":244},[99,149636,149637,149640,149641,101089,149644,149647],{},[22,149638,149639],{},"Student"," 是类，",[22,149642,149643],{},"student1",[22,149645,149646],{},"student2"," 是对象。",[182,149649,149651],{"id":149650},"_113-属性","11.3 属性",[99,149653,149654],{},"属性是对象保存的数据。",[15,149656,149658],{"className":30449,"code":149657,"language":30451,"meta":20,"style":20},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[22,149659,149660,149668,149672,149676,149680,149688,149696,149704,149708,149715],{"__ignoreMap":20},[25,149661,149662,149664,149666],{"class":27,"line":28},[25,149663,14804],{"class":240},[25,149665,8008],{"class":31},[25,149667,3849],{"class":244},[25,149669,149670],{"class":27,"line":39},[25,149671,149608],{"class":240},[25,149673,149674],{"class":27,"line":51},[25,149675,2510],{"emptyLinePlaceholder":167},[25,149677,149678],{"class":27,"line":59},[25,149679,2510],{"emptyLinePlaceholder":167},[25,149681,149682,149684,149686],{"class":27,"line":67},[25,149683,149552],{"class":244},[25,149685,290],{"class":240},[25,149687,149557],{"class":244},[25,149689,149690,149692,149694],{"class":27,"line":75},[25,149691,149562],{"class":244},[25,149693,290],{"class":240},[25,149695,149424],{"class":45},[25,149697,149698,149700,149702],{"class":27,"line":83},[25,149699,149571],{"class":244},[25,149701,290],{"class":240},[25,149703,146622],{"class":35},[25,149705,149706],{"class":27,"line":91},[25,149707,2510],{"emptyLinePlaceholder":167},[25,149709,149710,149712],{"class":27,"line":1429},[25,149711,30486],{"class":35},[25,149713,149714],{"class":244},"(student.name)\n",[25,149716,149717,149719],{"class":27,"line":1441},[25,149718,30486],{"class":35},[25,149720,149721],{"class":244},"(student.age)\n",[99,149723,149724],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[182,149726,149728],{"id":149727},"_114-方法","11.4 方法",[99,149730,149731],{},"类中的函数叫方法。",[15,149733,149734],{"className":30449,"code":149492,"language":30451,"meta":20,"style":20},[22,149735,149736,149744,149752,149780,149784,149788,149796,149804,149812],{"__ignoreMap":20},[25,149737,149738,149740,149742],{"class":27,"line":28},[25,149739,14804],{"class":240},[25,149741,8008],{"class":31},[25,149743,3849],{"class":244},[25,149745,149746,149748,149750],{"class":27,"line":39},[25,149747,30872],{"class":240},[25,149749,149443],{"class":31},[25,149751,30878],{"class":244},[25,149753,149754,149756,149758,149760,149762,149764,149766,149768,149770,149772,149774,149776,149778],{"class":27,"line":51},[25,149755,32522],{"class":35},[25,149757,245],{"class":244},[25,149759,296],{"class":240},[25,149761,149457],{"class":45},[25,149763,149523],{"class":35},[25,149765,80372],{"class":244},[25,149767,1189],{"class":35},[25,149769,149466],{"class":45},[25,149771,149523],{"class":35},[25,149773,80384],{"class":244},[25,149775,1189],{"class":35},[25,149777,149475],{"class":45},[25,149779,251],{"class":244},[25,149781,149782],{"class":27,"line":59},[25,149783,2510],{"emptyLinePlaceholder":167},[25,149785,149786],{"class":27,"line":67},[25,149787,2510],{"emptyLinePlaceholder":167},[25,149789,149790,149792,149794],{"class":27,"line":75},[25,149791,149552],{"class":244},[25,149793,290],{"class":240},[25,149795,149557],{"class":244},[25,149797,149798,149800,149802],{"class":27,"line":83},[25,149799,149562],{"class":244},[25,149801,290],{"class":240},[25,149803,149424],{"class":45},[25,149805,149806,149808,149810],{"class":27,"line":91},[25,149807,149571],{"class":244},[25,149809,290],{"class":240},[25,149811,146622],{"class":35},[25,149813,149814],{"class":27,"line":1429},[25,149815,149580],{"class":244},[99,149817,149818,149820,149821,149823],{},[22,149819,30894],{}," 表示当前对象。调用方法时不需要手动传入 ",[22,149822,30894],{},"，Python 会自动传。",[182,149825,149827],{"id":149826},"_115-构造方法__init__","11.5 构造方法__init__",[99,149829,149830,149832],{},[22,149831,30900],{}," 在对象创建时自动执行，用于初始化属性。",[15,149834,149836],{"className":30449,"code":149835,"language":30451,"meta":20,"style":20},"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",[22,149837,149838,149846,149855,149867,149879,149890,149894,149902,149940,149944,149948,149970],{"__ignoreMap":20},[25,149839,149840,149842,149844],{"class":27,"line":28},[25,149841,14804],{"class":240},[25,149843,8008],{"class":31},[25,149845,3849],{"class":244},[25,149847,149848,149850,149852],{"class":27,"line":39},[25,149849,30872],{"class":240},[25,149851,30875],{"class":35},[25,149853,149854],{"class":244},"(self, name, age, score):\n",[25,149856,149857,149859,149862,149864],{"class":27,"line":51},[25,149858,30916],{"class":35},[25,149860,149861],{"class":244},".name ",[25,149863,290],{"class":240},[25,149865,149866],{"class":244}," name\n",[25,149868,149869,149871,149874,149876],{"class":27,"line":59},[25,149870,30916],{"class":35},[25,149872,149873],{"class":244},".age ",[25,149875,290],{"class":240},[25,149877,149878],{"class":244}," age\n",[25,149880,149881,149883,149886,149888],{"class":27,"line":67},[25,149882,30916],{"class":35},[25,149884,149885],{"class":244},".score ",[25,149887,290],{"class":240},[25,149889,1690],{"class":244},[25,149891,149892],{"class":27,"line":75},[25,149893,2510],{"emptyLinePlaceholder":167},[25,149895,149896,149898,149900],{"class":27,"line":83},[25,149897,30872],{"class":240},[25,149899,149443],{"class":31},[25,149901,30878],{"class":244},[25,149903,149904,149906,149908,149910,149912,149914,149916,149918,149920,149922,149924,149926,149929,149931,149934,149936,149938],{"class":27,"line":91},[25,149905,32522],{"class":35},[25,149907,245],{"class":244},[25,149909,296],{"class":240},[25,149911,149457],{"class":45},[25,149913,149523],{"class":35},[25,149915,80372],{"class":244},[25,149917,1189],{"class":35},[25,149919,149466],{"class":45},[25,149921,149523],{"class":35},[25,149923,80384],{"class":244},[25,149925,1189],{"class":35},[25,149927,149928],{"class":45},"岁，成绩",[25,149930,149523],{"class":35},[25,149932,149933],{"class":244},".score",[25,149935,1189],{"class":35},[25,149937,494],{"class":45},[25,149939,251],{"class":244},[25,149941,149942],{"class":27,"line":1429},[25,149943,2510],{"emptyLinePlaceholder":167},[25,149945,149946],{"class":27,"line":1441},[25,149947,2510],{"emptyLinePlaceholder":167},[25,149949,149950,149952,149954,149957,149960,149962,149964,149966,149968],{"class":27,"line":1723},[25,149951,149552],{"class":244},[25,149953,290],{"class":240},[25,149955,149956],{"class":244}," Student(",[25,149958,149959],{"class":45},"\"小明\"",[25,149961,12545],{"class":244},[25,149963,893],{"class":35},[25,149965,12545],{"class":244},[25,149967,1232],{"class":35},[25,149969,251],{"class":244},[25,149971,149972],{"class":27,"line":1728},[25,149973,149580],{"class":244},[99,149975,149976],{},"构造方法的好处：",[194,149978,149979,149982,149985],{},[106,149980,149981],{},"创建对象时必须提供必要数据。",[106,149983,149984],{},"属性初始化集中，不容易漏。",[106,149986,149987],{},"对象状态更完整。",[182,149989,149991,149992],{"id":149990},"_116-str","11.6 ",[392,149993,1412],{},[99,149995,149996,149997,28456],{},"直接打印对象时，默认输出不直观。可以定义 ",[22,149998,149999],{},"__str__",[15,150001,150003],{"className":30449,"code":150002,"language":30451,"meta":20,"style":20},"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",[22,150004,150005,150013,150022,150032,150042,150046,150055,150083,150087,150091,150107],{"__ignoreMap":20},[25,150006,150007,150009,150011],{"class":27,"line":28},[25,150008,14804],{"class":240},[25,150010,8008],{"class":31},[25,150012,3849],{"class":244},[25,150014,150015,150017,150019],{"class":27,"line":39},[25,150016,30872],{"class":240},[25,150018,30875],{"class":35},[25,150020,150021],{"class":244},"(self, name, age):\n",[25,150023,150024,150026,150028,150030],{"class":27,"line":51},[25,150025,30916],{"class":35},[25,150027,149861],{"class":244},[25,150029,290],{"class":240},[25,150031,149866],{"class":244},[25,150033,150034,150036,150038,150040],{"class":27,"line":59},[25,150035,30916],{"class":35},[25,150037,149873],{"class":244},[25,150039,290],{"class":240},[25,150041,149878],{"class":244},[25,150043,150044],{"class":27,"line":67},[25,150045,2510],{"emptyLinePlaceholder":167},[25,150047,150048,150050,150053],{"class":27,"line":75},[25,150049,30872],{"class":240},[25,150051,150052],{"class":35}," __str__",[25,150054,30878],{"class":244},[25,150056,150057,150059,150062,150065,150067,150069,150071,150074,150076,150078,150080],{"class":27,"line":83},[25,150058,14862],{"class":240},[25,150060,150061],{"class":240}," f",[25,150063,150064],{"class":45},"\"Student(name=",[25,150066,149523],{"class":35},[25,150068,80372],{"class":244},[25,150070,1189],{"class":35},[25,150072,150073],{"class":45},", age=",[25,150075,149523],{"class":35},[25,150077,80384],{"class":244},[25,150079,1189],{"class":35},[25,150081,150082],{"class":45},")\"\n",[25,150084,150085],{"class":27,"line":91},[25,150086,2510],{"emptyLinePlaceholder":167},[25,150088,150089],{"class":27,"line":1429},[25,150090,2510],{"emptyLinePlaceholder":167},[25,150092,150093,150095,150097,150099,150101,150103,150105],{"class":27,"line":1441},[25,150094,149552],{"class":244},[25,150096,290],{"class":240},[25,150098,149956],{"class":244},[25,150100,149959],{"class":45},[25,150102,12545],{"class":244},[25,150104,893],{"class":35},[25,150106,251],{"class":244},[25,150108,150109,150111],{"class":27,"line":1723},[25,150110,30486],{"class":35},[25,150112,150113],{"class":244},"(student)\n",[182,150115,150117],{"id":150116},"_117-封装","11.7 封装",[99,150119,150120],{},"封装就是把数据和方法放到类中，并控制访问方式。",[99,150122,150123],{},"Python 中以双下划线开头的属性通常视为私有属性。",[15,150125,150127],{"className":30449,"code":150126,"language":30451,"meta":20,"style":20},"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",[22,150128,150129,150138,150147,150159,150171,150175,150184,150193,150197,150207,150220,150231,150236,150247,150251,150260,150272,150283,150287,150300,150311,150315,150326,150330,150334,150352,150361,150370],{"__ignoreMap":20},[25,150130,150131,150133,150136],{"class":27,"line":28},[25,150132,14804],{"class":240},[25,150134,150135],{"class":31}," Account",[25,150137,3849],{"class":244},[25,150139,150140,150142,150144],{"class":27,"line":39},[25,150141,30872],{"class":240},[25,150143,30875],{"class":35},[25,150145,150146],{"class":244},"(self, owner, balance):\n",[25,150148,150149,150151,150154,150156],{"class":27,"line":51},[25,150150,30916],{"class":35},[25,150152,150153],{"class":244},".owner ",[25,150155,290],{"class":240},[25,150157,150158],{"class":244}," owner\n",[25,150160,150161,150163,150166,150168],{"class":27,"line":59},[25,150162,30916],{"class":35},[25,150164,150165],{"class":244},".__balance ",[25,150167,290],{"class":240},[25,150169,150170],{"class":244}," balance\n",[25,150172,150173],{"class":27,"line":67},[25,150174,2510],{"emptyLinePlaceholder":167},[25,150176,150177,150179,150182],{"class":27,"line":75},[25,150178,30872],{"class":240},[25,150180,150181],{"class":31}," get_balance",[25,150183,30878],{"class":244},[25,150185,150186,150188,150190],{"class":27,"line":83},[25,150187,14862],{"class":240},[25,150189,38944],{"class":35},[25,150191,150192],{"class":244},".__balance\n",[25,150194,150195],{"class":27,"line":91},[25,150196,2510],{"emptyLinePlaceholder":167},[25,150198,150199,150201,150204],{"class":27,"line":1429},[25,150200,30872],{"class":240},[25,150202,150203],{"class":31}," deposit",[25,150205,150206],{"class":244},"(self, money):\n",[25,150208,150209,150211,150214,150216,150218],{"class":27,"line":1441},[25,150210,2607],{"class":240},[25,150212,150213],{"class":244}," money ",[25,150215,1699],{"class":240},[25,150217,4203],{"class":35},[25,150219,3849],{"class":244},[25,150221,150222,150224,150226,150229],{"class":27,"line":1723},[25,150223,34721],{"class":35},[25,150225,245],{"class":244},[25,150227,150228],{"class":45},"\"存款金额必须大于0\"",[25,150230,251],{"class":244},[25,150232,150233],{"class":27,"line":1728},[25,150234,150235],{"class":240},"            return\n",[25,150237,150238,150240,150242,150244],{"class":27,"line":1734},[25,150239,30916],{"class":35},[25,150241,150165],{"class":244},[25,150243,9587],{"class":240},[25,150245,150246],{"class":244}," money\n",[25,150248,150249],{"class":27,"line":1739},[25,150250,2510],{"emptyLinePlaceholder":167},[25,150252,150253,150255,150258],{"class":27,"line":1753},[25,150254,30872],{"class":240},[25,150256,150257],{"class":31}," withdraw",[25,150259,150206],{"class":244},[25,150261,150262,150264,150266,150268,150270],{"class":27,"line":1758},[25,150263,2607],{"class":240},[25,150265,150213],{"class":244},[25,150267,1699],{"class":240},[25,150269,4203],{"class":35},[25,150271,3849],{"class":244},[25,150273,150274,150276,150278,150281],{"class":27,"line":1764},[25,150275,34721],{"class":35},[25,150277,245],{"class":244},[25,150279,150280],{"class":45},"\"取款金额必须大于0\"",[25,150282,251],{"class":244},[25,150284,150285],{"class":27,"line":1785},[25,150286,150235],{"class":240},[25,150288,150289,150291,150293,150295,150297],{"class":27,"line":1790},[25,150290,2607],{"class":240},[25,150292,150213],{"class":244},[25,150294,1203],{"class":240},[25,150296,38944],{"class":35},[25,150298,150299],{"class":244},".__balance:\n",[25,150301,150302,150304,150306,150309],{"class":27,"line":1804},[25,150303,34721],{"class":35},[25,150305,245],{"class":244},[25,150307,150308],{"class":45},"\"余额不足\"",[25,150310,251],{"class":244},[25,150312,150313],{"class":27,"line":1809},[25,150314,150235],{"class":240},[25,150316,150317,150319,150321,150324],{"class":27,"line":1838},[25,150318,30916],{"class":35},[25,150320,150165],{"class":244},[25,150322,150323],{"class":240},"-=",[25,150325,150246],{"class":244},[25,150327,150328],{"class":27,"line":1843},[25,150329,2510],{"emptyLinePlaceholder":167},[25,150331,150332],{"class":27,"line":1860},[25,150333,2510],{"emptyLinePlaceholder":167},[25,150335,150336,150339,150341,150344,150346,150348,150350],{"class":27,"line":1865},[25,150337,150338],{"class":244},"account ",[25,150340,290],{"class":240},[25,150342,150343],{"class":244}," Account(",[25,150345,149959],{"class":45},[25,150347,12545],{"class":244},[25,150349,6520],{"class":35},[25,150351,251],{"class":244},[25,150353,150354,150357,150359],{"class":27,"line":1870},[25,150355,150356],{"class":244},"account.deposit(",[25,150358,1833],{"class":35},[25,150360,251],{"class":244},[25,150362,150363,150366,150368],{"class":27,"line":1875},[25,150364,150365],{"class":244},"account.withdraw(",[25,150367,554],{"class":35},[25,150369,251],{"class":244},[25,150371,150372,150374],{"class":27,"line":1889},[25,150373,30486],{"class":35},[25,150375,150376],{"class":244},"(account.get_balance())\n",[99,150378,150379],{},"封装的意义是避免外部随意修改内部状态。",[182,150381,150383],{"id":150382},"_118-继承","11.8 继承",[99,150385,150386],{},"继承可以让子类复用父类的属性和方法。",[15,150388,150390],{"className":30449,"code":150389,"language":30451,"meta":20,"style":20},"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",[22,150391,150392,150401,150410,150421,150425,150429,150443,150452,150463,150467,150471,150481,150486],{"__ignoreMap":20},[25,150393,150394,150396,150399],{"class":27,"line":28},[25,150395,14804],{"class":240},[25,150397,150398],{"class":31}," Animal",[25,150400,3849],{"class":244},[25,150402,150403,150405,150408],{"class":27,"line":39},[25,150404,30872],{"class":240},[25,150406,150407],{"class":31}," eat",[25,150409,30878],{"class":244},[25,150411,150412,150414,150416,150419],{"class":27,"line":51},[25,150413,32522],{"class":35},[25,150415,245],{"class":244},[25,150417,150418],{"class":45},"\"吃东西\"",[25,150420,251],{"class":244},[25,150422,150423],{"class":27,"line":59},[25,150424,2510],{"emptyLinePlaceholder":167},[25,150426,150427],{"class":27,"line":67},[25,150428,2510],{"emptyLinePlaceholder":167},[25,150430,150431,150433,150436,150438,150441],{"class":27,"line":75},[25,150432,14804],{"class":240},[25,150434,150435],{"class":31}," Dog",[25,150437,245],{"class":244},[25,150439,150440],{"class":31},"Animal",[25,150442,30857],{"class":244},[25,150444,150445,150447,150450],{"class":27,"line":83},[25,150446,30872],{"class":240},[25,150448,150449],{"class":31}," bark",[25,150451,30878],{"class":244},[25,150453,150454,150456,150458,150461],{"class":27,"line":91},[25,150455,32522],{"class":35},[25,150457,245],{"class":244},[25,150459,150460],{"class":45},"\"汪汪\"",[25,150462,251],{"class":244},[25,150464,150465],{"class":27,"line":1429},[25,150466,2510],{"emptyLinePlaceholder":167},[25,150468,150469],{"class":27,"line":1441},[25,150470,2510],{"emptyLinePlaceholder":167},[25,150472,150473,150476,150478],{"class":27,"line":1723},[25,150474,150475],{"class":244},"dog ",[25,150477,290],{"class":240},[25,150479,150480],{"class":244}," Dog()\n",[25,150482,150483],{"class":27,"line":1728},[25,150484,150485],{"class":244},"dog.eat()\n",[25,150487,150488],{"class":27,"line":1734},[25,150489,150490],{"class":244},"dog.bark()\n",[99,150492,150493],{},"子类可以扩展新方法，也可以重写父类方法。",[182,150495,150497],{"id":150496},"_119-方法重写","11.9 方法重写",[15,150499,150501],{"className":30449,"code":150500,"language":30451,"meta":20,"style":20},"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",[22,150502,150503,150511,150520,150531,150535,150539,150551,150559,150569,150573,150577,150590,150598,150609,150613,150617,150625,150635,150639,150644],{"__ignoreMap":20},[25,150504,150505,150507,150509],{"class":27,"line":28},[25,150506,14804],{"class":240},[25,150508,150398],{"class":31},[25,150510,3849],{"class":244},[25,150512,150513,150515,150518],{"class":27,"line":39},[25,150514,30872],{"class":240},[25,150516,150517],{"class":31}," speak",[25,150519,30878],{"class":244},[25,150521,150522,150524,150526,150529],{"class":27,"line":51},[25,150523,32522],{"class":35},[25,150525,245],{"class":244},[25,150527,150528],{"class":45},"\"动物叫\"",[25,150530,251],{"class":244},[25,150532,150533],{"class":27,"line":59},[25,150534,2510],{"emptyLinePlaceholder":167},[25,150536,150537],{"class":27,"line":67},[25,150538,2510],{"emptyLinePlaceholder":167},[25,150540,150541,150543,150545,150547,150549],{"class":27,"line":75},[25,150542,14804],{"class":240},[25,150544,150435],{"class":31},[25,150546,245],{"class":244},[25,150548,150440],{"class":31},[25,150550,30857],{"class":244},[25,150552,150553,150555,150557],{"class":27,"line":83},[25,150554,30872],{"class":240},[25,150556,150517],{"class":31},[25,150558,30878],{"class":244},[25,150560,150561,150563,150565,150567],{"class":27,"line":91},[25,150562,32522],{"class":35},[25,150564,245],{"class":244},[25,150566,150460],{"class":45},[25,150568,251],{"class":244},[25,150570,150571],{"class":27,"line":1429},[25,150572,2510],{"emptyLinePlaceholder":167},[25,150574,150575],{"class":27,"line":1441},[25,150576,2510],{"emptyLinePlaceholder":167},[25,150578,150579,150581,150584,150586,150588],{"class":27,"line":1723},[25,150580,14804],{"class":240},[25,150582,150583],{"class":31}," Cat",[25,150585,245],{"class":244},[25,150587,150440],{"class":31},[25,150589,30857],{"class":244},[25,150591,150592,150594,150596],{"class":27,"line":1728},[25,150593,30872],{"class":240},[25,150595,150517],{"class":31},[25,150597,30878],{"class":244},[25,150599,150600,150602,150604,150607],{"class":27,"line":1734},[25,150601,32522],{"class":35},[25,150603,245],{"class":244},[25,150605,150606],{"class":45},"\"喵喵\"",[25,150608,251],{"class":244},[25,150610,150611],{"class":27,"line":1739},[25,150612,2510],{"emptyLinePlaceholder":167},[25,150614,150615],{"class":27,"line":1753},[25,150616,2510],{"emptyLinePlaceholder":167},[25,150618,150619,150621,150623],{"class":27,"line":1758},[25,150620,150475],{"class":244},[25,150622,290],{"class":240},[25,150624,150480],{"class":244},[25,150626,150627,150630,150632],{"class":27,"line":1764},[25,150628,150629],{"class":244},"cat ",[25,150631,290],{"class":240},[25,150633,150634],{"class":244}," Cat()\n",[25,150636,150637],{"class":27,"line":1785},[25,150638,2510],{"emptyLinePlaceholder":167},[25,150640,150641],{"class":27,"line":1790},[25,150642,150643],{"class":244},"dog.speak()\n",[25,150645,150646],{"class":27,"line":1804},[25,150647,150648],{"class":244},"cat.speak()\n",[182,150650,150652],{"id":150651},"_1110-super","11.10 super",[99,150654,150655,150656,150659],{},"子类可以通过 ",[22,150657,150658],{},"super()"," 调用父类方法。",[15,150661,150663],{"className":30449,"code":150662,"language":30451,"meta":20,"style":20},"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",[22,150664,150665,150673,150682,150692,150696,150700,150712,150721,150732,150742,150746,150750,150766],{"__ignoreMap":20},[25,150666,150667,150669,150671],{"class":27,"line":28},[25,150668,14804],{"class":240},[25,150670,15679],{"class":31},[25,150672,3849],{"class":244},[25,150674,150675,150677,150679],{"class":27,"line":39},[25,150676,30872],{"class":240},[25,150678,30875],{"class":35},[25,150680,150681],{"class":244},"(self, name):\n",[25,150683,150684,150686,150688,150690],{"class":27,"line":51},[25,150685,30916],{"class":35},[25,150687,149861],{"class":244},[25,150689,290],{"class":240},[25,150691,149866],{"class":244},[25,150693,150694],{"class":27,"line":59},[25,150695,2510],{"emptyLinePlaceholder":167},[25,150697,150698],{"class":27,"line":67},[25,150699,2510],{"emptyLinePlaceholder":167},[25,150701,150702,150704,150706,150708,150710],{"class":27,"line":75},[25,150703,14804],{"class":240},[25,150705,8008],{"class":31},[25,150707,245],{"class":244},[25,150709,19156],{"class":31},[25,150711,30857],{"class":244},[25,150713,150714,150716,150718],{"class":27,"line":83},[25,150715,30872],{"class":240},[25,150717,30875],{"class":35},[25,150719,150720],{"class":244},"(self, name, score):\n",[25,150722,150723,150725,150727,150729],{"class":27,"line":91},[25,150724,30888],{"class":35},[25,150726,17371],{"class":244},[25,150728,30900],{"class":35},[25,150730,150731],{"class":244},"(name)\n",[25,150733,150734,150736,150738,150740],{"class":27,"line":1429},[25,150735,30916],{"class":35},[25,150737,149885],{"class":244},[25,150739,290],{"class":240},[25,150741,1690],{"class":244},[25,150743,150744],{"class":27,"line":1441},[25,150745,2510],{"emptyLinePlaceholder":167},[25,150747,150748],{"class":27,"line":1723},[25,150749,2510],{"emptyLinePlaceholder":167},[25,150751,150752,150754,150756,150758,150760,150762,150764],{"class":27,"line":1728},[25,150753,149552],{"class":244},[25,150755,290],{"class":240},[25,150757,149956],{"class":244},[25,150759,149959],{"class":45},[25,150761,12545],{"class":244},[25,150763,1232],{"class":35},[25,150765,251],{"class":244},[25,150767,150768,150770],{"class":27,"line":1734},[25,150769,30486],{"class":35},[25,150771,150772],{"class":244},"(student.name, student.score)\n",[182,150774,150776],{"id":150775},"_1111-多态","11.11 多态",[99,150778,150779],{},"多态指不同对象响应同一个方法，表现出不同结果。",[15,150781,150783],{"className":30449,"code":150782,"language":30451,"meta":20,"style":20},"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",[22,150784,150785,150793,150801,150811,150815,150819,150827,150835,150845,150849,150853,150863,150868,150872,150876,150881],{"__ignoreMap":20},[25,150786,150787,150789,150791],{"class":27,"line":28},[25,150788,14804],{"class":240},[25,150790,150435],{"class":31},[25,150792,3849],{"class":244},[25,150794,150795,150797,150799],{"class":27,"line":39},[25,150796,30872],{"class":240},[25,150798,150517],{"class":31},[25,150800,30878],{"class":244},[25,150802,150803,150805,150807,150809],{"class":27,"line":51},[25,150804,32522],{"class":35},[25,150806,245],{"class":244},[25,150808,150460],{"class":45},[25,150810,251],{"class":244},[25,150812,150813],{"class":27,"line":59},[25,150814,2510],{"emptyLinePlaceholder":167},[25,150816,150817],{"class":27,"line":67},[25,150818,2510],{"emptyLinePlaceholder":167},[25,150820,150821,150823,150825],{"class":27,"line":75},[25,150822,14804],{"class":240},[25,150824,150583],{"class":31},[25,150826,3849],{"class":244},[25,150828,150829,150831,150833],{"class":27,"line":83},[25,150830,30872],{"class":240},[25,150832,150517],{"class":31},[25,150834,30878],{"class":244},[25,150836,150837,150839,150841,150843],{"class":27,"line":91},[25,150838,32522],{"class":35},[25,150840,245],{"class":244},[25,150842,150606],{"class":45},[25,150844,251],{"class":244},[25,150846,150847],{"class":27,"line":1429},[25,150848,2510],{"emptyLinePlaceholder":167},[25,150850,150851],{"class":27,"line":1441},[25,150852,2510],{"emptyLinePlaceholder":167},[25,150854,150855,150857,150860],{"class":27,"line":1723},[25,150856,32018],{"class":240},[25,150858,150859],{"class":31}," make_sound",[25,150861,150862],{"class":244},"(animal):\n",[25,150864,150865],{"class":27,"line":1728},[25,150866,150867],{"class":244},"    animal.speak()\n",[25,150869,150870],{"class":27,"line":1734},[25,150871,2510],{"emptyLinePlaceholder":167},[25,150873,150874],{"class":27,"line":1739},[25,150875,2510],{"emptyLinePlaceholder":167},[25,150877,150878],{"class":27,"line":1753},[25,150879,150880],{"class":244},"make_sound(Dog())\n",[25,150882,150883],{"class":27,"line":1758},[25,150884,150885],{"class":244},"make_sound(Cat())\n",[99,150887,150888],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[182,150890,150892],{"id":150891},"_1112-类属性和实例属性","11.12 类属性和实例属性",[99,150894,150895],{},"实例属性属于对象：",[15,150897,150899],{"className":30449,"code":150898,"language":30451,"meta":20,"style":20},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[22,150900,150901,150909,150917],{"__ignoreMap":20},[25,150902,150903,150905,150907],{"class":27,"line":28},[25,150904,14804],{"class":240},[25,150906,8008],{"class":31},[25,150908,3849],{"class":244},[25,150910,150911,150913,150915],{"class":27,"line":39},[25,150912,30872],{"class":240},[25,150914,30875],{"class":35},[25,150916,150681],{"class":244},[25,150918,150919,150921,150923,150925],{"class":27,"line":51},[25,150920,30916],{"class":35},[25,150922,149861],{"class":244},[25,150924,290],{"class":240},[25,150926,149866],{"class":244},[99,150928,150929],{},"类属性属于类，所有对象共享：",[15,150931,150933],{"className":30449,"code":150932,"language":30451,"meta":20,"style":20},"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",[22,150934,150935,150943,150953,150957,150965,150975,150979,150983,150996,151010,151014,151021,151028],{"__ignoreMap":20},[25,150936,150937,150939,150941],{"class":27,"line":28},[25,150938,14804],{"class":240},[25,150940,8008],{"class":31},[25,150942,3849],{"class":244},[25,150944,150945,150948,150950],{"class":27,"line":39},[25,150946,150947],{"class":244},"    school ",[25,150949,290],{"class":240},[25,150951,150952],{"class":45}," \"黑马学校\"\n",[25,150954,150955],{"class":27,"line":51},[25,150956,2510],{"emptyLinePlaceholder":167},[25,150958,150959,150961,150963],{"class":27,"line":59},[25,150960,30872],{"class":240},[25,150962,30875],{"class":35},[25,150964,150681],{"class":244},[25,150966,150967,150969,150971,150973],{"class":27,"line":67},[25,150968,30916],{"class":35},[25,150970,149861],{"class":244},[25,150972,290],{"class":240},[25,150974,149866],{"class":244},[25,150976,150977],{"class":27,"line":75},[25,150978,2510],{"emptyLinePlaceholder":167},[25,150980,150981],{"class":27,"line":83},[25,150982,2510],{"emptyLinePlaceholder":167},[25,150984,150985,150988,150990,150992,150994],{"class":27,"line":91},[25,150986,150987],{"class":244},"s1 ",[25,150989,290],{"class":240},[25,150991,149956],{"class":244},[25,150993,149959],{"class":45},[25,150995,251],{"class":244},[25,150997,150998,151001,151003,151005,151008],{"class":27,"line":1429},[25,150999,151000],{"class":244},"s2 ",[25,151002,290],{"class":240},[25,151004,149956],{"class":244},[25,151006,151007],{"class":45},"\"小红\"",[25,151009,251],{"class":244},[25,151011,151012],{"class":27,"line":1441},[25,151013,2510],{"emptyLinePlaceholder":167},[25,151015,151016,151018],{"class":27,"line":1723},[25,151017,30486],{"class":35},[25,151019,151020],{"class":244},"(s1.school)\n",[25,151022,151023,151025],{"class":27,"line":1728},[25,151024,30486],{"class":35},[25,151026,151027],{"class":244},"(s2.school)\n",[25,151029,151030,151032],{"class":27,"line":1734},[25,151031,30486],{"class":35},[25,151033,151034],{"class":244},"(Student.school)\n",[99,151036,151037],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[182,151039,151041],{"id":151040},"_1113-类方法和静态方法","11.13 类方法和静态方法",[210,151043,151045],{"id":151044},"_11131-类方法","11.13.1 类方法",[99,151047,151048,151049,151052,151053,28456],{},"类方法使用 ",[22,151050,151051],{},"@classmethod","，第一个参数通常是 ",[22,151054,151055],{},"cls",[15,151057,151059],{"className":30449,"code":151058,"language":30451,"meta":20,"style":20},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[22,151060,151061,151069,151077,151081,151089,151099,151109,151113,151117],{"__ignoreMap":20},[25,151062,151063,151065,151067],{"class":27,"line":28},[25,151064,14804],{"class":240},[25,151066,8008],{"class":31},[25,151068,3849],{"class":244},[25,151070,151071,151073,151075],{"class":27,"line":39},[25,151072,150947],{"class":244},[25,151074,290],{"class":240},[25,151076,150952],{"class":45},[25,151078,151079],{"class":27,"line":51},[25,151080,2510],{"emptyLinePlaceholder":167},[25,151082,151083,151086],{"class":27,"line":59},[25,151084,151085],{"class":31},"    @",[25,151087,151088],{"class":35},"classmethod\n",[25,151090,151091,151093,151096],{"class":27,"line":67},[25,151092,30872],{"class":240},[25,151094,151095],{"class":31}," get_school",[25,151097,151098],{"class":244},"(cls):\n",[25,151100,151101,151103,151106],{"class":27,"line":75},[25,151102,14862],{"class":240},[25,151104,151105],{"class":35}," cls",[25,151107,151108],{"class":244},".school\n",[25,151110,151111],{"class":27,"line":83},[25,151112,2510],{"emptyLinePlaceholder":167},[25,151114,151115],{"class":27,"line":91},[25,151116,2510],{"emptyLinePlaceholder":167},[25,151118,151119,151121],{"class":27,"line":1429},[25,151120,30486],{"class":35},[25,151122,151123],{"class":244},"(Student.get_school())\n",[210,151125,151127],{"id":151126},"_11132-静态方法","11.13.2 静态方法",[99,151129,151130,151131,151134],{},"静态方法使用 ",[22,151132,151133],{},"@staticmethod","，不需要访问实例和类。",[15,151136,151138],{"className":30449,"code":151137,"language":30451,"meta":20,"style":20},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[22,151139,151140,151149,151156,151165,151176,151180,151184],{"__ignoreMap":20},[25,151141,151142,151144,151147],{"class":27,"line":28},[25,151143,14804],{"class":240},[25,151145,151146],{"class":31}," MathUtils",[25,151148,3849],{"class":244},[25,151150,151151,151153],{"class":27,"line":39},[25,151152,151085],{"class":31},[25,151154,151155],{"class":35},"staticmethod\n",[25,151157,151158,151160,151162],{"class":27,"line":51},[25,151159,30872],{"class":240},[25,151161,5319],{"class":31},[25,151163,151164],{"class":244},"(a, b):\n",[25,151166,151167,151169,151171,151173],{"class":27,"line":59},[25,151168,14862],{"class":240},[25,151170,10979],{"class":244},[25,151172,724],{"class":240},[25,151174,151175],{"class":244}," b\n",[25,151177,151178],{"class":27,"line":67},[25,151179,2510],{"emptyLinePlaceholder":167},[25,151181,151182],{"class":27,"line":75},[25,151183,2510],{"emptyLinePlaceholder":167},[25,151185,151186,151188,151191,151193,151195,151197],{"class":27,"line":83},[25,151187,30486],{"class":35},[25,151189,151190],{"class":244},"(MathUtils.add(",[25,151192,460],{"class":35},[25,151194,12545],{"class":244},[25,151196,321],{"class":35},[25,151198,30568],{"class":244},[99,151200,151201],{},"静态方法本质上是放在类命名空间里的普通函数。",[182,151203,151205],{"id":151204},"_1114-dataclass","11.14 dataclass",[99,151207,151208,151211],{},[22,151209,151210],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[15,151213,151215],{"className":30449,"code":151214,"language":30451,"meta":20,"style":20},"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",[22,151216,151217,151229,151233,151237,151242,151250,151258,151266,151274,151278,151282,151302],{"__ignoreMap":20},[25,151218,151219,151221,151224,151226],{"class":27,"line":28},[25,151220,30808],{"class":240},[25,151222,151223],{"class":244}," dataclasses ",[25,151225,30463],{"class":240},[25,151227,151228],{"class":244}," dataclass\n",[25,151230,151231],{"class":27,"line":39},[25,151232,2510],{"emptyLinePlaceholder":167},[25,151234,151235],{"class":27,"line":51},[25,151236,2510],{"emptyLinePlaceholder":167},[25,151238,151239],{"class":27,"line":59},[25,151240,151241],{"class":31},"@dataclass\n",[25,151243,151244,151246,151248],{"class":27,"line":67},[25,151245,14804],{"class":240},[25,151247,8008],{"class":31},[25,151249,3849],{"class":244},[25,151251,151252,151255],{"class":27,"line":75},[25,151253,151254],{"class":244},"    name: ",[25,151256,151257],{"class":35},"str\n",[25,151259,151260,151263],{"class":27,"line":83},[25,151261,151262],{"class":244},"    age: ",[25,151264,151265],{"class":35},"int\n",[25,151267,151268,151271],{"class":27,"line":91},[25,151269,151270],{"class":244},"    score: ",[25,151272,151273],{"class":35},"float\n",[25,151275,151276],{"class":27,"line":1429},[25,151277,2510],{"emptyLinePlaceholder":167},[25,151279,151280],{"class":27,"line":1441},[25,151281,2510],{"emptyLinePlaceholder":167},[25,151283,151284,151286,151288,151290,151292,151294,151296,151298,151300],{"class":27,"line":1723},[25,151285,149552],{"class":244},[25,151287,290],{"class":240},[25,151289,149956],{"class":244},[25,151291,149959],{"class":45},[25,151293,12545],{"class":244},[25,151295,893],{"class":35},[25,151297,12545],{"class":244},[25,151299,1232],{"class":35},[25,151301,251],{"class":244},[25,151303,151304,151306],{"class":27,"line":1728},[25,151305,30486],{"class":35},[25,151307,150113],{"class":244},[99,151309,151310,151311,455,151313,151316],{},"它会自动生成 ",[22,151312,30900],{},[22,151314,151315],{},"__repr__"," 等方法。适合数据模型类。",[182,151318,151320],{"id":151319},"_1115-小案例学生类","11.15 小案例：学生类",[15,151322,151324],{"className":30449,"code":151323,"language":30451,"meta":20,"style":20},"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",[22,151325,151326,151334,151343,151355,151365,151375,151385,151389,151398,151411,151415,151424,151430,151442,151454,151466,151478,151482,151486,151492,151502,151511,151521,151529,151537,151546,151550,151554,151562,151598,151602,151606,151631,151638],{"__ignoreMap":20},[25,151327,151328,151330,151332],{"class":27,"line":28},[25,151329,14804],{"class":240},[25,151331,8008],{"class":31},[25,151333,3849],{"class":244},[25,151335,151336,151338,151340],{"class":27,"line":39},[25,151337,30872],{"class":240},[25,151339,30875],{"class":35},[25,151341,151342],{"class":244},"(self, student_id, name, age, score):\n",[25,151344,151345,151347,151350,151352],{"class":27,"line":51},[25,151346,30916],{"class":35},[25,151348,151349],{"class":244},".student_id ",[25,151351,290],{"class":240},[25,151353,151354],{"class":244}," student_id\n",[25,151356,151357,151359,151361,151363],{"class":27,"line":59},[25,151358,30916],{"class":35},[25,151360,149861],{"class":244},[25,151362,290],{"class":240},[25,151364,149866],{"class":244},[25,151366,151367,151369,151371,151373],{"class":27,"line":67},[25,151368,30916],{"class":35},[25,151370,149873],{"class":244},[25,151372,290],{"class":240},[25,151374,149878],{"class":244},[25,151376,151377,151379,151381,151383],{"class":27,"line":75},[25,151378,30916],{"class":35},[25,151380,149885],{"class":244},[25,151382,290],{"class":240},[25,151384,1690],{"class":244},[25,151386,151387],{"class":27,"line":83},[25,151388,2510],{"emptyLinePlaceholder":167},[25,151390,151391,151393,151396],{"class":27,"line":91},[25,151392,30872],{"class":240},[25,151394,151395],{"class":31}," is_passed",[25,151397,30878],{"class":244},[25,151399,151400,151402,151404,151406,151408],{"class":27,"line":1429},[25,151401,14862],{"class":240},[25,151403,38944],{"class":35},[25,151405,149885],{"class":244},[25,151407,1821],{"class":240},[25,151409,151410],{"class":35}," 60\n",[25,151412,151413],{"class":27,"line":1441},[25,151414,2510],{"emptyLinePlaceholder":167},[25,151416,151417,151419,151422],{"class":27,"line":1723},[25,151418,30872],{"class":240},[25,151420,151421],{"class":31}," to_dict",[25,151423,30878],{"class":244},[25,151425,151426,151428],{"class":27,"line":1728},[25,151427,14862],{"class":240},[25,151429,15682],{"class":244},[25,151431,151432,151435,151437,151439],{"class":27,"line":1734},[25,151433,151434],{"class":45},"            \"student_id\"",[25,151436,51508],{"class":244},[25,151438,30894],{"class":35},[25,151440,151441],{"class":244},".student_id,\n",[25,151443,151444,151447,151449,151451],{"class":27,"line":1739},[25,151445,151446],{"class":45},"            \"name\"",[25,151448,51508],{"class":244},[25,151450,30894],{"class":35},[25,151452,151453],{"class":244},".name,\n",[25,151455,151456,151459,151461,151463],{"class":27,"line":1753},[25,151457,151458],{"class":45},"            \"age\"",[25,151460,51508],{"class":244},[25,151462,30894],{"class":35},[25,151464,151465],{"class":244},".age,\n",[25,151467,151468,151471,151473,151475],{"class":27,"line":1758},[25,151469,151470],{"class":45},"            \"score\"",[25,151472,51508],{"class":244},[25,151474,30894],{"class":35},[25,151476,151477],{"class":244},".score,\n",[25,151479,151480],{"class":27,"line":1764},[25,151481,2639],{"class":244},[25,151483,151484],{"class":27,"line":1785},[25,151485,2510],{"emptyLinePlaceholder":167},[25,151487,151488,151490],{"class":27,"line":1790},[25,151489,151085],{"class":31},[25,151491,151088],{"class":35},[25,151493,151494,151496,151499],{"class":27,"line":1804},[25,151495,30872],{"class":240},[25,151497,151498],{"class":31}," from_dict",[25,151500,151501],{"class":244},"(cls, data):\n",[25,151503,151504,151506,151508],{"class":27,"line":1809},[25,151505,14862],{"class":240},[25,151507,151105],{"class":35},[25,151509,151510],{"class":244},"(\n",[25,151512,151513,151516,151519],{"class":27,"line":1838},[25,151514,151515],{"class":244},"            data[",[25,151517,151518],{"class":45},"\"student_id\"",[25,151520,87907],{"class":244},[25,151522,151523,151525,151527],{"class":27,"line":1843},[25,151524,151515],{"class":244},[25,151526,62750],{"class":45},[25,151528,87907],{"class":244},[25,151530,151531,151533,151535],{"class":27,"line":1860},[25,151532,151515],{"class":244},[25,151534,69195],{"class":45},[25,151536,87907],{"class":244},[25,151538,151539,151541,151544],{"class":27,"line":1865},[25,151540,151515],{"class":244},[25,151542,151543],{"class":45},"\"score\"",[25,151545,87907],{"class":244},[25,151547,151548],{"class":27,"line":1870},[25,151549,38197],{"class":244},[25,151551,151552],{"class":27,"line":1875},[25,151553,2510],{"emptyLinePlaceholder":167},[25,151555,151556,151558,151560],{"class":27,"line":1889},[25,151557,30872],{"class":240},[25,151559,150052],{"class":35},[25,151561,30878],{"class":244},[25,151563,151564,151566,151568,151570,151572,151575,151577,151580,151582,151584,151586,151588,151590,151592,151594,151596],{"class":27,"line":1894},[25,151565,14862],{"class":240},[25,151567,150061],{"class":240},[25,151569,494],{"class":45},[25,151571,149523],{"class":35},[25,151573,151574],{"class":244},".student_id",[25,151576,1189],{"class":35},[25,151578,151579],{"class":35}," {self",[25,151581,80372],{"class":244},[25,151583,1189],{"class":35},[25,151585,151579],{"class":35},[25,151587,80384],{"class":244},[25,151589,1189],{"class":35},[25,151591,151579],{"class":35},[25,151593,149933],{"class":244},[25,151595,1189],{"class":35},[25,151597,25240],{"class":45},[25,151599,151600],{"class":27,"line":2687},[25,151601,2510],{"emptyLinePlaceholder":167},[25,151603,151604],{"class":27,"line":2701},[25,151605,2510],{"emptyLinePlaceholder":167},[25,151607,151608,151610,151612,151614,151617,151619,151621,151623,151625,151627,151629],{"class":27,"line":2709},[25,151609,149552],{"class":244},[25,151611,290],{"class":240},[25,151613,149956],{"class":244},[25,151615,151616],{"class":45},"\"001\"",[25,151618,12545],{"class":244},[25,151620,149959],{"class":45},[25,151622,12545],{"class":244},[25,151624,893],{"class":35},[25,151626,12545],{"class":244},[25,151628,1232],{"class":35},[25,151630,251],{"class":244},[25,151632,151633,151635],{"class":27,"line":2714},[25,151634,30486],{"class":35},[25,151636,151637],{"class":244},"(student.is_passed())\n",[25,151639,151640,151642],{"class":27,"line":2720},[25,151641,30486],{"class":35},[25,151643,151644],{"class":244},"(student.to_dict())\n",[99,151646,151647,101089,151650,151653],{},[22,151648,151649],{},"to_dict()",[22,151651,151652],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[182,151655,151657],{"id":151656},"_1116-易错点","11.16 易错点",[194,151659,151660,151666,151672,151677,151680,151683],{},[106,151661,151662,151663,28456],{},"类名推荐使用大驼峰，如 ",[22,151664,151665],{},"StudentManager",[106,151667,151668,151669,151671],{},"方法第一个参数必须写 ",[22,151670,30894],{},"，调用时不用传。",[106,151673,151674,151676],{},[22,151675,30900],{}," 不是普通方法，它在创建对象时自动执行。",[106,151678,151679],{},"私有属性不是绝对安全，只是约定和名称改写。",[106,151681,151682],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[106,151684,151685],{},"类中方法太多时，说明职责可能过重。",[182,151687,151689],{"id":151688},"_1117-本章练习","11.17 本章练习",[194,151691,151692,151698,151704,151709,151722],{},[106,151693,151694,151695,151697],{},"定义 ",[22,151696,149639],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[106,151699,151694,151700,151703],{},[22,151701,151702],{},"Account"," 类，实现存款、取款、查询余额。",[106,151705,151694,151706,151708],{},[22,151707,17336],{}," 类，计算圆的周长和面积。",[106,151710,151694,151711,455,151714,151717,151718,151721],{},[22,151712,151713],{},"Dog",[22,151715,151716],{},"Cat"," 类，并用同一个函数调用它们的 ",[22,151719,151720],{},"speak()"," 方法。",[106,151723,104437,151724,151726,151727,28456],{},[22,151725,151210],{}," 定义一个商品类 ",[22,151728,151729],{},"Product",[159,151731,151732],{},"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":20,"searchDepth":39,"depth":39,"links":151734},[151735,151736,151737,151738,151739,151740,151742,151743,151744,151745,151746,151747,151748,151752,151753,151754,151755],{"id":149403,"depth":39,"text":149404},{"id":149586,"depth":39,"text":149587},{"id":149650,"depth":39,"text":149651},{"id":149727,"depth":39,"text":149728},{"id":149826,"depth":39,"text":149827},{"id":149990,"depth":39,"text":151741},"11.6 str",{"id":150116,"depth":39,"text":150117},{"id":150382,"depth":39,"text":150383},{"id":150496,"depth":39,"text":150497},{"id":150651,"depth":39,"text":150652},{"id":150775,"depth":39,"text":150776},{"id":150891,"depth":39,"text":150892},{"id":151040,"depth":39,"text":151041,"children":151749},[151750,151751],{"id":151044,"depth":51,"text":151045},{"id":151126,"depth":51,"text":151127},{"id":151204,"depth":39,"text":151205},{"id":151319,"depth":39,"text":151320},{"id":151656,"depth":39,"text":151657},{"id":151688,"depth":39,"text":151689},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149395,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151762,"title":151763,"body":151764,"description":164,"extension":165,"meta":155077,"navigation":167,"path":155078,"seo":155079,"stem":155080,"__hash__":155081},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151765,"toc":155053},[151766,151769,151773,151776,151779,151808,151811,151819,151823,151827,151830,151853,151856,151862,151866,153312,153315,153336,153340,153343,153355,153358,153542,153545,153671,153674,153678,153682,153818,153822,153908,153912,153994,153998,154035,154039,154228,154232,154235,154465,154469,154472,154653,154656,154660,154663,154669,154672,154698,154702,154705,154719,154722,154747,154750,154764,154767,154784,154787,154804,154807,154824,154828,154854,154858,154881,154885,154888,154890,154896,154898,154919,154922,154928,154934,154938,154941,155017,155020,155024,155050],[10,151767,151763],{"id":151768},"_12-综合案例与复习路线",[182,151770,151772],{"id":151771},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[99,151774,151775],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[99,151777,151778],{},"一个合格的入门综合项目最好覆盖：",[194,151780,151781,151784,151787,151790,151793,151796,151799,151802,151805],{},[106,151782,151783],{},"输入输出。",[106,151785,151786],{},"判断和循环。",[106,151788,151789],{},"函数拆分。",[106,151791,151792],{},"列表、字典等容器。",[106,151794,151795],{},"文件持久化。",[106,151797,151798],{},"异常处理。",[106,151800,151801],{},"模块拆分。",[106,151803,151804],{},"可选：面向对象。",[106,151806,151807],{},"可选：数据可视化。",[99,151809,151810],{},"本章整理两个方向：",[194,151812,151813,151816],{},[106,151814,151815],{},"学生管理系统。",[106,151817,151818],{},"销售数据统计和可视化。",[182,151820,151822],{"id":151821},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[210,151824,151826],{"id":151825},"_1221-需求","12.2.1 需求",[99,151828,151829],{},"实现一个命令行学生管理系统：",[194,151831,151832,151835,151838,151841,151844,151847,151850],{},[106,151833,151834],{},"添加学生。",[106,151836,151837],{},"删除学生。",[106,151839,151840],{},"修改学生。",[106,151842,151843],{},"查询学生。",[106,151845,151846],{},"显示所有学生。",[106,151848,151849],{},"保存到 JSON 文件。",[106,151851,151852],{},"程序启动时自动读取 JSON 文件。",[99,151854,151855],{},"学生字段：",[15,151857,151860],{"className":151858,"code":151859,"language":5297,"meta":20},[5295],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[22,151861,151859],{"__ignoreMap":20},[182,151863,151865],{"id":151864},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[15,151867,151869],{"className":30449,"code":151868,"language":30451,"meta":20,"style":20},"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",[22,151870,151871,151877,151887,151891,151905,151909,151913,151922,151934,151940,151944,151950,151981,151991,151998,152009,152015,152019,152023,152033,152064,152090,152094,152098,152107,152118,152129,152140,152151,152162,152173,152184,152188,152192,152202,152214,152230,152237,152244,152248,152252,152262,152270,152277,152290,152300,152311,152315,152319,152328,152336,152342,152354,152362,152373,152377,152381,152390,152406,152410,152417,152428,152433,152437,152453,152468,152483,152487,152492,152500,152508,152516,152524,152528,152533,152544,152548,152552,152561,152576,152586,152590,152602,152613,152617,152621,152626,152630,152641,152645,152649,152658,152673,152681,152685,152697,152707,152711,152715,152730,152743,152756,152760,152773,152785,152797,152801,152805,152816,152820,152824,152833,152848,152856,152860,152872,152882,152886,152890,152895,152899,152903,152913,152919,152941,152960,152979,152998,153003,153007,153011,153020,153028,153039,153043,153047,153073,153083,153088,153092,153096,153104,153114,153118,153126,153131,153147,153151,153165,153170,153184,153189,153202,153207,153220,153225,153238,153243,153256,153267,153271,153277,153288,153292,153296,153308],{"__ignoreMap":20},[25,151872,151873,151875],{"class":27,"line":28},[25,151874,30463],{"class":240},[25,151876,147162],{"class":244},[25,151878,151879,151881,151883,151885],{"class":27,"line":39},[25,151880,30808],{"class":240},[25,151882,108382],{"class":244},[25,151884,30463],{"class":240},[25,151886,108387],{"class":244},[25,151888,151889],{"class":27,"line":51},[25,151890,2510],{"emptyLinePlaceholder":167},[25,151892,151893,151896,151898,151900,151903],{"class":27,"line":59},[25,151894,151895],{"class":35},"DATA_FILE",[25,151897,13674],{"class":240},[25,151899,108616],{"class":244},[25,151901,151902],{"class":45},"\"students.json\"",[25,151904,251],{"class":244},[25,151906,151907],{"class":27,"line":67},[25,151908,2510],{"emptyLinePlaceholder":167},[25,151910,151911],{"class":27,"line":75},[25,151912,2510],{"emptyLinePlaceholder":167},[25,151914,151915,151917,151920],{"class":27,"line":83},[25,151916,32018],{"class":240},[25,151918,151919],{"class":31}," load_students",[25,151921,32024],{"class":244},[25,151923,151924,151926,151928,151931],{"class":27,"line":91},[25,151925,3211],{"class":240},[25,151927,39001],{"class":240},[25,151929,151930],{"class":35}," DATA_FILE",[25,151932,151933],{"class":244},".exists():\n",[25,151935,151936,151938],{"class":27,"line":1429},[25,151937,14862],{"class":240},[25,151939,51909],{"class":244},[25,151941,151942],{"class":27,"line":1441},[25,151943,2510],{"emptyLinePlaceholder":167},[25,151945,151946,151948],{"class":27,"line":1723},[25,151947,125855],{"class":240},[25,151949,3849],{"class":244},[25,151951,151952,151955,151957,151959,151961,151963,151965,151967,151969,151971,151973,151975,151977,151979],{"class":27,"line":1728},[25,151953,151954],{"class":240},"        with",[25,151956,146862],{"class":35},[25,151958,245],{"class":244},[25,151960,151895],{"class":35},[25,151962,12545],{"class":244},[25,151964,146872],{"class":45},[25,151966,12545],{"class":244},[25,151968,146877],{"class":5326},[25,151970,290],{"class":240},[25,151972,146882],{"class":45},[25,151974,13824],{"class":244},[25,151976,31454],{"class":240},[25,151978,148224],{"class":5326},[25,151980,3849],{"class":244},[25,151982,151983,151985,151987,151989],{"class":27,"line":1734},[25,151984,15842],{"class":240},[25,151986,148235],{"class":244},[25,151988,45425],{"class":5326},[25,151990,251],{"class":244},[25,151992,151993,151995],{"class":27,"line":1739},[25,151994,125883],{"class":240},[25,151996,151997],{"class":244}," json.JSONDecodeError:\n",[25,151999,152000,152002,152004,152007],{"class":27,"line":1753},[25,152001,32522],{"class":35},[25,152003,245],{"class":244},[25,152005,152006],{"class":45},"\"数据文件格式错误，已使用空数据启动\"",[25,152008,251],{"class":244},[25,152010,152011,152013],{"class":27,"line":1758},[25,152012,14862],{"class":240},[25,152014,51909],{"class":244},[25,152016,152017],{"class":27,"line":1764},[25,152018,2510],{"emptyLinePlaceholder":167},[25,152020,152021],{"class":27,"line":1785},[25,152022,2510],{"emptyLinePlaceholder":167},[25,152024,152025,152027,152030],{"class":27,"line":1790},[25,152026,32018],{"class":240},[25,152028,152029],{"class":31}," save_students",[25,152031,152032],{"class":244},"(students):\n",[25,152034,152035,152037,152039,152041,152043,152045,152048,152050,152052,152054,152056,152058,152060,152062],{"class":27,"line":1804},[25,152036,34249],{"class":240},[25,152038,146862],{"class":35},[25,152040,245],{"class":244},[25,152042,151895],{"class":35},[25,152044,12545],{"class":244},[25,152046,152047],{"class":45},"\"w\"",[25,152049,12545],{"class":244},[25,152051,146877],{"class":5326},[25,152053,290],{"class":240},[25,152055,146882],{"class":45},[25,152057,13824],{"class":244},[25,152059,31454],{"class":240},[25,152061,148224],{"class":5326},[25,152063,3849],{"class":244},[25,152065,152066,152069,152071,152073,152075,152077,152079,152081,152084,152086,152088],{"class":27,"line":1809},[25,152067,152068],{"class":244},"        json.dump(students, ",[25,152070,45425],{"class":5326},[25,152072,12545],{"class":244},[25,152074,147208],{"class":5326},[25,152076,290],{"class":240},[25,152078,34058],{"class":35},[25,152080,12545],{"class":244},[25,152082,152083],{"class":5326},"indent",[25,152085,290],{"class":240},[25,152087,321],{"class":35},[25,152089,251],{"class":244},[25,152091,152092],{"class":27,"line":1838},[25,152093,2510],{"emptyLinePlaceholder":167},[25,152095,152096],{"class":27,"line":1843},[25,152097,2510],{"emptyLinePlaceholder":167},[25,152099,152100,152102,152105],{"class":27,"line":1860},[25,152101,32018],{"class":240},[25,152103,152104],{"class":31}," show_menu",[25,152106,32024],{"class":244},[25,152108,152109,152111,152113,152116],{"class":27,"line":1865},[25,152110,31370],{"class":35},[25,152112,245],{"class":244},[25,152114,152115],{"class":45},"\"====== 学生管理系统 ======\"",[25,152117,251],{"class":244},[25,152119,152120,152122,152124,152127],{"class":27,"line":1870},[25,152121,31370],{"class":35},[25,152123,245],{"class":244},[25,152125,152126],{"class":45},"\"1. 添加学生\"",[25,152128,251],{"class":244},[25,152130,152131,152133,152135,152138],{"class":27,"line":1875},[25,152132,31370],{"class":35},[25,152134,245],{"class":244},[25,152136,152137],{"class":45},"\"2. 删除学生\"",[25,152139,251],{"class":244},[25,152141,152142,152144,152146,152149],{"class":27,"line":1889},[25,152143,31370],{"class":35},[25,152145,245],{"class":244},[25,152147,152148],{"class":45},"\"3. 修改学生\"",[25,152150,251],{"class":244},[25,152152,152153,152155,152157,152160],{"class":27,"line":1894},[25,152154,31370],{"class":35},[25,152156,245],{"class":244},[25,152158,152159],{"class":45},"\"4. 查询学生\"",[25,152161,251],{"class":244},[25,152163,152164,152166,152168,152171],{"class":27,"line":2687},[25,152165,31370],{"class":35},[25,152167,245],{"class":244},[25,152169,152170],{"class":45},"\"5. 显示所有学生\"",[25,152172,251],{"class":244},[25,152174,152175,152177,152179,152182],{"class":27,"line":2701},[25,152176,31370],{"class":35},[25,152178,245],{"class":244},[25,152180,152181],{"class":45},"\"0. 退出系统\"",[25,152183,251],{"class":244},[25,152185,152186],{"class":27,"line":2709},[25,152187,2510],{"emptyLinePlaceholder":167},[25,152189,152190],{"class":27,"line":2714},[25,152191,2510],{"emptyLinePlaceholder":167},[25,152193,152194,152196,152199],{"class":27,"line":2720},[25,152195,32018],{"class":240},[25,152197,152198],{"class":31}," find_student",[25,152200,152201],{"class":244},"(students, student_id):\n",[25,152203,152204,152206,152209,152211],{"class":27,"line":2726},[25,152205,3311],{"class":240},[25,152207,152208],{"class":244}," student ",[25,152210,26114],{"class":240},[25,152212,152213],{"class":244}," students:\n",[25,152215,152216,152218,152221,152223,152225,152227],{"class":27,"line":2731},[25,152217,2607],{"class":240},[25,152219,152220],{"class":244}," student[",[25,152222,151518],{"class":45},[25,152224,4553],{"class":244},[25,152226,3059],{"class":240},[25,152228,152229],{"class":244}," student_id:\n",[25,152231,152232,152234],{"class":27,"line":8058},[25,152233,15842],{"class":240},[25,152235,152236],{"class":244}," student\n",[25,152238,152239,152241],{"class":27,"line":8082},[25,152240,4200],{"class":240},[25,152242,152243],{"class":35}," None\n",[25,152245,152246],{"class":27,"line":8087},[25,152247,2510],{"emptyLinePlaceholder":167},[25,152249,152250],{"class":27,"line":8093},[25,152251,2510],{"emptyLinePlaceholder":167},[25,152253,152254,152256,152259],{"class":27,"line":8120},[25,152255,32018],{"class":240},[25,152257,152258],{"class":31}," input_int",[25,152260,152261],{"class":244},"(prompt):\n",[25,152263,152264,152266,152268],{"class":27,"line":8125},[25,152265,2361],{"class":240},[25,152267,95363],{"class":35},[25,152269,3849],{"class":244},[25,152271,152272,152275],{"class":27,"line":8131},[25,152273,152274],{"class":240},"        try",[25,152276,3849],{"class":244},[25,152278,152279,152281,152283,152285,152287],{"class":27,"line":8143},[25,152280,15842],{"class":240},[25,152282,2492],{"class":35},[25,152284,245],{"class":244},[25,152286,53892],{"class":35},[25,152288,152289],{"class":244},"(prompt))\n",[25,152291,152292,152295,152298],{"class":27,"line":8155},[25,152293,152294],{"class":240},"        except",[25,152296,152297],{"class":35}," ValueError",[25,152299,3849],{"class":244},[25,152301,152302,152304,152306,152309],{"class":27,"line":8167},[25,152303,34721],{"class":35},[25,152305,245],{"class":244},[25,152307,152308],{"class":45},"\"请输入整数\"",[25,152310,251],{"class":244},[25,152312,152313],{"class":27,"line":9826},[25,152314,2510],{"emptyLinePlaceholder":167},[25,152316,152317],{"class":27,"line":9851},[25,152318,2510],{"emptyLinePlaceholder":167},[25,152320,152321,152323,152326],{"class":27,"line":9874},[25,152322,32018],{"class":240},[25,152324,152325],{"class":31}," input_float",[25,152327,152261],{"class":244},[25,152329,152330,152332,152334],{"class":27,"line":9898},[25,152331,2361],{"class":240},[25,152333,95363],{"class":35},[25,152335,3849],{"class":244},[25,152337,152338,152340],{"class":27,"line":9903},[25,152339,152274],{"class":240},[25,152341,3849],{"class":244},[25,152343,152344,152346,152348,152350,152352],{"class":27,"line":9908},[25,152345,15842],{"class":240},[25,152347,109868],{"class":35},[25,152349,245],{"class":244},[25,152351,53892],{"class":35},[25,152353,152289],{"class":244},[25,152355,152356,152358,152360],{"class":27,"line":9913},[25,152357,152294],{"class":240},[25,152359,152297],{"class":35},[25,152361,3849],{"class":244},[25,152363,152364,152366,152368,152371],{"class":27,"line":9922},[25,152365,34721],{"class":35},[25,152367,245],{"class":244},[25,152369,152370],{"class":45},"\"请输入数字\"",[25,152372,251],{"class":244},[25,152374,152375],{"class":27,"line":9927},[25,152376,2510],{"emptyLinePlaceholder":167},[25,152378,152379],{"class":27,"line":9933},[25,152380,2510],{"emptyLinePlaceholder":167},[25,152382,152383,152385,152388],{"class":27,"line":9954},[25,152384,32018],{"class":240},[25,152386,152387],{"class":31}," add_student",[25,152389,152032],{"class":244},[25,152391,152392,152395,152397,152399,152401,152404],{"class":27,"line":9960},[25,152393,152394],{"class":244},"    student_id ",[25,152396,290],{"class":240},[25,152398,60676],{"class":35},[25,152400,245],{"class":244},[25,152402,152403],{"class":45},"\"请输入学号:\"",[25,152405,251],{"class":244},[25,152407,152408],{"class":27,"line":9974},[25,152409,2510],{"emptyLinePlaceholder":167},[25,152411,152412,152414],{"class":27,"line":9980},[25,152413,3211],{"class":240},[25,152415,152416],{"class":244}," find_student(students, student_id):\n",[25,152418,152419,152421,152423,152426],{"class":27,"line":10007},[25,152420,32522],{"class":35},[25,152422,245],{"class":244},[25,152424,152425],{"class":45},"\"学号已存在\"",[25,152427,251],{"class":244},[25,152429,152430],{"class":27,"line":10016},[25,152431,152432],{"class":240},"        return\n",[25,152434,152435],{"class":27,"line":10022},[25,152436,2510],{"emptyLinePlaceholder":167},[25,152438,152439,152442,152444,152446,152448,152451],{"class":27,"line":10030},[25,152440,152441],{"class":244},"    name ",[25,152443,290],{"class":240},[25,152445,60676],{"class":35},[25,152447,245],{"class":244},[25,152449,152450],{"class":45},"\"请输入姓名:\"",[25,152452,251],{"class":244},[25,152454,152455,152458,152460,152463,152466],{"class":27,"line":10035},[25,152456,152457],{"class":244},"    age ",[25,152459,290],{"class":240},[25,152461,152462],{"class":244}," input_int(",[25,152464,152465],{"class":45},"\"请输入年龄:\"",[25,152467,251],{"class":244},[25,152469,152470,152473,152475,152478,152481],{"class":27,"line":16714},[25,152471,152472],{"class":244},"    score ",[25,152474,290],{"class":240},[25,152476,152477],{"class":244}," input_float(",[25,152479,152480],{"class":45},"\"请输入成绩:\"",[25,152482,251],{"class":244},[25,152484,152485],{"class":27,"line":16720},[25,152486,2510],{"emptyLinePlaceholder":167},[25,152488,152489],{"class":27,"line":16743},[25,152490,152491],{"class":244},"    students.append({\n",[25,152493,152494,152497],{"class":27,"line":16749},[25,152495,152496],{"class":45},"        \"student_id\"",[25,152498,152499],{"class":244},": student_id,\n",[25,152501,152502,152505],{"class":27,"line":16772},[25,152503,152504],{"class":45},"        \"name\"",[25,152506,152507],{"class":244},": name,\n",[25,152509,152510,152513],{"class":27,"line":16786},[25,152511,152512],{"class":45},"        \"age\"",[25,152514,152515],{"class":244},": age,\n",[25,152517,152518,152521],{"class":27,"line":16806},[25,152519,152520],{"class":45},"        \"score\"",[25,152522,152523],{"class":244},": score,\n",[25,152525,152526],{"class":27,"line":16812},[25,152527,33532],{"class":244},[25,152529,152530],{"class":27,"line":16823},[25,152531,152532],{"class":244},"    save_students(students)\n",[25,152534,152535,152537,152539,152542],{"class":27,"line":16846},[25,152536,31370],{"class":35},[25,152538,245],{"class":244},[25,152540,152541],{"class":45},"\"添加成功\"",[25,152543,251],{"class":244},[25,152545,152546],{"class":27,"line":16868},[25,152547,2510],{"emptyLinePlaceholder":167},[25,152549,152550],{"class":27,"line":16873},[25,152551,2510],{"emptyLinePlaceholder":167},[25,152553,152554,152556,152559],{"class":27,"line":16879},[25,152555,32018],{"class":240},[25,152557,152558],{"class":31}," delete_student",[25,152560,152032],{"class":244},[25,152562,152563,152565,152567,152569,152571,152574],{"class":27,"line":16893},[25,152564,152394],{"class":244},[25,152566,290],{"class":240},[25,152568,60676],{"class":35},[25,152570,245],{"class":244},[25,152572,152573],{"class":45},"\"请输入要删除的学号:\"",[25,152575,251],{"class":244},[25,152577,152578,152581,152583],{"class":27,"line":16906},[25,152579,152580],{"class":244},"    student ",[25,152582,290],{"class":240},[25,152584,152585],{"class":244}," find_student(students, student_id)\n",[25,152587,152588],{"class":27,"line":16911},[25,152589,2510],{"emptyLinePlaceholder":167},[25,152591,152592,152594,152596,152598,152600],{"class":27,"line":16925},[25,152593,3211],{"class":240},[25,152595,152208],{"class":244},[25,152597,38998],{"class":240},[25,152599,39004],{"class":35},[25,152601,3849],{"class":244},[25,152603,152604,152606,152608,152611],{"class":27,"line":16930},[25,152605,32522],{"class":35},[25,152607,245],{"class":244},[25,152609,152610],{"class":45},"\"学生不存在\"",[25,152612,251],{"class":244},[25,152614,152615],{"class":27,"line":16936},[25,152616,152432],{"class":240},[25,152618,152619],{"class":27,"line":16941},[25,152620,2510],{"emptyLinePlaceholder":167},[25,152622,152623],{"class":27,"line":16955},[25,152624,152625],{"class":244},"    students.remove(student)\n",[25,152627,152628],{"class":27,"line":16960},[25,152629,152532],{"class":244},[25,152631,152632,152634,152636,152639],{"class":27,"line":16965},[25,152633,31370],{"class":35},[25,152635,245],{"class":244},[25,152637,152638],{"class":45},"\"删除成功\"",[25,152640,251],{"class":244},[25,152642,152643],{"class":27,"line":16979},[25,152644,2510],{"emptyLinePlaceholder":167},[25,152646,152647],{"class":27,"line":16991},[25,152648,2510],{"emptyLinePlaceholder":167},[25,152650,152651,152653,152656],{"class":27,"line":16996},[25,152652,32018],{"class":240},[25,152654,152655],{"class":31}," update_student",[25,152657,152032],{"class":244},[25,152659,152660,152662,152664,152666,152668,152671],{"class":27,"line":17009},[25,152661,152394],{"class":244},[25,152663,290],{"class":240},[25,152665,60676],{"class":35},[25,152667,245],{"class":244},[25,152669,152670],{"class":45},"\"请输入要修改的学号:\"",[25,152672,251],{"class":244},[25,152674,152675,152677,152679],{"class":27,"line":17014},[25,152676,152580],{"class":244},[25,152678,290],{"class":240},[25,152680,152585],{"class":244},[25,152682,152683],{"class":27,"line":17019},[25,152684,2510],{"emptyLinePlaceholder":167},[25,152686,152687,152689,152691,152693,152695],{"class":27,"line":17024},[25,152688,3211],{"class":240},[25,152690,152208],{"class":244},[25,152692,38998],{"class":240},[25,152694,39004],{"class":35},[25,152696,3849],{"class":244},[25,152698,152699,152701,152703,152705],{"class":27,"line":17037},[25,152700,32522],{"class":35},[25,152702,245],{"class":244},[25,152704,152610],{"class":45},[25,152706,251],{"class":244},[25,152708,152709],{"class":27,"line":17042},[25,152710,152432],{"class":240},[25,152712,152713],{"class":27,"line":32704},[25,152714,2510],{"emptyLinePlaceholder":167},[25,152716,152717,152719,152721,152723,152725,152728],{"class":27,"line":32710},[25,152718,152441],{"class":244},[25,152720,290],{"class":240},[25,152722,60676],{"class":35},[25,152724,245],{"class":244},[25,152726,152727],{"class":45},"\"请输入新姓名:\"",[25,152729,251],{"class":244},[25,152731,152732,152734,152736,152738,152741],{"class":27,"line":32716},[25,152733,152457],{"class":244},[25,152735,290],{"class":240},[25,152737,152462],{"class":244},[25,152739,152740],{"class":45},"\"请输入新年龄:\"",[25,152742,251],{"class":244},[25,152744,152745,152747,152749,152751,152754],{"class":27,"line":32722},[25,152746,152472],{"class":244},[25,152748,290],{"class":240},[25,152750,152477],{"class":244},[25,152752,152753],{"class":45},"\"请输入新成绩:\"",[25,152755,251],{"class":244},[25,152757,152758],{"class":27,"line":32728},[25,152759,2510],{"emptyLinePlaceholder":167},[25,152761,152762,152765,152767,152769,152771],{"class":27,"line":32739},[25,152763,152764],{"class":244},"    student[",[25,152766,62750],{"class":45},[25,152768,4553],{"class":244},[25,152770,290],{"class":240},[25,152772,149866],{"class":244},[25,152774,152775,152777,152779,152781,152783],{"class":27,"line":32745},[25,152776,152764],{"class":244},[25,152778,69195],{"class":45},[25,152780,4553],{"class":244},[25,152782,290],{"class":240},[25,152784,149878],{"class":244},[25,152786,152787,152789,152791,152793,152795],{"class":27,"line":32765},[25,152788,152764],{"class":244},[25,152790,151543],{"class":45},[25,152792,4553],{"class":244},[25,152794,290],{"class":240},[25,152796,1690],{"class":244},[25,152798,152799],{"class":27,"line":32771},[25,152800,2510],{"emptyLinePlaceholder":167},[25,152802,152803],{"class":27,"line":32782},[25,152804,152532],{"class":244},[25,152806,152807,152809,152811,152814],{"class":27,"line":32788},[25,152808,31370],{"class":35},[25,152810,245],{"class":244},[25,152812,152813],{"class":45},"\"修改成功\"",[25,152815,251],{"class":244},[25,152817,152818],{"class":27,"line":32794},[25,152819,2510],{"emptyLinePlaceholder":167},[25,152821,152822],{"class":27,"line":32800},[25,152823,2510],{"emptyLinePlaceholder":167},[25,152825,152826,152828,152831],{"class":27,"line":32806},[25,152827,32018],{"class":240},[25,152829,152830],{"class":31}," query_student",[25,152832,152032],{"class":244},[25,152834,152835,152837,152839,152841,152843,152846],{"class":27,"line":32812},[25,152836,152394],{"class":244},[25,152838,290],{"class":240},[25,152840,60676],{"class":35},[25,152842,245],{"class":244},[25,152844,152845],{"class":45},"\"请输入要查询的学号:\"",[25,152847,251],{"class":244},[25,152849,152850,152852,152854],{"class":27,"line":32818},[25,152851,152580],{"class":244},[25,152853,290],{"class":240},[25,152855,152585],{"class":244},[25,152857,152858],{"class":27,"line":32824},[25,152859,2510],{"emptyLinePlaceholder":167},[25,152861,152862,152864,152866,152868,152870],{"class":27,"line":32844},[25,152863,3211],{"class":240},[25,152865,152208],{"class":244},[25,152867,38998],{"class":240},[25,152869,39004],{"class":35},[25,152871,3849],{"class":244},[25,152873,152874,152876,152878,152880],{"class":27,"line":32850},[25,152875,32522],{"class":35},[25,152877,245],{"class":244},[25,152879,152610],{"class":45},[25,152881,251],{"class":244},[25,152883,152884],{"class":27,"line":32866},[25,152885,152432],{"class":240},[25,152887,152888],{"class":27,"line":32872},[25,152889,2510],{"emptyLinePlaceholder":167},[25,152891,152892],{"class":27,"line":32886},[25,152893,152894],{"class":244},"    print_student(student)\n",[25,152896,152897],{"class":27,"line":32892},[25,152898,2510],{"emptyLinePlaceholder":167},[25,152900,152901],{"class":27,"line":32907},[25,152902,2510],{"emptyLinePlaceholder":167},[25,152904,152905,152907,152910],{"class":27,"line":32913},[25,152906,32018],{"class":240},[25,152908,152909],{"class":31}," print_student",[25,152911,152912],{"class":244},"(student):\n",[25,152914,152915,152917],{"class":27,"line":32922},[25,152916,31370],{"class":35},[25,152918,151510],{"class":244},[25,152920,152921,152924,152926,152928,152931,152934,152936,152939],{"class":27,"line":32928},[25,152922,152923],{"class":240},"        f",[25,152925,494],{"class":45},[25,152927,1139],{"class":35},[25,152929,152930],{"class":244},"student[",[25,152932,152933],{"class":45},"'student_id'",[25,152935,1183],{"class":244},[25,152937,152938],{"class":35},"}\\t",[25,152940,25240],{"class":45},[25,152942,152943,152945,152947,152949,152951,152954,152956,152958],{"class":27,"line":32937},[25,152944,152923],{"class":240},[25,152946,494],{"class":45},[25,152948,1139],{"class":35},[25,152950,152930],{"class":244},[25,152952,152953],{"class":45},"'name'",[25,152955,1183],{"class":244},[25,152957,152938],{"class":35},[25,152959,25240],{"class":45},[25,152961,152962,152964,152966,152968,152970,152973,152975,152977],{"class":27,"line":32943},[25,152963,152923],{"class":240},[25,152965,494],{"class":45},[25,152967,1139],{"class":35},[25,152969,152930],{"class":244},[25,152971,152972],{"class":45},"'age'",[25,152974,1183],{"class":244},[25,152976,152938],{"class":35},[25,152978,25240],{"class":45},[25,152980,152981,152983,152985,152987,152989,152992,152994,152996],{"class":27,"line":32949},[25,152982,152923],{"class":240},[25,152984,494],{"class":45},[25,152986,1139],{"class":35},[25,152988,152930],{"class":244},[25,152990,152991],{"class":45},"'score'",[25,152993,1183],{"class":244},[25,152995,1189],{"class":35},[25,152997,25240],{"class":45},[25,152999,153000],{"class":27,"line":32958},[25,153001,153002],{"class":244},"    )\n",[25,153004,153005],{"class":27,"line":32964},[25,153006,2510],{"emptyLinePlaceholder":167},[25,153008,153009],{"class":27,"line":32975},[25,153010,2510],{"emptyLinePlaceholder":167},[25,153012,153013,153015,153018],{"class":27,"line":32981},[25,153014,32018],{"class":240},[25,153016,153017],{"class":31}," show_all_students",[25,153019,152032],{"class":244},[25,153021,153022,153024,153026],{"class":27,"line":33000},[25,153023,3211],{"class":240},[25,153025,39001],{"class":240},[25,153027,152213],{"class":244},[25,153029,153030,153032,153034,153037],{"class":27,"line":33006},[25,153031,32522],{"class":35},[25,153033,245],{"class":244},[25,153035,153036],{"class":45},"\"暂无学生\"",[25,153038,251],{"class":244},[25,153040,153041],{"class":27,"line":33017},[25,153042,152432],{"class":240},[25,153044,153045],{"class":27,"line":33023},[25,153046,2510],{"emptyLinePlaceholder":167},[25,153048,153049,153051,153053,153056,153058,153061,153063,153066,153068,153071],{"class":27,"line":33043},[25,153050,31370],{"class":35},[25,153052,245],{"class":244},[25,153054,153055],{"class":45},"\"学号",[25,153057,1343],{"class":35},[25,153059,153060],{"class":45},"姓名",[25,153062,1343],{"class":35},[25,153064,153065],{"class":45},"年龄",[25,153067,1343],{"class":35},[25,153069,153070],{"class":45},"成绩\"",[25,153072,251],{"class":244},[25,153074,153075,153077,153079,153081],{"class":27,"line":33059},[25,153076,3311],{"class":240},[25,153078,152208],{"class":244},[25,153080,26114],{"class":240},[25,153082,152213],{"class":244},[25,153084,153085],{"class":27,"line":33065},[25,153086,153087],{"class":244},"        print_student(student)\n",[25,153089,153090],{"class":27,"line":33079},[25,153091,2510],{"emptyLinePlaceholder":167},[25,153093,153094],{"class":27,"line":33085},[25,153095,2510],{"emptyLinePlaceholder":167},[25,153097,153098,153100,153102],{"class":27,"line":33091},[25,153099,32018],{"class":240},[25,153101,2083],{"class":31},[25,153103,32024],{"class":244},[25,153105,153106,153109,153111],{"class":27,"line":33102},[25,153107,153108],{"class":244},"    students ",[25,153110,290],{"class":240},[25,153112,153113],{"class":244}," load_students()\n",[25,153115,153116],{"class":27,"line":33108},[25,153117,2510],{"emptyLinePlaceholder":167},[25,153119,153120,153122,153124],{"class":27,"line":33114},[25,153121,2361],{"class":240},[25,153123,95363],{"class":35},[25,153125,3849],{"class":244},[25,153127,153128],{"class":27,"line":33124},[25,153129,153130],{"class":244},"        show_menu()\n",[25,153132,153133,153136,153138,153140,153142,153145],{"class":27,"line":33130},[25,153134,153135],{"class":244},"        choice ",[25,153137,290],{"class":240},[25,153139,60676],{"class":35},[25,153141,245],{"class":244},[25,153143,153144],{"class":45},"\"请输入操作:\"",[25,153146,251],{"class":244},[25,153148,153149],{"class":27,"line":33141},[25,153150,2510],{"emptyLinePlaceholder":167},[25,153152,153153,153155,153158,153160,153163],{"class":27,"line":33147},[25,153154,2607],{"class":240},[25,153156,153157],{"class":244}," choice ",[25,153159,3059],{"class":240},[25,153161,153162],{"class":45}," \"1\"",[25,153164,3849],{"class":244},[25,153166,153167],{"class":27,"line":33157},[25,153168,153169],{"class":244},"            add_student(students)\n",[25,153171,153172,153175,153177,153179,153182],{"class":27,"line":33162},[25,153173,153174],{"class":240},"        elif",[25,153176,153157],{"class":244},[25,153178,3059],{"class":240},[25,153180,153181],{"class":45}," \"2\"",[25,153183,3849],{"class":244},[25,153185,153186],{"class":27,"line":33168},[25,153187,153188],{"class":244},"            delete_student(students)\n",[25,153190,153191,153193,153195,153197,153200],{"class":27,"line":33217},[25,153192,153174],{"class":240},[25,153194,153157],{"class":244},[25,153196,3059],{"class":240},[25,153198,153199],{"class":45}," \"3\"",[25,153201,3849],{"class":244},[25,153203,153204],{"class":27,"line":33264},[25,153205,153206],{"class":244},"            update_student(students)\n",[25,153208,153209,153211,153213,153215,153218],{"class":27,"line":33269},[25,153210,153174],{"class":240},[25,153212,153157],{"class":244},[25,153214,3059],{"class":240},[25,153216,153217],{"class":45}," \"4\"",[25,153219,3849],{"class":244},[25,153221,153222],{"class":27,"line":33275},[25,153223,153224],{"class":244},"            query_student(students)\n",[25,153226,153227,153229,153231,153233,153236],{"class":27,"line":33294},[25,153228,153174],{"class":240},[25,153230,153157],{"class":244},[25,153232,3059],{"class":240},[25,153234,153235],{"class":45}," \"5\"",[25,153237,3849],{"class":244},[25,153239,153240],{"class":27,"line":33300},[25,153241,153242],{"class":244},"            show_all_students(students)\n",[25,153244,153245,153247,153249,153251,153254],{"class":27,"line":33320},[25,153246,153174],{"class":240},[25,153248,153157],{"class":244},[25,153250,3059],{"class":240},[25,153252,153253],{"class":45}," \"0\"",[25,153255,3849],{"class":244},[25,153257,153258,153260,153262,153265],{"class":27,"line":33326},[25,153259,34721],{"class":35},[25,153261,245],{"class":244},[25,153263,153264],{"class":45},"\"退出系统\"",[25,153266,251],{"class":244},[25,153268,153269],{"class":27,"line":33332},[25,153270,115169],{"class":240},[25,153272,153273,153275],{"class":27,"line":33342},[25,153274,2644],{"class":240},[25,153276,3849],{"class":244},[25,153278,153279,153281,153283,153286],{"class":27,"line":33347},[25,153280,34721],{"class":35},[25,153282,245],{"class":244},[25,153284,153285],{"class":45},"\"输入错误\"",[25,153287,251],{"class":244},[25,153289,153290],{"class":27,"line":33353},[25,153291,2510],{"emptyLinePlaceholder":167},[25,153293,153294],{"class":27,"line":33369},[25,153295,2510],{"emptyLinePlaceholder":167},[25,153297,153298,153300,153302,153304,153306],{"class":27,"line":33414},[25,153299,1642],{"class":240},[25,153301,31291],{"class":35},[25,153303,101630],{"class":240},[25,153305,101633],{"class":45},[25,153307,3849],{"class":244},[25,153309,153310],{"class":27,"line":33420},[25,153311,101640],{"class":244},[99,153313,153314],{},"这个项目串联了：",[194,153316,153317,153320,153323,153326,153329,153331],{},[106,153318,153319],{},"菜单循环。",[106,153321,153322],{},"函数封装。",[106,153324,153325],{},"列表字典。",[106,153327,153328],{},"JSON 读写。",[106,153330,151798],{},[106,153332,153333,28456],{},[22,153334,153335],{},"if __name__ == \"__main__\"",[182,153337,153339],{"id":153338},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[99,153341,153342],{},"可以进一步拆成两个类：",[194,153344,153345,153350],{},[106,153346,153347,153349],{},[22,153348,149639],{},"：表示单个学生。",[106,153351,153352,153354],{},[22,153353,151665],{},"：负责学生增删改查和文件保存。",[99,153356,153357],{},"示意代码：",[15,153359,153361],{"className":30449,"code":153360,"language":30451,"meta":20,"style":20},"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",[22,153362,153363,153373,153377,153381,153385,153393,153400,153406,153412,153418,153422,153430,153436,153446,153456,153466,153476,153480,153484,153490,153498,153506,153514,153522,153530,153538],{"__ignoreMap":20},[25,153364,153365,153367,153369,153371],{"class":27,"line":28},[25,153366,30808],{"class":240},[25,153368,151223],{"class":244},[25,153370,30463],{"class":240},[25,153372,151228],{"class":244},[25,153374,153375],{"class":27,"line":39},[25,153376,2510],{"emptyLinePlaceholder":167},[25,153378,153379],{"class":27,"line":51},[25,153380,2510],{"emptyLinePlaceholder":167},[25,153382,153383],{"class":27,"line":59},[25,153384,151241],{"class":31},[25,153386,153387,153389,153391],{"class":27,"line":67},[25,153388,14804],{"class":240},[25,153390,8008],{"class":31},[25,153392,3849],{"class":244},[25,153394,153395,153398],{"class":27,"line":75},[25,153396,153397],{"class":244},"    student_id: ",[25,153399,151257],{"class":35},[25,153401,153402,153404],{"class":27,"line":83},[25,153403,151254],{"class":244},[25,153405,151257],{"class":35},[25,153407,153408,153410],{"class":27,"line":91},[25,153409,151262],{"class":244},[25,153411,151265],{"class":35},[25,153413,153414,153416],{"class":27,"line":1429},[25,153415,151270],{"class":244},[25,153417,151273],{"class":35},[25,153419,153420],{"class":27,"line":1441},[25,153421,2510],{"emptyLinePlaceholder":167},[25,153423,153424,153426,153428],{"class":27,"line":1723},[25,153425,30872],{"class":240},[25,153427,151421],{"class":31},[25,153429,30878],{"class":244},[25,153431,153432,153434],{"class":27,"line":1728},[25,153433,14862],{"class":240},[25,153435,15682],{"class":244},[25,153437,153438,153440,153442,153444],{"class":27,"line":1734},[25,153439,151434],{"class":45},[25,153441,51508],{"class":244},[25,153443,30894],{"class":35},[25,153445,151441],{"class":244},[25,153447,153448,153450,153452,153454],{"class":27,"line":1739},[25,153449,151446],{"class":45},[25,153451,51508],{"class":244},[25,153453,30894],{"class":35},[25,153455,151453],{"class":244},[25,153457,153458,153460,153462,153464],{"class":27,"line":1753},[25,153459,151458],{"class":45},[25,153461,51508],{"class":244},[25,153463,30894],{"class":35},[25,153465,151465],{"class":244},[25,153467,153468,153470,153472,153474],{"class":27,"line":1758},[25,153469,151470],{"class":45},[25,153471,51508],{"class":244},[25,153473,30894],{"class":35},[25,153475,151477],{"class":244},[25,153477,153478],{"class":27,"line":1764},[25,153479,2639],{"class":244},[25,153481,153482],{"class":27,"line":1785},[25,153483,2510],{"emptyLinePlaceholder":167},[25,153485,153486,153488],{"class":27,"line":1790},[25,153487,151085],{"class":31},[25,153489,151088],{"class":35},[25,153491,153492,153494,153496],{"class":27,"line":1804},[25,153493,30872],{"class":240},[25,153495,151498],{"class":31},[25,153497,151501],{"class":244},[25,153499,153500,153502,153504],{"class":27,"line":1809},[25,153501,14862],{"class":240},[25,153503,151105],{"class":35},[25,153505,151510],{"class":244},[25,153507,153508,153510,153512],{"class":27,"line":1838},[25,153509,151515],{"class":244},[25,153511,151518],{"class":45},[25,153513,87907],{"class":244},[25,153515,153516,153518,153520],{"class":27,"line":1843},[25,153517,151515],{"class":244},[25,153519,62750],{"class":45},[25,153521,87907],{"class":244},[25,153523,153524,153526,153528],{"class":27,"line":1860},[25,153525,151515],{"class":244},[25,153527,69195],{"class":45},[25,153529,87907],{"class":244},[25,153531,153532,153534,153536],{"class":27,"line":1865},[25,153533,151515],{"class":244},[25,153535,151543],{"class":45},[25,153537,87907],{"class":244},[25,153539,153540],{"class":27,"line":1870},[25,153541,38197],{"class":244},[99,153543,153544],{},"管理器示意：",[15,153546,153548],{"className":30449,"code":153547,"language":30451,"meta":20,"style":20},"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",[22,153549,153550,153559,153567,153578,153582,153592,153605,153616,153623,153629,153633,153642,153651,153657,153664],{"__ignoreMap":20},[25,153551,153552,153554,153557],{"class":27,"line":28},[25,153553,14804],{"class":240},[25,153555,153556],{"class":31}," StudentManager",[25,153558,3849],{"class":244},[25,153560,153561,153563,153565],{"class":27,"line":39},[25,153562,30872],{"class":240},[25,153564,30875],{"class":35},[25,153566,30878],{"class":244},[25,153568,153569,153571,153574,153576],{"class":27,"line":51},[25,153570,30916],{"class":35},[25,153572,153573],{"class":244},".students ",[25,153575,290],{"class":240},[25,153577,51909],{"class":244},[25,153579,153580],{"class":27,"line":59},[25,153581,2510],{"emptyLinePlaceholder":167},[25,153583,153584,153586,153589],{"class":27,"line":67},[25,153585,30872],{"class":240},[25,153587,153588],{"class":31}," find_by_id",[25,153590,153591],{"class":244},"(self, student_id):\n",[25,153593,153594,153596,153598,153600,153602],{"class":27,"line":75},[25,153595,3513],{"class":240},[25,153597,152208],{"class":244},[25,153599,26114],{"class":240},[25,153601,38944],{"class":35},[25,153603,153604],{"class":244},".students:\n",[25,153606,153607,153609,153612,153614],{"class":27,"line":83},[25,153608,4752],{"class":240},[25,153610,153611],{"class":244}," student.student_id ",[25,153613,3059],{"class":240},[25,153615,152229],{"class":244},[25,153617,153618,153621],{"class":27,"line":91},[25,153619,153620],{"class":240},"                return",[25,153622,152236],{"class":244},[25,153624,153625,153627],{"class":27,"line":1429},[25,153626,14862],{"class":240},[25,153628,152243],{"class":35},[25,153630,153631],{"class":27,"line":1441},[25,153632,2510],{"emptyLinePlaceholder":167},[25,153634,153635,153637,153639],{"class":27,"line":1723},[25,153636,30872],{"class":240},[25,153638,5319],{"class":31},[25,153640,153641],{"class":244},"(self, student):\n",[25,153643,153644,153646,153648],{"class":27,"line":1728},[25,153645,2607],{"class":240},[25,153647,38944],{"class":35},[25,153649,153650],{"class":244},".find_by_id(student.student_id):\n",[25,153652,153653,153655],{"class":27,"line":1734},[25,153654,15842],{"class":240},[25,153656,125878],{"class":35},[25,153658,153659,153661],{"class":27,"line":1739},[25,153660,30916],{"class":35},[25,153662,153663],{"class":244},".students.append(student)\n",[25,153665,153666,153668],{"class":27,"line":1753},[25,153667,14862],{"class":240},[25,153669,153670],{"class":35}," True\n",[99,153672,153673],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[182,153675,153677],{"id":153676},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[210,153679,153681],{"id":153680},"_1251-数据结构","12.5.1 数据结构",[15,153683,153685],{"className":30449,"code":153684,"language":30451,"meta":20,"style":20},"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",[22,153686,153687,153695,153726,153756,153785,153814],{"__ignoreMap":20},[25,153688,153689,153691,153693],{"class":27,"line":28},[25,153690,148536],{"class":244},[25,153692,290],{"class":240},[25,153694,55518],{"class":244},[25,153696,153697,153699,153701,153703,153705,153707,153710,153712,153715,153717,153719,153721,153724],{"class":27,"line":39},[25,153698,148456],{"class":244},[25,153700,148068],{"class":45},[25,153702,51508],{"class":244},[25,153704,148679],{"class":45},[25,153706,12545],{"class":244},[25,153708,153709],{"class":45},"\"category\"",[25,153711,51508],{"class":244},[25,153713,153714],{"class":45},"\"手机\"",[25,153716,12545],{"class":244},[25,153718,84155],{"class":45},[25,153720,51508],{"class":244},[25,153722,153723],{"class":35},"12000",[25,153725,5040],{"class":244},[25,153727,153728,153730,153732,153734,153736,153738,153740,153742,153745,153747,153749,153751,153754],{"class":27,"line":51},[25,153729,148456],{"class":244},[25,153731,148068],{"class":45},[25,153733,51508],{"class":244},[25,153735,148679],{"class":45},[25,153737,12545],{"class":244},[25,153739,153709],{"class":45},[25,153741,51508],{"class":244},[25,153743,153744],{"class":45},"\"电脑\"",[25,153746,12545],{"class":244},[25,153748,84155],{"class":45},[25,153750,51508],{"class":244},[25,153752,153753],{"class":35},"18000",[25,153755,5040],{"class":244},[25,153757,153758,153760,153762,153764,153766,153768,153770,153772,153774,153776,153778,153780,153783],{"class":27,"line":59},[25,153759,148456],{"class":244},[25,153761,148068],{"class":45},[25,153763,51508],{"class":244},[25,153765,148700],{"class":45},[25,153767,12545],{"class":244},[25,153769,153709],{"class":45},[25,153771,51508],{"class":244},[25,153773,153714],{"class":45},[25,153775,12545],{"class":244},[25,153777,84155],{"class":45},[25,153779,51508],{"class":244},[25,153781,153782],{"class":35},"15000",[25,153784,5040],{"class":244},[25,153786,153787,153789,153791,153793,153795,153797,153799,153801,153803,153805,153807,153809,153812],{"class":27,"line":67},[25,153788,148456],{"class":244},[25,153790,148068],{"class":45},[25,153792,51508],{"class":244},[25,153794,148700],{"class":45},[25,153796,12545],{"class":244},[25,153798,153709],{"class":45},[25,153800,51508],{"class":244},[25,153802,153744],{"class":45},[25,153804,12545],{"class":244},[25,153806,84155],{"class":45},[25,153808,51508],{"class":244},[25,153810,153811],{"class":35},"16000",[25,153813,5040],{"class":244},[25,153815,153816],{"class":27,"line":75},[25,153817,33317],{"class":244},[210,153819,153821],{"id":153820},"_1252-按日期统计","12.5.2 按日期统计",[15,153823,153825],{"className":30449,"code":153824,"language":30451,"meta":20,"style":20},"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",[22,153826,153827,153836,153840,153851,153865,153878,153897,153901],{"__ignoreMap":20},[25,153828,153829,153832,153834],{"class":27,"line":28},[25,153830,153831],{"class":244},"daily_total ",[25,153833,290],{"class":240},[25,153835,87939],{"class":244},[25,153837,153838],{"class":27,"line":39},[25,153839,2510],{"emptyLinePlaceholder":167},[25,153841,153842,153844,153846,153848],{"class":27,"line":51},[25,153843,3135],{"class":240},[25,153845,148280],{"class":244},[25,153847,26114],{"class":240},[25,153849,153850],{"class":244}," sales:\n",[25,153852,153853,153856,153858,153861,153863],{"class":27,"line":59},[25,153854,153855],{"class":244},"    date ",[25,153857,290],{"class":240},[25,153859,153860],{"class":244}," item[",[25,153862,148068],{"class":45},[25,153864,33317],{"class":244},[25,153866,153867,153870,153872,153874,153876],{"class":27,"line":67},[25,153868,153869],{"class":244},"    amount ",[25,153871,290],{"class":240},[25,153873,153860],{"class":244},[25,153875,84155],{"class":45},[25,153877,33317],{"class":244},[25,153879,153880,153883,153885,153888,153890,153892,153894],{"class":27,"line":75},[25,153881,153882],{"class":244},"    daily_total[date] ",[25,153884,290],{"class":240},[25,153886,153887],{"class":244}," daily_total.get(date, ",[25,153889,434],{"class":35},[25,153891,13824],{"class":244},[25,153893,724],{"class":240},[25,153895,153896],{"class":244}," amount\n",[25,153898,153899],{"class":27,"line":83},[25,153900,2510],{"emptyLinePlaceholder":167},[25,153902,153903,153905],{"class":27,"line":91},[25,153904,30486],{"class":35},[25,153906,153907],{"class":244},"(daily_total)\n",[210,153909,153911],{"id":153910},"_1253-按类别统计","12.5.3 按类别统计",[15,153913,153915],{"className":30449,"code":153914,"language":30451,"meta":20,"style":20},"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",[22,153916,153917,153926,153930,153940,153953,153965,153983,153987],{"__ignoreMap":20},[25,153918,153919,153922,153924],{"class":27,"line":28},[25,153920,153921],{"class":244},"category_total ",[25,153923,290],{"class":240},[25,153925,87939],{"class":244},[25,153927,153928],{"class":27,"line":39},[25,153929,2510],{"emptyLinePlaceholder":167},[25,153931,153932,153934,153936,153938],{"class":27,"line":51},[25,153933,3135],{"class":240},[25,153935,148280],{"class":244},[25,153937,26114],{"class":240},[25,153939,153850],{"class":244},[25,153941,153942,153945,153947,153949,153951],{"class":27,"line":59},[25,153943,153944],{"class":244},"    category ",[25,153946,290],{"class":240},[25,153948,153860],{"class":244},[25,153950,153709],{"class":45},[25,153952,33317],{"class":244},[25,153954,153955,153957,153959,153961,153963],{"class":27,"line":67},[25,153956,153869],{"class":244},[25,153958,290],{"class":240},[25,153960,153860],{"class":244},[25,153962,84155],{"class":45},[25,153964,33317],{"class":244},[25,153966,153967,153970,153972,153975,153977,153979,153981],{"class":27,"line":75},[25,153968,153969],{"class":244},"    category_total[category] ",[25,153971,290],{"class":240},[25,153973,153974],{"class":244}," category_total.get(category, ",[25,153976,434],{"class":35},[25,153978,13824],{"class":244},[25,153980,724],{"class":240},[25,153982,153896],{"class":244},[25,153984,153985],{"class":27,"line":83},[25,153986,2510],{"emptyLinePlaceholder":167},[25,153988,153989,153991],{"class":27,"line":91},[25,153990,30486],{"class":35},[25,153992,153993],{"class":244},"(category_total)\n",[210,153995,153997],{"id":153996},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[15,153999,154001],{"className":30449,"code":154000,"language":30451,"meta":20,"style":20},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[22,154002,154003,154028],{"__ignoreMap":20},[25,154004,154005,154008,154010,154012,154015,154018,154021,154024,154026],{"class":27,"line":28},[25,154006,154007],{"class":244},"top_date, top_amount ",[25,154009,290],{"class":240},[25,154011,6061],{"class":35},[25,154013,154014],{"class":244},"(daily_total.items(), ",[25,154016,154017],{"class":5326},"key",[25,154019,154020],{"class":240},"=lambda",[25,154022,154023],{"class":244}," item: item[",[25,154025,460],{"class":35},[25,154027,4767],{"class":244},[25,154029,154030,154032],{"class":27,"line":39},[25,154031,30486],{"class":35},[25,154033,154034],{"class":244},"(top_date, top_amount)\n",[182,154036,154038],{"id":154037},"_126-绘制柱状图","12.6 绘制柱状图",[15,154040,154042],{"className":30449,"code":154041,"language":30451,"meta":20,"style":20},"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",[22,154043,154044,154058,154069,154073,154081,154093,154105,154116,154120,154124,154134,154145,154159,154164,154181,154198,154214,154218],{"__ignoreMap":20},[25,154045,154046,154048,154050,154052,154054,154056],{"class":27,"line":28},[25,154047,30808],{"class":240},[25,154049,147450],{"class":244},[25,154051,30463],{"class":240},[25,154053,147455],{"class":244},[25,154055,31454],{"class":240},[25,154057,147460],{"class":244},[25,154059,154060,154062,154064,154066],{"class":27,"line":39},[25,154061,30808],{"class":240},[25,154063,147309],{"class":244},[25,154065,30463],{"class":240},[25,154067,154068],{"class":244}," Bar\n",[25,154070,154071],{"class":27,"line":51},[25,154072,2510],{"emptyLinePlaceholder":167},[25,154074,154075,154077,154079],{"class":27,"line":59},[25,154076,153921],{"class":244},[25,154078,290],{"class":240},[25,154080,15682],{"class":244},[25,154082,154083,154086,154088,154091],{"class":27,"line":67},[25,154084,154085],{"class":45},"    \"手机\"",[25,154087,51508],{"class":244},[25,154089,154090],{"class":35},"27000",[25,154092,31537],{"class":244},[25,154094,154095,154098,154100,154103],{"class":27,"line":75},[25,154096,154097],{"class":45},"    \"电脑\"",[25,154099,51508],{"class":244},[25,154101,154102],{"class":35},"34000",[25,154104,31537],{"class":244},[25,154106,154107,154110,154112,154114],{"class":27,"line":83},[25,154108,154109],{"class":45},"    \"耳机\"",[25,154111,51508],{"class":244},[25,154113,124470],{"class":35},[25,154115,31537],{"class":244},[25,154117,154118],{"class":27,"line":91},[25,154119,1676],{"class":244},[25,154121,154122],{"class":27,"line":1429},[25,154123,2510],{"emptyLinePlaceholder":167},[25,154125,154126,154129,154131],{"class":27,"line":1441},[25,154127,154128],{"class":244},"bar ",[25,154130,290],{"class":240},[25,154132,154133],{"class":244}," Bar()\n",[25,154135,154136,154139,154142],{"class":27,"line":1723},[25,154137,154138],{"class":244},"bar.add_xaxis(",[25,154140,154141],{"class":35},"list",[25,154143,154144],{"class":244},"(category_total.keys()))\n",[25,154146,154147,154150,154152,154154,154156],{"class":27,"line":1728},[25,154148,154149],{"class":244},"bar.add_yaxis(",[25,154151,147366],{"class":45},[25,154153,12545],{"class":244},[25,154155,154141],{"class":35},[25,154157,154158],{"class":244},"(category_total.values()))\n",[25,154160,154161],{"class":27,"line":1734},[25,154162,154163],{"class":244},"bar.set_global_opts(\n",[25,154165,154166,154168,154170,154172,154174,154176,154179],{"class":27,"line":1739},[25,154167,147544],{"class":5326},[25,154169,290],{"class":240},[25,154171,147549],{"class":244},[25,154173,51478],{"class":5326},[25,154175,290],{"class":240},[25,154177,154178],{"class":45},"\"品类销售额\"",[25,154180,38118],{"class":244},[25,154182,154183,154185,154187,154189,154191,154193,154196],{"class":27,"line":1753},[25,154184,147563],{"class":5326},[25,154186,290],{"class":240},[25,154188,147568],{"class":244},[25,154190,79881],{"class":5326},[25,154192,290],{"class":240},[25,154194,154195],{"class":45},"\"品类\"",[25,154197,38118],{"class":244},[25,154199,154200,154202,154204,154206,154208,154210,154212],{"class":27,"line":1758},[25,154201,147582],{"class":5326},[25,154203,290],{"class":240},[25,154205,147568],{"class":244},[25,154207,79881],{"class":5326},[25,154209,290],{"class":240},[25,154211,147366],{"class":45},[25,154213,38118],{"class":244},[25,154215,154216],{"class":27,"line":1764},[25,154217,251],{"class":244},[25,154219,154220,154223,154226],{"class":27,"line":1785},[25,154221,154222],{"class":244},"bar.render(",[25,154224,154225],{"class":45},"\"category_sales.html\"",[25,154227,251],{"class":244},[182,154229,154231],{"id":154230},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[99,154233,154234],{},"时间线适合展示不同日期、月份、年份的数据变化。",[15,154236,154238],{"className":30449,"code":154237,"language":30451,"meta":20,"style":20},"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",[22,154239,154240,154254,154265,154269,154277,154301,154324,154349,154353,154357,154367,154371,154382,154391,154401,154415,154446,154451,154455],{"__ignoreMap":20},[25,154241,154242,154244,154246,154248,154250,154252],{"class":27,"line":28},[25,154243,30808],{"class":240},[25,154245,147450],{"class":244},[25,154247,30463],{"class":240},[25,154249,147455],{"class":244},[25,154251,31454],{"class":240},[25,154253,147460],{"class":244},[25,154255,154256,154258,154260,154262],{"class":27,"line":39},[25,154257,30808],{"class":240},[25,154259,147309],{"class":244},[25,154261,30463],{"class":240},[25,154263,154264],{"class":244}," Bar, Timeline\n",[25,154266,154267],{"class":27,"line":51},[25,154268,2510],{"emptyLinePlaceholder":167},[25,154270,154271,154273,154275],{"class":27,"line":59},[25,154272,101729],{"class":244},[25,154274,290],{"class":240},[25,154276,15682],{"class":244},[25,154278,154279,154282,154285,154287,154289,154291,154293,154295,154297,154299],{"class":27,"line":67},[25,154280,154281],{"class":45},"    \"2024-10-01\"",[25,154283,154284],{"class":244},": {",[25,154286,153714],{"class":45},[25,154288,51508],{"class":244},[25,154290,153723],{"class":35},[25,154292,12545],{"class":244},[25,154294,153744],{"class":45},[25,154296,51508],{"class":244},[25,154298,153753],{"class":35},[25,154300,5040],{"class":244},[25,154302,154303,154306,154308,154310,154312,154314,154316,154318,154320,154322],{"class":27,"line":75},[25,154304,154305],{"class":45},"    \"2024-10-02\"",[25,154307,154284],{"class":244},[25,154309,153714],{"class":45},[25,154311,51508],{"class":244},[25,154313,153782],{"class":35},[25,154315,12545],{"class":244},[25,154317,153744],{"class":45},[25,154319,51508],{"class":244},[25,154321,153811],{"class":35},[25,154323,5040],{"class":244},[25,154325,154326,154329,154331,154333,154335,154338,154340,154342,154344,154347],{"class":27,"line":83},[25,154327,154328],{"class":45},"    \"2024-10-03\"",[25,154330,154284],{"class":244},[25,154332,153714],{"class":45},[25,154334,51508],{"class":244},[25,154336,154337],{"class":35},"17000",[25,154339,12545],{"class":244},[25,154341,153744],{"class":45},[25,154343,51508],{"class":244},[25,154345,154346],{"class":35},"19000",[25,154348,5040],{"class":244},[25,154350,154351],{"class":27,"line":91},[25,154352,1676],{"class":244},[25,154354,154355],{"class":27,"line":1429},[25,154356,2510],{"emptyLinePlaceholder":167},[25,154358,154359,154362,154364],{"class":27,"line":1441},[25,154360,154361],{"class":244},"timeline ",[25,154363,290],{"class":240},[25,154365,154366],{"class":244}," Timeline()\n",[25,154368,154369],{"class":27,"line":1723},[25,154370,2510],{"emptyLinePlaceholder":167},[25,154372,154373,154375,154378,154380],{"class":27,"line":1728},[25,154374,3135],{"class":240},[25,154376,154377],{"class":244}," date, category_data ",[25,154379,26114],{"class":240},[25,154381,149219],{"class":244},[25,154383,154384,154387,154389],{"class":27,"line":1734},[25,154385,154386],{"class":244},"    bar ",[25,154388,290],{"class":240},[25,154390,154133],{"class":244},[25,154392,154393,154396,154398],{"class":27,"line":1739},[25,154394,154395],{"class":244},"    bar.add_xaxis(",[25,154397,154141],{"class":35},[25,154399,154400],{"class":244},"(category_data.keys()))\n",[25,154402,154403,154406,154408,154410,154412],{"class":27,"line":1753},[25,154404,154405],{"class":244},"    bar.add_yaxis(",[25,154407,147366],{"class":45},[25,154409,12545],{"class":244},[25,154411,154141],{"class":35},[25,154413,154414],{"class":244},"(category_data.values()))\n",[25,154416,154417,154420,154423,154425,154427,154429,154431,154433,154435,154437,154439,154441,154444],{"class":27,"line":1758},[25,154418,154419],{"class":244},"    bar.set_global_opts(",[25,154421,154422],{"class":5326},"title_opts",[25,154424,290],{"class":240},[25,154426,147549],{"class":244},[25,154428,51478],{"class":5326},[25,154430,290],{"class":240},[25,154432,296],{"class":240},[25,154434,494],{"class":45},[25,154436,1139],{"class":35},[25,154438,73997],{"class":244},[25,154440,1189],{"class":35},[25,154442,154443],{"class":45},"销售额\"",[25,154445,30568],{"class":244},[25,154447,154448],{"class":27,"line":1764},[25,154449,154450],{"class":244},"    timeline.add(bar, date)\n",[25,154452,154453],{"class":27,"line":1785},[25,154454,2510],{"emptyLinePlaceholder":167},[25,154456,154457,154460,154463],{"class":27,"line":1790},[25,154458,154459],{"class":244},"timeline.render(",[25,154461,154462],{"class":45},"\"timeline_sales.html\"",[25,154464,251],{"class":244},[182,154466,154468],{"id":154467},"_128-绘制地图","12.8 绘制地图",[99,154470,154471],{},"地图适合展示地区数据。",[15,154473,154475],{"className":30449,"code":154474,"language":30451,"meta":20,"style":20},"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",[22,154476,154477,154491,154502,154506,154514,154527,154539,154552,154565,154569,154573,154583,154598,154603,154620,154639,154643],{"__ignoreMap":20},[25,154478,154479,154481,154483,154485,154487,154489],{"class":27,"line":28},[25,154480,30808],{"class":240},[25,154482,147450],{"class":244},[25,154484,30463],{"class":240},[25,154486,147455],{"class":244},[25,154488,31454],{"class":240},[25,154490,147460],{"class":244},[25,154492,154493,154495,154497,154499],{"class":27,"line":39},[25,154494,30808],{"class":240},[25,154496,147309],{"class":244},[25,154498,30463],{"class":240},[25,154500,154501],{"class":244}," Map\n",[25,154503,154504],{"class":27,"line":51},[25,154505,2510],{"emptyLinePlaceholder":167},[25,154507,154508,154510,154512],{"class":27,"line":59},[25,154509,101729],{"class":244},[25,154511,290],{"class":240},[25,154513,55518],{"class":244},[25,154515,154516,154519,154521,154523,154525],{"class":27,"line":67},[25,154517,154518],{"class":244},"    (",[25,154520,69340],{"class":45},[25,154522,12545],{"class":244},[25,154524,1060],{"class":35},[25,154526,38118],{"class":244},[25,154528,154529,154531,154533,154535,154537],{"class":27,"line":75},[25,154530,154518],{"class":244},[25,154532,69360],{"class":45},[25,154534,12545],{"class":244},[25,154536,147383],{"class":35},[25,154538,38118],{"class":244},[25,154540,154541,154543,154546,154548,154550],{"class":27,"line":83},[25,154542,154518],{"class":244},[25,154544,154545],{"class":45},"\"广东\"",[25,154547,12545],{"class":244},[25,154549,1833],{"class":35},[25,154551,38118],{"class":244},[25,154553,154554,154556,154559,154561,154563],{"class":27,"line":91},[25,154555,154518],{"class":244},[25,154557,154558],{"class":45},"\"浙江\"",[25,154560,12545],{"class":244},[25,154562,147388],{"class":35},[25,154564,38118],{"class":244},[25,154566,154567],{"class":27,"line":1429},[25,154568,33317],{"class":244},[25,154570,154571],{"class":27,"line":1441},[25,154572,2510],{"emptyLinePlaceholder":167},[25,154574,154575,154578,154580],{"class":27,"line":1723},[25,154576,154577],{"class":244},"map_chart ",[25,154579,290],{"class":240},[25,154581,154582],{"class":244}," Map()\n",[25,154584,154585,154588,154590,154593,154596],{"class":27,"line":1728},[25,154586,154587],{"class":244},"map_chart.add(",[25,154589,147366],{"class":45},[25,154591,154592],{"class":244},", data, ",[25,154594,154595],{"class":45},"\"china\"",[25,154597,251],{"class":244},[25,154599,154600],{"class":27,"line":1734},[25,154601,154602],{"class":244},"map_chart.set_global_opts(\n",[25,154604,154605,154607,154609,154611,154613,154615,154618],{"class":27,"line":1739},[25,154606,147544],{"class":5326},[25,154608,290],{"class":240},[25,154610,147549],{"class":244},[25,154612,51478],{"class":5326},[25,154614,290],{"class":240},[25,154616,154617],{"class":45},"\"地区销售额\"",[25,154619,38118],{"class":244},[25,154621,154622,154625,154627,154630,154633,154635,154637],{"class":27,"line":1753},[25,154623,154624],{"class":5326},"    visualmap_opts",[25,154626,290],{"class":240},[25,154628,154629],{"class":244},"opts.VisualMapOpts(",[25,154631,154632],{"class":5326},"max_",[25,154634,290],{"class":240},[25,154636,1833],{"class":35},[25,154638,38118],{"class":244},[25,154640,154641],{"class":27,"line":1758},[25,154642,251],{"class":244},[25,154644,154645,154648,154651],{"class":27,"line":1764},[25,154646,154647],{"class":244},"map_chart.render(",[25,154649,154650],{"class":45},"\"map_sales.html\"",[25,154652,251],{"class":244},[99,154654,154655],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[182,154657,154659],{"id":154658},"_129-项目拆分建议","12.9 项目拆分建议",[99,154661,154662],{},"当代码超过一个文件时，可以这样组织：",[15,154664,154667],{"className":154665,"code":154666,"language":5297,"meta":20},[5295],"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",[22,154668,154666],{"__ignoreMap":20},[99,154670,154671],{},"职责：",[194,154673,154674,154680,154686,154692],{},[106,154675,154676,154679],{},[22,154677,154678],{},"main.py","：程序入口。",[106,154681,154682,154685],{},[22,154683,154684],{},"file_utils.py","：读写 JSON。",[106,154687,154688,154691],{},[22,154689,154690],{},"sales_service.py","：统计销售数据。",[106,154693,154694,154697],{},[22,154695,154696],{},"chart_builder.py","：生成图表。",[182,154699,154701],{"id":154700},"_1210-python基础复习清单","12.10 Python基础复习清单",[99,154703,154704],{},"语法基础：",[194,154706,154707,154710,154713,154716],{},[106,154708,154709],{},"会写变量、注释、输入输出。",[106,154711,154712],{},"会使用 int、float、str、bool。",[106,154714,154715],{},"会做类型转换。",[106,154717,154718],{},"会使用 f-string 格式化输出。",[99,154720,154721],{},"流程控制：",[194,154723,154724,154730,154736,154744],{},[106,154725,154726,154727,28456],{},"会写 ",[22,154728,154729],{},"if elif else",[106,154731,154726,154732,101089,154734,28456],{},[22,154733,108734],{},[22,154735,3135],{},[106,154737,154738,154739,101089,154741,28456],{},"理解 ",[22,154740,2163],{},[22,154742,154743],{},"continue",[106,154745,154746],{},"能写嵌套循环。",[99,154748,154749],{},"函数：",[194,154751,154752,154755,154758,154761],{},[106,154753,154754],{},"会定义和调用函数。",[106,154756,154757],{},"理解参数和返回值。",[106,154759,154760],{},"知道局部变量和全局变量。",[106,154762,154763],{},"会使用默认参数、关键字参数、不定长参数。",[99,154765,154766],{},"容器：",[194,154768,154769,154772,154775,154778,154781],{},[106,154770,154771],{},"会使用列表增删改查。",[106,154773,154774],{},"会遍历列表、字典。",[106,154776,154777],{},"会使用切片。",[106,154779,154780],{},"会用集合去重。",[106,154782,154783],{},"会处理列表嵌套字典。",[99,154785,154786],{},"文件和模块：",[194,154788,154789,154792,154795,154798,154801],{},[106,154790,154791],{},"会读写文本文件。",[106,154793,154794],{},"会读写 JSON。",[106,154796,154797],{},"会捕获常见异常。",[106,154799,154800],{},"会导入模块和第三方包。",[106,154802,154803],{},"会创建简单包结构。",[99,154805,154806],{},"项目能力：",[194,154808,154809,154812,154815,154818,154821],{},[106,154810,154811],{},"能把代码拆成函数。",[106,154813,154814],{},"能把数据保存到文件。",[106,154816,154817],{},"能处理用户输入错误。",[106,154819,154820],{},"能写一个完整菜单程序。",[106,154822,154823],{},"能用 pyecharts 生成图表。",[182,154825,154827],{"id":154826},"_1211-推荐练习顺序","12.11 推荐练习顺序",[194,154829,154830,154833,154836,154839,154842,154845,154848,154851],{},[106,154831,154832],{},"猜数字游戏。",[106,154834,154835],{},"ATM 菜单程序。",[106,154837,154838],{},"学生成绩统计。",[106,154840,154841],{},"学生管理系统函数版。",[106,154843,154844],{},"学生管理系统文件持久化版。",[106,154846,154847],{},"学生管理系统面向对象版。",[106,154849,154850],{},"销售数据统计。",[106,154852,154853],{},"销售数据可视化。",[182,154855,154857],{"id":154856},"_1212-常见学习误区","12.12 常见学习误区",[194,154859,154860,154863,154866,154869,154872,154875,154878],{},[106,154861,154862],{},"只看视频不敲代码。",[106,154864,154865],{},"一报错就复制错误去搜，不先读报错位置。",[106,154867,154868],{},"变量名随便写，后续自己看不懂。",[106,154870,154871],{},"所有代码都写在一个文件一个函数里。",[106,154873,154874],{},"不保存练习代码，复习时没有材料。",[106,154876,154877],{},"还没掌握列表字典就急着学框架。",[106,154879,154880],{},"不会读官方文档，只依赖教程。",[182,154882,154884],{"id":154883},"_1213-如何读报错","12.13 如何读报错",[99,154886,154887],{},"报错通常从下往上看最后几行。",[99,154889,15245],{},[15,154891,154894],{"className":154892,"code":154893,"language":5297,"meta":20},[5295],"ValueError: invalid literal for int() with base 10: 'abc'\n",[22,154895,154893],{"__ignoreMap":20},[99,154897,24707],{},[194,154899,154900,154906,154916],{},[106,154901,154902,154903,28456],{},"异常类型是 ",[22,154904,154905],{},"ValueError",[106,154907,107416,154908,154911,154912,154915],{},[22,154909,154910],{},"int()"," 无法把 ",[22,154913,154914],{},"'abc'"," 转成整数。",[106,154917,154918],{},"应该检查输入内容或增加异常处理。",[99,154920,154921],{},"再看文件名和行号：",[15,154923,154926],{"className":154924,"code":154925,"language":5297,"meta":20},[5295],"File \"main.py\", line 10, in \u003Cmodule>\n",[22,154927,154925],{"__ignoreMap":20},[99,154929,154930,154931,154933],{},"表示错误发生在 ",[22,154932,154678],{}," 第 10 行。",[182,154935,154937],{"id":154936},"_1214-后续学习方向","12.14 后续学习方向",[99,154939,154940],{},"Python 基础完成后，可以按兴趣选择方向：",[194,154942,154943,154955,154964,154976,154987,154996,155006],{},[106,154944,154945,154946,455,154949,455,154952,28456],{},"自动化办公：",[22,154947,154948],{},"openpyxl",[22,154950,154951],{},"python-docx",[22,154953,154954],{},"pdfplumber",[106,154956,154957,154958,455,154960,455,154962,28456],{},"数据分析：",[22,154959,100697],{},[22,154961,146256],{},[22,154963,146264],{},[106,154965,154966,154967,455,154970,455,154973,28456],{},"Web 后端：",[22,154968,154969],{},"Flask",[22,154971,154972],{},"FastAPI",[22,154974,154975],{},"Django",[106,154977,154978,154979,455,154981,455,154984,28456],{},"爬虫：",[22,154980,146241],{},[22,154982,154983],{},"BeautifulSoup",[22,154985,154986],{},"Scrapy",[106,154988,154989,154990,455,154992,154995],{},"测试开发：",[22,154991,146288],{},[22,154993,154994],{},"selenium","、接口测试。",[106,154997,154998,154999,455,155001,455,155003,28456],{},"人工智能：",[22,155000,100697],{},[22,155002,146256],{},[22,155004,155005],{},"pytorch",[106,155007,155008,155009,455,155011,455,155014,28456],{},"运维脚本：",[22,155010,145857],{},[22,155012,155013],{},"subprocess",[22,155015,155016],{},"paramiko",[99,155018,155019],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[182,155021,155023],{"id":155022},"_1215-结课练习","12.15 结课练习",[194,155025,155026,155029,155032,155035,155038,155041,155044,155047],{},[106,155027,155028],{},"完成函数版学生管理系统。",[106,155030,155031],{},"给学生管理系统增加 JSON 持久化。",[106,155033,155034],{},"给学生管理系统增加异常处理。",[106,155036,155037],{},"把学生管理系统改成面向对象版。",[106,155039,155040],{},"使用 pyecharts 绘制学生成绩柱状图。",[106,155042,155043],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[106,155045,155046],{},"按品类统计销售额并绘制柱状图。",[106,155048,155049],{},"写一份自己的 Python 学习路线图。",[159,155051,155052],{},"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":20,"searchDepth":39,"depth":39,"links":155054},[155055,155056,155059,155060,155061,155067,155068,155069,155070,155071,155072,155073,155074,155075,155076],{"id":151771,"depth":39,"text":151772},{"id":151821,"depth":39,"text":151822,"children":155057},[155058],{"id":151825,"depth":51,"text":151826},{"id":151864,"depth":39,"text":151865},{"id":153338,"depth":39,"text":153339},{"id":153676,"depth":39,"text":153677,"children":155062},[155063,155064,155065,155066],{"id":153680,"depth":51,"text":153681},{"id":153820,"depth":51,"text":153821},{"id":153910,"depth":51,"text":153911},{"id":153996,"depth":51,"text":153997},{"id":154037,"depth":39,"text":154038},{"id":154230,"depth":39,"text":154231},{"id":154467,"depth":39,"text":154468},{"id":154658,"depth":39,"text":154659},{"id":154700,"depth":39,"text":154701},{"id":154826,"depth":39,"text":154827},{"id":154856,"depth":39,"text":154857},{"id":154883,"depth":39,"text":154884},{"id":154936,"depth":39,"text":154937},{"id":155022,"depth":39,"text":155023},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151763,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155083,"title":155084,"body":155085,"description":164,"extension":165,"meta":157554,"navigation":167,"path":157555,"seo":157556,"stem":157557,"__hash__":157558},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155086,"toc":157529},[155087,155090,155094,155097,155100,155120,155123,155146,155149,155152,155174,155177,155199,155203,155206,155246,155249,155370,155374,155377,155417,155420,155444,155447,155451,155454,155468,155501,155504,155539,155542,155565,155568,155601,155604,155606,155612,155687,155690,155696,155713,155753,155757,155760,155806,155808,155846,155849,155884,155887,155922,155925,155957,155960,155979,155983,155987,156100,156102,156177,156181,156227,156230,156256,156265,156269,156272,156335,156343,156371,156375,156415,156480,156484,156487,156526,156529,156574,156577,156638,156642,156669,156672,156700,156703,156707,156711,156776,156779,156817,156820,156852,156856,156955,156959,156962,157035,157038,157086,157090,157096,157136,157139,157186,157189,157238,157242,157244,157258,157260,157441,157445,157472,157492,157499,157503,157520,157526],[10,155088,155084],{"id":155089},"_2-基础语法变量与字符串",[182,155091,155093],{"id":155092},"_21-注释","2.1 注释",[99,155095,155096],{},"注释是给人看的说明文字，不会被 Python 执行。",[99,155098,155099],{},"单行注释：",[15,155101,155103],{"className":30449,"code":155102,"language":30451,"meta":20,"style":20},"# 这是单行注释\nprint(\"hello\")\n",[22,155104,155105,155110],{"__ignoreMap":20},[25,155106,155107],{"class":27,"line":28},[25,155108,155109],{"class":302},"# 这是单行注释\n",[25,155111,155112,155114,155116,155118],{"class":27,"line":39},[25,155113,30486],{"class":35},[25,155115,245],{"class":244},[25,155117,5954],{"class":45},[25,155119,251],{"class":244},[99,155121,155122],{},"多行说明常用三引号：",[15,155124,155126],{"className":30449,"code":155125,"language":30451,"meta":20,"style":20},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[22,155127,155128,155132,155137,155142],{"__ignoreMap":20},[25,155129,155130],{"class":27,"line":28},[25,155131,95769],{"class":45},[25,155133,155134],{"class":27,"line":39},[25,155135,155136],{"class":45},"这是多行说明。\n",[25,155138,155139],{"class":27,"line":51},[25,155140,155141],{"class":45},"常用于文件顶部说明、函数说明等。\n",[25,155143,155144],{"class":27,"line":59},[25,155145,95769],{"class":45},[99,155147,155148],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[99,155150,155151],{},"不好：",[15,155153,155155],{"className":30449,"code":155154,"language":30451,"meta":20,"style":20},"# age 加 1\nage = age + 1\n",[22,155156,155157,155162],{"__ignoreMap":20},[25,155158,155159],{"class":27,"line":28},[25,155160,155161],{"class":302},"# age 加 1\n",[25,155163,155164,155166,155168,155170,155172],{"class":27,"line":39},[25,155165,146617],{"class":244},[25,155167,290],{"class":240},[25,155169,15817],{"class":244},[25,155171,724],{"class":240},[25,155173,55770],{"class":35},[99,155175,155176],{},"较好：",[15,155178,155180],{"className":30449,"code":155179,"language":30451,"meta":20,"style":20},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[22,155181,155182,155187],{"__ignoreMap":20},[25,155183,155184],{"class":27,"line":28},[25,155185,155186],{"class":302},"# 用户过完生日后，年龄增加一岁\n",[25,155188,155189,155191,155193,155195,155197],{"class":27,"line":39},[25,155190,146617],{"class":244},[25,155192,290],{"class":240},[25,155194,15817],{"class":244},[25,155196,724],{"class":240},[25,155198,55770],{"class":35},[182,155200,155202],{"id":155201},"_22-字面量","2.2 字面量",[99,155204,155205],{},"字面量就是代码中直接写出来的数据。",[15,155207,155209],{"className":30449,"code":155208,"language":30451,"meta":20,"style":20},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[22,155210,155211,155218,155225,155232,155239],{"__ignoreMap":20},[25,155212,155213,155215],{"class":27,"line":28},[25,155214,554],{"class":35},[25,155216,155217],{"class":302},"          # 整数\n",[25,155219,155220,155222],{"class":27,"line":39},[25,155221,293],{"class":35},[25,155223,155224],{"class":302},"         # 小数\n",[25,155226,155227,155229],{"class":27,"line":51},[25,155228,5954],{"class":45},[25,155230,155231],{"class":302},"      # 字符串\n",[25,155233,155234,155236],{"class":27,"line":59},[25,155235,31547],{"class":35},[25,155237,155238],{"class":302},"         # 布尔值\n",[25,155240,155241,155243],{"class":27,"line":67},[25,155242,95757],{"class":35},[25,155244,155245],{"class":302},"         # 空值\n",[99,155247,155248],{},"常见字面量类型：",[380,155250,155251,155261],{},[383,155252,155253],{},[386,155254,155255,155257,155259],{},[389,155256,23847],{},[389,155258,27563],{},[389,155260,25940],{},[427,155262,155263,155274,155285,155296,155308,155320,155332,155345,155357],{},[386,155264,155265,155267,155271],{},[432,155266,248],{},[432,155268,155269],{},[22,155270,554],{},[432,155272,155273],{},"整数",[386,155275,155276,155278,155282],{},[432,155277,284],{},[432,155279,155280],{},[22,155281,293],{},[432,155283,155284],{},"浮点数",[386,155286,155287,155289,155293],{},[432,155288,1412],{},[432,155290,155291],{},[22,155292,5954],{},[432,155294,155295],{},"字符串",[386,155297,155298,155300,155306],{},[432,155299,1466],{},[432,155301,155302,455,155304],{},[22,155303,31547],{},[22,155305,34058],{},[432,155307,66086],{},[386,155309,155310,155313,155317],{},[432,155311,155312],{},"NoneType",[432,155314,155315],{},[22,155316,95757],{},[432,155318,155319],{},"空值",[386,155321,155322,155324,155329],{},[432,155323,154141],{},[432,155325,155326],{},[22,155327,155328],{},"[1, 2, 3]",[432,155330,155331],{},"列表",[386,155333,155334,155337,155342],{},[432,155335,155336],{},"tuple",[432,155338,155339],{},[22,155340,155341],{},"(1, 2, 3)",[432,155343,155344],{},"元组",[386,155346,155347,155349,155354],{},[432,155348,114617],{},[432,155350,155351],{},[22,155352,155353],{},"{\"name\": \"张三\"}",[432,155355,155356],{},"字典",[386,155358,155359,155362,155367],{},[432,155360,155361],{},"set",[432,155363,155364],{},[22,155365,155366],{},"{1, 2, 3}",[432,155368,155369],{},"集合",[182,155371,155373],{"id":155372},"_23-变量","2.3 变量",[99,155375,155376],{},"变量是保存数据的名字。",[15,155378,155380],{"className":30449,"code":155379,"language":30451,"meta":20,"style":20},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[22,155381,155382,155390,155398,155408],{"__ignoreMap":20},[25,155383,155384,155386,155388],{"class":27,"line":28},[25,155385,146607],{"class":244},[25,155387,290],{"class":240},[25,155389,149424],{"class":45},[25,155391,155392,155394,155396],{"class":27,"line":39},[25,155393,146617],{"class":244},[25,155395,290],{"class":240},[25,155397,146622],{"class":35},[25,155399,155400,155403,155405],{"class":27,"line":51},[25,155401,155402],{"class":244},"height ",[25,155404,290],{"class":240},[25,155406,155407],{"class":35}," 1.75\n",[25,155409,155410,155413,155415],{"class":27,"line":59},[25,155411,155412],{"class":244},"is_student ",[25,155414,290],{"class":240},[25,155416,153670],{"class":35},[99,155418,155419],{},"Python 的变量不需要提前声明类型：",[15,155421,155423],{"className":30449,"code":155422,"language":30451,"meta":20,"style":20},"score = 100\nscore = \"满分\"\n",[22,155424,155425,155435],{"__ignoreMap":20},[25,155426,155427,155430,155432],{"class":27,"line":28},[25,155428,155429],{"class":244},"score ",[25,155431,290],{"class":240},[25,155433,155434],{"class":35}," 100\n",[25,155436,155437,155439,155441],{"class":27,"line":39},[25,155438,155429],{"class":244},[25,155440,290],{"class":240},[25,155442,155443],{"class":45}," \"满分\"\n",[99,155445,155446],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[182,155448,155450],{"id":155449},"_24-变量命名规则","2.4 变量命名规则",[99,155452,155453],{},"硬性规则：",[194,155455,155456,155459,155462,155465],{},[106,155457,155458],{},"只能由字母、数字、下划线组成。",[106,155460,155461],{},"不能以数字开头。",[106,155463,155464],{},"不能使用 Python 关键字。",[106,155466,155467],{},"区分大小写。",[15,155469,155471],{"className":30449,"code":155470,"language":30451,"meta":20,"style":20},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[22,155472,155473,155482,155491],{"__ignoreMap":20},[25,155474,155475,155478,155480],{"class":27,"line":28},[25,155476,155477],{"class":244},"user_name ",[25,155479,290],{"class":240},[25,155481,146612],{"class":45},[25,155483,155484,155487,155489],{"class":27,"line":39},[25,155485,155486],{"class":244},"age2 ",[25,155488,290],{"class":240},[25,155490,146622],{"class":35},[25,155492,155493,155496,155498],{"class":27,"line":51},[25,155494,155495],{"class":244},"_token ",[25,155497,290],{"class":240},[25,155499,155500],{"class":45}," \"abc\"\n",[99,155502,155503],{},"错误写法：",[15,155505,155507],{"className":30449,"code":155506,"language":30451,"meta":20,"style":20},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[22,155508,155509,155518,155530],{"__ignoreMap":20},[25,155510,155511,155514,155516],{"class":27,"line":28},[25,155512,155513],{"class":77474},"2age",[25,155515,13674],{"class":240},[25,155517,146622],{"class":35},[25,155519,155520,155522,155524,155526,155528],{"class":27,"line":39},[25,155521,131655],{"class":244},[25,155523,775],{"class":240},[25,155525,146607],{"class":244},[25,155527,290],{"class":240},[25,155529,146612],{"class":45},[25,155531,155532,155534,155536],{"class":27,"line":51},[25,155533,14804],{"class":240},[25,155535,13674],{"class":240},[25,155537,155538],{"class":45}," \"一班\"\n",[99,155540,155541],{},"查看关键字：",[15,155543,155545],{"className":30449,"code":155544,"language":30451,"meta":20,"style":20},"import keyword\n\nprint(keyword.kwlist)\n",[22,155546,155547,155554,155558],{"__ignoreMap":20},[25,155548,155549,155551],{"class":27,"line":28},[25,155550,30463],{"class":240},[25,155552,155553],{"class":244}," keyword\n",[25,155555,155556],{"class":27,"line":39},[25,155557,2510],{"emptyLinePlaceholder":167},[25,155559,155560,155562],{"class":27,"line":51},[25,155561,30486],{"class":35},[25,155563,155564],{"class":244},"(keyword.kwlist)\n",[99,155566,155567],{},"推荐命名风格：",[15,155569,155571],{"className":30449,"code":155570,"language":30451,"meta":20,"style":20},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[22,155572,155573,155582,155592],{"__ignoreMap":20},[25,155574,155575,155578,155580],{"class":27,"line":28},[25,155576,155577],{"class":244},"student_name ",[25,155579,290],{"class":240},[25,155581,149424],{"class":45},[25,155583,155584,155587,155589],{"class":27,"line":39},[25,155585,155586],{"class":244},"total_price ",[25,155588,290],{"class":240},[25,155590,155591],{"class":35}," 99.8\n",[25,155593,155594,155597,155599],{"class":27,"line":51},[25,155595,155596],{"class":244},"is_finished ",[25,155598,290],{"class":240},[25,155600,125878],{"class":35},[99,155602,155603],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[182,155605,50803],{"id":50802},[99,155607,104437,155608,155611],{},[22,155609,155610],{},"type()"," 查看数据类型：",[15,155613,155615],{"className":30449,"code":155614,"language":30451,"meta":20,"style":20},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[22,155616,155617,155631,155645,155659,155673],{"__ignoreMap":20},[25,155618,155619,155621,155623,155625,155627,155629],{"class":27,"line":28},[25,155620,30486],{"class":35},[25,155622,245],{"class":244},[25,155624,103178],{"class":35},[25,155626,245],{"class":244},[25,155628,554],{"class":35},[25,155630,30568],{"class":244},[25,155632,155633,155635,155637,155639,155641,155643],{"class":27,"line":39},[25,155634,30486],{"class":35},[25,155636,245],{"class":244},[25,155638,103178],{"class":35},[25,155640,245],{"class":244},[25,155642,293],{"class":35},[25,155644,30568],{"class":244},[25,155646,155647,155649,155651,155653,155655,155657],{"class":27,"line":51},[25,155648,30486],{"class":35},[25,155650,245],{"class":244},[25,155652,103178],{"class":35},[25,155654,245],{"class":244},[25,155656,5954],{"class":45},[25,155658,30568],{"class":244},[25,155660,155661,155663,155665,155667,155669,155671],{"class":27,"line":59},[25,155662,30486],{"class":35},[25,155664,245],{"class":244},[25,155666,103178],{"class":35},[25,155668,245],{"class":244},[25,155670,31547],{"class":35},[25,155672,30568],{"class":244},[25,155674,155675,155677,155679,155681,155683,155685],{"class":27,"line":67},[25,155676,30486],{"class":35},[25,155678,245],{"class":244},[25,155680,103178],{"class":35},[25,155682,245],{"class":244},[25,155684,95757],{"class":35},[25,155686,30568],{"class":244},[99,155688,155689],{},"输出类似：",[15,155691,155694],{"className":155692,"code":155693,"language":5297,"meta":20},[5295],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[22,155695,155693],{"__ignoreMap":20},[99,155697,9135,155698,107354,155700,155702,155703,155705,155706,21610,155708,155705,155710,155712],{},[22,155699,1466],{},[22,155701,248],{}," 的子类，",[22,155704,31547],{}," 可以当作 ",[22,155707,460],{},[22,155709,34058],{},[22,155711,434],{},"，但业务代码中不要滥用。",[15,155714,155716],{"className":30449,"code":155715,"language":30451,"meta":20,"style":20},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[22,155717,155718,155736],{"__ignoreMap":20},[25,155719,155720,155722,155724,155726,155728,155730,155733],{"class":27,"line":28},[25,155721,30486],{"class":35},[25,155723,245],{"class":244},[25,155725,31547],{"class":35},[25,155727,45637],{"class":240},[25,155729,25225],{"class":35},[25,155731,155732],{"class":244},")   ",[25,155734,155735],{"class":302},"# 2\n",[25,155737,155738,155740,155742,155744,155746,155748,155750],{"class":27,"line":39},[25,155739,30486],{"class":35},[25,155741,245],{"class":244},[25,155743,34058],{"class":35},[25,155745,45637],{"class":240},[25,155747,25225],{"class":35},[25,155749,45879],{"class":244},[25,155751,155752],{"class":302},"# 1\n",[182,155754,155756],{"id":155755},"_26-类型转换","2.6 类型转换",[99,155758,155759],{},"常用转换函数：",[15,155761,155763],{"className":30449,"code":155762,"language":30451,"meta":20,"style":20},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[22,155764,155765,155775,155786,155796],{"__ignoreMap":20},[25,155766,155767,155769,155771,155773],{"class":27,"line":28},[25,155768,248],{"class":35},[25,155770,245],{"class":244},[25,155772,54387],{"class":45},[25,155774,251],{"class":244},[25,155776,155777,155779,155781,155784],{"class":27,"line":39},[25,155778,284],{"class":35},[25,155780,245],{"class":244},[25,155782,155783],{"class":45},"\"3.14\"",[25,155785,251],{"class":244},[25,155787,155788,155790,155792,155794],{"class":27,"line":51},[25,155789,1412],{"class":35},[25,155791,245],{"class":244},[25,155793,554],{"class":35},[25,155795,251],{"class":244},[25,155797,155798,155800,155802,155804],{"class":27,"line":59},[25,155799,1466],{"class":35},[25,155801,245],{"class":244},[25,155803,460],{"class":35},[25,155805,251],{"class":244},[99,155807,15245],{},[15,155809,155811],{"className":30449,"code":155810,"language":30451,"meta":20,"style":20},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[22,155812,155813,155822,155833],{"__ignoreMap":20},[25,155814,155815,155817,155819],{"class":27,"line":28},[25,155816,146617],{"class":244},[25,155818,290],{"class":240},[25,155820,155821],{"class":45}," \"18\"\n",[25,155823,155824,155826,155828,155830],{"class":27,"line":39},[25,155825,146617],{"class":244},[25,155827,290],{"class":240},[25,155829,2492],{"class":35},[25,155831,155832],{"class":244},"(age)\n",[25,155834,155835,155837,155840,155842,155844],{"class":27,"line":51},[25,155836,30486],{"class":35},[25,155838,155839],{"class":244},"(age ",[25,155841,724],{"class":240},[25,155843,25225],{"class":35},[25,155845,251],{"class":244},[99,155847,155848],{},"输入得到的内容永远是字符串：",[15,155850,155852],{"className":30449,"code":155851,"language":30451,"meta":20,"style":20},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[22,155853,155854,155870],{"__ignoreMap":20},[25,155855,155856,155859,155861,155863,155865,155868],{"class":27,"line":28},[25,155857,155858],{"class":244},"num ",[25,155860,290],{"class":240},[25,155862,60676],{"class":35},[25,155864,245],{"class":244},[25,155866,155867],{"class":45},"\"请输入数字:\"",[25,155869,251],{"class":244},[25,155871,155872,155874,155876,155878,155881],{"class":27,"line":39},[25,155873,30486],{"class":35},[25,155875,245],{"class":244},[25,155877,103178],{"class":35},[25,155879,155880],{"class":244},"(num))  ",[25,155882,155883],{"class":302},"# str\n",[99,155885,155886],{},"如果要做数学运算，必须转换：",[15,155888,155890],{"className":30449,"code":155889,"language":30451,"meta":20,"style":20},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[22,155891,155892,155910],{"__ignoreMap":20},[25,155893,155894,155896,155898,155900,155902,155904,155906,155908],{"class":27,"line":28},[25,155895,155858],{"class":244},[25,155897,290],{"class":240},[25,155899,2492],{"class":35},[25,155901,245],{"class":244},[25,155903,53892],{"class":35},[25,155905,245],{"class":244},[25,155907,155867],{"class":45},[25,155909,30568],{"class":244},[25,155911,155912,155914,155916,155918,155920],{"class":27,"line":39},[25,155913,30486],{"class":35},[25,155915,45690],{"class":244},[25,155917,724],{"class":240},[25,155919,2148],{"class":35},[25,155921,251],{"class":244},[99,155923,155924],{},"常见错误：",[15,155926,155928],{"className":30449,"code":155927,"language":30451,"meta":20,"style":20},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[22,155929,155930,155943],{"__ignoreMap":20},[25,155931,155932,155934,155936,155938,155940],{"class":27,"line":28},[25,155933,248],{"class":35},[25,155935,245],{"class":244},[25,155937,155783],{"class":45},[25,155939,155732],{"class":244},[25,155941,155942],{"class":302},"# 错误\n",[25,155944,155945,155947,155949,155952,155955],{"class":27,"line":39},[25,155946,248],{"class":35},[25,155948,245],{"class":244},[25,155950,155951],{"class":45},"\"abc\"",[25,155953,155954],{"class":244},")    ",[25,155956,155942],{"class":302},[99,155958,155959],{},"正确写法：",[15,155961,155963],{"className":30449,"code":155962,"language":30451,"meta":20,"style":20},"num = float(\"3.14\")\n",[22,155964,155965],{"__ignoreMap":20},[25,155966,155967,155969,155971,155973,155975,155977],{"class":27,"line":28},[25,155968,155858],{"class":244},[25,155970,290],{"class":240},[25,155972,109868],{"class":35},[25,155974,245],{"class":244},[25,155976,155783],{"class":45},[25,155978,251],{"class":244},[182,155980,155982],{"id":155981},"_27-运算符","2.7 运算符",[210,155984,155986],{"id":155985},"_271-算术运算符","2.7.1 算术运算符",[380,155988,155989,156000],{},[383,155990,155991],{},[386,155992,155993,155996,155998],{},[389,155994,155995],{},"运算符",[389,155997,25940],{},[389,155999,27563],{},[427,156001,156002,156016,156030,156044,156058,156072,156086],{},[386,156003,156004,156008,156011],{},[432,156005,156006],{},[22,156007,724],{},[432,156009,156010],{},"加法",[432,156012,156013],{},[22,156014,156015],{},"1 + 2",[386,156017,156018,156022,156025],{},[432,156019,156020],{},[22,156021,775],{},[432,156023,156024],{},"减法",[432,156026,156027],{},[22,156028,156029],{},"5 - 3",[386,156031,156032,156036,156039],{},[432,156033,156034],{},[22,156035,698],{},[432,156037,156038],{},"乘法",[432,156040,156041],{},[22,156042,156043],{},"2 * 3",[386,156045,156046,156050,156053],{},[432,156047,156048],{},[22,156049,827],{},[432,156051,156052],{},"除法，结果是浮点数",[432,156054,156055],{},[22,156056,156057],{},"5 \u002F 2",[386,156059,156060,156064,156067],{},[432,156061,156062],{},[22,156063,33400],{},[432,156065,156066],{},"整除",[432,156068,156069],{},[22,156070,156071],{},"5 \u002F\u002F 2",[386,156073,156074,156078,156081],{},[432,156075,156076],{},[22,156077,571],{},[432,156079,156080],{},"取余",[432,156082,156083],{},[22,156084,156085],{},"5 % 2",[386,156087,156088,156092,156095],{},[432,156089,156090],{},[22,156091,10771],{},[432,156093,156094],{},"幂运算",[432,156096,156097],{},[22,156098,156099],{},"2 ** 3",[99,156101,15245],{},[15,156103,156105],{"className":30449,"code":156104,"language":30451,"meta":20,"style":20},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[22,156106,156107,156125,156142,156159],{"__ignoreMap":20},[25,156108,156109,156111,156113,156115,156118,156120,156122],{"class":27,"line":28},[25,156110,30486],{"class":35},[25,156112,245],{"class":244},[25,156114,562],{"class":35},[25,156116,156117],{"class":240}," \u002F",[25,156119,14865],{"class":35},[25,156121,155732],{"class":244},[25,156123,156124],{"class":302},"# 2.5\n",[25,156126,156127,156129,156131,156133,156136,156138,156140],{"class":27,"line":39},[25,156128,30486],{"class":35},[25,156130,245],{"class":244},[25,156132,562],{"class":35},[25,156134,156135],{"class":240}," \u002F\u002F",[25,156137,14865],{"class":35},[25,156139,45879],{"class":244},[25,156141,155735],{"class":302},[25,156143,156144,156146,156148,156150,156153,156155,156157],{"class":27,"line":51},[25,156145,30486],{"class":35},[25,156147,245],{"class":244},[25,156149,562],{"class":35},[25,156151,156152],{"class":240}," %",[25,156154,14865],{"class":35},[25,156156,155732],{"class":244},[25,156158,155752],{"class":302},[25,156160,156161,156163,156165,156167,156170,156172,156174],{"class":27,"line":59},[25,156162,30486],{"class":35},[25,156164,245],{"class":244},[25,156166,321],{"class":35},[25,156168,156169],{"class":240}," **",[25,156171,78141],{"class":35},[25,156173,45879],{"class":244},[25,156175,156176],{"class":302},"# 8\n",[210,156178,156180],{"id":156179},"_272-赋值运算符","2.7.2 赋值运算符",[15,156182,156184],{"className":30449,"code":156183,"language":30451,"meta":20,"style":20},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[22,156185,156186,156194,156202,156210,156218],{"__ignoreMap":20},[25,156187,156188,156190,156192],{"class":27,"line":28},[25,156189,155858],{"class":244},[25,156191,290],{"class":240},[25,156193,58499],{"class":35},[25,156195,156196,156198,156200],{"class":27,"line":39},[25,156197,155858],{"class":244},[25,156199,9587],{"class":240},[25,156201,54498],{"class":35},[25,156203,156204,156206,156208],{"class":27,"line":51},[25,156205,155858],{"class":244},[25,156207,150323],{"class":240},[25,156209,47794],{"class":35},[25,156211,156212,156214,156216],{"class":27,"line":59},[25,156213,155858],{"class":244},[25,156215,137219],{"class":240},[25,156217,120107],{"class":35},[25,156219,156220,156222,156225],{"class":27,"line":67},[25,156221,155858],{"class":244},[25,156223,156224],{"class":240},"\u002F=",[25,156226,47794],{"class":35},[99,156228,156229],{},"等价关系：",[15,156231,156233],{"className":30449,"code":156232,"language":30451,"meta":20,"style":20},"num += 1\nnum = num + 1\n",[22,156234,156235,156243],{"__ignoreMap":20},[25,156236,156237,156239,156241],{"class":27,"line":28},[25,156238,155858],{"class":244},[25,156240,9587],{"class":240},[25,156242,55770],{"class":35},[25,156244,156245,156247,156249,156252,156254],{"class":27,"line":39},[25,156246,155858],{"class":244},[25,156248,290],{"class":240},[25,156250,156251],{"class":244}," num ",[25,156253,724],{"class":240},[25,156255,55770],{"class":35},[99,156257,156258,156259,101089,156262,28456],{},"Python 没有 ",[22,156260,156261],{},"num++",[22,156263,156264],{},"num--",[210,156266,156268],{"id":156267},"_273-比较运算符","2.7.3 比较运算符",[99,156270,156271],{},"比较运算结果是布尔值。",[15,156273,156275],{"className":30449,"code":156274,"language":30451,"meta":20,"style":20},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[22,156276,156277,156291,156306,156320],{"__ignoreMap":20},[25,156278,156279,156281,156283,156285,156287,156289],{"class":27,"line":28},[25,156280,30486],{"class":35},[25,156282,245],{"class":244},[25,156284,689],{"class":35},[25,156286,26293],{"class":240},[25,156288,2258],{"class":35},[25,156290,251],{"class":244},[25,156292,156293,156295,156297,156299,156302,156304],{"class":27,"line":39},[25,156294,30486],{"class":35},[25,156296,245],{"class":244},[25,156298,689],{"class":35},[25,156300,156301],{"class":240}," >=",[25,156303,2148],{"class":35},[25,156305,251],{"class":244},[25,156307,156308,156310,156312,156314,156316,156318],{"class":27,"line":51},[25,156309,30486],{"class":35},[25,156311,245],{"class":244},[25,156313,689],{"class":35},[25,156315,101630],{"class":240},[25,156317,2193],{"class":35},[25,156319,251],{"class":244},[25,156321,156322,156324,156326,156328,156331,156333],{"class":27,"line":59},[25,156323,30486],{"class":35},[25,156325,245],{"class":244},[25,156327,689],{"class":35},[25,156329,156330],{"class":240}," !=",[25,156332,2193],{"class":35},[25,156334,251],{"class":244},[99,156336,156337,156338,156340,156341,28456],{},"注意：判断相等用 ",[22,156339,3059],{},"，赋值用 ",[22,156342,290],{},[15,156344,156346],{"className":30449,"code":156345,"language":30451,"meta":20,"style":20},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[22,156347,156348,156360],{"__ignoreMap":20},[25,156349,156350,156352,156354,156357],{"class":27,"line":28},[25,156351,146617],{"class":244},[25,156353,290],{"class":240},[25,156355,156356],{"class":35}," 18",[25,156358,156359],{"class":302},"       # 赋值\n",[25,156361,156362,156364,156366,156368],{"class":27,"line":39},[25,156363,146617],{"class":244},[25,156365,3059],{"class":240},[25,156367,156356],{"class":35},[25,156369,156370],{"class":302},"      # 判断是否相等\n",[210,156372,156374],{"id":156373},"_274-逻辑运算符","2.7.4 逻辑运算符",[380,156376,156377,156385],{},[383,156378,156379],{},[386,156380,156381,156383],{},[389,156382,155995],{},[389,156384,25940],{},[427,156386,156387,156396,156405],{},[386,156388,156389,156393],{},[432,156390,156391],{},[22,156392,30533],{},[432,156394,156395],{},"并且",[386,156397,156398,156402],{},[432,156399,156400],{},[22,156401,115161],{},[432,156403,156404],{},"或者",[386,156406,156407,156412],{},[432,156408,156409],{},[22,156410,156411],{},"not",[432,156413,156414],{},"取反",[15,156416,156418],{"className":30449,"code":156417,"language":30451,"meta":20,"style":20},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[22,156419,156420,156428,156437,156441,156456,156470],{"__ignoreMap":20},[25,156421,156422,156424,156426],{"class":27,"line":28},[25,156423,146617],{"class":244},[25,156425,290],{"class":240},[25,156427,88136],{"class":35},[25,156429,156430,156433,156435],{"class":27,"line":39},[25,156431,156432],{"class":244},"has_ticket ",[25,156434,290],{"class":240},[25,156436,153670],{"class":35},[25,156438,156439],{"class":27,"line":51},[25,156440,2510],{"emptyLinePlaceholder":167},[25,156442,156443,156445,156447,156449,156451,156453],{"class":27,"line":59},[25,156444,30486],{"class":35},[25,156446,155839],{"class":244},[25,156448,1821],{"class":240},[25,156450,156356],{"class":35},[25,156452,120500],{"class":240},[25,156454,156455],{"class":244}," has_ticket)\n",[25,156457,156458,156460,156462,156464,156466,156468],{"class":27,"line":67},[25,156459,30486],{"class":35},[25,156461,155839],{"class":244},[25,156463,1153],{"class":240},[25,156465,156356],{"class":35},[25,156467,114272],{"class":240},[25,156469,156455],{"class":244},[25,156471,156472,156474,156476,156478],{"class":27,"line":75},[25,156473,30486],{"class":35},[25,156475,245],{"class":244},[25,156477,156411],{"class":240},[25,156479,156455],{"class":244},[182,156481,156483],{"id":156482},"_28-字符串定义","2.8 字符串定义",[99,156485,156486],{},"三种常见写法：",[15,156488,156490],{"className":30449,"code":156489,"language":30451,"meta":20,"style":20},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[22,156491,156492,156502,156511,156521],{"__ignoreMap":20},[25,156493,156494,156497,156499],{"class":27,"line":28},[25,156495,156496],{"class":244},"name1 ",[25,156498,290],{"class":240},[25,156500,156501],{"class":45}," '小明'\n",[25,156503,156504,156507,156509],{"class":27,"line":39},[25,156505,156506],{"class":244},"name2 ",[25,156508,290],{"class":240},[25,156510,149424],{"class":45},[25,156512,156513,156516,156518],{"class":27,"line":51},[25,156514,156515],{"class":244},"text ",[25,156517,290],{"class":240},[25,156519,156520],{"class":45}," \"\"\"这是多行字符串\n",[25,156522,156523],{"class":27,"line":59},[25,156524,156525],{"class":45},"可以换行\"\"\"\n",[99,156527,156528],{},"字符串中包含引号：",[15,156530,156532],{"className":30449,"code":156531,"language":30451,"meta":20,"style":20},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[22,156533,156534,156544,156554],{"__ignoreMap":20},[25,156535,156536,156539,156541],{"class":27,"line":28},[25,156537,156538],{"class":244},"msg ",[25,156540,290],{"class":240},[25,156542,156543],{"class":45}," \"他说:'你好'\"\n",[25,156545,156546,156549,156551],{"class":27,"line":39},[25,156547,156548],{"class":244},"msg2 ",[25,156550,290],{"class":240},[25,156552,156553],{"class":45}," '他说:\"你好\"'\n",[25,156555,156556,156559,156561,156564,156567,156570,156572],{"class":27,"line":51},[25,156557,156558],{"class":244},"msg3 ",[25,156560,290],{"class":240},[25,156562,156563],{"class":45}," \"他说:",[25,156565,156566],{"class":35},"\\\"",[25,156568,156569],{"class":45},"你好",[25,156571,156566],{"class":35},[25,156573,25240],{"class":45},[99,156575,156576],{},"常见转义字符：",[380,156578,156579,156588],{},[383,156580,156581],{},[386,156582,156583,156586],{},[389,156584,156585],{},"写法",[389,156587,100771],{},[427,156589,156590,156600,156609,156619,156628],{},[386,156591,156592,156597],{},[432,156593,156594],{},[22,156595,156596],{},"\\n",[432,156598,156599],{},"换行",[386,156601,156602,156606],{},[432,156603,156604],{},[22,156605,1343],{},[432,156607,156608],{},"制表符",[386,156610,156611,156616],{},[432,156612,156613],{},[22,156614,156615],{},"\\\\",[432,156617,156618],{},"反斜杠",[386,156620,156621,156625],{},[432,156622,156623],{},[22,156624,156566],{},[432,156626,156627],{},"双引号",[386,156629,156630,156635],{},[432,156631,156632],{},[22,156633,156634],{},"\\'",[432,156636,156637],{},"单引号",[182,156639,156641],{"id":156640},"_29-字符串拼接","2.9 字符串拼接",[15,156643,156645],{"className":30449,"code":156644,"language":30451,"meta":20,"style":20},"name = \"小明\"\nprint(\"你好，\" + name)\n",[22,156646,156647,156655],{"__ignoreMap":20},[25,156648,156649,156651,156653],{"class":27,"line":28},[25,156650,146607],{"class":244},[25,156652,290],{"class":240},[25,156654,149424],{"class":45},[25,156656,156657,156659,156661,156664,156666],{"class":27,"line":39},[25,156658,30486],{"class":35},[25,156660,245],{"class":244},[25,156662,156663],{"class":45},"\"你好，\"",[25,156665,45637],{"class":240},[25,156667,156668],{"class":244}," name)\n",[99,156670,156671],{},"字符串只能和字符串拼接：",[15,156673,156675],{"className":30449,"code":156674,"language":30451,"meta":20,"style":20},"age = 18\nprint(\"年龄:\" + str(age))\n",[22,156676,156677,156685],{"__ignoreMap":20},[25,156678,156679,156681,156683],{"class":27,"line":28},[25,156680,146617],{"class":244},[25,156682,290],{"class":240},[25,156684,146622],{"class":35},[25,156686,156687,156689,156691,156693,156695,156697],{"class":27,"line":39},[25,156688,30486],{"class":35},[25,156690,245],{"class":244},[25,156692,146588],{"class":45},[25,156694,45637],{"class":240},[25,156696,73990],{"class":35},[25,156698,156699],{"class":244},"(age))\n",[99,156701,156702],{},"更推荐使用格式化字符串。",[182,156704,156706],{"id":156705},"_210-字符串格式化","2.10 字符串格式化",[210,156708,156710],{"id":156709},"_2101-百分号格式化","2.10.1 百分号格式化",[15,156712,156714],{"className":30449,"code":156713,"language":30451,"meta":20,"style":20},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[22,156715,156716,156724,156732,156741,156745],{"__ignoreMap":20},[25,156717,156718,156720,156722],{"class":27,"line":28},[25,156719,146607],{"class":244},[25,156721,290],{"class":240},[25,156723,149424],{"class":45},[25,156725,156726,156728,156730],{"class":27,"line":39},[25,156727,146617],{"class":244},[25,156729,290],{"class":240},[25,156731,146622],{"class":35},[25,156733,156734,156736,156738],{"class":27,"line":51},[25,156735,155429],{"class":244},[25,156737,290],{"class":240},[25,156739,156740],{"class":35}," 95.5\n",[25,156742,156743],{"class":27,"line":59},[25,156744,2510],{"emptyLinePlaceholder":167},[25,156746,156747,156749,156751,156754,156757,156760,156763,156766,156769,156771,156773],{"class":27,"line":67},[25,156748,30486],{"class":35},[25,156750,245],{"class":244},[25,156752,156753],{"class":45},"\"姓名:",[25,156755,156756],{"class":35},"%s",[25,156758,156759],{"class":45}," 年龄:",[25,156761,156762],{"class":35},"%d",[25,156764,156765],{"class":45}," 分数:",[25,156767,156768],{"class":35},"%.1f",[25,156770,494],{"class":45},[25,156772,156152],{"class":240},[25,156774,156775],{"class":244}," (name, age, score))\n",[99,156777,156778],{},"常用占位符：",[380,156780,156781,156790],{},[383,156782,156783],{},[386,156784,156785,156788],{},[389,156786,156787],{},"占位符",[389,156789,25940],{},[427,156791,156792,156800,156808],{},[386,156793,156794,156798],{},[432,156795,156796],{},[22,156797,156756],{},[432,156799,155295],{},[386,156801,156802,156806],{},[432,156803,156804],{},[22,156805,156762],{},[432,156807,155273],{},[386,156809,156810,156815],{},[432,156811,156812],{},[22,156813,156814],{},"%f",[432,156816,155284],{},[99,156818,156819],{},"精度控制：",[15,156821,156823],{"className":30449,"code":156822,"language":30451,"meta":20,"style":20},"price = 12.3456\nprint(\"%.2f\" % price)\n",[22,156824,156825,156834],{"__ignoreMap":20},[25,156826,156827,156829,156831],{"class":27,"line":28},[25,156828,146752],{"class":244},[25,156830,290],{"class":240},[25,156832,156833],{"class":35}," 12.3456\n",[25,156835,156836,156838,156840,156842,156845,156847,156849],{"class":27,"line":39},[25,156837,30486],{"class":35},[25,156839,245],{"class":244},[25,156841,494],{"class":45},[25,156843,156844],{"class":35},"%.2f",[25,156846,494],{"class":45},[25,156848,156152],{"class":240},[25,156850,156851],{"class":244}," price)\n",[210,156853,156855],{"id":156854},"_2102-format方法","2.10.2 format方法",[15,156857,156859],{"className":30449,"code":156858,"language":30451,"meta":20,"style":20},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[22,156860,156861,156869,156877,156881,156900,156920],{"__ignoreMap":20},[25,156862,156863,156865,156867],{"class":27,"line":28},[25,156864,146607],{"class":244},[25,156866,290],{"class":240},[25,156868,149424],{"class":45},[25,156870,156871,156873,156875],{"class":27,"line":39},[25,156872,146617],{"class":244},[25,156874,290],{"class":240},[25,156876,146622],{"class":35},[25,156878,156879],{"class":27,"line":51},[25,156880,2510],{"emptyLinePlaceholder":167},[25,156882,156883,156885,156887,156889,156891,156893,156895,156897],{"class":27,"line":59},[25,156884,30486],{"class":35},[25,156886,245],{"class":244},[25,156888,156753],{"class":45},[25,156890,32530],{"class":35},[25,156892,156759],{"class":45},[25,156894,32530],{"class":35},[25,156896,494],{"class":45},[25,156898,156899],{"class":244},".format(name, age))\n",[25,156901,156902,156904,156906,156908,156911,156913,156916,156918],{"class":27,"line":67},[25,156903,30486],{"class":35},[25,156905,245],{"class":244},[25,156907,156753],{"class":45},[25,156909,156910],{"class":35},"{0}",[25,156912,156759],{"class":45},[25,156914,156915],{"class":35},"{1}",[25,156917,494],{"class":45},[25,156919,156899],{"class":244},[25,156921,156922,156924,156926,156928,156931,156933,156936,156938,156941,156943,156945,156948,156950,156952],{"class":27,"line":75},[25,156923,30486],{"class":35},[25,156925,245],{"class":244},[25,156927,156753],{"class":45},[25,156929,156930],{"class":35},"{name}",[25,156932,156759],{"class":45},[25,156934,156935],{"class":35},"{age}",[25,156937,494],{"class":45},[25,156939,156940],{"class":244},".format(",[25,156942,79881],{"class":5326},[25,156944,290],{"class":240},[25,156946,156947],{"class":244},"name, ",[25,156949,70292],{"class":5326},[25,156951,290],{"class":240},[25,156953,156954],{"class":244},"age))\n",[210,156956,156958],{"id":156957},"_2103-f-string","2.10.3 f-string",[99,156960,156961],{},"推荐写法：",[15,156963,156965],{"className":30449,"code":156964,"language":30451,"meta":20,"style":20},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[22,156966,156967,156975,156983,156991,156995],{"__ignoreMap":20},[25,156968,156969,156971,156973],{"class":27,"line":28},[25,156970,146607],{"class":244},[25,156972,290],{"class":240},[25,156974,149424],{"class":45},[25,156976,156977,156979,156981],{"class":27,"line":39},[25,156978,146617],{"class":244},[25,156980,290],{"class":240},[25,156982,146622],{"class":35},[25,156984,156985,156987,156989],{"class":27,"line":51},[25,156986,155429],{"class":244},[25,156988,290],{"class":240},[25,156990,156740],{"class":35},[25,156992,156993],{"class":27,"line":59},[25,156994,2510],{"emptyLinePlaceholder":167},[25,156996,156997,156999,157001,157003,157005,157007,157009,157011,157013,157015,157017,157019,157021,157023,157026,157029,157031,157033],{"class":27,"line":67},[25,156998,30486],{"class":35},[25,157000,245],{"class":244},[25,157002,296],{"class":240},[25,157004,156753],{"class":45},[25,157006,1139],{"class":35},[25,157008,79881],{"class":244},[25,157010,1189],{"class":35},[25,157012,156759],{"class":45},[25,157014,1139],{"class":35},[25,157016,70292],{"class":244},[25,157018,1189],{"class":35},[25,157020,156765],{"class":45},[25,157022,1139],{"class":35},[25,157024,157025],{"class":244},"score",[25,157027,157028],{"class":240},":.1f",[25,157030,1189],{"class":35},[25,157032,494],{"class":45},[25,157034,251],{"class":244},[99,157036,157037],{},"表达式也可以放进去：",[15,157039,157041],{"className":30449,"code":157040,"language":30451,"meta":20,"style":20},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[22,157042,157043,157051,157059],{"__ignoreMap":20},[25,157044,157045,157047,157049],{"class":27,"line":28},[25,157046,146752],{"class":244},[25,157048,290],{"class":240},[25,157050,146757],{"class":35},[25,157052,157053,157055,157057],{"class":27,"line":39},[25,157054,146762],{"class":244},[25,157056,290],{"class":240},[25,157058,54498],{"class":35},[25,157060,157061,157063,157065,157067,157070,157072,157074,157076,157079,157081,157084],{"class":27,"line":51},[25,157062,30486],{"class":35},[25,157064,245],{"class":244},[25,157066,296],{"class":240},[25,157068,157069],{"class":45},"\"总价:",[25,157071,1139],{"class":35},[25,157073,146752],{"class":244},[25,157075,698],{"class":240},[25,157077,157078],{"class":244}," count",[25,157080,1189],{"class":35},[25,157082,157083],{"class":45},"元\"",[25,157085,251],{"class":244},[182,157087,157089],{"id":157088},"_211-input输入","2.11 input输入",[99,157091,157092,157095],{},[22,157093,157094],{},"input()"," 会暂停程序，等待用户输入。",[15,157097,157099],{"className":30449,"code":157098,"language":30451,"meta":20,"style":20},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[22,157100,157101,157115],{"__ignoreMap":20},[25,157102,157103,157105,157107,157109,157111,157113],{"class":27,"line":28},[25,157104,146607],{"class":244},[25,157106,290],{"class":240},[25,157108,60676],{"class":35},[25,157110,245],{"class":244},[25,157112,152450],{"class":45},[25,157114,251],{"class":244},[25,157116,157117,157119,157121,157123,157126,157128,157130,157132,157134],{"class":27,"line":39},[25,157118,30486],{"class":35},[25,157120,245],{"class":244},[25,157122,296],{"class":240},[25,157124,157125],{"class":45},"\"你好，",[25,157127,1139],{"class":35},[25,157129,79881],{"class":244},[25,157131,1189],{"class":35},[25,157133,494],{"class":45},[25,157135,251],{"class":244},[99,157137,157138],{},"输入整数：",[15,157140,157142],{"className":30449,"code":157141,"language":30451,"meta":20,"style":20},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[22,157143,157144,157162],{"__ignoreMap":20},[25,157145,157146,157148,157150,157152,157154,157156,157158,157160],{"class":27,"line":28},[25,157147,146617],{"class":244},[25,157149,290],{"class":240},[25,157151,2492],{"class":35},[25,157153,245],{"class":244},[25,157155,53892],{"class":35},[25,157157,245],{"class":244},[25,157159,152465],{"class":45},[25,157161,30568],{"class":244},[25,157163,157164,157166,157168,157170,157173,157175,157177,157179,157182,157184],{"class":27,"line":39},[25,157165,30486],{"class":35},[25,157167,245],{"class":244},[25,157169,296],{"class":240},[25,157171,157172],{"class":45},"\"明年你",[25,157174,1139],{"class":35},[25,157176,146617],{"class":244},[25,157178,724],{"class":240},[25,157180,157181],{"class":35}," 1}",[25,157183,149475],{"class":45},[25,157185,251],{"class":244},[99,157187,157188],{},"输入小数：",[15,157190,157192],{"className":30449,"code":157191,"language":30451,"meta":20,"style":20},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[22,157193,157194,157213],{"__ignoreMap":20},[25,157195,157196,157198,157200,157202,157204,157206,157208,157211],{"class":27,"line":28},[25,157197,155402],{"class":244},[25,157199,290],{"class":240},[25,157201,109868],{"class":35},[25,157203,245],{"class":244},[25,157205,53892],{"class":35},[25,157207,245],{"class":244},[25,157209,157210],{"class":45},"\"请输入身高:\"",[25,157212,30568],{"class":244},[25,157214,157215,157217,157219,157221,157224,157226,157228,157231,157233,157236],{"class":27,"line":39},[25,157216,30486],{"class":35},[25,157218,245],{"class":244},[25,157220,296],{"class":240},[25,157222,157223],{"class":45},"\"身高:",[25,157225,1139],{"class":35},[25,157227,25088],{"class":244},[25,157229,157230],{"class":240},":.2f",[25,157232,1189],{"class":35},[25,157234,157235],{"class":45},"米\"",[25,157237,251],{"class":244},[182,157239,157241],{"id":157240},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[99,157243,123363],{},[194,157245,157246,157249,157252,157255],{},[106,157247,157248],{},"输入商品单价。",[106,157250,157251],{},"输入购买数量。",[106,157253,157254],{},"输入折扣，例如 0.8 表示八折。",[106,157256,157257],{},"输出最终金额，保留两位小数。",[99,157259,10145],{},[15,157261,157263],{"className":30449,"code":157262,"language":30451,"meta":20,"style":20},"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",[22,157264,157265,157284,157303,157323,157327,157347,157351,157374,157395,157417],{"__ignoreMap":20},[25,157266,157267,157269,157271,157273,157275,157277,157279,157282],{"class":27,"line":28},[25,157268,146752],{"class":244},[25,157270,290],{"class":240},[25,157272,109868],{"class":35},[25,157274,245],{"class":244},[25,157276,53892],{"class":35},[25,157278,245],{"class":244},[25,157280,157281],{"class":45},"\"请输入商品单价:\"",[25,157283,30568],{"class":244},[25,157285,157286,157288,157290,157292,157294,157296,157298,157301],{"class":27,"line":39},[25,157287,146762],{"class":244},[25,157289,290],{"class":240},[25,157291,2492],{"class":35},[25,157293,245],{"class":244},[25,157295,53892],{"class":35},[25,157297,245],{"class":244},[25,157299,157300],{"class":45},"\"请输入购买数量:\"",[25,157302,30568],{"class":244},[25,157304,157305,157308,157310,157312,157314,157316,157318,157321],{"class":27,"line":51},[25,157306,157307],{"class":244},"discount ",[25,157309,290],{"class":240},[25,157311,109868],{"class":35},[25,157313,245],{"class":244},[25,157315,53892],{"class":35},[25,157317,245],{"class":244},[25,157319,157320],{"class":45},"\"请输入折扣:\"",[25,157322,30568],{"class":244},[25,157324,157325],{"class":27,"line":59},[25,157326,2510],{"emptyLinePlaceholder":167},[25,157328,157329,157332,157334,157337,157339,157342,157344],{"class":27,"line":67},[25,157330,157331],{"class":244},"total ",[25,157333,290],{"class":240},[25,157335,157336],{"class":244}," price ",[25,157338,698],{"class":240},[25,157340,157341],{"class":244}," count ",[25,157343,698],{"class":240},[25,157345,157346],{"class":244}," discount\n",[25,157348,157349],{"class":27,"line":75},[25,157350,2510],{"emptyLinePlaceholder":167},[25,157352,157353,157355,157357,157359,157362,157364,157366,157368,157370,157372],{"class":27,"line":83},[25,157354,30486],{"class":35},[25,157356,245],{"class":244},[25,157358,296],{"class":240},[25,157360,157361],{"class":45},"\"商品单价:",[25,157363,1139],{"class":35},[25,157365,79886],{"class":244},[25,157367,157230],{"class":240},[25,157369,1189],{"class":35},[25,157371,494],{"class":45},[25,157373,251],{"class":244},[25,157375,157376,157378,157380,157382,157385,157387,157389,157391,157393],{"class":27,"line":91},[25,157377,30486],{"class":35},[25,157379,245],{"class":244},[25,157381,296],{"class":240},[25,157383,157384],{"class":45},"\"购买数量:",[25,157386,1139],{"class":35},[25,157388,84505],{"class":244},[25,157390,1189],{"class":35},[25,157392,494],{"class":45},[25,157394,251],{"class":244},[25,157396,157397,157399,157401,157403,157406,157408,157411,157413,157415],{"class":27,"line":1429},[25,157398,30486],{"class":35},[25,157400,245],{"class":244},[25,157402,296],{"class":240},[25,157404,157405],{"class":45},"\"折扣:",[25,157407,1139],{"class":35},[25,157409,157410],{"class":244},"discount",[25,157412,1189],{"class":35},[25,157414,494],{"class":45},[25,157416,251],{"class":244},[25,157418,157419,157421,157423,157425,157428,157430,157433,157435,157437,157439],{"class":27,"line":1441},[25,157420,30486],{"class":35},[25,157422,245],{"class":244},[25,157424,296],{"class":240},[25,157426,157427],{"class":45},"\"应付金额:",[25,157429,1139],{"class":35},[25,157431,157432],{"class":244},"total",[25,157434,157230],{"class":240},[25,157436,1189],{"class":35},[25,157438,157083],{"class":45},[25,157440,251],{"class":244},[182,157442,157444],{"id":157443},"_213-易错点","2.13 易错点",[194,157446,157447,157452,157458,157466,157469],{},[106,157448,157449,157451],{},[22,157450,157094],{}," 的结果是字符串，做运算前要转换。",[106,157453,157454,157455,28456],{},"字符串拼接时，数字要先 ",[22,157456,157457],{},"str()",[106,157459,157460,157462,157463,157465],{},[22,157461,290],{}," 是赋值，",[22,157464,3059],{}," 是比较。",[106,157467,157468],{},"Python 没有自增自减运算符。",[106,157470,157471],{},"浮点数计算可能有精度误差：",[15,157473,157475],{"className":30449,"code":157474,"language":30451,"meta":20,"style":20},"print(0.1 + 0.2)\n",[22,157476,157477],{"__ignoreMap":20},[25,157478,157479,157481,157483,157485,157487,157490],{"class":27,"line":28},[25,157480,30486],{"class":35},[25,157482,245],{"class":244},[25,157484,86281],{"class":35},[25,157486,45637],{"class":240},[25,157488,157489],{"class":35}," 0.2",[25,157491,251],{"class":244},[99,157493,157494,157495,157498],{},"金额计算如果要求严格，可以后续学习 ",[22,157496,157497],{},"decimal"," 模块。",[182,157500,157502],{"id":157501},"_214-本章练习","2.14 本章练习",[194,157504,157505,157508,157511,157514,157517],{},[106,157506,157507],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[106,157509,157510],{},"输入圆的半径，计算面积，保留两位小数。",[106,157512,157513],{},"输入工资和奖金，计算总收入。",[106,157515,157516],{},"输入摄氏温度，转换为华氏温度。",[106,157518,157519],{},"写一个 BMI 计算程序：",[15,157521,157524],{"className":157522,"code":157523,"language":5297,"meta":20},[5295],"BMI = 体重kg \u002F 身高m ** 2\n",[22,157525,157523],{"__ignoreMap":20},[159,157527,157528],{},"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":20,"searchDepth":39,"depth":39,"links":157530},[157531,157532,157533,157534,157535,157536,157537,157543,157544,157545,157550,157551,157552,157553],{"id":155092,"depth":39,"text":155093},{"id":155201,"depth":39,"text":155202},{"id":155372,"depth":39,"text":155373},{"id":155449,"depth":39,"text":155450},{"id":50802,"depth":39,"text":50803},{"id":155755,"depth":39,"text":155756},{"id":155981,"depth":39,"text":155982,"children":157538},[157539,157540,157541,157542],{"id":155985,"depth":51,"text":155986},{"id":156179,"depth":51,"text":156180},{"id":156267,"depth":51,"text":156268},{"id":156373,"depth":51,"text":156374},{"id":156482,"depth":39,"text":156483},{"id":156640,"depth":39,"text":156641},{"id":156705,"depth":39,"text":156706,"children":157546},[157547,157548,157549],{"id":156709,"depth":51,"text":156710},{"id":156854,"depth":51,"text":156855},{"id":156957,"depth":51,"text":156958},{"id":157088,"depth":39,"text":157089},{"id":157240,"depth":39,"text":157241},{"id":157443,"depth":39,"text":157444},{"id":157501,"depth":39,"text":157502},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155084,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157560,"title":157561,"body":157562,"description":164,"extension":165,"meta":159198,"navigation":167,"path":159199,"seo":159200,"stem":159201,"__hash__":159202},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157563,"toc":159179},[157564,157567,157571,157574,157589,157592,157620,157624,157674,157676,157692,157695,157721,157724,157728,157795,157798,157814,157818,157821,157939,157942,157949,157998,158004,158008,158011,158124,158127,158131,158135,158138,158188,158192,158195,158245,158249,158252,158290,158294,158297,158343,158346,158381,158385,158390,158393,158439,158441,158508,158512,158518,158629,158638,158642,158644,158655,158657,158823,158827,158829,158843,158845,159059,159063,159082,159099,159102,159148,159152,159176],[10,157565,157561],{"id":157566},"_3-判断语句",[182,157568,157570],{"id":157569},"_31-布尔值","3.1 布尔值",[99,157572,157573],{},"判断语句依赖布尔值：",[15,157575,157577],{"className":30449,"code":157576,"language":30451,"meta":20,"style":20},"True\nFalse\n",[22,157578,157579,157584],{"__ignoreMap":20},[25,157580,157581],{"class":27,"line":28},[25,157582,157583],{"class":35},"True\n",[25,157585,157586],{"class":27,"line":39},[25,157587,157588],{"class":35},"False\n",[99,157590,157591],{},"比较表达式会产生布尔值：",[15,157593,157595],{"className":30449,"code":157594,"language":30451,"meta":20,"style":20},"age = 18\nprint(age >= 18)  # True\n",[22,157596,157597,157605],{"__ignoreMap":20},[25,157598,157599,157601,157603],{"class":27,"line":28},[25,157600,146617],{"class":244},[25,157602,290],{"class":240},[25,157604,146622],{"class":35},[25,157606,157607,157609,157611,157613,157615,157617],{"class":27,"line":39},[25,157608,30486],{"class":35},[25,157610,155839],{"class":244},[25,157612,1821],{"class":240},[25,157614,156356],{"class":35},[25,157616,45879],{"class":244},[25,157618,157619],{"class":302},"# True\n",[182,157621,157623],{"id":157622},"_32-if基础语法","3.2 if基础语法",[15,157625,157627],{"className":30449,"code":157626,"language":30451,"meta":20,"style":20},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[22,157628,157629,157647,157651,157663],{"__ignoreMap":20},[25,157630,157631,157633,157635,157637,157639,157641,157643,157645],{"class":27,"line":28},[25,157632,146617],{"class":244},[25,157634,290],{"class":240},[25,157636,2492],{"class":35},[25,157638,245],{"class":244},[25,157640,53892],{"class":35},[25,157642,245],{"class":244},[25,157644,152465],{"class":45},[25,157646,30568],{"class":244},[25,157648,157649],{"class":27,"line":39},[25,157650,2510],{"emptyLinePlaceholder":167},[25,157652,157653,157655,157657,157659,157661],{"class":27,"line":51},[25,157654,1642],{"class":240},[25,157656,15817],{"class":244},[25,157658,1821],{"class":240},[25,157660,156356],{"class":35},[25,157662,3849],{"class":244},[25,157664,157665,157667,157669,157672],{"class":27,"line":59},[25,157666,31370],{"class":35},[25,157668,245],{"class":244},[25,157670,157671],{"class":45},"\"可以进入网吧\"",[25,157673,251],{"class":244},[99,157675,9135],{},[194,157677,157678,157683,157686,157689],{},[106,157679,157680,157682],{},[22,157681,1642],{}," 后面是条件表达式。",[106,157684,157685],{},"条件后面必须写冒号。",[106,157687,157688],{},"条件成立时执行缩进代码块。",[106,157690,157691],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[99,157693,157694],{},"错误示例：",[15,157696,157698],{"className":30449,"code":157697,"language":30451,"meta":20,"style":20},"if age >= 18\n    print(\"可以进入\")\n",[22,157699,157700,157710],{"__ignoreMap":20},[25,157701,157702,157704,157706,157708],{"class":27,"line":28},[25,157703,1642],{"class":240},[25,157705,15817],{"class":244},[25,157707,1821],{"class":240},[25,157709,146622],{"class":35},[25,157711,157712,157714,157716,157719],{"class":27,"line":39},[25,157713,31370],{"class":35},[25,157715,245],{"class":244},[25,157717,157718],{"class":45},"\"可以进入\"",[25,157720,251],{"class":244},[99,157722,157723],{},"缺少冒号。",[182,157725,157727],{"id":157726},"_33-if-else","3.3 if else",[15,157729,157731],{"className":30449,"code":157730,"language":30451,"meta":20,"style":20},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[22,157732,157733,157751,157755,157767,157778,157784],{"__ignoreMap":20},[25,157734,157735,157737,157739,157741,157743,157745,157747,157749],{"class":27,"line":28},[25,157736,146617],{"class":244},[25,157738,290],{"class":240},[25,157740,2492],{"class":35},[25,157742,245],{"class":244},[25,157744,53892],{"class":35},[25,157746,245],{"class":244},[25,157748,152465],{"class":45},[25,157750,30568],{"class":244},[25,157752,157753],{"class":27,"line":39},[25,157754,2510],{"emptyLinePlaceholder":167},[25,157756,157757,157759,157761,157763,157765],{"class":27,"line":51},[25,157758,1642],{"class":240},[25,157760,15817],{"class":244},[25,157762,1821],{"class":240},[25,157764,156356],{"class":35},[25,157766,3849],{"class":244},[25,157768,157769,157771,157773,157776],{"class":27,"line":59},[25,157770,31370],{"class":35},[25,157772,245],{"class":244},[25,157774,157775],{"class":45},"\"成年人\"",[25,157777,251],{"class":244},[25,157779,157780,157782],{"class":27,"line":67},[25,157781,1812],{"class":240},[25,157783,3849],{"class":244},[25,157785,157786,157788,157790,157793],{"class":27,"line":75},[25,157787,31370],{"class":35},[25,157789,245],{"class":244},[25,157791,157792],{"class":45},"\"未成年人\"",[25,157794,251],{"class":244},[99,157796,157797],{},"执行逻辑：",[194,157799,157800,157806,157811],{},[106,157801,157802,157803,157805],{},"条件成立，执行 ",[22,157804,1642],{}," 代码块。",[106,157807,157808,157809,157805],{},"条件不成立，执行 ",[22,157810,1812],{},[106,157812,157813],{},"两个代码块只会执行其中一个。",[182,157815,157817],{"id":157816},"_34-if-elif-else","3.4 if elif else",[99,157819,157820],{},"多条件判断：",[15,157822,157824],{"className":30449,"code":157823,"language":30451,"meta":20,"style":20},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[22,157825,157826,157844,157848,157862,157873,157887,157898,157911,157922,157928],{"__ignoreMap":20},[25,157827,157828,157830,157832,157834,157836,157838,157840,157842],{"class":27,"line":28},[25,157829,155429],{"class":244},[25,157831,290],{"class":240},[25,157833,2492],{"class":35},[25,157835,245],{"class":244},[25,157837,53892],{"class":35},[25,157839,245],{"class":244},[25,157841,152480],{"class":45},[25,157843,30568],{"class":244},[25,157845,157846],{"class":27,"line":39},[25,157847,2510],{"emptyLinePlaceholder":167},[25,157849,157850,157852,157855,157857,157860],{"class":27,"line":51},[25,157851,1642],{"class":240},[25,157853,157854],{"class":244}," score ",[25,157856,1821],{"class":240},[25,157858,157859],{"class":35}," 90",[25,157861,3849],{"class":244},[25,157863,157864,157866,157868,157871],{"class":27,"line":59},[25,157865,31370],{"class":35},[25,157867,245],{"class":244},[25,157869,157870],{"class":45},"\"优秀\"",[25,157872,251],{"class":244},[25,157874,157875,157878,157880,157882,157885],{"class":27,"line":67},[25,157876,157877],{"class":240},"elif",[25,157879,157854],{"class":244},[25,157881,1821],{"class":240},[25,157883,157884],{"class":35}," 80",[25,157886,3849],{"class":244},[25,157888,157889,157891,157893,157896],{"class":27,"line":75},[25,157890,31370],{"class":35},[25,157892,245],{"class":244},[25,157894,157895],{"class":45},"\"良好\"",[25,157897,251],{"class":244},[25,157899,157900,157902,157904,157906,157909],{"class":27,"line":83},[25,157901,157877],{"class":240},[25,157903,157854],{"class":244},[25,157905,1821],{"class":240},[25,157907,157908],{"class":35}," 60",[25,157910,3849],{"class":244},[25,157912,157913,157915,157917,157920],{"class":27,"line":91},[25,157914,31370],{"class":35},[25,157916,245],{"class":244},[25,157918,157919],{"class":45},"\"及格\"",[25,157921,251],{"class":244},[25,157923,157924,157926],{"class":27,"line":1429},[25,157925,1812],{"class":240},[25,157927,3849],{"class":244},[25,157929,157930,157932,157934,157937],{"class":27,"line":1441},[25,157931,31370],{"class":35},[25,157933,245],{"class":244},[25,157935,157936],{"class":45},"\"不及格\"",[25,157938,251],{"class":244},[99,157940,157941],{},"注意判断顺序很重要。",[99,157943,157944,157945,157948],{},"如果把 ",[22,157946,157947],{},"score >= 60"," 放在最前面：",[15,157950,157952],{"className":30449,"code":157951,"language":30451,"meta":20,"style":20},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[22,157953,157954,157966,157976,157988],{"__ignoreMap":20},[25,157955,157956,157958,157960,157962,157964],{"class":27,"line":28},[25,157957,1642],{"class":240},[25,157959,157854],{"class":244},[25,157961,1821],{"class":240},[25,157963,157908],{"class":35},[25,157965,3849],{"class":244},[25,157967,157968,157970,157972,157974],{"class":27,"line":39},[25,157969,31370],{"class":35},[25,157971,245],{"class":244},[25,157973,157919],{"class":45},[25,157975,251],{"class":244},[25,157977,157978,157980,157982,157984,157986],{"class":27,"line":51},[25,157979,157877],{"class":240},[25,157981,157854],{"class":244},[25,157983,1821],{"class":240},[25,157985,157859],{"class":35},[25,157987,3849],{"class":244},[25,157989,157990,157992,157994,157996],{"class":27,"line":59},[25,157991,31370],{"class":35},[25,157993,245],{"class":244},[25,157995,157870],{"class":45},[25,157997,251],{"class":244},[99,157999,158000,158001,158003],{},"成绩 95 会先满足 ",[22,158002,157947],{},"，后面的优秀分支就不会执行。",[182,158005,158007],{"id":158006},"_35-判断语句嵌套","3.5 判断语句嵌套",[99,158009,158010],{},"嵌套判断就是在一个判断内部再写判断。",[15,158012,158014],{"className":30449,"code":158013,"language":30451,"meta":20,"style":20},"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",[22,158015,158016,158034,158049,158053,158065,158079,158089,158096,158107,158113],{"__ignoreMap":20},[25,158017,158018,158020,158022,158024,158026,158028,158030,158032],{"class":27,"line":28},[25,158019,146617],{"class":244},[25,158021,290],{"class":240},[25,158023,2492],{"class":35},[25,158025,245],{"class":244},[25,158027,53892],{"class":35},[25,158029,245],{"class":244},[25,158031,152465],{"class":45},[25,158033,30568],{"class":244},[25,158035,158036,158038,158040,158042,158044,158047],{"class":27,"line":39},[25,158037,156432],{"class":244},[25,158039,290],{"class":240},[25,158041,60676],{"class":35},[25,158043,245],{"class":244},[25,158045,158046],{"class":45},"\"是否有票(y\u002Fn):\"",[25,158048,251],{"class":244},[25,158050,158051],{"class":27,"line":51},[25,158052,2510],{"emptyLinePlaceholder":167},[25,158054,158055,158057,158059,158061,158063],{"class":27,"line":59},[25,158056,1642],{"class":240},[25,158058,15817],{"class":244},[25,158060,1821],{"class":240},[25,158062,156356],{"class":35},[25,158064,3849],{"class":244},[25,158066,158067,158069,158072,158074,158077],{"class":27,"line":67},[25,158068,3211],{"class":240},[25,158070,158071],{"class":244}," has_ticket ",[25,158073,3059],{"class":240},[25,158075,158076],{"class":45}," \"y\"",[25,158078,3849],{"class":244},[25,158080,158081,158083,158085,158087],{"class":27,"line":75},[25,158082,32522],{"class":35},[25,158084,245],{"class":244},[25,158086,157718],{"class":45},[25,158088,251],{"class":244},[25,158090,158091,158094],{"class":27,"line":83},[25,158092,158093],{"class":240},"    else",[25,158095,3849],{"class":244},[25,158097,158098,158100,158102,158105],{"class":27,"line":91},[25,158099,32522],{"class":35},[25,158101,245],{"class":244},[25,158103,158104],{"class":45},"\"请先买票\"",[25,158106,251],{"class":244},[25,158108,158109,158111],{"class":27,"line":1429},[25,158110,1812],{"class":240},[25,158112,3849],{"class":244},[25,158114,158115,158117,158119,158122],{"class":27,"line":1441},[25,158116,31370],{"class":35},[25,158118,245],{"class":244},[25,158120,158121],{"class":45},"\"未成年人禁止进入\"",[25,158123,251],{"class":244},[99,158125,158126],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[182,158128,158130],{"id":158129},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[210,158132,158134],{"id":158133},"_361-and","3.6.1 and",[99,158136,158137],{},"两个条件都成立才成立。",[15,158139,158141],{"className":30449,"code":158140,"language":30451,"meta":20,"style":20},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[22,158142,158143,158151,158159,158163,158178],{"__ignoreMap":20},[25,158144,158145,158147,158149],{"class":27,"line":28},[25,158146,146617],{"class":244},[25,158148,290],{"class":240},[25,158150,88136],{"class":35},[25,158152,158153,158155,158157],{"class":27,"line":39},[25,158154,156432],{"class":244},[25,158156,290],{"class":240},[25,158158,153670],{"class":35},[25,158160,158161],{"class":27,"line":51},[25,158162,2510],{"emptyLinePlaceholder":167},[25,158164,158165,158167,158169,158171,158173,158175],{"class":27,"line":59},[25,158166,1642],{"class":240},[25,158168,15817],{"class":244},[25,158170,1821],{"class":240},[25,158172,156356],{"class":35},[25,158174,120500],{"class":240},[25,158176,158177],{"class":244}," has_ticket:\n",[25,158179,158180,158182,158184,158186],{"class":27,"line":67},[25,158181,31370],{"class":35},[25,158183,245],{"class":244},[25,158185,157718],{"class":45},[25,158187,251],{"class":244},[210,158189,158191],{"id":158190},"_362-or","3.6.2 or",[99,158193,158194],{},"只要一个条件成立就成立。",[15,158196,158198],{"className":30449,"code":158197,"language":30451,"meta":20,"style":20},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[22,158199,158200,158209,158218,158222,158234],{"__ignoreMap":20},[25,158201,158202,158205,158207],{"class":27,"line":28},[25,158203,158204],{"class":244},"is_vip ",[25,158206,290],{"class":240},[25,158208,125878],{"class":35},[25,158210,158211,158214,158216],{"class":27,"line":39},[25,158212,158213],{"class":244},"coupon ",[25,158215,290],{"class":240},[25,158217,153670],{"class":35},[25,158219,158220],{"class":27,"line":51},[25,158221,2510],{"emptyLinePlaceholder":167},[25,158223,158224,158226,158229,158231],{"class":27,"line":59},[25,158225,1642],{"class":240},[25,158227,158228],{"class":244}," is_vip ",[25,158230,115161],{"class":240},[25,158232,158233],{"class":244}," coupon:\n",[25,158235,158236,158238,158240,158243],{"class":27,"line":67},[25,158237,31370],{"class":35},[25,158239,245],{"class":244},[25,158241,158242],{"class":45},"\"可以享受优惠\"",[25,158244,251],{"class":244},[210,158246,158248],{"id":158247},"_363-not","3.6.3 not",[99,158250,158251],{},"取反。",[15,158253,158255],{"className":30449,"code":158254,"language":30451,"meta":20,"style":20},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[22,158256,158257,158266,158270,158279],{"__ignoreMap":20},[25,158258,158259,158262,158264],{"class":27,"line":28},[25,158260,158261],{"class":244},"is_closed ",[25,158263,290],{"class":240},[25,158265,125878],{"class":35},[25,158267,158268],{"class":27,"line":39},[25,158269,2510],{"emptyLinePlaceholder":167},[25,158271,158272,158274,158276],{"class":27,"line":51},[25,158273,1642],{"class":240},[25,158275,39001],{"class":240},[25,158277,158278],{"class":244}," is_closed:\n",[25,158280,158281,158283,158285,158288],{"class":27,"line":59},[25,158282,31370],{"class":35},[25,158284,245],{"class":244},[25,158286,158287],{"class":45},"\"店铺营业中\"",[25,158289,251],{"class":244},[182,158291,158293],{"id":158292},"_37-链式比较","3.7 链式比较",[99,158295,158296],{},"Python 支持链式比较：",[15,158298,158300],{"className":30449,"code":158299,"language":30451,"meta":20,"style":20},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[22,158301,158302,158311,158315,158332],{"__ignoreMap":20},[25,158303,158304,158306,158308],{"class":27,"line":28},[25,158305,155429],{"class":244},[25,158307,290],{"class":240},[25,158309,158310],{"class":35}," 85\n",[25,158312,158313],{"class":27,"line":39},[25,158314,2510],{"emptyLinePlaceholder":167},[25,158316,158317,158319,158321,158324,158326,158328,158330],{"class":27,"line":51},[25,158318,1642],{"class":240},[25,158320,4203],{"class":35},[25,158322,158323],{"class":240}," \u003C=",[25,158325,157854],{"class":244},[25,158327,1699],{"class":240},[25,158329,5864],{"class":35},[25,158331,3849],{"class":244},[25,158333,158334,158336,158338,158341],{"class":27,"line":59},[25,158335,31370],{"class":35},[25,158337,245],{"class":244},[25,158339,158340],{"class":45},"\"成绩合法\"",[25,158342,251],{"class":244},[99,158344,158345],{},"等价于：",[15,158347,158349],{"className":30449,"code":158348,"language":30451,"meta":20,"style":20},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[22,158350,158351,158371],{"__ignoreMap":20},[25,158352,158353,158355,158357,158359,158361,158363,158365,158367,158369],{"class":27,"line":28},[25,158354,1642],{"class":240},[25,158356,157854],{"class":244},[25,158358,1821],{"class":240},[25,158360,4203],{"class":35},[25,158362,120500],{"class":240},[25,158364,157854],{"class":244},[25,158366,1699],{"class":240},[25,158368,5864],{"class":35},[25,158370,3849],{"class":244},[25,158372,158373,158375,158377,158379],{"class":27,"line":39},[25,158374,31370],{"class":35},[25,158376,245],{"class":244},[25,158378,158340],{"class":45},[25,158380,251],{"class":244},[182,158382,158384],{"id":158383},"_38-真值和假值","3.8 真值和假值",[99,158386,116538,158387,158389],{},[22,158388,1642],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[99,158391,158392],{},"假值：",[15,158394,158396],{"className":30449,"code":158395,"language":30451,"meta":20,"style":20},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[22,158397,158398,158402,158407,158411,158415,158420,158424,158428,158433],{"__ignoreMap":20},[25,158399,158400],{"class":27,"line":28},[25,158401,157588],{"class":35},[25,158403,158404],{"class":27,"line":39},[25,158405,158406],{"class":35},"None\n",[25,158408,158409],{"class":27,"line":51},[25,158410,3195],{"class":35},[25,158412,158413],{"class":27,"line":59},[25,158414,32413],{"class":35},[25,158416,158417],{"class":27,"line":67},[25,158418,158419],{"class":45},"\"\"\n",[25,158421,158422],{"class":27,"line":75},[25,158423,32428],{"class":244},[25,158425,158426],{"class":27,"line":83},[25,158427,2086],{"class":244},[25,158429,158430],{"class":27,"line":91},[25,158431,158432],{"class":244},"{}\n",[25,158434,158435,158437],{"class":27,"line":1429},[25,158436,155361],{"class":35},[25,158438,2086],{"class":244},[99,158440,15245],{},[15,158442,158444],{"className":30449,"code":158443,"language":30451,"meta":20,"style":20},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[22,158445,158446,158460,158464,158471,158491,158497],{"__ignoreMap":20},[25,158447,158448,158450,158452,158454,158456,158458],{"class":27,"line":28},[25,158449,146607],{"class":244},[25,158451,290],{"class":240},[25,158453,60676],{"class":35},[25,158455,245],{"class":244},[25,158457,152450],{"class":45},[25,158459,251],{"class":244},[25,158461,158462],{"class":27,"line":39},[25,158463,2510],{"emptyLinePlaceholder":167},[25,158465,158466,158468],{"class":27,"line":51},[25,158467,1642],{"class":240},[25,158469,158470],{"class":244}," name:\n",[25,158472,158473,158475,158477,158479,158481,158483,158485,158487,158489],{"class":27,"line":59},[25,158474,31370],{"class":35},[25,158476,245],{"class":244},[25,158478,296],{"class":240},[25,158480,157125],{"class":45},[25,158482,1139],{"class":35},[25,158484,79881],{"class":244},[25,158486,1189],{"class":35},[25,158488,494],{"class":45},[25,158490,251],{"class":244},[25,158492,158493,158495],{"class":27,"line":67},[25,158494,1812],{"class":240},[25,158496,3849],{"class":244},[25,158498,158499,158501,158503,158506],{"class":27,"line":75},[25,158500,31370],{"class":35},[25,158502,245],{"class":244},[25,158504,158505],{"class":45},"\"姓名不能为空\"",[25,158507,251],{"class":244},[182,158509,158511],{"id":158510},"_39-match语句","3.9 match语句",[99,158513,158514,158515,158517],{},"Python 3.10 开始支持 ",[22,158516,71336],{},"。它适合处理固定选项。",[15,158519,158521],{"className":30449,"code":158520,"language":30451,"meta":20,"style":20},"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",[22,158522,158523,158539,158543,158550,158560,158571,158580,158591,158600,158611,158618],{"__ignoreMap":20},[25,158524,158525,158528,158530,158532,158534,158537],{"class":27,"line":28},[25,158526,158527],{"class":244},"command ",[25,158529,290],{"class":240},[25,158531,60676],{"class":35},[25,158533,245],{"class":244},[25,158535,158536],{"class":45},"\"请输入命令:\"",[25,158538,251],{"class":244},[25,158540,158541],{"class":27,"line":39},[25,158542,2510],{"emptyLinePlaceholder":167},[25,158544,158545,158547],{"class":27,"line":51},[25,158546,71336],{"class":240},[25,158548,158549],{"class":244}," command:\n",[25,158551,158552,158555,158558],{"class":27,"line":59},[25,158553,158554],{"class":240},"    case",[25,158556,158557],{"class":45}," \"start\"",[25,158559,3849],{"class":244},[25,158561,158562,158564,158566,158569],{"class":27,"line":67},[25,158563,32522],{"class":35},[25,158565,245],{"class":244},[25,158567,158568],{"class":45},"\"启动\"",[25,158570,251],{"class":244},[25,158572,158573,158575,158578],{"class":27,"line":75},[25,158574,158554],{"class":240},[25,158576,158577],{"class":45}," \"stop\"",[25,158579,3849],{"class":244},[25,158581,158582,158584,158586,158589],{"class":27,"line":83},[25,158583,32522],{"class":35},[25,158585,245],{"class":244},[25,158587,158588],{"class":45},"\"停止\"",[25,158590,251],{"class":244},[25,158592,158593,158595,158598],{"class":27,"line":91},[25,158594,158554],{"class":240},[25,158596,158597],{"class":45}," \"restart\"",[25,158599,3849],{"class":244},[25,158601,158602,158604,158606,158609],{"class":27,"line":1429},[25,158603,32522],{"class":35},[25,158605,245],{"class":244},[25,158607,158608],{"class":45},"\"重启\"",[25,158610,251],{"class":244},[25,158612,158613,158615],{"class":27,"line":1441},[25,158614,158554],{"class":240},[25,158616,158617],{"class":244}," _:\n",[25,158619,158620,158622,158624,158627],{"class":27,"line":1723},[25,158621,32522],{"class":35},[25,158623,245],{"class":244},[25,158625,158626],{"class":45},"\"未知命令\"",[25,158628,251],{"class":244},[99,158630,158631,158632,158634,158635,158637],{},"入门阶段掌握 ",[22,158633,154729],{}," 更重要，",[22,158636,71336],{}," 可以作为补充。",[182,158639,158641],{"id":158640},"_310-小案例成绩等级","3.10 小案例：成绩等级",[99,158643,123363],{},[194,158645,158646,158649,158652],{},[106,158647,158648],{},"输入成绩。",[106,158650,158651],{},"判断成绩是否合法。",[106,158653,158654],{},"输出等级。",[99,158656,10145],{},[15,158658,158660],{"className":30449,"code":158659,"language":30451,"meta":20,"style":20},"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",[22,158661,158662,158680,158684,158702,158713,158725,158736,158748,158759,158772,158783,158795,158806,158812],{"__ignoreMap":20},[25,158663,158664,158666,158668,158670,158672,158674,158676,158678],{"class":27,"line":28},[25,158665,155429],{"class":244},[25,158667,290],{"class":240},[25,158669,109868],{"class":35},[25,158671,245],{"class":244},[25,158673,53892],{"class":35},[25,158675,245],{"class":244},[25,158677,152480],{"class":45},[25,158679,30568],{"class":244},[25,158681,158682],{"class":27,"line":39},[25,158683,2510],{"emptyLinePlaceholder":167},[25,158685,158686,158688,158690,158692,158694,158696,158698,158700],{"class":27,"line":51},[25,158687,1642],{"class":240},[25,158689,39001],{"class":240},[25,158691,4203],{"class":35},[25,158693,158323],{"class":240},[25,158695,157854],{"class":244},[25,158697,1699],{"class":240},[25,158699,5864],{"class":35},[25,158701,3849],{"class":244},[25,158703,158704,158706,158708,158711],{"class":27,"line":59},[25,158705,31370],{"class":35},[25,158707,245],{"class":244},[25,158709,158710],{"class":45},"\"成绩不合法\"",[25,158712,251],{"class":244},[25,158714,158715,158717,158719,158721,158723],{"class":27,"line":67},[25,158716,157877],{"class":240},[25,158718,157854],{"class":244},[25,158720,1821],{"class":240},[25,158722,157859],{"class":35},[25,158724,3849],{"class":244},[25,158726,158727,158729,158731,158734],{"class":27,"line":75},[25,158728,31370],{"class":35},[25,158730,245],{"class":244},[25,158732,158733],{"class":45},"\"等级:A\"",[25,158735,251],{"class":244},[25,158737,158738,158740,158742,158744,158746],{"class":27,"line":83},[25,158739,157877],{"class":240},[25,158741,157854],{"class":244},[25,158743,1821],{"class":240},[25,158745,157884],{"class":35},[25,158747,3849],{"class":244},[25,158749,158750,158752,158754,158757],{"class":27,"line":91},[25,158751,31370],{"class":35},[25,158753,245],{"class":244},[25,158755,158756],{"class":45},"\"等级:B\"",[25,158758,251],{"class":244},[25,158760,158761,158763,158765,158767,158770],{"class":27,"line":1429},[25,158762,157877],{"class":240},[25,158764,157854],{"class":244},[25,158766,1821],{"class":240},[25,158768,158769],{"class":35}," 70",[25,158771,3849],{"class":244},[25,158773,158774,158776,158778,158781],{"class":27,"line":1441},[25,158775,31370],{"class":35},[25,158777,245],{"class":244},[25,158779,158780],{"class":45},"\"等级:C\"",[25,158782,251],{"class":244},[25,158784,158785,158787,158789,158791,158793],{"class":27,"line":1723},[25,158786,157877],{"class":240},[25,158788,157854],{"class":244},[25,158790,1821],{"class":240},[25,158792,157908],{"class":35},[25,158794,3849],{"class":244},[25,158796,158797,158799,158801,158804],{"class":27,"line":1728},[25,158798,31370],{"class":35},[25,158800,245],{"class":244},[25,158802,158803],{"class":45},"\"等级:D\"",[25,158805,251],{"class":244},[25,158807,158808,158810],{"class":27,"line":1734},[25,158809,1812],{"class":240},[25,158811,3849],{"class":244},[25,158813,158814,158816,158818,158821],{"class":27,"line":1739},[25,158815,31370],{"class":35},[25,158817,245],{"class":244},[25,158819,158820],{"class":45},"\"等级:E\"",[25,158822,251],{"class":244},[182,158824,158826],{"id":158825},"_311-小案例会员折扣","3.11 小案例：会员折扣",[99,158828,123363],{},[194,158830,158831,158834,158837,158840],{},[106,158832,158833],{},"输入消费金额。",[106,158835,158836],{},"输入会员等级，普通、银卡、金卡。",[106,158838,158839],{},"普通不打折，银卡 9 折，金卡 8 折。",[106,158841,158842],{},"满 500 再减 50。",[99,158844,10145],{},[15,158846,158848],{"className":30449,"code":158847,"language":30451,"meta":20,"style":20},"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",[22,158849,158850,158870,158886,158890,158898,158902,158916,158926,158939,158948,158961,158969,158975,158986,158990,159004,159008,159022,159032,159036],{"__ignoreMap":20},[25,158851,158852,158855,158857,158859,158861,158863,158865,158868],{"class":27,"line":28},[25,158853,158854],{"class":244},"amount ",[25,158856,290],{"class":240},[25,158858,109868],{"class":35},[25,158860,245],{"class":244},[25,158862,53892],{"class":35},[25,158864,245],{"class":244},[25,158866,158867],{"class":45},"\"请输入消费金额:\"",[25,158869,30568],{"class":244},[25,158871,158872,158875,158877,158879,158881,158884],{"class":27,"line":39},[25,158873,158874],{"class":244},"level ",[25,158876,290],{"class":240},[25,158878,60676],{"class":35},[25,158880,245],{"class":244},[25,158882,158883],{"class":45},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[25,158885,251],{"class":244},[25,158887,158888],{"class":27,"line":51},[25,158889,2510],{"emptyLinePlaceholder":167},[25,158891,158892,158894,158896],{"class":27,"line":59},[25,158893,157307],{"class":244},[25,158895,290],{"class":240},[25,158897,55770],{"class":35},[25,158899,158900],{"class":27,"line":67},[25,158901,2510],{"emptyLinePlaceholder":167},[25,158903,158904,158906,158909,158911,158914],{"class":27,"line":75},[25,158905,1642],{"class":240},[25,158907,158908],{"class":244}," level ",[25,158910,3059],{"class":240},[25,158912,158913],{"class":45}," \"银卡\"",[25,158915,3849],{"class":244},[25,158917,158918,158921,158923],{"class":27,"line":83},[25,158919,158920],{"class":244},"    discount ",[25,158922,290],{"class":240},[25,158924,158925],{"class":35}," 0.9\n",[25,158927,158928,158930,158932,158934,158937],{"class":27,"line":91},[25,158929,157877],{"class":240},[25,158931,158908],{"class":244},[25,158933,3059],{"class":240},[25,158935,158936],{"class":45}," \"金卡\"",[25,158938,3849],{"class":244},[25,158940,158941,158943,158945],{"class":27,"line":1429},[25,158942,158920],{"class":244},[25,158944,290],{"class":240},[25,158946,158947],{"class":35}," 0.8\n",[25,158949,158950,158952,158954,158956,158959],{"class":27,"line":1441},[25,158951,157877],{"class":240},[25,158953,158908],{"class":244},[25,158955,3059],{"class":240},[25,158957,158958],{"class":45}," \"普通\"",[25,158960,3849],{"class":244},[25,158962,158963,158965,158967],{"class":27,"line":1723},[25,158964,158920],{"class":244},[25,158966,290],{"class":240},[25,158968,55770],{"class":35},[25,158970,158971,158973],{"class":27,"line":1728},[25,158972,1812],{"class":240},[25,158974,3849],{"class":244},[25,158976,158977,158979,158981,158984],{"class":27,"line":1734},[25,158978,31370],{"class":35},[25,158980,245],{"class":244},[25,158982,158983],{"class":45},"\"会员等级输入错误，按普通会员计算\"",[25,158985,251],{"class":244},[25,158987,158988],{"class":27,"line":1739},[25,158989,2510],{"emptyLinePlaceholder":167},[25,158991,158992,158995,158997,159000,159002],{"class":27,"line":1753},[25,158993,158994],{"class":244},"pay ",[25,158996,290],{"class":240},[25,158998,158999],{"class":244}," amount ",[25,159001,698],{"class":240},[25,159003,157346],{"class":244},[25,159005,159006],{"class":27,"line":1758},[25,159007,2510],{"emptyLinePlaceholder":167},[25,159009,159010,159012,159015,159017,159020],{"class":27,"line":1764},[25,159011,1642],{"class":240},[25,159013,159014],{"class":244}," pay ",[25,159016,1821],{"class":240},[25,159018,159019],{"class":35}," 500",[25,159021,3849],{"class":244},[25,159023,159024,159027,159029],{"class":27,"line":1785},[25,159025,159026],{"class":244},"    pay ",[25,159028,150323],{"class":240},[25,159030,159031],{"class":35}," 50\n",[25,159033,159034],{"class":27,"line":1790},[25,159035,2510],{"emptyLinePlaceholder":167},[25,159037,159038,159040,159042,159044,159046,159048,159051,159053,159055,159057],{"class":27,"line":1804},[25,159039,30486],{"class":35},[25,159041,245],{"class":244},[25,159043,296],{"class":240},[25,159045,157427],{"class":45},[25,159047,1139],{"class":35},[25,159049,159050],{"class":244},"pay",[25,159052,157230],{"class":240},[25,159054,1189],{"class":35},[25,159056,157083],{"class":45},[25,159058,251],{"class":244},[182,159060,159062],{"id":159061},"_312-易错点","3.12 易错点",[194,159064,159065,159068,159071,159074,159079],{},[106,159066,159067],{},"冒号不能漏。",[106,159069,159070],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[106,159072,159073],{},"多分支判断要注意顺序。",[106,159075,159076,159077,28456],{},"判断相等用 ",[22,159078,3059],{},[106,159080,159081],{},"字符串比较区分大小写：",[15,159083,159085],{"className":30449,"code":159084,"language":30451,"meta":20,"style":20},"\"Y\" == \"y\"  # False\n",[22,159086,159087],{"__ignoreMap":20},[25,159088,159089,159092,159094,159096],{"class":27,"line":28},[25,159090,159091],{"class":45},"\"Y\"",[25,159093,101630],{"class":240},[25,159095,158076],{"class":45},[25,159097,159098],{"class":302},"  # False\n",[99,159100,159101],{},"可转换后再判断：",[15,159103,159105],{"className":30449,"code":159104,"language":30451,"meta":20,"style":20},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[22,159106,159107,159124,159137],{"__ignoreMap":20},[25,159108,159109,159112,159114,159116,159118,159121],{"class":27,"line":28},[25,159110,159111],{"class":244},"answer ",[25,159113,290],{"class":240},[25,159115,60676],{"class":35},[25,159117,245],{"class":244},[25,159119,159120],{"class":45},"\"是否继续(y\u002Fn):\"",[25,159122,159123],{"class":244},").lower()\n",[25,159125,159126,159128,159131,159133,159135],{"class":27,"line":39},[25,159127,1642],{"class":240},[25,159129,159130],{"class":244}," answer ",[25,159132,3059],{"class":240},[25,159134,158076],{"class":45},[25,159136,3849],{"class":244},[25,159138,159139,159141,159143,159146],{"class":27,"line":51},[25,159140,31370],{"class":35},[25,159142,245],{"class":244},[25,159144,159145],{"class":45},"\"继续\"",[25,159147,251],{"class":244},[182,159149,159151],{"id":159150},"_313-本章练习","3.13 本章练习",[194,159153,159154,159157,159160,159163,159173],{},[106,159155,159156],{},"输入年龄，判断是否成年。",[106,159158,159159],{},"输入年份，判断是否为闰年。",[106,159161,159162],{},"输入三个数字，输出最大值。",[106,159164,159165,159166,159169,159170,159172],{},"写登录判断：用户名是 ",[22,159167,159168],{},"admin"," 且密码是 ",[22,159171,15194],{}," 才登录成功。",[106,159174,159175],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[159,159177,159178],{},"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":20,"searchDepth":39,"depth":39,"links":159180},[159181,159182,159183,159184,159185,159186,159191,159192,159193,159194,159195,159196,159197],{"id":157569,"depth":39,"text":157570},{"id":157622,"depth":39,"text":157623},{"id":157726,"depth":39,"text":157727},{"id":157816,"depth":39,"text":157817},{"id":158006,"depth":39,"text":158007},{"id":158129,"depth":39,"text":158130,"children":159187},[159188,159189,159190],{"id":158133,"depth":51,"text":158134},{"id":158190,"depth":51,"text":158191},{"id":158247,"depth":51,"text":158248},{"id":158292,"depth":39,"text":158293},{"id":158383,"depth":39,"text":158384},{"id":158510,"depth":39,"text":158511},{"id":158640,"depth":39,"text":158641},{"id":158825,"depth":39,"text":158826},{"id":159061,"depth":39,"text":159062},{"id":159150,"depth":39,"text":159151},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157561,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159204,"title":159205,"body":159206,"description":164,"extension":165,"meta":160975,"navigation":167,"path":160976,"seo":160977,"stem":160978,"__hash__":160979},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159207,"toc":160955},[159208,159211,159215,159221,159224,159241,159245,159247,159264,159266,159311,159313,159330,159334,159337,159403,159406,159424,159428,159589,159598,159602,159606,159611,159658,159660,159666,159670,159675,159722,159724,159730,159734,159739,159775,159778,159825,159829,159835,159893,159898,159929,159934,159938,159993,159996,160068,160071,160130,160134,160137,160212,160215,160219,160325,160328,160354,160358,160370,160439,160442,160534,160538,160540,160551,160553,160683,160687,160889,160897,160901,160931,160935,160952],[10,159209,159205],{"id":159210},"_4-循环语句",[182,159212,159214],{"id":159213},"_41-为什么需要循环","4.1 为什么需要循环",[99,159216,159217,159218,159220],{},"如果要输出 1 到 100，不应该写 100 行 ",[22,159219,146543],{},"，而应该用循环。",[99,159222,159223],{},"循环适合处理重复任务：",[194,159225,159226,159229,159232,159235,159238],{},[106,159227,159228],{},"重复输出。",[106,159230,159231],{},"重复输入。",[106,159233,159234],{},"遍历数据。",[106,159236,159237],{},"持续执行菜单。",[106,159239,159240],{},"批量处理文件或数据。",[182,159242,159244],{"id":159243},"_42-while循环","4.2 while循环",[99,159246,5291],{},[15,159248,159250],{"className":30449,"code":159249,"language":30451,"meta":20,"style":20},"while 条件:\n    循环体\n",[22,159251,159252,159259],{"__ignoreMap":20},[25,159253,159254,159256],{"class":27,"line":28},[25,159255,108734],{"class":240},[25,159257,159258],{"class":244}," 条件:\n",[25,159260,159261],{"class":27,"line":39},[25,159262,159263],{"class":244},"    循环体\n",[99,159265,15245],{},[15,159267,159269],{"className":30449,"code":159268,"language":30451,"meta":20,"style":20},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[22,159270,159271,159279,159283,159295,159302],{"__ignoreMap":20},[25,159272,159273,159275,159277],{"class":27,"line":28},[25,159274,100219],{"class":244},[25,159276,290],{"class":240},[25,159278,55770],{"class":35},[25,159280,159281],{"class":27,"line":39},[25,159282,2510],{"emptyLinePlaceholder":167},[25,159284,159285,159287,159289,159291,159293],{"class":27,"line":51},[25,159286,108734],{"class":240},[25,159288,9548],{"class":244},[25,159290,1699],{"class":240},[25,159292,2258],{"class":35},[25,159294,3849],{"class":244},[25,159296,159297,159299],{"class":27,"line":59},[25,159298,31370],{"class":35},[25,159300,159301],{"class":244},"(i)\n",[25,159303,159304,159307,159309],{"class":27,"line":67},[25,159305,159306],{"class":244},"    i ",[25,159308,9587],{"class":240},[25,159310,55770],{"class":35},[99,159312,81000],{},[194,159314,159315,159321,159324,159327],{},[106,159316,159317,159318,28456],{},"判断条件 ",[22,159319,159320],{},"i \u003C= 5",[106,159322,159323],{},"条件成立，执行循环体。",[106,159325,159326],{},"执行完后回到条件判断。",[106,159328,159329],{},"条件不成立，退出循环。",[182,159331,159333],{"id":159332},"_43-while累加","4.3 while累加",[99,159335,159336],{},"计算 1 到 100 的和：",[15,159338,159340],{"className":30449,"code":159339,"language":30451,"meta":20,"style":20},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[22,159341,159342,159350,159358,159362,159374,159384,159392,159396],{"__ignoreMap":20},[25,159343,159344,159346,159348],{"class":27,"line":28},[25,159345,100219],{"class":244},[25,159347,290],{"class":240},[25,159349,55770],{"class":35},[25,159351,159352,159354,159356],{"class":27,"line":39},[25,159353,157331],{"class":244},[25,159355,290],{"class":240},[25,159357,47404],{"class":35},[25,159359,159360],{"class":27,"line":51},[25,159361,2510],{"emptyLinePlaceholder":167},[25,159363,159364,159366,159368,159370,159372],{"class":27,"line":59},[25,159365,108734],{"class":240},[25,159367,9548],{"class":244},[25,159369,1699],{"class":240},[25,159371,5864],{"class":35},[25,159373,3849],{"class":244},[25,159375,159376,159379,159381],{"class":27,"line":67},[25,159377,159378],{"class":244},"    total ",[25,159380,9587],{"class":240},[25,159382,159383],{"class":244}," i\n",[25,159385,159386,159388,159390],{"class":27,"line":75},[25,159387,159306],{"class":244},[25,159389,9587],{"class":240},[25,159391,55770],{"class":35},[25,159393,159394],{"class":27,"line":83},[25,159395,2510],{"emptyLinePlaceholder":167},[25,159397,159398,159400],{"class":27,"line":91},[25,159399,30486],{"class":35},[25,159401,159402],{"class":244},"(total)\n",[99,159404,159405],{},"核心思想：",[194,159407,159408,159413,159418],{},[106,159409,159410,159412],{},[22,159411,684],{}," 控制循环次数。",[106,159414,159415,159417],{},[22,159416,157432],{}," 保存累加结果。",[106,159419,159420,159421,159423],{},"每轮循环都要更新 ",[22,159422,684],{},"，否则可能死循环。",[182,159425,159427],{"id":159426},"_44-while猜数字","4.4 while猜数字",[15,159429,159431],{"className":30449,"code":159430,"language":30451,"meta":20,"style":20},"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",[22,159432,159433,159439,159443,159460,159468,159472,159480,159500,159509,159513,159525,159536,159546,159557,159563,159585],{"__ignoreMap":20},[25,159434,159435,159437],{"class":27,"line":28},[25,159436,30463],{"class":240},[25,159438,45399],{"class":244},[25,159440,159441],{"class":27,"line":39},[25,159442,2510],{"emptyLinePlaceholder":167},[25,159444,159445,159447,159449,159452,159454,159456,159458],{"class":27,"line":51},[25,159446,159111],{"class":244},[25,159448,290],{"class":240},[25,159450,159451],{"class":244}," random.randint(",[25,159453,460],{"class":35},[25,159455,12545],{"class":244},[25,159457,554],{"class":35},[25,159459,251],{"class":244},[25,159461,159462,159464,159466],{"class":27,"line":59},[25,159463,146762],{"class":244},[25,159465,290],{"class":240},[25,159467,47404],{"class":35},[25,159469,159470],{"class":27,"line":67},[25,159471,2510],{"emptyLinePlaceholder":167},[25,159473,159474,159476,159478],{"class":27,"line":75},[25,159475,108734],{"class":240},[25,159477,95363],{"class":35},[25,159479,3849],{"class":244},[25,159481,159482,159485,159487,159489,159491,159493,159495,159498],{"class":27,"line":83},[25,159483,159484],{"class":244},"    guess ",[25,159486,290],{"class":240},[25,159488,2492],{"class":35},[25,159490,245],{"class":244},[25,159492,53892],{"class":35},[25,159494,245],{"class":244},[25,159496,159497],{"class":45},"\"请输入1到100之间的数字:\"",[25,159499,30568],{"class":244},[25,159501,159502,159505,159507],{"class":27,"line":91},[25,159503,159504],{"class":244},"    count ",[25,159506,9587],{"class":240},[25,159508,55770],{"class":35},[25,159510,159511],{"class":27,"line":1429},[25,159512,2510],{"emptyLinePlaceholder":167},[25,159514,159515,159517,159520,159522],{"class":27,"line":1441},[25,159516,3211],{"class":240},[25,159518,159519],{"class":244}," guess ",[25,159521,1203],{"class":240},[25,159523,159524],{"class":244}," answer:\n",[25,159526,159527,159529,159531,159534],{"class":27,"line":1723},[25,159528,32522],{"class":35},[25,159530,245],{"class":244},[25,159532,159533],{"class":45},"\"猜大了\"",[25,159535,251],{"class":244},[25,159537,159538,159540,159542,159544],{"class":27,"line":1728},[25,159539,39364],{"class":240},[25,159541,159519],{"class":244},[25,159543,1153],{"class":240},[25,159545,159524],{"class":244},[25,159547,159548,159550,159552,159555],{"class":27,"line":1734},[25,159549,32522],{"class":35},[25,159551,245],{"class":244},[25,159553,159554],{"class":45},"\"猜小了\"",[25,159556,251],{"class":244},[25,159558,159559,159561],{"class":27,"line":1739},[25,159560,158093],{"class":240},[25,159562,3849],{"class":244},[25,159564,159565,159567,159569,159571,159574,159576,159578,159580,159583],{"class":27,"line":1753},[25,159566,32522],{"class":35},[25,159568,245],{"class":244},[25,159570,296],{"class":240},[25,159572,159573],{"class":45},"\"猜对了，一共猜了",[25,159575,1139],{"class":35},[25,159577,84505],{"class":244},[25,159579,1189],{"class":35},[25,159581,159582],{"class":45},"次\"",[25,159584,251],{"class":244},[25,159586,159587],{"class":27,"line":1758},[25,159588,31698],{"class":240},[99,159590,159591,159594,159595,159597],{},[22,159592,159593],{},"while True"," 表示无限循环，通常配合 ",[22,159596,2163],{}," 使用。",[182,159599,159601],{"id":159600},"_45-break和continue","4.5 break和continue",[210,159603,159605],{"id":159604},"_451-break","4.5.1 break",[99,159607,159608,159610],{},[22,159609,2163],{}," 直接结束整个循环。",[15,159612,159614],{"className":30449,"code":159613,"language":30451,"meta":20,"style":20},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[22,159615,159616,159636,159648,159652],{"__ignoreMap":20},[25,159617,159618,159620,159622,159624,159626,159628,159630,159632,159634],{"class":27,"line":28},[25,159619,3135],{"class":240},[25,159621,9548],{"class":244},[25,159623,26114],{"class":240},[25,159625,32514],{"class":35},[25,159627,245],{"class":244},[25,159629,460],{"class":35},[25,159631,12545],{"class":244},[25,159633,587],{"class":35},[25,159635,30857],{"class":244},[25,159637,159638,159640,159642,159644,159646],{"class":27,"line":39},[25,159639,3211],{"class":240},[25,159641,9548],{"class":244},[25,159643,3059],{"class":240},[25,159645,78141],{"class":35},[25,159647,3849],{"class":244},[25,159649,159650],{"class":27,"line":51},[25,159651,31698],{"class":240},[25,159653,159654,159656],{"class":27,"line":59},[25,159655,31370],{"class":35},[25,159657,159301],{"class":244},[99,159659,146528],{},[15,159661,159664],{"className":159662,"code":159663,"language":5297,"meta":20},[5295],"1\n2\n",[22,159665,159663],{"__ignoreMap":20},[210,159667,159669],{"id":159668},"_452-continue","4.5.2 continue",[99,159671,159672,159674],{},[22,159673,154743],{}," 跳过本轮剩余代码，进入下一轮循环。",[15,159676,159678],{"className":30449,"code":159677,"language":30451,"meta":20,"style":20},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[22,159679,159680,159700,159712,159716],{"__ignoreMap":20},[25,159681,159682,159684,159686,159688,159690,159692,159694,159696,159698],{"class":27,"line":28},[25,159683,3135],{"class":240},[25,159685,9548],{"class":244},[25,159687,26114],{"class":240},[25,159689,32514],{"class":35},[25,159691,245],{"class":244},[25,159693,460],{"class":35},[25,159695,12545],{"class":244},[25,159697,587],{"class":35},[25,159699,30857],{"class":244},[25,159701,159702,159704,159706,159708,159710],{"class":27,"line":39},[25,159703,3211],{"class":240},[25,159705,9548],{"class":244},[25,159707,3059],{"class":240},[25,159709,78141],{"class":35},[25,159711,3849],{"class":244},[25,159713,159714],{"class":27,"line":51},[25,159715,148583],{"class":240},[25,159717,159718,159720],{"class":27,"line":59},[25,159719,31370],{"class":35},[25,159721,159301],{"class":244},[99,159723,146528],{},[15,159725,159728],{"className":159726,"code":159727,"language":5297,"meta":20},[5295],"1\n2\n4\n5\n",[22,159729,159727],{"__ignoreMap":20},[182,159731,159733],{"id":159732},"_46-for循环","4.6 for循环",[99,159735,159736,159738],{},[22,159737,3135],{}," 常用于遍历序列。",[15,159740,159742],{"className":30449,"code":159741,"language":30451,"meta":20,"style":20},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[22,159743,159744,159753,159757,159768],{"__ignoreMap":20},[25,159745,159746,159748,159750],{"class":27,"line":28},[25,159747,146607],{"class":244},[25,159749,290],{"class":240},[25,159751,159752],{"class":45}," \"python\"\n",[25,159754,159755],{"class":27,"line":39},[25,159756,2510],{"emptyLinePlaceholder":167},[25,159758,159759,159761,159764,159766],{"class":27,"line":51},[25,159760,3135],{"class":240},[25,159762,159763],{"class":244}," ch ",[25,159765,26114],{"class":240},[25,159767,158470],{"class":244},[25,159769,159770,159772],{"class":27,"line":59},[25,159771,31370],{"class":35},[25,159773,159774],{"class":244},"(ch)\n",[99,159776,159777],{},"遍历列表：",[15,159779,159781],{"className":30449,"code":159780,"language":30451,"meta":20,"style":20},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[22,159782,159783,159805,159809,159819],{"__ignoreMap":20},[25,159784,159785,159788,159790,159792,159794,159796,159798,159800,159803],{"class":27,"line":28},[25,159786,159787],{"class":244},"students ",[25,159789,290],{"class":240},[25,159791,52297],{"class":244},[25,159793,149959],{"class":45},[25,159795,12545],{"class":244},[25,159797,151007],{"class":45},[25,159799,12545],{"class":244},[25,159801,159802],{"class":45},"\"小刚\"",[25,159804,33317],{"class":244},[25,159806,159807],{"class":27,"line":39},[25,159808,2510],{"emptyLinePlaceholder":167},[25,159810,159811,159813,159815,159817],{"class":27,"line":51},[25,159812,3135],{"class":240},[25,159814,152208],{"class":244},[25,159816,26114],{"class":240},[25,159818,152213],{"class":244},[25,159820,159821,159823],{"class":27,"line":59},[25,159822,31370],{"class":35},[25,159824,150113],{"class":244},[182,159826,159828],{"id":159827},"_47-range函数","4.7 range函数",[99,159830,159831,159834],{},[22,159832,159833],{},"range()"," 用于生成整数序列。",[15,159836,159838],{"className":30449,"code":159837,"language":30451,"meta":20,"style":20},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[22,159839,159840,159854,159872],{"__ignoreMap":20},[25,159841,159842,159844,159846,159848,159851],{"class":27,"line":28},[25,159843,33487],{"class":35},[25,159845,245],{"class":244},[25,159847,562],{"class":35},[25,159849,159850],{"class":244},")          ",[25,159852,159853],{"class":302},"# 0,1,2,3,4\n",[25,159855,159856,159858,159860,159862,159864,159866,159869],{"class":27,"line":39},[25,159857,33487],{"class":35},[25,159859,245],{"class":244},[25,159861,460],{"class":35},[25,159863,12545],{"class":244},[25,159865,562],{"class":35},[25,159867,159868],{"class":244},")       ",[25,159870,159871],{"class":302},"# 1,2,3,4\n",[25,159873,159874,159876,159878,159880,159882,159884,159886,159888,159890],{"class":27,"line":51},[25,159875,33487],{"class":35},[25,159877,245],{"class":244},[25,159879,460],{"class":35},[25,159881,12545],{"class":244},[25,159883,689],{"class":35},[25,159885,12545],{"class":244},[25,159887,321],{"class":35},[25,159889,155732],{"class":244},[25,159891,159892],{"class":302},"# 1,3,5,7,9\n",[99,159894,159895,159896,24726],{},"配合 ",[22,159897,3135],{},[15,159899,159901],{"className":30449,"code":159900,"language":30451,"meta":20,"style":20},"for i in range(1, 6):\n    print(i)\n",[22,159902,159903,159923],{"__ignoreMap":20},[25,159904,159905,159907,159909,159911,159913,159915,159917,159919,159921],{"class":27,"line":28},[25,159906,3135],{"class":240},[25,159908,9548],{"class":244},[25,159910,26114],{"class":240},[25,159912,32514],{"class":35},[25,159914,245],{"class":244},[25,159916,460],{"class":35},[25,159918,12545],{"class":244},[25,159920,587],{"class":35},[25,159922,30857],{"class":244},[25,159924,159925,159927],{"class":27,"line":39},[25,159926,31370],{"class":35},[25,159928,159301],{"class":244},[99,159930,9135,159931,159933],{},[22,159932,33487],{}," 的结束值不包含在内。",[182,159935,159937],{"id":159936},"_48-for循环求和","4.8 for循环求和",[15,159939,159941],{"className":30449,"code":159940,"language":30451,"meta":20,"style":20},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[22,159942,159943,159951,159955,159975,159983,159987],{"__ignoreMap":20},[25,159944,159945,159947,159949],{"class":27,"line":28},[25,159946,157331],{"class":244},[25,159948,290],{"class":240},[25,159950,47404],{"class":35},[25,159952,159953],{"class":27,"line":39},[25,159954,2510],{"emptyLinePlaceholder":167},[25,159956,159957,159959,159961,159963,159965,159967,159969,159971,159973],{"class":27,"line":51},[25,159958,3135],{"class":240},[25,159960,9548],{"class":244},[25,159962,26114],{"class":240},[25,159964,32514],{"class":35},[25,159966,245],{"class":244},[25,159968,460],{"class":35},[25,159970,12545],{"class":244},[25,159972,580],{"class":35},[25,159974,30857],{"class":244},[25,159976,159977,159979,159981],{"class":27,"line":59},[25,159978,159378],{"class":244},[25,159980,9587],{"class":240},[25,159982,159383],{"class":244},[25,159984,159985],{"class":27,"line":67},[25,159986,2510],{"emptyLinePlaceholder":167},[25,159988,159989,159991],{"class":27,"line":75},[25,159990,30486],{"class":35},[25,159992,159402],{"class":244},[99,159994,159995],{},"求偶数和：",[15,159997,159999],{"className":30449,"code":159998,"language":30451,"meta":20,"style":20},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[22,160000,160001,160009,160013,160033,160049,160058,160062],{"__ignoreMap":20},[25,160002,160003,160005,160007],{"class":27,"line":28},[25,160004,157331],{"class":244},[25,160006,290],{"class":240},[25,160008,47404],{"class":35},[25,160010,160011],{"class":27,"line":39},[25,160012,2510],{"emptyLinePlaceholder":167},[25,160014,160015,160017,160019,160021,160023,160025,160027,160029,160031],{"class":27,"line":51},[25,160016,3135],{"class":240},[25,160018,9548],{"class":244},[25,160020,26114],{"class":240},[25,160022,32514],{"class":35},[25,160024,245],{"class":244},[25,160026,460],{"class":35},[25,160028,12545],{"class":244},[25,160030,580],{"class":35},[25,160032,30857],{"class":244},[25,160034,160035,160037,160039,160041,160043,160045,160047],{"class":27,"line":59},[25,160036,3211],{"class":240},[25,160038,9548],{"class":244},[25,160040,571],{"class":240},[25,160042,14865],{"class":35},[25,160044,101630],{"class":240},[25,160046,4203],{"class":35},[25,160048,3849],{"class":244},[25,160050,160051,160054,160056],{"class":27,"line":67},[25,160052,160053],{"class":244},"        total ",[25,160055,9587],{"class":240},[25,160057,159383],{"class":244},[25,160059,160060],{"class":27,"line":75},[25,160061,2510],{"emptyLinePlaceholder":167},[25,160063,160064,160066],{"class":27,"line":83},[25,160065,30486],{"class":35},[25,160067,159402],{"class":244},[99,160069,160070],{},"也可以：",[15,160072,160074],{"className":30449,"code":160073,"language":30451,"meta":20,"style":20},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[22,160075,160076,160084,160088,160112,160120,160124],{"__ignoreMap":20},[25,160077,160078,160080,160082],{"class":27,"line":28},[25,160079,157331],{"class":244},[25,160081,290],{"class":240},[25,160083,47404],{"class":35},[25,160085,160086],{"class":27,"line":39},[25,160087,2510],{"emptyLinePlaceholder":167},[25,160089,160090,160092,160094,160096,160098,160100,160102,160104,160106,160108,160110],{"class":27,"line":51},[25,160091,3135],{"class":240},[25,160093,9548],{"class":244},[25,160095,26114],{"class":240},[25,160097,32514],{"class":35},[25,160099,245],{"class":244},[25,160101,321],{"class":35},[25,160103,12545],{"class":244},[25,160105,580],{"class":35},[25,160107,12545],{"class":244},[25,160109,321],{"class":35},[25,160111,30857],{"class":244},[25,160113,160114,160116,160118],{"class":27,"line":59},[25,160115,159378],{"class":244},[25,160117,9587],{"class":240},[25,160119,159383],{"class":244},[25,160121,160122],{"class":27,"line":67},[25,160123,2510],{"emptyLinePlaceholder":167},[25,160125,160126,160128],{"class":27,"line":75},[25,160127,30486],{"class":35},[25,160129,159402],{"class":244},[182,160131,160133],{"id":160132},"_49-循环嵌套","4.9 循环嵌套",[99,160135,160136],{},"嵌套循环就是循环里面再写循环。",[15,160138,160140],{"className":30449,"code":160139,"language":30451,"meta":20,"style":20},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[22,160141,160142,160162,160182],{"__ignoreMap":20},[25,160143,160144,160146,160148,160150,160152,160154,160156,160158,160160],{"class":27,"line":28},[25,160145,3135],{"class":240},[25,160147,9548],{"class":244},[25,160149,26114],{"class":240},[25,160151,32514],{"class":35},[25,160153,245],{"class":244},[25,160155,460],{"class":35},[25,160157,12545],{"class":244},[25,160159,536],{"class":35},[25,160161,30857],{"class":244},[25,160163,160164,160166,160168,160170,160172,160174,160176,160178,160180],{"class":27,"line":39},[25,160165,3311],{"class":240},[25,160167,9610],{"class":244},[25,160169,26114],{"class":240},[25,160171,32514],{"class":35},[25,160173,245],{"class":244},[25,160175,460],{"class":35},[25,160177,12545],{"class":244},[25,160179,536],{"class":35},[25,160181,30857],{"class":244},[25,160183,160184,160186,160188,160190,160193,160195,160197,160199,160202,160204,160206,160208,160210],{"class":27,"line":51},[25,160185,32522],{"class":35},[25,160187,245],{"class":244},[25,160189,296],{"class":240},[25,160191,160192],{"class":45},"\"i=",[25,160194,1139],{"class":35},[25,160196,684],{"class":244},[25,160198,1189],{"class":35},[25,160200,160201],{"class":45},", j=",[25,160203,1139],{"class":35},[25,160205,710],{"class":244},[25,160207,1189],{"class":35},[25,160209,494],{"class":45},[25,160211,251],{"class":244},[99,160213,160214],{},"外层循环执行一次，内层循环执行完整一轮。",[182,160216,160218],{"id":160217},"_410-九九乘法表","4.10 九九乘法表",[15,160220,160222],{"className":30449,"code":160221,"language":30451,"meta":20,"style":20},"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",[22,160223,160224,160244,160267,160319],{"__ignoreMap":20},[25,160225,160226,160228,160230,160232,160234,160236,160238,160240,160242],{"class":27,"line":28},[25,160227,3135],{"class":240},[25,160229,9548],{"class":244},[25,160231,26114],{"class":240},[25,160233,32514],{"class":35},[25,160235,245],{"class":244},[25,160237,460],{"class":35},[25,160239,12545],{"class":244},[25,160241,689],{"class":35},[25,160243,30857],{"class":244},[25,160245,160246,160248,160250,160252,160254,160256,160258,160261,160263,160265],{"class":27,"line":39},[25,160247,3311],{"class":240},[25,160249,9610],{"class":244},[25,160251,26114],{"class":240},[25,160253,32514],{"class":35},[25,160255,245],{"class":244},[25,160257,460],{"class":35},[25,160259,160260],{"class":244},", i ",[25,160262,724],{"class":240},[25,160264,25225],{"class":35},[25,160266,30857],{"class":244},[25,160268,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287,160289,160291,160293,160295,160297,160299,160301,160303,160305,160307,160309,160311,160313,160315,160317],{"class":27,"line":51},[25,160270,32522],{"class":35},[25,160272,245],{"class":244},[25,160274,296],{"class":240},[25,160276,494],{"class":45},[25,160278,1139],{"class":35},[25,160280,710],{"class":244},[25,160282,1189],{"class":35},[25,160284,698],{"class":45},[25,160286,1139],{"class":35},[25,160288,684],{"class":244},[25,160290,1189],{"class":35},[25,160292,290],{"class":45},[25,160294,1139],{"class":35},[25,160296,100219],{"class":244},[25,160298,698],{"class":240},[25,160300,3520],{"class":244},[25,160302,1189],{"class":35},[25,160304,494],{"class":45},[25,160306,12545],{"class":244},[25,160308,45872],{"class":5326},[25,160310,290],{"class":240},[25,160312,494],{"class":45},[25,160314,1343],{"class":35},[25,160316,494],{"class":45},[25,160318,251],{"class":244},[25,160320,160321,160323],{"class":27,"line":59},[25,160322,31370],{"class":35},[25,160324,2086],{"class":244},[99,160326,160327],{},"关键点：",[194,160329,160330,160336,160342,160348],{},[106,160331,160332,160333,160335],{},"外层 ",[22,160334,684],{}," 控制行。",[106,160337,160338,160339,160341],{},"内层 ",[22,160340,710],{}," 控制列。",[106,160343,160344,160345,160347],{},"每行结束后用 ",[22,160346,146543],{}," 换行。",[106,160349,160350,160353],{},[22,160351,160352],{},"end=\"\\t\""," 让同一行的内容横向排列。",[182,160355,160357],{"id":160356},"_411-循环else","4.11 循环else",[99,160359,160360,160361,160363,160364,160366,160367,160369],{},"Python 的循环可以带 ",[22,160362,1812],{},"。当循环正常结束时执行 ",[22,160365,1812],{},"，如果被 ",[22,160368,2163],{}," 打断，则不执行。",[15,160371,160373],{"className":30449,"code":160372,"language":30451,"meta":20,"style":20},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[22,160374,160375,160395,160407,160418,160422,160428],{"__ignoreMap":20},[25,160376,160377,160379,160381,160383,160385,160387,160389,160391,160393],{"class":27,"line":28},[25,160378,3135],{"class":240},[25,160380,9548],{"class":244},[25,160382,26114],{"class":240},[25,160384,32514],{"class":35},[25,160386,245],{"class":244},[25,160388,460],{"class":35},[25,160390,12545],{"class":244},[25,160392,587],{"class":35},[25,160394,30857],{"class":244},[25,160396,160397,160399,160401,160403,160405],{"class":27,"line":39},[25,160398,3211],{"class":240},[25,160400,9548],{"class":244},[25,160402,3059],{"class":240},[25,160404,2148],{"class":35},[25,160406,3849],{"class":244},[25,160408,160409,160411,160413,160416],{"class":27,"line":51},[25,160410,32522],{"class":35},[25,160412,245],{"class":244},[25,160414,160415],{"class":45},"\"找到了\"",[25,160417,251],{"class":244},[25,160419,160420],{"class":27,"line":59},[25,160421,31698],{"class":240},[25,160423,160424,160426],{"class":27,"line":67},[25,160425,1812],{"class":240},[25,160427,3849],{"class":244},[25,160429,160430,160432,160434,160437],{"class":27,"line":75},[25,160431,31370],{"class":35},[25,160433,245],{"class":244},[25,160435,160436],{"class":45},"\"没找到\"",[25,160438,251],{"class":244},[99,160440,160441],{},"常用于搜索。",[15,160443,160445],{"className":30449,"code":160444,"language":30451,"meta":20,"style":20},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[22,160446,160447,160468,160477,160481,160493,160504,160514,160518,160524],{"__ignoreMap":20},[25,160448,160449,160452,160454,160456,160458,160460,160462,160464,160466],{"class":27,"line":28},[25,160450,160451],{"class":244},"names ",[25,160453,290],{"class":240},[25,160455,52297],{"class":244},[25,160457,149959],{"class":45},[25,160459,12545],{"class":244},[25,160461,151007],{"class":45},[25,160463,12545],{"class":244},[25,160465,159802],{"class":45},[25,160467,33317],{"class":244},[25,160469,160470,160472,160474],{"class":27,"line":39},[25,160471,111649],{"class":244},[25,160473,290],{"class":240},[25,160475,160476],{"class":45}," \"小李\"\n",[25,160478,160479],{"class":27,"line":51},[25,160480,2510],{"emptyLinePlaceholder":167},[25,160482,160483,160485,160488,160490],{"class":27,"line":59},[25,160484,3135],{"class":240},[25,160486,160487],{"class":244}," name ",[25,160489,26114],{"class":240},[25,160491,160492],{"class":244}," names:\n",[25,160494,160495,160497,160499,160501],{"class":27,"line":67},[25,160496,3211],{"class":240},[25,160498,160487],{"class":244},[25,160500,3059],{"class":240},[25,160502,160503],{"class":244}," target:\n",[25,160505,160506,160508,160510,160512],{"class":27,"line":75},[25,160507,32522],{"class":35},[25,160509,245],{"class":244},[25,160511,160415],{"class":45},[25,160513,251],{"class":244},[25,160515,160516],{"class":27,"line":83},[25,160517,31698],{"class":240},[25,160519,160520,160522],{"class":27,"line":91},[25,160521,1812],{"class":240},[25,160523,3849],{"class":244},[25,160525,160526,160528,160530,160532],{"class":27,"line":1429},[25,160527,31370],{"class":35},[25,160529,245],{"class":244},[25,160531,160436],{"class":45},[25,160533,251],{"class":244},[182,160535,160537],{"id":160536},"_412-小案例登录重试","4.12 小案例：登录重试",[99,160539,123363],{},[194,160541,160542,160545,160548],{},[106,160543,160544],{},"用户最多输入 3 次密码。",[106,160546,160547],{},"密码正确则登录成功。",[106,160549,160550],{},"3 次都错误则锁定账号。",[99,160552,10145],{},[15,160554,160556],{"className":30449,"code":160555,"language":30451,"meta":20,"style":20},"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",[22,160557,160558,160568,160572,160588,160604,160608,160620,160631,160635,160641,160666,160672],{"__ignoreMap":20},[25,160559,160560,160563,160565],{"class":27,"line":28},[25,160561,160562],{"class":244},"password ",[25,160564,290],{"class":240},[25,160566,160567],{"class":45}," \"123456\"\n",[25,160569,160570],{"class":27,"line":39},[25,160571,2510],{"emptyLinePlaceholder":167},[25,160573,160574,160576,160578,160580,160582,160584,160586],{"class":27,"line":51},[25,160575,3135],{"class":240},[25,160577,9548],{"class":244},[25,160579,26114],{"class":240},[25,160581,32514],{"class":35},[25,160583,245],{"class":244},[25,160585,315],{"class":35},[25,160587,30857],{"class":244},[25,160589,160590,160593,160595,160597,160599,160602],{"class":27,"line":59},[25,160591,160592],{"class":244},"    user_password ",[25,160594,290],{"class":240},[25,160596,60676],{"class":35},[25,160598,245],{"class":244},[25,160600,160601],{"class":45},"\"请输入密码:\"",[25,160603,251],{"class":244},[25,160605,160606],{"class":27,"line":67},[25,160607,2510],{"emptyLinePlaceholder":167},[25,160609,160610,160612,160615,160617],{"class":27,"line":75},[25,160611,3211],{"class":240},[25,160613,160614],{"class":244}," user_password ",[25,160616,3059],{"class":240},[25,160618,160619],{"class":244}," password:\n",[25,160621,160622,160624,160626,160629],{"class":27,"line":83},[25,160623,32522],{"class":35},[25,160625,245],{"class":244},[25,160627,160628],{"class":45},"\"登录成功\"",[25,160630,251],{"class":244},[25,160632,160633],{"class":27,"line":91},[25,160634,31698],{"class":240},[25,160636,160637,160639],{"class":27,"line":1429},[25,160638,158093],{"class":240},[25,160640,3849],{"class":244},[25,160642,160643,160645,160647,160649,160652,160655,160657,160659,160661,160664],{"class":27,"line":1441},[25,160644,32522],{"class":35},[25,160646,245],{"class":244},[25,160648,296],{"class":240},[25,160650,160651],{"class":45},"\"密码错误，还剩",[25,160653,160654],{"class":35},"{2",[25,160656,52342],{"class":240},[25,160658,3142],{"class":244},[25,160660,1189],{"class":35},[25,160662,160663],{"class":45},"次机会\"",[25,160665,251],{"class":244},[25,160667,160668,160670],{"class":27,"line":1723},[25,160669,1812],{"class":240},[25,160671,3849],{"class":244},[25,160673,160674,160676,160678,160681],{"class":27,"line":1728},[25,160675,31370],{"class":35},[25,160677,245],{"class":244},[25,160679,160680],{"class":45},"\"账号已锁定\"",[25,160682,251],{"class":244},[182,160684,160686],{"id":160685},"_413-小案例菜单程序","4.13 小案例：菜单程序",[15,160688,160690],{"className":30449,"code":160689,"language":30451,"meta":20,"style":20},"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",[22,160691,160692,160700,160711,160722,160733,160744,160755,160759,160774,160778,160790,160801,160813,160824,160836,160847,160859,160869,160873,160879],{"__ignoreMap":20},[25,160693,160694,160696,160698],{"class":27,"line":28},[25,160695,108734],{"class":240},[25,160697,95363],{"class":35},[25,160699,3849],{"class":244},[25,160701,160702,160704,160706,160709],{"class":27,"line":39},[25,160703,31370],{"class":35},[25,160705,245],{"class":244},[25,160707,160708],{"class":45},"\"====== 菜单 ======\"",[25,160710,251],{"class":244},[25,160712,160713,160715,160717,160720],{"class":27,"line":51},[25,160714,31370],{"class":35},[25,160716,245],{"class":244},[25,160718,160719],{"class":45},"\"1. 查询余额\"",[25,160721,251],{"class":244},[25,160723,160724,160726,160728,160731],{"class":27,"line":59},[25,160725,31370],{"class":35},[25,160727,245],{"class":244},[25,160729,160730],{"class":45},"\"2. 存款\"",[25,160732,251],{"class":244},[25,160734,160735,160737,160739,160742],{"class":27,"line":67},[25,160736,31370],{"class":35},[25,160738,245],{"class":244},[25,160740,160741],{"class":45},"\"3. 取款\"",[25,160743,251],{"class":244},[25,160745,160746,160748,160750,160753],{"class":27,"line":75},[25,160747,31370],{"class":35},[25,160749,245],{"class":244},[25,160751,160752],{"class":45},"\"0. 退出\"",[25,160754,251],{"class":244},[25,160756,160757],{"class":27,"line":83},[25,160758,2510],{"emptyLinePlaceholder":167},[25,160760,160761,160764,160766,160768,160770,160772],{"class":27,"line":91},[25,160762,160763],{"class":244},"    choice ",[25,160765,290],{"class":240},[25,160767,60676],{"class":35},[25,160769,245],{"class":244},[25,160771,153144],{"class":45},[25,160773,251],{"class":244},[25,160775,160776],{"class":27,"line":1429},[25,160777,2510],{"emptyLinePlaceholder":167},[25,160779,160780,160782,160784,160786,160788],{"class":27,"line":1441},[25,160781,3211],{"class":240},[25,160783,153157],{"class":244},[25,160785,3059],{"class":240},[25,160787,153162],{"class":45},[25,160789,3849],{"class":244},[25,160791,160792,160794,160796,160799],{"class":27,"line":1723},[25,160793,32522],{"class":35},[25,160795,245],{"class":244},[25,160797,160798],{"class":45},"\"余额为1000元\"",[25,160800,251],{"class":244},[25,160802,160803,160805,160807,160809,160811],{"class":27,"line":1728},[25,160804,39364],{"class":240},[25,160806,153157],{"class":244},[25,160808,3059],{"class":240},[25,160810,153181],{"class":45},[25,160812,3849],{"class":244},[25,160814,160815,160817,160819,160822],{"class":27,"line":1734},[25,160816,32522],{"class":35},[25,160818,245],{"class":244},[25,160820,160821],{"class":45},"\"存款功能\"",[25,160823,251],{"class":244},[25,160825,160826,160828,160830,160832,160834],{"class":27,"line":1739},[25,160827,39364],{"class":240},[25,160829,153157],{"class":244},[25,160831,3059],{"class":240},[25,160833,153199],{"class":45},[25,160835,3849],{"class":244},[25,160837,160838,160840,160842,160845],{"class":27,"line":1753},[25,160839,32522],{"class":35},[25,160841,245],{"class":244},[25,160843,160844],{"class":45},"\"取款功能\"",[25,160846,251],{"class":244},[25,160848,160849,160851,160853,160855,160857],{"class":27,"line":1758},[25,160850,39364],{"class":240},[25,160852,153157],{"class":244},[25,160854,3059],{"class":240},[25,160856,153253],{"class":45},[25,160858,3849],{"class":244},[25,160860,160861,160863,160865,160867],{"class":27,"line":1764},[25,160862,32522],{"class":35},[25,160864,245],{"class":244},[25,160866,153264],{"class":45},[25,160868,251],{"class":244},[25,160870,160871],{"class":27,"line":1785},[25,160872,31698],{"class":240},[25,160874,160875,160877],{"class":27,"line":1790},[25,160876,158093],{"class":240},[25,160878,3849],{"class":244},[25,160880,160881,160883,160885,160887],{"class":27,"line":1804},[25,160882,32522],{"class":35},[25,160884,245],{"class":244},[25,160886,153285],{"class":45},[25,160888,251],{"class":244},[99,160890,160891,160892,160894,160895,28456],{},"菜单类程序通常使用 ",[22,160893,159593],{},"，用户选择退出时 ",[22,160896,2163],{},[182,160898,160900],{"id":160899},"_414-易错点","4.14 易错点",[194,160902,160903,160908,160914,160922,160928],{},[106,160904,160905,160907],{},[22,160906,108734],{}," 循环必须更新控制变量。",[106,160909,160910,160913],{},[22,160911,160912],{},"range(1, 10)"," 不包含 10。",[106,160915,160916,160918,160919,160921],{},[22,160917,2163],{}," 结束整个循环，",[22,160920,154743],{}," 只跳过本轮。",[106,160923,160924,160925,160927],{},"嵌套循环中，",[22,160926,2163],{}," 只跳出当前所在的一层循环。",[106,160929,160930],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[182,160932,160934],{"id":160933},"_415-本章练习","4.15 本章练习",[194,160936,160937,160940,160943,160946,160949],{},[106,160938,160939],{},"输出 1 到 100。",[106,160941,160942],{},"计算 1 到 100 的偶数和。",[106,160944,160945],{},"输出 100 以内能被 3 和 5 同时整除的数。",[106,160947,160948],{},"编写猜数字游戏，限制最多猜 7 次。",[106,160950,160951],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[159,160953,160954],{},"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":20,"searchDepth":39,"depth":39,"links":160956},[160957,160958,160959,160960,160961,160965,160966,160967,160968,160969,160970,160971,160972,160973,160974],{"id":159213,"depth":39,"text":159214},{"id":159243,"depth":39,"text":159244},{"id":159332,"depth":39,"text":159333},{"id":159426,"depth":39,"text":159427},{"id":159600,"depth":39,"text":159601,"children":160962},[160963,160964],{"id":159604,"depth":51,"text":159605},{"id":159668,"depth":51,"text":159669},{"id":159732,"depth":39,"text":159733},{"id":159827,"depth":39,"text":159828},{"id":159936,"depth":39,"text":159937},{"id":160132,"depth":39,"text":160133},{"id":160217,"depth":39,"text":160218},{"id":160356,"depth":39,"text":160357},{"id":160536,"depth":39,"text":160537},{"id":160685,"depth":39,"text":160686},{"id":160899,"depth":39,"text":160900},{"id":160933,"depth":39,"text":160934},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159205,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160981,"title":160982,"body":160983,"description":164,"extension":165,"meta":162988,"navigation":167,"path":162989,"seo":162990,"stem":162991,"__hash__":162992},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160984,"toc":162968},[160985,160988,160992,160995,160998,161012,161015,161029,161033,161035,161054,161056,161103,161105,161119,161123,161197,161200,161204,161207,161266,161274,161277,161330,161333,161337,161342,161397,161405,161455,161459,161464,161472,161571,161577,161581,161586,161589,161600,161641,161654,161658,161661,161697,161700,161713,161716,161776,161780,161784,161787,161838,161842,161845,161892,161898,161964,161967,161971,161974,162090,162093,162097,162100,162206,162210,162213,162251,162254,162296,162299,162359,162362,162366,162830,162833,162837,162864,162870,162931,162935,162965],[10,160986,160982],{"id":160987},"_5-函数基础",[182,160989,160991],{"id":160990},"_51-为什么需要函数","5.1 为什么需要函数",[99,160993,160994],{},"函数用于封装一段可以重复使用的代码。",[99,160996,160997],{},"不使用函数的问题：",[194,160999,161000,161003,161006,161009],{},[106,161001,161002],{},"重复代码多。",[106,161004,161005],{},"修改逻辑时容易漏改。",[106,161007,161008],{},"主流程不清晰。",[106,161010,161011],{},"程序越写越长，难以维护。",[99,161013,161014],{},"使用函数后的好处：",[194,161016,161017,161020,161023,161026],{},[106,161018,161019],{},"提高复用性。",[106,161021,161022],{},"提高可读性。",[106,161024,161025],{},"便于调试。",[106,161027,161028],{},"便于分工。",[182,161030,161032],{"id":161031},"_52-函数定义","5.2 函数定义",[99,161034,5291],{},[15,161036,161038],{"className":30449,"code":161037,"language":30451,"meta":20,"style":20},"def 函数名():\n    函数体\n",[22,161039,161040,161049],{"__ignoreMap":20},[25,161041,161042,161044,161047],{"class":27,"line":28},[25,161043,32018],{"class":240},[25,161045,161046],{"class":31}," 函数名",[25,161048,32024],{"class":244},[25,161050,161051],{"class":27,"line":39},[25,161052,161053],{"class":244},"    函数体\n",[99,161055,15245],{},[15,161057,161059],{"className":30449,"code":161058,"language":30451,"meta":20,"style":20},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[22,161060,161061,161070,161080,161090,161094,161098],{"__ignoreMap":20},[25,161062,161063,161065,161068],{"class":27,"line":28},[25,161064,32018],{"class":240},[25,161066,161067],{"class":31}," say_hello",[25,161069,32024],{"class":244},[25,161071,161072,161074,161076,161078],{"class":27,"line":39},[25,161073,31370],{"class":35},[25,161075,245],{"class":244},[25,161077,5954],{"class":45},[25,161079,251],{"class":244},[25,161081,161082,161084,161086,161088],{"class":27,"line":51},[25,161083,31370],{"class":35},[25,161085,245],{"class":244},[25,161087,146710],{"class":45},[25,161089,251],{"class":244},[25,161091,161092],{"class":27,"line":59},[25,161093,2510],{"emptyLinePlaceholder":167},[25,161095,161096],{"class":27,"line":67},[25,161097,2510],{"emptyLinePlaceholder":167},[25,161099,161100],{"class":27,"line":75},[25,161101,161102],{"class":244},"say_hello()\n",[99,161104,9135],{},[194,161106,161107,161110,161113,161116],{},[106,161108,161109],{},"函数必须先定义，再调用。",[106,161111,161112],{},"函数名遵循变量命名规则。",[106,161114,161115],{},"函数体需要缩进。",[106,161117,161118],{},"函数不调用就不会执行。",[182,161120,161122],{"id":161121},"_53-函数调用","5.3 函数调用",[15,161124,161126],{"className":30449,"code":161125,"language":30451,"meta":20,"style":20},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[22,161127,161128,161137,161148,161159,161170,161180,161184,161188,161193],{"__ignoreMap":20},[25,161129,161130,161132,161135],{"class":27,"line":28},[25,161131,32018],{"class":240},[25,161133,161134],{"class":31}," print_menu",[25,161136,32024],{"class":244},[25,161138,161139,161141,161143,161146],{"class":27,"line":39},[25,161140,31370],{"class":35},[25,161142,245],{"class":244},[25,161144,161145],{"class":45},"\"1. 查询\"",[25,161147,251],{"class":244},[25,161149,161150,161152,161154,161157],{"class":27,"line":51},[25,161151,31370],{"class":35},[25,161153,245],{"class":244},[25,161155,161156],{"class":45},"\"2. 添加\"",[25,161158,251],{"class":244},[25,161160,161161,161163,161165,161168],{"class":27,"line":59},[25,161162,31370],{"class":35},[25,161164,245],{"class":244},[25,161166,161167],{"class":45},"\"3. 删除\"",[25,161169,251],{"class":244},[25,161171,161172,161174,161176,161178],{"class":27,"line":67},[25,161173,31370],{"class":35},[25,161175,245],{"class":244},[25,161177,160752],{"class":45},[25,161179,251],{"class":244},[25,161181,161182],{"class":27,"line":75},[25,161183,2510],{"emptyLinePlaceholder":167},[25,161185,161186],{"class":27,"line":83},[25,161187,2510],{"emptyLinePlaceholder":167},[25,161189,161190],{"class":27,"line":91},[25,161191,161192],{"class":244},"print_menu()\n",[25,161194,161195],{"class":27,"line":1429},[25,161196,161192],{"class":244},[99,161198,161199],{},"函数可以多次调用，每次调用都会执行函数体。",[182,161201,161203],{"id":161202},"_54-参数","5.4 参数",[99,161205,161206],{},"参数用于向函数传递数据。",[15,161208,161210],{"className":30449,"code":161209,"language":30451,"meta":20,"style":20},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[22,161211,161212,161221,161241,161245,161249,161258],{"__ignoreMap":20},[25,161213,161214,161216,161218],{"class":27,"line":28},[25,161215,32018],{"class":240},[25,161217,161067],{"class":31},[25,161219,161220],{"class":244},"(name):\n",[25,161222,161223,161225,161227,161229,161231,161233,161235,161237,161239],{"class":27,"line":39},[25,161224,31370],{"class":35},[25,161226,245],{"class":244},[25,161228,296],{"class":240},[25,161230,157125],{"class":45},[25,161232,1139],{"class":35},[25,161234,79881],{"class":244},[25,161236,1189],{"class":35},[25,161238,494],{"class":45},[25,161240,251],{"class":244},[25,161242,161243],{"class":27,"line":51},[25,161244,2510],{"emptyLinePlaceholder":167},[25,161246,161247],{"class":27,"line":59},[25,161248,2510],{"emptyLinePlaceholder":167},[25,161250,161251,161254,161256],{"class":27,"line":67},[25,161252,161253],{"class":244},"say_hello(",[25,161255,149959],{"class":45},[25,161257,251],{"class":244},[25,161259,161260,161262,161264],{"class":27,"line":75},[25,161261,161253],{"class":244},[25,161263,151007],{"class":45},[25,161265,251],{"class":244},[99,161267,161268,161270,161271,161273],{},[22,161269,79881],{}," 是形参，",[22,161272,149959],{}," 是实参。",[99,161275,161276],{},"多个参数：",[15,161278,161280],{"className":30449,"code":161279,"language":30451,"meta":20,"style":20},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[22,161281,161282,161290,161303,161309,161313,161317],{"__ignoreMap":20},[25,161283,161284,161286,161288],{"class":27,"line":28},[25,161285,32018],{"class":240},[25,161287,5319],{"class":31},[25,161289,151164],{"class":244},[25,161291,161292,161295,161297,161299,161301],{"class":27,"line":39},[25,161293,161294],{"class":244},"    result ",[25,161296,290],{"class":240},[25,161298,10979],{"class":244},[25,161300,724],{"class":240},[25,161302,151175],{"class":244},[25,161304,161305,161307],{"class":27,"line":51},[25,161306,31370],{"class":35},[25,161308,76656],{"class":244},[25,161310,161311],{"class":27,"line":59},[25,161312,2510],{"emptyLinePlaceholder":167},[25,161314,161315],{"class":27,"line":67},[25,161316,2510],{"emptyLinePlaceholder":167},[25,161318,161319,161322,161324,161326,161328],{"class":27,"line":75},[25,161320,161321],{"class":244},"add(",[25,161323,689],{"class":35},[25,161325,12545],{"class":244},[25,161327,943],{"class":35},[25,161329,251],{"class":244},[99,161331,161332],{},"调用时参数数量必须匹配。",[182,161334,161336],{"id":161335},"_55-返回值","5.5 返回值",[99,161338,161339,161341],{},[22,161340,17156],{}," 用于把函数内部的结果返回给调用者。",[15,161343,161345],{"className":30449,"code":161344,"language":30451,"meta":20,"style":20},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[22,161346,161347,161355,161365,161369,161373,161391],{"__ignoreMap":20},[25,161348,161349,161351,161353],{"class":27,"line":28},[25,161350,32018],{"class":240},[25,161352,5319],{"class":31},[25,161354,151164],{"class":244},[25,161356,161357,161359,161361,161363],{"class":27,"line":39},[25,161358,4200],{"class":240},[25,161360,10979],{"class":244},[25,161362,724],{"class":240},[25,161364,151175],{"class":244},[25,161366,161367],{"class":27,"line":51},[25,161368,2510],{"emptyLinePlaceholder":167},[25,161370,161371],{"class":27,"line":59},[25,161372,2510],{"emptyLinePlaceholder":167},[25,161374,161375,161378,161380,161383,161385,161387,161389],{"class":27,"line":67},[25,161376,161377],{"class":244},"result ",[25,161379,290],{"class":240},[25,161381,161382],{"class":244}," add(",[25,161384,689],{"class":35},[25,161386,12545],{"class":244},[25,161388,943],{"class":35},[25,161390,251],{"class":244},[25,161392,161393,161395],{"class":27,"line":75},[25,161394,30486],{"class":35},[25,161396,76656],{"class":244},[99,161398,161399,161400,161402,161403,28456],{},"如果函数没有写 ",[22,161401,17156],{},"，默认返回 ",[22,161404,95757],{},[15,161406,161408],{"className":30449,"code":161407,"language":30451,"meta":20,"style":20},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[22,161409,161410,161418,161428,161432,161436,161445],{"__ignoreMap":20},[25,161411,161412,161414,161416],{"class":27,"line":28},[25,161413,32018],{"class":240},[25,161415,161067],{"class":31},[25,161417,32024],{"class":244},[25,161419,161420,161422,161424,161426],{"class":27,"line":39},[25,161421,31370],{"class":35},[25,161423,245],{"class":244},[25,161425,5954],{"class":45},[25,161427,251],{"class":244},[25,161429,161430],{"class":27,"line":51},[25,161431,2510],{"emptyLinePlaceholder":167},[25,161433,161434],{"class":27,"line":59},[25,161435,2510],{"emptyLinePlaceholder":167},[25,161437,161438,161440,161442],{"class":27,"line":67},[25,161439,161377],{"class":244},[25,161441,290],{"class":240},[25,161443,161444],{"class":244}," say_hello()\n",[25,161446,161447,161449,161452],{"class":27,"line":75},[25,161448,30486],{"class":35},[25,161450,161451],{"class":244},"(result)  ",[25,161453,161454],{"class":302},"# None\n",[182,161456,161458],{"id":161457},"_56-return的作用","5.6 return的作用",[99,161460,161461,161463],{},[22,161462,17156],{}," 有两个作用：",[194,161465,161466,161469],{},[106,161467,161468],{},"返回结果。",[106,161470,161471],{},"结束函数。",[15,161473,161475],{"className":30449,"code":161474,"language":30451,"meta":20,"style":20},"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",[22,161476,161477,161487,161499,161506,161510,161522,161529,161533,161540,161544,161548,161559],{"__ignoreMap":20},[25,161478,161479,161481,161484],{"class":27,"line":28},[25,161480,32018],{"class":240},[25,161482,161483],{"class":31}," check_age",[25,161485,161486],{"class":244},"(age):\n",[25,161488,161489,161491,161493,161495,161497],{"class":27,"line":39},[25,161490,3211],{"class":240},[25,161492,15817],{"class":244},[25,161494,1153],{"class":240},[25,161496,4203],{"class":35},[25,161498,3849],{"class":244},[25,161500,161501,161503],{"class":27,"line":51},[25,161502,14862],{"class":240},[25,161504,161505],{"class":45}," \"年龄不合法\"\n",[25,161507,161508],{"class":27,"line":59},[25,161509,2510],{"emptyLinePlaceholder":167},[25,161511,161512,161514,161516,161518,161520],{"class":27,"line":67},[25,161513,3211],{"class":240},[25,161515,15817],{"class":244},[25,161517,1821],{"class":240},[25,161519,156356],{"class":35},[25,161521,3849],{"class":244},[25,161523,161524,161526],{"class":27,"line":75},[25,161525,14862],{"class":240},[25,161527,161528],{"class":45}," \"成年人\"\n",[25,161530,161531],{"class":27,"line":83},[25,161532,2510],{"emptyLinePlaceholder":167},[25,161534,161535,161537],{"class":27,"line":91},[25,161536,4200],{"class":240},[25,161538,161539],{"class":45}," \"未成年人\"\n",[25,161541,161542],{"class":27,"line":1429},[25,161543,2510],{"emptyLinePlaceholder":167},[25,161545,161546],{"class":27,"line":1441},[25,161547,2510],{"emptyLinePlaceholder":167},[25,161549,161550,161552,161555,161557],{"class":27,"line":1723},[25,161551,30486],{"class":35},[25,161553,161554],{"class":244},"(check_age(",[25,161556,943],{"class":35},[25,161558,30568],{"class":244},[25,161560,161561,161563,161565,161567,161569],{"class":27,"line":1728},[25,161562,30486],{"class":35},[25,161564,161554],{"class":244},[25,161566,775],{"class":240},[25,161568,460],{"class":35},[25,161570,30568],{"class":244},[99,161572,161573,161574,161576],{},"函数执行到 ",[22,161575,17156],{}," 后，后面的代码不会继续执行。",[182,161578,161580],{"id":161579},"_57-none","5.7 None",[99,161582,161583,161585],{},[22,161584,95757],{}," 表示空值或没有结果。",[99,161587,161588],{},"常见使用场景：",[194,161590,161591,161594,161597],{},[106,161592,161593],{},"函数没有返回值。",[106,161595,161596],{},"变量暂时没有具体值。",[106,161598,161599],{},"表示查询不到结果。",[15,161601,161603],{"className":30449,"code":161602,"language":30451,"meta":20,"style":20},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[22,161604,161605,161613,161617,161630],{"__ignoreMap":20},[25,161606,161607,161609,161611],{"class":27,"line":28},[25,161608,161377],{"class":244},[25,161610,290],{"class":240},[25,161612,152243],{"class":35},[25,161614,161615],{"class":27,"line":39},[25,161616,2510],{"emptyLinePlaceholder":167},[25,161618,161619,161621,161624,161626,161628],{"class":27,"line":51},[25,161620,1642],{"class":240},[25,161622,161623],{"class":244}," result ",[25,161625,38998],{"class":240},[25,161627,39004],{"class":35},[25,161629,3849],{"class":244},[25,161631,161632,161634,161636,161639],{"class":27,"line":59},[25,161633,31370],{"class":35},[25,161635,245],{"class":244},[25,161637,161638],{"class":45},"\"没有数据\"",[25,161640,251],{"class":244},[99,161642,161643,161644,161646,161647,161650,161651,28456],{},"判断 ",[22,161645,95757],{}," 推荐使用 ",[22,161648,161649],{},"is None","，不要写成 ",[22,161652,161653],{},"== None",[182,161655,161657],{"id":161656},"_58-函数文档字符串","5.8 函数文档字符串",[99,161659,161660],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[15,161662,161664],{"className":30449,"code":161663,"language":30451,"meta":20,"style":20},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[22,161665,161666,161676,161681],{"__ignoreMap":20},[25,161667,161668,161670,161673],{"class":27,"line":28},[25,161669,32018],{"class":240},[25,161671,161672],{"class":31}," calculate_bmi",[25,161674,161675],{"class":244},"(weight, height):\n",[25,161677,161678],{"class":27,"line":39},[25,161679,161680],{"class":45},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[25,161682,161683,161685,161688,161690,161693,161695],{"class":27,"line":51},[25,161684,4200],{"class":240},[25,161686,161687],{"class":244}," weight ",[25,161689,827],{"class":240},[25,161691,161692],{"class":244}," height ",[25,161694,10771],{"class":240},[25,161696,47794],{"class":35},[99,161698,161699],{},"查看说明：",[15,161701,161703],{"className":30449,"code":161702,"language":30451,"meta":20,"style":20},"help(calculate_bmi)\n",[22,161704,161705],{"__ignoreMap":20},[25,161706,161707,161710],{"class":27,"line":28},[25,161708,161709],{"class":35},"help",[25,161711,161712],{"class":244},"(calculate_bmi)\n",[99,161714,161715],{},"较完整的写法：",[15,161717,161719],{"className":30449,"code":161718,"language":30451,"meta":20,"style":20},"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",[22,161720,161721,161729,161734,161739,161743,161748,161753,161758,161762],{"__ignoreMap":20},[25,161722,161723,161725,161727],{"class":27,"line":28},[25,161724,32018],{"class":240},[25,161726,161672],{"class":31},[25,161728,161675],{"class":244},[25,161730,161731],{"class":27,"line":39},[25,161732,161733],{"class":45},"    \"\"\"\n",[25,161735,161736],{"class":27,"line":51},[25,161737,161738],{"class":45},"    计算BMI。\n",[25,161740,161741],{"class":27,"line":59},[25,161742,2510],{"emptyLinePlaceholder":167},[25,161744,161745],{"class":27,"line":67},[25,161746,161747],{"class":45},"    :param weight: 体重，单位kg\n",[25,161749,161750],{"class":27,"line":75},[25,161751,161752],{"class":45},"    :param height: 身高，单位m\n",[25,161754,161755],{"class":27,"line":83},[25,161756,161757],{"class":45},"    :return: BMI数值\n",[25,161759,161760],{"class":27,"line":91},[25,161761,161733],{"class":45},[25,161763,161764,161766,161768,161770,161772,161774],{"class":27,"line":1429},[25,161765,4200],{"class":240},[25,161767,161687],{"class":244},[25,161769,827],{"class":240},[25,161771,161692],{"class":244},[25,161773,10771],{"class":240},[25,161775,47794],{"class":35},[182,161777,161779],{"id":161778},"_59-变量作用域","5.9 变量作用域",[210,161781,161783],{"id":161782},"_591-局部变量","5.9.1 局部变量",[99,161785,161786],{},"在函数内部定义的变量，只能在函数内部使用。",[15,161788,161790],{"className":30449,"code":161789,"language":30451,"meta":20,"style":20},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[22,161791,161792,161801,161809,161815,161819,161823,161828],{"__ignoreMap":20},[25,161793,161794,161796,161799],{"class":27,"line":28},[25,161795,32018],{"class":240},[25,161797,161798],{"class":31}," test",[25,161800,32024],{"class":244},[25,161802,161803,161805,161807],{"class":27,"line":39},[25,161804,45664],{"class":244},[25,161806,290],{"class":240},[25,161808,58499],{"class":35},[25,161810,161811,161813],{"class":27,"line":51},[25,161812,31370],{"class":35},[25,161814,258],{"class":244},[25,161816,161817],{"class":27,"line":59},[25,161818,2510],{"emptyLinePlaceholder":167},[25,161820,161821],{"class":27,"line":67},[25,161822,2510],{"emptyLinePlaceholder":167},[25,161824,161825],{"class":27,"line":75},[25,161826,161827],{"class":244},"test()\n",[25,161829,161830,161832,161835],{"class":27,"line":83},[25,161831,30486],{"class":35},[25,161833,161834],{"class":244},"(num)  ",[25,161836,161837],{"class":302},"# 报错\n",[210,161839,161841],{"id":161840},"_592-全局变量","5.9.2 全局变量",[99,161843,161844],{},"在函数外部定义的变量，可以在函数内部读取。",[15,161846,161848],{"className":30449,"code":161847,"language":30451,"meta":20,"style":20},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[22,161849,161850,161858,161862,161866,161874,161880,161884,161888],{"__ignoreMap":20},[25,161851,161852,161854,161856],{"class":27,"line":28},[25,161853,146607],{"class":244},[25,161855,290],{"class":240},[25,161857,149424],{"class":45},[25,161859,161860],{"class":27,"line":39},[25,161861,2510],{"emptyLinePlaceholder":167},[25,161863,161864],{"class":27,"line":51},[25,161865,2510],{"emptyLinePlaceholder":167},[25,161867,161868,161870,161872],{"class":27,"line":59},[25,161869,32018],{"class":240},[25,161871,161067],{"class":31},[25,161873,32024],{"class":244},[25,161875,161876,161878],{"class":27,"line":67},[25,161877,31370],{"class":35},[25,161879,150731],{"class":244},[25,161881,161882],{"class":27,"line":75},[25,161883,2510],{"emptyLinePlaceholder":167},[25,161885,161886],{"class":27,"line":83},[25,161887,2510],{"emptyLinePlaceholder":167},[25,161889,161890],{"class":27,"line":91},[25,161891,161102],{"class":244},[99,161893,161894,161895,28456],{},"如果要在函数内部修改全局变量，需要 ",[22,161896,161897],{},"global",[15,161899,161901],{"className":30449,"code":161900,"language":30451,"meta":20,"style":20},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[22,161902,161903,161911,161915,161919,161928,161936,161944,161948,161952,161957],{"__ignoreMap":20},[25,161904,161905,161907,161909],{"class":27,"line":28},[25,161906,146762],{"class":244},[25,161908,290],{"class":240},[25,161910,47404],{"class":35},[25,161912,161913],{"class":27,"line":39},[25,161914,2510],{"emptyLinePlaceholder":167},[25,161916,161917],{"class":27,"line":51},[25,161918,2510],{"emptyLinePlaceholder":167},[25,161920,161921,161923,161926],{"class":27,"line":59},[25,161922,32018],{"class":240},[25,161924,161925],{"class":31}," add_count",[25,161927,32024],{"class":244},[25,161929,161930,161933],{"class":27,"line":67},[25,161931,161932],{"class":240},"    global",[25,161934,161935],{"class":244}," count\n",[25,161937,161938,161940,161942],{"class":27,"line":75},[25,161939,159504],{"class":244},[25,161941,9587],{"class":240},[25,161943,55770],{"class":35},[25,161945,161946],{"class":27,"line":83},[25,161947,2510],{"emptyLinePlaceholder":167},[25,161949,161950],{"class":27,"line":91},[25,161951,2510],{"emptyLinePlaceholder":167},[25,161953,161954],{"class":27,"line":1429},[25,161955,161956],{"class":244},"add_count()\n",[25,161958,161959,161961],{"class":27,"line":1441},[25,161960,30486],{"class":35},[25,161962,161963],{"class":244},"(count)\n",[99,161965,161966],{},"不建议大量使用全局变量，项目变大后很难维护。",[182,161968,161970],{"id":161969},"_510-函数嵌套调用","5.10 函数嵌套调用",[99,161972,161973],{},"一个函数中可以调用另一个函数。",[15,161975,161977],{"className":30449,"code":161976,"language":30451,"meta":20,"style":20},"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",[22,161978,161979,161988,162002,162006,162010,162019,162024,162044,162065,162069,162073,162077],{"__ignoreMap":20},[25,161980,161981,161983,161986],{"class":27,"line":28},[25,161982,32018],{"class":240},[25,161984,161985],{"class":31}," print_line",[25,161987,32024],{"class":244},[25,161989,161990,161992,161994,161996,161998,162000],{"class":27,"line":39},[25,161991,31370],{"class":35},[25,161993,245],{"class":244},[25,161995,32554],{"class":45},[25,161997,6628],{"class":240},[25,161999,78736],{"class":35},[25,162001,251],{"class":244},[25,162003,162004],{"class":27,"line":51},[25,162005,2510],{"emptyLinePlaceholder":167},[25,162007,162008],{"class":27,"line":59},[25,162009,2510],{"emptyLinePlaceholder":167},[25,162011,162012,162014,162017],{"class":27,"line":67},[25,162013,32018],{"class":240},[25,162015,162016],{"class":31}," print_info",[25,162018,149446],{"class":244},[25,162020,162021],{"class":27,"line":75},[25,162022,162023],{"class":244},"    print_line()\n",[25,162025,162026,162028,162030,162032,162034,162036,162038,162040,162042],{"class":27,"line":83},[25,162027,31370],{"class":35},[25,162029,245],{"class":244},[25,162031,296],{"class":240},[25,162033,156753],{"class":45},[25,162035,1139],{"class":35},[25,162037,79881],{"class":244},[25,162039,1189],{"class":35},[25,162041,494],{"class":45},[25,162043,251],{"class":244},[25,162045,162046,162048,162050,162052,162055,162057,162059,162061,162063],{"class":27,"line":91},[25,162047,31370],{"class":35},[25,162049,245],{"class":244},[25,162051,296],{"class":240},[25,162053,162054],{"class":45},"\"年龄:",[25,162056,1139],{"class":35},[25,162058,70292],{"class":244},[25,162060,1189],{"class":35},[25,162062,494],{"class":45},[25,162064,251],{"class":244},[25,162066,162067],{"class":27,"line":1429},[25,162068,162023],{"class":244},[25,162070,162071],{"class":27,"line":1441},[25,162072,2510],{"emptyLinePlaceholder":167},[25,162074,162075],{"class":27,"line":1723},[25,162076,2510],{"emptyLinePlaceholder":167},[25,162078,162079,162082,162084,162086,162088],{"class":27,"line":1728},[25,162080,162081],{"class":244},"print_info(",[25,162083,149959],{"class":45},[25,162085,12545],{"class":244},[25,162087,893],{"class":35},[25,162089,251],{"class":244},[99,162091,162092],{},"这种方式可以把小功能组合成大功能。",[182,162094,162096],{"id":162095},"_511-参数检查","5.11 参数检查",[99,162098,162099],{},"函数内部可以检查参数是否合法。",[15,162101,162103],{"className":30449,"code":162102,"language":30451,"meta":20,"style":20},"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",[22,162104,162105,162114,162126,162132,162142,162146,162150,162167,162171,162183,162194,162200],{"__ignoreMap":20},[25,162106,162107,162109,162112],{"class":27,"line":28},[25,162108,32018],{"class":240},[25,162110,162111],{"class":31}," divide",[25,162113,151164],{"class":244},[25,162115,162116,162118,162120,162122,162124],{"class":27,"line":39},[25,162117,3211],{"class":240},[25,162119,10992],{"class":244},[25,162121,3059],{"class":240},[25,162123,4203],{"class":35},[25,162125,3849],{"class":244},[25,162127,162128,162130],{"class":27,"line":51},[25,162129,14862],{"class":240},[25,162131,152243],{"class":35},[25,162133,162134,162136,162138,162140],{"class":27,"line":59},[25,162135,4200],{"class":240},[25,162137,10979],{"class":244},[25,162139,827],{"class":240},[25,162141,151175],{"class":244},[25,162143,162144],{"class":27,"line":67},[25,162145,2510],{"emptyLinePlaceholder":167},[25,162147,162148],{"class":27,"line":75},[25,162149,2510],{"emptyLinePlaceholder":167},[25,162151,162152,162154,162156,162159,162161,162163,162165],{"class":27,"line":83},[25,162153,161377],{"class":244},[25,162155,290],{"class":240},[25,162157,162158],{"class":244}," divide(",[25,162160,689],{"class":35},[25,162162,12545],{"class":244},[25,162164,434],{"class":35},[25,162166,251],{"class":244},[25,162168,162169],{"class":27,"line":91},[25,162170,2510],{"emptyLinePlaceholder":167},[25,162172,162173,162175,162177,162179,162181],{"class":27,"line":1429},[25,162174,1642],{"class":240},[25,162176,161623],{"class":244},[25,162178,38998],{"class":240},[25,162180,39004],{"class":35},[25,162182,3849],{"class":244},[25,162184,162185,162187,162189,162192],{"class":27,"line":1441},[25,162186,31370],{"class":35},[25,162188,245],{"class":244},[25,162190,162191],{"class":45},"\"除数不能为0\"",[25,162193,251],{"class":244},[25,162195,162196,162198],{"class":27,"line":1723},[25,162197,1812],{"class":240},[25,162199,3849],{"class":244},[25,162201,162202,162204],{"class":27,"line":1728},[25,162203,31370],{"class":35},[25,162205,76656],{"class":244},[182,162207,162209],{"id":162208},"_512-类型提示","5.12 类型提示",[99,162211,162212],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[15,162214,162216],{"className":30449,"code":162215,"language":30451,"meta":20,"style":20},"def add(a: int, b: int) -> int:\n    return a + b\n",[22,162217,162218,162241],{"__ignoreMap":20},[25,162219,162220,162222,162224,162227,162229,162232,162234,162237,162239],{"class":27,"line":28},[25,162221,32018],{"class":240},[25,162223,5319],{"class":31},[25,162225,162226],{"class":244},"(a: ",[25,162228,248],{"class":35},[25,162230,162231],{"class":244},", b: ",[25,162233,248],{"class":35},[25,162235,162236],{"class":244},") -> ",[25,162238,248],{"class":35},[25,162240,3849],{"class":244},[25,162242,162243,162245,162247,162249],{"class":27,"line":39},[25,162244,4200],{"class":240},[25,162246,10979],{"class":244},[25,162248,724],{"class":240},[25,162250,151175],{"class":244},[99,162252,162253],{},"字符串参数：",[15,162255,162257],{"className":30449,"code":162256,"language":30451,"meta":20,"style":20},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[22,162258,162259,162276],{"__ignoreMap":20},[25,162260,162261,162263,162265,162268,162270,162272,162274],{"class":27,"line":28},[25,162262,32018],{"class":240},[25,162264,161067],{"class":31},[25,162266,162267],{"class":244},"(name: ",[25,162269,1412],{"class":35},[25,162271,162236],{"class":244},[25,162273,95757],{"class":35},[25,162275,3849],{"class":244},[25,162277,162278,162280,162282,162284,162286,162288,162290,162292,162294],{"class":27,"line":39},[25,162279,31370],{"class":35},[25,162281,245],{"class":244},[25,162283,296],{"class":240},[25,162285,157125],{"class":45},[25,162287,1139],{"class":35},[25,162289,79881],{"class":244},[25,162291,1189],{"class":35},[25,162293,494],{"class":45},[25,162295,251],{"class":244},[99,162297,162298],{},"列表参数：",[15,162300,162302],{"className":30449,"code":162301,"language":30451,"meta":20,"style":20},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[22,162303,162304,162323,162331,162343,162352],{"__ignoreMap":20},[25,162305,162306,162308,162311,162314,162316,162319,162321],{"class":27,"line":28},[25,162307,32018],{"class":240},[25,162309,162310],{"class":31}," get_total",[25,162312,162313],{"class":244},"(numbers: list[",[25,162315,248],{"class":35},[25,162317,162318],{"class":244},"]) -> ",[25,162320,248],{"class":35},[25,162322,3849],{"class":244},[25,162324,162325,162327,162329],{"class":27,"line":39},[25,162326,159378],{"class":244},[25,162328,290],{"class":240},[25,162330,47404],{"class":35},[25,162332,162333,162335,162338,162340],{"class":27,"line":51},[25,162334,3311],{"class":240},[25,162336,162337],{"class":244}," number ",[25,162339,26114],{"class":240},[25,162341,162342],{"class":244}," numbers:\n",[25,162344,162345,162347,162349],{"class":27,"line":59},[25,162346,160053],{"class":244},[25,162348,9587],{"class":240},[25,162350,162351],{"class":244}," number\n",[25,162353,162354,162356],{"class":27,"line":67},[25,162355,4200],{"class":240},[25,162357,162358],{"class":244}," total\n",[99,162360,162361],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[182,162363,162365],{"id":162364},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[15,162367,162369],{"className":30449,"code":162368,"language":30451,"meta":20,"style":20},"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",[22,162370,162371,162381,162385,162389,162397,162408,162418,162428,162438,162448,162452,162456,162465,162487,162491,162495,162504,162510,162530,162542,162553,162557,162566,162577,162582,162586,162590,162599,162605,162624,162636,162646,162650,162661,162671,162675,162683,162694,162698,162702,162706,162714,162719,162733,162737,162749,162754,162766,162771,162783,162788,162800,162810,162814,162820],{"__ignoreMap":20},[25,162372,162373,162376,162378],{"class":27,"line":28},[25,162374,162375],{"class":244},"balance ",[25,162377,290],{"class":240},[25,162379,162380],{"class":35}," 1000\n",[25,162382,162383],{"class":27,"line":39},[25,162384,2510],{"emptyLinePlaceholder":167},[25,162386,162387],{"class":27,"line":51},[25,162388,2510],{"emptyLinePlaceholder":167},[25,162390,162391,162393,162395],{"class":27,"line":59},[25,162392,32018],{"class":240},[25,162394,152104],{"class":31},[25,162396,32024],{"class":244},[25,162398,162399,162401,162403,162406],{"class":27,"line":67},[25,162400,31370],{"class":35},[25,162402,245],{"class":244},[25,162404,162405],{"class":45},"\"====== ATM ======\"",[25,162407,251],{"class":244},[25,162409,162410,162412,162414,162416],{"class":27,"line":75},[25,162411,31370],{"class":35},[25,162413,245],{"class":244},[25,162415,160719],{"class":45},[25,162417,251],{"class":244},[25,162419,162420,162422,162424,162426],{"class":27,"line":83},[25,162421,31370],{"class":35},[25,162423,245],{"class":244},[25,162425,160730],{"class":45},[25,162427,251],{"class":244},[25,162429,162430,162432,162434,162436],{"class":27,"line":91},[25,162431,31370],{"class":35},[25,162433,245],{"class":244},[25,162435,160741],{"class":45},[25,162437,251],{"class":244},[25,162439,162440,162442,162444,162446],{"class":27,"line":1429},[25,162441,31370],{"class":35},[25,162443,245],{"class":244},[25,162445,160752],{"class":45},[25,162447,251],{"class":244},[25,162449,162450],{"class":27,"line":1441},[25,162451,2510],{"emptyLinePlaceholder":167},[25,162453,162454],{"class":27,"line":1723},[25,162455,2510],{"emptyLinePlaceholder":167},[25,162457,162458,162460,162463],{"class":27,"line":1728},[25,162459,32018],{"class":240},[25,162461,162462],{"class":31}," show_balance",[25,162464,32024],{"class":244},[25,162466,162467,162469,162471,162473,162476,162478,162481,162483,162485],{"class":27,"line":1734},[25,162468,31370],{"class":35},[25,162470,245],{"class":244},[25,162472,296],{"class":240},[25,162474,162475],{"class":45},"\"当前余额:",[25,162477,1139],{"class":35},[25,162479,162480],{"class":244},"balance",[25,162482,1189],{"class":35},[25,162484,157083],{"class":45},[25,162486,251],{"class":244},[25,162488,162489],{"class":27,"line":1739},[25,162490,2510],{"emptyLinePlaceholder":167},[25,162492,162493],{"class":27,"line":1753},[25,162494,2510],{"emptyLinePlaceholder":167},[25,162496,162497,162499,162502],{"class":27,"line":1758},[25,162498,32018],{"class":240},[25,162500,162501],{"class":31}," save_money",[25,162503,32024],{"class":244},[25,162505,162506,162508],{"class":27,"line":1764},[25,162507,161932],{"class":240},[25,162509,150170],{"class":244},[25,162511,162512,162515,162517,162519,162521,162523,162525,162528],{"class":27,"line":1785},[25,162513,162514],{"class":244},"    money ",[25,162516,290],{"class":240},[25,162518,109868],{"class":35},[25,162520,245],{"class":244},[25,162522,53892],{"class":35},[25,162524,245],{"class":244},[25,162526,162527],{"class":45},"\"请输入存款金额:\"",[25,162529,30568],{"class":244},[25,162531,162532,162534,162536,162538,162540],{"class":27,"line":1790},[25,162533,3211],{"class":240},[25,162535,150213],{"class":244},[25,162537,1699],{"class":240},[25,162539,4203],{"class":35},[25,162541,3849],{"class":244},[25,162543,162544,162546,162548,162551],{"class":27,"line":1804},[25,162545,32522],{"class":35},[25,162547,245],{"class":244},[25,162549,162550],{"class":45},"\"金额必须大于0\"",[25,162552,251],{"class":244},[25,162554,162555],{"class":27,"line":1809},[25,162556,152432],{"class":240},[25,162558,162559,162562,162564],{"class":27,"line":1838},[25,162560,162561],{"class":244},"    balance ",[25,162563,9587],{"class":240},[25,162565,150246],{"class":244},[25,162567,162568,162570,162572,162575],{"class":27,"line":1843},[25,162569,31370],{"class":35},[25,162571,245],{"class":244},[25,162573,162574],{"class":45},"\"存款成功\"",[25,162576,251],{"class":244},[25,162578,162579],{"class":27,"line":1860},[25,162580,162581],{"class":244},"    show_balance()\n",[25,162583,162584],{"class":27,"line":1865},[25,162585,2510],{"emptyLinePlaceholder":167},[25,162587,162588],{"class":27,"line":1870},[25,162589,2510],{"emptyLinePlaceholder":167},[25,162591,162592,162594,162597],{"class":27,"line":1875},[25,162593,32018],{"class":240},[25,162595,162596],{"class":31}," withdraw_money",[25,162598,32024],{"class":244},[25,162600,162601,162603],{"class":27,"line":1889},[25,162602,161932],{"class":240},[25,162604,150170],{"class":244},[25,162606,162607,162609,162611,162613,162615,162617,162619,162622],{"class":27,"line":1894},[25,162608,162514],{"class":244},[25,162610,290],{"class":240},[25,162612,109868],{"class":35},[25,162614,245],{"class":244},[25,162616,53892],{"class":35},[25,162618,245],{"class":244},[25,162620,162621],{"class":45},"\"请输入取款金额:\"",[25,162623,30568],{"class":244},[25,162625,162626,162628,162630,162632,162634],{"class":27,"line":2687},[25,162627,3211],{"class":240},[25,162629,150213],{"class":244},[25,162631,1699],{"class":240},[25,162633,4203],{"class":35},[25,162635,3849],{"class":244},[25,162637,162638,162640,162642,162644],{"class":27,"line":2701},[25,162639,32522],{"class":35},[25,162641,245],{"class":244},[25,162643,162550],{"class":45},[25,162645,251],{"class":244},[25,162647,162648],{"class":27,"line":2709},[25,162649,152432],{"class":240},[25,162651,162652,162654,162656,162658],{"class":27,"line":2714},[25,162653,3211],{"class":240},[25,162655,150213],{"class":244},[25,162657,1203],{"class":240},[25,162659,162660],{"class":244}," balance:\n",[25,162662,162663,162665,162667,162669],{"class":27,"line":2720},[25,162664,32522],{"class":35},[25,162666,245],{"class":244},[25,162668,150308],{"class":45},[25,162670,251],{"class":244},[25,162672,162673],{"class":27,"line":2726},[25,162674,152432],{"class":240},[25,162676,162677,162679,162681],{"class":27,"line":2731},[25,162678,162561],{"class":244},[25,162680,150323],{"class":240},[25,162682,150246],{"class":244},[25,162684,162685,162687,162689,162692],{"class":27,"line":8058},[25,162686,31370],{"class":35},[25,162688,245],{"class":244},[25,162690,162691],{"class":45},"\"取款成功\"",[25,162693,251],{"class":244},[25,162695,162696],{"class":27,"line":8082},[25,162697,162581],{"class":244},[25,162699,162700],{"class":27,"line":8087},[25,162701,2510],{"emptyLinePlaceholder":167},[25,162703,162704],{"class":27,"line":8093},[25,162705,2510],{"emptyLinePlaceholder":167},[25,162707,162708,162710,162712],{"class":27,"line":8120},[25,162709,108734],{"class":240},[25,162711,95363],{"class":35},[25,162713,3849],{"class":244},[25,162715,162716],{"class":27,"line":8125},[25,162717,162718],{"class":244},"    show_menu()\n",[25,162720,162721,162723,162725,162727,162729,162731],{"class":27,"line":8131},[25,162722,160763],{"class":244},[25,162724,290],{"class":240},[25,162726,60676],{"class":35},[25,162728,245],{"class":244},[25,162730,153144],{"class":45},[25,162732,251],{"class":244},[25,162734,162735],{"class":27,"line":8143},[25,162736,2510],{"emptyLinePlaceholder":167},[25,162738,162739,162741,162743,162745,162747],{"class":27,"line":8155},[25,162740,3211],{"class":240},[25,162742,153157],{"class":244},[25,162744,3059],{"class":240},[25,162746,153162],{"class":45},[25,162748,3849],{"class":244},[25,162750,162751],{"class":27,"line":8167},[25,162752,162753],{"class":244},"        show_balance()\n",[25,162755,162756,162758,162760,162762,162764],{"class":27,"line":9826},[25,162757,39364],{"class":240},[25,162759,153157],{"class":244},[25,162761,3059],{"class":240},[25,162763,153181],{"class":45},[25,162765,3849],{"class":244},[25,162767,162768],{"class":27,"line":9851},[25,162769,162770],{"class":244},"        save_money()\n",[25,162772,162773,162775,162777,162779,162781],{"class":27,"line":9874},[25,162774,39364],{"class":240},[25,162776,153157],{"class":244},[25,162778,3059],{"class":240},[25,162780,153199],{"class":45},[25,162782,3849],{"class":244},[25,162784,162785],{"class":27,"line":9898},[25,162786,162787],{"class":244},"        withdraw_money()\n",[25,162789,162790,162792,162794,162796,162798],{"class":27,"line":9903},[25,162791,39364],{"class":240},[25,162793,153157],{"class":244},[25,162795,3059],{"class":240},[25,162797,153253],{"class":45},[25,162799,3849],{"class":244},[25,162801,162802,162804,162806,162808],{"class":27,"line":9908},[25,162803,32522],{"class":35},[25,162805,245],{"class":244},[25,162807,153264],{"class":45},[25,162809,251],{"class":244},[25,162811,162812],{"class":27,"line":9913},[25,162813,31698],{"class":240},[25,162815,162816,162818],{"class":27,"line":9922},[25,162817,158093],{"class":240},[25,162819,3849],{"class":244},[25,162821,162822,162824,162826,162828],{"class":27,"line":9927},[25,162823,32522],{"class":35},[25,162825,245],{"class":244},[25,162827,153285],{"class":45},[25,162829,251],{"class":244},[99,162831,162832],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[182,162834,162836],{"id":162835},"_514-易错点","5.14 易错点",[194,162838,162839,162842,162845,162850,162855,162858],{},[106,162840,162841],{},"函数定义后必须调用才会执行。",[106,162843,162844],{},"函数名后面有括号才是调用。",[106,162846,162847,162849],{},[22,162848,17156],{}," 后面的代码不会执行。",[106,162851,162852,162853,28456],{},"没有返回值的函数默认返回 ",[22,162854,95757],{},[106,162856,162857],{},"局部变量不能在函数外部访问。",[106,162859,162860,162861,162863],{},"不要滥用 ",[22,162862,161897],{},"，更好的方式是让函数返回新值。",[99,162865,162866,162867,162869],{},"例如不用 ",[22,162868,161897],{}," 改写存款：",[15,162871,162873],{"className":30449,"code":162872,"language":30451,"meta":20,"style":20},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[22,162874,162875,162884,162895,162899,162903,162911,162924],{"__ignoreMap":20},[25,162876,162877,162879,162881],{"class":27,"line":28},[25,162878,32018],{"class":240},[25,162880,162501],{"class":31},[25,162882,162883],{"class":244},"(balance, money):\n",[25,162885,162886,162888,162891,162893],{"class":27,"line":39},[25,162887,4200],{"class":240},[25,162889,162890],{"class":244}," balance ",[25,162892,724],{"class":240},[25,162894,150246],{"class":244},[25,162896,162897],{"class":27,"line":51},[25,162898,2510],{"emptyLinePlaceholder":167},[25,162900,162901],{"class":27,"line":59},[25,162902,2510],{"emptyLinePlaceholder":167},[25,162904,162905,162907,162909],{"class":27,"line":67},[25,162906,162375],{"class":244},[25,162908,290],{"class":240},[25,162910,162380],{"class":35},[25,162912,162913,162915,162917,162920,162922],{"class":27,"line":75},[25,162914,162375],{"class":244},[25,162916,290],{"class":240},[25,162918,162919],{"class":244}," save_money(balance, ",[25,162921,1833],{"class":35},[25,162923,251],{"class":244},[25,162925,162926,162928],{"class":27,"line":83},[25,162927,30486],{"class":35},[25,162929,162930],{"class":244},"(balance)\n",[182,162932,162934],{"id":162933},"_515-本章练习","5.15 本章练习",[194,162936,162937,162944,162950,162956,162962],{},[106,162938,162939,162940,162943],{},"定义函数 ",[22,162941,162942],{},"print_student(name, age)","，输出学生信息。",[106,162945,162939,162946,162949],{},[22,162947,162948],{},"get_max(a, b, c)","，返回三个数中的最大值。",[106,162951,162939,162952,162955],{},[22,162953,162954],{},"is_even(num)","，判断一个数是否为偶数。",[106,162957,162939,162958,162961],{},[22,162959,162960],{},"calculate_bmi(weight, height)","，返回 BMI。",[106,162963,162964],{},"把第 4 章的菜单程序拆分成多个函数。",[159,162966,162967],{},"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":20,"searchDepth":39,"depth":39,"links":162969},[162970,162971,162972,162973,162974,162975,162976,162977,162978,162982,162983,162984,162985,162986,162987],{"id":160990,"depth":39,"text":160991},{"id":161031,"depth":39,"text":161032},{"id":161121,"depth":39,"text":161122},{"id":161202,"depth":39,"text":161203},{"id":161335,"depth":39,"text":161336},{"id":161457,"depth":39,"text":161458},{"id":161579,"depth":39,"text":161580},{"id":161656,"depth":39,"text":161657},{"id":161778,"depth":39,"text":161779,"children":162979},[162980,162981],{"id":161782,"depth":51,"text":161783},{"id":161840,"depth":51,"text":161841},{"id":161969,"depth":39,"text":161970},{"id":162095,"depth":39,"text":162096},{"id":162208,"depth":39,"text":162209},{"id":162364,"depth":39,"text":162365},{"id":162835,"depth":39,"text":162836},{"id":162933,"depth":39,"text":162934},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160982,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162994,"title":162995,"body":162996,"description":164,"extension":165,"meta":166040,"navigation":167,"path":166041,"seo":166042,"stem":166043,"__hash__":166044},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162997,"toc":166021},[162998,163001,163005,163008,163011,163115,163118,163122,163125,163205,163208,163212,163215,163275,163278,163314,163317,163332,163336,163409,163412,163467,163470,163540,163543,163627,163637,163695,163699,163744,163747,163773,163776,163882,163886,163889,163931,163934,163998,164001,164005,164008,164069,164072,164102,164105,164143,164147,164150,164159,164162,164286,164289,164330,164334,164337,164348,164388,164391,164406,164411,164414,164481,164484,164574,164578,164581,164629,164632,164659,164661,164691,164694,164714,164717,164748,164751,164784,164788,164791,164815,164818,164842,164845,164869,164873,164876,165006,165009,165089,165092,165167,165171,165174,165224,165227,165269,165272,165296,165298,165322,165325,165380,165383,165449,165453,165456,165459,165497,165500,165553,165556,165602,165605,165638,165641,165645,165964,165968,165997,166001,166018],[10,162999,162995],{"id":163000},"_6-数据容器",[182,163002,163004],{"id":163003},"_61-什么是数据容器","6.1 什么是数据容器",[99,163006,163007],{},"数据容器用于一次保存多个数据。",[99,163009,163010],{},"常见容器：",[380,163012,163013,163030],{},[383,163014,163015],{},[386,163016,163017,163019,163022,163025,163028],{},[389,163018,25842],{},[389,163020,163021],{},"是否有序",[389,163023,163024],{},"是否可变",[389,163026,163027],{},"是否允许重复",[389,163029,27563],{},[427,163031,163032,163050,163066,163081,163098],{},[386,163033,163034,163037,163040,163043,163046],{},[432,163035,163036],{},"list列表",[432,163038,163039],{},"有序",[432,163041,163042],{},"可变",[432,163044,163045],{},"允许",[432,163047,163048],{},[22,163049,155328],{},[386,163051,163052,163055,163057,163060,163062],{},[432,163053,163054],{},"tuple元组",[432,163056,163039],{},[432,163058,163059],{},"不可变",[432,163061,163045],{},[432,163063,163064],{},[22,163065,155341],{},[386,163067,163068,163071,163073,163075,163077],{},[432,163069,163070],{},"str字符串",[432,163072,163039],{},[432,163074,163059],{},[432,163076,163045],{},[432,163078,163079],{},[22,163080,155951],{},[386,163082,163083,163086,163089,163091,163094],{},[432,163084,163085],{},"set集合",[432,163087,163088],{},"无序",[432,163090,163042],{},[432,163092,163093],{},"不允许",[432,163095,163096],{},[22,163097,155366],{},[386,163099,163100,163103,163105,163107,163110],{},[432,163101,163102],{},"dict字典",[432,163104,163039],{},[432,163106,163042],{},[432,163108,163109],{},"key不允许重复",[432,163111,163112],{},[22,163113,163114],{},"{\"name\": \"小明\"}",[99,163116,163117],{},"Python 3.7 之后，字典保持插入顺序。",[182,163119,163121],{"id":163120},"_62-列表list","6.2 列表list",[99,163123,163124],{},"列表用于保存一组有顺序的数据。",[15,163126,163128],{"className":30449,"code":163127,"language":30451,"meta":20,"style":20},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[22,163129,163130,163150,163175,163196],{"__ignoreMap":20},[25,163131,163132,163134,163136,163138,163140,163142,163144,163146,163148],{"class":27,"line":28},[25,163133,160451],{"class":244},[25,163135,290],{"class":240},[25,163137,52297],{"class":244},[25,163139,149959],{"class":45},[25,163141,12545],{"class":244},[25,163143,151007],{"class":45},[25,163145,12545],{"class":244},[25,163147,159802],{"class":45},[25,163149,33317],{"class":244},[25,163151,163152,163155,163157,163159,163161,163163,163165,163167,163169,163171,163173],{"class":27,"line":39},[25,163153,163154],{"class":244},"numbers ",[25,163156,290],{"class":240},[25,163158,52297],{"class":244},[25,163160,460],{"class":35},[25,163162,12545],{"class":244},[25,163164,321],{"class":35},[25,163166,12545],{"class":244},[25,163168,315],{"class":35},[25,163170,12545],{"class":244},[25,163172,536],{"class":35},[25,163174,33317],{"class":244},[25,163176,163177,163180,163182,163184,163186,163188,163190,163192,163194],{"class":27,"line":51},[25,163178,163179],{"class":244},"mixed ",[25,163181,290],{"class":240},[25,163183,52297],{"class":244},[25,163185,149959],{"class":45},[25,163187,12545],{"class":244},[25,163189,893],{"class":35},[25,163191,12545],{"class":244},[25,163193,31547],{"class":35},[25,163195,33317],{"class":244},[25,163197,163198,163201,163203],{"class":27,"line":59},[25,163199,163200],{"class":244},"empty ",[25,163202,290],{"class":240},[25,163204,51909],{"class":244},[99,163206,163207],{},"推荐一个列表中保存同类数据，代码更清晰。",[182,163209,163211],{"id":163210},"_63-列表索引","6.3 列表索引",[99,163213,163214],{},"正向索引从 0 开始：",[15,163216,163218],{"className":30449,"code":163217,"language":30451,"meta":20,"style":20},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[22,163219,163220,163240,163244,163255,163265],{"__ignoreMap":20},[25,163221,163222,163224,163226,163228,163230,163232,163234,163236,163238],{"class":27,"line":28},[25,163223,160451],{"class":244},[25,163225,290],{"class":240},[25,163227,52297],{"class":244},[25,163229,149959],{"class":45},[25,163231,12545],{"class":244},[25,163233,151007],{"class":45},[25,163235,12545],{"class":244},[25,163237,159802],{"class":45},[25,163239,33317],{"class":244},[25,163241,163242],{"class":27,"line":39},[25,163243,2510],{"emptyLinePlaceholder":167},[25,163245,163246,163248,163251,163253],{"class":27,"line":51},[25,163247,30486],{"class":35},[25,163249,163250],{"class":244},"(names[",[25,163252,434],{"class":35},[25,163254,4767],{"class":244},[25,163256,163257,163259,163261,163263],{"class":27,"line":59},[25,163258,30486],{"class":35},[25,163260,163250],{"class":244},[25,163262,460],{"class":35},[25,163264,4767],{"class":244},[25,163266,163267,163269,163271,163273],{"class":27,"line":67},[25,163268,30486],{"class":35},[25,163270,163250],{"class":244},[25,163272,321],{"class":35},[25,163274,4767],{"class":244},[99,163276,163277],{},"反向索引从 -1 开始：",[15,163279,163281],{"className":30449,"code":163280,"language":30451,"meta":20,"style":20},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[22,163282,163283,163299],{"__ignoreMap":20},[25,163284,163285,163287,163289,163291,163293,163296],{"class":27,"line":28},[25,163286,30486],{"class":35},[25,163288,163250],{"class":244},[25,163290,775],{"class":240},[25,163292,460],{"class":35},[25,163294,163295],{"class":244},"])  ",[25,163297,163298],{"class":302},"# 小刚\n",[25,163300,163301,163303,163305,163307,163309,163311],{"class":27,"line":39},[25,163302,30486],{"class":35},[25,163304,163250],{"class":244},[25,163306,775],{"class":240},[25,163308,321],{"class":35},[25,163310,163295],{"class":244},[25,163312,163313],{"class":302},"# 小红\n",[99,163315,163316],{},"索引越界会报错：",[15,163318,163320],{"className":30449,"code":163319,"language":30451,"meta":20,"style":20},"print(names[3])\n",[22,163321,163322],{"__ignoreMap":20},[25,163323,163324,163326,163328,163330],{"class":27,"line":28},[25,163325,30486],{"class":35},[25,163327,163250],{"class":244},[25,163329,315],{"class":35},[25,163331,4767],{"class":244},[182,163333,163335],{"id":163334},"_64-列表常用方法","6.4 列表常用方法",[15,163337,163339],{"className":30449,"code":163338,"language":30451,"meta":20,"style":20},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[22,163340,163341,163357,163361,163370,163384,163398,163402],{"__ignoreMap":20},[25,163342,163343,163345,163347,163349,163351,163353,163355],{"class":27,"line":28},[25,163344,160451],{"class":244},[25,163346,290],{"class":240},[25,163348,52297],{"class":244},[25,163350,149959],{"class":45},[25,163352,12545],{"class":244},[25,163354,151007],{"class":45},[25,163356,33317],{"class":244},[25,163358,163359],{"class":27,"line":39},[25,163360,2510],{"emptyLinePlaceholder":167},[25,163362,163363,163366,163368],{"class":27,"line":51},[25,163364,163365],{"class":244},"names.append(",[25,163367,159802],{"class":45},[25,163369,251],{"class":244},[25,163371,163372,163375,163377,163379,163382],{"class":27,"line":59},[25,163373,163374],{"class":244},"names.insert(",[25,163376,460],{"class":35},[25,163378,12545],{"class":244},[25,163380,163381],{"class":45},"\"小李\"",[25,163383,251],{"class":244},[25,163385,163386,163389,163391,163393,163396],{"class":27,"line":67},[25,163387,163388],{"class":244},"names.extend([",[25,163390,8793],{"class":45},[25,163392,12545],{"class":244},[25,163394,163395],{"class":45},"\"小赵\"",[25,163397,4767],{"class":244},[25,163399,163400],{"class":27,"line":75},[25,163401,2510],{"emptyLinePlaceholder":167},[25,163403,163404,163406],{"class":27,"line":83},[25,163405,30486],{"class":35},[25,163407,163408],{"class":244},"(names)\n",[99,163410,163411],{},"删除元素：",[15,163413,163415],{"className":30449,"code":163414,"language":30451,"meta":20,"style":20},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[22,163416,163417,163426,163436,163450,163462],{"__ignoreMap":20},[25,163418,163419,163422,163424],{"class":27,"line":28},[25,163420,163421],{"class":244},"names.remove(",[25,163423,151007],{"class":45},[25,163425,251],{"class":244},[25,163427,163428,163431,163433],{"class":27,"line":39},[25,163429,163430],{"class":244},"last ",[25,163432,290],{"class":240},[25,163434,163435],{"class":244}," names.pop()\n",[25,163437,163438,163441,163443,163446,163448],{"class":27,"line":51},[25,163439,163440],{"class":244},"first ",[25,163442,290],{"class":240},[25,163444,163445],{"class":244}," names.pop(",[25,163447,434],{"class":35},[25,163449,251],{"class":244},[25,163451,163452,163455,163458,163460],{"class":27,"line":59},[25,163453,163454],{"class":240},"del",[25,163456,163457],{"class":244}," names[",[25,163459,434],{"class":35},[25,163461,33317],{"class":244},[25,163463,163464],{"class":27,"line":67},[25,163465,163466],{"class":244},"names.clear()\n",[99,163468,163469],{},"查询和统计：",[15,163471,163473],{"className":30449,"code":163472,"language":30451,"meta":20,"style":20},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[22,163474,163475,163503,163507,163518,163529],{"__ignoreMap":20},[25,163476,163477,163479,163481,163483,163485,163487,163489,163491,163493,163495,163497,163499,163501],{"class":27,"line":28},[25,163478,163154],{"class":244},[25,163480,290],{"class":240},[25,163482,52297],{"class":244},[25,163484,460],{"class":35},[25,163486,12545],{"class":244},[25,163488,321],{"class":35},[25,163490,12545],{"class":244},[25,163492,315],{"class":35},[25,163494,12545],{"class":244},[25,163496,321],{"class":35},[25,163498,12545],{"class":244},[25,163500,536],{"class":35},[25,163502,33317],{"class":244},[25,163504,163505],{"class":27,"line":39},[25,163506,2510],{"emptyLinePlaceholder":167},[25,163508,163509,163511,163514,163516],{"class":27,"line":51},[25,163510,30486],{"class":35},[25,163512,163513],{"class":244},"(numbers.index(",[25,163515,315],{"class":35},[25,163517,30568],{"class":244},[25,163519,163520,163522,163525,163527],{"class":27,"line":59},[25,163521,30486],{"class":35},[25,163523,163524],{"class":244},"(numbers.count(",[25,163526,321],{"class":35},[25,163528,30568],{"class":244},[25,163530,163531,163533,163535,163537],{"class":27,"line":67},[25,163532,30486],{"class":35},[25,163534,245],{"class":244},[25,163536,7468],{"class":35},[25,163538,163539],{"class":244},"(numbers))\n",[99,163541,163542],{},"排序：",[15,163544,163546],{"className":30449,"code":163545,"language":30451,"meta":20,"style":20},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[22,163547,163548,163572,163576,163581,163588,163592,163606,163612,163616,163621],{"__ignoreMap":20},[25,163549,163550,163552,163554,163556,163558,163560,163562,163564,163566,163568,163570],{"class":27,"line":28},[25,163551,163154],{"class":244},[25,163553,290],{"class":240},[25,163555,52297],{"class":244},[25,163557,315],{"class":35},[25,163559,12545],{"class":244},[25,163561,460],{"class":35},[25,163563,12545],{"class":244},[25,163565,562],{"class":35},[25,163567,12545],{"class":244},[25,163569,321],{"class":35},[25,163571,33317],{"class":244},[25,163573,163574],{"class":27,"line":39},[25,163575,2510],{"emptyLinePlaceholder":167},[25,163577,163578],{"class":27,"line":51},[25,163579,163580],{"class":244},"numbers.sort()\n",[25,163582,163583,163585],{"class":27,"line":59},[25,163584,30486],{"class":35},[25,163586,163587],{"class":244},"(numbers)\n",[25,163589,163590],{"class":27,"line":67},[25,163591,2510],{"emptyLinePlaceholder":167},[25,163593,163594,163597,163600,163602,163604],{"class":27,"line":75},[25,163595,163596],{"class":244},"numbers.sort(",[25,163598,163599],{"class":5326},"reverse",[25,163601,290],{"class":240},[25,163603,31547],{"class":35},[25,163605,251],{"class":244},[25,163607,163608,163610],{"class":27,"line":83},[25,163609,30486],{"class":35},[25,163611,163587],{"class":244},[25,163613,163614],{"class":27,"line":91},[25,163615,2510],{"emptyLinePlaceholder":167},[25,163617,163618],{"class":27,"line":1429},[25,163619,163620],{"class":244},"numbers.reverse()\n",[25,163622,163623,163625],{"class":27,"line":1441},[25,163624,30486],{"class":35},[25,163626,163587],{"class":244},[99,163628,163629,163632,163633,163636],{},[22,163630,163631],{},"sort()"," 会修改原列表，",[22,163634,163635],{},"sorted()"," 返回新列表。",[15,163638,163640],{"className":30449,"code":163639,"language":30451,"meta":20,"style":20},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[22,163641,163642,163666,163678,163682,163688],{"__ignoreMap":20},[25,163643,163644,163646,163648,163650,163652,163654,163656,163658,163660,163662,163664],{"class":27,"line":28},[25,163645,163154],{"class":244},[25,163647,290],{"class":240},[25,163649,52297],{"class":244},[25,163651,315],{"class":35},[25,163653,12545],{"class":244},[25,163655,460],{"class":35},[25,163657,12545],{"class":244},[25,163659,562],{"class":35},[25,163661,12545],{"class":244},[25,163663,321],{"class":35},[25,163665,33317],{"class":244},[25,163667,163668,163671,163673,163676],{"class":27,"line":39},[25,163669,163670],{"class":244},"new_numbers ",[25,163672,290],{"class":240},[25,163674,163675],{"class":35}," sorted",[25,163677,163587],{"class":244},[25,163679,163680],{"class":27,"line":51},[25,163681,2510],{"emptyLinePlaceholder":167},[25,163683,163684,163686],{"class":27,"line":59},[25,163685,30486],{"class":35},[25,163687,163587],{"class":244},[25,163689,163690,163692],{"class":27,"line":67},[25,163691,30486],{"class":35},[25,163693,163694],{"class":244},"(new_numbers)\n",[182,163696,163698],{"id":163697},"_65-列表遍历","6.5 列表遍历",[15,163700,163702],{"className":30449,"code":163701,"language":30451,"meta":20,"style":20},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[22,163703,163704,163724,163728,163738],{"__ignoreMap":20},[25,163705,163706,163708,163710,163712,163714,163716,163718,163720,163722],{"class":27,"line":28},[25,163707,160451],{"class":244},[25,163709,290],{"class":240},[25,163711,52297],{"class":244},[25,163713,149959],{"class":45},[25,163715,12545],{"class":244},[25,163717,151007],{"class":45},[25,163719,12545],{"class":244},[25,163721,159802],{"class":45},[25,163723,33317],{"class":244},[25,163725,163726],{"class":27,"line":39},[25,163727,2510],{"emptyLinePlaceholder":167},[25,163729,163730,163732,163734,163736],{"class":27,"line":51},[25,163731,3135],{"class":240},[25,163733,160487],{"class":244},[25,163735,26114],{"class":240},[25,163737,160492],{"class":244},[25,163739,163740,163742],{"class":27,"line":59},[25,163741,31370],{"class":35},[25,163743,150731],{"class":244},[99,163745,163746],{},"需要索引时：",[15,163748,163750],{"className":30449,"code":163749,"language":30451,"meta":20,"style":20},"for index, name in enumerate(names):\n    print(index, name)\n",[22,163751,163752,163766],{"__ignoreMap":20},[25,163753,163754,163756,163759,163761,163763],{"class":27,"line":28},[25,163755,3135],{"class":240},[25,163757,163758],{"class":244}," index, name ",[25,163760,26114],{"class":240},[25,163762,31677],{"class":35},[25,163764,163765],{"class":244},"(names):\n",[25,163767,163768,163770],{"class":27,"line":39},[25,163769,31370],{"class":35},[25,163771,163772],{"class":244},"(index, name)\n",[99,163774,163775],{},"统计总分：",[15,163777,163779],{"className":30449,"code":163778,"language":30451,"meta":20,"style":20},"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",[22,163780,163781,163806,163814,163818,163829,163837,163841,163858],{"__ignoreMap":20},[25,163782,163783,163786,163788,163790,163792,163794,163796,163798,163800,163802,163804],{"class":27,"line":28},[25,163784,163785],{"class":244},"scores ",[25,163787,290],{"class":240},[25,163789,52297],{"class":244},[25,163791,1105],{"class":35},[25,163793,12545],{"class":244},[25,163795,979],{"class":35},[25,163797,12545],{"class":244},[25,163799,497],{"class":35},[25,163801,12545],{"class":244},[25,163803,804],{"class":35},[25,163805,33317],{"class":244},[25,163807,163808,163810,163812],{"class":27,"line":39},[25,163809,157331],{"class":244},[25,163811,290],{"class":240},[25,163813,47404],{"class":35},[25,163815,163816],{"class":27,"line":51},[25,163817,2510],{"emptyLinePlaceholder":167},[25,163819,163820,163822,163824,163826],{"class":27,"line":59},[25,163821,3135],{"class":240},[25,163823,157854],{"class":244},[25,163825,26114],{"class":240},[25,163827,163828],{"class":244}," scores:\n",[25,163830,163831,163833,163835],{"class":27,"line":67},[25,163832,159378],{"class":244},[25,163834,9587],{"class":240},[25,163836,1690],{"class":244},[25,163838,163839],{"class":27,"line":75},[25,163840,2510],{"emptyLinePlaceholder":167},[25,163842,163843,163846,163848,163851,163853,163855],{"class":27,"line":83},[25,163844,163845],{"class":244},"avg ",[25,163847,290],{"class":240},[25,163849,163850],{"class":244}," total ",[25,163852,827],{"class":240},[25,163854,7441],{"class":35},[25,163856,163857],{"class":244},"(scores)\n",[25,163859,163860,163862,163864,163866,163869,163871,163874,163876,163878,163880],{"class":27,"line":91},[25,163861,30486],{"class":35},[25,163863,245],{"class":244},[25,163865,296],{"class":240},[25,163867,163868],{"class":45},"\"平均分:",[25,163870,1139],{"class":35},[25,163872,163873],{"class":244},"avg",[25,163875,157230],{"class":240},[25,163877,1189],{"class":35},[25,163879,494],{"class":45},[25,163881,251],{"class":244},[182,163883,163885],{"id":163884},"_66-元组tuple","6.6 元组tuple",[99,163887,163888],{},"元组和列表类似，但不可修改。",[15,163890,163892],{"className":30449,"code":163891,"language":30451,"meta":20,"style":20},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[22,163893,163894,163911],{"__ignoreMap":20},[25,163895,163896,163899,163901,163903,163905,163907,163909],{"class":27,"line":28},[25,163897,163898],{"class":244},"point ",[25,163900,290],{"class":240},[25,163902,1769],{"class":244},[25,163904,689],{"class":35},[25,163906,12545],{"class":244},[25,163908,943],{"class":35},[25,163910,251],{"class":244},[25,163912,163913,163915,163917,163919,163921,163923,163925,163927,163929],{"class":27,"line":39},[25,163914,116385],{"class":244},[25,163916,290],{"class":240},[25,163918,1769],{"class":244},[25,163920,149959],{"class":45},[25,163922,12545],{"class":244},[25,163924,893],{"class":35},[25,163926,12545],{"class":244},[25,163928,69340],{"class":45},[25,163930,251],{"class":244},[99,163932,163933],{},"单元素元组必须加逗号：",[15,163935,163937],{"className":30449,"code":163936,"language":30451,"meta":20,"style":20},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[22,163938,163939,163953,163966,163970,163984],{"__ignoreMap":20},[25,163940,163941,163944,163946,163948,163950],{"class":27,"line":28},[25,163942,163943],{"class":244},"t1 ",[25,163945,290],{"class":240},[25,163947,1769],{"class":244},[25,163949,689],{"class":35},[25,163951,163952],{"class":244},",)\n",[25,163954,163955,163958,163960,163962,163964],{"class":27,"line":39},[25,163956,163957],{"class":244},"t2 ",[25,163959,290],{"class":240},[25,163961,1769],{"class":244},[25,163963,689],{"class":35},[25,163965,251],{"class":244},[25,163967,163968],{"class":27,"line":51},[25,163969,2510],{"emptyLinePlaceholder":167},[25,163971,163972,163974,163976,163978,163981],{"class":27,"line":59},[25,163973,30486],{"class":35},[25,163975,245],{"class":244},[25,163977,103178],{"class":35},[25,163979,163980],{"class":244},"(t1))  ",[25,163982,163983],{"class":302},"# tuple\n",[25,163985,163986,163988,163990,163992,163995],{"class":27,"line":67},[25,163987,30486],{"class":35},[25,163989,245],{"class":244},[25,163991,103178],{"class":35},[25,163993,163994],{"class":244},"(t2))  ",[25,163996,163997],{"class":302},"# int\n",[99,163999,164000],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[182,164002,164004],{"id":164003},"_67-字符串str","6.7 字符串str",[99,164006,164007],{},"字符串也是序列，可以索引、切片和遍历。",[15,164009,164011],{"className":30449,"code":164010,"language":30451,"meta":20,"style":20},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[22,164012,164013,164021,164025,164036,164048,164052,164063],{"__ignoreMap":20},[25,164014,164015,164017,164019],{"class":27,"line":28},[25,164016,156515],{"class":244},[25,164018,290],{"class":240},[25,164020,159752],{"class":45},[25,164022,164023],{"class":27,"line":39},[25,164024,2510],{"emptyLinePlaceholder":167},[25,164026,164027,164029,164032,164034],{"class":27,"line":51},[25,164028,30486],{"class":35},[25,164030,164031],{"class":244},"(text[",[25,164033,434],{"class":35},[25,164035,4767],{"class":244},[25,164037,164038,164040,164042,164044,164046],{"class":27,"line":59},[25,164039,30486],{"class":35},[25,164041,164031],{"class":244},[25,164043,775],{"class":240},[25,164045,460],{"class":35},[25,164047,4767],{"class":244},[25,164049,164050],{"class":27,"line":67},[25,164051,2510],{"emptyLinePlaceholder":167},[25,164053,164054,164056,164058,164060],{"class":27,"line":75},[25,164055,3135],{"class":240},[25,164057,159763],{"class":244},[25,164059,26114],{"class":240},[25,164061,164062],{"class":244}," text:\n",[25,164064,164065,164067],{"class":27,"line":83},[25,164066,31370],{"class":35},[25,164068,159774],{"class":244},[99,164070,164071],{},"字符串不可变：",[15,164073,164075],{"className":30449,"code":164074,"language":30451,"meta":20,"style":20},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[22,164076,164077,164085],{"__ignoreMap":20},[25,164078,164079,164081,164083],{"class":27,"line":28},[25,164080,156515],{"class":244},[25,164082,290],{"class":240},[25,164084,159752],{"class":45},[25,164086,164087,164090,164092,164094,164096,164099],{"class":27,"line":39},[25,164088,164089],{"class":244},"text[",[25,164091,434],{"class":35},[25,164093,4553],{"class":244},[25,164095,290],{"class":240},[25,164097,164098],{"class":45}," \"P\"",[25,164100,164101],{"class":302},"  # 报错\n",[99,164103,164104],{},"如果要得到新字符串：",[15,164106,164108],{"className":30449,"code":164107,"language":30451,"meta":20,"style":20},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[22,164109,164110,164118,164136],{"__ignoreMap":20},[25,164111,164112,164114,164116],{"class":27,"line":28},[25,164113,156515],{"class":244},[25,164115,290],{"class":240},[25,164117,159752],{"class":45},[25,164119,164120,164122,164124,164126,164128,164131,164133],{"class":27,"line":39},[25,164121,156515],{"class":244},[25,164123,290],{"class":240},[25,164125,164098],{"class":45},[25,164127,45637],{"class":240},[25,164129,164130],{"class":244}," text[",[25,164132,460],{"class":35},[25,164134,164135],{"class":244},":]\n",[25,164137,164138,164140],{"class":27,"line":51},[25,164139,30486],{"class":35},[25,164141,164142],{"class":244},"(text)\n",[182,164144,164146],{"id":164145},"_68-切片","6.8 切片",[99,164148,164149],{},"切片用于从序列中取一部分。",[15,164151,164153],{"className":30449,"code":164152,"language":30451,"meta":20,"style":20},"序列[开始:结束:步长]\n",[22,164154,164155],{"__ignoreMap":20},[25,164156,164157],{"class":27,"line":28},[25,164158,164152],{"class":244},[99,164160,164161],{},"结束位置不包含。",[15,164163,164165],{"className":30449,"code":164164,"language":30451,"meta":20,"style":20},"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",[22,164166,164167,164204,164208,164227,164242,164256,164270],{"__ignoreMap":20},[25,164168,164169,164172,164174,164176,164178,164180,164182,164184,164186,164188,164190,164192,164194,164196,164198,164200,164202],{"class":27,"line":28},[25,164170,164171],{"class":244},"nums ",[25,164173,290],{"class":240},[25,164175,52297],{"class":244},[25,164177,434],{"class":35},[25,164179,12545],{"class":244},[25,164181,460],{"class":35},[25,164183,12545],{"class":244},[25,164185,321],{"class":35},[25,164187,12545],{"class":244},[25,164189,315],{"class":35},[25,164191,12545],{"class":244},[25,164193,536],{"class":35},[25,164195,12545],{"class":244},[25,164197,562],{"class":35},[25,164199,12545],{"class":244},[25,164201,587],{"class":35},[25,164203,33317],{"class":244},[25,164205,164206],{"class":27,"line":39},[25,164207,2510],{"emptyLinePlaceholder":167},[25,164209,164210,164212,164215,164217,164219,164221,164224],{"class":27,"line":51},[25,164211,30486],{"class":35},[25,164213,164214],{"class":244},"(nums[",[25,164216,460],{"class":35},[25,164218,1102],{"class":244},[25,164220,536],{"class":35},[25,164222,164223],{"class":244},"])    ",[25,164225,164226],{"class":302},"# [1, 2, 3]\n",[25,164228,164229,164231,164234,164236,164239],{"class":27,"line":59},[25,164230,30486],{"class":35},[25,164232,164233],{"class":244},"(nums[:",[25,164235,315],{"class":35},[25,164237,164238],{"class":244},"])     ",[25,164240,164241],{"class":302},"# [0, 1, 2]\n",[25,164243,164244,164246,164248,164250,164253],{"class":27,"line":67},[25,164245,30486],{"class":35},[25,164247,164214],{"class":244},[25,164249,315],{"class":35},[25,164251,164252],{"class":244},":])     ",[25,164254,164255],{"class":302},"# [3, 4, 5, 6]\n",[25,164257,164258,164260,164263,164265,164267],{"class":27,"line":75},[25,164259,30486],{"class":35},[25,164261,164262],{"class":244},"(nums[::",[25,164264,321],{"class":35},[25,164266,164223],{"class":244},[25,164268,164269],{"class":302},"# [0, 2, 4, 6]\n",[25,164271,164272,164274,164276,164278,164280,164283],{"class":27,"line":83},[25,164273,30486],{"class":35},[25,164275,164262],{"class":244},[25,164277,775],{"class":240},[25,164279,460],{"class":35},[25,164281,164282],{"class":244},"])   ",[25,164284,164285],{"class":302},"# 反转\n",[99,164287,164288],{},"字符串切片：",[15,164290,164292],{"className":30449,"code":164291,"language":30451,"meta":20,"style":20},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[22,164293,164294,164303,164317],{"__ignoreMap":20},[25,164295,164296,164298,164300],{"class":27,"line":28},[25,164297,156515],{"class":244},[25,164299,290],{"class":240},[25,164301,164302],{"class":45}," \"abcdef\"\n",[25,164304,164305,164307,164309,164311,164313,164315],{"class":27,"line":39},[25,164306,30486],{"class":35},[25,164308,164031],{"class":244},[25,164310,460],{"class":35},[25,164312,1102],{"class":244},[25,164314,536],{"class":35},[25,164316,4767],{"class":244},[25,164318,164319,164321,164324,164326,164328],{"class":27,"line":51},[25,164320,30486],{"class":35},[25,164322,164323],{"class":244},"(text[::",[25,164325,775],{"class":240},[25,164327,460],{"class":35},[25,164329,4767],{"class":244},[182,164331,164333],{"id":164332},"_69-集合set","6.9 集合set",[99,164335,164336],{},"集合特点：",[194,164338,164339,164342,164345],{},[106,164340,164341],{},"无序。",[106,164343,164344],{},"元素不重复。",[106,164346,164347],{},"可以做交集、并集、差集。",[15,164349,164351],{"className":30449,"code":164350,"language":30451,"meta":20,"style":20},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[22,164352,164353,164381],{"__ignoreMap":20},[25,164354,164355,164357,164359,164361,164363,164365,164367,164369,164371,164373,164375,164377,164379],{"class":27,"line":28},[25,164356,164171],{"class":244},[25,164358,290],{"class":240},[25,164360,4558],{"class":244},[25,164362,460],{"class":35},[25,164364,12545],{"class":244},[25,164366,321],{"class":35},[25,164368,12545],{"class":244},[25,164370,315],{"class":35},[25,164372,12545],{"class":244},[25,164374,315],{"class":35},[25,164376,12545],{"class":244},[25,164378,536],{"class":35},[25,164380,1676],{"class":244},[25,164382,164383,164385],{"class":27,"line":39},[25,164384,30486],{"class":35},[25,164386,164387],{"class":244},"(nums)\n",[99,164389,164390],{},"创建空集合：",[15,164392,164394],{"className":30449,"code":164393,"language":30451,"meta":20,"style":20},"s = set()\n",[22,164395,164396],{"__ignoreMap":20},[25,164397,164398,164400,164402,164404],{"class":27,"line":28},[25,164399,10689],{"class":244},[25,164401,290],{"class":240},[25,164403,119793],{"class":35},[25,164405,2086],{"class":244},[99,164407,9135,164408,164410],{},[22,164409,32530],{}," 是空字典，不是空集合。",[99,164412,164413],{},"集合常用操作：",[15,164415,164417],{"className":30449,"code":164416,"language":30451,"meta":20,"style":20},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[22,164418,164419,164439,164443,164452,164461,164470],{"__ignoreMap":20},[25,164420,164421,164423,164425,164427,164429,164431,164433,164435,164437],{"class":27,"line":28},[25,164422,10689],{"class":244},[25,164424,290],{"class":240},[25,164426,4558],{"class":244},[25,164428,460],{"class":35},[25,164430,12545],{"class":244},[25,164432,321],{"class":35},[25,164434,12545],{"class":244},[25,164436,315],{"class":35},[25,164438,1676],{"class":244},[25,164440,164441],{"class":27,"line":39},[25,164442,2510],{"emptyLinePlaceholder":167},[25,164444,164445,164448,164450],{"class":27,"line":51},[25,164446,164447],{"class":244},"s.add(",[25,164449,536],{"class":35},[25,164451,251],{"class":244},[25,164453,164454,164457,164459],{"class":27,"line":59},[25,164455,164456],{"class":244},"s.remove(",[25,164458,321],{"class":35},[25,164460,251],{"class":244},[25,164462,164463,164466,164468],{"class":27,"line":67},[25,164464,164465],{"class":244},"s.discard(",[25,164467,689],{"class":35},[25,164469,251],{"class":244},[25,164471,164472,164474,164476,164478],{"class":27,"line":75},[25,164473,30486],{"class":35},[25,164475,245],{"class":244},[25,164477,7468],{"class":35},[25,164479,164480],{"class":244},"(s))\n",[99,164482,164483],{},"交并差：",[15,164485,164487],{"className":30449,"code":164486,"language":30451,"meta":20,"style":20},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[22,164488,164489,164509,164529,164533,164548,164561],{"__ignoreMap":20},[25,164490,164491,164493,164495,164497,164499,164501,164503,164505,164507],{"class":27,"line":28},[25,164492,11029],{"class":244},[25,164494,290],{"class":240},[25,164496,4558],{"class":244},[25,164498,460],{"class":35},[25,164500,12545],{"class":244},[25,164502,321],{"class":35},[25,164504,12545],{"class":244},[25,164506,315],{"class":35},[25,164508,1676],{"class":244},[25,164510,164511,164513,164515,164517,164519,164521,164523,164525,164527],{"class":27,"line":39},[25,164512,11055],{"class":244},[25,164514,290],{"class":240},[25,164516,4558],{"class":244},[25,164518,315],{"class":35},[25,164520,12545],{"class":244},[25,164522,536],{"class":35},[25,164524,12545],{"class":244},[25,164526,562],{"class":35},[25,164528,1676],{"class":244},[25,164530,164531],{"class":27,"line":51},[25,164532,2510],{"emptyLinePlaceholder":167},[25,164534,164535,164537,164540,164542,164545],{"class":27,"line":59},[25,164536,30486],{"class":35},[25,164538,164539],{"class":244},"(a ",[25,164541,596],{"class":240},[25,164543,164544],{"class":244}," b)  ",[25,164546,164547],{"class":302},"# 交集\n",[25,164549,164550,164552,164554,164556,164558],{"class":27,"line":67},[25,164551,30486],{"class":35},[25,164553,164539],{"class":244},[25,164555,1164],{"class":240},[25,164557,164544],{"class":244},[25,164559,164560],{"class":302},"# 并集\n",[25,164562,164563,164565,164567,164569,164571],{"class":27,"line":75},[25,164564,30486],{"class":35},[25,164566,164539],{"class":244},[25,164568,775],{"class":240},[25,164570,164544],{"class":244},[25,164572,164573],{"class":302},"# 差集\n",[182,164575,164577],{"id":164576},"_610-字典dict","6.10 字典dict",[99,164579,164580],{},"字典通过 key-value 保存数据。",[15,164582,164584],{"className":30449,"code":164583,"language":30451,"meta":20,"style":20},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[22,164585,164586,164594,164604,164615,164625],{"__ignoreMap":20},[25,164587,164588,164590,164592],{"class":27,"line":28},[25,164589,149552],{"class":244},[25,164591,290],{"class":240},[25,164593,15682],{"class":244},[25,164595,164596,164598,164600,164602],{"class":27,"line":39},[25,164597,147091],{"class":45},[25,164599,51508],{"class":244},[25,164601,149959],{"class":45},[25,164603,31537],{"class":244},[25,164605,164606,164609,164611,164613],{"class":27,"line":51},[25,164607,164608],{"class":45},"    \"age\"",[25,164610,51508],{"class":244},[25,164612,893],{"class":35},[25,164614,31537],{"class":244},[25,164616,164617,164620,164622],{"class":27,"line":59},[25,164618,164619],{"class":45},"    \"score\"",[25,164621,51508],{"class":244},[25,164623,164624],{"class":35},"95\n",[25,164626,164627],{"class":27,"line":67},[25,164628,1676],{"class":244},[99,164630,164631],{},"获取值：",[15,164633,164635],{"className":30449,"code":164634,"language":30451,"meta":20,"style":20},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[22,164636,164637,164648],{"__ignoreMap":20},[25,164638,164639,164641,164644,164646],{"class":27,"line":28},[25,164640,30486],{"class":35},[25,164642,164643],{"class":244},"(student[",[25,164645,62750],{"class":45},[25,164647,4767],{"class":244},[25,164649,164650,164652,164655,164657],{"class":27,"line":39},[25,164651,30486],{"class":35},[25,164653,164654],{"class":244},"(student.get(",[25,164656,62750],{"class":45},[25,164658,30568],{"class":244},[99,164660,15498],{},[15,164662,164664],{"className":30449,"code":164663,"language":30451,"meta":20,"style":20},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[22,164665,164666,164679],{"__ignoreMap":20},[25,164667,164668,164670,164673,164676],{"class":27,"line":28},[25,164669,152930],{"class":244},[25,164671,164672],{"class":45},"\"address\"",[25,164674,164675],{"class":244},"]     ",[25,164677,164678],{"class":302},"# key不存在会报错\n",[25,164680,164681,164684,164686,164688],{"class":27,"line":39},[25,164682,164683],{"class":244},"student.get(",[25,164685,164672],{"class":45},[25,164687,13824],{"class":244},[25,164689,164690],{"class":302},"# key不存在返回None\n",[99,164692,164693],{},"设置默认值：",[15,164695,164697],{"className":30449,"code":164696,"language":30451,"meta":20,"style":20},"print(student.get(\"address\", \"未知\"))\n",[22,164698,164699],{"__ignoreMap":20},[25,164700,164701,164703,164705,164707,164709,164712],{"class":27,"line":28},[25,164702,30486],{"class":35},[25,164704,164654],{"class":244},[25,164706,164672],{"class":45},[25,164708,12545],{"class":244},[25,164710,164711],{"class":45},"\"未知\"",[25,164713,30568],{"class":244},[99,164715,164716],{},"新增和修改：",[15,164718,164720],{"className":30449,"code":164719,"language":30451,"meta":20,"style":20},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[22,164721,164722,164735],{"__ignoreMap":20},[25,164723,164724,164726,164728,164730,164732],{"class":27,"line":28},[25,164725,152930],{"class":244},[25,164727,69195],{"class":45},[25,164729,4553],{"class":244},[25,164731,290],{"class":240},[25,164733,164734],{"class":35}," 19\n",[25,164736,164737,164739,164741,164743,164745],{"class":27,"line":39},[25,164738,152930],{"class":244},[25,164740,164672],{"class":45},[25,164742,4553],{"class":244},[25,164744,290],{"class":240},[25,164746,164747],{"class":45}," \"北京\"\n",[99,164749,164750],{},"删除：",[15,164752,164754],{"className":30449,"code":164753,"language":30451,"meta":20,"style":20},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[22,164755,164756,164769,164779],{"__ignoreMap":20},[25,164757,164758,164760,164762,164765,164767],{"class":27,"line":28},[25,164759,155429],{"class":244},[25,164761,290],{"class":240},[25,164763,164764],{"class":244}," student.pop(",[25,164766,151543],{"class":45},[25,164768,251],{"class":244},[25,164770,164771,164773,164775,164777],{"class":27,"line":39},[25,164772,163454],{"class":240},[25,164774,152220],{"class":244},[25,164776,69195],{"class":45},[25,164778,33317],{"class":244},[25,164780,164781],{"class":27,"line":51},[25,164782,164783],{"class":244},"student.clear()\n",[182,164785,164787],{"id":164786},"_611-字典遍历","6.11 字典遍历",[99,164789,164790],{},"遍历 key：",[15,164792,164794],{"className":30449,"code":164793,"language":30451,"meta":20,"style":20},"for key in student:\n    print(key, student[key])\n",[22,164795,164796,164808],{"__ignoreMap":20},[25,164797,164798,164800,164803,164805],{"class":27,"line":28},[25,164799,3135],{"class":240},[25,164801,164802],{"class":244}," key ",[25,164804,26114],{"class":240},[25,164806,164807],{"class":244}," student:\n",[25,164809,164810,164812],{"class":27,"line":39},[25,164811,31370],{"class":35},[25,164813,164814],{"class":244},"(key, student[key])\n",[99,164816,164817],{},"遍历 value：",[15,164819,164821],{"className":30449,"code":164820,"language":30451,"meta":20,"style":20},"for value in student.values():\n    print(value)\n",[22,164822,164823,164835],{"__ignoreMap":20},[25,164824,164825,164827,164830,164832],{"class":27,"line":28},[25,164826,3135],{"class":240},[25,164828,164829],{"class":244}," value ",[25,164831,26114],{"class":240},[25,164833,164834],{"class":244}," student.values():\n",[25,164836,164837,164839],{"class":27,"line":39},[25,164838,31370],{"class":35},[25,164840,164841],{"class":244},"(value)\n",[99,164843,164844],{},"遍历 key 和 value：",[15,164846,164848],{"className":30449,"code":164847,"language":30451,"meta":20,"style":20},"for key, value in student.items():\n    print(key, value)\n",[22,164849,164850,164862],{"__ignoreMap":20},[25,164851,164852,164854,164857,164859],{"class":27,"line":28},[25,164853,3135],{"class":240},[25,164855,164856],{"class":244}," key, value ",[25,164858,26114],{"class":240},[25,164860,164861],{"class":244}," student.items():\n",[25,164863,164864,164866],{"class":27,"line":39},[25,164865,31370],{"class":35},[25,164867,164868],{"class":244},"(key, value)\n",[182,164870,164872],{"id":164871},"_612-嵌套容器","6.12 嵌套容器",[99,164874,164875],{},"列表中保存字典，是项目中最常见的结构之一。",[15,164877,164879],{"className":30449,"code":164878,"language":30451,"meta":20,"style":20},"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",[22,164880,164881,164889,164917,164945,164973,164977,164981,164991],{"__ignoreMap":20},[25,164882,164883,164885,164887],{"class":27,"line":28},[25,164884,159787],{"class":244},[25,164886,290],{"class":240},[25,164888,55518],{"class":244},[25,164890,164891,164893,164895,164897,164899,164901,164903,164905,164907,164909,164911,164913,164915],{"class":27,"line":39},[25,164892,148456],{"class":244},[25,164894,62750],{"class":45},[25,164896,51508],{"class":244},[25,164898,149959],{"class":45},[25,164900,12545],{"class":244},[25,164902,69195],{"class":45},[25,164904,51508],{"class":244},[25,164906,893],{"class":35},[25,164908,12545],{"class":244},[25,164910,151543],{"class":45},[25,164912,51508],{"class":244},[25,164914,1232],{"class":35},[25,164916,5040],{"class":244},[25,164918,164919,164921,164923,164925,164927,164929,164931,164933,164935,164937,164939,164941,164943],{"class":27,"line":51},[25,164920,148456],{"class":244},[25,164922,62750],{"class":45},[25,164924,51508],{"class":244},[25,164926,151007],{"class":45},[25,164928,12545],{"class":244},[25,164930,69195],{"class":45},[25,164932,51508],{"class":244},[25,164934,868],{"class":35},[25,164936,12545],{"class":244},[25,164938,151543],{"class":45},[25,164940,51508],{"class":244},[25,164942,1054],{"class":35},[25,164944,5040],{"class":244},[25,164946,164947,164949,164951,164953,164955,164957,164959,164961,164963,164965,164967,164969,164971],{"class":27,"line":59},[25,164948,148456],{"class":244},[25,164950,62750],{"class":45},[25,164952,51508],{"class":244},[25,164954,159802],{"class":45},[25,164956,12545],{"class":244},[25,164958,69195],{"class":45},[25,164960,51508],{"class":244},[25,164962,918],{"class":35},[25,164964,12545],{"class":244},[25,164966,151543],{"class":45},[25,164968,51508],{"class":244},[25,164970,649],{"class":35},[25,164972,5040],{"class":244},[25,164974,164975],{"class":27,"line":67},[25,164976,33317],{"class":244},[25,164978,164979],{"class":27,"line":75},[25,164980,2510],{"emptyLinePlaceholder":167},[25,164982,164983,164985,164987,164989],{"class":27,"line":83},[25,164984,3135],{"class":240},[25,164986,152208],{"class":244},[25,164988,26114],{"class":240},[25,164990,152213],{"class":244},[25,164992,164993,164995,164997,164999,165002,165004],{"class":27,"line":91},[25,164994,31370],{"class":35},[25,164996,164643],{"class":244},[25,164998,62750],{"class":45},[25,165000,165001],{"class":244},"], student[",[25,165003,151543],{"class":45},[25,165005,4767],{"class":244},[99,165007,165008],{},"统计平均分：",[15,165010,165012],{"className":30449,"code":165011,"language":30451,"meta":20,"style":20},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[22,165013,165014,165022,165026,165036,165048,165052,165067],{"__ignoreMap":20},[25,165015,165016,165018,165020],{"class":27,"line":28},[25,165017,157331],{"class":244},[25,165019,290],{"class":240},[25,165021,47404],{"class":35},[25,165023,165024],{"class":27,"line":39},[25,165025,2510],{"emptyLinePlaceholder":167},[25,165027,165028,165030,165032,165034],{"class":27,"line":51},[25,165029,3135],{"class":240},[25,165031,152208],{"class":244},[25,165033,26114],{"class":240},[25,165035,152213],{"class":244},[25,165037,165038,165040,165042,165044,165046],{"class":27,"line":59},[25,165039,159378],{"class":244},[25,165041,9587],{"class":240},[25,165043,152220],{"class":244},[25,165045,151543],{"class":45},[25,165047,33317],{"class":244},[25,165049,165050],{"class":27,"line":67},[25,165051,2510],{"emptyLinePlaceholder":167},[25,165053,165054,165056,165058,165060,165062,165064],{"class":27,"line":75},[25,165055,163845],{"class":244},[25,165057,290],{"class":240},[25,165059,163850],{"class":244},[25,165061,827],{"class":240},[25,165063,7441],{"class":35},[25,165065,165066],{"class":244},"(students)\n",[25,165068,165069,165071,165073,165075,165077,165079,165081,165083,165085,165087],{"class":27,"line":83},[25,165070,30486],{"class":35},[25,165072,245],{"class":244},[25,165074,296],{"class":240},[25,165076,163868],{"class":45},[25,165078,1139],{"class":35},[25,165080,163873],{"class":244},[25,165082,157230],{"class":240},[25,165084,1189],{"class":35},[25,165086,494],{"class":45},[25,165088,251],{"class":244},[99,165090,165091],{},"查找学生：",[15,165093,165095],{"className":30449,"code":165094,"language":30451,"meta":20,"style":20},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[22,165096,165097,165112,165116,165126,165140,165146,165150,165156],{"__ignoreMap":20},[25,165098,165099,165101,165103,165105,165107,165110],{"class":27,"line":28},[25,165100,111649],{"class":244},[25,165102,290],{"class":240},[25,165104,60676],{"class":35},[25,165106,245],{"class":244},[25,165108,165109],{"class":45},"\"请输入学生姓名:\"",[25,165111,251],{"class":244},[25,165113,165114],{"class":27,"line":39},[25,165115,2510],{"emptyLinePlaceholder":167},[25,165117,165118,165120,165122,165124],{"class":27,"line":51},[25,165119,3135],{"class":240},[25,165121,152208],{"class":244},[25,165123,26114],{"class":240},[25,165125,152213],{"class":244},[25,165127,165128,165130,165132,165134,165136,165138],{"class":27,"line":59},[25,165129,3211],{"class":240},[25,165131,152220],{"class":244},[25,165133,62750],{"class":45},[25,165135,4553],{"class":244},[25,165137,3059],{"class":240},[25,165139,160503],{"class":244},[25,165141,165142,165144],{"class":27,"line":67},[25,165143,32522],{"class":35},[25,165145,150113],{"class":244},[25,165147,165148],{"class":27,"line":75},[25,165149,31698],{"class":240},[25,165151,165152,165154],{"class":27,"line":83},[25,165153,1812],{"class":240},[25,165155,3849],{"class":244},[25,165157,165158,165160,165162,165165],{"class":27,"line":91},[25,165159,31370],{"class":35},[25,165161,245],{"class":244},[25,165163,165164],{"class":45},"\"没有找到\"",[25,165166,251],{"class":244},[182,165168,165170],{"id":165169},"_613-容器通用操作","6.13 容器通用操作",[99,165172,165173],{},"长度：",[15,165175,165177],{"className":30449,"code":165176,"language":30451,"meta":20,"style":20},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[22,165178,165179,165198,165208],{"__ignoreMap":20},[25,165180,165181,165183,165186,165188,165190,165192,165194,165196],{"class":27,"line":28},[25,165182,7468],{"class":35},[25,165184,165185],{"class":244},"([",[25,165187,460],{"class":35},[25,165189,12545],{"class":244},[25,165191,321],{"class":35},[25,165193,12545],{"class":244},[25,165195,315],{"class":35},[25,165197,4767],{"class":244},[25,165199,165200,165202,165204,165206],{"class":27,"line":39},[25,165201,7468],{"class":35},[25,165203,245],{"class":244},[25,165205,155951],{"class":45},[25,165207,251],{"class":244},[25,165209,165210,165212,165215,165217,165219,165221],{"class":27,"line":51},[25,165211,7468],{"class":35},[25,165213,165214],{"class":244},"({",[25,165216,62750],{"class":45},[25,165218,51508],{"class":244},[25,165220,149959],{"class":45},[25,165222,165223],{"class":244},"})\n",[99,165225,165226],{},"最大最小：",[15,165228,165230],{"className":30449,"code":165229,"language":30451,"meta":20,"style":20},"max([1, 2, 3])\nmin([1, 2, 3])\n",[22,165231,165232,165250],{"__ignoreMap":20},[25,165233,165234,165236,165238,165240,165242,165244,165246,165248],{"class":27,"line":28},[25,165235,6125],{"class":35},[25,165237,165185],{"class":244},[25,165239,460],{"class":35},[25,165241,12545],{"class":244},[25,165243,321],{"class":35},[25,165245,12545],{"class":244},[25,165247,315],{"class":35},[25,165249,4767],{"class":244},[25,165251,165252,165255,165257,165259,165261,165263,165265,165267],{"class":27,"line":39},[25,165253,165254],{"class":35},"min",[25,165256,165185],{"class":244},[25,165258,460],{"class":35},[25,165260,12545],{"class":244},[25,165262,321],{"class":35},[25,165264,12545],{"class":244},[25,165266,315],{"class":35},[25,165268,4767],{"class":244},[99,165270,165271],{},"求和：",[15,165273,165275],{"className":30449,"code":165274,"language":30451,"meta":20,"style":20},"sum([1, 2, 3])\n",[22,165276,165277],{"__ignoreMap":20},[25,165278,165279,165282,165284,165286,165288,165290,165292,165294],{"class":27,"line":28},[25,165280,165281],{"class":35},"sum",[25,165283,165185],{"class":244},[25,165285,460],{"class":35},[25,165287,12545],{"class":244},[25,165289,321],{"class":35},[25,165291,12545],{"class":244},[25,165293,315],{"class":35},[25,165295,4767],{"class":244},[99,165297,163542],{},[15,165299,165301],{"className":30449,"code":165300,"language":30451,"meta":20,"style":20},"sorted([3, 1, 2])\n",[22,165302,165303],{"__ignoreMap":20},[25,165304,165305,165308,165310,165312,165314,165316,165318,165320],{"class":27,"line":28},[25,165306,165307],{"class":35},"sorted",[25,165309,165185],{"class":244},[25,165311,315],{"class":35},[25,165313,12545],{"class":244},[25,165315,460],{"class":35},[25,165317,12545],{"class":244},[25,165319,321],{"class":35},[25,165321,4767],{"class":244},[99,165323,165324],{},"类型转换：",[15,165326,165328],{"className":30449,"code":165327,"language":30451,"meta":20,"style":20},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[22,165329,165330,165340,165358],{"__ignoreMap":20},[25,165331,165332,165334,165336,165338],{"class":27,"line":28},[25,165333,154141],{"class":35},[25,165335,245],{"class":244},[25,165337,155951],{"class":45},[25,165339,251],{"class":244},[25,165341,165342,165344,165346,165348,165350,165352,165354,165356],{"class":27,"line":39},[25,165343,155336],{"class":35},[25,165345,165185],{"class":244},[25,165347,460],{"class":35},[25,165349,12545],{"class":244},[25,165351,321],{"class":35},[25,165353,12545],{"class":244},[25,165355,315],{"class":35},[25,165357,4767],{"class":244},[25,165359,165360,165362,165364,165366,165368,165370,165372,165374,165376,165378],{"class":27,"line":51},[25,165361,155361],{"class":35},[25,165363,165185],{"class":244},[25,165365,460],{"class":35},[25,165367,12545],{"class":244},[25,165369,460],{"class":35},[25,165371,12545],{"class":244},[25,165373,321],{"class":35},[25,165375,12545],{"class":244},[25,165377,315],{"class":35},[25,165379,4767],{"class":244},[99,165381,165382],{},"成员判断：",[15,165384,165386],{"className":30449,"code":165385,"language":30451,"meta":20,"style":20},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[22,165387,165388,165405,165429],{"__ignoreMap":20},[25,165389,165390,165392,165394,165397,165400,165403],{"class":27,"line":28},[25,165391,30486],{"class":35},[25,165393,245],{"class":244},[25,165395,165396],{"class":45},"\"a\"",[25,165398,165399],{"class":240}," in",[25,165401,165402],{"class":45}," \"abc\"",[25,165404,251],{"class":244},[25,165406,165407,165409,165411,165413,165415,165417,165419,165421,165423,165425,165427],{"class":27,"line":39},[25,165408,30486],{"class":35},[25,165410,245],{"class":244},[25,165412,460],{"class":35},[25,165414,165399],{"class":240},[25,165416,52297],{"class":244},[25,165418,460],{"class":35},[25,165420,12545],{"class":244},[25,165422,321],{"class":35},[25,165424,12545],{"class":244},[25,165426,315],{"class":35},[25,165428,4767],{"class":244},[25,165430,165431,165433,165435,165437,165439,165441,165443,165445,165447],{"class":27,"line":51},[25,165432,30486],{"class":35},[25,165434,245],{"class":244},[25,165436,62750],{"class":45},[25,165438,165399],{"class":240},[25,165440,4558],{"class":244},[25,165442,62750],{"class":45},[25,165444,51508],{"class":244},[25,165446,149959],{"class":45},[25,165448,165223],{"class":244},[182,165450,165452],{"id":165451},"_614-推导式","6.14 推导式",[99,165454,165455],{},"推导式用于快速生成容器。",[99,165457,165458],{},"列表推导式：",[15,165460,165462],{"className":30449,"code":165461,"language":30451,"meta":20,"style":20},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[22,165463,165464,165491],{"__ignoreMap":20},[25,165465,165466,165468,165470,165473,165475,165477,165479,165481,165483,165485,165487,165489],{"class":27,"line":28},[25,165467,164171],{"class":244},[25,165469,290],{"class":240},[25,165471,165472],{"class":244}," [i ",[25,165474,3135],{"class":240},[25,165476,9548],{"class":244},[25,165478,26114],{"class":240},[25,165480,32514],{"class":35},[25,165482,245],{"class":244},[25,165484,460],{"class":35},[25,165486,12545],{"class":244},[25,165488,587],{"class":35},[25,165490,97371],{"class":244},[25,165492,165493,165495],{"class":27,"line":39},[25,165494,30486],{"class":35},[25,165496,164387],{"class":244},[99,165498,165499],{},"带条件：",[15,165501,165503],{"className":30449,"code":165502,"language":30451,"meta":20,"style":20},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[22,165504,165505,165546],{"__ignoreMap":20},[25,165506,165507,165510,165512,165514,165516,165518,165520,165522,165524,165526,165528,165530,165532,165534,165536,165538,165540,165542,165544],{"class":27,"line":28},[25,165508,165509],{"class":244},"even_nums ",[25,165511,290],{"class":240},[25,165513,165472],{"class":244},[25,165515,3135],{"class":240},[25,165517,9548],{"class":244},[25,165519,26114],{"class":240},[25,165521,32514],{"class":35},[25,165523,245],{"class":244},[25,165525,460],{"class":35},[25,165527,12545],{"class":244},[25,165529,580],{"class":35},[25,165531,13824],{"class":244},[25,165533,1642],{"class":240},[25,165535,9548],{"class":244},[25,165537,571],{"class":240},[25,165539,14865],{"class":35},[25,165541,101630],{"class":240},[25,165543,4203],{"class":35},[25,165545,33317],{"class":244},[25,165547,165548,165550],{"class":27,"line":39},[25,165549,30486],{"class":35},[25,165551,165552],{"class":244},"(even_nums)\n",[99,165554,165555],{},"字典推导式：",[15,165557,165559],{"className":30449,"code":165558,"language":30451,"meta":20,"style":20},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[22,165560,165561,165595],{"__ignoreMap":20},[25,165562,165563,165566,165568,165571,165573,165575,165578,165580,165582,165584,165586,165588,165590,165592],{"class":27,"line":28},[25,165564,165565],{"class":244},"squares ",[25,165567,290],{"class":240},[25,165569,165570],{"class":244}," {i: i ",[25,165572,10771],{"class":240},[25,165574,14865],{"class":35},[25,165576,165577],{"class":240}," for",[25,165579,9548],{"class":244},[25,165581,26114],{"class":240},[25,165583,32514],{"class":35},[25,165585,245],{"class":244},[25,165587,460],{"class":35},[25,165589,12545],{"class":244},[25,165591,587],{"class":35},[25,165593,165594],{"class":244},")}\n",[25,165596,165597,165599],{"class":27,"line":39},[25,165598,30486],{"class":35},[25,165600,165601],{"class":244},"(squares)\n",[99,165603,165604],{},"集合推导式：",[15,165606,165608],{"className":30449,"code":165607,"language":30451,"meta":20,"style":20},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[22,165609,165610,165631],{"__ignoreMap":20},[25,165611,165612,165615,165617,165620,165622,165624,165626,165629],{"class":27,"line":28},[25,165613,165614],{"class":244},"chars ",[25,165616,290],{"class":240},[25,165618,165619],{"class":244}," {ch ",[25,165621,3135],{"class":240},[25,165623,159763],{"class":244},[25,165625,26114],{"class":240},[25,165627,165628],{"class":45}," \"hello\"",[25,165630,1676],{"class":244},[25,165632,165633,165635],{"class":27,"line":39},[25,165634,30486],{"class":35},[25,165636,165637],{"class":244},"(chars)\n",[99,165639,165640],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[182,165642,165644],{"id":165643},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[15,165646,165648],{"className":30449,"code":165647,"language":30451,"meta":20,"style":20},"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",[22,165649,165650,165658,165678,165698,165718,165738,165742,165746,165754,165768,165777,165781,165791,165803,165807,165827,165836,165840,165856,165861,165865,165879,165883,165905,165941],{"__ignoreMap":20},[25,165651,165652,165654,165656],{"class":27,"line":28},[25,165653,159787],{"class":244},[25,165655,290],{"class":240},[25,165657,55518],{"class":244},[25,165659,165660,165662,165664,165666,165668,165670,165672,165674,165676],{"class":27,"line":39},[25,165661,148456],{"class":244},[25,165663,62750],{"class":45},[25,165665,51508],{"class":244},[25,165667,149959],{"class":45},[25,165669,12545],{"class":244},[25,165671,151543],{"class":45},[25,165673,51508],{"class":244},[25,165675,1232],{"class":35},[25,165677,5040],{"class":244},[25,165679,165680,165682,165684,165686,165688,165690,165692,165694,165696],{"class":27,"line":51},[25,165681,148456],{"class":244},[25,165683,62750],{"class":45},[25,165685,51508],{"class":244},[25,165687,151007],{"class":45},[25,165689,12545],{"class":244},[25,165691,151543],{"class":45},[25,165693,51508],{"class":244},[25,165695,1054],{"class":35},[25,165697,5040],{"class":244},[25,165699,165700,165702,165704,165706,165708,165710,165712,165714,165716],{"class":27,"line":59},[25,165701,148456],{"class":244},[25,165703,62750],{"class":45},[25,165705,51508],{"class":244},[25,165707,159802],{"class":45},[25,165709,12545],{"class":244},[25,165711,151543],{"class":45},[25,165713,51508],{"class":244},[25,165715,649],{"class":35},[25,165717,5040],{"class":244},[25,165719,165720,165722,165724,165726,165728,165730,165732,165734,165736],{"class":27,"line":67},[25,165721,148456],{"class":244},[25,165723,62750],{"class":45},[25,165725,51508],{"class":244},[25,165727,163381],{"class":45},[25,165729,12545],{"class":244},[25,165731,151543],{"class":45},[25,165733,51508],{"class":244},[25,165735,1125],{"class":35},[25,165737,5040],{"class":244},[25,165739,165740],{"class":27,"line":75},[25,165741,33317],{"class":244},[25,165743,165744],{"class":27,"line":83},[25,165745,2510],{"emptyLinePlaceholder":167},[25,165747,165748,165750,165752],{"class":27,"line":91},[25,165749,157331],{"class":244},[25,165751,290],{"class":240},[25,165753,47404],{"class":35},[25,165755,165756,165759,165761,165764,165766],{"class":27,"line":1429},[25,165757,165758],{"class":244},"max_student ",[25,165760,290],{"class":240},[25,165762,165763],{"class":244}," students[",[25,165765,434],{"class":35},[25,165767,33317],{"class":244},[25,165769,165770,165773,165775],{"class":27,"line":1441},[25,165771,165772],{"class":244},"passed ",[25,165774,290],{"class":240},[25,165776,51909],{"class":244},[25,165778,165779],{"class":27,"line":1723},[25,165780,2510],{"emptyLinePlaceholder":167},[25,165782,165783,165785,165787,165789],{"class":27,"line":1728},[25,165784,3135],{"class":240},[25,165786,152208],{"class":244},[25,165788,26114],{"class":240},[25,165790,152213],{"class":244},[25,165792,165793,165795,165797,165799,165801],{"class":27,"line":1734},[25,165794,159378],{"class":244},[25,165796,9587],{"class":240},[25,165798,152220],{"class":244},[25,165800,151543],{"class":45},[25,165802,33317],{"class":244},[25,165804,165805],{"class":27,"line":1739},[25,165806,2510],{"emptyLinePlaceholder":167},[25,165808,165809,165811,165813,165815,165817,165819,165822,165824],{"class":27,"line":1753},[25,165810,3211],{"class":240},[25,165812,152220],{"class":244},[25,165814,151543],{"class":45},[25,165816,4553],{"class":244},[25,165818,1203],{"class":240},[25,165820,165821],{"class":244}," max_student[",[25,165823,151543],{"class":45},[25,165825,165826],{"class":244},"]:\n",[25,165828,165829,165832,165834],{"class":27,"line":1758},[25,165830,165831],{"class":244},"        max_student ",[25,165833,290],{"class":240},[25,165835,152236],{"class":244},[25,165837,165838],{"class":27,"line":1764},[25,165839,2510],{"emptyLinePlaceholder":167},[25,165841,165842,165844,165846,165848,165850,165852,165854],{"class":27,"line":1785},[25,165843,3211],{"class":240},[25,165845,152220],{"class":244},[25,165847,151543],{"class":45},[25,165849,4553],{"class":244},[25,165851,1821],{"class":240},[25,165853,157908],{"class":35},[25,165855,3849],{"class":244},[25,165857,165858],{"class":27,"line":1790},[25,165859,165860],{"class":244},"        passed.append(student)\n",[25,165862,165863],{"class":27,"line":1804},[25,165864,2510],{"emptyLinePlaceholder":167},[25,165866,165867,165869,165871,165873,165875,165877],{"class":27,"line":1809},[25,165868,163845],{"class":244},[25,165870,290],{"class":240},[25,165872,163850],{"class":244},[25,165874,827],{"class":240},[25,165876,7441],{"class":35},[25,165878,165066],{"class":244},[25,165880,165881],{"class":27,"line":1838},[25,165882,2510],{"emptyLinePlaceholder":167},[25,165884,165885,165887,165889,165891,165893,165895,165897,165899,165901,165903],{"class":27,"line":1843},[25,165886,30486],{"class":35},[25,165888,245],{"class":244},[25,165890,296],{"class":240},[25,165892,163868],{"class":45},[25,165894,1139],{"class":35},[25,165896,163873],{"class":244},[25,165898,157230],{"class":240},[25,165900,1189],{"class":35},[25,165902,494],{"class":45},[25,165904,251],{"class":244},[25,165906,165907,165909,165911,165913,165916,165918,165921,165923,165925,165927,165929,165931,165933,165935,165937,165939],{"class":27,"line":1860},[25,165908,30486],{"class":35},[25,165910,245],{"class":244},[25,165912,296],{"class":240},[25,165914,165915],{"class":45},"\"最高分学生:",[25,165917,1139],{"class":35},[25,165919,165920],{"class":244},"max_student[",[25,165922,152953],{"class":45},[25,165924,1183],{"class":244},[25,165926,1189],{"class":35},[25,165928,4558],{"class":35},[25,165930,165920],{"class":244},[25,165932,152991],{"class":45},[25,165934,1183],{"class":244},[25,165936,1189],{"class":35},[25,165938,494],{"class":45},[25,165940,251],{"class":244},[25,165942,165943,165945,165947,165949,165952,165955,165958,165960,165962],{"class":27,"line":1865},[25,165944,30486],{"class":35},[25,165946,245],{"class":244},[25,165948,296],{"class":240},[25,165950,165951],{"class":45},"\"及格人数:",[25,165953,165954],{"class":35},"{len",[25,165956,165957],{"class":244},"(passed)",[25,165959,1189],{"class":35},[25,165961,494],{"class":45},[25,165963,251],{"class":244},[182,165965,165967],{"id":165966},"_616-易错点","6.16 易错点",[194,165969,165970,165973,165976,165979,165985,165994],{},[106,165971,165972],{},"列表可变，元组和字符串不可变。",[106,165974,165975],{},"切片结束位置不包含。",[106,165977,165978],{},"字典通过 key 取值，不是通过索引。",[106,165980,165981,165982,28456],{},"空集合要用 ",[22,165983,165984],{},"set()",[106,165986,104437,165987,165990,165991,28456],{},[22,165988,165989],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[22,165992,165993],{},"get()",[106,165995,165996],{},"嵌套容器要先看清楚每一层是什么类型。",[182,165998,166000],{"id":165999},"_617-本章练习","6.17 本章练习",[194,166002,166003,166006,166009,166012,166015],{},[106,166004,166005],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[106,166007,166008],{},"输入一句话，统计每个字符出现次数。",[106,166010,166011],{},"使用集合去除列表中的重复元素。",[106,166013,166014],{},"使用字典保存一个学生的信息，并实现修改成绩。",[106,166016,166017],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[159,166019,166020],{},"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":20,"searchDepth":39,"depth":39,"links":166022},[166023,166024,166025,166026,166027,166028,166029,166030,166031,166032,166033,166034,166035,166036,166037,166038,166039],{"id":163003,"depth":39,"text":163004},{"id":163120,"depth":39,"text":163121},{"id":163210,"depth":39,"text":163211},{"id":163334,"depth":39,"text":163335},{"id":163697,"depth":39,"text":163698},{"id":163884,"depth":39,"text":163885},{"id":164003,"depth":39,"text":164004},{"id":164145,"depth":39,"text":164146},{"id":164332,"depth":39,"text":164333},{"id":164576,"depth":39,"text":164577},{"id":164786,"depth":39,"text":164787},{"id":164871,"depth":39,"text":164872},{"id":165169,"depth":39,"text":165170},{"id":165451,"depth":39,"text":165452},{"id":165643,"depth":39,"text":165644},{"id":165966,"depth":39,"text":165967},{"id":165999,"depth":39,"text":166000},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162995,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166046,"title":166047,"body":166048,"description":164,"extension":165,"meta":168220,"navigation":167,"path":168221,"seo":168222,"stem":168223,"__hash__":168224},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166049,"toc":168195},[166050,166053,166057,166060,166140,166143,166164,166167,166171,166174,166236,166239,166256,166260,166263,166308,166310,166318,166322,166325,166407,166410,166413,166438,166441,166464,166468,166471,166473,166535,166538,166540,166591,166595,166599,166605,166710,166714,166720,166791,166795,166798,166866,166869,166949,166953,166959,166995,166998,167001,167111,167117,167121,167124,167196,167199,167203,167207,167212,167274,167278,167283,167351,167355,167360,167476,167480,167483,167563,167566,167570,167573,167677,167679,167694,167697,167701,167839,167847,167851,167853,167864,167866,168124,168128,168160,168164,168192],[10,166051,166047],{"id":166052},"_7-函数进阶",[182,166054,166056],{"id":166055},"_71-多返回值","7.1 多返回值",[99,166058,166059],{},"Python 函数可以返回多个值，本质上返回的是元组。",[15,166061,166063],{"className":30449,"code":166062,"language":30451,"meta":20,"style":20},"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",[22,166064,166065,166074,166082,166090,166099,166106,166110,166114,166123,166129],{"__ignoreMap":20},[25,166066,166067,166069,166072],{"class":27,"line":28},[25,166068,32018],{"class":240},[25,166070,166071],{"class":31}," get_info",[25,166073,32024],{"class":244},[25,166075,166076,166078,166080],{"class":27,"line":39},[25,166077,152441],{"class":244},[25,166079,290],{"class":240},[25,166081,149424],{"class":45},[25,166083,166084,166086,166088],{"class":27,"line":51},[25,166085,152457],{"class":244},[25,166087,290],{"class":240},[25,166089,146622],{"class":35},[25,166091,166092,166094,166096],{"class":27,"line":59},[25,166093,152472],{"class":244},[25,166095,290],{"class":240},[25,166097,166098],{"class":35}," 95\n",[25,166100,166101,166103],{"class":27,"line":67},[25,166102,4200],{"class":240},[25,166104,166105],{"class":244}," name, age, score\n",[25,166107,166108],{"class":27,"line":75},[25,166109,2510],{"emptyLinePlaceholder":167},[25,166111,166112],{"class":27,"line":83},[25,166113,2510],{"emptyLinePlaceholder":167},[25,166115,166116,166118,166120],{"class":27,"line":91},[25,166117,161377],{"class":244},[25,166119,290],{"class":240},[25,166121,166122],{"class":244}," get_info()\n",[25,166124,166125,166127],{"class":27,"line":1429},[25,166126,30486],{"class":35},[25,166128,76656],{"class":244},[25,166130,166131,166133,166135,166137],{"class":27,"line":1441},[25,166132,30486],{"class":35},[25,166134,245],{"class":244},[25,166136,103178],{"class":35},[25,166138,166139],{"class":244},"(result))\n",[99,166141,166142],{},"可以直接解包：",[15,166144,166146],{"className":30449,"code":166145,"language":30451,"meta":20,"style":20},"name, age, score = get_info()\nprint(name, age, score)\n",[22,166147,166148,166157],{"__ignoreMap":20},[25,166149,166150,166153,166155],{"class":27,"line":28},[25,166151,166152],{"class":244},"name, age, score ",[25,166154,290],{"class":240},[25,166156,166122],{"class":244},[25,166158,166159,166161],{"class":27,"line":39},[25,166160,30486],{"class":35},[25,166162,166163],{"class":244},"(name, age, score)\n",[99,166165,166166],{},"返回多个值适合函数需要同时给出多个结果时使用。",[182,166168,166170],{"id":166169},"_72-位置参数","7.2 位置参数",[99,166172,166173],{},"位置参数按顺序传递。",[15,166175,166177],{"className":30449,"code":166176,"language":30451,"meta":20,"style":20},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[22,166178,166179,166187,166215,166219,166223],{"__ignoreMap":20},[25,166180,166181,166183,166185],{"class":27,"line":28},[25,166182,32018],{"class":240},[25,166184,149443],{"class":31},[25,166186,149446],{"class":244},[25,166188,166189,166191,166193,166195,166197,166199,166201,166203,166205,166207,166209,166211,166213],{"class":27,"line":39},[25,166190,31370],{"class":35},[25,166192,245],{"class":244},[25,166194,296],{"class":240},[25,166196,149457],{"class":45},[25,166198,1139],{"class":35},[25,166200,79881],{"class":244},[25,166202,1189],{"class":35},[25,166204,149466],{"class":45},[25,166206,1139],{"class":35},[25,166208,70292],{"class":244},[25,166210,1189],{"class":35},[25,166212,149475],{"class":45},[25,166214,251],{"class":244},[25,166216,166217],{"class":27,"line":51},[25,166218,2510],{"emptyLinePlaceholder":167},[25,166220,166221],{"class":27,"line":59},[25,166222,2510],{"emptyLinePlaceholder":167},[25,166224,166225,166228,166230,166232,166234],{"class":27,"line":67},[25,166226,166227],{"class":244},"introduce(",[25,166229,149959],{"class":45},[25,166231,12545],{"class":244},[25,166233,893],{"class":35},[25,166235,251],{"class":244},[99,166237,166238],{},"顺序错了就会得到错误含义：",[15,166240,166242],{"className":30449,"code":166241,"language":30451,"meta":20,"style":20},"introduce(18, \"小明\")\n",[22,166243,166244],{"__ignoreMap":20},[25,166245,166246,166248,166250,166252,166254],{"class":27,"line":28},[25,166247,166227],{"class":244},[25,166249,893],{"class":35},[25,166251,12545],{"class":244},[25,166253,149959],{"class":45},[25,166255,251],{"class":244},[182,166257,166259],{"id":166258},"_73-关键字参数","7.3 关键字参数",[99,166261,166262],{},"关键字参数按参数名传递。",[15,166264,166266],{"className":30449,"code":166265,"language":30451,"meta":20,"style":20},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[22,166267,166268,166288],{"__ignoreMap":20},[25,166269,166270,166272,166274,166276,166278,166280,166282,166284,166286],{"class":27,"line":28},[25,166271,166227],{"class":244},[25,166273,79881],{"class":5326},[25,166275,290],{"class":240},[25,166277,149959],{"class":45},[25,166279,12545],{"class":244},[25,166281,70292],{"class":5326},[25,166283,290],{"class":240},[25,166285,893],{"class":35},[25,166287,251],{"class":244},[25,166289,166290,166292,166294,166296,166298,166300,166302,166304,166306],{"class":27,"line":39},[25,166291,166227],{"class":244},[25,166293,70292],{"class":5326},[25,166295,290],{"class":240},[25,166297,893],{"class":35},[25,166299,12545],{"class":244},[25,166301,79881],{"class":5326},[25,166303,290],{"class":240},[25,166305,149959],{"class":45},[25,166307,251],{"class":244},[99,166309,118005],{},[194,166311,166312,166315],{},[106,166313,166314],{},"顺序不容易错。",[106,166316,166317],{},"调用时可读性更强。",[182,166319,166321],{"id":166320},"_74-默认参数","7.4 默认参数",[99,166323,166324],{},"默认参数给参数设置默认值。",[15,166326,166328],{"className":30449,"code":166327,"language":30451,"meta":20,"style":20},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[22,166329,166330,166346,166376,166380,166384,166394],{"__ignoreMap":20},[25,166331,166332,166334,166336,166339,166341,166344],{"class":27,"line":28},[25,166333,32018],{"class":240},[25,166335,122164],{"class":31},[25,166337,166338],{"class":244},"(host, port",[25,166340,290],{"class":240},[25,166342,166343],{"class":35},"3306",[25,166345,30857],{"class":244},[25,166347,166348,166350,166352,166354,166357,166359,166361,166363,166365,166367,166370,166372,166374],{"class":27,"line":39},[25,166349,31370],{"class":35},[25,166351,245],{"class":244},[25,166353,296],{"class":240},[25,166355,166356],{"class":45},"\"连接",[25,166358,1139],{"class":35},[25,166360,27466],{"class":244},[25,166362,1189],{"class":35},[25,166364,1102],{"class":45},[25,166366,1139],{"class":35},[25,166368,166369],{"class":244},"port",[25,166371,1189],{"class":35},[25,166373,494],{"class":45},[25,166375,251],{"class":244},[25,166377,166378],{"class":27,"line":51},[25,166379,2510],{"emptyLinePlaceholder":167},[25,166381,166382],{"class":27,"line":59},[25,166383,2510],{"emptyLinePlaceholder":167},[25,166385,166386,166389,166392],{"class":27,"line":67},[25,166387,166388],{"class":244},"connect(",[25,166390,166391],{"class":45},"\"localhost\"",[25,166393,251],{"class":244},[25,166395,166396,166398,166400,166402,166405],{"class":27,"line":75},[25,166397,166388],{"class":244},[25,166399,166391],{"class":45},[25,166401,12545],{"class":244},[25,166403,166404],{"class":35},"6379",[25,166406,251],{"class":244},[99,166408,166409],{},"注意：默认参数必须放在非默认参数后面。",[99,166411,166412],{},"错误：",[15,166414,166416],{"className":30449,"code":166415,"language":30451,"meta":20,"style":20},"def connect(port=3306, host):\n    pass\n",[22,166417,166418,166434],{"__ignoreMap":20},[25,166419,166420,166422,166424,166427,166429,166431],{"class":27,"line":28},[25,166421,32018],{"class":240},[25,166423,122164],{"class":31},[25,166425,166426],{"class":244},"(port",[25,166428,290],{"class":240},[25,166430,166343],{"class":35},[25,166432,166433],{"class":244},", host):\n",[25,166435,166436],{"class":27,"line":39},[25,166437,149608],{"class":240},[99,166439,166440],{},"正确：",[15,166442,166444],{"className":30449,"code":166443,"language":30451,"meta":20,"style":20},"def connect(host, port=3306):\n    pass\n",[22,166445,166446,166460],{"__ignoreMap":20},[25,166447,166448,166450,166452,166454,166456,166458],{"class":27,"line":28},[25,166449,32018],{"class":240},[25,166451,122164],{"class":31},[25,166453,166338],{"class":244},[25,166455,290],{"class":240},[25,166457,166343],{"class":35},[25,166459,30857],{"class":244},[25,166461,166462],{"class":27,"line":39},[25,166463,149608],{"class":240},[182,166465,166467],{"id":166466},"_75-默认参数的坑","7.5 默认参数的坑",[99,166469,166470],{},"不要使用可变对象作为默认参数。",[99,166472,157694],{},[15,166474,166476],{"className":30449,"code":166475,"language":30451,"meta":20,"style":20},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[22,166477,166478,166493,166498,166505,166509,166513,166524],{"__ignoreMap":20},[25,166479,166480,166482,166485,166488,166490],{"class":27,"line":28},[25,166481,32018],{"class":240},[25,166483,166484],{"class":31}," add_item",[25,166486,166487],{"class":244},"(item, items",[25,166489,290],{"class":240},[25,166491,166492],{"class":244},"[]):\n",[25,166494,166495],{"class":27,"line":39},[25,166496,166497],{"class":244},"    items.append(item)\n",[25,166499,166500,166502],{"class":27,"line":51},[25,166501,4200],{"class":240},[25,166503,166504],{"class":244}," items\n",[25,166506,166507],{"class":27,"line":59},[25,166508,2510],{"emptyLinePlaceholder":167},[25,166510,166511],{"class":27,"line":67},[25,166512,2510],{"emptyLinePlaceholder":167},[25,166514,166515,166517,166520,166522],{"class":27,"line":75},[25,166516,30486],{"class":35},[25,166518,166519],{"class":244},"(add_item(",[25,166521,165396],{"class":45},[25,166523,30568],{"class":244},[25,166525,166526,166528,166530,166533],{"class":27,"line":83},[25,166527,30486],{"class":35},[25,166529,166519],{"class":244},[25,166531,166532],{"class":45},"\"b\"",[25,166534,30568],{"class":244},[99,166536,166537],{},"第二次调用会复用第一次的列表。",[99,166539,155959],{},[15,166541,166543],{"className":30449,"code":166542,"language":30451,"meta":20,"style":20},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[22,166544,166545,166559,166572,166581,166585],{"__ignoreMap":20},[25,166546,166547,166549,166551,166553,166555,166557],{"class":27,"line":28},[25,166548,32018],{"class":240},[25,166550,166484],{"class":31},[25,166552,166487],{"class":244},[25,166554,290],{"class":240},[25,166556,95757],{"class":35},[25,166558,30857],{"class":244},[25,166560,166561,166563,166566,166568,166570],{"class":27,"line":39},[25,166562,3211],{"class":240},[25,166564,166565],{"class":244}," items ",[25,166567,38998],{"class":240},[25,166569,39004],{"class":35},[25,166571,3849],{"class":244},[25,166573,166574,166577,166579],{"class":27,"line":51},[25,166575,166576],{"class":244},"        items ",[25,166578,290],{"class":240},[25,166580,51909],{"class":244},[25,166582,166583],{"class":27,"line":59},[25,166584,166497],{"class":244},[25,166586,166587,166589],{"class":27,"line":67},[25,166588,4200],{"class":240},[25,166590,166504],{"class":244},[182,166592,166594],{"id":166593},"_76-不定长参数","7.6 不定长参数",[210,166596,166598],{"id":166597},"_761-args","7.6.1 *args",[99,166600,166601,166604],{},[22,166602,166603],{},"*args"," 接收任意数量的位置参数，得到元组。",[15,166606,166608],{"className":30449,"code":166607,"language":30451,"meta":20,"style":20},"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",[22,166609,166610,166623,166631,166642,166651,166657,166661,166665,166684],{"__ignoreMap":20},[25,166611,166612,166614,166616,166618,166620],{"class":27,"line":28},[25,166613,32018],{"class":240},[25,166615,5319],{"class":31},[25,166617,245],{"class":244},[25,166619,698],{"class":240},[25,166621,166622],{"class":244},"args):\n",[25,166624,166625,166627,166629],{"class":27,"line":39},[25,166626,159378],{"class":244},[25,166628,290],{"class":240},[25,166630,47404],{"class":35},[25,166632,166633,166635,166637,166639],{"class":27,"line":51},[25,166634,3311],{"class":240},[25,166636,156251],{"class":244},[25,166638,26114],{"class":240},[25,166640,166641],{"class":244}," args:\n",[25,166643,166644,166646,166648],{"class":27,"line":59},[25,166645,160053],{"class":244},[25,166647,9587],{"class":240},[25,166649,166650],{"class":244}," num\n",[25,166652,166653,166655],{"class":27,"line":67},[25,166654,4200],{"class":240},[25,166656,162358],{"class":244},[25,166658,166659],{"class":27,"line":75},[25,166660,2510],{"emptyLinePlaceholder":167},[25,166662,166663],{"class":27,"line":83},[25,166664,2510],{"emptyLinePlaceholder":167},[25,166666,166667,166669,166672,166674,166676,166678,166680,166682],{"class":27,"line":91},[25,166668,30486],{"class":35},[25,166670,166671],{"class":244},"(add(",[25,166673,460],{"class":35},[25,166675,12545],{"class":244},[25,166677,321],{"class":35},[25,166679,12545],{"class":244},[25,166681,315],{"class":35},[25,166683,30568],{"class":244},[25,166685,166686,166688,166690,166692,166694,166696,166698,166700,166702,166704,166706,166708],{"class":27,"line":1429},[25,166687,30486],{"class":35},[25,166689,166671],{"class":244},[25,166691,460],{"class":35},[25,166693,12545],{"class":244},[25,166695,321],{"class":35},[25,166697,12545],{"class":244},[25,166699,315],{"class":35},[25,166701,12545],{"class":244},[25,166703,536],{"class":35},[25,166705,12545],{"class":244},[25,166707,562],{"class":35},[25,166709,30568],{"class":244},[210,166711,166713],{"id":166712},"_762-kwargs","7.6.2 **kwargs",[99,166715,166716,166719],{},[22,166717,166718],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[15,166721,166723],{"className":30449,"code":166722,"language":30451,"meta":20,"style":20},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[22,166724,166725,166738,166749,166755,166759,166763],{"__ignoreMap":20},[25,166726,166727,166729,166731,166733,166735],{"class":27,"line":28},[25,166728,32018],{"class":240},[25,166730,162016],{"class":31},[25,166732,245],{"class":244},[25,166734,10771],{"class":240},[25,166736,166737],{"class":244},"kwargs):\n",[25,166739,166740,166742,166744,166746],{"class":27,"line":39},[25,166741,3311],{"class":240},[25,166743,164856],{"class":244},[25,166745,26114],{"class":240},[25,166747,166748],{"class":244}," kwargs.items():\n",[25,166750,166751,166753],{"class":27,"line":51},[25,166752,32522],{"class":35},[25,166754,164868],{"class":244},[25,166756,166757],{"class":27,"line":59},[25,166758,2510],{"emptyLinePlaceholder":167},[25,166760,166761],{"class":27,"line":67},[25,166762,2510],{"emptyLinePlaceholder":167},[25,166764,166765,166767,166769,166771,166773,166775,166777,166779,166781,166783,166785,166787,166789],{"class":27,"line":75},[25,166766,162081],{"class":244},[25,166768,79881],{"class":5326},[25,166770,290],{"class":240},[25,166772,149959],{"class":45},[25,166774,12545],{"class":244},[25,166776,70292],{"class":5326},[25,166778,290],{"class":240},[25,166780,893],{"class":35},[25,166782,12545],{"class":244},[25,166784,70343],{"class":5326},[25,166786,290],{"class":240},[25,166788,69340],{"class":45},[25,166790,251],{"class":244},[182,166792,166794],{"id":166793},"_77-参数解包","7.7 参数解包",[99,166796,166797],{},"列表或元组解包为位置参数：",[15,166799,166801],{"className":30449,"code":166800,"language":30451,"meta":20,"style":20},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[22,166802,166803,166812,166827,166831,166835,166855],{"__ignoreMap":20},[25,166804,166805,166807,166809],{"class":27,"line":28},[25,166806,32018],{"class":240},[25,166808,5319],{"class":31},[25,166810,166811],{"class":244},"(a, b, c):\n",[25,166813,166814,166816,166818,166820,166822,166824],{"class":27,"line":39},[25,166815,4200],{"class":240},[25,166817,10979],{"class":244},[25,166819,724],{"class":240},[25,166821,10992],{"class":244},[25,166823,724],{"class":240},[25,166825,166826],{"class":244}," c\n",[25,166828,166829],{"class":27,"line":51},[25,166830,2510],{"emptyLinePlaceholder":167},[25,166832,166833],{"class":27,"line":59},[25,166834,2510],{"emptyLinePlaceholder":167},[25,166836,166837,166839,166841,166843,166845,166847,166849,166851,166853],{"class":27,"line":67},[25,166838,164171],{"class":244},[25,166840,290],{"class":240},[25,166842,52297],{"class":244},[25,166844,460],{"class":35},[25,166846,12545],{"class":244},[25,166848,321],{"class":35},[25,166850,12545],{"class":244},[25,166852,315],{"class":35},[25,166854,33317],{"class":244},[25,166856,166857,166859,166861,166863],{"class":27,"line":75},[25,166858,30486],{"class":35},[25,166860,166671],{"class":244},[25,166862,698],{"class":240},[25,166864,166865],{"class":244},"nums))\n",[99,166867,166868],{},"字典解包为关键字参数：",[15,166870,166872],{"className":30449,"code":166871,"language":30451,"meta":20,"style":20},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[22,166873,166874,166882,166908,166912,166916,166940],{"__ignoreMap":20},[25,166875,166876,166878,166880],{"class":27,"line":28},[25,166877,32018],{"class":240},[25,166879,149443],{"class":31},[25,166881,149446],{"class":244},[25,166883,166884,166886,166888,166890,166892,166894,166896,166898,166900,166902,166904,166906],{"class":27,"line":39},[25,166885,31370],{"class":35},[25,166887,245],{"class":244},[25,166889,296],{"class":240},[25,166891,494],{"class":45},[25,166893,1139],{"class":35},[25,166895,79881],{"class":244},[25,166897,1189],{"class":35},[25,166899,4558],{"class":35},[25,166901,70292],{"class":244},[25,166903,1189],{"class":35},[25,166905,494],{"class":45},[25,166907,251],{"class":244},[25,166909,166910],{"class":27,"line":51},[25,166911,2510],{"emptyLinePlaceholder":167},[25,166913,166914],{"class":27,"line":59},[25,166915,2510],{"emptyLinePlaceholder":167},[25,166917,166918,166920,166922,166924,166926,166928,166930,166932,166934,166936,166938],{"class":27,"line":67},[25,166919,116385],{"class":244},[25,166921,290],{"class":240},[25,166923,4558],{"class":244},[25,166925,62750],{"class":45},[25,166927,51508],{"class":244},[25,166929,149959],{"class":45},[25,166931,12545],{"class":244},[25,166933,69195],{"class":45},[25,166935,51508],{"class":244},[25,166937,893],{"class":35},[25,166939,1676],{"class":244},[25,166941,166942,166944,166946],{"class":27,"line":75},[25,166943,166227],{"class":244},[25,166945,10771],{"class":240},[25,166947,166948],{"class":244},"info)\n",[182,166950,166952],{"id":166951},"_78-匿名函数lambda","7.8 匿名函数lambda",[99,166954,166955,166958],{},[22,166956,166957],{},"lambda"," 用于定义简单匿名函数。",[15,166960,166962],{"className":30449,"code":166961,"language":30451,"meta":20,"style":20},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[22,166963,166964,166981],{"__ignoreMap":20},[25,166965,166966,166969,166971,166974,166977,166979],{"class":27,"line":28},[25,166967,166968],{"class":244},"add ",[25,166970,290],{"class":240},[25,166972,166973],{"class":240}," lambda",[25,166975,166976],{"class":244}," a, b: a ",[25,166978,724],{"class":240},[25,166980,151175],{"class":244},[25,166982,166983,166985,166987,166989,166991,166993],{"class":27,"line":39},[25,166984,30486],{"class":35},[25,166986,166671],{"class":244},[25,166988,460],{"class":35},[25,166990,12545],{"class":244},[25,166992,321],{"class":35},[25,166994,30568],{"class":244},[99,166996,166997],{},"常和排序、过滤等函数一起使用。",[99,166999,167000],{},"按分数排序：",[15,167002,167004],{"className":30449,"code":167003,"language":30451,"meta":20,"style":20},"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",[22,167005,167006,167014,167034,167054,167074,167078,167082,167105],{"__ignoreMap":20},[25,167007,167008,167010,167012],{"class":27,"line":28},[25,167009,159787],{"class":244},[25,167011,290],{"class":240},[25,167013,55518],{"class":244},[25,167015,167016,167018,167020,167022,167024,167026,167028,167030,167032],{"class":27,"line":39},[25,167017,148456],{"class":244},[25,167019,62750],{"class":45},[25,167021,51508],{"class":244},[25,167023,149959],{"class":45},[25,167025,12545],{"class":244},[25,167027,151543],{"class":45},[25,167029,51508],{"class":244},[25,167031,1232],{"class":35},[25,167033,5040],{"class":244},[25,167035,167036,167038,167040,167042,167044,167046,167048,167050,167052],{"class":27,"line":51},[25,167037,148456],{"class":244},[25,167039,62750],{"class":45},[25,167041,51508],{"class":244},[25,167043,151007],{"class":45},[25,167045,12545],{"class":244},[25,167047,151543],{"class":45},[25,167049,51508],{"class":244},[25,167051,1054],{"class":35},[25,167053,5040],{"class":244},[25,167055,167056,167058,167060,167062,167064,167066,167068,167070,167072],{"class":27,"line":59},[25,167057,148456],{"class":244},[25,167059,62750],{"class":45},[25,167061,51508],{"class":244},[25,167063,159802],{"class":45},[25,167065,12545],{"class":244},[25,167067,151543],{"class":45},[25,167069,51508],{"class":244},[25,167071,649],{"class":35},[25,167073,5040],{"class":244},[25,167075,167076],{"class":27,"line":67},[25,167077,33317],{"class":244},[25,167079,167080],{"class":27,"line":75},[25,167081,2510],{"emptyLinePlaceholder":167},[25,167083,167084,167087,167089,167091,167093,167095,167097,167099,167101,167103],{"class":27,"line":83},[25,167085,167086],{"class":244},"students.sort(",[25,167088,154017],{"class":5326},[25,167090,154020],{"class":240},[25,167092,154023],{"class":244},[25,167094,151543],{"class":45},[25,167096,112273],{"class":244},[25,167098,163599],{"class":5326},[25,167100,290],{"class":240},[25,167102,31547],{"class":35},[25,167104,251],{"class":244},[25,167106,167107,167109],{"class":27,"line":91},[25,167108,30486],{"class":35},[25,167110,165066],{"class":244},[99,167112,167113,167114,167116],{},"如果逻辑复杂，不要硬写 ",[22,167115,166957],{},"，定义普通函数更清晰。",[182,167118,167120],{"id":167119},"_79-函数作为参数","7.9 函数作为参数",[99,167122,167123],{},"函数可以作为参数传给另一个函数。",[15,167125,167127],{"className":30449,"code":167126,"language":30451,"meta":20,"style":20},"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",[22,167128,167129,167137,167147,167151,167155,167165,167172,167176,167180],{"__ignoreMap":20},[25,167130,167131,167133,167135],{"class":27,"line":28},[25,167132,32018],{"class":240},[25,167134,5319],{"class":31},[25,167136,151164],{"class":244},[25,167138,167139,167141,167143,167145],{"class":27,"line":39},[25,167140,4200],{"class":240},[25,167142,10979],{"class":244},[25,167144,724],{"class":240},[25,167146,151175],{"class":244},[25,167148,167149],{"class":27,"line":51},[25,167150,2510],{"emptyLinePlaceholder":167},[25,167152,167153],{"class":27,"line":59},[25,167154,2510],{"emptyLinePlaceholder":167},[25,167156,167157,167159,167162],{"class":27,"line":67},[25,167158,32018],{"class":240},[25,167160,167161],{"class":31}," calculate",[25,167163,167164],{"class":244},"(a, b, func):\n",[25,167166,167167,167169],{"class":27,"line":75},[25,167168,4200],{"class":240},[25,167170,167171],{"class":244}," func(a, b)\n",[25,167173,167174],{"class":27,"line":83},[25,167175,2510],{"emptyLinePlaceholder":167},[25,167177,167178],{"class":27,"line":91},[25,167179,2510],{"emptyLinePlaceholder":167},[25,167181,167182,167184,167187,167189,167191,167193],{"class":27,"line":1429},[25,167183,30486],{"class":35},[25,167185,167186],{"class":244},"(calculate(",[25,167188,689],{"class":35},[25,167190,12545],{"class":244},[25,167192,943],{"class":35},[25,167194,167195],{"class":244},", add))\n",[99,167197,167198],{},"这种思想在排序、回调、框架中经常出现。",[182,167200,167202],{"id":167201},"_710-mapfiltersorted","7.10 map、filter、sorted",[210,167204,167206],{"id":167205},"_7101-map","7.10.1 map",[99,167208,167209,167211],{},[22,167210,74115],{}," 对每个元素执行函数。",[15,167213,167215],{"className":30449,"code":167214,"language":30451,"meta":20,"style":20},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[22,167216,167217,167241,167264],{"__ignoreMap":20},[25,167218,167219,167221,167223,167225,167227,167229,167231,167233,167235,167237,167239],{"class":27,"line":28},[25,167220,164171],{"class":244},[25,167222,290],{"class":240},[25,167224,52297],{"class":244},[25,167226,460],{"class":35},[25,167228,12545],{"class":244},[25,167230,321],{"class":35},[25,167232,12545],{"class":244},[25,167234,315],{"class":35},[25,167236,12545],{"class":244},[25,167238,536],{"class":35},[25,167240,33317],{"class":244},[25,167242,167243,167245,167247,167250,167252,167254,167257,167259,167261],{"class":27,"line":39},[25,167244,161377],{"class":244},[25,167246,290],{"class":240},[25,167248,167249],{"class":35}," map",[25,167251,245],{"class":244},[25,167253,166957],{"class":240},[25,167255,167256],{"class":244}," x: x ",[25,167258,698],{"class":240},[25,167260,14865],{"class":35},[25,167262,167263],{"class":244},", nums)\n",[25,167265,167266,167268,167270,167272],{"class":27,"line":51},[25,167267,30486],{"class":35},[25,167269,245],{"class":244},[25,167271,154141],{"class":35},[25,167273,166139],{"class":244},[210,167275,167277],{"id":167276},"_7102-filter","7.10.2 filter",[99,167279,167280,167282],{},[22,167281,80122],{}," 保留满足条件的元素。",[15,167284,167286],{"className":30449,"code":167285,"language":30451,"meta":20,"style":20},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[22,167287,167288,167316,167341],{"__ignoreMap":20},[25,167289,167290,167292,167294,167296,167298,167300,167302,167304,167306,167308,167310,167312,167314],{"class":27,"line":28},[25,167291,164171],{"class":244},[25,167293,290],{"class":240},[25,167295,52297],{"class":244},[25,167297,460],{"class":35},[25,167299,12545],{"class":244},[25,167301,321],{"class":35},[25,167303,12545],{"class":244},[25,167305,315],{"class":35},[25,167307,12545],{"class":244},[25,167309,536],{"class":35},[25,167311,12545],{"class":244},[25,167313,562],{"class":35},[25,167315,33317],{"class":244},[25,167317,167318,167320,167322,167325,167327,167329,167331,167333,167335,167337,167339],{"class":27,"line":39},[25,167319,161377],{"class":244},[25,167321,290],{"class":240},[25,167323,167324],{"class":35}," filter",[25,167326,245],{"class":244},[25,167328,166957],{"class":240},[25,167330,167256],{"class":244},[25,167332,571],{"class":240},[25,167334,14865],{"class":35},[25,167336,101630],{"class":240},[25,167338,4203],{"class":35},[25,167340,167263],{"class":244},[25,167342,167343,167345,167347,167349],{"class":27,"line":51},[25,167344,30486],{"class":35},[25,167346,245],{"class":244},[25,167348,154141],{"class":35},[25,167350,166139],{"class":244},[210,167352,167354],{"id":167353},"_7103-sorted","7.10.3 sorted",[99,167356,167357,167359],{},[22,167358,165307],{}," 返回排序后的新列表。",[15,167361,167363],{"className":30449,"code":167362,"language":30451,"meta":20,"style":20},"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",[22,167364,167365,167373,167393,167413,167433,167437,167441,167470],{"__ignoreMap":20},[25,167366,167367,167369,167371],{"class":27,"line":28},[25,167368,159787],{"class":244},[25,167370,290],{"class":240},[25,167372,55518],{"class":244},[25,167374,167375,167377,167379,167381,167383,167385,167387,167389,167391],{"class":27,"line":39},[25,167376,148456],{"class":244},[25,167378,62750],{"class":45},[25,167380,51508],{"class":244},[25,167382,149959],{"class":45},[25,167384,12545],{"class":244},[25,167386,151543],{"class":45},[25,167388,51508],{"class":244},[25,167390,1232],{"class":35},[25,167392,5040],{"class":244},[25,167394,167395,167397,167399,167401,167403,167405,167407,167409,167411],{"class":27,"line":51},[25,167396,148456],{"class":244},[25,167398,62750],{"class":45},[25,167400,51508],{"class":244},[25,167402,151007],{"class":45},[25,167404,12545],{"class":244},[25,167406,151543],{"class":45},[25,167408,51508],{"class":244},[25,167410,1054],{"class":35},[25,167412,5040],{"class":244},[25,167414,167415,167417,167419,167421,167423,167425,167427,167429,167431],{"class":27,"line":59},[25,167416,148456],{"class":244},[25,167418,62750],{"class":45},[25,167420,51508],{"class":244},[25,167422,159802],{"class":45},[25,167424,12545],{"class":244},[25,167426,151543],{"class":45},[25,167428,51508],{"class":244},[25,167430,649],{"class":35},[25,167432,5040],{"class":244},[25,167434,167435],{"class":27,"line":67},[25,167436,33317],{"class":244},[25,167438,167439],{"class":27,"line":75},[25,167440,2510],{"emptyLinePlaceholder":167},[25,167442,167443,167445,167447,167449,167452,167454,167456,167458,167460,167462,167464,167466,167468],{"class":27,"line":83},[25,167444,161377],{"class":244},[25,167446,290],{"class":240},[25,167448,163675],{"class":35},[25,167450,167451],{"class":244},"(students, ",[25,167453,154017],{"class":5326},[25,167455,154020],{"class":240},[25,167457,154023],{"class":244},[25,167459,151543],{"class":45},[25,167461,112273],{"class":244},[25,167463,163599],{"class":5326},[25,167465,290],{"class":240},[25,167467,31547],{"class":35},[25,167469,251],{"class":244},[25,167471,167472,167474],{"class":27,"line":91},[25,167473,30486],{"class":35},[25,167475,76656],{"class":244},[182,167477,167479],{"id":167478},"_711-闭包入门","7.11 闭包入门",[99,167481,167482],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[15,167484,167486],{"className":30449,"code":167485,"language":30451,"meta":20,"style":20},"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",[22,167487,167488,167498,167508,167519,167523,167530,167534,167538,167552],{"__ignoreMap":20},[25,167489,167490,167492,167495],{"class":27,"line":28},[25,167491,32018],{"class":240},[25,167493,167494],{"class":31}," outer",[25,167496,167497],{"class":244},"(base):\n",[25,167499,167500,167502,167505],{"class":27,"line":39},[25,167501,30872],{"class":240},[25,167503,167504],{"class":31}," inner",[25,167506,167507],{"class":244},"(num):\n",[25,167509,167510,167512,167515,167517],{"class":27,"line":51},[25,167511,14862],{"class":240},[25,167513,167514],{"class":244}," base ",[25,167516,724],{"class":240},[25,167518,166650],{"class":244},[25,167520,167521],{"class":27,"line":59},[25,167522,2510],{"emptyLinePlaceholder":167},[25,167524,167525,167527],{"class":27,"line":67},[25,167526,4200],{"class":240},[25,167528,167529],{"class":244}," inner\n",[25,167531,167532],{"class":27,"line":75},[25,167533,2510],{"emptyLinePlaceholder":167},[25,167535,167536],{"class":27,"line":83},[25,167537,2510],{"emptyLinePlaceholder":167},[25,167539,167540,167543,167545,167548,167550],{"class":27,"line":91},[25,167541,167542],{"class":244},"add_10 ",[25,167544,290],{"class":240},[25,167546,167547],{"class":244}," outer(",[25,167549,689],{"class":35},[25,167551,251],{"class":244},[25,167553,167554,167556,167559,167561],{"class":27,"line":1429},[25,167555,30486],{"class":35},[25,167557,167558],{"class":244},"(add_10(",[25,167560,562],{"class":35},[25,167562,30568],{"class":244},[99,167564,167565],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[182,167567,167569],{"id":167568},"_712-装饰器入门","7.12 装饰器入门",[99,167571,167572],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[15,167574,167576],{"className":30449,"code":167575,"language":30451,"meta":20,"style":20},"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",[22,167577,167578,167587,167596,167607,167612,167623,167627,167634,167638,167642,167647,167655,167665,167669,167673],{"__ignoreMap":20},[25,167579,167580,167582,167584],{"class":27,"line":28},[25,167581,32018],{"class":240},[25,167583,87262],{"class":31},[25,167585,167586],{"class":244},"(func):\n",[25,167588,167589,167591,167594],{"class":27,"line":39},[25,167590,30872],{"class":240},[25,167592,167593],{"class":31}," wrapper",[25,167595,32024],{"class":244},[25,167597,167598,167600,167602,167605],{"class":27,"line":51},[25,167599,32522],{"class":35},[25,167601,245],{"class":244},[25,167603,167604],{"class":45},"\"函数开始执行\"",[25,167606,251],{"class":244},[25,167608,167609],{"class":27,"line":59},[25,167610,167611],{"class":244},"        func()\n",[25,167613,167614,167616,167618,167621],{"class":27,"line":67},[25,167615,32522],{"class":35},[25,167617,245],{"class":244},[25,167619,167620],{"class":45},"\"函数执行结束\"",[25,167622,251],{"class":244},[25,167624,167625],{"class":27,"line":75},[25,167626,2510],{"emptyLinePlaceholder":167},[25,167628,167629,167631],{"class":27,"line":83},[25,167630,4200],{"class":240},[25,167632,167633],{"class":244}," wrapper\n",[25,167635,167636],{"class":27,"line":91},[25,167637,2510],{"emptyLinePlaceholder":167},[25,167639,167640],{"class":27,"line":1429},[25,167641,2510],{"emptyLinePlaceholder":167},[25,167643,167644],{"class":27,"line":1441},[25,167645,167646],{"class":31},"@log\n",[25,167648,167649,167651,167653],{"class":27,"line":1723},[25,167650,32018],{"class":240},[25,167652,161067],{"class":31},[25,167654,32024],{"class":244},[25,167656,167657,167659,167661,167663],{"class":27,"line":1728},[25,167658,31370],{"class":35},[25,167660,245],{"class":244},[25,167662,5954],{"class":45},[25,167664,251],{"class":244},[25,167666,167667],{"class":27,"line":1734},[25,167668,2510],{"emptyLinePlaceholder":167},[25,167670,167671],{"class":27,"line":1739},[25,167672,2510],{"emptyLinePlaceholder":167},[25,167674,167675],{"class":27,"line":1753},[25,167676,161102],{"class":244},[99,167678,158345],{},[15,167680,167682],{"className":30449,"code":167681,"language":30451,"meta":20,"style":20},"say_hello = log(say_hello)\n",[22,167683,167684],{"__ignoreMap":20},[25,167685,167686,167689,167691],{"class":27,"line":28},[25,167687,167688],{"class":244},"say_hello ",[25,167690,290],{"class":240},[25,167692,167693],{"class":244}," log(say_hello)\n",[99,167695,167696],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[182,167698,167700],{"id":167699},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[15,167702,167704],{"className":30449,"code":167703,"language":30451,"meta":20,"style":20},"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",[22,167705,167706,167714,167731,167741,167760,167770,167777,167781,167787,167791,167795,167799,167807,167817,167821,167825],{"__ignoreMap":20},[25,167707,167708,167710,167712],{"class":27,"line":28},[25,167709,32018],{"class":240},[25,167711,87262],{"class":31},[25,167713,167586],{"class":244},[25,167715,167716,167718,167720,167722,167724,167727,167729],{"class":27,"line":39},[25,167717,30872],{"class":240},[25,167719,167593],{"class":31},[25,167721,245],{"class":244},[25,167723,698],{"class":240},[25,167725,167726],{"class":244},"args, ",[25,167728,10771],{"class":240},[25,167730,166737],{"class":244},[25,167732,167733,167735,167737,167739],{"class":27,"line":51},[25,167734,32522],{"class":35},[25,167736,245],{"class":244},[25,167738,167604],{"class":45},[25,167740,251],{"class":244},[25,167742,167743,167746,167748,167751,167753,167755,167757],{"class":27,"line":59},[25,167744,167745],{"class":244},"        result ",[25,167747,290],{"class":240},[25,167749,167750],{"class":244}," func(",[25,167752,698],{"class":240},[25,167754,167726],{"class":244},[25,167756,10771],{"class":240},[25,167758,167759],{"class":244},"kwargs)\n",[25,167761,167762,167764,167766,167768],{"class":27,"line":67},[25,167763,32522],{"class":35},[25,167765,245],{"class":244},[25,167767,167620],{"class":45},[25,167769,251],{"class":244},[25,167771,167772,167774],{"class":27,"line":75},[25,167773,14862],{"class":240},[25,167775,167776],{"class":244}," result\n",[25,167778,167779],{"class":27,"line":83},[25,167780,2510],{"emptyLinePlaceholder":167},[25,167782,167783,167785],{"class":27,"line":91},[25,167784,4200],{"class":240},[25,167786,167633],{"class":244},[25,167788,167789],{"class":27,"line":1429},[25,167790,2510],{"emptyLinePlaceholder":167},[25,167792,167793],{"class":27,"line":1441},[25,167794,2510],{"emptyLinePlaceholder":167},[25,167796,167797],{"class":27,"line":1723},[25,167798,167646],{"class":31},[25,167800,167801,167803,167805],{"class":27,"line":1728},[25,167802,32018],{"class":240},[25,167804,5319],{"class":31},[25,167806,151164],{"class":244},[25,167808,167809,167811,167813,167815],{"class":27,"line":1734},[25,167810,4200],{"class":240},[25,167812,10979],{"class":244},[25,167814,724],{"class":240},[25,167816,151175],{"class":244},[25,167818,167819],{"class":27,"line":1739},[25,167820,2510],{"emptyLinePlaceholder":167},[25,167822,167823],{"class":27,"line":1753},[25,167824,2510],{"emptyLinePlaceholder":167},[25,167826,167827,167829,167831,167833,167835,167837],{"class":27,"line":1758},[25,167828,30486],{"class":35},[25,167830,166671],{"class":244},[25,167832,689],{"class":35},[25,167834,12545],{"class":244},[25,167836,943],{"class":35},[25,167838,30568],{"class":244},[99,167840,167841,167842,101089,167844,167846],{},"这个写法使用 ",[22,167843,166603],{},[22,167845,166718],{}," 接收原函数的所有参数。",[182,167848,167850],{"id":167849},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[99,167852,123363],{},[194,167854,167855,167858,167861],{},[106,167856,167857],{},"给定一组学生数据。",[106,167859,167860],{},"封装函数，根据传入规则筛选学生。",[106,167862,167863],{},"筛选及格、优秀、未成年学生。",[99,167865,10145],{},[15,167867,167869],{"className":30449,"code":167868,"language":30451,"meta":20,"style":20},"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",[22,167870,167871,167879,167907,167935,167963,167967,167971,167975,167985,167993,168003,168010,168015,168021,168025,168029,168053,168076,168099,168103,168110,168117],{"__ignoreMap":20},[25,167872,167873,167875,167877],{"class":27,"line":28},[25,167874,159787],{"class":244},[25,167876,290],{"class":240},[25,167878,55518],{"class":244},[25,167880,167881,167883,167885,167887,167889,167891,167893,167895,167897,167899,167901,167903,167905],{"class":27,"line":39},[25,167882,148456],{"class":244},[25,167884,62750],{"class":45},[25,167886,51508],{"class":244},[25,167888,149959],{"class":45},[25,167890,12545],{"class":244},[25,167892,69195],{"class":45},[25,167894,51508],{"class":244},[25,167896,893],{"class":35},[25,167898,12545],{"class":244},[25,167900,151543],{"class":45},[25,167902,51508],{"class":244},[25,167904,1232],{"class":35},[25,167906,5040],{"class":244},[25,167908,167909,167911,167913,167915,167917,167919,167921,167923,167925,167927,167929,167931,167933],{"class":27,"line":51},[25,167910,148456],{"class":244},[25,167912,62750],{"class":45},[25,167914,51508],{"class":244},[25,167916,151007],{"class":45},[25,167918,12545],{"class":244},[25,167920,69195],{"class":45},[25,167922,51508],{"class":244},[25,167924,868],{"class":35},[25,167926,12545],{"class":244},[25,167928,151543],{"class":45},[25,167930,51508],{"class":244},[25,167932,1054],{"class":35},[25,167934,5040],{"class":244},[25,167936,167937,167939,167941,167943,167945,167947,167949,167951,167953,167955,167957,167959,167961],{"class":27,"line":59},[25,167938,148456],{"class":244},[25,167940,62750],{"class":45},[25,167942,51508],{"class":244},[25,167944,159802],{"class":45},[25,167946,12545],{"class":244},[25,167948,69195],{"class":45},[25,167950,51508],{"class":244},[25,167952,918],{"class":35},[25,167954,12545],{"class":244},[25,167956,151543],{"class":45},[25,167958,51508],{"class":244},[25,167960,1125],{"class":35},[25,167962,5040],{"class":244},[25,167964,167965],{"class":27,"line":67},[25,167966,33317],{"class":244},[25,167968,167969],{"class":27,"line":75},[25,167970,2510],{"emptyLinePlaceholder":167},[25,167972,167973],{"class":27,"line":83},[25,167974,2510],{"emptyLinePlaceholder":167},[25,167976,167977,167979,167982],{"class":27,"line":91},[25,167978,32018],{"class":240},[25,167980,167981],{"class":31}," filter_students",[25,167983,167984],{"class":244},"(students, condition):\n",[25,167986,167987,167989,167991],{"class":27,"line":1429},[25,167988,161294],{"class":244},[25,167990,290],{"class":240},[25,167992,51909],{"class":244},[25,167994,167995,167997,167999,168001],{"class":27,"line":1441},[25,167996,3311],{"class":240},[25,167998,152208],{"class":244},[25,168000,26114],{"class":240},[25,168002,152213],{"class":244},[25,168004,168005,168007],{"class":27,"line":1723},[25,168006,2607],{"class":240},[25,168008,168009],{"class":244}," condition(student):\n",[25,168011,168012],{"class":27,"line":1728},[25,168013,168014],{"class":244},"            result.append(student)\n",[25,168016,168017,168019],{"class":27,"line":1734},[25,168018,4200],{"class":240},[25,168020,167776],{"class":244},[25,168022,168023],{"class":27,"line":1739},[25,168024,2510],{"emptyLinePlaceholder":167},[25,168026,168027],{"class":27,"line":1753},[25,168028,2510],{"emptyLinePlaceholder":167},[25,168030,168031,168033,168035,168038,168040,168043,168045,168047,168049,168051],{"class":27,"line":1758},[25,168032,165772],{"class":244},[25,168034,290],{"class":240},[25,168036,168037],{"class":244}," filter_students(students, ",[25,168039,166957],{"class":240},[25,168041,168042],{"class":244}," s: s[",[25,168044,151543],{"class":45},[25,168046,4553],{"class":244},[25,168048,1821],{"class":240},[25,168050,157908],{"class":35},[25,168052,251],{"class":244},[25,168054,168055,168058,168060,168062,168064,168066,168068,168070,168072,168074],{"class":27,"line":1764},[25,168056,168057],{"class":244},"excellent ",[25,168059,290],{"class":240},[25,168061,168037],{"class":244},[25,168063,166957],{"class":240},[25,168065,168042],{"class":244},[25,168067,151543],{"class":45},[25,168069,4553],{"class":244},[25,168071,1821],{"class":240},[25,168073,157859],{"class":35},[25,168075,251],{"class":244},[25,168077,168078,168081,168083,168085,168087,168089,168091,168093,168095,168097],{"class":27,"line":1785},[25,168079,168080],{"class":244},"under_age ",[25,168082,290],{"class":240},[25,168084,168037],{"class":244},[25,168086,166957],{"class":240},[25,168088,168042],{"class":244},[25,168090,69195],{"class":45},[25,168092,4553],{"class":244},[25,168094,1153],{"class":240},[25,168096,156356],{"class":35},[25,168098,251],{"class":244},[25,168100,168101],{"class":27,"line":1790},[25,168102,2510],{"emptyLinePlaceholder":167},[25,168104,168105,168107],{"class":27,"line":1804},[25,168106,30486],{"class":35},[25,168108,168109],{"class":244},"(passed)\n",[25,168111,168112,168114],{"class":27,"line":1809},[25,168113,30486],{"class":35},[25,168115,168116],{"class":244},"(excellent)\n",[25,168118,168119,168121],{"class":27,"line":1838},[25,168120,30486],{"class":35},[25,168122,168123],{"class":244},"(under_age)\n",[182,168125,168127],{"id":168126},"_715-易错点","7.15 易错点",[194,168129,168130,168133,168141,168146,168157],{},[106,168131,168132],{},"默认参数不要写可变对象。",[106,168134,168135,168137,168138,168140],{},[22,168136,166603],{}," 是元组，",[22,168139,166718],{}," 是字典。",[106,168142,168143,168145],{},[22,168144,166957],{}," 只适合简单表达式。",[106,168147,168148,101089,168150,168152,168153,168156],{},[22,168149,74115],{},[22,168151,80122],{}," 的结果是迭代器，常用 ",[22,168154,168155],{},"list()"," 转换查看。",[106,168158,168159],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[182,168161,168163],{"id":168162},"_716-本章练习","7.16 本章练习",[194,168165,168166,168173,168179,168184,168189],{},[106,168167,168168,168169,168172],{},"写函数 ",[22,168170,168171],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[106,168174,168168,168175,168178],{},[22,168176,168177],{},"print_user(**kwargs)","，输出用户所有字段。",[106,168180,104437,168181,168183],{},[22,168182,166957],{}," 对学生列表按年龄排序。",[106,168185,104437,168186,168188],{},[22,168187,80122],{}," 找出成绩不及格的学生。",[106,168190,168191],{},"写一个装饰器，统计函数执行前后的提示信息。",[159,168193,168194],{},"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":20,"searchDepth":39,"depth":39,"links":168196},[168197,168198,168199,168200,168201,168202,168206,168207,168208,168209,168214,168215,168216,168217,168218,168219],{"id":166055,"depth":39,"text":166056},{"id":166169,"depth":39,"text":166170},{"id":166258,"depth":39,"text":166259},{"id":166320,"depth":39,"text":166321},{"id":166466,"depth":39,"text":166467},{"id":166593,"depth":39,"text":166594,"children":168203},[168204,168205],{"id":166597,"depth":51,"text":166598},{"id":166712,"depth":51,"text":166713},{"id":166793,"depth":39,"text":166794},{"id":166951,"depth":39,"text":166952},{"id":167119,"depth":39,"text":167120},{"id":167201,"depth":39,"text":167202,"children":168210},[168211,168212,168213],{"id":167205,"depth":51,"text":167206},{"id":167276,"depth":51,"text":167277},{"id":167353,"depth":51,"text":167354},{"id":167478,"depth":39,"text":167479},{"id":167568,"depth":39,"text":167569},{"id":167699,"depth":39,"text":167700},{"id":167849,"depth":39,"text":167850},{"id":168126,"depth":39,"text":168127},{"id":168162,"depth":39,"text":168163},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166047,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168226,"title":168227,"body":168228,"description":164,"extension":165,"meta":170747,"navigation":167,"path":170748,"seo":170749,"stem":170750,"__hash__":170751},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168229,"toc":170722},[168230,168233,168237,168240,168243,168274,168278,168282,168285,168312,168316,168319,168370,168373,168388,168391,168426,168430,168432,168456,168459,168519,168523,168527,168530,168587,168590,168610,168614,168617,168680,168684,168687,168743,168750,168774,168778,168781,168844,168848,168853,168904,168907,168911,168916,168983,168986,169068,169072,169077,169128,169131,169135,169138,169141,169149,169152,169198,169201,169247,169251,169257,169301,169304,169350,169353,169393,169396,169457,169461,169464,169554,169557,169699,169702,169769,169773,169776,169779,169920,169923,170001,170004,170180,170184,170186,170197,170199,170398,170402,170646,170650,170684,170688,170719],[10,168231,168227],{"id":168232},"_8-文件操作",[182,168234,168236],{"id":168235},"_81-文件操作的意义","8.1 文件操作的意义",[99,168238,168239],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[99,168241,168242],{},"常见文件类型：",[194,168244,168245,168251,168257,168263,168269],{},[106,168246,168247,168250],{},[22,168248,168249],{},".txt","：普通文本。",[106,168252,168253,168256],{},[22,168254,168255],{},".csv","：表格文本。",[106,168258,168259,168262],{},[22,168260,168261],{},".json","：结构化数据。",[106,168264,168265,168268],{},[22,168266,168267],{},".log","：日志文件。",[106,168270,168271,168273],{},[22,168272,146423],{},"：Python 源代码。",[182,168275,168277],{"id":168276},"_82-路径","8.2 路径",[210,168279,168281],{"id":168280},"_821-相对路径","8.2.1 相对路径",[99,168283,168284],{},"相对当前运行目录：",[15,168286,168288],{"className":30449,"code":168287,"language":30451,"meta":20,"style":20},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[22,168289,168290],{"__ignoreMap":20},[25,168291,168292,168294,168296,168298,168300,168302,168304,168306,168308,168310],{"class":27,"line":28},[25,168293,86986],{"class":35},[25,168295,245],{"class":244},[25,168297,146867],{"class":45},[25,168299,12545],{"class":244},[25,168301,146872],{"class":45},[25,168303,12545],{"class":244},[25,168305,146877],{"class":5326},[25,168307,290],{"class":240},[25,168309,146882],{"class":45},[25,168311,251],{"class":244},[210,168313,168315],{"id":168314},"_822-绝对路径","8.2.2 绝对路径",[99,168317,168318],{},"从根目录或盘符开始：",[15,168320,168322],{"className":30449,"code":168321,"language":30451,"meta":20,"style":20},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[22,168323,168324,168347],{"__ignoreMap":20},[25,168325,168326,168328,168330,168333,168335,168337,168339,168341,168343,168345],{"class":27,"line":28},[25,168327,86986],{"class":35},[25,168329,245],{"class":244},[25,168331,168332],{"class":45},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[25,168334,12545],{"class":244},[25,168336,146872],{"class":45},[25,168338,12545],{"class":244},[25,168340,146877],{"class":5326},[25,168342,290],{"class":240},[25,168344,146882],{"class":45},[25,168346,251],{"class":244},[25,168348,168349,168351,168353,168356,168358,168360,168362,168364,168366,168368],{"class":27,"line":39},[25,168350,86986],{"class":35},[25,168352,245],{"class":244},[25,168354,168355],{"class":45},"\"D:\u002Fdata\u002Fdata.txt\"",[25,168357,12545],{"class":244},[25,168359,146872],{"class":45},[25,168361,12545],{"class":244},[25,168363,146877],{"class":5326},[25,168365,290],{"class":240},[25,168367,146882],{"class":45},[25,168369,251],{"class":244},[99,168371,168372],{},"Windows 路径建议写成：",[15,168374,168376],{"className":30449,"code":168375,"language":30451,"meta":20,"style":20},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[22,168377,168378],{"__ignoreMap":20},[25,168379,168380,168383,168385],{"class":27,"line":28},[25,168381,168382],{"class":244},"path ",[25,168384,290],{"class":240},[25,168386,168387],{"class":45}," \"D:\u002Fdata\u002Fdata.txt\"\n",[99,168389,168390],{},"或原始字符串：",[15,168392,168394],{"className":30449,"code":168393,"language":30451,"meta":20,"style":20},"path = r\"D:\\data\\data.txt\"\n",[22,168395,168396],{"__ignoreMap":20},[25,168397,168398,168400,168402,168404,168406,168409,168412,168415,168417,168419,168421,168424],{"class":27,"line":28},[25,168399,168382],{"class":244},[25,168401,290],{"class":240},[25,168403,17231],{"class":240},[25,168405,494],{"class":45},[25,168407,168408],{"class":48048},"D:",[25,168410,168411],{"class":35},"\\d",[25,168413,168414],{"class":48048},"ata",[25,168416,168411],{"class":35},[25,168418,168414],{"class":48048},[25,168420,801],{"class":35},[25,168422,168423],{"class":48048},"txt",[25,168425,25240],{"class":45},[182,168427,168429],{"id":168428},"_83-open函数","8.3 open函数",[99,168431,5291],{},[15,168433,168435],{"className":30449,"code":168434,"language":30451,"meta":20,"style":20},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[22,168436,168437],{"__ignoreMap":20},[25,168438,168439,168441,168443,168445,168448,168450,168452,168454],{"class":27,"line":28},[25,168440,45425],{"class":5326},[25,168442,13674],{"class":240},[25,168444,146862],{"class":35},[25,168446,168447],{"class":244},"(文件路径, 打开模式, ",[25,168449,146877],{"class":5326},[25,168451,290],{"class":240},[25,168453,146882],{"class":45},[25,168455,251],{"class":244},[99,168457,168458],{},"常见模式：",[380,168460,168461,168470],{},[383,168462,168463],{},[386,168464,168465,168468],{},[389,168466,168467],{},"模式",[389,168469,25940],{},[427,168471,168472,168481,168490,168499,168509],{},[386,168473,168474,168478],{},[432,168475,168476],{},[22,168477,913],{},[432,168479,168480],{},"只读，文件不存在会报错",[386,168482,168483,168487],{},[432,168484,168485],{},[22,168486,1038],{},[432,168488,168489],{},"只写，文件不存在会创建，存在会清空",[386,168491,168492,168496],{},[432,168493,168494],{},[22,168495,481],{},[432,168497,168498],{},"追加，文件不存在会创建",[386,168500,168501,168506],{},[432,168502,168503],{},[22,168504,168505],{},"rb",[432,168507,168508],{},"二进制只读",[386,168510,168511,168516],{},[432,168512,168513],{},[22,168514,168515],{},"wb",[432,168517,168518],{},"二进制只写",[182,168520,168522],{"id":168521},"_84-读取文件","8.4 读取文件",[210,168524,168526],{"id":168525},"_841-read","8.4.1 read",[99,168528,168529],{},"一次读取全部内容：",[15,168531,168533],{"className":30449,"code":168532,"language":30451,"meta":20,"style":20},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[22,168534,168535,168561,168573,168580],{"__ignoreMap":20},[25,168536,168537,168539,168541,168543,168545,168547,168549,168551,168553,168555,168557,168559],{"class":27,"line":28},[25,168538,45425],{"class":5326},[25,168540,13674],{"class":240},[25,168542,146862],{"class":35},[25,168544,245],{"class":244},[25,168546,146867],{"class":45},[25,168548,12545],{"class":244},[25,168550,146872],{"class":45},[25,168552,12545],{"class":244},[25,168554,146877],{"class":5326},[25,168556,290],{"class":240},[25,168558,146882],{"class":45},[25,168560,251],{"class":244},[25,168562,168563,168566,168568,168570],{"class":27,"line":39},[25,168564,168565],{"class":244},"content ",[25,168567,290],{"class":240},[25,168569,148224],{"class":5326},[25,168571,168572],{"class":244},".read()\n",[25,168574,168575,168577],{"class":27,"line":51},[25,168576,30486],{"class":35},[25,168578,168579],{"class":244},"(content)\n",[25,168581,168582,168584],{"class":27,"line":59},[25,168583,45425],{"class":5326},[25,168585,168586],{"class":244},".close()\n",[99,168588,168589],{},"可以指定读取字符数：",[15,168591,168593],{"className":30449,"code":168592,"language":30451,"meta":20,"style":20},"content = file.read(10)\n",[22,168594,168595],{"__ignoreMap":20},[25,168596,168597,168599,168601,168603,168606,168608],{"class":27,"line":28},[25,168598,168565],{"class":244},[25,168600,290],{"class":240},[25,168602,148224],{"class":5326},[25,168604,168605],{"class":244},".read(",[25,168607,689],{"class":35},[25,168609,251],{"class":244},[210,168611,168613],{"id":168612},"_842-readline","8.4.2 readline",[99,168615,168616],{},"一次读取一行：",[15,168618,168620],{"className":30449,"code":168619,"language":30451,"meta":20,"style":20},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[22,168621,168622,168648,168652,168663,168670,168674],{"__ignoreMap":20},[25,168623,168624,168626,168628,168630,168632,168634,168636,168638,168640,168642,168644,168646],{"class":27,"line":28},[25,168625,45425],{"class":5326},[25,168627,13674],{"class":240},[25,168629,146862],{"class":35},[25,168631,245],{"class":244},[25,168633,146867],{"class":45},[25,168635,12545],{"class":244},[25,168637,146872],{"class":45},[25,168639,12545],{"class":244},[25,168641,146877],{"class":5326},[25,168643,290],{"class":240},[25,168645,146882],{"class":45},[25,168647,251],{"class":244},[25,168649,168650],{"class":27,"line":39},[25,168651,2510],{"emptyLinePlaceholder":167},[25,168653,168654,168656,168658,168660],{"class":27,"line":51},[25,168655,147323],{"class":244},[25,168657,290],{"class":240},[25,168659,148224],{"class":5326},[25,168661,168662],{"class":244},".readline()\n",[25,168664,168665,168667],{"class":27,"line":59},[25,168666,30486],{"class":35},[25,168668,168669],{"class":244},"(line)\n",[25,168671,168672],{"class":27,"line":67},[25,168673,2510],{"emptyLinePlaceholder":167},[25,168675,168676,168678],{"class":27,"line":75},[25,168677,45425],{"class":5326},[25,168679,168586],{"class":244},[210,168681,168683],{"id":168682},"_843-readlines","8.4.3 readlines",[99,168685,168686],{},"读取所有行，返回列表：",[15,168688,168690],{"className":30449,"code":168689,"language":30451,"meta":20,"style":20},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[22,168691,168692,168718,168730,168737],{"__ignoreMap":20},[25,168693,168694,168696,168698,168700,168702,168704,168706,168708,168710,168712,168714,168716],{"class":27,"line":28},[25,168695,45425],{"class":5326},[25,168697,13674],{"class":240},[25,168699,146862],{"class":35},[25,168701,245],{"class":244},[25,168703,146867],{"class":45},[25,168705,12545],{"class":244},[25,168707,146872],{"class":45},[25,168709,12545],{"class":244},[25,168711,146877],{"class":5326},[25,168713,290],{"class":240},[25,168715,146882],{"class":45},[25,168717,251],{"class":244},[25,168719,168720,168723,168725,168727],{"class":27,"line":39},[25,168721,168722],{"class":244},"lines ",[25,168724,290],{"class":240},[25,168726,148224],{"class":5326},[25,168728,168729],{"class":244},".readlines()\n",[25,168731,168732,168734],{"class":27,"line":51},[25,168733,30486],{"class":35},[25,168735,168736],{"class":244},"(lines)\n",[25,168738,168739,168741],{"class":27,"line":59},[25,168740,45425],{"class":5326},[25,168742,168586],{"class":244},[99,168744,168745,168746,168749],{},"每一行通常带有换行符，可以用 ",[22,168747,168748],{},"strip()"," 去掉：",[15,168751,168753],{"className":30449,"code":168752,"language":30451,"meta":20,"style":20},"for line in lines:\n    print(line.strip())\n",[22,168754,168755,168767],{"__ignoreMap":20},[25,168756,168757,168759,168762,168764],{"class":27,"line":28},[25,168758,3135],{"class":240},[25,168760,168761],{"class":244}," line ",[25,168763,26114],{"class":240},[25,168765,168766],{"class":244}," lines:\n",[25,168768,168769,168771],{"class":27,"line":39},[25,168770,31370],{"class":35},[25,168772,168773],{"class":244},"(line.strip())\n",[210,168775,168777],{"id":168776},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[99,168779,168780],{},"推荐读取大文件时使用：",[15,168782,168784],{"className":30449,"code":168783,"language":30451,"meta":20,"style":20},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[22,168785,168786,168812,168816,168828,168834,168838],{"__ignoreMap":20},[25,168787,168788,168790,168792,168794,168796,168798,168800,168802,168804,168806,168808,168810],{"class":27,"line":28},[25,168789,45425],{"class":5326},[25,168791,13674],{"class":240},[25,168793,146862],{"class":35},[25,168795,245],{"class":244},[25,168797,146867],{"class":45},[25,168799,12545],{"class":244},[25,168801,146872],{"class":45},[25,168803,12545],{"class":244},[25,168805,146877],{"class":5326},[25,168807,290],{"class":240},[25,168809,146882],{"class":45},[25,168811,251],{"class":244},[25,168813,168814],{"class":27,"line":39},[25,168815,2510],{"emptyLinePlaceholder":167},[25,168817,168818,168820,168822,168824,168826],{"class":27,"line":51},[25,168819,3135],{"class":240},[25,168821,168761],{"class":244},[25,168823,26114],{"class":240},[25,168825,148224],{"class":5326},[25,168827,3849],{"class":244},[25,168829,168830,168832],{"class":27,"line":59},[25,168831,31370],{"class":35},[25,168833,168773],{"class":244},[25,168835,168836],{"class":27,"line":67},[25,168837,2510],{"emptyLinePlaceholder":167},[25,168839,168840,168842],{"class":27,"line":75},[25,168841,45425],{"class":5326},[25,168843,168586],{"class":244},[182,168845,168847],{"id":168846},"_85-with语句","8.5 with语句",[99,168849,168850,168852],{},[22,168851,107904],{}," 会自动关闭文件，推荐使用。",[15,168854,168856],{"className":30449,"code":168855,"language":30451,"meta":20,"style":20},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[22,168857,168858,168888,168898],{"__ignoreMap":20},[25,168859,168860,168862,168864,168866,168868,168870,168872,168874,168876,168878,168880,168882,168884,168886],{"class":27,"line":28},[25,168861,107904],{"class":240},[25,168863,146862],{"class":35},[25,168865,245],{"class":244},[25,168867,146867],{"class":45},[25,168869,12545],{"class":244},[25,168871,146872],{"class":45},[25,168873,12545],{"class":244},[25,168875,146877],{"class":5326},[25,168877,290],{"class":240},[25,168879,146882],{"class":45},[25,168881,13824],{"class":244},[25,168883,31454],{"class":240},[25,168885,148224],{"class":5326},[25,168887,3849],{"class":244},[25,168889,168890,168892,168894,168896],{"class":27,"line":39},[25,168891,146894],{"class":244},[25,168893,290],{"class":240},[25,168895,148224],{"class":5326},[25,168897,168572],{"class":244},[25,168899,168900,168902],{"class":27,"line":51},[25,168901,31370],{"class":35},[25,168903,168579],{"class":244},[99,168905,168906],{},"等价于打开文件、读取、最后关闭，但更安全。",[182,168908,168910],{"id":168909},"_86-写入文件","8.6 写入文件",[99,168912,168913,168915],{},[22,168914,1038],{}," 模式会清空原文件。",[15,168917,168919],{"className":30449,"code":168918,"language":30451,"meta":20,"style":20},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[22,168920,168921,168951,168968],{"__ignoreMap":20},[25,168922,168923,168925,168927,168929,168931,168933,168935,168937,168939,168941,168943,168945,168947,168949],{"class":27,"line":28},[25,168924,107904],{"class":240},[25,168926,146862],{"class":35},[25,168928,245],{"class":244},[25,168930,146867],{"class":45},[25,168932,12545],{"class":244},[25,168934,152047],{"class":45},[25,168936,12545],{"class":244},[25,168938,146877],{"class":5326},[25,168940,290],{"class":240},[25,168942,146882],{"class":45},[25,168944,13824],{"class":244},[25,168946,31454],{"class":240},[25,168948,148224],{"class":5326},[25,168950,3849],{"class":244},[25,168952,168953,168956,168959,168962,168964,168966],{"class":27,"line":39},[25,168954,168955],{"class":5326},"    file",[25,168957,168958],{"class":244},".write(",[25,168960,168961],{"class":45},"\"hello",[25,168963,156596],{"class":35},[25,168965,494],{"class":45},[25,168967,251],{"class":244},[25,168969,168970,168972,168974,168977,168979,168981],{"class":27,"line":51},[25,168971,168955],{"class":5326},[25,168973,168958],{"class":244},[25,168975,168976],{"class":45},"\"python",[25,168978,156596],{"class":35},[25,168980,494],{"class":45},[25,168982,251],{"class":244},[99,168984,168985],{},"写入多行：",[15,168987,168989],{"className":30449,"code":168988,"language":30451,"meta":20,"style":20},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[22,168990,168991,169026,169030,169061],{"__ignoreMap":20},[25,168992,168993,168995,168997,168999,169002,169004,169006,169008,169011,169013,169015,169017,169020,169022,169024],{"class":27,"line":28},[25,168994,168722],{"class":244},[25,168996,290],{"class":240},[25,168998,52297],{"class":244},[25,169000,169001],{"class":45},"\"小明,18",[25,169003,156596],{"class":35},[25,169005,494],{"class":45},[25,169007,12545],{"class":244},[25,169009,169010],{"class":45},"\"小红,17",[25,169012,156596],{"class":35},[25,169014,494],{"class":45},[25,169016,12545],{"class":244},[25,169018,169019],{"class":45},"\"小刚,19",[25,169021,156596],{"class":35},[25,169023,494],{"class":45},[25,169025,33317],{"class":244},[25,169027,169028],{"class":27,"line":39},[25,169029,2510],{"emptyLinePlaceholder":167},[25,169031,169032,169034,169036,169038,169041,169043,169045,169047,169049,169051,169053,169055,169057,169059],{"class":27,"line":51},[25,169033,107904],{"class":240},[25,169035,146862],{"class":35},[25,169037,245],{"class":244},[25,169039,169040],{"class":45},"\"students.txt\"",[25,169042,12545],{"class":244},[25,169044,152047],{"class":45},[25,169046,12545],{"class":244},[25,169048,146877],{"class":5326},[25,169050,290],{"class":240},[25,169052,146882],{"class":45},[25,169054,13824],{"class":244},[25,169056,31454],{"class":240},[25,169058,148224],{"class":5326},[25,169060,3849],{"class":244},[25,169062,169063,169065],{"class":27,"line":59},[25,169064,168955],{"class":5326},[25,169066,169067],{"class":244},".writelines(lines)\n",[182,169069,169071],{"id":169070},"_87-追加文件","8.7 追加文件",[99,169073,169074,169076],{},[22,169075,481],{}," 模式不会清空原内容，而是在末尾追加。",[15,169078,169080],{"className":30449,"code":169079,"language":30451,"meta":20,"style":20},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[22,169081,169082,169113],{"__ignoreMap":20},[25,169083,169084,169086,169088,169090,169093,169095,169097,169099,169101,169103,169105,169107,169109,169111],{"class":27,"line":28},[25,169085,107904],{"class":240},[25,169087,146862],{"class":35},[25,169089,245],{"class":244},[25,169091,169092],{"class":45},"\"log.txt\"",[25,169094,12545],{"class":244},[25,169096,165396],{"class":45},[25,169098,12545],{"class":244},[25,169100,146877],{"class":5326},[25,169102,290],{"class":240},[25,169104,146882],{"class":45},[25,169106,13824],{"class":244},[25,169108,31454],{"class":240},[25,169110,148224],{"class":5326},[25,169112,3849],{"class":244},[25,169114,169115,169117,169119,169122,169124,169126],{"class":27,"line":39},[25,169116,168955],{"class":5326},[25,169118,168958],{"class":244},[25,169120,169121],{"class":45},"\"程序启动",[25,169123,156596],{"class":35},[25,169125,494],{"class":45},[25,169127,251],{"class":244},[99,169129,169130],{},"日志类文件常用追加模式。",[182,169132,169134],{"id":169133},"_88-文件编码","8.8 文件编码",[99,169136,169137],{},"编码决定文字如何保存为字节。",[99,169139,169140],{},"常见编码：",[194,169142,169143,169146],{},[106,169144,169145],{},"UTF-8：推荐。",[106,169147,169148],{},"GBK：部分 Windows 中文文件常见。",[99,169150,169151],{},"读取文件乱码时，可以尝试：",[15,169153,169155],{"className":30449,"code":169154,"language":30451,"meta":20,"style":20},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[22,169156,169157,169188],{"__ignoreMap":20},[25,169158,169159,169161,169163,169165,169167,169169,169171,169173,169175,169177,169180,169182,169184,169186],{"class":27,"line":28},[25,169160,107904],{"class":240},[25,169162,146862],{"class":35},[25,169164,245],{"class":244},[25,169166,146867],{"class":45},[25,169168,12545],{"class":244},[25,169170,146872],{"class":45},[25,169172,12545],{"class":244},[25,169174,146877],{"class":5326},[25,169176,290],{"class":240},[25,169178,169179],{"class":45},"\"gbk\"",[25,169181,13824],{"class":244},[25,169183,31454],{"class":240},[25,169185,148224],{"class":5326},[25,169187,3849],{"class":244},[25,169189,169190,169192,169194,169196],{"class":27,"line":39},[25,169191,146894],{"class":244},[25,169193,290],{"class":240},[25,169195,148224],{"class":5326},[25,169197,168572],{"class":244},[99,169199,169200],{},"写文件时建议统一 UTF-8：",[15,169202,169204],{"className":30449,"code":169203,"language":30451,"meta":20,"style":20},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[22,169205,169206,169236],{"__ignoreMap":20},[25,169207,169208,169210,169212,169214,169216,169218,169220,169222,169224,169226,169228,169230,169232,169234],{"class":27,"line":28},[25,169209,107904],{"class":240},[25,169211,146862],{"class":35},[25,169213,245],{"class":244},[25,169215,146867],{"class":45},[25,169217,12545],{"class":244},[25,169219,152047],{"class":45},[25,169221,12545],{"class":244},[25,169223,146877],{"class":5326},[25,169225,290],{"class":240},[25,169227,146882],{"class":45},[25,169229,13824],{"class":244},[25,169231,31454],{"class":240},[25,169233,148224],{"class":5326},[25,169235,3849],{"class":244},[25,169237,169238,169240,169242,169245],{"class":27,"line":39},[25,169239,168955],{"class":5326},[25,169241,168958],{"class":244},[25,169243,169244],{"class":45},"\"中文内容\"",[25,169246,251],{"class":244},[182,169248,169250],{"id":169249},"_89-pathlib","8.9 pathlib",[99,169252,169253,169256],{},[22,169254,169255],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[15,169258,169260],{"className":30449,"code":169259,"language":30451,"meta":20,"style":20},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[22,169261,169262,169272,169276,169294],{"__ignoreMap":20},[25,169263,169264,169266,169268,169270],{"class":27,"line":28},[25,169265,30808],{"class":240},[25,169267,108382],{"class":244},[25,169269,30463],{"class":240},[25,169271,108387],{"class":244},[25,169273,169274],{"class":27,"line":39},[25,169275,2510],{"emptyLinePlaceholder":167},[25,169277,169278,169280,169282,169284,169287,169289,169291],{"class":27,"line":51},[25,169279,168382],{"class":244},[25,169281,290],{"class":240},[25,169283,108616],{"class":244},[25,169285,169286],{"class":45},"\"data\"",[25,169288,13824],{"class":244},[25,169290,827],{"class":240},[25,169292,169293],{"class":45}," \"students.txt\"\n",[25,169295,169296,169298],{"class":27,"line":59},[25,169297,30486],{"class":35},[25,169299,169300],{"class":244},"(path)\n",[99,169302,169303],{},"创建目录：",[15,169305,169307],{"className":30449,"code":169306,"language":30451,"meta":20,"style":20},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[22,169308,169309,169319,169323,169336],{"__ignoreMap":20},[25,169310,169311,169313,169315,169317],{"class":27,"line":28},[25,169312,30808],{"class":240},[25,169314,108382],{"class":244},[25,169316,30463],{"class":240},[25,169318,108387],{"class":244},[25,169320,169321],{"class":27,"line":39},[25,169322,2510],{"emptyLinePlaceholder":167},[25,169324,169325,169328,169330,169332,169334],{"class":27,"line":51},[25,169326,169327],{"class":244},"data_dir ",[25,169329,290],{"class":240},[25,169331,108616],{"class":244},[25,169333,169286],{"class":45},[25,169335,251],{"class":244},[25,169337,169338,169341,169344,169346,169348],{"class":27,"line":59},[25,169339,169340],{"class":244},"data_dir.mkdir(",[25,169342,169343],{"class":5326},"exist_ok",[25,169345,290],{"class":240},[25,169347,31547],{"class":35},[25,169349,251],{"class":244},[99,169351,169352],{},"判断文件是否存在：",[15,169354,169356],{"className":30449,"code":169355,"language":30451,"meta":20,"style":20},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[22,169357,169358,169371,169375,169382],{"__ignoreMap":20},[25,169359,169360,169362,169364,169366,169369],{"class":27,"line":28},[25,169361,168382],{"class":244},[25,169363,290],{"class":240},[25,169365,108616],{"class":244},[25,169367,169368],{"class":45},"\"data\u002Fstudents.txt\"",[25,169370,251],{"class":244},[25,169372,169373],{"class":27,"line":39},[25,169374,2510],{"emptyLinePlaceholder":167},[25,169376,169377,169379],{"class":27,"line":51},[25,169378,1642],{"class":240},[25,169380,169381],{"class":244}," path.exists():\n",[25,169383,169384,169386,169388,169391],{"class":27,"line":59},[25,169385,31370],{"class":35},[25,169387,245],{"class":244},[25,169389,169390],{"class":45},"\"文件存在\"",[25,169392,251],{"class":244},[99,169394,169395],{},"读写文本：",[15,169397,169399],{"className":30449,"code":169398,"language":30451,"meta":20,"style":20},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[22,169400,169401,169413,169417,169434,169451],{"__ignoreMap":20},[25,169402,169403,169405,169407,169409,169411],{"class":27,"line":28},[25,169404,168382],{"class":244},[25,169406,290],{"class":240},[25,169408,108616],{"class":244},[25,169410,146867],{"class":45},[25,169412,251],{"class":244},[25,169414,169415],{"class":27,"line":39},[25,169416,2510],{"emptyLinePlaceholder":167},[25,169418,169419,169422,169424,169426,169428,169430,169432],{"class":27,"line":51},[25,169420,169421],{"class":244},"path.write_text(",[25,169423,145947],{"class":45},[25,169425,12545],{"class":244},[25,169427,146877],{"class":5326},[25,169429,290],{"class":240},[25,169431,146882],{"class":45},[25,169433,251],{"class":244},[25,169435,169436,169438,169440,169443,169445,169447,169449],{"class":27,"line":59},[25,169437,168565],{"class":244},[25,169439,290],{"class":240},[25,169441,169442],{"class":244}," path.read_text(",[25,169444,146877],{"class":5326},[25,169446,290],{"class":240},[25,169448,146882],{"class":45},[25,169450,251],{"class":244},[25,169452,169453,169455],{"class":27,"line":67},[25,169454,30486],{"class":35},[25,169456,168579],{"class":244},[182,169458,169460],{"id":169459},"_810-json文件","8.10 JSON文件",[99,169462,169463],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[15,169465,169467],{"className":30449,"code":169466,"language":30451,"meta":20,"style":20},"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",[22,169468,169469,169475,169479,169487,169497,169507,169515,169519,169523,169548],{"__ignoreMap":20},[25,169470,169471,169473],{"class":27,"line":28},[25,169472,30463],{"class":240},[25,169474,147162],{"class":244},[25,169476,169477],{"class":27,"line":39},[25,169478,2510],{"emptyLinePlaceholder":167},[25,169480,169481,169483,169485],{"class":27,"line":51},[25,169482,149552],{"class":244},[25,169484,290],{"class":240},[25,169486,15682],{"class":244},[25,169488,169489,169491,169493,169495],{"class":27,"line":59},[25,169490,147091],{"class":45},[25,169492,51508],{"class":244},[25,169494,149959],{"class":45},[25,169496,31537],{"class":244},[25,169498,169499,169501,169503,169505],{"class":27,"line":67},[25,169500,164608],{"class":45},[25,169502,51508],{"class":244},[25,169504,893],{"class":35},[25,169506,31537],{"class":244},[25,169508,169509,169511,169513],{"class":27,"line":75},[25,169510,164619],{"class":45},[25,169512,51508],{"class":244},[25,169514,164624],{"class":35},[25,169516,169517],{"class":27,"line":83},[25,169518,1676],{"class":244},[25,169520,169521],{"class":27,"line":91},[25,169522,2510],{"emptyLinePlaceholder":167},[25,169524,169525,169527,169529,169532,169534,169536,169538,169540,169542,169544,169546],{"class":27,"line":1429},[25,169526,156515],{"class":244},[25,169528,290],{"class":240},[25,169530,169531],{"class":244}," json.dumps(student, ",[25,169533,147208],{"class":5326},[25,169535,290],{"class":240},[25,169537,34058],{"class":35},[25,169539,12545],{"class":244},[25,169541,152083],{"class":5326},[25,169543,290],{"class":240},[25,169545,321],{"class":35},[25,169547,251],{"class":244},[25,169549,169550,169552],{"class":27,"line":1441},[25,169551,30486],{"class":35},[25,169553,164142],{"class":244},[99,169555,169556],{},"写入 JSON 文件：",[15,169558,169560],{"className":30449,"code":169559,"language":30451,"meta":20,"style":20},"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",[22,169561,169562,169568,169572,169580,169608,169636,169640,169644,169674],{"__ignoreMap":20},[25,169563,169564,169566],{"class":27,"line":28},[25,169565,30463],{"class":240},[25,169567,147162],{"class":244},[25,169569,169570],{"class":27,"line":39},[25,169571,2510],{"emptyLinePlaceholder":167},[25,169573,169574,169576,169578],{"class":27,"line":51},[25,169575,159787],{"class":244},[25,169577,290],{"class":240},[25,169579,55518],{"class":244},[25,169581,169582,169584,169586,169588,169590,169592,169594,169596,169598,169600,169602,169604,169606],{"class":27,"line":59},[25,169583,148456],{"class":244},[25,169585,62750],{"class":45},[25,169587,51508],{"class":244},[25,169589,149959],{"class":45},[25,169591,12545],{"class":244},[25,169593,69195],{"class":45},[25,169595,51508],{"class":244},[25,169597,893],{"class":35},[25,169599,12545],{"class":244},[25,169601,151543],{"class":45},[25,169603,51508],{"class":244},[25,169605,1232],{"class":35},[25,169607,5040],{"class":244},[25,169609,169610,169612,169614,169616,169618,169620,169622,169624,169626,169628,169630,169632,169634],{"class":27,"line":67},[25,169611,148456],{"class":244},[25,169613,62750],{"class":45},[25,169615,51508],{"class":244},[25,169617,151007],{"class":45},[25,169619,12545],{"class":244},[25,169621,69195],{"class":45},[25,169623,51508],{"class":244},[25,169625,868],{"class":35},[25,169627,12545],{"class":244},[25,169629,151543],{"class":45},[25,169631,51508],{"class":244},[25,169633,1054],{"class":35},[25,169635,5040],{"class":244},[25,169637,169638],{"class":27,"line":75},[25,169639,33317],{"class":244},[25,169641,169642],{"class":27,"line":83},[25,169643,2510],{"emptyLinePlaceholder":167},[25,169645,169646,169648,169650,169652,169654,169656,169658,169660,169662,169664,169666,169668,169670,169672],{"class":27,"line":91},[25,169647,107904],{"class":240},[25,169649,146862],{"class":35},[25,169651,245],{"class":244},[25,169653,151902],{"class":45},[25,169655,12545],{"class":244},[25,169657,152047],{"class":45},[25,169659,12545],{"class":244},[25,169661,146877],{"class":5326},[25,169663,290],{"class":240},[25,169665,146882],{"class":45},[25,169667,13824],{"class":244},[25,169669,31454],{"class":240},[25,169671,148224],{"class":5326},[25,169673,3849],{"class":244},[25,169675,169676,169679,169681,169683,169685,169687,169689,169691,169693,169695,169697],{"class":27,"line":1429},[25,169677,169678],{"class":244},"    json.dump(students, ",[25,169680,45425],{"class":5326},[25,169682,12545],{"class":244},[25,169684,147208],{"class":5326},[25,169686,290],{"class":240},[25,169688,34058],{"class":35},[25,169690,12545],{"class":244},[25,169692,152083],{"class":5326},[25,169694,290],{"class":240},[25,169696,321],{"class":35},[25,169698,251],{"class":244},[99,169700,169701],{},"读取 JSON 文件：",[15,169703,169705],{"className":30449,"code":169704,"language":30451,"meta":20,"style":20},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[22,169706,169707,169713,169717,169747,169759,169763],{"__ignoreMap":20},[25,169708,169709,169711],{"class":27,"line":28},[25,169710,30463],{"class":240},[25,169712,147162],{"class":244},[25,169714,169715],{"class":27,"line":39},[25,169716,2510],{"emptyLinePlaceholder":167},[25,169718,169719,169721,169723,169725,169727,169729,169731,169733,169735,169737,169739,169741,169743,169745],{"class":27,"line":51},[25,169720,107904],{"class":240},[25,169722,146862],{"class":35},[25,169724,245],{"class":244},[25,169726,151902],{"class":45},[25,169728,12545],{"class":244},[25,169730,146872],{"class":45},[25,169732,12545],{"class":244},[25,169734,146877],{"class":5326},[25,169736,290],{"class":240},[25,169738,146882],{"class":45},[25,169740,13824],{"class":244},[25,169742,31454],{"class":240},[25,169744,148224],{"class":5326},[25,169746,3849],{"class":244},[25,169748,169749,169751,169753,169755,169757],{"class":27,"line":59},[25,169750,153108],{"class":244},[25,169752,290],{"class":240},[25,169754,148235],{"class":244},[25,169756,45425],{"class":5326},[25,169758,251],{"class":244},[25,169760,169761],{"class":27,"line":67},[25,169762,2510],{"emptyLinePlaceholder":167},[25,169764,169765,169767],{"class":27,"line":75},[25,169766,30486],{"class":35},[25,169768,165066],{"class":244},[182,169770,169772],{"id":169771},"_811-csv文件","8.11 CSV文件",[99,169774,169775],{},"CSV 是逗号分隔值，常用于表格数据。",[99,169777,169778],{},"写入 CSV：",[15,169780,169782],{"className":30449,"code":169781,"language":30451,"meta":20,"style":20},"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",[22,169783,169784,169791,169795,169803,169821,169837,169853,169857,169861,169901,169915],{"__ignoreMap":20},[25,169785,169786,169788],{"class":27,"line":28},[25,169787,30463],{"class":240},[25,169789,169790],{"class":244}," csv\n",[25,169792,169793],{"class":27,"line":39},[25,169794,2510],{"emptyLinePlaceholder":167},[25,169796,169797,169799,169801],{"class":27,"line":51},[25,169798,159787],{"class":244},[25,169800,290],{"class":240},[25,169802,55518],{"class":244},[25,169804,169805,169808,169810,169812,169814,169816,169819],{"class":27,"line":59},[25,169806,169807],{"class":244},"    [",[25,169809,73170],{"class":45},[25,169811,12545],{"class":244},[25,169813,73203],{"class":45},[25,169815,12545],{"class":244},[25,169817,169818],{"class":45},"\"成绩\"",[25,169820,87907],{"class":244},[25,169822,169823,169825,169827,169829,169831,169833,169835],{"class":27,"line":67},[25,169824,169807],{"class":244},[25,169826,149959],{"class":45},[25,169828,12545],{"class":244},[25,169830,893],{"class":35},[25,169832,12545],{"class":244},[25,169834,1232],{"class":35},[25,169836,87907],{"class":244},[25,169838,169839,169841,169843,169845,169847,169849,169851],{"class":27,"line":75},[25,169840,169807],{"class":244},[25,169842,151007],{"class":45},[25,169844,12545],{"class":244},[25,169846,868],{"class":35},[25,169848,12545],{"class":244},[25,169850,1054],{"class":35},[25,169852,87907],{"class":244},[25,169854,169855],{"class":27,"line":83},[25,169856,33317],{"class":244},[25,169858,169859],{"class":27,"line":91},[25,169860,2510],{"emptyLinePlaceholder":167},[25,169862,169863,169865,169867,169869,169872,169874,169876,169878,169880,169882,169884,169886,169889,169891,169893,169895,169897,169899],{"class":27,"line":1429},[25,169864,107904],{"class":240},[25,169866,146862],{"class":35},[25,169868,245],{"class":244},[25,169870,169871],{"class":45},"\"students.csv\"",[25,169873,12545],{"class":244},[25,169875,152047],{"class":45},[25,169877,12545],{"class":244},[25,169879,146877],{"class":5326},[25,169881,290],{"class":240},[25,169883,146882],{"class":45},[25,169885,12545],{"class":244},[25,169887,169888],{"class":5326},"newline",[25,169890,290],{"class":240},[25,169892,7762],{"class":45},[25,169894,13824],{"class":244},[25,169896,31454],{"class":240},[25,169898,148224],{"class":5326},[25,169900,3849],{"class":244},[25,169902,169903,169906,169908,169911,169913],{"class":27,"line":1441},[25,169904,169905],{"class":244},"    writer ",[25,169907,290],{"class":240},[25,169909,169910],{"class":244}," csv.writer(",[25,169912,45425],{"class":5326},[25,169914,251],{"class":244},[25,169916,169917],{"class":27,"line":1723},[25,169918,169919],{"class":244},"    writer.writerows(students)\n",[99,169921,169922],{},"读取 CSV：",[15,169924,169926],{"className":30449,"code":169925,"language":30451,"meta":20,"style":20},"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",[22,169927,169928,169934,169938,169968,169982,169994],{"__ignoreMap":20},[25,169929,169930,169932],{"class":27,"line":28},[25,169931,30463],{"class":240},[25,169933,169790],{"class":244},[25,169935,169936],{"class":27,"line":39},[25,169937,2510],{"emptyLinePlaceholder":167},[25,169939,169940,169942,169944,169946,169948,169950,169952,169954,169956,169958,169960,169962,169964,169966],{"class":27,"line":51},[25,169941,107904],{"class":240},[25,169943,146862],{"class":35},[25,169945,245],{"class":244},[25,169947,169871],{"class":45},[25,169949,12545],{"class":244},[25,169951,146872],{"class":45},[25,169953,12545],{"class":244},[25,169955,146877],{"class":5326},[25,169957,290],{"class":240},[25,169959,146882],{"class":45},[25,169961,13824],{"class":244},[25,169963,31454],{"class":240},[25,169965,148224],{"class":5326},[25,169967,3849],{"class":244},[25,169969,169970,169973,169975,169978,169980],{"class":27,"line":59},[25,169971,169972],{"class":244},"    reader ",[25,169974,290],{"class":240},[25,169976,169977],{"class":244}," csv.reader(",[25,169979,45425],{"class":5326},[25,169981,251],{"class":244},[25,169983,169984,169986,169989,169991],{"class":27,"line":67},[25,169985,3311],{"class":240},[25,169987,169988],{"class":244}," row ",[25,169990,26114],{"class":240},[25,169992,169993],{"class":244}," reader:\n",[25,169995,169996,169998],{"class":27,"line":75},[25,169997,32522],{"class":35},[25,169999,170000],{"class":244},"(row)\n",[99,170002,170003],{},"使用字典写入：",[15,170005,170007],{"className":30449,"code":170006,"language":30451,"meta":20,"style":20},"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",[22,170008,170009,170015,170019,170027,170055,170083,170087,170091,170129,170150,170171,170176],{"__ignoreMap":20},[25,170010,170011,170013],{"class":27,"line":28},[25,170012,30463],{"class":240},[25,170014,169790],{"class":244},[25,170016,170017],{"class":27,"line":39},[25,170018,2510],{"emptyLinePlaceholder":167},[25,170020,170021,170023,170025],{"class":27,"line":51},[25,170022,159787],{"class":244},[25,170024,290],{"class":240},[25,170026,55518],{"class":244},[25,170028,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053],{"class":27,"line":59},[25,170030,148456],{"class":244},[25,170032,62750],{"class":45},[25,170034,51508],{"class":244},[25,170036,149959],{"class":45},[25,170038,12545],{"class":244},[25,170040,69195],{"class":45},[25,170042,51508],{"class":244},[25,170044,893],{"class":35},[25,170046,12545],{"class":244},[25,170048,151543],{"class":45},[25,170050,51508],{"class":244},[25,170052,1232],{"class":35},[25,170054,5040],{"class":244},[25,170056,170057,170059,170061,170063,170065,170067,170069,170071,170073,170075,170077,170079,170081],{"class":27,"line":67},[25,170058,148456],{"class":244},[25,170060,62750],{"class":45},[25,170062,51508],{"class":244},[25,170064,151007],{"class":45},[25,170066,12545],{"class":244},[25,170068,69195],{"class":45},[25,170070,51508],{"class":244},[25,170072,868],{"class":35},[25,170074,12545],{"class":244},[25,170076,151543],{"class":45},[25,170078,51508],{"class":244},[25,170080,1054],{"class":35},[25,170082,5040],{"class":244},[25,170084,170085],{"class":27,"line":75},[25,170086,33317],{"class":244},[25,170088,170089],{"class":27,"line":83},[25,170090,2510],{"emptyLinePlaceholder":167},[25,170092,170093,170095,170097,170099,170101,170103,170105,170107,170109,170111,170113,170115,170117,170119,170121,170123,170125,170127],{"class":27,"line":91},[25,170094,107904],{"class":240},[25,170096,146862],{"class":35},[25,170098,245],{"class":244},[25,170100,169871],{"class":45},[25,170102,12545],{"class":244},[25,170104,152047],{"class":45},[25,170106,12545],{"class":244},[25,170108,146877],{"class":5326},[25,170110,290],{"class":240},[25,170112,146882],{"class":45},[25,170114,12545],{"class":244},[25,170116,169888],{"class":5326},[25,170118,290],{"class":240},[25,170120,7762],{"class":45},[25,170122,13824],{"class":244},[25,170124,31454],{"class":240},[25,170126,148224],{"class":5326},[25,170128,3849],{"class":244},[25,170130,170131,170134,170136,170138,170140,170142,170144,170146,170148],{"class":27,"line":1429},[25,170132,170133],{"class":244},"    fieldnames ",[25,170135,290],{"class":240},[25,170137,52297],{"class":244},[25,170139,62750],{"class":45},[25,170141,12545],{"class":244},[25,170143,69195],{"class":45},[25,170145,12545],{"class":244},[25,170147,151543],{"class":45},[25,170149,33317],{"class":244},[25,170151,170152,170154,170156,170159,170161,170163,170166,170168],{"class":27,"line":1441},[25,170153,169905],{"class":244},[25,170155,290],{"class":240},[25,170157,170158],{"class":244}," csv.DictWriter(",[25,170160,45425],{"class":5326},[25,170162,12545],{"class":244},[25,170164,170165],{"class":5326},"fieldnames",[25,170167,290],{"class":240},[25,170169,170170],{"class":244},"fieldnames)\n",[25,170172,170173],{"class":27,"line":1723},[25,170174,170175],{"class":244},"    writer.writeheader()\n",[25,170177,170178],{"class":27,"line":1728},[25,170179,169919],{"class":244},[182,170181,170183],{"id":170182},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[99,170185,123363],{},[194,170187,170188,170191,170194],{},[106,170189,170190],{},"读取文本文件。",[106,170192,170193],{},"统计每个单词出现次数。",[106,170195,170196],{},"输出出现次数最多的前 10 个单词。",[99,170198,10145],{},[15,170200,170202],{"className":30449,"code":170201,"language":30451,"meta":20,"style":20},"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",[22,170203,170204,170214,170218,170231,170247,170251,170261,170270,170274,170286,170306,170315,170319,170337,170341,170371,170375,170391],{"__ignoreMap":20},[25,170205,170206,170208,170210,170212],{"class":27,"line":28},[25,170207,30808],{"class":240},[25,170209,108382],{"class":244},[25,170211,30463],{"class":240},[25,170213,108387],{"class":244},[25,170215,170216],{"class":27,"line":39},[25,170217,2510],{"emptyLinePlaceholder":167},[25,170219,170220,170222,170224,170226,170229],{"class":27,"line":51},[25,170221,168382],{"class":244},[25,170223,290],{"class":240},[25,170225,108616],{"class":244},[25,170227,170228],{"class":45},"\"article.txt\"",[25,170230,251],{"class":244},[25,170232,170233,170235,170237,170239,170241,170243,170245],{"class":27,"line":59},[25,170234,168565],{"class":244},[25,170236,290],{"class":240},[25,170238,169442],{"class":244},[25,170240,146877],{"class":5326},[25,170242,290],{"class":240},[25,170244,146882],{"class":45},[25,170246,251],{"class":244},[25,170248,170249],{"class":27,"line":67},[25,170250,2510],{"emptyLinePlaceholder":167},[25,170252,170253,170256,170258],{"class":27,"line":75},[25,170254,170255],{"class":244},"words ",[25,170257,290],{"class":240},[25,170259,170260],{"class":244}," content.lower().split()\n",[25,170262,170263,170266,170268],{"class":27,"line":83},[25,170264,170265],{"class":244},"counter ",[25,170267,290],{"class":240},[25,170269,87939],{"class":244},[25,170271,170272],{"class":27,"line":91},[25,170273,2510],{"emptyLinePlaceholder":167},[25,170275,170276,170278,170281,170283],{"class":27,"line":1429},[25,170277,3135],{"class":240},[25,170279,170280],{"class":244}," word ",[25,170282,26114],{"class":240},[25,170284,170285],{"class":244}," words:\n",[25,170287,170288,170291,170293,170296,170299,170301,170304],{"class":27,"line":1441},[25,170289,170290],{"class":244},"    word ",[25,170292,290],{"class":240},[25,170294,170295],{"class":244}," word.strip(",[25,170297,170298],{"class":45},"\".,!?;:",[25,170300,156566],{"class":35},[25,170302,170303],{"class":45},"'()[]\"",[25,170305,251],{"class":244},[25,170307,170308,170310,170312],{"class":27,"line":1723},[25,170309,3211],{"class":240},[25,170311,39001],{"class":240},[25,170313,170314],{"class":244}," word:\n",[25,170316,170317],{"class":27,"line":1728},[25,170318,148583],{"class":240},[25,170320,170321,170324,170326,170329,170331,170333,170335],{"class":27,"line":1734},[25,170322,170323],{"class":244},"    counter[word] ",[25,170325,290],{"class":240},[25,170327,170328],{"class":244}," counter.get(word, ",[25,170330,434],{"class":35},[25,170332,13824],{"class":244},[25,170334,724],{"class":240},[25,170336,55770],{"class":35},[25,170338,170339],{"class":27,"line":1739},[25,170340,2510],{"emptyLinePlaceholder":167},[25,170342,170343,170346,170348,170350,170353,170355,170357,170359,170361,170363,170365,170367,170369],{"class":27,"line":1753},[25,170344,170345],{"class":244},"items ",[25,170347,290],{"class":240},[25,170349,163675],{"class":35},[25,170351,170352],{"class":244},"(counter.items(), ",[25,170354,154017],{"class":5326},[25,170356,154020],{"class":240},[25,170358,154023],{"class":244},[25,170360,460],{"class":35},[25,170362,112273],{"class":244},[25,170364,163599],{"class":5326},[25,170366,290],{"class":240},[25,170368,31547],{"class":35},[25,170370,251],{"class":244},[25,170372,170373],{"class":27,"line":1758},[25,170374,2510],{"emptyLinePlaceholder":167},[25,170376,170377,170379,170382,170384,170387,170389],{"class":27,"line":1764},[25,170378,3135],{"class":240},[25,170380,170381],{"class":244}," word, count ",[25,170383,26114],{"class":240},[25,170385,170386],{"class":244}," items[:",[25,170388,689],{"class":35},[25,170390,165826],{"class":244},[25,170392,170393,170395],{"class":27,"line":1785},[25,170394,31370],{"class":35},[25,170396,170397],{"class":244},"(word, count)\n",[182,170399,170401],{"id":170400},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[15,170403,170405],{"className":30449,"code":170404,"language":30451,"meta":20,"style":20},"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",[22,170406,170407,170413,170423,170427,170439,170443,170447,170455,170465,170471,170475,170505,170515,170519,170523,170531,170561,170585,170589,170593,170601,170630,170635],{"__ignoreMap":20},[25,170408,170409,170411],{"class":27,"line":28},[25,170410,30463],{"class":240},[25,170412,147162],{"class":244},[25,170414,170415,170417,170419,170421],{"class":27,"line":39},[25,170416,30808],{"class":240},[25,170418,108382],{"class":244},[25,170420,30463],{"class":240},[25,170422,108387],{"class":244},[25,170424,170425],{"class":27,"line":51},[25,170426,2510],{"emptyLinePlaceholder":167},[25,170428,170429,170431,170433,170435,170437],{"class":27,"line":59},[25,170430,151895],{"class":35},[25,170432,13674],{"class":240},[25,170434,108616],{"class":244},[25,170436,151902],{"class":45},[25,170438,251],{"class":244},[25,170440,170441],{"class":27,"line":67},[25,170442,2510],{"emptyLinePlaceholder":167},[25,170444,170445],{"class":27,"line":75},[25,170446,2510],{"emptyLinePlaceholder":167},[25,170448,170449,170451,170453],{"class":27,"line":83},[25,170450,32018],{"class":240},[25,170452,151919],{"class":31},[25,170454,32024],{"class":244},[25,170456,170457,170459,170461,170463],{"class":27,"line":91},[25,170458,3211],{"class":240},[25,170460,39001],{"class":240},[25,170462,151930],{"class":35},[25,170464,151933],{"class":244},[25,170466,170467,170469],{"class":27,"line":1429},[25,170468,14862],{"class":240},[25,170470,51909],{"class":244},[25,170472,170473],{"class":27,"line":1441},[25,170474,2510],{"emptyLinePlaceholder":167},[25,170476,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495,170497,170499,170501,170503],{"class":27,"line":1723},[25,170478,34249],{"class":240},[25,170480,146862],{"class":35},[25,170482,245],{"class":244},[25,170484,151895],{"class":35},[25,170486,12545],{"class":244},[25,170488,146872],{"class":45},[25,170490,12545],{"class":244},[25,170492,146877],{"class":5326},[25,170494,290],{"class":240},[25,170496,146882],{"class":45},[25,170498,13824],{"class":244},[25,170500,31454],{"class":240},[25,170502,148224],{"class":5326},[25,170504,3849],{"class":244},[25,170506,170507,170509,170511,170513],{"class":27,"line":1728},[25,170508,14862],{"class":240},[25,170510,148235],{"class":244},[25,170512,45425],{"class":5326},[25,170514,251],{"class":244},[25,170516,170517],{"class":27,"line":1734},[25,170518,2510],{"emptyLinePlaceholder":167},[25,170520,170521],{"class":27,"line":1739},[25,170522,2510],{"emptyLinePlaceholder":167},[25,170524,170525,170527,170529],{"class":27,"line":1753},[25,170526,32018],{"class":240},[25,170528,152029],{"class":31},[25,170530,152032],{"class":244},[25,170532,170533,170535,170537,170539,170541,170543,170545,170547,170549,170551,170553,170555,170557,170559],{"class":27,"line":1758},[25,170534,34249],{"class":240},[25,170536,146862],{"class":35},[25,170538,245],{"class":244},[25,170540,151895],{"class":35},[25,170542,12545],{"class":244},[25,170544,152047],{"class":45},[25,170546,12545],{"class":244},[25,170548,146877],{"class":5326},[25,170550,290],{"class":240},[25,170552,146882],{"class":45},[25,170554,13824],{"class":244},[25,170556,31454],{"class":240},[25,170558,148224],{"class":5326},[25,170560,3849],{"class":244},[25,170562,170563,170565,170567,170569,170571,170573,170575,170577,170579,170581,170583],{"class":27,"line":1764},[25,170564,152068],{"class":244},[25,170566,45425],{"class":5326},[25,170568,12545],{"class":244},[25,170570,147208],{"class":5326},[25,170572,290],{"class":240},[25,170574,34058],{"class":35},[25,170576,12545],{"class":244},[25,170578,152083],{"class":5326},[25,170580,290],{"class":240},[25,170582,321],{"class":35},[25,170584,251],{"class":244},[25,170586,170587],{"class":27,"line":1785},[25,170588,2510],{"emptyLinePlaceholder":167},[25,170590,170591],{"class":27,"line":1790},[25,170592,2510],{"emptyLinePlaceholder":167},[25,170594,170595,170597,170599],{"class":27,"line":1804},[25,170596,159787],{"class":244},[25,170598,290],{"class":240},[25,170600,153113],{"class":244},[25,170602,170603,170606,170608,170610,170612,170614,170616,170618,170620,170622,170624,170626,170628],{"class":27,"line":1809},[25,170604,170605],{"class":244},"students.append({",[25,170607,62750],{"class":45},[25,170609,51508],{"class":244},[25,170611,149959],{"class":45},[25,170613,12545],{"class":244},[25,170615,69195],{"class":45},[25,170617,51508],{"class":244},[25,170619,893],{"class":35},[25,170621,12545],{"class":244},[25,170623,151543],{"class":45},[25,170625,51508],{"class":244},[25,170627,1232],{"class":35},[25,170629,165223],{"class":244},[25,170631,170632],{"class":27,"line":1838},[25,170633,170634],{"class":244},"save_students(students)\n",[25,170636,170637,170639,170641,170644],{"class":27,"line":1843},[25,170638,30486],{"class":35},[25,170640,245],{"class":244},[25,170642,170643],{"class":45},"\"保存成功\"",[25,170645,251],{"class":244},[182,170647,170649],{"id":170648},"_814-易错点","8.14 易错点",[194,170651,170652,170656,170662,170667,170674,170681],{},[106,170653,170654,168915],{},[22,170655,1038],{},[106,170657,170658,170659,28456],{},"读写中文要指定 ",[22,170660,170661],{},"encoding=\"utf-8\"",[106,170663,170664,170665,28456],{},"打开文件后要关闭，推荐使用 ",[22,170666,107904],{},[106,170668,170669,170670,170673],{},"读取大文件不要直接 ",[22,170671,170672],{},"read()"," 全部内容。",[106,170675,170676,170677,170680],{},"Windows 写 CSV 时建议加 ",[22,170678,170679],{},"newline=\"\"","，避免空行。",[106,170682,170683],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[182,170685,170687],{"id":170686},"_815-本章练习","8.15 本章练习",[194,170689,170690,170697,170702,170705,170708],{},[106,170691,170692,170693,170696],{},"写入一个 ",[22,170694,170695],{},"students.txt","，每行保存一个学生姓名。",[106,170698,104426,170699,170701],{},[22,170700,170695],{}," 并输出所有学生。",[106,170703,170704],{},"把学生列表保存为 JSON 文件。",[106,170706,170707],{},"从 JSON 文件读取学生数据，计算平均分。",[106,170709,170710,170711,170714,170715,170718],{},"写一个日志函数 ",[22,170712,170713],{},"write_log(message)","，每次调用向 ",[22,170716,170717],{},"app.log"," 追加一行。",[159,170720,170721],{},"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":20,"searchDepth":39,"depth":39,"links":170723},[170724,170725,170729,170730,170736,170737,170738,170739,170740,170741,170742,170743,170744,170745,170746],{"id":168235,"depth":39,"text":168236},{"id":168276,"depth":39,"text":168277,"children":170726},[170727,170728],{"id":168280,"depth":51,"text":168281},{"id":168314,"depth":51,"text":168315},{"id":168428,"depth":39,"text":168429},{"id":168521,"depth":39,"text":168522,"children":170731},[170732,170733,170734,170735],{"id":168525,"depth":51,"text":168526},{"id":168612,"depth":51,"text":168613},{"id":168682,"depth":51,"text":168683},{"id":168776,"depth":51,"text":168777},{"id":168846,"depth":39,"text":168847},{"id":168909,"depth":39,"text":168910},{"id":169070,"depth":39,"text":169071},{"id":169133,"depth":39,"text":169134},{"id":169249,"depth":39,"text":169250},{"id":169459,"depth":39,"text":169460},{"id":169771,"depth":39,"text":169772},{"id":170182,"depth":39,"text":170183},{"id":170400,"depth":39,"text":170401},{"id":170648,"depth":39,"text":170649},{"id":170686,"depth":39,"text":170687},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168227,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170753,"title":170754,"body":170755,"description":164,"extension":165,"meta":172941,"navigation":167,"path":172942,"seo":172943,"stem":172944,"__hash__":172945},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170756,"toc":172908},[170757,170760,170764,170767,170770,170862,170864,170883,170888,170892,170895,170898,170927,170934,170937,170941,170944,170973,170975,171027,171033,171086,171090,171188,171191,171258,171262,171319,171321,171327,171331,171336,171342,171433,171438,171442,171445,171523,171526,171564,171568,171686,171689,171693,171696,171741,171744,171748,171753,171759,171809,171812,171843,171847,171851,171881,171885,171920,171924,171959,171999,172003,172019,172022,172026,172030,172109,172113,172154,172158,172213,172217,172251,172255,172285,172294,172301,172307,172364,172367,172375,172378,172382,172389,172392,172398,172401,172418,172423,172427,172433,172446,172449,172486,172489,172500,172503,172517,172520,172534,172538,172545,172578,172581,172583,172589,172592,172596,172598,172604,172609,172782,172786,172849,172853,172877,172881,172905],[10,170758,170754],{"id":170759},"_9-异常模块与包",[182,170761,170763],{"id":170762},"_91-什么是异常","9.1 什么是异常",[99,170765,170766],{},"异常是程序运行过程中出现的错误。",[99,170768,170769],{},"常见异常：",[380,170771,170772,170781],{},[383,170773,170774],{},[386,170775,170776,170779],{},[389,170777,170778],{},"异常",[389,170780,25940],{},[427,170782,170783,170793,170803,170812,170822,170832,170842,170852],{},[386,170784,170785,170790],{},[432,170786,170787],{},[22,170788,170789],{},"NameError",[432,170791,170792],{},"使用了未定义变量",[386,170794,170795,170800],{},[432,170796,170797],{},[22,170798,170799],{},"TypeError",[432,170801,170802],{},"类型不匹配",[386,170804,170805,170809],{},[432,170806,170807],{},[22,170808,154905],{},[432,170810,170811],{},"值不合法",[386,170813,170814,170819],{},[432,170815,170816],{},[22,170817,170818],{},"IndexError",[432,170820,170821],{},"列表索引越界",[386,170823,170824,170829],{},[432,170825,170826],{},[22,170827,170828],{},"KeyError",[432,170830,170831],{},"字典 key 不存在",[386,170833,170834,170839],{},[432,170835,170836],{},[22,170837,170838],{},"FileNotFoundError",[432,170840,170841],{},"文件不存在",[386,170843,170844,170849],{},[432,170845,170846],{},[22,170847,170848],{},"ZeroDivisionError",[432,170850,170851],{},"除数为 0",[386,170853,170854,170859],{},[432,170855,170856],{},[22,170857,170858],{},"ImportError",[432,170860,170861],{},"导入失败",[99,170863,15245],{},[15,170865,170867],{"className":30449,"code":170866,"language":30451,"meta":20,"style":20},"num = int(\"abc\")\n",[22,170868,170869],{"__ignoreMap":20},[25,170870,170871,170873,170875,170877,170879,170881],{"class":27,"line":28},[25,170872,155858],{"class":244},[25,170874,290],{"class":240},[25,170876,2492],{"class":35},[25,170878,245],{"class":244},[25,170880,155951],{"class":45},[25,170882,251],{"class":244},[99,170884,170885,170886,28456],{},"会触发 ",[22,170887,154905],{},[182,170889,170891],{"id":170890},"_92-为什么要处理异常","9.2 为什么要处理异常",[99,170893,170894],{},"如果不处理异常，程序会直接终止。",[99,170896,170897],{},"例如用户输入年龄：",[15,170899,170901],{"className":30449,"code":170900,"language":30451,"meta":20,"style":20},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[22,170902,170903,170921],{"__ignoreMap":20},[25,170904,170905,170907,170909,170911,170913,170915,170917,170919],{"class":27,"line":28},[25,170906,146617],{"class":244},[25,170908,290],{"class":240},[25,170910,2492],{"class":35},[25,170912,245],{"class":244},[25,170914,53892],{"class":35},[25,170916,245],{"class":244},[25,170918,152465],{"class":45},[25,170920,30568],{"class":244},[25,170922,170923,170925],{"class":27,"line":39},[25,170924,30486],{"class":35},[25,170926,155832],{"class":244},[99,170928,170929,170930,170933],{},"用户输入 ",[22,170931,170932],{},"abc","，程序就会报错退出。",[99,170935,170936],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[182,170938,170940],{"id":170939},"_93-try-except","9.3 try except",[99,170942,170943],{},"基础语法：",[15,170945,170947],{"className":30449,"code":170946,"language":30451,"meta":20,"style":20},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[22,170948,170949,170956,170961,170968],{"__ignoreMap":20},[25,170950,170951,170954],{"class":27,"line":28},[25,170952,170953],{"class":240},"try",[25,170955,3849],{"class":244},[25,170957,170958],{"class":27,"line":39},[25,170959,170960],{"class":244},"    可能出错的代码\n",[25,170962,170963,170966],{"class":27,"line":51},[25,170964,170965],{"class":240},"except",[25,170967,3849],{"class":244},[25,170969,170970],{"class":27,"line":59},[25,170971,170972],{"class":244},"    出错后的处理代码\n",[99,170974,15245],{},[15,170976,170978],{"className":30449,"code":170977,"language":30451,"meta":20,"style":20},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[22,170979,170980,170986,171004,171010,171016],{"__ignoreMap":20},[25,170981,170982,170984],{"class":27,"line":28},[25,170983,170953],{"class":240},[25,170985,3849],{"class":244},[25,170987,170988,170990,170992,170994,170996,170998,171000,171002],{"class":27,"line":39},[25,170989,152457],{"class":244},[25,170991,290],{"class":240},[25,170993,2492],{"class":35},[25,170995,245],{"class":244},[25,170997,53892],{"class":35},[25,170999,245],{"class":244},[25,171001,152465],{"class":45},[25,171003,30568],{"class":244},[25,171005,171006,171008],{"class":27,"line":51},[25,171007,31370],{"class":35},[25,171009,155832],{"class":244},[25,171011,171012,171014],{"class":27,"line":59},[25,171013,170965],{"class":240},[25,171015,3849],{"class":244},[25,171017,171018,171020,171022,171025],{"class":27,"line":67},[25,171019,31370],{"class":35},[25,171021,245],{"class":244},[25,171023,171024],{"class":45},"\"年龄必须是数字\"",[25,171026,251],{"class":244},[99,171028,171029,171030,171032],{},"不建议裸写 ",[22,171031,170965],{},"，最好指定异常类型。",[15,171034,171036],{"className":30449,"code":171035,"language":30451,"meta":20,"style":20},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[22,171037,171038,171044,171062,171068,171076],{"__ignoreMap":20},[25,171039,171040,171042],{"class":27,"line":28},[25,171041,170953],{"class":240},[25,171043,3849],{"class":244},[25,171045,171046,171048,171050,171052,171054,171056,171058,171060],{"class":27,"line":39},[25,171047,152457],{"class":244},[25,171049,290],{"class":240},[25,171051,2492],{"class":35},[25,171053,245],{"class":244},[25,171055,53892],{"class":35},[25,171057,245],{"class":244},[25,171059,152465],{"class":45},[25,171061,30568],{"class":244},[25,171063,171064,171066],{"class":27,"line":51},[25,171065,31370],{"class":35},[25,171067,155832],{"class":244},[25,171069,171070,171072,171074],{"class":27,"line":59},[25,171071,170965],{"class":240},[25,171073,152297],{"class":35},[25,171075,3849],{"class":244},[25,171077,171078,171080,171082,171084],{"class":27,"line":67},[25,171079,31370],{"class":35},[25,171081,245],{"class":244},[25,171083,171024],{"class":45},[25,171085,251],{"class":244},[182,171087,171089],{"id":171088},"_94-捕获多个异常","9.4 捕获多个异常",[15,171091,171093],{"className":30449,"code":171092,"language":30451,"meta":20,"style":20},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[22,171094,171095,171101,171122,171142,171149,171157,171168,171177],{"__ignoreMap":20},[25,171096,171097,171099],{"class":27,"line":28},[25,171098,170953],{"class":240},[25,171100,3849],{"class":244},[25,171102,171103,171106,171108,171110,171112,171114,171116,171118,171120],{"class":27,"line":39},[25,171104,171105],{"class":244},"    nums ",[25,171107,290],{"class":240},[25,171109,52297],{"class":244},[25,171111,460],{"class":35},[25,171113,12545],{"class":244},[25,171115,321],{"class":35},[25,171117,12545],{"class":244},[25,171119,315],{"class":35},[25,171121,33317],{"class":244},[25,171123,171124,171127,171129,171131,171133,171135,171137,171140],{"class":27,"line":51},[25,171125,171126],{"class":244},"    index ",[25,171128,290],{"class":240},[25,171130,2492],{"class":35},[25,171132,245],{"class":244},[25,171134,53892],{"class":35},[25,171136,245],{"class":244},[25,171138,171139],{"class":45},"\"请输入索引:\"",[25,171141,30568],{"class":244},[25,171143,171144,171146],{"class":27,"line":59},[25,171145,31370],{"class":35},[25,171147,171148],{"class":244},"(nums[index])\n",[25,171150,171151,171153,171155],{"class":27,"line":67},[25,171152,170965],{"class":240},[25,171154,152297],{"class":35},[25,171156,3849],{"class":244},[25,171158,171159,171161,171163,171166],{"class":27,"line":75},[25,171160,31370],{"class":35},[25,171162,245],{"class":244},[25,171164,171165],{"class":45},"\"索引必须是整数\"",[25,171167,251],{"class":244},[25,171169,171170,171172,171175],{"class":27,"line":83},[25,171171,170965],{"class":240},[25,171173,171174],{"class":35}," IndexError",[25,171176,3849],{"class":244},[25,171178,171179,171181,171183,171186],{"class":27,"line":91},[25,171180,31370],{"class":35},[25,171182,245],{"class":244},[25,171184,171185],{"class":45},"\"索引越界\"",[25,171187,251],{"class":244},[99,171189,171190],{},"多个异常使用相同处理逻辑：",[15,171192,171194],{"className":30449,"code":171193,"language":30451,"meta":20,"style":20},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[22,171195,171196,171202,171220,171233,171247],{"__ignoreMap":20},[25,171197,171198,171200],{"class":27,"line":28},[25,171199,170953],{"class":240},[25,171201,3849],{"class":244},[25,171203,171204,171206,171208,171210,171212,171214,171216,171218],{"class":27,"line":39},[25,171205,45664],{"class":244},[25,171207,290],{"class":240},[25,171209,2492],{"class":35},[25,171211,245],{"class":244},[25,171213,53892],{"class":35},[25,171215,245],{"class":244},[25,171217,155867],{"class":45},[25,171219,30568],{"class":244},[25,171221,171222,171224,171226,171228,171230],{"class":27,"line":51},[25,171223,31370],{"class":35},[25,171225,245],{"class":244},[25,171227,689],{"class":35},[25,171229,156117],{"class":240},[25,171231,171232],{"class":244}," num)\n",[25,171234,171235,171237,171239,171241,171243,171245],{"class":27,"line":59},[25,171236,170965],{"class":240},[25,171238,1769],{"class":244},[25,171240,154905],{"class":35},[25,171242,12545],{"class":244},[25,171244,170848],{"class":35},[25,171246,30857],{"class":244},[25,171248,171249,171251,171253,171256],{"class":27,"line":67},[25,171250,31370],{"class":35},[25,171252,245],{"class":244},[25,171254,171255],{"class":45},"\"输入不合法\"",[25,171257,251],{"class":244},[182,171259,171261],{"id":171260},"_95-获取异常信息","9.5 获取异常信息",[15,171263,171265],{"className":30449,"code":171264,"language":30451,"meta":20,"style":20},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[22,171266,171267,171273,171287,171298],{"__ignoreMap":20},[25,171268,171269,171271],{"class":27,"line":28},[25,171270,170953],{"class":240},[25,171272,3849],{"class":244},[25,171274,171275,171277,171279,171281,171283,171285],{"class":27,"line":39},[25,171276,45664],{"class":244},[25,171278,290],{"class":240},[25,171280,2492],{"class":35},[25,171282,245],{"class":244},[25,171284,155951],{"class":45},[25,171286,251],{"class":244},[25,171288,171289,171291,171293,171295],{"class":27,"line":51},[25,171290,170965],{"class":240},[25,171292,152297],{"class":35},[25,171294,64675],{"class":240},[25,171296,171297],{"class":244}," e:\n",[25,171299,171300,171302,171304,171306,171309,171311,171313,171315,171317],{"class":27,"line":59},[25,171301,31370],{"class":35},[25,171303,245],{"class":244},[25,171305,296],{"class":240},[25,171307,171308],{"class":45},"\"出错了:",[25,171310,1139],{"class":35},[25,171312,318],{"class":244},[25,171314,1189],{"class":35},[25,171316,494],{"class":45},[25,171318,251],{"class":244},[99,171320,146528],{},[15,171322,171325],{"className":171323,"code":171324,"language":5297,"meta":20},[5295],"出错了:invalid literal for int() with base 10: 'abc'\n",[22,171326,171324],{"__ignoreMap":20},[182,171328,171330],{"id":171329},"_96-else和finally","9.6 else和finally",[99,171332,171333,171335],{},[22,171334,1812],{},"：没有异常时执行。",[99,171337,171338,171341],{},[22,171339,171340],{},"finally","：无论是否异常都会执行。",[15,171343,171345],{"className":30449,"code":171344,"language":30451,"meta":20,"style":20},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[22,171346,171347,171353,171371,171379,171389,171395,171416,171422],{"__ignoreMap":20},[25,171348,171349,171351],{"class":27,"line":28},[25,171350,170953],{"class":240},[25,171352,3849],{"class":244},[25,171354,171355,171357,171359,171361,171363,171365,171367,171369],{"class":27,"line":39},[25,171356,45664],{"class":244},[25,171358,290],{"class":240},[25,171360,2492],{"class":35},[25,171362,245],{"class":244},[25,171364,53892],{"class":35},[25,171366,245],{"class":244},[25,171368,155867],{"class":45},[25,171370,30568],{"class":244},[25,171372,171373,171375,171377],{"class":27,"line":51},[25,171374,170965],{"class":240},[25,171376,152297],{"class":35},[25,171378,3849],{"class":244},[25,171380,171381,171383,171385,171387],{"class":27,"line":59},[25,171382,31370],{"class":35},[25,171384,245],{"class":244},[25,171386,153285],{"class":45},[25,171388,251],{"class":244},[25,171390,171391,171393],{"class":27,"line":67},[25,171392,1812],{"class":240},[25,171394,3849],{"class":244},[25,171396,171397,171399,171401,171403,171406,171408,171410,171412,171414],{"class":27,"line":75},[25,171398,31370],{"class":35},[25,171400,245],{"class":244},[25,171402,296],{"class":240},[25,171404,171405],{"class":45},"\"输入正确:",[25,171407,1139],{"class":35},[25,171409,1776],{"class":244},[25,171411,1189],{"class":35},[25,171413,494],{"class":45},[25,171415,251],{"class":244},[25,171417,171418,171420],{"class":27,"line":83},[25,171419,171340],{"class":240},[25,171421,3849],{"class":244},[25,171423,171424,171426,171428,171431],{"class":27,"line":91},[25,171425,31370],{"class":35},[25,171427,245],{"class":244},[25,171429,171430],{"class":45},"\"程序结束\"",[25,171432,251],{"class":244},[99,171434,171435,171437],{},[22,171436,171340],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[182,171439,171441],{"id":171440},"_97-抛出异常","9.7 抛出异常",[99,171443,171444],{},"程序可以主动抛出异常。",[15,171446,171448],{"className":30449,"code":171447,"language":30451,"meta":20,"style":20},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[22,171449,171450,171459,171471,171484,171504,171508,171512],{"__ignoreMap":20},[25,171451,171452,171454,171457],{"class":27,"line":28},[25,171453,32018],{"class":240},[25,171455,171456],{"class":31}," set_age",[25,171458,161486],{"class":244},[25,171460,171461,171463,171465,171467,171469],{"class":27,"line":39},[25,171462,3211],{"class":240},[25,171464,15817],{"class":244},[25,171466,1153],{"class":240},[25,171468,4203],{"class":35},[25,171470,3849],{"class":244},[25,171472,171473,171475,171477,171479,171482],{"class":27,"line":51},[25,171474,103503],{"class":240},[25,171476,152297],{"class":35},[25,171478,245],{"class":244},[25,171480,171481],{"class":45},"\"年龄不能为负数\"",[25,171483,251],{"class":244},[25,171485,171486,171488,171490,171492,171494,171496,171498,171500,171502],{"class":27,"line":59},[25,171487,31370],{"class":35},[25,171489,245],{"class":244},[25,171491,296],{"class":240},[25,171493,162054],{"class":45},[25,171495,1139],{"class":35},[25,171497,70292],{"class":244},[25,171499,1189],{"class":35},[25,171501,494],{"class":45},[25,171503,251],{"class":244},[25,171505,171506],{"class":27,"line":67},[25,171507,2510],{"emptyLinePlaceholder":167},[25,171509,171510],{"class":27,"line":75},[25,171511,2510],{"emptyLinePlaceholder":167},[25,171513,171514,171517,171519,171521],{"class":27,"line":83},[25,171515,171516],{"class":244},"set_age(",[25,171518,775],{"class":240},[25,171520,460],{"class":35},[25,171522,251],{"class":244},[99,171524,171525],{},"调用者可以捕获：",[15,171527,171529],{"className":30449,"code":171528,"language":30451,"meta":20,"style":20},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[22,171530,171531,171537,171548,171558],{"__ignoreMap":20},[25,171532,171533,171535],{"class":27,"line":28},[25,171534,170953],{"class":240},[25,171536,3849],{"class":244},[25,171538,171539,171542,171544,171546],{"class":27,"line":39},[25,171540,171541],{"class":244},"    set_age(",[25,171543,775],{"class":240},[25,171545,460],{"class":35},[25,171547,251],{"class":244},[25,171549,171550,171552,171554,171556],{"class":27,"line":51},[25,171551,170965],{"class":240},[25,171553,152297],{"class":35},[25,171555,64675],{"class":240},[25,171557,171297],{"class":244},[25,171559,171560,171562],{"class":27,"line":59},[25,171561,31370],{"class":35},[25,171563,67070],{"class":244},[182,171565,171567],{"id":171566},"_98-自定义异常","9.8 自定义异常",[15,171569,171571],{"className":30449,"code":171570,"language":30451,"meta":20,"style":20},"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",[22,171572,171573,171587,171591,171595,171599,171607,171617,171628,171638,171642,171646,171652,171669,171680],{"__ignoreMap":20},[25,171574,171575,171577,171580,171582,171585],{"class":27,"line":28},[25,171576,14804],{"class":240},[25,171578,171579],{"class":31}," BalanceNotEnoughError",[25,171581,245],{"class":244},[25,171583,171584],{"class":35},"Exception",[25,171586,30857],{"class":244},[25,171588,171589],{"class":27,"line":39},[25,171590,149608],{"class":240},[25,171592,171593],{"class":27,"line":51},[25,171594,2510],{"emptyLinePlaceholder":167},[25,171596,171597],{"class":27,"line":59},[25,171598,2510],{"emptyLinePlaceholder":167},[25,171600,171601,171603,171605],{"class":27,"line":67},[25,171602,32018],{"class":240},[25,171604,150257],{"class":31},[25,171606,162883],{"class":244},[25,171608,171609,171611,171613,171615],{"class":27,"line":75},[25,171610,3211],{"class":240},[25,171612,150213],{"class":244},[25,171614,1203],{"class":240},[25,171616,162660],{"class":244},[25,171618,171619,171621,171624,171626],{"class":27,"line":83},[25,171620,103503],{"class":240},[25,171622,171623],{"class":244}," BalanceNotEnoughError(",[25,171625,150308],{"class":45},[25,171627,251],{"class":244},[25,171629,171630,171632,171634,171636],{"class":27,"line":91},[25,171631,4200],{"class":240},[25,171633,162890],{"class":244},[25,171635,775],{"class":240},[25,171637,150246],{"class":244},[25,171639,171640],{"class":27,"line":1429},[25,171641,2510],{"emptyLinePlaceholder":167},[25,171643,171644],{"class":27,"line":1441},[25,171645,2510],{"emptyLinePlaceholder":167},[25,171647,171648,171650],{"class":27,"line":1723},[25,171649,170953],{"class":240},[25,171651,3849],{"class":244},[25,171653,171654,171656,171658,171661,171663,171665,171667],{"class":27,"line":1728},[25,171655,162561],{"class":244},[25,171657,290],{"class":240},[25,171659,171660],{"class":244}," withdraw(",[25,171662,554],{"class":35},[25,171664,12545],{"class":244},[25,171666,1833],{"class":35},[25,171668,251],{"class":244},[25,171670,171671,171673,171676,171678],{"class":27,"line":1734},[25,171672,170965],{"class":240},[25,171674,171675],{"class":244}," BalanceNotEnoughError ",[25,171677,31454],{"class":240},[25,171679,171297],{"class":244},[25,171681,171682,171684],{"class":27,"line":1739},[25,171683,31370],{"class":35},[25,171685,67070],{"class":244},[99,171687,171688],{},"入门阶段大多数情况使用内置异常即可。",[182,171690,171692],{"id":171691},"_99-traceback","9.9 traceback",[99,171694,171695],{},"调试时可以输出完整异常堆栈。",[15,171697,171699],{"className":30449,"code":171698,"language":30451,"meta":20,"style":20},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[22,171700,171701,171708,171712,171718,171728,171736],{"__ignoreMap":20},[25,171702,171703,171705],{"class":27,"line":28},[25,171704,30463],{"class":240},[25,171706,171707],{"class":244}," traceback\n",[25,171709,171710],{"class":27,"line":39},[25,171711,2510],{"emptyLinePlaceholder":167},[25,171713,171714,171716],{"class":27,"line":51},[25,171715,170953],{"class":240},[25,171717,3849],{"class":244},[25,171719,171720,171722,171724,171726],{"class":27,"line":59},[25,171721,2095],{"class":35},[25,171723,245],{"class":244},[25,171725,155951],{"class":45},[25,171727,251],{"class":244},[25,171729,171730,171732,171734],{"class":27,"line":67},[25,171731,170965],{"class":240},[25,171733,152297],{"class":35},[25,171735,3849],{"class":244},[25,171737,171738],{"class":27,"line":75},[25,171739,171740],{"class":244},"    traceback.print_exc()\n",[99,171742,171743],{},"日志系统中常把异常堆栈记录到文件。",[182,171745,171747],{"id":171746},"_910-什么是模块","9.10 什么是模块",[99,171749,171750,171751,126054],{},"模块就是一个 ",[22,171752,146423],{},[99,171754,171755,171756,24726],{},"例如创建 ",[22,171757,171758],{},"my_math.py",[15,171760,171762],{"className":30449,"code":171761,"language":30451,"meta":20,"style":20},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[22,171763,171764,171772,171782,171786,171790,171799],{"__ignoreMap":20},[25,171765,171766,171768,171770],{"class":27,"line":28},[25,171767,32018],{"class":240},[25,171769,5319],{"class":31},[25,171771,151164],{"class":244},[25,171773,171774,171776,171778,171780],{"class":27,"line":39},[25,171775,4200],{"class":240},[25,171777,10979],{"class":244},[25,171779,724],{"class":240},[25,171781,151175],{"class":244},[25,171783,171784],{"class":27,"line":51},[25,171785,2510],{"emptyLinePlaceholder":167},[25,171787,171788],{"class":27,"line":59},[25,171789,2510],{"emptyLinePlaceholder":167},[25,171791,171792,171794,171797],{"class":27,"line":67},[25,171793,32018],{"class":240},[25,171795,171796],{"class":31}," sub",[25,171798,151164],{"class":244},[25,171800,171801,171803,171805,171807],{"class":27,"line":75},[25,171802,4200],{"class":240},[25,171804,10979],{"class":244},[25,171806,775],{"class":240},[25,171808,151175],{"class":244},[99,171810,171811],{},"在另一个文件中导入：",[15,171813,171815],{"className":30449,"code":171814,"language":30451,"meta":20,"style":20},"import my_math\n\nprint(my_math.add(1, 2))\n",[22,171816,171817,171824,171828],{"__ignoreMap":20},[25,171818,171819,171821],{"class":27,"line":28},[25,171820,30463],{"class":240},[25,171822,171823],{"class":244}," my_math\n",[25,171825,171826],{"class":27,"line":39},[25,171827,2510],{"emptyLinePlaceholder":167},[25,171829,171830,171832,171835,171837,171839,171841],{"class":27,"line":51},[25,171831,30486],{"class":35},[25,171833,171834],{"class":244},"(my_math.add(",[25,171836,460],{"class":35},[25,171838,12545],{"class":244},[25,171840,321],{"class":35},[25,171842,30568],{"class":244},[182,171844,171846],{"id":171845},"_911-import导入","9.11 import导入",[210,171848,171850],{"id":171849},"_9111-导入模块","9.11.1 导入模块",[15,171852,171854],{"className":30449,"code":171853,"language":30451,"meta":20,"style":20},"import random\n\nprint(random.randint(1, 10))\n",[22,171855,171856,171862,171866],{"__ignoreMap":20},[25,171857,171858,171860],{"class":27,"line":28},[25,171859,30463],{"class":240},[25,171861,45399],{"class":244},[25,171863,171864],{"class":27,"line":39},[25,171865,2510],{"emptyLinePlaceholder":167},[25,171867,171868,171870,171873,171875,171877,171879],{"class":27,"line":51},[25,171869,30486],{"class":35},[25,171871,171872],{"class":244},"(random.randint(",[25,171874,460],{"class":35},[25,171876,12545],{"class":244},[25,171878,689],{"class":35},[25,171880,30568],{"class":244},[210,171882,171884],{"id":171883},"_9112-导入指定内容","9.11.2 导入指定内容",[15,171886,171888],{"className":30449,"code":171887,"language":30451,"meta":20,"style":20},"from random import randint\n\nprint(randint(1, 10))\n",[22,171889,171890,171901,171905],{"__ignoreMap":20},[25,171891,171892,171894,171896,171898],{"class":27,"line":28},[25,171893,30808],{"class":240},[25,171895,57867],{"class":244},[25,171897,30463],{"class":240},[25,171899,171900],{"class":244}," randint\n",[25,171902,171903],{"class":27,"line":39},[25,171904,2510],{"emptyLinePlaceholder":167},[25,171906,171907,171909,171912,171914,171916,171918],{"class":27,"line":51},[25,171908,30486],{"class":35},[25,171910,171911],{"class":244},"(randint(",[25,171913,460],{"class":35},[25,171915,12545],{"class":244},[25,171917,689],{"class":35},[25,171919,30568],{"class":244},[210,171921,171923],{"id":171922},"_9113-起别名","9.11.3 起别名",[15,171925,171927],{"className":30449,"code":171926,"language":30451,"meta":20,"style":20},"import random as rd\n\nprint(rd.randint(1, 10))\n",[22,171928,171929,171940,171944],{"__ignoreMap":20},[25,171930,171931,171933,171935,171937],{"class":27,"line":28},[25,171932,30463],{"class":240},[25,171934,57867],{"class":244},[25,171936,31454],{"class":240},[25,171938,171939],{"class":244}," rd\n",[25,171941,171942],{"class":27,"line":39},[25,171943,2510],{"emptyLinePlaceholder":167},[25,171945,171946,171948,171951,171953,171955,171957],{"class":27,"line":51},[25,171947,30486],{"class":35},[25,171949,171950],{"class":244},"(rd.randint(",[25,171952,460],{"class":35},[25,171954,12545],{"class":244},[25,171956,689],{"class":35},[25,171958,30568],{"class":244},[15,171960,171962],{"className":30449,"code":171961,"language":30451,"meta":20,"style":20},"from random import randint as rint\n\nprint(rint(1, 10))\n",[22,171963,171964,171980,171984],{"__ignoreMap":20},[25,171965,171966,171968,171970,171972,171975,171977],{"class":27,"line":28},[25,171967,30808],{"class":240},[25,171969,57867],{"class":244},[25,171971,30463],{"class":240},[25,171973,171974],{"class":244}," randint ",[25,171976,31454],{"class":240},[25,171978,171979],{"class":244}," rint\n",[25,171981,171982],{"class":27,"line":39},[25,171983,2510],{"emptyLinePlaceholder":167},[25,171985,171986,171988,171991,171993,171995,171997],{"class":27,"line":51},[25,171987,30486],{"class":35},[25,171989,171990],{"class":244},"(rint(",[25,171992,460],{"class":35},[25,171994,12545],{"class":244},[25,171996,689],{"class":35},[25,171998,30568],{"class":244},[210,172000,172002],{"id":172001},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[15,172004,172006],{"className":30449,"code":172005,"language":30451,"meta":20,"style":20},"from random import *\n",[22,172007,172008],{"__ignoreMap":20},[25,172009,172010,172012,172014,172016],{"class":27,"line":28},[25,172011,30808],{"class":240},[25,172013,57867],{"class":244},[25,172015,30463],{"class":240},[25,172017,172018],{"class":240}," *\n",[99,172020,172021],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[182,172023,172025],{"id":172024},"_912-常用内置模块","9.12 常用内置模块",[210,172027,172029],{"id":172028},"_9121-random","9.12.1 random",[15,172031,172033],{"className":30449,"code":172032,"language":30451,"meta":20,"style":20},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[22,172034,172035,172041,172045,172059,172078],{"__ignoreMap":20},[25,172036,172037,172039],{"class":27,"line":28},[25,172038,30463],{"class":240},[25,172040,45399],{"class":244},[25,172042,172043],{"class":27,"line":39},[25,172044,2510],{"emptyLinePlaceholder":167},[25,172046,172047,172049,172051,172053,172055,172057],{"class":27,"line":51},[25,172048,30486],{"class":35},[25,172050,171872],{"class":244},[25,172052,460],{"class":35},[25,172054,12545],{"class":244},[25,172056,689],{"class":35},[25,172058,30568],{"class":244},[25,172060,172061,172063,172066,172068,172070,172072,172074,172076],{"class":27,"line":59},[25,172062,30486],{"class":35},[25,172064,172065],{"class":244},"(random.choice([",[25,172067,149959],{"class":45},[25,172069,12545],{"class":244},[25,172071,151007],{"class":45},[25,172073,12545],{"class":244},[25,172075,159802],{"class":45},[25,172077,33214],{"class":244},[25,172079,172080,172082,172085,172087,172089,172091,172093,172095,172097,172099,172101,172103,172105,172107],{"class":27,"line":67},[25,172081,30486],{"class":35},[25,172083,172084],{"class":244},"(random.sample([",[25,172086,460],{"class":35},[25,172088,12545],{"class":244},[25,172090,321],{"class":35},[25,172092,12545],{"class":244},[25,172094,315],{"class":35},[25,172096,12545],{"class":244},[25,172098,536],{"class":35},[25,172100,12545],{"class":244},[25,172102,562],{"class":35},[25,172104,112273],{"class":244},[25,172106,321],{"class":35},[25,172108,30568],{"class":244},[210,172110,172112],{"id":172111},"_9122-time","9.12.2 time",[15,172114,172116],{"className":30449,"code":172115,"language":30451,"meta":20,"style":20},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[22,172117,172118,172124,172128,172135,172143],{"__ignoreMap":20},[25,172119,172120,172122],{"class":27,"line":28},[25,172121,30463],{"class":240},[25,172123,31900],{"class":244},[25,172125,172126],{"class":27,"line":39},[25,172127,2510],{"emptyLinePlaceholder":167},[25,172129,172130,172132],{"class":27,"line":51},[25,172131,30486],{"class":35},[25,172133,172134],{"class":244},"(time.time())\n",[25,172136,172137,172139,172141],{"class":27,"line":59},[25,172138,95142],{"class":244},[25,172140,460],{"class":35},[25,172142,251],{"class":244},[25,172144,172145,172147,172149,172152],{"class":27,"line":67},[25,172146,30486],{"class":35},[25,172148,245],{"class":244},[25,172150,172151],{"class":45},"\"1秒后执行\"",[25,172153,251],{"class":244},[210,172155,172157],{"id":172156},"_9123-datetime","9.12.3 datetime",[15,172159,172161],{"className":30449,"code":172160,"language":30451,"meta":20,"style":20},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[22,172162,172163,172175,172179,172189,172196],{"__ignoreMap":20},[25,172164,172165,172167,172170,172172],{"class":27,"line":28},[25,172166,30808],{"class":240},[25,172168,172169],{"class":244}," datetime ",[25,172171,30463],{"class":240},[25,172173,172174],{"class":244}," datetime\n",[25,172176,172177],{"class":27,"line":39},[25,172178,2510],{"emptyLinePlaceholder":167},[25,172180,172181,172184,172186],{"class":27,"line":51},[25,172182,172183],{"class":244},"now ",[25,172185,290],{"class":240},[25,172187,172188],{"class":244}," datetime.now()\n",[25,172190,172191,172193],{"class":27,"line":59},[25,172192,30486],{"class":35},[25,172194,172195],{"class":244},"(now)\n",[25,172197,172198,172200,172203,172206,172208,172211],{"class":27,"line":67},[25,172199,30486],{"class":35},[25,172201,172202],{"class":244},"(now.strftime(",[25,172204,172205],{"class":45},"\"%Y-%m-",[25,172207,156762],{"class":35},[25,172209,172210],{"class":45}," %H:%M:%S\"",[25,172212,30568],{"class":244},[210,172214,172216],{"id":172215},"_9124-os","9.12.4 os",[15,172218,172220],{"className":30449,"code":172219,"language":30451,"meta":20,"style":20},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[22,172221,172222,172228,172232,172239],{"__ignoreMap":20},[25,172223,172224,172226],{"class":27,"line":28},[25,172225,30463],{"class":240},[25,172227,45376],{"class":244},[25,172229,172230],{"class":27,"line":39},[25,172231,2510],{"emptyLinePlaceholder":167},[25,172233,172234,172236],{"class":27,"line":51},[25,172235,30486],{"class":35},[25,172237,172238],{"class":244},"(os.getcwd())\n",[25,172240,172241,172243,172246,172249],{"class":27,"line":59},[25,172242,30486],{"class":35},[25,172244,172245],{"class":244},"(os.listdir(",[25,172247,172248],{"class":45},"\".\"",[25,172250,30568],{"class":244},[210,172252,172254],{"id":172253},"_9125-sys","9.12.5 sys",[15,172256,172258],{"className":30449,"code":172257,"language":30451,"meta":20,"style":20},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[22,172259,172260,172267,172271,172278],{"__ignoreMap":20},[25,172261,172262,172264],{"class":27,"line":28},[25,172263,30463],{"class":240},[25,172265,172266],{"class":244}," sys\n",[25,172268,172269],{"class":27,"line":39},[25,172270,2510],{"emptyLinePlaceholder":167},[25,172272,172273,172275],{"class":27,"line":51},[25,172274,30486],{"class":35},[25,172276,172277],{"class":244},"(sys.version)\n",[25,172279,172280,172282],{"class":27,"line":59},[25,172281,30486],{"class":35},[25,172283,172284],{"class":244},"(sys.path)\n",[182,172286,172288,172289,172291,172292,494],{"id":172287},"_913-if-name-main","9.13 if ",[392,172290,79881],{}," == \"",[392,172293,102129],{},[99,172295,172296,172297,172300],{},"模块被直接运行和被导入时，",[22,172298,172299],{},"__name__"," 的值不同。",[99,172302,172303,172304,24726],{},"创建 ",[22,172305,172306],{},"my_module.py",[15,172308,172310],{"className":30449,"code":172309,"language":30451,"meta":20,"style":20},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[22,172311,172312,172320,172330,172334,172338,172350],{"__ignoreMap":20},[25,172313,172314,172316,172318],{"class":27,"line":28},[25,172315,32018],{"class":240},[25,172317,5319],{"class":31},[25,172319,151164],{"class":244},[25,172321,172322,172324,172326,172328],{"class":27,"line":39},[25,172323,4200],{"class":240},[25,172325,10979],{"class":244},[25,172327,724],{"class":240},[25,172329,151175],{"class":244},[25,172331,172332],{"class":27,"line":51},[25,172333,2510],{"emptyLinePlaceholder":167},[25,172335,172336],{"class":27,"line":59},[25,172337,2510],{"emptyLinePlaceholder":167},[25,172339,172340,172342,172344,172346,172348],{"class":27,"line":67},[25,172341,1642],{"class":240},[25,172343,31291],{"class":35},[25,172345,101630],{"class":240},[25,172347,101633],{"class":45},[25,172349,3849],{"class":244},[25,172351,172352,172354,172356,172358,172360,172362],{"class":27,"line":75},[25,172353,31370],{"class":35},[25,172355,166671],{"class":244},[25,172357,460],{"class":35},[25,172359,12545],{"class":244},[25,172361,321],{"class":35},[25,172363,30568],{"class":244},[99,172365,172366],{},"作用：",[194,172368,172369,172372],{},[106,172370,172371],{},"直接运行该文件时，执行测试代码。",[106,172373,172374],{},"被其他文件导入时，不执行测试代码。",[99,172376,172377],{},"这是写模块时很常用的习惯。",[182,172379,172381],{"id":172380},"_914-包","9.14 包",[99,172383,172384,172385,172388],{},"包是包含 ",[22,172386,172387],{},"__init__.py"," 的目录，用于组织多个模块。",[99,172390,172391],{},"目录结构：",[15,172393,172396],{"className":172394,"code":172395,"language":5297,"meta":20},[5295],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[22,172397,172395],{"__ignoreMap":20},[99,172399,172400],{},"导入：",[15,172402,172404],{"className":30449,"code":172403,"language":30451,"meta":20,"style":20},"from utils.file_utils import read_file\n",[22,172405,172406],{"__ignoreMap":20},[25,172407,172408,172410,172413,172415],{"class":27,"line":28},[25,172409,30808],{"class":240},[25,172411,172412],{"class":244}," utils.file_utils ",[25,172414,30463],{"class":240},[25,172416,172417],{"class":244}," read_file\n",[99,172419,172420,172422],{},[22,172421,172387],{}," 可以为空，也可以写包初始化逻辑。",[182,172424,172426],{"id":172425},"_915-第三方包","9.15 第三方包",[99,172428,172429,172430,172432],{},"第三方包通过 ",[22,172431,23939],{}," 安装。",[15,172434,172436],{"className":17,"code":172435,"language":19,"meta":20,"style":20},"pip install requests\n",[22,172437,172438],{"__ignoreMap":20},[25,172439,172440,172442,172444],{"class":27,"line":28},[25,172441,23939],{"class":31},[25,172443,23942],{"class":45},[25,172445,146169],{"class":45},[99,172447,172448],{},"使用：",[15,172450,172452],{"className":30449,"code":172451,"language":30451,"meta":20,"style":20},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[22,172453,172454,172460,172464,172479],{"__ignoreMap":20},[25,172455,172456,172458],{"class":27,"line":28},[25,172457,30463],{"class":240},[25,172459,146169],{"class":244},[25,172461,172462],{"class":27,"line":39},[25,172463,2510],{"emptyLinePlaceholder":167},[25,172465,172466,172469,172471,172474,172477],{"class":27,"line":51},[25,172467,172468],{"class":244},"response ",[25,172470,290],{"class":240},[25,172472,172473],{"class":244}," requests.get(",[25,172475,172476],{"class":45},"\"https:\u002F\u002Fwww.example.com\"",[25,172478,251],{"class":244},[25,172480,172481,172483],{"class":27,"line":59},[25,172482,30486],{"class":35},[25,172484,172485],{"class":244},"(response.status_code)\n",[99,172487,172488],{},"查看已安装包：",[15,172490,172492],{"className":17,"code":172491,"language":19,"meta":20,"style":20},"pip list\n",[22,172493,172494],{"__ignoreMap":20},[25,172495,172496,172498],{"class":27,"line":28},[25,172497,23939],{"class":31},[25,172499,119026],{"class":45},[99,172501,172502],{},"导出项目依赖：",[15,172504,172505],{"className":17,"code":146364,"language":19,"meta":20,"style":20},[22,172506,172507],{"__ignoreMap":20},[25,172508,172509,172511,172513,172515],{"class":27,"line":28},[25,172510,23939],{"class":31},[25,172512,146373],{"class":45},[25,172514,26293],{"class":240},[25,172516,146378],{"class":45},[99,172518,172519],{},"安装项目依赖：",[15,172521,172522],{"className":17,"code":146384,"language":19,"meta":20,"style":20},[22,172523,172524],{"__ignoreMap":20},[25,172525,172526,172528,172530,172532],{"class":27,"line":28},[25,172527,23939],{"class":31},[25,172529,23942],{"class":45},[25,172531,119710],{"class":35},[25,172533,146378],{"class":45},[182,172535,172537],{"id":172536},"_916-模块搜索路径","9.16 模块搜索路径",[99,172539,172540,172541,172544],{},"Python 导入模块时会在 ",[22,172542,172543],{},"sys.path"," 中查找。",[15,172546,172548],{"className":30449,"code":172547,"language":30451,"meta":20,"style":20},"import sys\n\nfor path in sys.path:\n    print(path)\n",[22,172549,172550,172556,172560,172572],{"__ignoreMap":20},[25,172551,172552,172554],{"class":27,"line":28},[25,172553,30463],{"class":240},[25,172555,172266],{"class":244},[25,172557,172558],{"class":27,"line":39},[25,172559,2510],{"emptyLinePlaceholder":167},[25,172561,172562,172564,172567,172569],{"class":27,"line":51},[25,172563,3135],{"class":240},[25,172565,172566],{"class":244}," path ",[25,172568,26114],{"class":240},[25,172570,172571],{"class":244}," sys.path:\n",[25,172573,172574,172576],{"class":27,"line":59},[25,172575,31370],{"class":35},[25,172577,169300],{"class":244},[99,172579,172580],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[99,172582,157694],{},[15,172584,172587],{"className":172585,"code":172586,"language":5297,"meta":20},[5295],"random.py\njson.py\ntime.py\n",[22,172588,172586],{"__ignoreMap":20},[99,172590,172591],{},"这些文件名可能导致导入异常。",[182,172593,172595],{"id":172594},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[99,172597,172391],{},[15,172599,172602],{"className":172600,"code":172601,"language":5297,"meta":20},[5295],"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",[22,172603,172601],{"__ignoreMap":20},[99,172605,172606,24726],{},[22,172607,172608],{},"utils\u002Ffile_utils.py",[15,172610,172612],{"className":30449,"code":172611,"language":30451,"meta":20,"style":20},"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",[22,172613,172614,172620,172630,172634,172638,172648,172658,172666,172672,172676,172703,172713,172717,172721,172731,172757],{"__ignoreMap":20},[25,172615,172616,172618],{"class":27,"line":28},[25,172617,30463],{"class":240},[25,172619,147162],{"class":244},[25,172621,172622,172624,172626,172628],{"class":27,"line":39},[25,172623,30808],{"class":240},[25,172625,108382],{"class":244},[25,172627,30463],{"class":240},[25,172629,108387],{"class":244},[25,172631,172632],{"class":27,"line":51},[25,172633,2510],{"emptyLinePlaceholder":167},[25,172635,172636],{"class":27,"line":59},[25,172637,2510],{"emptyLinePlaceholder":167},[25,172639,172640,172642,172645],{"class":27,"line":67},[25,172641,32018],{"class":240},[25,172643,172644],{"class":31}," read_json",[25,172646,172647],{"class":244},"(path):\n",[25,172649,172650,172653,172655],{"class":27,"line":75},[25,172651,172652],{"class":244},"    path ",[25,172654,290],{"class":240},[25,172656,172657],{"class":244}," Path(path)\n",[25,172659,172660,172662,172664],{"class":27,"line":83},[25,172661,3211],{"class":240},[25,172663,39001],{"class":240},[25,172665,169381],{"class":244},[25,172667,172668,172670],{"class":27,"line":91},[25,172669,14862],{"class":240},[25,172671,51909],{"class":244},[25,172673,172674],{"class":27,"line":1429},[25,172675,2510],{"emptyLinePlaceholder":167},[25,172677,172678,172680,172682,172685,172687,172689,172691,172693,172695,172697,172699,172701],{"class":27,"line":1441},[25,172679,34249],{"class":240},[25,172681,146862],{"class":35},[25,172683,172684],{"class":244},"(path, ",[25,172686,146872],{"class":45},[25,172688,12545],{"class":244},[25,172690,146877],{"class":5326},[25,172692,290],{"class":240},[25,172694,146882],{"class":45},[25,172696,13824],{"class":244},[25,172698,31454],{"class":240},[25,172700,148224],{"class":5326},[25,172702,3849],{"class":244},[25,172704,172705,172707,172709,172711],{"class":27,"line":1723},[25,172706,14862],{"class":240},[25,172708,148235],{"class":244},[25,172710,45425],{"class":5326},[25,172712,251],{"class":244},[25,172714,172715],{"class":27,"line":1728},[25,172716,2510],{"emptyLinePlaceholder":167},[25,172718,172719],{"class":27,"line":1734},[25,172720,2510],{"emptyLinePlaceholder":167},[25,172722,172723,172725,172728],{"class":27,"line":1739},[25,172724,32018],{"class":240},[25,172726,172727],{"class":31}," write_json",[25,172729,172730],{"class":244},"(path, data):\n",[25,172732,172733,172735,172737,172739,172741,172743,172745,172747,172749,172751,172753,172755],{"class":27,"line":1753},[25,172734,34249],{"class":240},[25,172736,146862],{"class":35},[25,172738,172684],{"class":244},[25,172740,152047],{"class":45},[25,172742,12545],{"class":244},[25,172744,146877],{"class":5326},[25,172746,290],{"class":240},[25,172748,146882],{"class":45},[25,172750,13824],{"class":244},[25,172752,31454],{"class":240},[25,172754,148224],{"class":5326},[25,172756,3849],{"class":244},[25,172758,172759,172762,172764,172766,172768,172770,172772,172774,172776,172778,172780],{"class":27,"line":1758},[25,172760,172761],{"class":244},"        json.dump(data, ",[25,172763,45425],{"class":5326},[25,172765,12545],{"class":244},[25,172767,147208],{"class":5326},[25,172769,290],{"class":240},[25,172771,34058],{"class":35},[25,172773,12545],{"class":244},[25,172775,152083],{"class":5326},[25,172777,290],{"class":240},[25,172779,321],{"class":35},[25,172781,251],{"class":244},[99,172783,172784,24726],{},[22,172785,154678],{},[15,172787,172789],{"className":30449,"code":172788,"language":30451,"meta":20,"style":20},"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",[22,172790,172791,172802,172806,172819,172839],{"__ignoreMap":20},[25,172792,172793,172795,172797,172799],{"class":27,"line":28},[25,172794,30808],{"class":240},[25,172796,172412],{"class":244},[25,172798,30463],{"class":240},[25,172800,172801],{"class":244}," read_json, write_json\n",[25,172803,172804],{"class":27,"line":39},[25,172805,2510],{"emptyLinePlaceholder":167},[25,172807,172808,172810,172812,172815,172817],{"class":27,"line":51},[25,172809,159787],{"class":244},[25,172811,290],{"class":240},[25,172813,172814],{"class":244}," read_json(",[25,172816,151902],{"class":45},[25,172818,251],{"class":244},[25,172820,172821,172823,172825,172827,172829,172831,172833,172835,172837],{"class":27,"line":59},[25,172822,170605],{"class":244},[25,172824,62750],{"class":45},[25,172826,51508],{"class":244},[25,172828,149959],{"class":45},[25,172830,12545],{"class":244},[25,172832,151543],{"class":45},[25,172834,51508],{"class":244},[25,172836,1232],{"class":35},[25,172838,165223],{"class":244},[25,172840,172841,172844,172846],{"class":27,"line":67},[25,172842,172843],{"class":244},"write_json(",[25,172845,151902],{"class":45},[25,172847,172848],{"class":244},", students)\n",[182,172850,172852],{"id":172851},"_918-易错点","9.18 易错点",[194,172854,172855,172858,172863,172868,172871,172874],{},[106,172856,172857],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[106,172859,172860,172861,28456],{},"能指定异常类型就不要裸写 ",[22,172862,170965],{},[106,172864,172865,172867],{},[22,172866,171340],{}," 无论是否出错都会执行。",[106,172869,172870],{},"模块文件名不要和标准库重名。",[106,172872,172873],{},"导入自己写的模块时，要注意运行目录。",[106,172875,172876],{},"第三方包要安装到当前解释器或虚拟环境中。",[182,172878,172880],{"id":172879},"_919-本章练习","9.19 本章练习",[194,172882,172883,172886,172889,172895,172902],{},[106,172884,172885],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[106,172887,172888],{},"写函数读取文件，如果文件不存在则返回空字符串。",[106,172890,172303,172891,172894],{},[22,172892,172893],{},"math_utils.py","，实现加减乘除函数并导入使用。",[106,172896,172897,172898,172901],{},"创建一个 ",[22,172899,172900],{},"utils"," 包，把 JSON 读写函数放进去。",[106,172903,172904],{},"写一个程序，捕获除零异常和输入格式异常。",[159,172906,172907],{},"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":20,"searchDepth":39,"depth":39,"links":172909},[172910,172911,172912,172913,172914,172915,172916,172917,172918,172919,172920,172926,172933,172935,172936,172937,172938,172939,172940],{"id":170762,"depth":39,"text":170763},{"id":170890,"depth":39,"text":170891},{"id":170939,"depth":39,"text":170940},{"id":171088,"depth":39,"text":171089},{"id":171260,"depth":39,"text":171261},{"id":171329,"depth":39,"text":171330},{"id":171440,"depth":39,"text":171441},{"id":171566,"depth":39,"text":171567},{"id":171691,"depth":39,"text":171692},{"id":171746,"depth":39,"text":171747},{"id":171845,"depth":39,"text":171846,"children":172921},[172922,172923,172924,172925],{"id":171849,"depth":51,"text":171850},{"id":171883,"depth":51,"text":171884},{"id":171922,"depth":51,"text":171923},{"id":172001,"depth":51,"text":172002},{"id":172024,"depth":39,"text":172025,"children":172927},[172928,172929,172930,172931,172932],{"id":172028,"depth":51,"text":172029},{"id":172111,"depth":51,"text":172112},{"id":172156,"depth":51,"text":172157},{"id":172215,"depth":51,"text":172216},{"id":172253,"depth":51,"text":172254},{"id":172287,"depth":39,"text":172934},"9.13 if name == \"main\"",{"id":172380,"depth":39,"text":172381},{"id":172425,"depth":39,"text":172426},{"id":172536,"depth":39,"text":172537},{"id":172594,"depth":39,"text":172595},{"id":172851,"depth":39,"text":172852},{"id":172879,"depth":39,"text":172880},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170754,"description":164},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172947,"title":172948,"body":172949,"description":173112,"extension":165,"meta":173113,"navigation":167,"path":173114,"seo":173115,"stem":173116,"__hash__":173117},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172950,"toc":173107},[172951,172954,172957,172960,172971,172973,173047,173050,173053,173056,173059,173062,173065,173068,173071,173074,173077],[10,172952,172948],{"id":172953},"python教程",[99,172955,172956],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[99,172958,172959],{},"建议学习环境：",[194,172961,172962,172965,172968],{},[106,172963,172964],{},"Python 版本：Python 3.10 及以上。",[106,172966,172967],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[106,172969,172970],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[182,172972,117149],{"id":117149},[194,172974,172975,172981,172987,172993,172999,173005,173011,173017,173023,173029,173035,173041],{},[106,172976,172977],{},[481,172978,172980],{"href":172979},".\u002Fch1-Python","Python环境与第一个程序",[106,172982,172983],{},[481,172984,172986],{"href":172985},".\u002Fch2","基础语法、变量与字符串",[106,172988,172989],{},[481,172990,172992],{"href":172991},".\u002Fch3","判断语句",[106,172994,172995],{},[481,172996,172998],{"href":172997},".\u002Fch4","循环语句",[106,173000,173001],{},[481,173002,173004],{"href":173003},".\u002Fch5","函数基础",[106,173006,173007],{},[481,173008,173010],{"href":173009},".\u002Fch6","数据容器",[106,173012,173013],{},[481,173014,173016],{"href":173015},".\u002Fch7","函数进阶",[106,173018,173019],{},[481,173020,173022],{"href":173021},".\u002Fch8","文件操作",[106,173024,173025],{},[481,173026,173028],{"href":173027},".\u002Fch9","异常、模块与包",[106,173030,173031],{},[481,173032,173034],{"href":173033},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[106,173036,173037],{},[481,173038,173040],{"href":173039},".\u002Fch11","面向对象基础",[106,173042,173043],{},[481,173044,173046],{"href":173045},".\u002Fch12","综合案例与复习路线",[182,173048,173049],{"id":173049},"学习路线",[99,173051,173052],{},"第一阶段：能运行程序。",[99,173054,173055],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[99,173057,173058],{},"第二阶段：能组织数据。",[99,173060,173061],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[99,173063,173064],{},"第三阶段：能封装逻辑。",[99,173066,173067],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[99,173069,173070],{},"第四阶段：能做小项目。",[99,173072,173073],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[182,173075,173076],{"id":173076},"参考资料",[194,173078,173079,173086,173093,173100],{},[106,173080,173081,173082],{},"黑马程序员 Python 入门教程推荐：",[481,173083,173084],{"href":173084,"rel":173085},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23973],[106,173087,173088,173089],{},"Python 官方中文教程：",[481,173090,173091],{"href":173091,"rel":173092},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23973],[106,173094,173095,173096],{},"Python 标准库文档：",[481,173097,173098],{"href":173098,"rel":173099},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23973],[106,173101,173102,173103],{},"pyecharts 文档：",[481,173104,173105],{"href":173105,"rel":173106},"https:\u002F\u002Fpyecharts.org\u002F",[23973],{"title":20,"searchDepth":39,"depth":39,"links":173108},[173109,173110,173111],{"id":117149,"depth":39,"text":117149},{"id":173049,"depth":39,"text":173049},{"id":173076,"depth":39,"text":173076},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23488},"\u002Fwiki\u002F2024-10-10-python",{"title":172948,"description":173112},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398873]