[{"data":1,"prerenderedAt":173150},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch3-dian-ji-id-pei-zhi-yu-ji-xie-bi-xiao-zhun":3,"wiki-doc-nav":203},{"id":4,"title":5,"body":6,"description":196,"extension":197,"meta":198,"navigation":79,"path":199,"seo":200,"stem":201,"__hash__":202},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":8,"toc":192},"minimark",[9,14,19,28,31,108,111,115,118,188],[10,11,13],"h1",{"id":12},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[15,16,18],"h2",{"id":17},"_31-配置电机-id","3.1 配置电机 ID",[20,21,22,23,27],"p",{},"每个电机都需要唯一 ID。新电机默认常见为 ",[24,25,26],"code",{},"1","，需要改成机械臂链路里不冲突的编号。",[20,29,30],{},"方式一：用 LeRobot 命令逐步写入。",[32,33,38],"pre",{"className":34,"code":35,"language":36,"meta":37,"style":37},"language-bash shiki shiki-themes github-light github-dark","# 主臂舵机配置 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","bash","",[24,39,40,49,60,68,74,81,87,94,102],{"__ignoreMap":37},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sJ8bj","# 主臂舵机配置 ID\n",[41,50,52,56],{"class":43,"line":51},2,[41,53,55],{"class":54},"sScJk","lerobot-setup-motors",[41,57,59],{"class":58},"sj4cs"," \\\n",[41,61,63,66],{"class":43,"line":62},3,[41,64,65],{"class":58},"  --teleop.type=so101_leader",[41,67,59],{"class":58},[41,69,71],{"class":43,"line":70},4,[41,72,73],{"class":58},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[41,75,77],{"class":43,"line":76},5,[41,78,80],{"emptyLinePlaceholder":79},true,"\n",[41,82,84],{"class":43,"line":83},6,[41,85,86],{"class":47},"# 从臂舵机配置 ID\n",[41,88,90,92],{"class":43,"line":89},7,[41,91,55],{"class":54},[41,93,59],{"class":58},[41,95,97,100],{"class":43,"line":96},8,[41,98,99],{"class":58},"  --robot.type=so101_follower",[41,101,59],{"class":58},[41,103,105],{"class":43,"line":104},9,[41,106,107],{"class":58},"  --robot.port=\u002Fdev\u002FttyACM1\n",[20,109,110],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[15,112,114],{"id":113},"_32-机械臂校准","3.2 机械臂校准",[20,116,117],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[32,119,121],{"className":34,"code":120,"language":36,"meta":37,"style":37},"# 主臂校准\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",[24,122,123,128,135,141,148,153,157,162,168,174,182],{"__ignoreMap":37},[41,124,125],{"class":43,"line":44},[41,126,127],{"class":47},"# 主臂校准\n",[41,129,130,133],{"class":43,"line":51},[41,131,132],{"class":54},"lerobot-calibrate",[41,134,59],{"class":58},[41,136,137,139],{"class":43,"line":62},[41,138,65],{"class":58},[41,140,59],{"class":58},[41,142,143,146],{"class":43,"line":70},[41,144,145],{"class":58},"  --teleop.port=\u002Fdev\u002FttyACM0",[41,147,59],{"class":58},[41,149,150],{"class":43,"line":76},[41,151,152],{"class":58},"  --teleop.id=my_awesome_leader_arm\n",[41,154,155],{"class":43,"line":83},[41,156,80],{"emptyLinePlaceholder":79},[41,158,159],{"class":43,"line":89},[41,160,161],{"class":47},"# 从臂校准\n",[41,163,164,166],{"class":43,"line":96},[41,165,132],{"class":54},[41,167,59],{"class":58},[41,169,170,172],{"class":43,"line":104},[41,171,99],{"class":58},[41,173,59],{"class":58},[41,175,177,180],{"class":43,"line":176},10,[41,178,179],{"class":58},"  --robot.port=\u002Fdev\u002FttyACM1",[41,181,59],{"class":58},[41,183,185],{"class":43,"line":184},11,[41,186,187],{"class":58},"  --robot.id=my_awesome_follower_arm\n",[189,190,191],"style",{},"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":37,"searchDepth":51,"depth":51,"links":193},[194,195],{"id":17,"depth":51,"text":18},{"id":113,"depth":51,"text":114},null,"md",{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":5,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",[204,5300,6408,7828,10817,12168,13657,14746,23509,23521,24118,24144,24268,24509,24574,24592,24605,24652,24776,24911,25110,25290,25495,25631,25726,25763,25776,26086,26827,27535,27556,28576,30207,30358,30371,30383,30684,50496,50511,50528,50561,53433,76781,92926,92947,93060,93181,93951,94614,94975,95013,95119,95219,95262,95288,95349,97003,97104,97129,97620,98120,99200,99483,100225,100727,100739,102755,104419,105922,107620,109537,111456,113478,116948,117380,117843,118592,121536,121884,121906,122262,125569,125581,125984,126007,126154,126321,126526,126827,127384,128041,129972,131570,132219,133713,135144,136379,138073,139825,142235,142351,143286,143497,144382,145617,145845,145858,147013,149425,151793,155114,157591,159235,161012,163025,166077,168257,170784,172978],{"id":205,"title":206,"body":207,"description":37,"extension":197,"meta":5295,"navigation":79,"path":5296,"seo":5297,"stem":5298,"__hash__":5299},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":208,"toc":5267},[209,212,216,219,223,236,240,245,248,251,254,257,260,290,294,297,300,303,306,357,361,380,382,396,399,407,410,1272,1279,1296,1300,1386,1390,1396,1482,1486,1524,1528,1592,1596,1600,1607,1618,1622,1627,1631,1636,1640,1645,1649,1653,1658,1927,1932,2070,2075,2331,2334,2342,2346,2351,2454,2457,2762,2771,2872,2875,2878,2881,2884,3144,3149,3289,3292,3471,3474,3602,3605,3757,3761,3766,3769,3780,3788,3791,3898,3902,3906,3911,3961,3966,3971,3995,4000,4053,4056,4061,4238,4243,4528,4533,4930,4934,4939,4996,5001,5009,5012,5152,5155,5264],[10,210,206],{"id":211},"_1基础入门",[15,213,215],{"id":214},"_11注释","1.1注释",[20,217,218],{},"\u002F\u002F或者\u002F* *\u002F",[15,220,222],{"id":221},"_12命名","1.2命名",[224,225,226,230,233],"ol",{},[227,228,229],"li",{},"字母数字下划线",[227,231,232],{},"开头必须是字母或_",[227,234,235],{},"不能使用关键词",[15,237,239],{"id":238},"_13数据类型","1.3数据类型",[241,242,244],"h3",{"id":243},"_131整形","1.3.1整形",[20,246,247],{},"short 短整形 2",[20,249,250],{},"int 整形 4",[20,252,253],{},"long 长整形 win4 linux32位4 linux64位8",[20,255,256],{},"long long 长长整形 8",[20,258,259],{},"利用sizeof可以求数据类型占用的内存空间大小",[32,261,265],{"className":262,"code":263,"language":264,"meta":37,"style":37},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[24,266,267,283],{"__ignoreMap":37},[41,268,269,273,277,280],{"class":43,"line":44},[41,270,272],{"class":271},"szBVR","sizeof",[41,274,276],{"class":275},"sVt8B","(",[41,278,279],{"class":271},"int",[41,281,282],{"class":275},")\n",[41,284,285,287],{"class":43,"line":51},[41,286,272],{"class":271},[41,288,289],{"class":275},"(num)\n",[241,291,293],{"id":292},"_132浮点型","1.3.2浮点型",[20,295,296],{},"float 单精度 4节 7位有效数字",[20,298,299],{},"double 双精度 8节 15-16有效数字",[20,301,302],{},"默认情况下，输出一个小数，会显示6位有效数字",[20,304,305],{},"注意点：",[32,307,309],{"className":262,"code":308,"language":264,"meta":37,"style":37},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[24,310,311,334],{"__ignoreMap":37},[41,312,313,316,319,322,325,328,331],{"class":43,"line":44},[41,314,315],{"class":271},"float",[41,317,318],{"class":275}," f1",[41,320,321],{"class":271},"=",[41,323,324],{"class":58},"3.14",[41,326,327],{"class":271},"f",[41,329,330],{"class":275},";",[41,332,333],{"class":47}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[41,335,336,338,341,343,346,349,352,354],{"class":43,"line":51},[41,337,315],{"class":271},[41,339,340],{"class":275}," f2",[41,342,321],{"class":271},[41,344,345],{"class":58},"3",[41,347,348],{"class":271},"e",[41,350,351],{"class":58},"2",[41,353,330],{"class":275},[41,355,356],{"class":47}," \u002F\u002F科学记数法\n",[241,358,360],{"id":359},"_133字符型","1.3.3字符型",[32,362,364],{"className":262,"code":363,"language":264,"meta":37,"style":37},"char ch='a'\n",[24,365,366],{"__ignoreMap":37},[41,367,368,371,374,376],{"class":43,"line":44},[41,369,370],{"class":271},"char",[41,372,373],{"class":275}," ch",[41,375,321],{"class":271},[41,377,379],{"class":378},"sZZnC","'a'\n",[20,381,305],{},[224,383,384,387,390,393],{},[227,385,386],{},"在显示字符型变量时，只能单引号，双引号x",[227,388,389],{},"单引号内只能一个字符，不能字符串",[227,391,392],{},"c和c++字符型变量只占用一个字符",[227,394,395],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[20,397,398],{},"ASCII码大致由以下两部分组成：",[224,400,401,404],{},[227,402,403],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[227,405,406],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[20,408,409],{},"ASCII码表格：",[411,412,413,457],"table",{},[414,415,416],"thead",{},[417,418,419,427,432,436,441,445,449,453],"tr",{},[420,421,422,426],"th",{},[423,424,425],"strong",{},"ASCII","值",[420,428,429],{},[423,430,431],{},"控制字符",[420,433,434,426],{},[423,435,425],{},[420,437,438],{},[423,439,440],{},"字符",[420,442,443,426],{},[423,444,425],{},[420,446,447],{},[423,448,440],{},[420,450,451,426],{},[423,452,425],{},[420,454,455],{},[423,456,440],{},[458,459,460,487,512,537,562,588,613,638,664,689,715,741,767,792,818,844,870,894,919,944,969,994,1019,1044,1069,1094,1119,1145,1170,1195,1220,1246],"tbody",{},[417,461,462,466,469,472,475,478,481,484],{},[463,464,465],"td",{},"0",[463,467,468],{},"NUT",[463,470,471],{},"32",[463,473,474],{},"(space)",[463,476,477],{},"64",[463,479,480],{},"@",[463,482,483],{},"96",[463,485,486],{},"、",[417,488,489,491,494,497,500,503,506,509],{},[463,490,26],{},[463,492,493],{},"SOH",[463,495,496],{},"33",[463,498,499],{},"!",[463,501,502],{},"65",[463,504,505],{},"A",[463,507,508],{},"97",[463,510,511],{},"a",[417,513,514,516,519,522,525,528,531,534],{},[463,515,351],{},[463,517,518],{},"STX",[463,520,521],{},"34",[463,523,524],{},"\"",[463,526,527],{},"66",[463,529,530],{},"B",[463,532,533],{},"98",[463,535,536],{},"b",[417,538,539,541,544,547,550,553,556,559],{},[463,540,345],{},[463,542,543],{},"ETX",[463,545,546],{},"35",[463,548,549],{},"#",[463,551,552],{},"67",[463,554,555],{},"C",[463,557,558],{},"99",[463,560,561],{},"c",[417,563,564,567,570,573,576,579,582,585],{},[463,565,566],{},"4",[463,568,569],{},"EOT",[463,571,572],{},"36",[463,574,575],{},"$",[463,577,578],{},"68",[463,580,581],{},"D",[463,583,584],{},"100",[463,586,587],{},"d",[417,589,590,593,596,599,602,605,608,611],{},[463,591,592],{},"5",[463,594,595],{},"ENQ",[463,597,598],{},"37",[463,600,601],{},"%",[463,603,604],{},"69",[463,606,607],{},"E",[463,609,610],{},"101",[463,612,348],{},[417,614,615,618,621,624,627,630,633,636],{},[463,616,617],{},"6",[463,619,620],{},"ACK",[463,622,623],{},"38",[463,625,626],{},"&",[463,628,629],{},"70",[463,631,632],{},"F",[463,634,635],{},"102",[463,637,327],{},[417,639,640,643,646,649,652,655,658,661],{},[463,641,642],{},"7",[463,644,645],{},"BEL",[463,647,648],{},"39",[463,650,651],{},",",[463,653,654],{},"71",[463,656,657],{},"G",[463,659,660],{},"103",[463,662,663],{},"g",[417,665,666,669,672,675,677,680,683,686],{},[463,667,668],{},"8",[463,670,671],{},"BS",[463,673,674],{},"40",[463,676,276],{},[463,678,679],{},"72",[463,681,682],{},"H",[463,684,685],{},"104",[463,687,688],{},"h",[417,690,691,694,697,700,703,706,709,712],{},[463,692,693],{},"9",[463,695,696],{},"HT",[463,698,699],{},"41",[463,701,702],{},")",[463,704,705],{},"73",[463,707,708],{},"I",[463,710,711],{},"105",[463,713,714],{},"i",[417,716,717,720,723,726,729,732,735,738],{},[463,718,719],{},"10",[463,721,722],{},"LF",[463,724,725],{},"42",[463,727,728],{},"*",[463,730,731],{},"74",[463,733,734],{},"J",[463,736,737],{},"106",[463,739,740],{},"j",[417,742,743,746,749,752,755,758,761,764],{},[463,744,745],{},"11",[463,747,748],{},"VT",[463,750,751],{},"43",[463,753,754],{},"+",[463,756,757],{},"75",[463,759,760],{},"K",[463,762,763],{},"107",[463,765,766],{},"k",[417,768,769,772,775,778,780,783,786,789],{},[463,770,771],{},"12",[463,773,774],{},"FF",[463,776,777],{},"44",[463,779,651],{},[463,781,782],{},"76",[463,784,785],{},"L",[463,787,788],{},"108",[463,790,791],{},"l",[417,793,794,797,800,803,806,809,812,815],{},[463,795,796],{},"13",[463,798,799],{},"CR",[463,801,802],{},"45",[463,804,805],{},"-",[463,807,808],{},"77",[463,810,811],{},"M",[463,813,814],{},"109",[463,816,817],{},"m",[417,819,820,823,826,829,832,835,838,841],{},[463,821,822],{},"14",[463,824,825],{},"SO",[463,827,828],{},"46",[463,830,831],{},".",[463,833,834],{},"78",[463,836,837],{},"N",[463,839,840],{},"110",[463,842,843],{},"n",[417,845,846,849,852,855,858,861,864,867],{},[463,847,848],{},"15",[463,850,851],{},"SI",[463,853,854],{},"47",[463,856,857],{},"\u002F",[463,859,860],{},"79",[463,862,863],{},"O",[463,865,866],{},"111",[463,868,869],{},"o",[417,871,872,875,878,881,883,886,889,892],{},[463,873,874],{},"16",[463,876,877],{},"DLE",[463,879,880],{},"48",[463,882,465],{},[463,884,885],{},"80",[463,887,888],{},"P",[463,890,891],{},"112",[463,893,20],{},[417,895,896,899,902,905,907,910,913,916],{},[463,897,898],{},"17",[463,900,901],{},"DCI",[463,903,904],{},"49",[463,906,26],{},[463,908,909],{},"81",[463,911,912],{},"Q",[463,914,915],{},"113",[463,917,918],{},"q",[417,920,921,924,927,930,932,935,938,941],{},[463,922,923],{},"18",[463,925,926],{},"DC2",[463,928,929],{},"50",[463,931,351],{},[463,933,934],{},"82",[463,936,937],{},"R",[463,939,940],{},"114",[463,942,943],{},"r",[417,945,946,949,952,955,957,960,963,966],{},[463,947,948],{},"19",[463,950,951],{},"DC3",[463,953,954],{},"51",[463,956,345],{},[463,958,959],{},"83",[463,961,962],{},"S",[463,964,965],{},"115",[463,967,968],{},"s",[417,970,971,974,977,980,982,985,988,991],{},[463,972,973],{},"20",[463,975,976],{},"DC4",[463,978,979],{},"52",[463,981,566],{},[463,983,984],{},"84",[463,986,987],{},"T",[463,989,990],{},"116",[463,992,993],{},"t",[417,995,996,999,1002,1005,1007,1010,1013,1016],{},[463,997,998],{},"21",[463,1000,1001],{},"NAK",[463,1003,1004],{},"53",[463,1006,592],{},[463,1008,1009],{},"85",[463,1011,1012],{},"U",[463,1014,1015],{},"117",[463,1017,1018],{},"u",[417,1020,1021,1024,1027,1030,1032,1035,1038,1041],{},[463,1022,1023],{},"22",[463,1025,1026],{},"SYN",[463,1028,1029],{},"54",[463,1031,617],{},[463,1033,1034],{},"86",[463,1036,1037],{},"V",[463,1039,1040],{},"118",[463,1042,1043],{},"v",[417,1045,1046,1049,1052,1055,1057,1060,1063,1066],{},[463,1047,1048],{},"23",[463,1050,1051],{},"TB",[463,1053,1054],{},"55",[463,1056,642],{},[463,1058,1059],{},"87",[463,1061,1062],{},"W",[463,1064,1065],{},"119",[463,1067,1068],{},"w",[417,1070,1071,1074,1077,1080,1082,1085,1088,1091],{},[463,1072,1073],{},"24",[463,1075,1076],{},"CAN",[463,1078,1079],{},"56",[463,1081,668],{},[463,1083,1084],{},"88",[463,1086,1087],{},"X",[463,1089,1090],{},"120",[463,1092,1093],{},"x",[417,1095,1096,1099,1102,1105,1107,1110,1113,1116],{},[463,1097,1098],{},"25",[463,1100,1101],{},"EM",[463,1103,1104],{},"57",[463,1106,693],{},[463,1108,1109],{},"89",[463,1111,1112],{},"Y",[463,1114,1115],{},"121",[463,1117,1118],{},"y",[417,1120,1121,1124,1127,1130,1133,1136,1139,1142],{},[463,1122,1123],{},"26",[463,1125,1126],{},"SUB",[463,1128,1129],{},"58",[463,1131,1132],{},":",[463,1134,1135],{},"90",[463,1137,1138],{},"Z",[463,1140,1141],{},"122",[463,1143,1144],{},"z",[417,1146,1147,1150,1153,1156,1158,1161,1164,1167],{},[463,1148,1149],{},"27",[463,1151,1152],{},"ESC",[463,1154,1155],{},"59",[463,1157,330],{},[463,1159,1160],{},"91",[463,1162,1163],{},"[",[463,1165,1166],{},"123",[463,1168,1169],{},"{",[417,1171,1172,1175,1178,1181,1184,1187,1189,1192],{},[463,1173,1174],{},"28",[463,1176,1177],{},"FS",[463,1179,1180],{},"60",[463,1182,1183],{},"\u003C",[463,1185,1186],{},"92",[463,1188,857],{},[463,1190,1191],{},"124",[463,1193,1194],{},"|",[417,1196,1197,1200,1203,1206,1208,1211,1214,1217],{},[463,1198,1199],{},"29",[463,1201,1202],{},"GS",[463,1204,1205],{},"61",[463,1207,321],{},[463,1209,1210],{},"93",[463,1212,1213],{},"]",[463,1215,1216],{},"125",[463,1218,1219],{},"}",[417,1221,1222,1225,1228,1231,1234,1237,1240,1243],{},[463,1223,1224],{},"30",[463,1226,1227],{},"RS",[463,1229,1230],{},"62",[463,1232,1233],{},">",[463,1235,1236],{},"94",[463,1238,1239],{},"^",[463,1241,1242],{},"126",[463,1244,1245],{},"`",[417,1247,1248,1251,1254,1257,1260,1263,1266,1269],{},[463,1249,1250],{},"31",[463,1252,1253],{},"US",[463,1255,1256],{},"63",[463,1258,1259],{},"?",[463,1261,1262],{},"95",[463,1264,1265],{},"_",[463,1267,1268],{},"127",[463,1270,1271],{},"DEL",[20,1273,1274,1275,1278],{},"ASCII 码大致由以下",[423,1276,1277],{},"两部分组","成：",[1280,1281,1282,1289],"ul",{},[227,1283,1284,1285,1288],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[423,1286,1287],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[227,1290,1291,1292,1295],{},"ASCII 打印字符：数字 ",[423,1293,1294],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[241,1297,1299],{"id":1298},"_134转义字符","1.3.4转义字符",[32,1301,1303],{"className":262,"code":1302,"language":264,"meta":37,"style":37},"\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",[24,1304,1305,1310,1326,1340,1345,1358,1363],{"__ignoreMap":37},[41,1306,1307],{"class":43,"line":44},[41,1308,1309],{"class":47},"\u002F\u002F换行符\n",[41,1311,1312,1315,1318,1321,1323],{"class":43,"line":51},[41,1313,1314],{"class":275},"cout ",[41,1316,1317],{"class":271},"\u003C\u003C",[41,1319,1320],{"class":378},"\"hello world\u002Fn\"",[41,1322,330],{"class":275},[41,1324,1325],{"class":47}," \u002F\u002F就等同于如下：\n",[41,1327,1328,1330,1332,1335,1337],{"class":43,"line":62},[41,1329,1314],{"class":275},[41,1331,1317],{"class":271},[41,1333,1334],{"class":378},"\"hello world\"",[41,1336,1317],{"class":271},[41,1338,1339],{"class":275},"endl;\n",[41,1341,1342],{"class":43,"line":70},[41,1343,1344],{"class":47},"\u002F\u002F反斜杠\n",[41,1346,1347,1349,1351,1354,1356],{"class":43,"line":76},[41,1348,1314],{"class":275},[41,1350,1317],{"class":271},[41,1352,1353],{"class":378},"\"\u002F\u002F\"",[41,1355,1317],{"class":271},[41,1357,1339],{"class":275},[41,1359,1360],{"class":43,"line":83},[41,1361,1362],{"class":47},"\u002F\u002F水平制表符\n",[41,1364,1365,1367,1369,1372,1375,1378,1380,1383],{"class":43,"line":89},[41,1366,1314],{"class":275},[41,1368,1317],{"class":271},[41,1370,1371],{"class":378},"\"aaaa",[41,1373,1374],{"class":58},"\\t",[41,1376,1377],{"class":378},"helloworld\"",[41,1379,1317],{"class":271},[41,1381,1382],{"class":275},"endl;",[41,1384,1385],{"class":47}," \u002F\u002F输出窗口时有对齐效果\n",[241,1387,1389],{"id":1388},"_135字符串型","1.3.5字符串型",[20,1391,1392,1393,1395],{},"char 变量名",[41,1394],{},"=\"字符串值\"",[32,1397,1399],{"className":262,"code":1398,"language":264,"meta":37,"style":37},"\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",[24,1400,1401,1406,1411,1416,1421,1435,1448,1453,1458,1469],{"__ignoreMap":37},[41,1402,1403],{"class":43,"line":44},[41,1404,1405],{"class":47},"\u002F\u002Fc风格字符串\n",[41,1407,1408],{"class":43,"line":51},[41,1409,1410],{"class":47},"\u002F\u002F注意事项：\n",[41,1412,1413],{"class":43,"line":62},[41,1414,1415],{"class":47},"\u002F\u002F1.char字符串名[]\n",[41,1417,1418],{"class":43,"line":70},[41,1419,1420],{"class":47},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[41,1422,1423,1425,1428,1430,1432],{"class":43,"line":76},[41,1424,370],{"class":271},[41,1426,1427],{"class":275}," str[]",[41,1429,321],{"class":271},[41,1431,1334],{"class":378},[41,1433,1434],{"class":275},";\n",[41,1436,1437,1439,1441,1444,1446],{"class":43,"line":83},[41,1438,1314],{"class":275},[41,1440,1317],{"class":271},[41,1442,1443],{"class":275},"str",[41,1445,1317],{"class":271},[41,1447,1339],{"class":275},[41,1449,1450],{"class":43,"line":89},[41,1451,1452],{"class":47},"\u002F\u002Fc++风格字符串\n",[41,1454,1455],{"class":43,"line":96},[41,1456,1457],{"class":47},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[41,1459,1460,1463,1465,1467],{"class":43,"line":104},[41,1461,1462],{"class":275},"string str2",[41,1464,321],{"class":271},[41,1466,1334],{"class":378},[41,1468,1434],{"class":275},[41,1470,1471,1473,1475,1478,1480],{"class":43,"line":176},[41,1472,1314],{"class":275},[41,1474,1317],{"class":271},[41,1476,1477],{"class":275},"str2",[41,1479,1317],{"class":271},[41,1481,1339],{"class":275},[241,1483,1485],{"id":1484},"_136布尔类型bool","1.3.6布尔类型bool",[32,1487,1489],{"className":262,"code":1488,"language":264,"meta":37,"style":37},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[24,1490,1491,1506],{"__ignoreMap":37},[41,1492,1493,1496,1499,1501,1504],{"class":43,"line":44},[41,1494,1495],{"class":271},"bool",[41,1497,1498],{"class":275}," flag",[41,1500,321],{"class":271},[41,1502,1503],{"class":58},"true",[41,1505,1434],{"class":275},[41,1507,1508,1511,1514,1517,1519,1521],{"class":43,"line":51},[41,1509,1510],{"class":275},"cout",[41,1512,1513],{"class":271},"\u003C\u003Csizeof",[41,1515,1516],{"class":275},"(flag)",[41,1518,1317],{"class":271},[41,1520,1382],{"class":275},[41,1522,1523],{"class":47}," \u002F\u002F查看布尔占内存空间\n",[15,1525,1527],{"id":1526},"_14键盘输入cin","1.4键盘输入cin",[32,1529,1531],{"className":262,"code":1530,"language":264,"meta":37,"style":37},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[24,1532,1533,1546,1563,1574],{"__ignoreMap":37},[41,1534,1535,1537,1540,1542,1544],{"class":43,"line":44},[41,1536,279],{"class":271},[41,1538,1539],{"class":275}," a",[41,1541,321],{"class":271},[41,1543,465],{"class":58},[41,1545,1434],{"class":275},[41,1547,1548,1550,1552,1555,1557,1559,1561],{"class":43,"line":51},[41,1549,1510],{"class":275},[41,1551,1317],{"class":271},[41,1553,1554],{"class":378},"\"请给整型变量a赋值\"",[41,1556,1317],{"class":271},[41,1558,511],{"class":275},[41,1560,1317],{"class":271},[41,1562,1339],{"class":275},[41,1564,1565,1568,1571],{"class":43,"line":62},[41,1566,1567],{"class":275},"cin ",[41,1569,1570],{"class":271},">>",[41,1572,1573],{"class":275}," a;\n",[41,1575,1576,1578,1580,1583,1586,1588,1590],{"class":43,"line":70},[41,1577,1314],{"class":275},[41,1579,1317],{"class":271},[41,1581,1582],{"class":378}," \"整型变量a=\"",[41,1584,1585],{"class":271}," \u003C\u003C",[41,1587,511],{"class":275},[41,1589,1317],{"class":271},[41,1591,1339],{"class":275},[15,1593,1595],{"id":1594},"_15运算符","1.5运算符",[241,1597,1599],{"id":1598},"_151算术运算符","1.5.1算术运算符",[20,1601,1602,1606],{},[1603,1604],"img",{"alt":37,"src":1605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[224,1608,1609,1612,1615],{},[227,1610,1611],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[227,1613,1614],{},"两个小数不可以做取模运算",[227,1616,1617],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[241,1619,1621],{"id":1620},"_152赋值运算符","1.5.2赋值运算符",[20,1623,1624],{},[1603,1625],{"alt":37,"src":1626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[241,1628,1630],{"id":1629},"_153比较运算符","1.5.3比较运算符",[20,1632,1633],{},[1603,1634],{"alt":37,"src":1635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[241,1637,1639],{"id":1638},"_154逻辑运算符","1.5.4逻辑运算符",[20,1641,1642],{},[1603,1643],{"alt":37,"src":1644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[15,1646,1648],{"id":1647},"_16程序流程结构","1.6程序流程结构",[241,1650,1652],{"id":1651},"_161选择结构","1.6.1选择结构",[224,1654,1655],{},[227,1656,1657],{},"if语句\n单行、多行、多条件if语句",[32,1659,1661],{"className":262,"code":1660,"language":264,"meta":37,"style":37},"\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",[24,1662,1663,1668,1683,1688,1702,1707,1712,1721,1734,1738,1751,1755,1761,1766,1780,1785,1791,1812,1817,1831,1836,1865,1870,1887,1892,1897,1902,1916,1921],{"__ignoreMap":37},[41,1664,1665],{"class":43,"line":44},[41,1666,1667],{"class":47},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[41,1669,1670,1673,1676,1678,1681],{"class":43,"line":51},[41,1671,1672],{"class":271},"if",[41,1674,1675],{"class":275},"(score",[41,1677,1233],{"class":271},[41,1679,1680],{"class":58},"600",[41,1682,282],{"class":275},[41,1684,1685],{"class":43,"line":62},[41,1686,1687],{"class":275},"{\n",[41,1689,1690,1693,1695,1698,1700],{"class":43,"line":70},[41,1691,1692],{"class":275},"    cout",[41,1694,1317],{"class":271},[41,1696,1697],{"class":378},"'这是单行if语句'",[41,1699,1317],{"class":271},[41,1701,1339],{"class":275},[41,1703,1704],{"class":43,"line":76},[41,1705,1706],{"class":275},"}\n",[41,1708,1709],{"class":43,"line":83},[41,1710,1711],{"class":47},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[41,1713,1714,1716,1718],{"class":43,"line":89},[41,1715,1567],{"class":275},[41,1717,1570],{"class":271},[41,1719,1720],{"class":275}," score\n",[41,1722,1723,1725,1727,1730,1732],{"class":43,"line":96},[41,1724,1672],{"class":271},[41,1726,1675],{"class":275},[41,1728,1729],{"class":271},"\u003C=",[41,1731,1680],{"class":58},[41,1733,282],{"class":275},[41,1735,1736],{"class":43,"line":104},[41,1737,1687],{"class":275},[41,1739,1740,1742,1744,1747,1749],{"class":43,"line":176},[41,1741,1692],{"class":275},[41,1743,1570],{"class":271},[41,1745,1746],{"class":378},"\"小于等于600\"",[41,1748,1317],{"class":271},[41,1750,1339],{"class":275},[41,1752,1753],{"class":43,"line":184},[41,1754,1706],{"class":275},[41,1756,1758],{"class":43,"line":1757},12,[41,1759,1760],{"class":271},"else\n",[41,1762,1764],{"class":43,"line":1763},13,[41,1765,1687],{"class":275},[41,1767,1769,1771,1773,1776,1778],{"class":43,"line":1768},14,[41,1770,1692],{"class":275},[41,1772,1570],{"class":271},[41,1774,1775],{"class":378},"\"大于600\"",[41,1777,1570],{"class":271},[41,1779,1339],{"class":275},[41,1781,1783],{"class":43,"line":1782},15,[41,1784,1706],{"class":275},[41,1786,1788],{"class":43,"line":1787},16,[41,1789,1790],{"class":47},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[41,1792,1794,1796,1799,1801,1803,1806,1808,1810],{"class":43,"line":1793},17,[41,1795,1672],{"class":271},[41,1797,1798],{"class":275}," (",[41,1800,465],{"class":58},[41,1802,1183],{"class":271},[41,1804,1805],{"class":275},"num",[41,1807,1183],{"class":271},[41,1809,584],{"class":58},[41,1811,282],{"class":275},[41,1813,1815],{"class":43,"line":1814},18,[41,1816,1687],{"class":275},[41,1818,1820,1822,1824,1827,1829],{"class":43,"line":1819},19,[41,1821,1692],{"class":275},[41,1823,1317],{"class":271},[41,1825,1826],{"class":378},"\"小于100\"",[41,1828,1317],{"class":271},[41,1830,1339],{"class":275},[41,1832,1834],{"class":43,"line":1833},20,[41,1835,1706],{"class":275},[41,1837,1839,1842,1845,1848,1851,1853,1856,1858,1860,1863],{"class":43,"line":1838},21,[41,1840,1841],{"class":271},"else",[41,1843,1844],{"class":271}," if",[41,1846,1847],{"class":275}," (nmu",[41,1849,1850],{"class":271},">=",[41,1852,584],{"class":58},[41,1854,1855],{"class":271},"&&",[41,1857,1805],{"class":275},[41,1859,1183],{"class":271},[41,1861,1862],{"class":58},"200",[41,1864,282],{"class":275},[41,1866,1868],{"class":43,"line":1867},22,[41,1869,1687],{"class":275},[41,1871,1873,1875,1877,1880,1882,1884],{"class":43,"line":1872},23,[41,1874,1692],{"class":275},[41,1876,1317],{"class":271},[41,1878,1879],{"class":378},"\"不小于100且小于200\"",[41,1881,1317],{"class":271},[41,1883,1382],{"class":275},[41,1885,1886],{"class":47}," \u002F\u002F可以无限else if,python中是elif：\n",[41,1888,1890],{"class":43,"line":1889},24,[41,1891,1706],{"class":275},[41,1893,1895],{"class":43,"line":1894},25,[41,1896,1760],{"class":271},[41,1898,1900],{"class":43,"line":1899},26,[41,1901,1687],{"class":275},[41,1903,1905,1907,1909,1912,1914],{"class":43,"line":1904},27,[41,1906,1692],{"class":275},[41,1908,1317],{"class":271},[41,1910,1911],{"class":378},"\"不小于200\"",[41,1913,1317],{"class":271},[41,1915,1339],{"class":275},[41,1917,1919],{"class":43,"line":1918},28,[41,1920,1706],{"class":275},[41,1922,1924],{"class":43,"line":1923},29,[41,1925,1926],{"class":47},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[224,1928,1929],{"start":51},[227,1930,1931],{},"三目运算符",[32,1933,1935],{"className":262,"code":1934,"language":264,"meta":37,"style":37},"\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",[24,1936,1937,1942,1947,1973,1995,2012,2017,2040,2055],{"__ignoreMap":37},[41,1938,1939],{"class":43,"line":44},[41,1940,1941],{"class":47},"\u002F\u002F创建三个变量a,b,c\n",[41,1943,1944],{"class":43,"line":51},[41,1945,1946],{"class":47},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[41,1948,1949,1951,1953,1955,1957,1960,1962,1964,1967,1969,1971],{"class":43,"line":62},[41,1950,279],{"class":271},[41,1952,1539],{"class":275},[41,1954,321],{"class":271},[41,1956,973],{"class":58},[41,1958,1959],{"class":275},",b",[41,1961,321],{"class":271},[41,1963,719],{"class":58},[41,1965,1966],{"class":275},",c",[41,1968,321],{"class":271},[41,1970,465],{"class":58},[41,1972,1434],{"class":275},[41,1974,1975,1977,1979,1982,1984,1986,1988,1990,1992],{"class":43,"line":70},[41,1976,561],{"class":275},[41,1978,321],{"class":271},[41,1980,1981],{"class":275},"(a",[41,1983,1233],{"class":271},[41,1985,536],{"class":275},[41,1987,1259],{"class":271},[41,1989,511],{"class":275},[41,1991,1132],{"class":271},[41,1993,1994],{"class":275},"b)\n",[41,1996,1997,1999,2001,2004,2006,2008,2010],{"class":43,"line":76},[41,1998,1510],{"class":275},[41,2000,1317],{"class":271},[41,2002,2003],{"class":378},"\"c=\"",[41,2005,1317],{"class":271},[41,2007,561],{"class":275},[41,2009,1317],{"class":271},[41,2011,1339],{"class":275},[41,2013,2014],{"class":43,"line":83},[41,2015,2016],{"class":47},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[41,2018,2019,2021,2023,2025,2027,2029,2031,2034,2036,2038],{"class":43,"line":89},[41,2020,1981],{"class":275},[41,2022,1233],{"class":271},[41,2024,536],{"class":275},[41,2026,1259],{"class":271},[41,2028,511],{"class":275},[41,2030,1132],{"class":271},[41,2032,2033],{"class":275},"b)",[41,2035,321],{"class":271},[41,2037,584],{"class":58},[41,2039,1434],{"class":275},[41,2041,2042,2044,2046,2048,2050,2052],{"class":43,"line":96},[41,2043,1510],{"class":275},[41,2045,1317],{"class":271},[41,2047,511],{"class":275},[41,2049,1317],{"class":271},[41,2051,1382],{"class":275},[41,2053,2054],{"class":47}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[41,2056,2057,2059,2061,2063,2065,2067],{"class":43,"line":104},[41,2058,1510],{"class":275},[41,2060,1317],{"class":271},[41,2062,536],{"class":275},[41,2064,1317],{"class":271},[41,2066,1382],{"class":275},[41,2068,2069],{"class":47}," \u002F\u002F10   a>b,b还是原值\n",[224,2071,2072],{"start":62},[227,2073,2074],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[32,2076,2078],{"className":262,"code":2077,"language":264,"meta":37,"style":37},"\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",[24,2079,2080,2085,2093,2106,2116,2120,2134,2147,2157,2165,2170,2195,2216,2238,2259,2281,2302,2322,2327],{"__ignoreMap":37},[41,2081,2082],{"class":43,"line":44},[41,2083,2084],{"class":47},"\u002F\u002F案例-电影打分\n",[41,2086,2087,2090],{"class":43,"line":51},[41,2088,2089],{"class":271},"#include",[41,2091,2092],{"class":378},"\u003Ciostream>\n",[41,2094,2095,2098,2101,2104],{"class":43,"line":62},[41,2096,2097],{"class":271},"using",[41,2099,2100],{"class":271}," namespace",[41,2102,2103],{"class":54}," std",[41,2105,1434],{"class":275},[41,2107,2108,2110,2113],{"class":43,"line":70},[41,2109,279],{"class":271},[41,2111,2112],{"class":54}," main",[41,2114,2115],{"class":275},"()\n",[41,2117,2118],{"class":43,"line":76},[41,2119,1687],{"class":275},[41,2121,2122,2125,2128,2130,2132],{"class":43,"line":83},[41,2123,2124],{"class":271},"    int",[41,2126,2127],{"class":275}," score",[41,2129,321],{"class":271},[41,2131,465],{"class":58},[41,2133,1434],{"class":275},[41,2135,2136,2138,2140,2143,2145],{"class":43,"line":89},[41,2137,1692],{"class":275},[41,2139,1317],{"class":271},[41,2141,2142],{"class":378},"\"电影打分：\"",[41,2144,1317],{"class":271},[41,2146,1339],{"class":275},[41,2148,2149,2152,2154],{"class":43,"line":96},[41,2150,2151],{"class":275},"    cin",[41,2153,1570],{"class":271},[41,2155,2156],{"class":275},"score;\n",[41,2158,2159,2162],{"class":43,"line":104},[41,2160,2161],{"class":271},"    switch",[41,2163,2164],{"class":275},"(score)\n",[41,2166,2167],{"class":43,"line":176},[41,2168,2169],{"class":275},"    {\n",[41,2171,2172,2175,2178,2181,2183,2186,2188,2190,2193],{"class":43,"line":184},[41,2173,2174],{"class":271},"        case",[41,2176,2177],{"class":58}," 10",[41,2179,2180],{"class":275},":cout",[41,2182,1317],{"class":271},[41,2184,2185],{"class":378},"\"经典\"",[41,2187,1317],{"class":271},[41,2189,1382],{"class":275},[41,2191,2192],{"class":271},"break",[41,2194,1434],{"class":275},[41,2196,2197,2199,2202,2204,2206,2208,2210,2212,2214],{"class":43,"line":1757},[41,2198,2174],{"class":271},[41,2200,2201],{"class":58}," 9",[41,2203,2180],{"class":275},[41,2205,1317],{"class":271},[41,2207,2185],{"class":378},[41,2209,1317],{"class":271},[41,2211,1382],{"class":275},[41,2213,2192],{"class":271},[41,2215,1434],{"class":275},[41,2217,2218,2220,2223,2225,2227,2230,2232,2234,2236],{"class":43,"line":1763},[41,2219,2174],{"class":271},[41,2221,2222],{"class":58}," 8",[41,2224,2180],{"class":275},[41,2226,1317],{"class":271},[41,2228,2229],{"class":378},"\"非常好\"",[41,2231,1317],{"class":271},[41,2233,1382],{"class":275},[41,2235,2192],{"class":271},[41,2237,1434],{"class":275},[41,2239,2240,2242,2245,2247,2249,2251,2253,2255,2257],{"class":43,"line":1768},[41,2241,2174],{"class":271},[41,2243,2244],{"class":58}," 7",[41,2246,2180],{"class":275},[41,2248,1317],{"class":271},[41,2250,2229],{"class":378},[41,2252,1317],{"class":271},[41,2254,1382],{"class":275},[41,2256,2192],{"class":271},[41,2258,1434],{"class":275},[41,2260,2261,2263,2266,2268,2270,2273,2275,2277,2279],{"class":43,"line":1782},[41,2262,2174],{"class":271},[41,2264,2265],{"class":58}," 6",[41,2267,2180],{"class":275},[41,2269,1317],{"class":271},[41,2271,2272],{"class":378},"\"一般\"",[41,2274,1317],{"class":271},[41,2276,1382],{"class":275},[41,2278,2192],{"class":271},[41,2280,1434],{"class":275},[41,2282,2283,2285,2288,2290,2292,2294,2296,2298,2300],{"class":43,"line":1787},[41,2284,2174],{"class":271},[41,2286,2287],{"class":58}," 5",[41,2289,2180],{"class":275},[41,2291,1317],{"class":271},[41,2293,2272],{"class":378},[41,2295,1317],{"class":271},[41,2297,1382],{"class":275},[41,2299,2192],{"class":271},[41,2301,1434],{"class":275},[41,2303,2304,2307,2309,2311,2314,2316,2318,2320],{"class":43,"line":1793},[41,2305,2306],{"class":271},"        default",[41,2308,2180],{"class":275},[41,2310,1317],{"class":271},[41,2312,2313],{"class":378},"\"烂片\"",[41,2315,1317],{"class":271},[41,2317,1382],{"class":275},[41,2319,2192],{"class":271},[41,2321,1434],{"class":275},[41,2323,2324],{"class":43,"line":1814},[41,2325,2326],{"class":275},"    }\n",[41,2328,2329],{"class":43,"line":1819},[41,2330,1706],{"class":275},[20,2332,2333],{},"if和switch区别：",[1280,2335,2336,2339],{},[227,2337,2338],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[227,2340,2341],{},"switch优点：结构清晰，执行效率高",[241,2343,2345],{"id":2344},"_162循环结构","1.6.2循环结构",[224,2347,2348],{},[227,2349,2350],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[32,2352,2354],{"className":262,"code":2353,"language":264,"meta":37,"style":37},"\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",[24,2355,2356,2361,2369,2373,2386,2400,2404,2424,2434,2438,2450],{"__ignoreMap":37},[41,2357,2358],{"class":43,"line":44},[41,2359,2360],{"class":47},"\u002F\u002F打印0-9数字\n",[41,2362,2363,2365,2367],{"class":43,"line":51},[41,2364,279],{"class":271},[41,2366,2112],{"class":54},[41,2368,2115],{"class":275},[41,2370,2371],{"class":43,"line":62},[41,2372,1687],{"class":275},[41,2374,2375,2377,2380,2382,2384],{"class":43,"line":70},[41,2376,2124],{"class":271},[41,2378,2379],{"class":275}," num",[41,2381,321],{"class":271},[41,2383,465],{"class":58},[41,2385,1434],{"class":275},[41,2387,2388,2391,2394,2396,2398],{"class":43,"line":76},[41,2389,2390],{"class":271},"    while",[41,2392,2393],{"class":275},"(num",[41,2395,1183],{"class":271},[41,2397,719],{"class":58},[41,2399,282],{"class":275},[41,2401,2402],{"class":43,"line":83},[41,2403,2169],{"class":275},[41,2405,2406,2409,2412,2414,2416,2418,2421],{"class":43,"line":89},[41,2407,2408],{"class":54},"       std",[41,2410,2411],{"class":275},"::cout",[41,2413,1317],{"class":271},[41,2415,1805],{"class":275},[41,2417,1317],{"class":271},[41,2419,2420],{"class":54},"std",[41,2422,2423],{"class":275},"::endl;\n",[41,2425,2426,2429,2432],{"class":43,"line":96},[41,2427,2428],{"class":275},"        num",[41,2430,2431],{"class":271},"++",[41,2433,1434],{"class":275},[41,2435,2436],{"class":43,"line":104},[41,2437,2326],{"class":275},[41,2439,2440,2443,2445,2448],{"class":43,"line":176},[41,2441,2442],{"class":54},"    system",[41,2444,276],{"class":275},[41,2446,2447],{"class":378},"\"pause\"",[41,2449,282],{"class":275},[41,2451,2452],{"class":43,"line":184},[41,2453,1706],{"class":275},[20,2455,2456],{},"注意：写好循环条件，避免死循环情况",[32,2458,2460],{"className":262,"code":2459,"language":264,"meta":37,"style":37},"\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",[24,2461,2462,2467,2474,2481,2491,2499,2503,2508,2535,2539,2544,2552,2579,2584,2589,2602,2612,2616,2626,2631,2644,2649,2663,2668,2683,2687,2700,2704,2709,2713,2727,2735,2740,2746,2752,2757],{"__ignoreMap":37},[41,2463,2464],{"class":43,"line":44},[41,2465,2466],{"class":47},"\u002F\u002F循环结构-猜数字\n",[41,2468,2469,2471],{"class":43,"line":51},[41,2470,2089],{"class":271},[41,2472,2473],{"class":378}," \u003Ciostream>\n",[41,2475,2476,2478],{"class":43,"line":62},[41,2477,2089],{"class":271},[41,2479,2480],{"class":378}," \u003Cctime>\n",[41,2482,2483,2485,2487,2489],{"class":43,"line":70},[41,2484,2097],{"class":271},[41,2486,2100],{"class":271},[41,2488,2103],{"class":54},[41,2490,1434],{"class":275},[41,2492,2493,2495,2497],{"class":43,"line":76},[41,2494,279],{"class":271},[41,2496,2112],{"class":54},[41,2498,2115],{"class":275},[41,2500,2501],{"class":43,"line":83},[41,2502,1687],{"class":275},[41,2504,2505],{"class":43,"line":89},[41,2506,2507],{"class":47},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[41,2509,2510,2513,2516,2519,2522,2524,2527,2529,2532],{"class":43,"line":96},[41,2511,2512],{"class":54},"    srand",[41,2514,2515],{"class":275},"((",[41,2517,2518],{"class":271},"unsigned",[41,2520,2521],{"class":271}," int",[41,2523,702],{"class":275},[41,2525,2526],{"class":54},"time",[41,2528,276],{"class":275},[41,2530,2531],{"class":58},"NULL",[41,2533,2534],{"class":275},"));\n",[41,2536,2537],{"class":43,"line":104},[41,2538,80],{"emptyLinePlaceholder":79},[41,2540,2541],{"class":43,"line":176},[41,2542,2543],{"class":47},"    \u002F\u002F1.系统生成随机数\n",[41,2545,2546,2549],{"class":43,"line":184},[41,2547,2548],{"class":47},"    \u002F\u002Frand()%100",[41,2550,2551],{"class":47}," \u002F\u002F生成0-99的随机数\n",[41,2553,2554,2556,2558,2560,2563,2566,2568,2570,2572,2574,2576],{"class":43,"line":1757},[41,2555,2124],{"class":271},[41,2557,2379],{"class":275},[41,2559,321],{"class":271},[41,2561,2562],{"class":54},"rand",[41,2564,2565],{"class":275},"()",[41,2567,601],{"class":271},[41,2569,584],{"class":58},[41,2571,754],{"class":271},[41,2573,26],{"class":58},[41,2575,330],{"class":275},[41,2577,2578],{"class":47}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[41,2580,2581],{"class":43,"line":1763},[41,2582,2583],{"class":47},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[41,2585,2586],{"class":43,"line":1768},[41,2587,2588],{"class":47},"    \u002F\u002F2.玩家猜测\n",[41,2590,2591,2593,2596,2598,2600],{"class":43,"line":1782},[41,2592,2124],{"class":271},[41,2594,2595],{"class":275}," val",[41,2597,321],{"class":271},[41,2599,465],{"class":58},[41,2601,1434],{"class":275},[41,2603,2604,2606,2608,2610],{"class":43,"line":1787},[41,2605,2390],{"class":271},[41,2607,1798],{"class":275},[41,2609,26],{"class":58},[41,2611,282],{"class":275},[41,2613,2614],{"class":43,"line":1793},[41,2615,2169],{"class":275},[41,2617,2618,2621,2623],{"class":43,"line":1814},[41,2619,2620],{"class":275},"        cin",[41,2622,1570],{"class":271},[41,2624,2625],{"class":275},"val;\n",[41,2627,2628],{"class":43,"line":1819},[41,2629,2630],{"class":47},"        \u002F\u002F3.判断玩家猜测\n",[41,2632,2633,2636,2639,2641],{"class":43,"line":1833},[41,2634,2635],{"class":271},"        if",[41,2637,2638],{"class":275},"(val",[41,2640,1183],{"class":271},[41,2642,2643],{"class":275},"num) \n",[41,2645,2646],{"class":43,"line":1838},[41,2647,2648],{"class":275},"        {\n",[41,2650,2651,2654,2656,2659,2661],{"class":43,"line":1867},[41,2652,2653],{"class":275},"            cout",[41,2655,1317],{"class":271},[41,2657,2658],{"class":378},"\"猜小了！\"",[41,2660,1317],{"class":271},[41,2662,1339],{"class":275},[41,2664,2665],{"class":43,"line":1872},[41,2666,2667],{"class":275},"        }\n",[41,2669,2670,2673,2675,2678,2680],{"class":43,"line":1889},[41,2671,2672],{"class":271},"        else",[41,2674,1844],{"class":271},[41,2676,2677],{"class":275}," (val",[41,2679,1233],{"class":271},[41,2681,2682],{"class":275},"num)\n",[41,2684,2685],{"class":43,"line":1894},[41,2686,2648],{"class":275},[41,2688,2689,2691,2693,2696,2698],{"class":43,"line":1899},[41,2690,2653],{"class":275},[41,2692,1317],{"class":271},[41,2694,2695],{"class":378},"\"猜大了！\"",[41,2697,1317],{"class":271},[41,2699,1339],{"class":275},[41,2701,2702],{"class":43,"line":1904},[41,2703,2667],{"class":275},[41,2705,2706],{"class":43,"line":1918},[41,2707,2708],{"class":271},"        else\n",[41,2710,2711],{"class":43,"line":1923},[41,2712,2648],{"class":275},[41,2714,2716,2718,2720,2723,2725],{"class":43,"line":2715},30,[41,2717,2653],{"class":275},[41,2719,1317],{"class":271},[41,2721,2722],{"class":378},"\"猜对了！\"",[41,2724,1317],{"class":271},[41,2726,1339],{"class":275},[41,2728,2730,2733],{"class":43,"line":2729},31,[41,2731,2732],{"class":271},"            break",[41,2734,1434],{"class":275},[41,2736,2738],{"class":43,"line":2737},32,[41,2739,2667],{"class":275},[41,2741,2743],{"class":43,"line":2742},33,[41,2744,2745],{"class":47},"        \u002F\u002F猜对 退出游戏\n",[41,2747,2749],{"class":43,"line":2748},34,[41,2750,2751],{"class":47},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[41,2753,2755],{"class":43,"line":2754},35,[41,2756,2326],{"class":275},[41,2758,2760],{"class":43,"line":2759},36,[41,2761,1706],{"class":275},[224,2763,2764],{"start":51},[227,2765,2766,2767,2770],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[423,2768,2769],{},"do...while会先执行一次循环语句","，在判断循环语句",[32,2772,2774],{"className":262,"code":2773,"language":264,"meta":37,"style":37},"\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",[24,2775,2776,2781,2789,2793,2805,2813,2817,2834,2841,2845,2858,2868],{"__ignoreMap":37},[41,2777,2778],{"class":43,"line":44},[41,2779,2780],{"class":47},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[41,2782,2783,2785,2787],{"class":43,"line":51},[41,2784,279],{"class":271},[41,2786,2112],{"class":54},[41,2788,2115],{"class":275},[41,2790,2791],{"class":43,"line":62},[41,2792,1687],{"class":275},[41,2794,2795,2797,2799,2801,2803],{"class":43,"line":70},[41,2796,2124],{"class":271},[41,2798,2379],{"class":275},[41,2800,321],{"class":271},[41,2802,465],{"class":58},[41,2804,1434],{"class":275},[41,2806,2807,2810],{"class":43,"line":76},[41,2808,2809],{"class":271},"    do",[41,2811,2812],{"class":275}," \n",[41,2814,2815],{"class":43,"line":83},[41,2816,2169],{"class":275},[41,2818,2819,2822,2824,2826,2828,2830,2832],{"class":43,"line":89},[41,2820,2821],{"class":54},"        std",[41,2823,2411],{"class":275},[41,2825,1317],{"class":271},[41,2827,1805],{"class":275},[41,2829,1317],{"class":271},[41,2831,2420],{"class":54},[41,2833,2423],{"class":275},[41,2835,2836,2838],{"class":43,"line":96},[41,2837,2428],{"class":275},[41,2839,2840],{"class":271},"++\n",[41,2842,2843],{"class":43,"line":104},[41,2844,2326],{"class":275},[41,2846,2847,2849,2851,2853,2855],{"class":43,"line":176},[41,2848,2390],{"class":271},[41,2850,2393],{"class":275},[41,2852,1183],{"class":271},[41,2854,719],{"class":58},[41,2856,2857],{"class":275},");\n",[41,2859,2860,2862,2864,2866],{"class":43,"line":184},[41,2861,2442],{"class":54},[41,2863,276],{"class":275},[41,2865,2447],{"class":378},[41,2867,2857],{"class":275},[41,2869,2870],{"class":43,"line":1757},[41,2871,1706],{"class":275},[20,2873,2874],{},"案例-水仙花数",[20,2876,2877],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[20,2879,2880],{},"例如：1^3+5^3+3^3=153",[20,2882,2883],{},"请用do...while语句，求出所有3位数的水仙花数",[32,2885,2887],{"className":262,"code":2886,"language":264,"meta":37,"style":37},"#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",[24,2888,2889,2895,2905,2913,2917,2922,2934,2940,2944,2949,2965,2981,2997,3012,3031,3046,3094,3098,3110,3114,3122,3126,3140],{"__ignoreMap":37},[41,2890,2891,2893],{"class":43,"line":44},[41,2892,2089],{"class":271},[41,2894,2473],{"class":378},[41,2896,2897,2899,2901,2903],{"class":43,"line":51},[41,2898,2097],{"class":271},[41,2900,2100],{"class":271},[41,2902,2103],{"class":54},[41,2904,1434],{"class":275},[41,2906,2907,2909,2911],{"class":43,"line":62},[41,2908,279],{"class":271},[41,2910,2112],{"class":54},[41,2912,2115],{"class":275},[41,2914,2915],{"class":43,"line":70},[41,2916,1687],{"class":275},[41,2918,2919],{"class":43,"line":76},[41,2920,2921],{"class":47},"    \u002F\u002F1.先打印所有三位数字\n",[41,2923,2924,2926,2928,2930,2932],{"class":43,"line":83},[41,2925,2124],{"class":271},[41,2927,2379],{"class":275},[41,2929,321],{"class":271},[41,2931,584],{"class":58},[41,2933,1434],{"class":275},[41,2935,2936,2938],{"class":43,"line":89},[41,2937,2809],{"class":271},[41,2939,2812],{"class":275},[41,2941,2942],{"class":43,"line":96},[41,2943,2169],{"class":275},[41,2945,2946],{"class":43,"line":104},[41,2947,2948],{"class":47},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[41,2950,2951,2954,2956,2958,2960,2962],{"class":43,"line":176},[41,2952,2953],{"class":271},"        int",[41,2955,1539],{"class":275},[41,2957,321],{"class":271},[41,2959,465],{"class":58},[41,2961,330],{"class":275},[41,2963,2964],{"class":47}," \u002F\u002F个位\n",[41,2966,2967,2969,2972,2974,2976,2978],{"class":43,"line":184},[41,2968,2953],{"class":271},[41,2970,2971],{"class":275}," b",[41,2973,321],{"class":271},[41,2975,465],{"class":58},[41,2977,330],{"class":275},[41,2979,2980],{"class":47}," \u002F\u002F十位\n",[41,2982,2983,2985,2988,2990,2992,2994],{"class":43,"line":1757},[41,2984,2953],{"class":271},[41,2986,2987],{"class":275}," c",[41,2989,321],{"class":271},[41,2991,465],{"class":58},[41,2993,330],{"class":275},[41,2995,2996],{"class":47}," \u002F\u002F百位\n",[41,2998,2999,3002,3004,3006,3008,3010],{"class":43,"line":1763},[41,3000,3001],{"class":275},"        a",[41,3003,321],{"class":271},[41,3005,1805],{"class":275},[41,3007,601],{"class":271},[41,3009,719],{"class":58},[41,3011,1434],{"class":275},[41,3013,3014,3017,3019,3021,3023,3025,3027,3029],{"class":43,"line":1768},[41,3015,3016],{"class":275},"        b",[41,3018,321],{"class":271},[41,3020,1805],{"class":275},[41,3022,857],{"class":271},[41,3024,719],{"class":58},[41,3026,601],{"class":271},[41,3028,719],{"class":58},[41,3030,1434],{"class":275},[41,3032,3033,3036,3038,3040,3042,3044],{"class":43,"line":1782},[41,3034,3035],{"class":275},"        c",[41,3037,321],{"class":271},[41,3039,1805],{"class":275},[41,3041,857],{"class":271},[41,3043,584],{"class":58},[41,3045,1434],{"class":275},[41,3047,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3085,3088,3091],{"class":43,"line":1787},[41,3049,2635],{"class":271},[41,3051,1981],{"class":275},[41,3053,728],{"class":271},[41,3055,511],{"class":275},[41,3057,728],{"class":271},[41,3059,511],{"class":275},[41,3061,754],{"class":271},[41,3063,536],{"class":275},[41,3065,728],{"class":271},[41,3067,536],{"class":275},[41,3069,728],{"class":271},[41,3071,536],{"class":275},[41,3073,754],{"class":271},[41,3075,561],{"class":275},[41,3077,728],{"class":271},[41,3079,561],{"class":275},[41,3081,728],{"class":271},[41,3083,3084],{"class":275},"c ",[41,3086,3087],{"class":271},"==",[41,3089,3090],{"class":275}," num)",[41,3092,3093],{"class":47}," \u002F\u002F如果是水仙花数，才打印\n",[41,3095,3096],{"class":43,"line":1793},[41,3097,2648],{"class":275},[41,3099,3100,3102,3104,3106,3108],{"class":43,"line":1814},[41,3101,2653],{"class":275},[41,3103,1317],{"class":271},[41,3105,1805],{"class":275},[41,3107,1317],{"class":271},[41,3109,1339],{"class":275},[41,3111,3112],{"class":43,"line":1819},[41,3113,2667],{"class":275},[41,3115,3116,3118,3120],{"class":43,"line":1833},[41,3117,2428],{"class":275},[41,3119,2431],{"class":271},[41,3121,1434],{"class":275},[41,3123,3124],{"class":43,"line":1838},[41,3125,2326],{"class":275},[41,3127,3128,3130,3133,3135,3138],{"class":43,"line":1867},[41,3129,2390],{"class":271},[41,3131,3132],{"class":275}," (num ",[41,3134,1183],{"class":271},[41,3136,3137],{"class":58}," 1000",[41,3139,2857],{"class":275},[41,3141,3142],{"class":43,"line":1872},[41,3143,1706],{"class":275},[224,3145,3146],{"start":62},[227,3147,3148],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[32,3150,3152],{"className":262,"code":3151,"language":264,"meta":37,"style":37},"\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",[24,3153,3154,3159,3188,3192,3204,3208,3213,3224,3231,3235,3249,3253,3260,3264,3276,3285],{"__ignoreMap":37},[41,3155,3156],{"class":43,"line":44},[41,3157,3158],{"class":47},"\u002F\u002F从数字0-9打印\n",[41,3160,3161,3164,3166,3168,3171,3173,3175,3178,3180,3182,3184,3186],{"class":43,"line":51},[41,3162,3163],{"class":271},"for",[41,3165,276],{"class":275},[41,3167,279],{"class":271},[41,3169,3170],{"class":275}," i",[41,3172,321],{"class":271},[41,3174,465],{"class":58},[41,3176,3177],{"class":275},";i",[41,3179,1183],{"class":271},[41,3181,719],{"class":58},[41,3183,3177],{"class":275},[41,3185,2431],{"class":271},[41,3187,282],{"class":275},[41,3189,3190],{"class":43,"line":62},[41,3191,1687],{"class":275},[41,3193,3194,3196,3198,3200,3202],{"class":43,"line":70},[41,3195,1692],{"class":275},[41,3197,1317],{"class":271},[41,3199,714],{"class":275},[41,3201,1317],{"class":271},[41,3203,1339],{"class":275},[41,3205,3206],{"class":43,"line":76},[41,3207,1706],{"class":275},[41,3209,3210],{"class":43,"line":83},[41,3211,3212],{"class":47},"\u002F\u002F上式可以进行拆分\n",[41,3214,3215,3217,3219,3221],{"class":43,"line":89},[41,3216,279],{"class":271},[41,3218,3170],{"class":275},[41,3220,321],{"class":271},[41,3222,3223],{"class":58},"0\n",[41,3225,3226,3228],{"class":43,"line":96},[41,3227,3163],{"class":271},[41,3229,3230],{"class":275},"(;;;)\n",[41,3232,3233],{"class":43,"line":104},[41,3234,1687],{"class":275},[41,3236,3237,3240,3243,3245,3247],{"class":43,"line":176},[41,3238,3239],{"class":271},"    if",[41,3241,3242],{"class":275},"(i",[41,3244,1850],{"class":271},[41,3246,719],{"class":58},[41,3248,282],{"class":275},[41,3250,3251],{"class":43,"line":184},[41,3252,2169],{"class":275},[41,3254,3255,3258],{"class":43,"line":1757},[41,3256,3257],{"class":271},"        break",[41,3259,1434],{"class":275},[41,3261,3262],{"class":43,"line":1763},[41,3263,2326],{"class":275},[41,3265,3266,3268,3270,3272,3274],{"class":43,"line":1768},[41,3267,1692],{"class":275},[41,3269,1317],{"class":271},[41,3271,714],{"class":275},[41,3273,1317],{"class":271},[41,3275,1339],{"class":275},[41,3277,3278,3281,3283],{"class":43,"line":1782},[41,3279,3280],{"class":275},"    i",[41,3282,2431],{"class":271},[41,3284,1434],{"class":275},[41,3286,3287],{"class":43,"line":1787},[41,3288,1706],{"class":275},[20,3290,3291],{},"小练习",[32,3293,3295],{"className":262,"code":3294,"language":264,"meta":37,"style":37},"#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",[24,3296,3297,3303,3313,3321,3325,3330,3335,3363,3367,3372,3377,3418,3422,3435,3439,3443,3447,3459,3463,3467],{"__ignoreMap":37},[41,3298,3299,3301],{"class":43,"line":44},[41,3300,2089],{"class":271},[41,3302,2092],{"class":378},[41,3304,3305,3307,3309,3311],{"class":43,"line":51},[41,3306,2097],{"class":271},[41,3308,2100],{"class":271},[41,3310,2103],{"class":54},[41,3312,1434],{"class":275},[41,3314,3315,3317,3319],{"class":43,"line":62},[41,3316,279],{"class":271},[41,3318,2112],{"class":54},[41,3320,2115],{"class":275},[41,3322,3323],{"class":43,"line":70},[41,3324,1687],{"class":275},[41,3326,3327],{"class":43,"line":76},[41,3328,3329],{"class":47},"    \u002F\u002F敲桌子案例\n",[41,3331,3332],{"class":43,"line":83},[41,3333,3334],{"class":47},"    \u002F\u002F1.先输出1-100的数字\n",[41,3336,3337,3340,3342,3344,3346,3348,3350,3353,3355,3357,3359,3361],{"class":43,"line":89},[41,3338,3339],{"class":271},"    for",[41,3341,276],{"class":275},[41,3343,279],{"class":271},[41,3345,3170],{"class":275},[41,3347,321],{"class":271},[41,3349,26],{"class":58},[41,3351,3352],{"class":275},"; i",[41,3354,1729],{"class":271},[41,3356,584],{"class":58},[41,3358,3352],{"class":275},[41,3360,2431],{"class":271},[41,3362,282],{"class":275},[41,3364,3365],{"class":43,"line":96},[41,3366,2169],{"class":275},[41,3368,3369],{"class":43,"line":104},[41,3370,3371],{"class":47},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[41,3373,3374],{"class":43,"line":176},[41,3375,3376],{"class":47},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[41,3378,3379,3381,3383,3385,3387,3389,3391,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416],{"class":43,"line":184},[41,3380,2635],{"class":271},[41,3382,3242],{"class":275},[41,3384,601],{"class":271},[41,3386,642],{"class":58},[41,3388,3087],{"class":271},[41,3390,465],{"class":58},[41,3392,3393],{"class":271}," ||",[41,3395,3170],{"class":275},[41,3397,601],{"class":271},[41,3399,719],{"class":58},[41,3401,3087],{"class":271},[41,3403,642],{"class":58},[41,3405,3393],{"class":271},[41,3407,3170],{"class":275},[41,3409,857],{"class":271},[41,3411,719],{"class":58},[41,3413,3087],{"class":271},[41,3415,642],{"class":58},[41,3417,282],{"class":275},[41,3419,3420],{"class":43,"line":1757},[41,3421,2648],{"class":275},[41,3423,3424,3426,3428,3431,3433],{"class":43,"line":1763},[41,3425,2653],{"class":275},[41,3427,1317],{"class":271},[41,3429,3430],{"class":378},"\"敲桌子\"",[41,3432,1317],{"class":271},[41,3434,1339],{"class":275},[41,3436,3437],{"class":43,"line":1768},[41,3438,2667],{"class":275},[41,3440,3441],{"class":43,"line":1782},[41,3442,2708],{"class":271},[41,3444,3445],{"class":43,"line":1787},[41,3446,2648],{"class":275},[41,3448,3449,3451,3453,3455,3457],{"class":43,"line":1793},[41,3450,2653],{"class":275},[41,3452,1317],{"class":271},[41,3454,714],{"class":275},[41,3456,1317],{"class":271},[41,3458,1339],{"class":275},[41,3460,3461],{"class":43,"line":1814},[41,3462,2667],{"class":275},[41,3464,3465],{"class":43,"line":1819},[41,3466,2326],{"class":275},[41,3468,3469],{"class":43,"line":1833},[41,3470,1706],{"class":275},[20,3472,3473],{},"嵌套实现星图",[32,3475,3477],{"className":262,"code":3476,"language":264,"meta":37,"style":37},"#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",[24,3478,3479,3485,3495,3503,3507,3533,3537,3566,3570,3581,3585,3594,3598],{"__ignoreMap":37},[41,3480,3481,3483],{"class":43,"line":44},[41,3482,2089],{"class":271},[41,3484,2092],{"class":378},[41,3486,3487,3489,3491,3493],{"class":43,"line":51},[41,3488,2097],{"class":271},[41,3490,2100],{"class":271},[41,3492,2103],{"class":54},[41,3494,1434],{"class":275},[41,3496,3497,3499,3501],{"class":43,"line":62},[41,3498,279],{"class":271},[41,3500,2112],{"class":54},[41,3502,2115],{"class":275},[41,3504,3505],{"class":43,"line":70},[41,3506,1687],{"class":275},[41,3508,3509,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531],{"class":43,"line":76},[41,3510,3339],{"class":271},[41,3512,1798],{"class":275},[41,3514,279],{"class":271},[41,3516,3170],{"class":275},[41,3518,321],{"class":271},[41,3520,465],{"class":58},[41,3522,3177],{"class":275},[41,3524,1183],{"class":271},[41,3526,719],{"class":58},[41,3528,3177],{"class":275},[41,3530,2431],{"class":271},[41,3532,282],{"class":275},[41,3534,3535],{"class":43,"line":83},[41,3536,2169],{"class":275},[41,3538,3539,3542,3544,3546,3549,3551,3553,3556,3558,3560,3562,3564],{"class":43,"line":89},[41,3540,3541],{"class":271},"        for",[41,3543,1798],{"class":275},[41,3545,279],{"class":271},[41,3547,3548],{"class":275}," j",[41,3550,321],{"class":271},[41,3552,465],{"class":58},[41,3554,3555],{"class":275},";j",[41,3557,1183],{"class":271},[41,3559,719],{"class":58},[41,3561,3555],{"class":275},[41,3563,2431],{"class":271},[41,3565,282],{"class":275},[41,3567,3568],{"class":43,"line":96},[41,3569,2648],{"class":275},[41,3571,3572,3574,3576,3579],{"class":43,"line":104},[41,3573,2653],{"class":275},[41,3575,1317],{"class":271},[41,3577,3578],{"class":378},"\"*\"",[41,3580,1434],{"class":275},[41,3582,3583],{"class":43,"line":176},[41,3584,2667],{"class":275},[41,3586,3587,3590,3592],{"class":43,"line":184},[41,3588,3589],{"class":275},"        cout",[41,3591,1317],{"class":271},[41,3593,1339],{"class":275},[41,3595,3596],{"class":43,"line":1757},[41,3597,2326],{"class":275},[41,3599,3600],{"class":43,"line":1763},[41,3601,1706],{"class":275},[20,3603,3604],{},"乘法口诀表",[32,3606,3608],{"className":262,"code":3607,"language":264,"meta":37,"style":37},"#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",[24,3609,3610,3616,3626,3634,3638,3664,3668,3693,3697,3737,3741,3749,3753],{"__ignoreMap":37},[41,3611,3612,3614],{"class":43,"line":44},[41,3613,2089],{"class":271},[41,3615,2473],{"class":378},[41,3617,3618,3620,3622,3624],{"class":43,"line":51},[41,3619,2097],{"class":271},[41,3621,2100],{"class":271},[41,3623,2103],{"class":54},[41,3625,1434],{"class":275},[41,3627,3628,3630,3632],{"class":43,"line":62},[41,3629,279],{"class":271},[41,3631,2112],{"class":54},[41,3633,2115],{"class":275},[41,3635,3636],{"class":43,"line":70},[41,3637,1687],{"class":275},[41,3639,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662],{"class":43,"line":76},[41,3641,3339],{"class":271},[41,3643,276],{"class":275},[41,3645,279],{"class":271},[41,3647,3170],{"class":275},[41,3649,321],{"class":271},[41,3651,26],{"class":58},[41,3653,3177],{"class":275},[41,3655,1183],{"class":271},[41,3657,719],{"class":58},[41,3659,3177],{"class":275},[41,3661,2431],{"class":271},[41,3663,282],{"class":275},[41,3665,3666],{"class":43,"line":83},[41,3667,2169],{"class":275},[41,3669,3670,3672,3674,3676,3678,3680,3682,3684,3686,3689,3691],{"class":43,"line":89},[41,3671,3541],{"class":271},[41,3673,276],{"class":275},[41,3675,279],{"class":271},[41,3677,3548],{"class":275},[41,3679,321],{"class":271},[41,3681,26],{"class":58},[41,3683,3555],{"class":275},[41,3685,1729],{"class":271},[41,3687,3688],{"class":275},"i;j",[41,3690,2431],{"class":271},[41,3692,282],{"class":275},[41,3694,3695],{"class":43,"line":96},[41,3696,2648],{"class":275},[41,3698,3699,3701,3703,3705,3707,3709,3711,3713,3715,3718,3720,3722,3724,3726,3728,3731,3733,3735],{"class":43,"line":104},[41,3700,2653],{"class":275},[41,3702,1317],{"class":271},[41,3704,740],{"class":275},[41,3706,1317],{"class":271},[41,3708,3578],{"class":378},[41,3710,1317],{"class":271},[41,3712,714],{"class":275},[41,3714,1317],{"class":271},[41,3716,3717],{"class":378},"\"=\"",[41,3719,1317],{"class":271},[41,3721,714],{"class":275},[41,3723,728],{"class":271},[41,3725,740],{"class":275},[41,3727,1317],{"class":271},[41,3729,3730],{"class":378},"'",[41,3732,1374],{"class":58},[41,3734,3730],{"class":378},[41,3736,1434],{"class":275},[41,3738,3739],{"class":43,"line":176},[41,3740,2667],{"class":275},[41,3742,3743,3745,3747],{"class":43,"line":184},[41,3744,3589],{"class":275},[41,3746,1317],{"class":271},[41,3748,1339],{"class":275},[41,3750,3751],{"class":43,"line":1757},[41,3752,2326],{"class":275},[41,3754,3755],{"class":43,"line":1763},[41,3756,1706],{"class":275},[241,3758,3760],{"id":3759},"_163跳出语句","1.6.3跳出语句",[224,3762,3763],{},[227,3764,3765],{},"break语句\n作用：用于跳出选择结构或者循环结构",[20,3767,3768],{},"break使用时机：",[1280,3770,3771,3774,3777],{},[227,3772,3773],{},"出现在switch条件语句中，作用是终止case并跳出switch",[227,3775,3776],{},"出现在循环结构中，作用是跳出当前的循环结构",[227,3778,3779],{},"出现在嵌套循环中，跳出最近的内层循环语句",[224,3781,3782,3785],{"start":51},[227,3783,3784],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[227,3786,3787],{},"goto语句\n语法：goto 标记;",[20,3789,3790],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[32,3792,3794],{"className":262,"code":3793,"language":264,"meta":37,"style":37},"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",[24,3795,3796,3804,3808,3821,3831,3844,3857,3870,3878,3894],{"__ignoreMap":37},[41,3797,3798,3800,3802],{"class":43,"line":44},[41,3799,279],{"class":271},[41,3801,2112],{"class":54},[41,3803,2115],{"class":275},[41,3805,3806],{"class":43,"line":51},[41,3807,1687],{"class":275},[41,3809,3810,3812,3814,3817,3819],{"class":43,"line":62},[41,3811,1692],{"class":275},[41,3813,1317],{"class":271},[41,3815,3816],{"class":378},"\"1\"",[41,3818,1317],{"class":271},[41,3820,1339],{"class":275},[41,3822,3823,3826,3829],{"class":43,"line":70},[41,3824,3825],{"class":271},"    goto",[41,3827,3828],{"class":54}," FLAG",[41,3830,1434],{"class":275},[41,3832,3833,3835,3837,3840,3842],{"class":43,"line":76},[41,3834,1692],{"class":275},[41,3836,1317],{"class":271},[41,3838,3839],{"class":378},"\"2\"",[41,3841,1317],{"class":271},[41,3843,1339],{"class":275},[41,3845,3846,3848,3850,3853,3855],{"class":43,"line":83},[41,3847,1692],{"class":275},[41,3849,1317],{"class":271},[41,3851,3852],{"class":378},"\"3\"",[41,3854,1317],{"class":271},[41,3856,1339],{"class":275},[41,3858,3859,3861,3863,3866,3868],{"class":43,"line":89},[41,3860,1692],{"class":275},[41,3862,1317],{"class":271},[41,3864,3865],{"class":378},"\"4\"",[41,3867,1317],{"class":271},[41,3869,1339],{"class":275},[41,3871,3872,3875],{"class":43,"line":96},[41,3873,3874],{"class":54},"    FLAG",[41,3876,3877],{"class":275},":\n",[41,3879,3880,3882,3884,3887,3889,3891],{"class":43,"line":104},[41,3881,1692],{"class":275},[41,3883,1317],{"class":271},[41,3885,3886],{"class":378},"\"5\"",[41,3888,1317],{"class":271},[41,3890,1382],{"class":275},[41,3892,3893],{"class":47},"\u002F\u002F跳过了2,3,4,直接到5\n",[41,3895,3896],{"class":43,"line":176},[41,3897,1706],{"class":275},[15,3899,3901],{"id":3900},"_17数组","1.7数组",[241,3903,3905],{"id":3904},"_171一维数组","1.7.1一维数组",[224,3907,3908],{},[227,3909,3910],{},"一维数组定义方式",[411,3912,3913,3923],{},[414,3914,3915],{},[417,3916,3917,3920],{},[420,3918,3919],{},"方式",[420,3921,3922],{},"注意事项",[458,3924,3925,3939,3949],{},[417,3926,3927,3933],{},[463,3928,3929,3930,330],{},"数据类型 数组名",[41,3931,3932],{},"数组长度",[463,3934,3935,3936,3938],{},"这种方式是先定义再arr",[41,3937,714],{},"赋值",[417,3940,3941,3946],{},[463,3942,3929,3943,3945],{},[41,3944,3932],{},"={值1,值2....};",[463,3947,3948],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[417,3950,3951,3955],{},[463,3952,3929,3953,3945],{},[41,3954],{},[463,3956,3957,3958,3960],{},"int arr",[41,3959],{},";这是不正确的，按照这样的方式定义必须有初始长度",[224,3962,3963],{"start":51},[227,3964,3965],{},"一维数组数组名\n用途：",[1280,3967,3968],{},[227,3969,3970],{},"1.可以统计整个数组在内存中的长度：",[32,3972,3974],{"className":262,"code":3973,"language":264,"meta":37,"style":37},"sizeof(arr);\nsizeof(arr[0]);\n",[24,3975,3976,3983],{"__ignoreMap":37},[41,3977,3978,3980],{"class":43,"line":44},[41,3979,272],{"class":271},[41,3981,3982],{"class":275},"(arr);\n",[41,3984,3985,3987,3990,3992],{"class":43,"line":51},[41,3986,272],{"class":271},[41,3988,3989],{"class":275},"(arr[",[41,3991,465],{"class":58},[41,3993,3994],{"class":275},"]);\n",[1280,3996,3997],{},[227,3998,3999],{},"2.可以获取数组在内存中的首地址:",[32,4001,4003],{"className":262,"code":4002,"language":264,"meta":37,"style":37},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[24,4004,4005,4010,4023,4028],{"__ignoreMap":37},[41,4006,4007],{"class":43,"line":44},[41,4008,4009],{"class":47},"\u002F\u002F查看16进制的首地址\n",[41,4011,4012,4014,4016,4019,4021],{"class":43,"line":51},[41,4013,1510],{"class":275},[41,4015,1317],{"class":271},[41,4017,4018],{"class":275},"arr",[41,4020,1317],{"class":271},[41,4022,1339],{"class":275},[41,4024,4025],{"class":43,"line":62},[41,4026,4027],{"class":47},"\u002F\u002F看10进制数\n",[41,4029,4030,4032,4034,4036,4038,4040,4042,4045,4047,4049,4051],{"class":43,"line":70},[41,4031,1510],{"class":275},[41,4033,1317],{"class":271},[41,4035,276],{"class":275},[41,4037,279],{"class":271},[41,4039,702],{"class":275},[41,4041,626],{"class":271},[41,4043,4044],{"class":275},"arr[",[41,4046,465],{"class":58},[41,4048,1213],{"class":275},[41,4050,1317],{"class":271},[41,4052,1339],{"class":275},[20,4054,4055],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1280,4057,4058],{},[227,4059,4060],{},"1️⃣五只小猪称体重",[32,4062,4064],{"className":262,"code":4063,"language":264,"meta":37,"style":37},"#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",[24,4065,4066,4072,4082,4090,4094,4134,4147,4173,4177,4189,4193,4203,4207,4211,4224,4234],{"__ignoreMap":37},[41,4067,4068,4070],{"class":43,"line":44},[41,4069,2089],{"class":271},[41,4071,2092],{"class":378},[41,4073,4074,4076,4078,4080],{"class":43,"line":51},[41,4075,2097],{"class":271},[41,4077,2100],{"class":271},[41,4079,2103],{"class":54},[41,4081,1434],{"class":275},[41,4083,4084,4086,4088],{"class":43,"line":62},[41,4085,279],{"class":271},[41,4087,2112],{"class":54},[41,4089,2115],{"class":275},[41,4091,4092],{"class":43,"line":70},[41,4093,1687],{"class":275},[41,4095,4096,4098,4101,4103,4105,4107,4109,4112,4114,4117,4119,4121,4123,4126,4128,4131],{"class":43,"line":76},[41,4097,2124],{"class":271},[41,4099,4100],{"class":275}," arr[",[41,4102,592],{"class":58},[41,4104,1213],{"class":275},[41,4106,321],{"class":271},[41,4108,1169],{"class":275},[41,4110,4111],{"class":58},"300",[41,4113,651],{"class":275},[41,4115,4116],{"class":58},"350",[41,4118,651],{"class":275},[41,4120,1862],{"class":58},[41,4122,651],{"class":275},[41,4124,4125],{"class":58},"400",[41,4127,651],{"class":275},[41,4129,4130],{"class":58},"250",[41,4132,4133],{"class":275},"};\n",[41,4135,4136,4138,4141,4143,4145],{"class":43,"line":83},[41,4137,2124],{"class":271},[41,4139,4140],{"class":275}," tmp",[41,4142,321],{"class":271},[41,4144,465],{"class":58},[41,4146,1434],{"class":275},[41,4148,4149,4151,4153,4155,4157,4159,4161,4163,4165,4167,4169,4171],{"class":43,"line":89},[41,4150,3339],{"class":271},[41,4152,1798],{"class":275},[41,4154,279],{"class":271},[41,4156,3170],{"class":275},[41,4158,321],{"class":271},[41,4160,465],{"class":58},[41,4162,3177],{"class":275},[41,4164,1183],{"class":271},[41,4166,592],{"class":58},[41,4168,3177],{"class":275},[41,4170,2431],{"class":271},[41,4172,282],{"class":275},[41,4174,4175],{"class":43,"line":96},[41,4176,2169],{"class":275},[41,4178,4179,4181,4184,4186],{"class":43,"line":104},[41,4180,2635],{"class":271},[41,4182,4183],{"class":275},"(tmp",[41,4185,1183],{"class":271},[41,4187,4188],{"class":275},"arr[i])\n",[41,4190,4191],{"class":43,"line":176},[41,4192,2648],{"class":275},[41,4194,4195,4198,4200],{"class":43,"line":184},[41,4196,4197],{"class":275},"            tmp",[41,4199,321],{"class":271},[41,4201,4202],{"class":275},"arr[i];\n",[41,4204,4205],{"class":43,"line":1757},[41,4206,2667],{"class":275},[41,4208,4209],{"class":43,"line":1763},[41,4210,2326],{"class":275},[41,4212,4213,4215,4217,4220,4222],{"class":43,"line":1768},[41,4214,1692],{"class":275},[41,4216,1317],{"class":271},[41,4218,4219],{"class":275},"tmp",[41,4221,1317],{"class":271},[41,4223,1339],{"class":275},[41,4225,4226,4229,4232],{"class":43,"line":1782},[41,4227,4228],{"class":271},"    return",[41,4230,4231],{"class":58}," 0",[41,4233,1434],{"class":275},[41,4235,4236],{"class":43,"line":1787},[41,4237,1706],{"class":275},[1280,4239,4240],{},[227,4241,4242],{},"2️⃣数组元素逆置",[32,4244,4246],{"className":262,"code":4245,"language":264,"meta":37,"style":37},"\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",[24,4247,4248,4253,4259,4269,4277,4281,4316,4332,4364,4377,4382,4387,4399,4409,4419,4424,4433,4443,4448,4453,4480,4484,4500,4504,4515,4524],{"__ignoreMap":37},[41,4249,4250],{"class":43,"line":44},[41,4251,4252],{"class":47},"\u002F\u002F元素逆置\n",[41,4254,4255,4257],{"class":43,"line":51},[41,4256,2089],{"class":271},[41,4258,2092],{"class":378},[41,4260,4261,4263,4265,4267],{"class":43,"line":62},[41,4262,2097],{"class":271},[41,4264,2100],{"class":271},[41,4266,2103],{"class":54},[41,4268,1434],{"class":275},[41,4270,4271,4273,4275],{"class":43,"line":70},[41,4272,279],{"class":271},[41,4274,2112],{"class":54},[41,4276,2115],{"class":275},[41,4278,4279],{"class":43,"line":76},[41,4280,1687],{"class":275},[41,4282,4283,4286,4288,4290,4292,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314],{"class":43,"line":83},[41,4284,4285],{"class":271},"   int",[41,4287,4100],{"class":275},[41,4289,592],{"class":58},[41,4291,1213],{"class":275},[41,4293,321],{"class":271},[41,4295,1169],{"class":275},[41,4297,26],{"class":58},[41,4299,651],{"class":275},[41,4301,351],{"class":58},[41,4303,651],{"class":275},[41,4305,345],{"class":58},[41,4307,651],{"class":275},[41,4309,566],{"class":58},[41,4311,651],{"class":275},[41,4313,592],{"class":58},[41,4315,4133],{"class":275},[41,4317,4318,4320,4323,4325,4327,4329],{"class":43,"line":89},[41,4319,4285],{"class":271},[41,4321,4322],{"class":275}," start",[41,4324,321],{"class":271},[41,4326,465],{"class":58},[41,4328,330],{"class":275},[41,4330,4331],{"class":47},"\u002F\u002F起始下标\n",[41,4333,4334,4336,4339,4342,4345,4348,4350,4352,4355,4357,4359,4361],{"class":43,"line":96},[41,4335,4285],{"class":271},[41,4337,4338],{"class":275}," end",[41,4340,4341],{"class":271},"=sizeof",[41,4343,4344],{"class":275},"(arr)",[41,4346,4347],{"class":271},"\u002Fsizeof",[41,4349,3989],{"class":275},[41,4351,465],{"class":58},[41,4353,4354],{"class":275},"])",[41,4356,805],{"class":271},[41,4358,26],{"class":58},[41,4360,330],{"class":275},[41,4362,4363],{"class":47},"\u002F\u002F结束下标\n",[41,4365,4366,4369,4372,4374],{"class":43,"line":104},[41,4367,4368],{"class":271},"   while",[41,4370,4371],{"class":275}," (start",[41,4373,1183],{"class":271},[41,4375,4376],{"class":275},"end)\n",[41,4378,4379],{"class":43,"line":176},[41,4380,4381],{"class":275},"   {\n",[41,4383,4384],{"class":43,"line":184},[41,4385,4386],{"class":47},"    \u002F\u002F实现元素互换代码\n",[41,4388,4389,4391,4394,4396],{"class":43,"line":1757},[41,4390,2124],{"class":271},[41,4392,4393],{"class":275}," temp",[41,4395,321],{"class":271},[41,4397,4398],{"class":275},"arr[start];\n",[41,4400,4401,4404,4406],{"class":43,"line":1763},[41,4402,4403],{"class":275},"    arr[start]",[41,4405,321],{"class":271},[41,4407,4408],{"class":275},"arr[end];\n",[41,4410,4411,4414,4416],{"class":43,"line":1768},[41,4412,4413],{"class":275},"    arr[end]",[41,4415,321],{"class":271},[41,4417,4418],{"class":275},"temp;\n",[41,4420,4421],{"class":43,"line":1782},[41,4422,4423],{"class":47},"    \u002F\u002F下标更新\n",[41,4425,4426,4429,4431],{"class":43,"line":1787},[41,4427,4428],{"class":275},"    start",[41,4430,2431],{"class":271},[41,4432,1434],{"class":275},[41,4434,4435,4438,4441],{"class":43,"line":1793},[41,4436,4437],{"class":275},"    end",[41,4439,4440],{"class":271},"--",[41,4442,1434],{"class":275},[41,4444,4445],{"class":43,"line":1814},[41,4446,4447],{"class":275},"   }\n",[41,4449,4450],{"class":43,"line":1819},[41,4451,4452],{"class":47},"   \u002F\u002F输出逆置后的数组\n",[41,4454,4455,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478],{"class":43,"line":1833},[41,4456,4457],{"class":271},"   for",[41,4459,1798],{"class":275},[41,4461,279],{"class":271},[41,4463,3170],{"class":275},[41,4465,321],{"class":271},[41,4467,465],{"class":58},[41,4469,3177],{"class":275},[41,4471,1183],{"class":271},[41,4473,592],{"class":58},[41,4475,3177],{"class":275},[41,4477,2431],{"class":271},[41,4479,282],{"class":275},[41,4481,4482],{"class":43,"line":1838},[41,4483,4381],{"class":275},[41,4485,4486,4488,4490,4493,4495,4498],{"class":43,"line":1867},[41,4487,1692],{"class":275},[41,4489,1317],{"class":271},[41,4491,4492],{"class":275},"arr[i]",[41,4494,1317],{"class":271},[41,4496,4497],{"class":378},"\" \"",[41,4499,1434],{"class":275},[41,4501,4502],{"class":43,"line":1872},[41,4503,4447],{"class":275},[41,4505,4506,4509,4511,4513],{"class":43,"line":1889},[41,4507,4508],{"class":54},"   system",[41,4510,276],{"class":275},[41,4512,2447],{"class":378},[41,4514,2857],{"class":275},[41,4516,4517,4520,4522],{"class":43,"line":1894},[41,4518,4519],{"class":271},"   return",[41,4521,4231],{"class":58},[41,4523,1434],{"class":275},[41,4525,4526],{"class":43,"line":1899},[41,4527,1706],{"class":275},[1280,4529,4530],{},[227,4531,4532],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[32,4534,4536],{"className":262,"code":4535,"language":264,"meta":37,"style":37},"\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",[24,4537,4538,4543,4549,4559,4567,4571,4623,4636,4662,4666,4680,4684,4689,4694,4724,4728,4733,4767,4771,4776,4796,4801,4813,4829,4844,4849,4853,4857,4870,4896,4900,4914,4918,4926],{"__ignoreMap":37},[41,4539,4540],{"class":43,"line":44},[41,4541,4542],{"class":47},"\u002F\u002F冒泡排序,升序\n",[41,4544,4545,4547],{"class":43,"line":51},[41,4546,2089],{"class":271},[41,4548,2092],{"class":378},[41,4550,4551,4553,4555,4557],{"class":43,"line":62},[41,4552,2097],{"class":271},[41,4554,2100],{"class":271},[41,4556,2103],{"class":54},[41,4558,1434],{"class":275},[41,4560,4561,4563,4565],{"class":43,"line":70},[41,4562,279],{"class":271},[41,4564,2112],{"class":54},[41,4566,2115],{"class":275},[41,4568,4569],{"class":43,"line":76},[41,4570,1687],{"class":275},[41,4572,4573,4575,4577,4579,4582,4584,4587,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621],{"class":43,"line":83},[41,4574,2124],{"class":271},[41,4576,4100],{"class":275},[41,4578,693],{"class":58},[41,4580,4581],{"class":275},"] ",[41,4583,321],{"class":271},[41,4585,4586],{"class":275}," {",[41,4588,566],{"class":58},[41,4590,651],{"class":275},[41,4592,351],{"class":58},[41,4594,651],{"class":275},[41,4596,668],{"class":58},[41,4598,651],{"class":275},[41,4600,465],{"class":58},[41,4602,651],{"class":275},[41,4604,592],{"class":58},[41,4606,651],{"class":275},[41,4608,642],{"class":58},[41,4610,651],{"class":275},[41,4612,26],{"class":58},[41,4614,651],{"class":275},[41,4616,345],{"class":58},[41,4618,651],{"class":275},[41,4620,693],{"class":58},[41,4622,4133],{"class":275},[41,4624,4625,4627,4629,4632,4634],{"class":43,"line":89},[41,4626,1692],{"class":275},[41,4628,1317],{"class":271},[41,4630,4631],{"class":378},"\"排序前：\"",[41,4633,1317],{"class":271},[41,4635,1339],{"class":275},[41,4637,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658,4660],{"class":43,"line":96},[41,4639,3339],{"class":271},[41,4641,1798],{"class":275},[41,4643,279],{"class":271},[41,4645,3170],{"class":275},[41,4647,321],{"class":271},[41,4649,465],{"class":58},[41,4651,3177],{"class":275},[41,4653,1183],{"class":271},[41,4655,693],{"class":58},[41,4657,3177],{"class":275},[41,4659,2431],{"class":271},[41,4661,282],{"class":275},[41,4663,4664],{"class":43,"line":104},[41,4665,2169],{"class":275},[41,4667,4668,4670,4672,4674,4676,4678],{"class":43,"line":176},[41,4669,3589],{"class":275},[41,4671,1317],{"class":271},[41,4673,4492],{"class":275},[41,4675,1317],{"class":271},[41,4677,4497],{"class":378},[41,4679,1434],{"class":275},[41,4681,4682],{"class":43,"line":184},[41,4683,2326],{"class":275},[41,4685,4686],{"class":43,"line":1757},[41,4687,4688],{"class":47},"    \u002F\u002F开始冒泡排序\n",[41,4690,4691],{"class":43,"line":1763},[41,4692,4693],{"class":47},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[41,4695,4696,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720,4722],{"class":43,"line":1768},[41,4697,3339],{"class":271},[41,4699,1798],{"class":275},[41,4701,279],{"class":271},[41,4703,3170],{"class":275},[41,4705,321],{"class":271},[41,4707,465],{"class":58},[41,4709,3177],{"class":275},[41,4711,1183],{"class":271},[41,4713,693],{"class":58},[41,4715,805],{"class":271},[41,4717,26],{"class":58},[41,4719,3177],{"class":275},[41,4721,2431],{"class":271},[41,4723,282],{"class":275},[41,4725,4726],{"class":43,"line":1782},[41,4727,2169],{"class":275},[41,4729,4730],{"class":43,"line":1787},[41,4731,4732],{"class":47},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[41,4734,4735,4737,4739,4741,4743,4745,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765],{"class":43,"line":1793},[41,4736,3541],{"class":271},[41,4738,1798],{"class":275},[41,4740,279],{"class":271},[41,4742,3548],{"class":275},[41,4744,321],{"class":271},[41,4746,465],{"class":58},[41,4748,3555],{"class":275},[41,4750,1183],{"class":271},[41,4752,693],{"class":58},[41,4754,805],{"class":271},[41,4756,714],{"class":275},[41,4758,805],{"class":271},[41,4760,26],{"class":58},[41,4762,3555],{"class":275},[41,4764,2431],{"class":271},[41,4766,282],{"class":275},[41,4768,4769],{"class":43,"line":1814},[41,4770,2648],{"class":275},[41,4772,4773],{"class":43,"line":1819},[41,4774,4775],{"class":47},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[41,4777,4778,4781,4784,4786,4789,4791,4793],{"class":43,"line":1833},[41,4779,4780],{"class":271},"            if",[41,4782,4783],{"class":275},"(arr[j]",[41,4785,1233],{"class":271},[41,4787,4788],{"class":275},"arr[j",[41,4790,754],{"class":271},[41,4792,26],{"class":58},[41,4794,4795],{"class":275},"])\n",[41,4797,4798],{"class":43,"line":1838},[41,4799,4800],{"class":275},"            {\n",[41,4802,4803,4806,4808,4810],{"class":43,"line":1867},[41,4804,4805],{"class":271},"                int",[41,4807,4393],{"class":275},[41,4809,321],{"class":271},[41,4811,4812],{"class":275},"arr[j];\n",[41,4814,4815,4818,4820,4822,4824,4826],{"class":43,"line":1872},[41,4816,4817],{"class":275},"                arr[j]",[41,4819,321],{"class":271},[41,4821,4788],{"class":275},[41,4823,754],{"class":271},[41,4825,26],{"class":58},[41,4827,4828],{"class":275},"];\n",[41,4830,4831,4834,4836,4838,4840,4842],{"class":43,"line":1889},[41,4832,4833],{"class":275},"                arr[j",[41,4835,754],{"class":271},[41,4837,26],{"class":58},[41,4839,1213],{"class":275},[41,4841,321],{"class":271},[41,4843,4418],{"class":275},[41,4845,4846],{"class":43,"line":1894},[41,4847,4848],{"class":275},"            }\n",[41,4850,4851],{"class":43,"line":1899},[41,4852,2667],{"class":275},[41,4854,4855],{"class":43,"line":1904},[41,4856,2326],{"class":275},[41,4858,4859,4861,4863,4866,4868],{"class":43,"line":1918},[41,4860,1692],{"class":275},[41,4862,1317],{"class":271},[41,4864,4865],{"class":378},"\"排序后：\"",[41,4867,1317],{"class":271},[41,4869,1339],{"class":275},[41,4871,4872,4874,4876,4878,4880,4882,4884,4886,4888,4890,4892,4894],{"class":43,"line":1923},[41,4873,3339],{"class":271},[41,4875,1798],{"class":275},[41,4877,279],{"class":271},[41,4879,3170],{"class":275},[41,4881,321],{"class":271},[41,4883,465],{"class":58},[41,4885,3177],{"class":275},[41,4887,1183],{"class":271},[41,4889,693],{"class":58},[41,4891,3177],{"class":275},[41,4893,2431],{"class":271},[41,4895,282],{"class":275},[41,4897,4898],{"class":43,"line":2715},[41,4899,2169],{"class":275},[41,4901,4902,4904,4906,4908,4910,4912],{"class":43,"line":2729},[41,4903,3589],{"class":275},[41,4905,1317],{"class":271},[41,4907,4492],{"class":275},[41,4909,1317],{"class":271},[41,4911,4497],{"class":378},[41,4913,1434],{"class":275},[41,4915,4916],{"class":43,"line":2737},[41,4917,2326],{"class":275},[41,4919,4920,4922,4924],{"class":43,"line":2742},[41,4921,4228],{"class":271},[41,4923,4231],{"class":58},[41,4925,1434],{"class":275},[41,4927,4928],{"class":43,"line":2748},[41,4929,1706],{"class":275},[241,4931,4933],{"id":4932},"_172二维数组","1.7.2二维数组",[224,4935,4936],{},[227,4937,4938],{},"二维数组的四种定义方式",[411,4940,4941,4950],{},[414,4942,4943],{},[417,4944,4945,4948],{},[420,4946,4947],{},"序号",[420,4949,3919],{},[458,4951,4952,4962,4971,4980,4989],{},[417,4953,4954,4956],{},[463,4955,26],{},[463,4957,4958,4959,330],{},"数据类型 数组名[行数]",[41,4960,4961],{},"列数",[417,4963,4964,4966],{},[463,4965,351],{},[463,4967,4958,4968,4970],{},[41,4969,4961],{},"={ {数据1,数据2}，{数据3，数据4}... }",[417,4972,4973,4975],{},[463,4974,345],{},[463,4976,4958,4977,4979],{},[41,4978,4961],{},"={数据1,数据2,数据3...}",[417,4981,4982,4984],{},[463,4983,566],{},[463,4985,4986,4987,4979],{},"数据类型 数组名[]",[41,4988,4961],{},[417,4990,4991,4994],{},[463,4992,4993],{},"注意：不能只省略列数",[463,4995],{},[224,4997,4998],{"start":51},[227,4999,5000],{},"二维数组数组名",[1280,5002,5003,5006],{},[227,5004,5005],{},"1.查看二维数组所占内存空间",[227,5007,5008],{},"2.获取二维数组首地址",[20,5010,5011],{},"已知二维数组，求二维数组的行数与列数",[32,5013,5015],{"className":262,"code":5014,"language":264,"meta":37,"style":37},"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",[24,5016,5017,5025,5029,5047,5051,5069,5085,5090,5115,5148],{"__ignoreMap":37},[41,5018,5019,5021,5023],{"class":43,"line":44},[41,5020,279],{"class":271},[41,5022,2112],{"class":54},[41,5024,2115],{"class":275},[41,5026,5027],{"class":43,"line":51},[41,5028,1687],{"class":275},[41,5030,5031,5033,5035,5037,5040,5042,5044],{"class":43,"line":62},[41,5032,2124],{"class":271},[41,5034,4100],{"class":275},[41,5036,351],{"class":58},[41,5038,5039],{"class":275},"][",[41,5041,345],{"class":58},[41,5043,1213],{"class":275},[41,5045,5046],{"class":271},"=\n",[41,5048,5049],{"class":43,"line":70},[41,5050,2169],{"class":275},[41,5052,5053,5056,5058,5060,5062,5064,5066],{"class":43,"line":76},[41,5054,5055],{"class":275},"        {",[41,5057,26],{"class":58},[41,5059,651],{"class":275},[41,5061,351],{"class":58},[41,5063,651],{"class":275},[41,5065,345],{"class":58},[41,5067,5068],{"class":275},"},\n",[41,5070,5071,5073,5075,5077,5079,5081,5083],{"class":43,"line":83},[41,5072,5055],{"class":275},[41,5074,566],{"class":58},[41,5076,651],{"class":275},[41,5078,592],{"class":58},[41,5080,651],{"class":275},[41,5082,617],{"class":58},[41,5084,1706],{"class":275},[41,5086,5087],{"class":43,"line":89},[41,5088,5089],{"class":275},"    };\n",[41,5091,5092,5094,5096,5099,5101,5103,5105,5107,5109,5111,5113],{"class":43,"line":96},[41,5093,1692],{"class":275},[41,5095,1317],{"class":271},[41,5097,5098],{"class":378},"\"二维数组的行数\"",[41,5100,1513],{"class":271},[41,5102,4344],{"class":275},[41,5104,4347],{"class":271},[41,5106,3989],{"class":275},[41,5108,465],{"class":58},[41,5110,4354],{"class":275},[41,5112,1317],{"class":271},[41,5114,1339],{"class":275},[41,5116,5117,5119,5121,5124,5126,5128,5130,5132,5134,5136,5138,5140,5142,5144,5146],{"class":43,"line":104},[41,5118,1692],{"class":275},[41,5120,1317],{"class":271},[41,5122,5123],{"class":378},"\"二维数组的列数\"",[41,5125,1513],{"class":271},[41,5127,3989],{"class":275},[41,5129,465],{"class":58},[41,5131,4354],{"class":275},[41,5133,4347],{"class":271},[41,5135,3989],{"class":275},[41,5137,465],{"class":58},[41,5139,5039],{"class":275},[41,5141,465],{"class":58},[41,5143,4354],{"class":275},[41,5145,1317],{"class":271},[41,5147,1339],{"class":275},[41,5149,5150],{"class":43,"line":176},[41,5151,1706],{"class":275},[20,5153,5154],{},"查看二维数组首地址",[32,5156,5158],{"className":262,"code":5157,"language":264,"meta":37,"style":37},"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",[24,5159,5160,5177,5203,5228],{"__ignoreMap":37},[41,5161,5162,5164,5166,5169,5171,5173,5175],{"class":43,"line":44},[41,5163,1510],{"class":275},[41,5165,1317],{"class":271},[41,5167,5168],{"class":378},"\"二维数组首地址：\"",[41,5170,1317],{"class":271},[41,5172,4018],{"class":275},[41,5174,1317],{"class":271},[41,5176,1339],{"class":275},[41,5178,5179,5181,5183,5186,5188,5190,5192,5195,5197,5199,5201],{"class":43,"line":51},[41,5180,1510],{"class":275},[41,5182,1317],{"class":271},[41,5184,5185],{"class":378},"\"二维数组第一行的首地址：\"",[41,5187,1317],{"class":271},[41,5189,276],{"class":275},[41,5191,279],{"class":271},[41,5193,5194],{"class":275},")arr[",[41,5196,465],{"class":58},[41,5198,1213],{"class":275},[41,5200,1317],{"class":271},[41,5202,1339],{"class":275},[41,5204,5205,5207,5209,5212,5214,5216,5218,5220,5222,5224,5226],{"class":43,"line":62},[41,5206,1510],{"class":275},[41,5208,1317],{"class":271},[41,5210,5211],{"class":378},"\"二维数组第二行的首地址：\"",[41,5213,1317],{"class":271},[41,5215,276],{"class":275},[41,5217,279],{"class":271},[41,5219,5194],{"class":275},[41,5221,26],{"class":58},[41,5223,1213],{"class":275},[41,5225,1317],{"class":271},[41,5227,1339],{"class":275},[41,5229,5230,5232,5234,5237,5239,5241,5243,5245,5247,5249,5251,5253,5255,5257,5259,5261],{"class":43,"line":70},[41,5231,1510],{"class":275},[41,5233,1317],{"class":271},[41,5235,5236],{"class":378},"\"二维数组第一个元素的首地址:\"",[41,5238,1317],{"class":271},[41,5240,276],{"class":275},[41,5242,279],{"class":271},[41,5244,702],{"class":275},[41,5246,626],{"class":271},[41,5248,4044],{"class":275},[41,5250,465],{"class":58},[41,5252,5039],{"class":275},[41,5254,465],{"class":58},[41,5256,1213],{"class":275},[41,5258,1317],{"class":271},[41,5260,1382],{"class":275},[41,5262,5263],{"class":47},"\u002F\u002F对于数，要加取址符\n",[189,5265,5266],{},"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":37,"searchDepth":51,"depth":51,"links":5268},[5269,5270,5271,5279,5280,5286,5291],{"id":214,"depth":51,"text":215},{"id":221,"depth":51,"text":222},{"id":238,"depth":51,"text":239,"children":5272},[5273,5274,5275,5276,5277,5278],{"id":243,"depth":62,"text":244},{"id":292,"depth":62,"text":293},{"id":359,"depth":62,"text":360},{"id":1298,"depth":62,"text":1299},{"id":1388,"depth":62,"text":1389},{"id":1484,"depth":62,"text":1485},{"id":1526,"depth":51,"text":1527},{"id":1594,"depth":51,"text":1595,"children":5281},[5282,5283,5284,5285],{"id":1598,"depth":62,"text":1599},{"id":1620,"depth":62,"text":1621},{"id":1629,"depth":62,"text":1630},{"id":1638,"depth":62,"text":1639},{"id":1647,"depth":51,"text":1648,"children":5287},[5288,5289,5290],{"id":1651,"depth":62,"text":1652},{"id":2344,"depth":62,"text":2345},{"id":3759,"depth":62,"text":3760},{"id":3900,"depth":51,"text":3901,"children":5292},[5293,5294],{"id":3904,"depth":62,"text":3905},{"id":4932,"depth":62,"text":4933},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":206,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5301,"title":5302,"body":5303,"description":37,"extension":197,"meta":6403,"navigation":79,"path":6404,"seo":6405,"stem":6406,"__hash__":6407},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5304,"toc":6395},[5305,5308,5312,5320,5328,5331,5397,5401,5404,5480,5484,5487,5490,5493,5706,5710,5715,5779,5784,5851,5856,5947,5950,6055,6059,6062,6068,6212,6216,6219,6233,6236,6281,6284,6392],[10,5306,5302],{"id":5307},"_2函数",[15,5309,5311],{"id":5310},"_21函数概述","2.1函数概述",[224,5313,5314,5317],{},[227,5315,5316],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[227,5318,5319],{},"语法：",[32,5321,5326],{"className":5322,"code":5324,"language":5325,"meta":37},[5323],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[24,5327,5324],{"__ignoreMap":37},[20,5329,5330],{},"小案例",[32,5332,5334],{"className":262,"code":5333,"language":264,"meta":37,"style":37},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[24,5335,5336,5341,5365,5369,5386,5393],{"__ignoreMap":37},[41,5337,5338],{"class":43,"line":44},[41,5339,5340],{"class":47},"\u002F\u002Fnum1,num2形参\n",[41,5342,5343,5345,5348,5350,5352,5356,5358,5360,5363],{"class":43,"line":51},[41,5344,279],{"class":271},[41,5346,5347],{"class":54}," add",[41,5349,276],{"class":275},[41,5351,279],{"class":271},[41,5353,5355],{"class":5354},"s4XuR"," num1",[41,5357,651],{"class":275},[41,5359,279],{"class":271},[41,5361,5362],{"class":5354}," num2",[41,5364,282],{"class":275},[41,5366,5367],{"class":43,"line":62},[41,5368,1687],{"class":275},[41,5370,5371,5373,5376,5378,5381,5383],{"class":43,"line":70},[41,5372,2124],{"class":271},[41,5374,5375],{"class":275}," sum",[41,5377,321],{"class":271},[41,5379,5380],{"class":275},"num1",[41,5382,754],{"class":271},[41,5384,5385],{"class":275},"num2;\n",[41,5387,5388,5390],{"class":43,"line":76},[41,5389,4228],{"class":271},[41,5391,5392],{"class":275}," sum;\n",[41,5394,5395],{"class":43,"line":83},[41,5396,1706],{"class":275},[15,5398,5400],{"id":5399},"_22函数调用","2.2函数调用",[20,5402,5403],{},"调用刚刚写的求和函数",[32,5405,5407],{"className":262,"code":5406,"language":264,"meta":37,"style":37},"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",[24,5408,5409,5417,5421,5426,5438,5450,5459,5464,5476],{"__ignoreMap":37},[41,5410,5411,5413,5415],{"class":43,"line":44},[41,5412,279],{"class":271},[41,5414,2112],{"class":54},[41,5416,2115],{"class":275},[41,5418,5419],{"class":43,"line":51},[41,5420,1687],{"class":275},[41,5422,5423],{"class":43,"line":62},[41,5424,5425],{"class":47},"    \u002F\u002Fa,b实参\n",[41,5427,5428,5430,5432,5434,5436],{"class":43,"line":70},[41,5429,2124],{"class":271},[41,5431,1539],{"class":275},[41,5433,321],{"class":271},[41,5435,465],{"class":58},[41,5437,1434],{"class":275},[41,5439,5440,5442,5444,5446,5448],{"class":43,"line":76},[41,5441,2124],{"class":271},[41,5443,2971],{"class":275},[41,5445,321],{"class":271},[41,5447,465],{"class":58},[41,5449,1434],{"class":275},[41,5451,5452,5454,5456],{"class":43,"line":83},[41,5453,2151],{"class":275},[41,5455,1570],{"class":271},[41,5457,5458],{"class":275},"a,b;\n",[41,5460,5461],{"class":43,"line":89},[41,5462,5463],{"class":47},"    \u002F\u002F调用函数时，实参值传给了形参\n",[41,5465,5466,5468,5470,5473],{"class":43,"line":96},[41,5467,1692],{"class":275},[41,5469,1317],{"class":271},[41,5471,5472],{"class":54},"add",[41,5474,5475],{"class":275},"(a,b);\n",[41,5477,5478],{"class":43,"line":104},[41,5479,1706],{"class":275},[15,5481,5483],{"id":5482},"_23值传递","2.3值传递",[20,5485,5486],{},"值传递就是函数调用时实参将数值传给形参",[20,5488,5489],{},"值传递时，如果形参发生任何改变，不会影响实参",[20,5491,5492],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[32,5494,5496],{"className":262,"code":5495,"language":264,"meta":37,"style":37},"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",[24,5497,5498,5520,5524,5537,5554,5572,5583,5592,5601,5614,5630,5646,5655,5659,5667,5671,5683,5695,5702],{"__ignoreMap":37},[41,5499,5500,5503,5506,5508,5510,5512,5514,5516,5518],{"class":43,"line":44},[41,5501,5502],{"class":271},"void",[41,5504,5505],{"class":54}," swap",[41,5507,276],{"class":275},[41,5509,279],{"class":271},[41,5511,5355],{"class":5354},[41,5513,651],{"class":275},[41,5515,279],{"class":271},[41,5517,5362],{"class":5354},[41,5519,282],{"class":275},[41,5521,5522],{"class":43,"line":51},[41,5523,1687],{"class":275},[41,5525,5526,5528,5530,5533,5535],{"class":43,"line":62},[41,5527,1692],{"class":275},[41,5529,1317],{"class":271},[41,5531,5532],{"class":378},"\"交换前：\"",[41,5534,1317],{"class":271},[41,5536,1339],{"class":275},[41,5538,5539,5541,5543,5546,5548,5550,5552],{"class":43,"line":70},[41,5540,1692],{"class":275},[41,5542,1317],{"class":271},[41,5544,5545],{"class":378},"\"num1=\"",[41,5547,1317],{"class":271},[41,5549,5380],{"class":275},[41,5551,1317],{"class":271},[41,5553,1339],{"class":275},[41,5555,5556,5558,5560,5563,5565,5568,5570],{"class":43,"line":76},[41,5557,1692],{"class":275},[41,5559,1317],{"class":271},[41,5561,5562],{"class":378},"\"num2=\"",[41,5564,1317],{"class":271},[41,5566,5567],{"class":275},"num2",[41,5569,1317],{"class":271},[41,5571,1339],{"class":275},[41,5573,5574,5576,5578,5580],{"class":43,"line":83},[41,5575,2124],{"class":271},[41,5577,4393],{"class":275},[41,5579,321],{"class":271},[41,5581,5582],{"class":275},"num1;\n",[41,5584,5585,5588,5590],{"class":43,"line":89},[41,5586,5587],{"class":275},"    num1",[41,5589,321],{"class":271},[41,5591,5385],{"class":275},[41,5593,5594,5597,5599],{"class":43,"line":96},[41,5595,5596],{"class":275},"    num2",[41,5598,321],{"class":271},[41,5600,4418],{"class":275},[41,5602,5603,5605,5607,5610,5612],{"class":43,"line":104},[41,5604,1692],{"class":275},[41,5606,1317],{"class":271},[41,5608,5609],{"class":378},"\"交换后：\"",[41,5611,1317],{"class":271},[41,5613,1339],{"class":275},[41,5615,5616,5618,5620,5622,5624,5626,5628],{"class":43,"line":176},[41,5617,1692],{"class":275},[41,5619,1317],{"class":271},[41,5621,5545],{"class":378},[41,5623,1317],{"class":271},[41,5625,5380],{"class":275},[41,5627,1317],{"class":271},[41,5629,1339],{"class":275},[41,5631,5632,5634,5636,5638,5640,5642,5644],{"class":43,"line":184},[41,5633,1692],{"class":275},[41,5635,1317],{"class":271},[41,5637,5562],{"class":378},[41,5639,1317],{"class":271},[41,5641,5567],{"class":275},[41,5643,1317],{"class":271},[41,5645,1339],{"class":275},[41,5647,5648,5650,5652],{"class":43,"line":1757},[41,5649,4228],{"class":271},[41,5651,330],{"class":275},[41,5653,5654],{"class":47},"\u002F\u002F或者不写\n",[41,5656,5657],{"class":43,"line":1763},[41,5658,1706],{"class":275},[41,5660,5661,5663,5665],{"class":43,"line":1768},[41,5662,279],{"class":271},[41,5664,2112],{"class":54},[41,5666,2115],{"class":275},[41,5668,5669],{"class":43,"line":1782},[41,5670,1687],{"class":275},[41,5672,5673,5675,5677,5679,5681],{"class":43,"line":1787},[41,5674,2124],{"class":271},[41,5676,1539],{"class":275},[41,5678,321],{"class":271},[41,5680,719],{"class":58},[41,5682,1434],{"class":275},[41,5684,5685,5687,5689,5691,5693],{"class":43,"line":1793},[41,5686,2124],{"class":271},[41,5688,2971],{"class":275},[41,5690,321],{"class":271},[41,5692,973],{"class":58},[41,5694,1434],{"class":275},[41,5696,5697,5700],{"class":43,"line":1814},[41,5698,5699],{"class":54},"    swap",[41,5701,5475],{"class":275},[41,5703,5704],{"class":43,"line":1819},[41,5705,1706],{"class":275},[15,5707,5709],{"id":5708},"_24函数的常见形式","2.4函数的常见形式",[224,5711,5712],{},[227,5713,5714],{},"无参无返",[32,5716,5718],{"className":262,"code":5717,"language":264,"meta":37,"style":37},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[24,5719,5720,5729,5733,5746,5750,5758,5762,5767,5775],{"__ignoreMap":37},[41,5721,5722,5724,5727],{"class":43,"line":44},[41,5723,5502],{"class":271},[41,5725,5726],{"class":54}," test01",[41,5728,2115],{"class":275},[41,5730,5731],{"class":43,"line":51},[41,5732,1687],{"class":275},[41,5734,5735,5737,5739,5742,5744],{"class":43,"line":62},[41,5736,1692],{"class":275},[41,5738,1317],{"class":271},[41,5740,5741],{"class":378},"\"你好\"",[41,5743,1317],{"class":271},[41,5745,1339],{"class":275},[41,5747,5748],{"class":43,"line":70},[41,5749,1706],{"class":275},[41,5751,5752,5754,5756],{"class":43,"line":76},[41,5753,279],{"class":271},[41,5755,2112],{"class":54},[41,5757,2115],{"class":275},[41,5759,5760],{"class":43,"line":83},[41,5761,1687],{"class":275},[41,5763,5764],{"class":43,"line":89},[41,5765,5766],{"class":47},"    \u002F\u002F函数调用\n",[41,5768,5769,5772],{"class":43,"line":96},[41,5770,5771],{"class":54},"    test01",[41,5773,5774],{"class":275},"();\n",[41,5776,5777],{"class":43,"line":104},[41,5778,1706],{"class":275},[224,5780,5781],{"start":51},[227,5782,5783],{},"有参无返",[32,5785,5787],{"className":262,"code":5786,"language":264,"meta":37,"style":37},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[24,5788,5789,5804,5808,5820,5824,5832,5836,5847],{"__ignoreMap":37},[41,5790,5791,5793,5796,5798,5800,5802],{"class":43,"line":44},[41,5792,5502],{"class":271},[41,5794,5795],{"class":54}," test02",[41,5797,276],{"class":275},[41,5799,279],{"class":271},[41,5801,1539],{"class":5354},[41,5803,282],{"class":275},[41,5805,5806],{"class":43,"line":51},[41,5807,1687],{"class":275},[41,5809,5810,5812,5814,5816,5818],{"class":43,"line":62},[41,5811,1692],{"class":275},[41,5813,1317],{"class":271},[41,5815,5741],{"class":378},[41,5817,1317],{"class":271},[41,5819,1339],{"class":275},[41,5821,5822],{"class":43,"line":70},[41,5823,1706],{"class":275},[41,5825,5826,5828,5830],{"class":43,"line":76},[41,5827,279],{"class":271},[41,5829,2112],{"class":54},[41,5831,2115],{"class":275},[41,5833,5834],{"class":43,"line":83},[41,5835,1687],{"class":275},[41,5837,5838,5841,5843,5845],{"class":43,"line":89},[41,5839,5840],{"class":54},"    test02",[41,5842,276],{"class":275},[41,5844,584],{"class":58},[41,5846,2857],{"class":275},[41,5848,5849],{"class":43,"line":96},[41,5850,1706],{"class":275},[224,5852,5853],{"start":62},[227,5854,5855],{},"无参有返",[32,5857,5859],{"className":262,"code":5858,"language":264,"meta":37,"style":37},"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",[24,5860,5861,5870,5874,5886,5895,5899,5907,5911,5924,5943],{"__ignoreMap":37},[41,5862,5863,5865,5868],{"class":43,"line":44},[41,5864,279],{"class":271},[41,5866,5867],{"class":54}," test03",[41,5869,2115],{"class":275},[41,5871,5872],{"class":43,"line":51},[41,5873,1687],{"class":275},[41,5875,5876,5878,5880,5882,5884],{"class":43,"line":62},[41,5877,1692],{"class":275},[41,5879,1317],{"class":271},[41,5881,5741],{"class":378},[41,5883,1317],{"class":271},[41,5885,1339],{"class":275},[41,5887,5888,5890,5893],{"class":43,"line":70},[41,5889,4228],{"class":271},[41,5891,5892],{"class":58}," 100",[41,5894,1434],{"class":275},[41,5896,5897],{"class":43,"line":76},[41,5898,1706],{"class":275},[41,5900,5901,5903,5905],{"class":43,"line":83},[41,5902,279],{"class":271},[41,5904,2112],{"class":54},[41,5906,2115],{"class":275},[41,5908,5909],{"class":43,"line":89},[41,5910,1687],{"class":275},[41,5912,5913,5915,5917,5919,5922],{"class":43,"line":96},[41,5914,2124],{"class":271},[41,5916,5355],{"class":275},[41,5918,321],{"class":271},[41,5920,5921],{"class":54},"test03",[41,5923,5774],{"class":275},[41,5925,5926,5928,5930,5932,5934,5936,5938,5940],{"class":43,"line":104},[41,5927,1692],{"class":275},[41,5929,1317],{"class":271},[41,5931,5545],{"class":378},[41,5933,1317],{"class":271},[41,5935,5380],{"class":275},[41,5937,1317],{"class":271},[41,5939,1382],{"class":275},[41,5941,5942],{"class":47}," \u002F\u002F100\n",[41,5944,5945],{"class":43,"line":176},[41,5946,1706],{"class":275},[20,5948,5949],{},"4.有参有返",[32,5951,5953],{"className":262,"code":5952,"language":264,"meta":37,"style":37},"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",[24,5954,5955,5970,5974,5987,5993,5997,6006,6010,6022,6036,6051],{"__ignoreMap":37},[41,5956,5957,5959,5962,5964,5966,5968],{"class":43,"line":44},[41,5958,279],{"class":271},[41,5960,5961],{"class":54}," test04",[41,5963,276],{"class":275},[41,5965,279],{"class":271},[41,5967,1539],{"class":5354},[41,5969,282],{"class":275},[41,5971,5972],{"class":43,"line":51},[41,5973,1687],{"class":275},[41,5975,5976,5978,5980,5983,5985],{"class":43,"line":62},[41,5977,1692],{"class":275},[41,5979,1317],{"class":271},[41,5981,5982],{"class":378},"\"hello\"",[41,5984,1317],{"class":271},[41,5986,1339],{"class":275},[41,5988,5989,5991],{"class":43,"line":70},[41,5990,4228],{"class":271},[41,5992,1573],{"class":275},[41,5994,5995],{"class":43,"line":76},[41,5996,1706],{"class":275},[41,5998,5999,6001,6004],{"class":43,"line":83},[41,6000,279],{"class":271},[41,6002,6003],{"class":54}," mian",[41,6005,2115],{"class":275},[41,6007,6008],{"class":43,"line":89},[41,6009,1687],{"class":275},[41,6011,6012,6014,6016,6018,6020],{"class":43,"line":96},[41,6013,2124],{"class":271},[41,6015,2971],{"class":275},[41,6017,321],{"class":271},[41,6019,26],{"class":58},[41,6021,1434],{"class":275},[41,6023,6024,6026,6028,6030,6033],{"class":43,"line":104},[41,6025,2124],{"class":271},[41,6027,2987],{"class":275},[41,6029,321],{"class":271},[41,6031,6032],{"class":54},"test04",[41,6034,6035],{"class":275},"(b);\n",[41,6037,6038,6040,6042,6044,6046,6048],{"class":43,"line":176},[41,6039,1692],{"class":275},[41,6041,1317],{"class":271},[41,6043,561],{"class":275},[41,6045,1317],{"class":271},[41,6047,1382],{"class":275},[41,6049,6050],{"class":47}," \u002F\u002F1\n",[41,6052,6053],{"class":43,"line":184},[41,6054,1706],{"class":275},[15,6056,6058],{"id":6057},"_25函数的声明","2.5函数的声明",[20,6060,6061],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[20,6063,6064,6065],{},"函数的",[423,6066,6067],{},"声明可以多次，但是函数的定义只能有一次",[32,6069,6071],{"className":262,"code":6070,"language":264,"meta":37,"style":37},"\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",[24,6072,6073,6078,6083,6108,6117,6121,6133,6145,6161,6165,6185,6189,6208],{"__ignoreMap":37},[41,6074,6075],{"class":43,"line":44},[41,6076,6077],{"class":47},"\u002F\u002F函数声明\n",[41,6079,6080],{"class":43,"line":51},[41,6081,6082],{"class":47},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[41,6084,6085,6087,6090,6092,6094,6096,6098,6100,6102,6105],{"class":43,"line":62},[41,6086,279],{"class":271},[41,6088,6089],{"class":54}," max",[41,6091,276],{"class":275},[41,6093,279],{"class":271},[41,6095,1539],{"class":5354},[41,6097,651],{"class":275},[41,6099,279],{"class":271},[41,6101,2971],{"class":5354},[41,6103,6104],{"class":275},");",[41,6106,6107],{"class":47},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[41,6109,6110,6112,6114],{"class":43,"line":70},[41,6111,279],{"class":271},[41,6113,2112],{"class":54},[41,6115,6116],{"class":275},"() \n",[41,6118,6119],{"class":43,"line":76},[41,6120,1687],{"class":275},[41,6122,6123,6125,6127,6129,6131],{"class":43,"line":83},[41,6124,2124],{"class":271},[41,6126,1539],{"class":275},[41,6128,321],{"class":271},[41,6130,719],{"class":58},[41,6132,1434],{"class":275},[41,6134,6135,6137,6139,6141,6143],{"class":43,"line":89},[41,6136,2124],{"class":271},[41,6138,2971],{"class":275},[41,6140,321],{"class":271},[41,6142,973],{"class":58},[41,6144,1434],{"class":275},[41,6146,6147,6149,6151,6154,6157,6159],{"class":43,"line":96},[41,6148,1692],{"class":275},[41,6150,1317],{"class":271},[41,6152,6153],{"class":54},"max",[41,6155,6156],{"class":275},"(a,b)",[41,6158,1317],{"class":271},[41,6160,1339],{"class":275},[41,6162,6163],{"class":43,"line":104},[41,6164,1706],{"class":275},[41,6166,6167,6169,6171,6173,6175,6177,6179,6181,6183],{"class":43,"line":176},[41,6168,279],{"class":271},[41,6170,6089],{"class":54},[41,6172,276],{"class":275},[41,6174,279],{"class":271},[41,6176,1539],{"class":5354},[41,6178,651],{"class":275},[41,6180,279],{"class":271},[41,6182,2971],{"class":5354},[41,6184,282],{"class":275},[41,6186,6187],{"class":43,"line":184},[41,6188,1687],{"class":275},[41,6190,6191,6193,6195,6197,6199,6201,6203,6205],{"class":43,"line":1757},[41,6192,4228],{"class":271},[41,6194,1539],{"class":275},[41,6196,1233],{"class":271},[41,6198,536],{"class":275},[41,6200,1259],{"class":271},[41,6202,511],{"class":275},[41,6204,1132],{"class":271},[41,6206,6207],{"class":275},"b;\n",[41,6209,6210],{"class":43,"line":1763},[41,6211,1706],{"class":275},[15,6213,6215],{"id":6214},"_26函数的分文件编写","2.6函数的分文件编写",[20,6217,6218],{},"4个步骤：",[1280,6220,6221,6224,6227,6230],{},[227,6222,6223],{},"1.创建后缀名为.h的头文件",[227,6225,6226],{},"2.创建后缀名为.cpp的源文件",[227,6228,6229],{},"3.在头文件中写函数的定义",[227,6231,6232],{},"4.在源文件中写函数的定义\n示例：",[20,6234,6235],{},"头文件：swap.h",[32,6237,6239],{"className":262,"code":6238,"language":264,"meta":37,"style":37},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[24,6240,6241,6247,6257,6261],{"__ignoreMap":37},[41,6242,6243,6245],{"class":43,"line":44},[41,6244,2089],{"class":271},[41,6246,2092],{"class":378},[41,6248,6249,6251,6253,6255],{"class":43,"line":51},[41,6250,2097],{"class":271},[41,6252,2100],{"class":271},[41,6254,2103],{"class":54},[41,6256,1434],{"class":275},[41,6258,6259],{"class":43,"line":62},[41,6260,6077],{"class":47},[41,6262,6263,6265,6267,6269,6271,6273,6275,6277,6279],{"class":43,"line":70},[41,6264,5502],{"class":271},[41,6266,5505],{"class":54},[41,6268,276],{"class":275},[41,6270,279],{"class":271},[41,6272,1539],{"class":5354},[41,6274,651],{"class":275},[41,6276,279],{"class":271},[41,6278,2971],{"class":5354},[41,6280,2857],{"class":275},[20,6282,6283],{},"源文件：swap.cpp",[32,6285,6287],{"className":262,"code":6286,"language":264,"meta":37,"style":37},"#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",[24,6288,6289,6296,6301,6321,6325,6336,6345,6354,6371,6388],{"__ignoreMap":37},[41,6290,6291,6293],{"class":43,"line":44},[41,6292,2089],{"class":271},[41,6294,6295],{"class":378}," \"swap.h\"\n",[41,6297,6298],{"class":43,"line":51},[41,6299,6300],{"class":47},"\u002F\u002F函数的定义\n",[41,6302,6303,6305,6307,6309,6311,6313,6315,6317,6319],{"class":43,"line":62},[41,6304,5502],{"class":271},[41,6306,5505],{"class":54},[41,6308,276],{"class":275},[41,6310,279],{"class":271},[41,6312,1539],{"class":5354},[41,6314,651],{"class":275},[41,6316,279],{"class":271},[41,6318,2971],{"class":5354},[41,6320,282],{"class":275},[41,6322,6323],{"class":43,"line":70},[41,6324,1687],{"class":275},[41,6326,6327,6329,6331,6333],{"class":43,"line":76},[41,6328,2124],{"class":271},[41,6330,4393],{"class":275},[41,6332,321],{"class":271},[41,6334,6335],{"class":275},"a;\n",[41,6337,6338,6341,6343],{"class":43,"line":83},[41,6339,6340],{"class":275},"    a",[41,6342,321],{"class":271},[41,6344,6207],{"class":275},[41,6346,6347,6350,6352],{"class":43,"line":89},[41,6348,6349],{"class":275},"    b",[41,6351,321],{"class":271},[41,6353,4418],{"class":275},[41,6355,6356,6358,6360,6363,6365,6367,6369],{"class":43,"line":96},[41,6357,1692],{"class":275},[41,6359,1317],{"class":271},[41,6361,6362],{"class":378},"\"a=\"",[41,6364,1317],{"class":271},[41,6366,511],{"class":275},[41,6368,1317],{"class":271},[41,6370,1339],{"class":275},[41,6372,6373,6375,6377,6380,6382,6384,6386],{"class":43,"line":104},[41,6374,1692],{"class":275},[41,6376,1317],{"class":271},[41,6378,6379],{"class":378},"\"b=\"",[41,6381,1317],{"class":271},[41,6383,536],{"class":275},[41,6385,1317],{"class":271},[41,6387,1339],{"class":275},[41,6389,6390],{"class":43,"line":176},[41,6391,1706],{"class":275},[189,6393,6394],{},"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":37,"searchDepth":51,"depth":51,"links":6396},[6397,6398,6399,6400,6401,6402],{"id":5310,"depth":51,"text":5311},{"id":5399,"depth":51,"text":5400},{"id":5482,"depth":51,"text":5483},{"id":5708,"depth":51,"text":5709},{"id":6057,"depth":51,"text":6058},{"id":6214,"depth":51,"text":6215},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5302,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6409,"title":6410,"body":6411,"description":6418,"extension":197,"meta":7823,"navigation":79,"path":7824,"seo":7825,"stem":7826,"__hash__":7827},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6412,"toc":7813},[6413,6416,6419,6423,6585,6589,6592,6595,6598,6601,6741,6745,6748,6751,6754,6819,6823,6828,6895,6898,6902,6905,6916,6921,6941,6944,6949,6968,6971,6975,6994,6997,7001,7236,7240,7243,7246,7249,7411,7414,7418,7421,7427,7810],[10,6414,6410],{"id":6415},"_3指针",[20,6417,6418],{},"通过指针保存一个地址，指针就是个地址",[15,6420,6422],{"id":6421},"_31定义指针","3.1定义指针",[32,6424,6426],{"className":262,"code":6425,"language":264,"meta":37,"style":37},"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",[24,6427,6428,6436,6440,6445,6457,6462,6470,6480,6498,6518,6522,6527,6532,6537,6551,6567,6581],{"__ignoreMap":37},[41,6429,6430,6432,6434],{"class":43,"line":44},[41,6431,279],{"class":271},[41,6433,2112],{"class":54},[41,6435,2115],{"class":275},[41,6437,6438],{"class":43,"line":51},[41,6439,1687],{"class":275},[41,6441,6442],{"class":43,"line":62},[41,6443,6444],{"class":47},"    \u002F\u002F1.定义指针\n",[41,6446,6447,6449,6451,6453,6455],{"class":43,"line":70},[41,6448,2124],{"class":271},[41,6450,1539],{"class":275},[41,6452,321],{"class":271},[41,6454,719],{"class":58},[41,6456,1434],{"class":275},[41,6458,6459],{"class":43,"line":76},[41,6460,6461],{"class":47},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[41,6463,6464,6467],{"class":43,"line":83},[41,6465,6466],{"class":271},"    int*",[41,6468,6469],{"class":275},"p;\n",[41,6471,6472,6475,6478],{"class":43,"line":89},[41,6473,6474],{"class":275},"    p",[41,6476,6477],{"class":271},"=&",[41,6479,6335],{"class":275},[41,6481,6482,6484,6486,6489,6492,6494,6496],{"class":43,"line":96},[41,6483,1692],{"class":275},[41,6485,1317],{"class":271},[41,6487,6488],{"class":378},"\"a的地址为：\"",[41,6490,6491],{"class":271},"\u003C\u003C&",[41,6493,511],{"class":275},[41,6495,1317],{"class":271},[41,6497,1339],{"class":275},[41,6499,6500,6502,6504,6507,6509,6511,6513,6515],{"class":43,"line":104},[41,6501,1692],{"class":275},[41,6503,1317],{"class":271},[41,6505,6506],{"class":378},"\"指针p为：\"",[41,6508,1317],{"class":271},[41,6510,20],{"class":275},[41,6512,1317],{"class":271},[41,6514,1382],{"class":275},[41,6516,6517],{"class":47},"\u002F\u002F指针p表示的就是a的地址\n",[41,6519,6520],{"class":43,"line":176},[41,6521,80],{"emptyLinePlaceholder":79},[41,6523,6524],{"class":43,"line":184},[41,6525,6526],{"class":47},"    \u002F\u002F2.使用指针\n",[41,6528,6529],{"class":43,"line":1757},[41,6530,6531],{"class":47},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[41,6533,6534],{"class":43,"line":1763},[41,6535,6536],{"class":47},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[41,6538,6539,6542,6544,6546,6549],{"class":43,"line":1768},[41,6540,6541],{"class":271},"    *",[41,6543,20],{"class":275},[41,6545,321],{"class":271},[41,6547,6548],{"class":58},"1000",[41,6550,1434],{"class":275},[41,6552,6553,6555,6558,6560,6562,6564],{"class":43,"line":1782},[41,6554,1692],{"class":275},[41,6556,6557],{"class":271},"\u003C\u003C*",[41,6559,20],{"class":275},[41,6561,1317],{"class":271},[41,6563,1382],{"class":275},[41,6565,6566],{"class":47},"\u002F\u002F1000\n",[41,6568,6569,6571,6573,6575,6577,6579],{"class":43,"line":1787},[41,6570,1692],{"class":275},[41,6572,1317],{"class":271},[41,6574,511],{"class":275},[41,6576,1317],{"class":271},[41,6578,1382],{"class":275},[41,6580,6566],{"class":47},[41,6582,6583],{"class":43,"line":1793},[41,6584,1706],{"class":275},[15,6586,6588],{"id":6587},"_32指针所占的内存空间","3.2指针所占的内存空间",[20,6590,6591],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[20,6593,6594],{},"在32位操作系统下：占用4个字节空间",[20,6596,6597],{},"在64位操作系统下：占用8个字节空间",[20,6599,6600],{},"上方是不管啥数据类型的",[32,6602,6604],{"className":262,"code":6603,"language":264,"meta":37,"style":37},"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",[24,6605,6606,6614,6618,6623,6635,6640,6645,6650,6663,6685,6711,6737],{"__ignoreMap":37},[41,6607,6608,6610,6612],{"class":43,"line":44},[41,6609,279],{"class":271},[41,6611,2112],{"class":54},[41,6613,2115],{"class":275},[41,6615,6616],{"class":43,"line":51},[41,6617,1687],{"class":275},[41,6619,6620],{"class":43,"line":62},[41,6621,6622],{"class":47},"    \u002F\u002F指针所占内存空间\n",[41,6624,6625,6627,6629,6631,6633],{"class":43,"line":70},[41,6626,2124],{"class":271},[41,6628,1539],{"class":275},[41,6630,321],{"class":271},[41,6632,719],{"class":58},[41,6634,1434],{"class":275},[41,6636,6637],{"class":43,"line":76},[41,6638,6639],{"class":47},"    \u002F\u002Fint *p;\n",[41,6641,6642],{"class":43,"line":83},[41,6643,6644],{"class":47},"    \u002F\u002Fp=&a;\n",[41,6646,6647],{"class":43,"line":89},[41,6648,6649],{"class":47},"    \u002F\u002F上述可以写为以下：\n",[41,6651,6652,6654,6657,6659,6661],{"class":43,"line":96},[41,6653,2124],{"class":271},[41,6655,6656],{"class":271}," *",[41,6658,20],{"class":275},[41,6660,6477],{"class":271},[41,6662,6335],{"class":275},[41,6664,6665,6668,6670,6673,6675,6678,6680,6682],{"class":43,"line":104},[41,6666,6667],{"class":275},"    cout ",[41,6669,1317],{"class":271},[41,6671,6672],{"class":378},"\"sizeof(int *)\"",[41,6674,1513],{"class":271},[41,6676,6677],{"class":275},"(p)",[41,6679,1317],{"class":271},[41,6681,1382],{"class":275},[41,6683,6684],{"class":47},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[41,6686,6687,6689,6691,6693,6695,6697,6699,6701,6703,6705,6708],{"class":43,"line":176},[41,6688,6667],{"class":275},[41,6690,1317],{"class":271},[41,6692,6672],{"class":378},[41,6694,1513],{"class":271},[41,6696,276],{"class":275},[41,6698,279],{"class":271},[41,6700,6656],{"class":271},[41,6702,702],{"class":275},[41,6704,1317],{"class":271},[41,6706,6707],{"class":275},"endl",[41,6709,6710],{"class":47},"  \u002F\u002F4字节(32位的话)\n",[41,6712,6713,6715,6717,6720,6722,6724,6726,6728,6730,6732,6734],{"class":43,"line":184},[41,6714,6667],{"class":275},[41,6716,1317],{"class":271},[41,6718,6719],{"class":378},"\"sizeof(char *)\"",[41,6721,1513],{"class":271},[41,6723,276],{"class":275},[41,6725,370],{"class":271},[41,6727,6656],{"class":271},[41,6729,702],{"class":275},[41,6731,1317],{"class":271},[41,6733,1382],{"class":275},[41,6735,6736],{"class":47}," \u002F\u002F4字节(32位的话)\n",[41,6738,6739],{"class":43,"line":1757},[41,6740,1706],{"class":275},[15,6742,6744],{"id":6743},"_33空指针","3.3空指针",[20,6746,6747],{},"空指针：指针变量指向内存中编号为0的空间",[20,6749,6750],{},"用途：初始化指针变量",[20,6752,6753],{},"注意：空指针指向的内存是不可以访问的",[32,6755,6757],{"className":262,"code":6756,"language":264,"meta":37,"style":37},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[24,6758,6759,6767,6771,6776,6790,6795,6810,6815],{"__ignoreMap":37},[41,6760,6761,6763,6765],{"class":43,"line":44},[41,6762,279],{"class":271},[41,6764,2112],{"class":54},[41,6766,2115],{"class":275},[41,6768,6769],{"class":43,"line":51},[41,6770,1687],{"class":275},[41,6772,6773],{"class":43,"line":62},[41,6774,6775],{"class":47},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[41,6777,6778,6780,6782,6784,6786,6788],{"class":43,"line":70},[41,6779,2124],{"class":271},[41,6781,6656],{"class":271},[41,6783,20],{"class":275},[41,6785,321],{"class":271},[41,6787,2531],{"class":58},[41,6789,1434],{"class":275},[41,6791,6792],{"class":43,"line":76},[41,6793,6794],{"class":47},"    \u002F\u002F2.空指针不能进行访问\n",[41,6796,6797,6799,6801,6803,6805,6807],{"class":43,"line":83},[41,6798,6541],{"class":271},[41,6800,20],{"class":275},[41,6802,321],{"class":271},[41,6804,584],{"class":58},[41,6806,330],{"class":275},[41,6808,6809],{"class":47},"\u002F\u002F直接报错，压根不能访问\n",[41,6811,6812],{"class":43,"line":89},[41,6813,6814],{"class":47},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[41,6816,6817],{"class":43,"line":96},[41,6818,1706],{"class":275},[15,6820,6822],{"id":6821},"_34野指针","3.4野指针",[20,6824,6825],{},[423,6826,6827],{},"指针变量指向非法的内存空间",[32,6829,6831],{"className":262,"code":6830,"language":264,"meta":37,"style":37},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[24,6832,6833,6841,6845,6874,6879,6891],{"__ignoreMap":37},[41,6834,6835,6837,6839],{"class":43,"line":44},[41,6836,279],{"class":271},[41,6838,2112],{"class":54},[41,6840,2115],{"class":275},[41,6842,6843],{"class":43,"line":51},[41,6844,1687],{"class":275},[41,6846,6847,6849,6851,6853,6855,6857,6859,6861,6863,6866,6869,6871],{"class":43,"line":62},[41,6848,2124],{"class":271},[41,6850,6656],{"class":271},[41,6852,20],{"class":275},[41,6854,321],{"class":271},[41,6856,276],{"class":275},[41,6858,279],{"class":271},[41,6860,6656],{"class":271},[41,6862,702],{"class":275},[41,6864,6865],{"class":271},"0x",[41,6867,6868],{"class":58},"1100",[41,6870,330],{"class":275},[41,6872,6873],{"class":47}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[41,6875,6876],{"class":43,"line":70},[41,6877,6878],{"class":47},"    \u002F\u002F访问野指针报错\n",[41,6880,6881,6883,6885,6887,6889],{"class":43,"line":76},[41,6882,1692],{"class":275},[41,6884,6557],{"class":271},[41,6886,20],{"class":275},[41,6888,1317],{"class":271},[41,6890,1339],{"class":275},[41,6892,6893],{"class":43,"line":83},[41,6894,1706],{"class":275},[20,6896,6897],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[15,6899,6901],{"id":6900},"_35const修饰指针","3.5const修饰指针",[20,6903,6904],{},"三种情况：",[1280,6906,6907,6910,6913],{},[227,6908,6909],{},"const修饰指针 常量指针",[227,6911,6912],{},"const修饰常量 指针常量",[227,6914,6915],{},"const即修饰指针，又修饰常量",[224,6917,6918],{},[227,6919,6920],{},"常量指针",[32,6922,6924],{"className":262,"code":6923,"language":264,"meta":37,"style":37},"const int *p=&a;\n",[24,6925,6926],{"__ignoreMap":37},[41,6927,6928,6931,6933,6935,6937,6939],{"class":43,"line":44},[41,6929,6930],{"class":271},"const",[41,6932,2521],{"class":271},[41,6934,6656],{"class":271},[41,6936,20],{"class":275},[41,6938,6477],{"class":271},[41,6940,6335],{"class":275},[20,6942,6943],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[224,6945,6946],{"start":51},[227,6947,6948],{},"指针常量",[32,6950,6952],{"className":262,"code":6951,"language":264,"meta":37,"style":37},"int *const p=&a;\n",[24,6953,6954],{"__ignoreMap":37},[41,6955,6956,6958,6961,6964,6966],{"class":43,"line":44},[41,6957,279],{"class":271},[41,6959,6960],{"class":271}," *const",[41,6962,6963],{"class":275}," p",[41,6965,6477],{"class":271},[41,6967,6335],{"class":275},[20,6969,6970],{},"指针的指向不可以改，指针指向的值可以改",[224,6972,6973],{"start":62},[227,6974,6915],{},[32,6976,6978],{"className":262,"code":6977,"language":264,"meta":37,"style":37},"const int *const p=&a;\n",[24,6979,6980],{"__ignoreMap":37},[41,6981,6982,6984,6986,6988,6990,6992],{"class":43,"line":44},[41,6983,6930],{"class":271},[41,6985,2521],{"class":271},[41,6987,6960],{"class":271},[41,6989,6963],{"class":275},[41,6991,6477],{"class":271},[41,6993,6335],{"class":275},[20,6995,6996],{},"指针的指向和指针指向的值都不可以改变",[15,6998,7000],{"id":6999},"_36指针和数组","3.6指针和数组",[32,7002,7004],{"className":262,"code":7003,"language":264,"meta":37,"style":37},"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",[24,7005,7006,7014,7018,7023,7077,7098,7114,7130,7141,7158,7163,7177,7203,7207,7219,7228,7232],{"__ignoreMap":37},[41,7007,7008,7010,7012],{"class":43,"line":44},[41,7009,279],{"class":271},[41,7011,2112],{"class":54},[41,7013,2115],{"class":275},[41,7015,7016],{"class":43,"line":51},[41,7017,1687],{"class":275},[41,7019,7020],{"class":43,"line":62},[41,7021,7022],{"class":47},"    \u002F\u002F利用指针访问数组中的元素\n",[41,7024,7025,7027,7029,7031,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051,7053,7055,7057,7059,7061,7063,7065,7067,7069,7071,7073,7075],{"class":43,"line":70},[41,7026,2124],{"class":271},[41,7028,4100],{"class":275},[41,7030,719],{"class":58},[41,7032,1213],{"class":275},[41,7034,321],{"class":271},[41,7036,1169],{"class":275},[41,7038,26],{"class":58},[41,7040,651],{"class":275},[41,7042,351],{"class":58},[41,7044,651],{"class":275},[41,7046,345],{"class":58},[41,7048,651],{"class":275},[41,7050,566],{"class":58},[41,7052,651],{"class":275},[41,7054,592],{"class":58},[41,7056,651],{"class":275},[41,7058,617],{"class":58},[41,7060,651],{"class":275},[41,7062,642],{"class":58},[41,7064,651],{"class":275},[41,7066,668],{"class":58},[41,7068,651],{"class":275},[41,7070,693],{"class":58},[41,7072,651],{"class":275},[41,7074,719],{"class":58},[41,7076,4133],{"class":275},[41,7078,7079,7081,7083,7086,7088,7090,7092,7094,7096],{"class":43,"line":76},[41,7080,1692],{"class":275},[41,7082,1317],{"class":271},[41,7084,7085],{"class":378},"\"数组的第一个元素为：\"",[41,7087,1317],{"class":271},[41,7089,4044],{"class":275},[41,7091,465],{"class":58},[41,7093,1213],{"class":275},[41,7095,1317],{"class":271},[41,7097,1339],{"class":275},[41,7099,7100,7102,7104,7106,7108,7111],{"class":43,"line":83},[41,7101,2124],{"class":271},[41,7103,6656],{"class":271},[41,7105,20],{"class":275},[41,7107,321],{"class":271},[41,7109,7110],{"class":275},"arr;",[41,7112,7113],{"class":47},"\u002F\u002F注意数才要加取地址符号&\n",[41,7115,7116,7118,7120,7122,7124,7126,7128],{"class":43,"line":89},[41,7117,1692],{"class":275},[41,7119,1317],{"class":271},[41,7121,7085],{"class":378},[41,7123,6557],{"class":271},[41,7125,20],{"class":275},[41,7127,1317],{"class":271},[41,7129,1339],{"class":275},[41,7131,7132,7134,7136,7138],{"class":43,"line":96},[41,7133,6474],{"class":275},[41,7135,2431],{"class":271},[41,7137,330],{"class":275},[41,7139,7140],{"class":47}," \u002F\u002F让指针向后偏移4个字节\n",[41,7142,7143,7145,7147,7150,7152,7154,7156],{"class":43,"line":104},[41,7144,1692],{"class":275},[41,7146,1317],{"class":271},[41,7148,7149],{"class":378},"\"数组的第二个元素为：\"",[41,7151,6557],{"class":271},[41,7153,20],{"class":275},[41,7155,1317],{"class":271},[41,7157,1339],{"class":275},[41,7159,7160],{"class":43,"line":176},[41,7161,7162],{"class":47},"    \u002F\u002F利用指针遍历数组\n",[41,7164,7165,7167,7169,7172,7174],{"class":43,"line":184},[41,7166,2124],{"class":271},[41,7168,6656],{"class":271},[41,7170,7171],{"class":275},"p2",[41,7173,321],{"class":271},[41,7175,7176],{"class":275},"arr;\n",[41,7178,7179,7181,7183,7185,7187,7189,7191,7193,7195,7197,7199,7201],{"class":43,"line":1757},[41,7180,3339],{"class":271},[41,7182,1798],{"class":275},[41,7184,279],{"class":271},[41,7186,3170],{"class":275},[41,7188,321],{"class":271},[41,7190,465],{"class":58},[41,7192,3177],{"class":275},[41,7194,1183],{"class":271},[41,7196,719],{"class":58},[41,7198,3177],{"class":275},[41,7200,2431],{"class":271},[41,7202,282],{"class":275},[41,7204,7205],{"class":43,"line":1763},[41,7206,2169],{"class":275},[41,7208,7209,7211,7213,7215,7217],{"class":43,"line":1768},[41,7210,3589],{"class":275},[41,7212,6557],{"class":271},[41,7214,7171],{"class":275},[41,7216,1317],{"class":271},[41,7218,1339],{"class":275},[41,7220,7221,7224,7226],{"class":43,"line":1782},[41,7222,7223],{"class":275},"        p2",[41,7225,2431],{"class":271},[41,7227,1434],{"class":275},[41,7229,7230],{"class":43,"line":1787},[41,7231,2326],{"class":275},[41,7233,7234],{"class":43,"line":1793},[41,7235,1706],{"class":275},[15,7237,7239],{"id":7238},"_37指针和函数","3.7指针和函数",[20,7241,7242],{},"利用指针做函数参数，可以修改实参的值",[20,7244,7245],{},"值传递：只改变形参，不改变实参",[20,7247,7248],{},"地址传递：",[32,7250,7252],{"className":262,"code":7251,"language":264,"meta":37,"style":37},"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",[24,7253,7254,7279,7283,7295,7306,7316,7320,7328,7332,7344,7356,7361,7377,7392,7407],{"__ignoreMap":37},[41,7255,7256,7258,7260,7262,7264,7266,7269,7271,7273,7275,7277],{"class":43,"line":44},[41,7257,5502],{"class":271},[41,7259,5505],{"class":54},[41,7261,276],{"class":275},[41,7263,279],{"class":271},[41,7265,6656],{"class":271},[41,7267,7268],{"class":5354},"p1",[41,7270,651],{"class":275},[41,7272,279],{"class":271},[41,7274,6656],{"class":271},[41,7276,7171],{"class":5354},[41,7278,282],{"class":275},[41,7280,7281],{"class":43,"line":51},[41,7282,1687],{"class":275},[41,7284,7285,7287,7289,7292],{"class":43,"line":62},[41,7286,2124],{"class":271},[41,7288,4393],{"class":275},[41,7290,7291],{"class":271},"=*",[41,7293,7294],{"class":275},"p1;\n",[41,7296,7297,7299,7301,7303],{"class":43,"line":70},[41,7298,6541],{"class":271},[41,7300,7268],{"class":275},[41,7302,7291],{"class":271},[41,7304,7305],{"class":275},"p2;\n",[41,7307,7308,7310,7312,7314],{"class":43,"line":76},[41,7309,6541],{"class":271},[41,7311,7171],{"class":275},[41,7313,321],{"class":271},[41,7315,4418],{"class":275},[41,7317,7318],{"class":43,"line":83},[41,7319,1706],{"class":275},[41,7321,7322,7324,7326],{"class":43,"line":89},[41,7323,279],{"class":271},[41,7325,2112],{"class":54},[41,7327,2115],{"class":275},[41,7329,7330],{"class":43,"line":96},[41,7331,1687],{"class":275},[41,7333,7334,7336,7338,7340,7342],{"class":43,"line":104},[41,7335,2124],{"class":271},[41,7337,1539],{"class":275},[41,7339,321],{"class":271},[41,7341,719],{"class":58},[41,7343,1434],{"class":275},[41,7345,7346,7348,7350,7352,7354],{"class":43,"line":176},[41,7347,2124],{"class":271},[41,7349,2971],{"class":275},[41,7351,321],{"class":271},[41,7353,973],{"class":58},[41,7355,1434],{"class":275},[41,7357,7358],{"class":43,"line":184},[41,7359,7360],{"class":47},"    \u002F\u002F地址传递\n",[41,7362,7363,7365,7367,7369,7372,7374],{"class":43,"line":1757},[41,7364,5699],{"class":54},[41,7366,276],{"class":275},[41,7368,626],{"class":271},[41,7370,7371],{"class":275},"a,",[41,7373,626],{"class":271},[41,7375,7376],{"class":275},"b);\n",[41,7378,7379,7381,7383,7385,7387,7389],{"class":43,"line":1763},[41,7380,1692],{"class":275},[41,7382,1317],{"class":271},[41,7384,511],{"class":275},[41,7386,1317],{"class":271},[41,7388,1382],{"class":275},[41,7390,7391],{"class":47},"\u002F\u002F20\n",[41,7393,7394,7396,7398,7400,7402,7404],{"class":43,"line":1768},[41,7395,1692],{"class":275},[41,7397,1317],{"class":271},[41,7399,536],{"class":275},[41,7401,1317],{"class":271},[41,7403,1382],{"class":275},[41,7405,7406],{"class":47},"\u002F\u002F10\n",[41,7408,7409],{"class":43,"line":1782},[41,7410,1706],{"class":275},[20,7412,7413],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[15,7415,7417],{"id":7416},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[20,7419,7420],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[20,7422,7423,7424,7426],{},"例如数组：int arr",[41,7425,719],{},"={4,3,6,9,1,2,10,8,7,5}",[32,7428,7430],{"className":262,"code":7429,"language":264,"meta":37,"style":37},"#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",[24,7431,7432,7438,7448,7472,7476,7507,7511,7545,7549,7567,7571,7582,7597,7612,7616,7620,7624,7628,7632,7640,7644,7649,7703,7715,7727,7732,7740,7744,7749,7774,7778,7793,7802,7806],{"__ignoreMap":37},[41,7433,7434,7436],{"class":43,"line":44},[41,7435,2089],{"class":271},[41,7437,2092],{"class":378},[41,7439,7440,7442,7444,7446],{"class":43,"line":51},[41,7441,2097],{"class":271},[41,7443,2100],{"class":271},[41,7445,2103],{"class":54},[41,7447,1434],{"class":275},[41,7449,7450,7452,7455,7457,7459,7461,7463,7465,7467,7470],{"class":43,"line":62},[41,7451,5502],{"class":271},[41,7453,7454],{"class":54}," bubbleSort",[41,7456,276],{"class":275},[41,7458,279],{"class":271},[41,7460,6656],{"class":271},[41,7462,20],{"class":5354},[41,7464,651],{"class":275},[41,7466,279],{"class":271},[41,7468,7469],{"class":5354}," len",[41,7471,282],{"class":275},[41,7473,7474],{"class":43,"line":70},[41,7475,1687],{"class":275},[41,7477,7478,7480,7482,7484,7486,7488,7490,7492,7494,7497,7499,7501,7503,7505],{"class":43,"line":76},[41,7479,3339],{"class":271},[41,7481,276],{"class":275},[41,7483,279],{"class":271},[41,7485,3170],{"class":275},[41,7487,321],{"class":271},[41,7489,465],{"class":58},[41,7491,3177],{"class":275},[41,7493,1183],{"class":271},[41,7495,7496],{"class":275},"len",[41,7498,805],{"class":271},[41,7500,26],{"class":58},[41,7502,3177],{"class":275},[41,7504,2431],{"class":271},[41,7506,282],{"class":275},[41,7508,7509],{"class":43,"line":83},[41,7510,2169],{"class":275},[41,7512,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543],{"class":43,"line":89},[41,7514,3541],{"class":271},[41,7516,276],{"class":275},[41,7518,279],{"class":271},[41,7520,3548],{"class":275},[41,7522,321],{"class":271},[41,7524,465],{"class":58},[41,7526,3555],{"class":275},[41,7528,1183],{"class":271},[41,7530,7496],{"class":275},[41,7532,805],{"class":271},[41,7534,714],{"class":275},[41,7536,805],{"class":271},[41,7538,26],{"class":58},[41,7540,3555],{"class":275},[41,7542,2431],{"class":271},[41,7544,282],{"class":275},[41,7546,7547],{"class":43,"line":96},[41,7548,2648],{"class":275},[41,7550,7551,7553,7556,7558,7561,7563,7565],{"class":43,"line":104},[41,7552,4780],{"class":271},[41,7554,7555],{"class":275},"(p[j]",[41,7557,1233],{"class":271},[41,7559,7560],{"class":275},"p[j",[41,7562,754],{"class":271},[41,7564,26],{"class":58},[41,7566,4795],{"class":275},[41,7568,7569],{"class":43,"line":176},[41,7570,4800],{"class":275},[41,7572,7573,7575,7577,7579],{"class":43,"line":184},[41,7574,4805],{"class":271},[41,7576,4393],{"class":275},[41,7578,321],{"class":271},[41,7580,7581],{"class":275},"p[j];\n",[41,7583,7584,7587,7589,7591,7593,7595],{"class":43,"line":1757},[41,7585,7586],{"class":275},"                p[j]",[41,7588,321],{"class":271},[41,7590,7560],{"class":275},[41,7592,754],{"class":271},[41,7594,26],{"class":58},[41,7596,4828],{"class":275},[41,7598,7599,7602,7604,7606,7608,7610],{"class":43,"line":1763},[41,7600,7601],{"class":275},"                p[j",[41,7603,754],{"class":271},[41,7605,26],{"class":58},[41,7607,1213],{"class":275},[41,7609,321],{"class":271},[41,7611,4418],{"class":275},[41,7613,7614],{"class":43,"line":1768},[41,7615,4848],{"class":275},[41,7617,7618],{"class":43,"line":1782},[41,7619,2667],{"class":275},[41,7621,7622],{"class":43,"line":1787},[41,7623,2326],{"class":275},[41,7625,7626],{"class":43,"line":1793},[41,7627,1706],{"class":275},[41,7629,7630],{"class":43,"line":1814},[41,7631,80],{"emptyLinePlaceholder":79},[41,7633,7634,7636,7638],{"class":43,"line":1819},[41,7635,279],{"class":271},[41,7637,2112],{"class":54},[41,7639,2115],{"class":275},[41,7641,7642],{"class":43,"line":1833},[41,7643,1687],{"class":275},[41,7645,7646],{"class":43,"line":1838},[41,7647,7648],{"class":47},"    \u002F\u002F 1.创建数组\n",[41,7650,7651,7653,7655,7657,7659,7661,7663,7665,7667,7669,7671,7673,7675,7677,7679,7681,7683,7685,7687,7689,7691,7693,7695,7697,7699,7701],{"class":43,"line":1867},[41,7652,2124],{"class":271},[41,7654,4100],{"class":275},[41,7656,719],{"class":58},[41,7658,1213],{"class":275},[41,7660,321],{"class":271},[41,7662,1169],{"class":275},[41,7664,566],{"class":58},[41,7666,651],{"class":275},[41,7668,345],{"class":58},[41,7670,651],{"class":275},[41,7672,617],{"class":58},[41,7674,651],{"class":275},[41,7676,693],{"class":58},[41,7678,651],{"class":275},[41,7680,26],{"class":58},[41,7682,651],{"class":275},[41,7684,351],{"class":58},[41,7686,651],{"class":275},[41,7688,719],{"class":58},[41,7690,651],{"class":275},[41,7692,668],{"class":58},[41,7694,651],{"class":275},[41,7696,642],{"class":58},[41,7698,651],{"class":275},[41,7700,592],{"class":58},[41,7702,4133],{"class":275},[41,7704,7705,7707,7709,7711,7713],{"class":43,"line":1872},[41,7706,2124],{"class":271},[41,7708,7469],{"class":275},[41,7710,321],{"class":271},[41,7712,719],{"class":58},[41,7714,1434],{"class":275},[41,7716,7717,7719,7721,7723,7725],{"class":43,"line":1889},[41,7718,2124],{"class":271},[41,7720,6656],{"class":271},[41,7722,20],{"class":275},[41,7724,321],{"class":271},[41,7726,7176],{"class":275},[41,7728,7729],{"class":43,"line":1894},[41,7730,7731],{"class":47},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[41,7733,7734,7737],{"class":43,"line":1899},[41,7735,7736],{"class":54},"    bubbleSort",[41,7738,7739],{"class":275},"(p,len);\n",[41,7741,7742],{"class":43,"line":1904},[41,7743,80],{"emptyLinePlaceholder":79},[41,7745,7746],{"class":43,"line":1918},[41,7747,7748],{"class":47},"    \u002F\u002F 3.打印排序后的数组\n",[41,7750,7751,7753,7755,7757,7759,7761,7763,7765,7767,7770,7772],{"class":43,"line":1923},[41,7752,3339],{"class":271},[41,7754,1798],{"class":275},[41,7756,279],{"class":271},[41,7758,3170],{"class":275},[41,7760,321],{"class":271},[41,7762,465],{"class":58},[41,7764,3352],{"class":275},[41,7766,1183],{"class":271},[41,7768,7769],{"class":275},"len; i",[41,7771,2431],{"class":271},[41,7773,282],{"class":275},[41,7775,7776],{"class":43,"line":2715},[41,7777,2169],{"class":275},[41,7779,7780,7782,7784,7786,7788,7791],{"class":43,"line":2729},[41,7781,3589],{"class":275},[41,7783,6557],{"class":271},[41,7785,20],{"class":275},[41,7787,1317],{"class":271},[41,7789,7790],{"class":378},"\"\"",[41,7792,1434],{"class":275},[41,7794,7795,7798,7800],{"class":43,"line":2737},[41,7796,7797],{"class":275},"        p",[41,7799,2431],{"class":271},[41,7801,1434],{"class":275},[41,7803,7804],{"class":43,"line":2742},[41,7805,2326],{"class":275},[41,7807,7808],{"class":43,"line":2748},[41,7809,1706],{"class":275},[189,7811,7812],{},"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":37,"searchDepth":51,"depth":51,"links":7814},[7815,7816,7817,7818,7819,7820,7821,7822],{"id":6421,"depth":51,"text":6422},{"id":6587,"depth":51,"text":6588},{"id":6743,"depth":51,"text":6744},{"id":6821,"depth":51,"text":6822},{"id":6900,"depth":51,"text":6901},{"id":6999,"depth":51,"text":7000},{"id":7238,"depth":51,"text":7239},{"id":7416,"depth":51,"text":7417},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6410,"description":6418},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7829,"title":7830,"body":7831,"description":7838,"extension":197,"meta":10812,"navigation":79,"path":10813,"seo":10814,"stem":10815,"__hash__":10816},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7832,"toc":10803},[7833,7836,7839,7843,7846,7849,7860,8198,8201,8205,8208,8215,8470,8474,8477,8480,8635,8639,8642,8645,8851,8855,8858,9161,9164,9172,9176,9179,9330,9332,9343,9400,9404,9409,10066,10074,10077,10171,10174,10794,10800],[10,7834,7830],{"id":7835},"_4结构体",[20,7837,7838],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[15,7840,7842],{"id":7841},"_41结构体定义与使用","4.1结构体定义与使用",[20,7844,7845],{},"语法：struct 结构体名 {结构体成员列表}；",[20,7847,7848],{},"通过结构体创建变量的方式：",[1280,7850,7851,7854,7857],{},[227,7852,7853],{},"struct 结构体名 变量名",[227,7855,7856],{},"struct 结构体名 变量名={成员1值，成员2值...}",[227,7858,7859],{},"定义结构体时顺便创建变量",[32,7861,7863],{"className":262,"code":7862,"language":264,"meta":37,"style":37},"#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",[24,7864,7865,7871,7881,7888,7893,7901,7905,7910,7914,7919,7924,7929,7936,7941,7948,7952,7959,7963,7967,7971,7975,7979,7983,7989,7993,7999,8007,8015,8019,8024,8029,8040,8045,8057,8068,8079,8084,8108,8113,8119,8146,8151,8157,8169,8181,8193],{"__ignoreMap":37},[41,7866,7867,7869],{"class":43,"line":44},[41,7868,2089],{"class":271},[41,7870,2092],{"class":378},[41,7872,7873,7875,7877,7879],{"class":43,"line":51},[41,7874,2097],{"class":271},[41,7876,2100],{"class":271},[41,7878,2103],{"class":54},[41,7880,1434],{"class":275},[41,7882,7883,7885],{"class":43,"line":62},[41,7884,2089],{"class":271},[41,7886,7887],{"class":378},"\u003Cstring>\n",[41,7889,7890],{"class":43,"line":70},[41,7891,7892],{"class":47},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[41,7894,7895,7898],{"class":43,"line":76},[41,7896,7897],{"class":271},"struct",[41,7899,7900],{"class":54}," Student\n",[41,7902,7903],{"class":43,"line":83},[41,7904,1687],{"class":275},[41,7906,7907],{"class":43,"line":89},[41,7908,7909],{"class":47},"    \u002F\u002F成员列表\n",[41,7911,7912],{"class":43,"line":96},[41,7913,80],{"emptyLinePlaceholder":79},[41,7915,7916],{"class":43,"line":104},[41,7917,7918],{"class":47},"    \u002F\u002F姓名\n",[41,7920,7921],{"class":43,"line":176},[41,7922,7923],{"class":275},"    string name;\n",[41,7925,7926],{"class":43,"line":184},[41,7927,7928],{"class":47},"    \u002F\u002F年龄\n",[41,7930,7931,7933],{"class":43,"line":1757},[41,7932,2124],{"class":271},[41,7934,7935],{"class":275}," age;\n",[41,7937,7938],{"class":43,"line":1763},[41,7939,7940],{"class":47},"    \u002F\u002F分数\n",[41,7942,7943,7945],{"class":43,"line":1768},[41,7944,2124],{"class":271},[41,7946,7947],{"class":275}," score;\n",[41,7949,7950],{"class":43,"line":1782},[41,7951,4133],{"class":275},[41,7953,7954,7956],{"class":43,"line":1787},[41,7955,7897],{"class":271},[41,7957,7958],{"class":54}," School\n",[41,7960,7961],{"class":43,"line":1793},[41,7962,1687],{"class":275},[41,7964,7965],{"class":43,"line":1814},[41,7966,7909],{"class":47},[41,7968,7969],{"class":43,"line":1819},[41,7970,80],{"emptyLinePlaceholder":79},[41,7972,7973],{"class":43,"line":1833},[41,7974,7918],{"class":47},[41,7976,7977],{"class":43,"line":1838},[41,7978,7923],{"class":275},[41,7980,7981],{"class":43,"line":1867},[41,7982,7928],{"class":47},[41,7984,7985,7987],{"class":43,"line":1872},[41,7986,2124],{"class":271},[41,7988,7935],{"class":275},[41,7990,7991],{"class":43,"line":1889},[41,7992,7940],{"class":47},[41,7994,7995,7997],{"class":43,"line":1894},[41,7996,2124],{"class":271},[41,7998,7947],{"class":275},[41,8000,8001,8004],{"class":43,"line":1899},[41,8002,8003],{"class":275},"} s3;",[41,8005,8006],{"class":47}," \u002F\u002F创建结构体时就创建了变量\n",[41,8008,8009,8011,8013],{"class":43,"line":1904},[41,8010,279],{"class":271},[41,8012,2112],{"class":54},[41,8014,2115],{"class":275},[41,8016,8017],{"class":43,"line":1918},[41,8018,1687],{"class":275},[41,8020,8021],{"class":43,"line":1923},[41,8022,8023],{"class":47},"    \u002F\u002F2.通过学生类型创建具体学生\n",[41,8025,8026],{"class":43,"line":2715},[41,8027,8028],{"class":47},"    \u002F\u002F2.1 struct Student s1;\n",[41,8030,8031,8034,8037],{"class":43,"line":2729},[41,8032,8033],{"class":271},"    struct",[41,8035,8036],{"class":54}," Student",[41,8038,8039],{"class":275}," s1;\n",[41,8041,8042],{"class":43,"line":2737},[41,8043,8044],{"class":47},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[41,8046,8047,8050,8052,8055],{"class":43,"line":2742},[41,8048,8049],{"class":275},"    s1.name",[41,8051,321],{"class":271},[41,8053,8054],{"class":378},"\"张三\"",[41,8056,1434],{"class":275},[41,8058,8059,8062,8064,8066],{"class":43,"line":2748},[41,8060,8061],{"class":275},"    s1.age",[41,8063,321],{"class":271},[41,8065,923],{"class":58},[41,8067,1434],{"class":275},[41,8069,8070,8073,8075,8077],{"class":43,"line":2754},[41,8071,8072],{"class":275},"    s1.score",[41,8074,321],{"class":271},[41,8076,527],{"class":58},[41,8078,1434],{"class":275},[41,8080,8081],{"class":43,"line":2759},[41,8082,8083],{"class":47},"    \u002F\u002F输出结果\n",[41,8085,8087,8089,8091,8094,8096,8099,8101,8104,8106],{"class":43,"line":8086},37,[41,8088,1692],{"class":275},[41,8090,1317],{"class":271},[41,8092,8093],{"class":275},"s1.name",[41,8095,1317],{"class":271},[41,8097,8098],{"class":275},"s1.age",[41,8100,1317],{"class":271},[41,8102,8103],{"class":275},"s1.score",[41,8105,1317],{"class":271},[41,8107,1339],{"class":275},[41,8109,8111],{"class":43,"line":8110},38,[41,8112,80],{"emptyLinePlaceholder":79},[41,8114,8116],{"class":43,"line":8115},39,[41,8117,8118],{"class":47},"    \u002F\u002F2.2 struct Student s2={...}\n",[41,8120,8122,8124,8126,8129,8131,8133,8136,8138,8140,8142,8144],{"class":43,"line":8121},40,[41,8123,8033],{"class":271},[41,8125,8036],{"class":54},[41,8127,8128],{"class":275}," s2",[41,8130,321],{"class":271},[41,8132,1169],{"class":275},[41,8134,8135],{"class":378},"\"王五\"",[41,8137,651],{"class":275},[41,8139,923],{"class":58},[41,8141,651],{"class":275},[41,8143,527],{"class":58},[41,8145,4133],{"class":275},[41,8147,8149],{"class":43,"line":8148},41,[41,8150,80],{"emptyLinePlaceholder":79},[41,8152,8154],{"class":43,"line":8153},42,[41,8155,8156],{"class":47},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[41,8158,8160,8163,8165,8167],{"class":43,"line":8159},43,[41,8161,8162],{"class":275},"    s3.name",[41,8164,321],{"class":271},[41,8166,3816],{"class":378},[41,8168,1434],{"class":275},[41,8170,8172,8175,8177,8179],{"class":43,"line":8171},44,[41,8173,8174],{"class":275},"    s3.age",[41,8176,321],{"class":271},[41,8178,923],{"class":58},[41,8180,1434],{"class":275},[41,8182,8184,8187,8189,8191],{"class":43,"line":8183},45,[41,8185,8186],{"class":275},"    s3.score",[41,8188,321],{"class":271},[41,8190,973],{"class":58},[41,8192,1434],{"class":275},[41,8194,8196],{"class":43,"line":8195},46,[41,8197,1706],{"class":275},[20,8199,8200],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[15,8202,8204],{"id":8203},"_42结构体数组","4.2结构体数组",[20,8206,8207],{},"将自定义的结构体放入到数组中方便维护",[20,8209,8210,8211,8214],{},"语法：struct 结构体名 数组名",[41,8212,8213],{},"元素个数","={ {}，{},...{} };",[32,8216,8218],{"className":262,"code":8217,"language":264,"meta":37,"style":37},"#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",[24,8219,8220,8226,8236,8242,8247,8253,8257,8261,8267,8273,8277,8281,8289,8293,8298,8313,8317,8333,8349,8353,8358,8374,8389,8404,8409,8435,8439,8462,8466],{"__ignoreMap":37},[41,8221,8222,8224],{"class":43,"line":44},[41,8223,2089],{"class":271},[41,8225,2092],{"class":378},[41,8227,8228,8230,8232,8234],{"class":43,"line":51},[41,8229,2097],{"class":271},[41,8231,2100],{"class":271},[41,8233,2103],{"class":54},[41,8235,1434],{"class":275},[41,8237,8238,8240],{"class":43,"line":62},[41,8239,2089],{"class":271},[41,8241,7887],{"class":378},[41,8243,8244],{"class":43,"line":70},[41,8245,8246],{"class":47},"\u002F\u002F1.定义结构体\n",[41,8248,8249,8251],{"class":43,"line":76},[41,8250,7897],{"class":271},[41,8252,7900],{"class":54},[41,8254,8255],{"class":43,"line":83},[41,8256,1687],{"class":275},[41,8258,8259],{"class":43,"line":89},[41,8260,7923],{"class":275},[41,8262,8263,8265],{"class":43,"line":96},[41,8264,2124],{"class":271},[41,8266,7935],{"class":275},[41,8268,8269,8271],{"class":43,"line":104},[41,8270,2124],{"class":271},[41,8272,7947],{"class":275},[41,8274,8275],{"class":43,"line":176},[41,8276,80],{"emptyLinePlaceholder":79},[41,8278,8279],{"class":43,"line":184},[41,8280,4133],{"class":275},[41,8282,8283,8285,8287],{"class":43,"line":1757},[41,8284,279],{"class":271},[41,8286,2112],{"class":54},[41,8288,2115],{"class":275},[41,8290,8291],{"class":43,"line":1763},[41,8292,1687],{"class":275},[41,8294,8295],{"class":43,"line":1768},[41,8296,8297],{"class":47},"    \u002F\u002F2.创建结构体数组\n",[41,8299,8300,8302,8304,8307,8309,8311],{"class":43,"line":1782},[41,8301,8033],{"class":271},[41,8303,8036],{"class":54},[41,8305,8306],{"class":275}," stuArray[",[41,8308,351],{"class":58},[41,8310,1213],{"class":275},[41,8312,5046],{"class":271},[41,8314,8315],{"class":43,"line":1787},[41,8316,2169],{"class":275},[41,8318,8319,8321,8323,8325,8327,8329,8331],{"class":43,"line":1793},[41,8320,5055],{"class":275},[41,8322,8054],{"class":378},[41,8324,651],{"class":275},[41,8326,923],{"class":58},[41,8328,651],{"class":275},[41,8330,584],{"class":58},[41,8332,5068],{"class":275},[41,8334,8335,8337,8339,8341,8343,8345,8347],{"class":43,"line":1814},[41,8336,5055],{"class":275},[41,8338,3816],{"class":378},[41,8340,651],{"class":275},[41,8342,848],{"class":58},[41,8344,651],{"class":275},[41,8346,848],{"class":58},[41,8348,1706],{"class":275},[41,8350,8351],{"class":43,"line":1819},[41,8352,2326],{"class":275},[41,8354,8355],{"class":43,"line":1833},[41,8356,8357],{"class":47},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[41,8359,8360,8363,8365,8368,8370,8372],{"class":43,"line":1838},[41,8361,8362],{"class":275},"    stuArray[",[41,8364,26],{"class":58},[41,8366,8367],{"class":275},"].name",[41,8369,321],{"class":271},[41,8371,3839],{"class":378},[41,8373,1434],{"class":275},[41,8375,8376,8378,8380,8383,8385,8387],{"class":43,"line":1867},[41,8377,8362],{"class":275},[41,8379,26],{"class":58},[41,8381,8382],{"class":275},"].age",[41,8384,321],{"class":271},[41,8386,351],{"class":58},[41,8388,1434],{"class":275},[41,8390,8391,8393,8395,8398,8400,8402],{"class":43,"line":1872},[41,8392,8362],{"class":275},[41,8394,26],{"class":58},[41,8396,8397],{"class":275},"].score",[41,8399,321],{"class":271},[41,8401,351],{"class":58},[41,8403,1434],{"class":275},[41,8405,8406],{"class":43,"line":1889},[41,8407,8408],{"class":47},"    \u002F\u002F4.遍历结构体数组\n",[41,8410,8411,8413,8415,8417,8419,8421,8423,8425,8427,8429,8431,8433],{"class":43,"line":1894},[41,8412,3339],{"class":271},[41,8414,1798],{"class":275},[41,8416,279],{"class":271},[41,8418,3170],{"class":275},[41,8420,321],{"class":271},[41,8422,465],{"class":58},[41,8424,3177],{"class":275},[41,8426,1183],{"class":271},[41,8428,351],{"class":58},[41,8430,3177],{"class":275},[41,8432,2431],{"class":271},[41,8434,282],{"class":275},[41,8436,8437],{"class":43,"line":1899},[41,8438,2169],{"class":275},[41,8440,8441,8443,8445,8448,8450,8453,8455,8458,8460],{"class":43,"line":1904},[41,8442,3589],{"class":275},[41,8444,1317],{"class":271},[41,8446,8447],{"class":275},"stuArray[i].name",[41,8449,1317],{"class":271},[41,8451,8452],{"class":275},"stuArray[i].age",[41,8454,1317],{"class":271},[41,8456,8457],{"class":275},"stuArray[i].score",[41,8459,1317],{"class":271},[41,8461,1339],{"class":275},[41,8463,8464],{"class":43,"line":1918},[41,8465,2326],{"class":275},[41,8467,8468],{"class":43,"line":1923},[41,8469,1706],{"class":275},[15,8471,8473],{"id":8472},"_43结构体指针","4.3结构体指针",[20,8475,8476],{},"作用：通过指针访问结构体中的成员",[20,8478,8479],{},"利用操作符->可以通过结构体指针访问结构体属性",[32,8481,8483],{"className":262,"code":8482,"language":264,"meta":37,"style":37},"#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",[24,8484,8485,8491,8501,8507,8511,8517,8521,8525,8531,8537,8541,8549,8553,8558,8583,8588,8603,8608,8631],{"__ignoreMap":37},[41,8486,8487,8489],{"class":43,"line":44},[41,8488,2089],{"class":271},[41,8490,2092],{"class":378},[41,8492,8493,8495,8497,8499],{"class":43,"line":51},[41,8494,2097],{"class":271},[41,8496,2100],{"class":271},[41,8498,2103],{"class":54},[41,8500,1434],{"class":275},[41,8502,8503,8505],{"class":43,"line":62},[41,8504,2089],{"class":271},[41,8506,7887],{"class":378},[41,8508,8509],{"class":43,"line":70},[41,8510,8246],{"class":47},[41,8512,8513,8515],{"class":43,"line":76},[41,8514,7897],{"class":271},[41,8516,7900],{"class":54},[41,8518,8519],{"class":43,"line":83},[41,8520,1687],{"class":275},[41,8522,8523],{"class":43,"line":89},[41,8524,7923],{"class":275},[41,8526,8527,8529],{"class":43,"line":96},[41,8528,2124],{"class":271},[41,8530,7935],{"class":275},[41,8532,8533,8535],{"class":43,"line":104},[41,8534,2124],{"class":271},[41,8536,7947],{"class":275},[41,8538,8539],{"class":43,"line":176},[41,8540,4133],{"class":275},[41,8542,8543,8545,8547],{"class":43,"line":184},[41,8544,279],{"class":271},[41,8546,2112],{"class":54},[41,8548,2115],{"class":275},[41,8550,8551],{"class":43,"line":1757},[41,8552,1687],{"class":275},[41,8554,8555],{"class":43,"line":1763},[41,8556,8557],{"class":47},"    \u002F\u002F创建学生结构体变量\n",[41,8559,8560,8562,8564,8567,8569,8571,8573,8575,8577,8579,8581],{"class":43,"line":1768},[41,8561,8033],{"class":271},[41,8563,8036],{"class":54},[41,8565,8566],{"class":275}," s",[41,8568,321],{"class":271},[41,8570,1169],{"class":275},[41,8572,8054],{"class":378},[41,8574,651],{"class":275},[41,8576,923],{"class":58},[41,8578,651],{"class":275},[41,8580,1862],{"class":58},[41,8582,4133],{"class":275},[41,8584,8585],{"class":43,"line":1782},[41,8586,8587],{"class":47},"    \u002F\u002F通过指针指向结构体变量\n",[41,8589,8590,8592,8594,8596,8598,8600],{"class":43,"line":1787},[41,8591,8033],{"class":271},[41,8593,8036],{"class":54},[41,8595,6656],{"class":271},[41,8597,20],{"class":275},[41,8599,6477],{"class":271},[41,8601,8602],{"class":275},"s\n",[41,8604,8605],{"class":43,"line":1793},[41,8606,8607],{"class":47},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[41,8609,8610,8612,8614,8617,8619,8622,8624,8627,8629],{"class":43,"line":1814},[41,8611,1692],{"class":275},[41,8613,1317],{"class":271},[41,8615,8616],{"class":275},"p->name",[41,8618,1317],{"class":271},[41,8620,8621],{"class":275},"p->age",[41,8623,1317],{"class":271},[41,8625,8626],{"class":275},"p->score",[41,8628,1317],{"class":271},[41,8630,1339],{"class":275},[41,8632,8633],{"class":43,"line":1819},[41,8634,1706],{"class":275},[15,8636,8638],{"id":8637},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[20,8640,8641],{},"作用：结构体中的成员可以是另一个结构体",[20,8643,8644],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[32,8646,8648],{"className":262,"code":8647,"language":264,"meta":37,"style":37},"#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",[24,8649,8650,8656,8666,8672,8677,8685,8689,8693,8699,8705,8709,8714,8721,8725,8732,8736,8742,8747,8751,8759,8763,8768,8773,8778,8789,8801,8812,8825,8836,8847],{"__ignoreMap":37},[41,8651,8652,8654],{"class":43,"line":44},[41,8653,2089],{"class":271},[41,8655,2092],{"class":378},[41,8657,8658,8660,8662,8664],{"class":43,"line":51},[41,8659,2097],{"class":271},[41,8661,2100],{"class":271},[41,8663,2103],{"class":54},[41,8665,1434],{"class":275},[41,8667,8668,8670],{"class":43,"line":62},[41,8669,2089],{"class":271},[41,8671,7887],{"class":378},[41,8673,8674],{"class":43,"line":70},[41,8675,8676],{"class":47},"\u002F\u002F定义学生结构体\n",[41,8678,8679,8681,8683],{"class":43,"line":76},[41,8680,7897],{"class":271},[41,8682,8036],{"class":54},[41,8684,2812],{"class":275},[41,8686,8687],{"class":43,"line":83},[41,8688,1687],{"class":275},[41,8690,8691],{"class":43,"line":89},[41,8692,7923],{"class":275},[41,8694,8695,8697],{"class":43,"line":96},[41,8696,2124],{"class":271},[41,8698,7935],{"class":275},[41,8700,8701,8703],{"class":43,"line":104},[41,8702,2124],{"class":271},[41,8704,7947],{"class":275},[41,8706,8707],{"class":43,"line":176},[41,8708,1706],{"class":275},[41,8710,8711],{"class":43,"line":184},[41,8712,8713],{"class":47},"\u002F\u002F定义老师结构体\n",[41,8715,8716,8718],{"class":43,"line":1757},[41,8717,7897],{"class":271},[41,8719,8720],{"class":54}," Teacher\n",[41,8722,8723],{"class":43,"line":1763},[41,8724,1687],{"class":275},[41,8726,8727,8729],{"class":43,"line":1768},[41,8728,2124],{"class":271},[41,8730,8731],{"class":275}," id;\n",[41,8733,8734],{"class":43,"line":1782},[41,8735,7923],{"class":275},[41,8737,8738,8740],{"class":43,"line":1787},[41,8739,2124],{"class":271},[41,8741,7935],{"class":275},[41,8743,8744],{"class":43,"line":1793},[41,8745,8746],{"class":275},"    Student stu;\n",[41,8748,8749],{"class":43,"line":1814},[41,8750,1706],{"class":275},[41,8752,8753,8755,8757],{"class":43,"line":1819},[41,8754,279],{"class":271},[41,8756,2112],{"class":54},[41,8758,6116],{"class":275},[41,8760,8761],{"class":43,"line":1833},[41,8762,1687],{"class":275},[41,8764,8765],{"class":43,"line":1838},[41,8766,8767],{"class":47},"    \u002F\u002F结构体嵌套结构体\n",[41,8769,8770],{"class":43,"line":1867},[41,8771,8772],{"class":47},"    \u002F\u002F创建老师\n",[41,8774,8775],{"class":43,"line":1872},[41,8776,8777],{"class":275},"    Teacher t;\n",[41,8779,8780,8783,8785,8787],{"class":43,"line":1889},[41,8781,8782],{"class":275},"    t.id",[41,8784,321],{"class":271},[41,8786,584],{"class":58},[41,8788,1434],{"class":275},[41,8790,8791,8794,8796,8799],{"class":43,"line":1894},[41,8792,8793],{"class":275},"    t.name",[41,8795,321],{"class":271},[41,8797,8798],{"class":378},"\"老王\"",[41,8800,1434],{"class":275},[41,8802,8803,8806,8808,8810],{"class":43,"line":1899},[41,8804,8805],{"class":275},"    t.age",[41,8807,321],{"class":271},[41,8809,923],{"class":58},[41,8811,1434],{"class":275},[41,8813,8814,8817,8819,8822],{"class":43,"line":1904},[41,8815,8816],{"class":275},"    t.stu.name",[41,8818,321],{"class":271},[41,8820,8821],{"class":378},"\"小王\"",[41,8823,8824],{"class":275},"；\n",[41,8826,8827,8830,8832,8834],{"class":43,"line":1918},[41,8828,8829],{"class":275},"    t.stu.age",[41,8831,321],{"class":271},[41,8833,973],{"class":58},[41,8835,1434],{"class":275},[41,8837,8838,8841,8843,8845],{"class":43,"line":1923},[41,8839,8840],{"class":275},"    t.stu.score",[41,8842,321],{"class":271},[41,8844,617],{"class":58},[41,8846,1434],{"class":275},[41,8848,8849],{"class":43,"line":2715},[41,8850,1706],{"class":275},[15,8852,8854],{"id":8853},"_45结构体做函数参数","4.5结构体做函数参数",[20,8856,8857],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[32,8859,8861],{"className":262,"code":8860,"language":264,"meta":37,"style":37},"#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",[24,8862,8863,8869,8879,8885,8891,8895,8899,8905,8911,8915,8920,8925,8942,8946,8979,8983,8988,9007,9011,9042,9046,9054,9058,9067,9079,9091,9103,9116,9124,9137,9149,9157],{"__ignoreMap":37},[41,8864,8865,8867],{"class":43,"line":44},[41,8866,2089],{"class":271},[41,8868,2092],{"class":378},[41,8870,8871,8873,8875,8877],{"class":43,"line":51},[41,8872,2097],{"class":271},[41,8874,2100],{"class":271},[41,8876,2103],{"class":54},[41,8878,1434],{"class":275},[41,8880,8881,8883],{"class":43,"line":62},[41,8882,2089],{"class":271},[41,8884,7887],{"class":378},[41,8886,8887,8889],{"class":43,"line":70},[41,8888,7897],{"class":271},[41,8890,7900],{"class":54},[41,8892,8893],{"class":43,"line":76},[41,8894,1687],{"class":275},[41,8896,8897],{"class":43,"line":83},[41,8898,7923],{"class":275},[41,8900,8901,8903],{"class":43,"line":89},[41,8902,2124],{"class":271},[41,8904,7935],{"class":275},[41,8906,8907,8909],{"class":43,"line":96},[41,8908,2124],{"class":271},[41,8910,7947],{"class":275},[41,8912,8913],{"class":43,"line":104},[41,8914,4133],{"class":275},[41,8916,8917],{"class":43,"line":176},[41,8918,8919],{"class":47},"\u002F\u002F打印学生信息的函数\n",[41,8921,8922],{"class":43,"line":184},[41,8923,8924],{"class":47},"\u002F\u002F值传递\n",[41,8926,8927,8929,8932,8934,8936,8938,8940],{"class":43,"line":1757},[41,8928,5502],{"class":271},[41,8930,8931],{"class":54}," printStudent1",[41,8933,276],{"class":275},[41,8935,7897],{"class":271},[41,8937,8036],{"class":54},[41,8939,8566],{"class":5354},[41,8941,282],{"class":275},[41,8943,8944],{"class":43,"line":1763},[41,8945,1687],{"class":275},[41,8947,8948,8950,8952,8955,8957,8960,8962,8965,8967,8969,8971,8974,8976],{"class":43,"line":1768},[41,8949,6667],{"class":275},[41,8951,1317],{"class":271},[41,8953,8954],{"class":275}," s.name ",[41,8956,1317],{"class":271},[41,8958,8959],{"class":378}," \" \"",[41,8961,1585],{"class":271},[41,8963,8964],{"class":275}," s.age ",[41,8966,1317],{"class":271},[41,8968,8959],{"class":378},[41,8970,1585],{"class":271},[41,8972,8973],{"class":275}," s.score ",[41,8975,1317],{"class":271},[41,8977,8978],{"class":275}," endl;\n",[41,8980,8981],{"class":43,"line":1782},[41,8982,1706],{"class":275},[41,8984,8985],{"class":43,"line":1787},[41,8986,8987],{"class":47},"\u002F\u002F地址传递\n",[41,8989,8990,8992,8995,8997,8999,9001,9003,9005],{"class":43,"line":1793},[41,8991,5502],{"class":271},[41,8993,8994],{"class":54}," printStudent2",[41,8996,276],{"class":275},[41,8998,7897],{"class":271},[41,9000,8036],{"class":54},[41,9002,6656],{"class":271},[41,9004,968],{"class":5354},[41,9006,282],{"class":275},[41,9008,9009],{"class":43,"line":1814},[41,9010,1687],{"class":275},[41,9012,9013,9015,9017,9020,9022,9024,9026,9029,9031,9033,9035,9038,9040],{"class":43,"line":1819},[41,9014,6667],{"class":275},[41,9016,1317],{"class":271},[41,9018,9019],{"class":275}," s->name ",[41,9021,1317],{"class":271},[41,9023,8959],{"class":378},[41,9025,1585],{"class":271},[41,9027,9028],{"class":275}," s->age ",[41,9030,1317],{"class":271},[41,9032,8959],{"class":378},[41,9034,1585],{"class":271},[41,9036,9037],{"class":275}," s->score ",[41,9039,1317],{"class":271},[41,9041,8978],{"class":275},[41,9043,9044],{"class":43,"line":1833},[41,9045,1706],{"class":275},[41,9047,9048,9050,9052],{"class":43,"line":1838},[41,9049,279],{"class":271},[41,9051,2112],{"class":54},[41,9053,2115],{"class":275},[41,9055,9056],{"class":43,"line":1867},[41,9057,1687],{"class":275},[41,9059,9060,9062,9064],{"class":43,"line":1872},[41,9061,8033],{"class":271},[41,9063,8036],{"class":54},[41,9065,9066],{"class":275}," s;\n",[41,9068,9069,9072,9074,9077],{"class":43,"line":1889},[41,9070,9071],{"class":275},"    s.name ",[41,9073,321],{"class":271},[41,9075,9076],{"class":378}," \"张三\"",[41,9078,1434],{"class":275},[41,9080,9081,9084,9086,9089],{"class":43,"line":1894},[41,9082,9083],{"class":275},"    s.age ",[41,9085,321],{"class":271},[41,9087,9088],{"class":58}," 20",[41,9090,1434],{"class":275},[41,9092,9093,9096,9098,9101],{"class":43,"line":1899},[41,9094,9095],{"class":275},"    s.score ",[41,9097,321],{"class":271},[41,9099,9100],{"class":58}," 85",[41,9102,1434],{"class":275},[41,9104,9105,9107,9109,9112,9114],{"class":43,"line":1904},[41,9106,1692],{"class":275},[41,9108,1317],{"class":271},[41,9110,9111],{"class":378},"\"值传递:\"",[41,9113,1317],{"class":271},[41,9115,1339],{"class":275},[41,9117,9118,9121],{"class":43,"line":1918},[41,9119,9120],{"class":54},"    printStudent1",[41,9122,9123],{"class":275},"(s);\n",[41,9125,9126,9128,9130,9133,9135],{"class":43,"line":1923},[41,9127,1692],{"class":275},[41,9129,1317],{"class":271},[41,9131,9132],{"class":378},"\"地址传递:\"",[41,9134,1317],{"class":271},[41,9136,1339],{"class":275},[41,9138,9139,9142,9144,9146],{"class":43,"line":2715},[41,9140,9141],{"class":54},"    printStudent2",[41,9143,276],{"class":275},[41,9145,626],{"class":271},[41,9147,9148],{"class":275},"s); \n",[41,9150,9151,9153,9155],{"class":43,"line":2729},[41,9152,4228],{"class":271},[41,9154,4231],{"class":58},[41,9156,1434],{"class":275},[41,9158,9159],{"class":43,"line":2737},[41,9160,1706],{"class":275},[20,9162,9163],{},"注意：",[1280,9165,9166,9169],{},[227,9167,9168],{},"1.先定义结构体，不要在函数中写结构体的定义",[227,9170,9171],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[15,9173,9175],{"id":9174},"_46结构体中const使用场景","4.6结构体中const使用场景",[20,9177,9178],{},"用const防止误操作",[32,9180,9182],{"className":262,"code":9181,"language":264,"meta":37,"style":37},"#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",[24,9183,9184,9190,9200,9206,9211,9215,9219,9225,9231,9235,9251,9255,9278,9282,9290,9294,9315,9322,9326],{"__ignoreMap":37},[41,9185,9186,9188],{"class":43,"line":44},[41,9187,2089],{"class":271},[41,9189,2092],{"class":378},[41,9191,9192,9194,9196,9198],{"class":43,"line":51},[41,9193,2097],{"class":271},[41,9195,2100],{"class":271},[41,9197,2103],{"class":54},[41,9199,1434],{"class":275},[41,9201,9202,9204],{"class":43,"line":62},[41,9203,2089],{"class":271},[41,9205,7887],{"class":378},[41,9207,9208],{"class":43,"line":70},[41,9209,9210],{"class":275},"sctuct Student\n",[41,9212,9213],{"class":43,"line":76},[41,9214,1687],{"class":275},[41,9216,9217],{"class":43,"line":83},[41,9218,7923],{"class":275},[41,9220,9221,9223],{"class":43,"line":89},[41,9222,2124],{"class":271},[41,9224,7935],{"class":275},[41,9226,9227,9229],{"class":43,"line":96},[41,9228,2124],{"class":271},[41,9230,7947],{"class":275},[41,9232,9233],{"class":43,"line":104},[41,9234,4133],{"class":275},[41,9236,9237,9239,9242,9244,9247,9249],{"class":43,"line":176},[41,9238,5502],{"class":271},[41,9240,9241],{"class":54}," printStudents",[41,9243,276],{"class":275},[41,9245,9246],{"class":54},"student",[41,9248,8566],{"class":5354},[41,9250,282],{"class":275},[41,9252,9253],{"class":43,"line":184},[41,9254,1687],{"class":275},[41,9256,9257,9259,9261,9264,9266,9269,9271,9274,9276],{"class":43,"line":1757},[41,9258,1692],{"class":275},[41,9260,1317],{"class":271},[41,9262,9263],{"class":275},"s.name",[41,9265,1317],{"class":271},[41,9267,9268],{"class":275},"s.age",[41,9270,1317],{"class":271},[41,9272,9273],{"class":275},"s.score",[41,9275,1317],{"class":271},[41,9277,1339],{"class":275},[41,9279,9280],{"class":43,"line":1763},[41,9281,1706],{"class":275},[41,9283,9284,9286,9288],{"class":43,"line":1768},[41,9285,279],{"class":271},[41,9287,2112],{"class":54},[41,9289,6116],{"class":275},[41,9291,9292],{"class":43,"line":1782},[41,9293,1687],{"class":275},[41,9295,9296,9299,9301,9303,9305,9307,9309,9311,9313],{"class":43,"line":1787},[41,9297,9298],{"class":275},"    Student s",[41,9300,321],{"class":271},[41,9302,1169],{"class":275},[41,9304,8054],{"class":378},[41,9306,651],{"class":275},[41,9308,923],{"class":58},[41,9310,651],{"class":275},[41,9312,923],{"class":58},[41,9314,4133],{"class":275},[41,9316,9317,9320],{"class":43,"line":1793},[41,9318,9319],{"class":54},"    printStudent",[41,9321,9123],{"class":275},[41,9323,9324],{"class":43,"line":1814},[41,9325,80],{"emptyLinePlaceholder":79},[41,9327,9328],{"class":43,"line":1819},[41,9329,1706],{"class":275},[20,9331,9163],{},[1280,9333,9334,9337,9340],{},[227,9335,9336],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[227,9338,9339],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[227,9341,9342],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[32,9344,9346],{"className":262,"code":9345,"language":264,"meta":37,"style":37},"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",[24,9347,9348,9367,9371,9376,9396],{"__ignoreMap":37},[41,9349,9350,9352,9354,9356,9358,9361,9363,9365],{"class":43,"line":44},[41,9351,5502],{"class":271},[41,9353,9241],{"class":54},[41,9355,276],{"class":275},[41,9357,6930],{"class":271},[41,9359,9360],{"class":54}," student",[41,9362,6656],{"class":271},[41,9364,968],{"class":5354},[41,9366,282],{"class":275},[41,9368,9369],{"class":43,"line":51},[41,9370,1687],{"class":275},[41,9372,9373],{"class":43,"line":62},[41,9374,9375],{"class":47},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[41,9377,9378,9380,9382,9384,9386,9388,9390,9392,9394],{"class":43,"line":70},[41,9379,1692],{"class":275},[41,9381,1317],{"class":271},[41,9383,9263],{"class":275},[41,9385,1317],{"class":271},[41,9387,9268],{"class":275},[41,9389,1317],{"class":271},[41,9391,9273],{"class":275},[41,9393,1317],{"class":271},[41,9395,1339],{"class":275},[41,9397,9398],{"class":43,"line":76},[41,9399,1706],{"class":275},[15,9401,9403],{"id":9402},"_47案例","4.7案例",[224,9405,9406],{},[227,9407,9408],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[32,9410,9412],{"className":262,"code":9411,"language":264,"meta":37,"style":37},"#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",[24,9413,9414,9420,9430,9436,9443,9447,9453,9457,9462,9468,9474,9478,9482,9488,9492,9497,9502,9515,9519,9524,9550,9554,9566,9593,9597,9609,9619,9623,9628,9657,9661,9673,9682,9709,9720,9730,9734,9738,9742,9747,9771,9775,9799,9803,9822,9848,9852,9877,9900,9924,9929,9934,9939,9948,9953,9959,9980,9986,10000,10006,10033,10042,10048,10056,10061],{"__ignoreMap":37},[41,9415,9416,9418],{"class":43,"line":44},[41,9417,2089],{"class":271},[41,9419,2092],{"class":378},[41,9421,9422,9424,9426,9428],{"class":43,"line":51},[41,9423,2097],{"class":271},[41,9425,2100],{"class":271},[41,9427,2103],{"class":54},[41,9429,1434],{"class":275},[41,9431,9432,9434],{"class":43,"line":62},[41,9433,2089],{"class":271},[41,9435,7887],{"class":378},[41,9437,9438,9440],{"class":43,"line":70},[41,9439,2089],{"class":271},[41,9441,9442],{"class":378},"\u003Cctime>\n",[41,9444,9445],{"class":43,"line":76},[41,9446,8676],{"class":47},[41,9448,9449,9451],{"class":43,"line":83},[41,9450,7897],{"class":271},[41,9452,7900],{"class":54},[41,9454,9455],{"class":43,"line":89},[41,9456,1687],{"class":275},[41,9458,9459],{"class":43,"line":96},[41,9460,9461],{"class":275},"    string sName;\n",[41,9463,9464,9466],{"class":43,"line":104},[41,9465,2124],{"class":271},[41,9467,7935],{"class":275},[41,9469,9470,9472],{"class":43,"line":176},[41,9471,2124],{"class":271},[41,9473,7947],{"class":275},[41,9475,9476],{"class":43,"line":184},[41,9477,4133],{"class":275},[41,9479,9480],{"class":43,"line":1757},[41,9481,8713],{"class":47},[41,9483,9484,9486],{"class":43,"line":1763},[41,9485,7897],{"class":271},[41,9487,8720],{"class":54},[41,9489,9490],{"class":43,"line":1768},[41,9491,1687],{"class":275},[41,9493,9494],{"class":43,"line":1782},[41,9495,9496],{"class":275},"    string tName;\n",[41,9498,9499],{"class":43,"line":1787},[41,9500,9501],{"class":47},"    \u002F\u002F学生数组\n",[41,9503,9504,9506,9508,9511,9513],{"class":43,"line":1793},[41,9505,8033],{"class":271},[41,9507,8036],{"class":54},[41,9509,9510],{"class":275}," sArray[",[41,9512,592],{"class":58},[41,9514,4828],{"class":275},[41,9516,9517],{"class":43,"line":1814},[41,9518,4133],{"class":275},[41,9520,9521],{"class":43,"line":1819},[41,9522,9523],{"class":47},"\u002F\u002F给老师和学生赋值的函数\n",[41,9525,9526,9528,9531,9533,9535,9538,9541,9544,9546,9548],{"class":43,"line":1833},[41,9527,5502],{"class":271},[41,9529,9530],{"class":54}," allocateSpace",[41,9532,276],{"class":275},[41,9534,7897],{"class":271},[41,9536,9537],{"class":54}," Teacher",[41,9539,9540],{"class":5354}," tArray",[41,9542,9543],{"class":275},"[],",[41,9545,279],{"class":271},[41,9547,7469],{"class":5354},[41,9549,282],{"class":275},[41,9551,9552],{"class":43,"line":1838},[41,9553,1687],{"class":275},[41,9555,9556,9559,9561,9564],{"class":43,"line":1867},[41,9557,9558],{"class":275},"    string nameSeed",[41,9560,321],{"class":271},[41,9562,9563],{"class":378},"\"ABCDE\"",[41,9565,1434],{"class":275},[41,9567,9568,9570,9572,9574,9577,9579,9581,9584,9586,9589,9591],{"class":43,"line":1872},[41,9569,3339],{"class":271},[41,9571,1798],{"class":275},[41,9573,279],{"class":271},[41,9575,9576],{"class":275}," i ",[41,9578,321],{"class":271},[41,9580,4231],{"class":58},[41,9582,9583],{"class":275},"; i ",[41,9585,1183],{"class":271},[41,9587,9588],{"class":275}," len; i",[41,9590,2431],{"class":271},[41,9592,282],{"class":275},[41,9594,9595],{"class":43,"line":1889},[41,9596,2169],{"class":275},[41,9598,9599,9602,9604,9607],{"class":43,"line":1894},[41,9600,9601],{"class":275},"        tArray[i].tName ",[41,9603,321],{"class":271},[41,9605,9606],{"class":378}," \"Teacher_\"",[41,9608,1434],{"class":275},[41,9610,9611,9613,9616],{"class":43,"line":1899},[41,9612,9601],{"class":275},[41,9614,9615],{"class":271},"+=",[41,9617,9618],{"class":275},"nameSeed[i];\n",[41,9620,9621],{"class":43,"line":1904},[41,9622,80],{"emptyLinePlaceholder":79},[41,9624,9625],{"class":43,"line":1918},[41,9626,9627],{"class":47},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[41,9629,9630,9632,9634,9636,9639,9641,9643,9646,9648,9650,9653,9655],{"class":43,"line":1923},[41,9631,3541],{"class":271},[41,9633,1798],{"class":275},[41,9635,279],{"class":271},[41,9637,9638],{"class":275}," j ",[41,9640,321],{"class":271},[41,9642,4231],{"class":58},[41,9644,9645],{"class":275},"; j ",[41,9647,1183],{"class":271},[41,9649,2287],{"class":58},[41,9651,9652],{"class":275},"; j",[41,9654,2431],{"class":271},[41,9656,282],{"class":275},[41,9658,9659],{"class":43,"line":2715},[41,9660,2648],{"class":275},[41,9662,9663,9666,9668,9671],{"class":43,"line":2729},[41,9664,9665],{"class":275},"            tArray[i].sArray[j].sName ",[41,9667,321],{"class":271},[41,9669,9670],{"class":378}," \"Student_\"",[41,9672,1434],{"class":275},[41,9674,9675,9677,9679],{"class":43,"line":2737},[41,9676,9665],{"class":275},[41,9678,9615],{"class":271},[41,9680,9681],{"class":275}," nameSeed[j];\n",[41,9683,9684,9687,9690,9692,9694,9696,9698,9700,9702,9704,9706],{"class":43,"line":2742},[41,9685,9686],{"class":271},"            int",[41,9688,9689],{"class":275}," random",[41,9691,321],{"class":271},[41,9693,2562],{"class":54},[41,9695,2565],{"class":275},[41,9697,601],{"class":271},[41,9699,1180],{"class":58},[41,9701,754],{"class":271},[41,9703,674],{"class":58},[41,9705,330],{"class":275},[41,9707,9708],{"class":47},"\u002F\u002F40~99\n",[41,9710,9711,9714,9716,9718],{"class":43,"line":2748},[41,9712,9713],{"class":275},"            tArray[i].sArray[j].age ",[41,9715,321],{"class":271},[41,9717,9088],{"class":58},[41,9719,1434],{"class":275},[41,9721,9722,9725,9727],{"class":43,"line":2754},[41,9723,9724],{"class":275},"            tArray[i].sArray[j].score ",[41,9726,321],{"class":271},[41,9728,9729],{"class":275}," random;\n",[41,9731,9732],{"class":43,"line":2759},[41,9733,2667],{"class":275},[41,9735,9736],{"class":43,"line":8086},[41,9737,2326],{"class":275},[41,9739,9740],{"class":43,"line":8110},[41,9741,1706],{"class":275},[41,9743,9744],{"class":43,"line":8115},[41,9745,9746],{"class":47},"\u002F\u002F打印所有信息的函数\n",[41,9748,9749,9751,9754,9756,9758,9760,9762,9765,9767,9769],{"class":43,"line":8121},[41,9750,5502],{"class":271},[41,9752,9753],{"class":54}," printInfo",[41,9755,276],{"class":275},[41,9757,7897],{"class":271},[41,9759,9537],{"class":54},[41,9761,9540],{"class":5354},[41,9763,9764],{"class":275},"[], ",[41,9766,279],{"class":271},[41,9768,7469],{"class":5354},[41,9770,282],{"class":275},[41,9772,9773],{"class":43,"line":8148},[41,9774,1687],{"class":275},[41,9776,9777,9779,9781,9783,9785,9787,9789,9791,9793,9795,9797],{"class":43,"line":8153},[41,9778,3339],{"class":271},[41,9780,1798],{"class":275},[41,9782,279],{"class":271},[41,9784,9576],{"class":275},[41,9786,321],{"class":271},[41,9788,4231],{"class":58},[41,9790,9583],{"class":275},[41,9792,1183],{"class":271},[41,9794,9588],{"class":275},[41,9796,2431],{"class":271},[41,9798,282],{"class":275},[41,9800,9801],{"class":43,"line":8159},[41,9802,2169],{"class":275},[41,9804,9805,9808,9810,9813,9815,9818,9820],{"class":43,"line":8171},[41,9806,9807],{"class":275},"        cout ",[41,9809,1317],{"class":271},[41,9811,9812],{"class":378}," \"Teacher: \"",[41,9814,1585],{"class":271},[41,9816,9817],{"class":275}," tArray[i].tName ",[41,9819,1317],{"class":271},[41,9821,8978],{"class":275},[41,9823,9824,9826,9828,9830,9832,9834,9836,9838,9840,9842,9844,9846],{"class":43,"line":8183},[41,9825,3541],{"class":271},[41,9827,1798],{"class":275},[41,9829,279],{"class":271},[41,9831,9638],{"class":275},[41,9833,321],{"class":271},[41,9835,4231],{"class":58},[41,9837,9645],{"class":275},[41,9839,1183],{"class":271},[41,9841,2287],{"class":58},[41,9843,9652],{"class":275},[41,9845,2431],{"class":271},[41,9847,282],{"class":275},[41,9849,9850],{"class":43,"line":8195},[41,9851,2648],{"class":275},[41,9853,9855,9858,9860,9863,9865,9868,9870,9873,9875],{"class":43,"line":9854},47,[41,9856,9857],{"class":275},"            cout ",[41,9859,1317],{"class":271},[41,9861,9862],{"class":378}," \"",[41,9864,1374],{"class":58},[41,9866,9867],{"class":378},"Student: \"",[41,9869,1585],{"class":271},[41,9871,9872],{"class":275}," tArray[i].sArray[j].sName",[41,9874,1317],{"class":271},[41,9876,1339],{"class":275},[41,9878,9880,9882,9884,9886,9888,9891,9893,9896,9898],{"class":43,"line":9879},48,[41,9881,9857],{"class":275},[41,9883,1317],{"class":271},[41,9885,9862],{"class":378},[41,9887,1374],{"class":58},[41,9889,9890],{"class":378},"Age: \"",[41,9892,1585],{"class":271},[41,9894,9895],{"class":275}," tArray[i].sArray[j].age ",[41,9897,1317],{"class":271},[41,9899,8978],{"class":275},[41,9901,9903,9905,9907,9909,9911,9914,9916,9919,9921],{"class":43,"line":9902},49,[41,9904,9857],{"class":275},[41,9906,1317],{"class":271},[41,9908,9862],{"class":378},[41,9910,1374],{"class":58},[41,9912,9913],{"class":378},"Score: \"",[41,9915,1585],{"class":271},[41,9917,9918],{"class":275}," tArray[i].sArray[j].score ",[41,9920,1317],{"class":271},[41,9922,9923],{"class":275}," endl;   \n",[41,9925,9927],{"class":43,"line":9926},50,[41,9928,2667],{"class":275},[41,9930,9932],{"class":43,"line":9931},51,[41,9933,2326],{"class":275},[41,9935,9937],{"class":43,"line":9936},52,[41,9938,1706],{"class":275},[41,9940,9942,9944,9946],{"class":43,"line":9941},53,[41,9943,279],{"class":271},[41,9945,2112],{"class":54},[41,9947,2115],{"class":275},[41,9949,9951],{"class":43,"line":9950},54,[41,9952,1687],{"class":275},[41,9954,9956],{"class":43,"line":9955},55,[41,9957,9958],{"class":47},"    \u002F\u002F随机数种子\n",[41,9960,9962,9964,9966,9968,9970,9972,9974,9976,9978],{"class":43,"line":9961},56,[41,9963,2512],{"class":54},[41,9965,2515],{"class":275},[41,9967,2518],{"class":271},[41,9969,2521],{"class":271},[41,9971,702],{"class":275},[41,9973,2526],{"class":54},[41,9975,276],{"class":275},[41,9977,2531],{"class":58},[41,9979,2534],{"class":275},[41,9981,9983],{"class":43,"line":9982},57,[41,9984,9985],{"class":47},"    \u002F\u002F1.创建3名老师的数组\n",[41,9987,9989,9991,9993,9996,9998],{"class":43,"line":9988},58,[41,9990,8033],{"class":271},[41,9992,9537],{"class":54},[41,9994,9995],{"class":275}," tArray[",[41,9997,345],{"class":58},[41,9999,4828],{"class":275},[41,10001,10003],{"class":43,"line":10002},59,[41,10004,10005],{"class":47},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[41,10007,10009,10011,10014,10016,10019,10022,10024,10026,10029,10031],{"class":43,"line":10008},60,[41,10010,2124],{"class":271},[41,10012,10013],{"class":275}," len ",[41,10015,321],{"class":271},[41,10017,10018],{"class":271}," sizeof",[41,10020,10021],{"class":275},"(tArray) ",[41,10023,857],{"class":271},[41,10025,10018],{"class":271},[41,10027,10028],{"class":275},"(tArray[",[41,10030,465],{"class":58},[41,10032,3994],{"class":275},[41,10034,10036,10039],{"class":43,"line":10035},61,[41,10037,10038],{"class":54},"    allocateSpace",[41,10040,10041],{"class":275},"(tArray, len);\n",[41,10043,10045],{"class":43,"line":10044},62,[41,10046,10047],{"class":47},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[41,10049,10051,10054],{"class":43,"line":10050},63,[41,10052,10053],{"class":54},"    printInfo",[41,10055,10041],{"class":275},[41,10057,10059],{"class":43,"line":10058},64,[41,10060,80],{"emptyLinePlaceholder":79},[41,10062,10064],{"class":43,"line":10063},65,[41,10065,1706],{"class":275},[224,10067,10068],{"start":51},[227,10069,10070,10073],{},[423,10071,10072],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[20,10075,10076],{},"五名英雄信息如下：",[32,10078,10082],{"className":10079,"code":10080,"language":10081,"meta":37,"style":37},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[24,10083,10084,10102,10119,10136,10153],{"__ignoreMap":37},[41,10085,10086,10088,10091,10093,10095,10097,10100],{"class":43,"line":44},[41,10087,5055],{"class":275},[41,10089,10090],{"class":378},"\"刘备\"",[41,10092,651],{"class":275},[41,10094,1048],{"class":58},[41,10096,651],{"class":275},[41,10098,10099],{"class":378},"\"男\"",[41,10101,5068],{"class":275},[41,10103,10104,10106,10109,10111,10113,10115,10117],{"class":43,"line":51},[41,10105,5055],{"class":275},[41,10107,10108],{"class":378},"\"关羽\"",[41,10110,651],{"class":275},[41,10112,1023],{"class":58},[41,10114,651],{"class":275},[41,10116,10099],{"class":378},[41,10118,5068],{"class":275},[41,10120,10121,10123,10126,10128,10130,10132,10134],{"class":43,"line":62},[41,10122,5055],{"class":275},[41,10124,10125],{"class":378},"\"张飞\"",[41,10127,651],{"class":275},[41,10129,973],{"class":58},[41,10131,651],{"class":275},[41,10133,10099],{"class":378},[41,10135,5068],{"class":275},[41,10137,10138,10140,10143,10145,10147,10149,10151],{"class":43,"line":70},[41,10139,5055],{"class":275},[41,10141,10142],{"class":378},"\"赵云\"",[41,10144,651],{"class":275},[41,10146,998],{"class":58},[41,10148,651],{"class":275},[41,10150,10099],{"class":378},[41,10152,5068],{"class":275},[41,10154,10155,10157,10160,10162,10164,10166,10169],{"class":43,"line":76},[41,10156,5055],{"class":275},[41,10158,10159],{"class":378},"\"貂蝉\"",[41,10161,651],{"class":275},[41,10163,948],{"class":58},[41,10165,651],{"class":275},[41,10167,10168],{"class":378},"\"女\"",[41,10170,5068],{"class":275},[20,10172,10173],{},"代码：",[32,10175,10177],{"className":262,"code":10176,"language":264,"meta":37,"style":37},"#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",[24,10178,10179,10185,10195,10201,10208,10212,10216,10222,10227,10231,10236,10259,10263,10288,10292,10325,10330,10359,10364,10379,10405,10425,10430,10435,10439,10443,10448,10470,10474,10498,10502,10564,10568,10572,10580,10584,10589,10600,10604,10620,10636,10652,10668,10684,10688,10708,10730,10735,10748,10755,10760,10766,10771,10784,10790],{"__ignoreMap":37},[41,10180,10181,10183],{"class":43,"line":44},[41,10182,2089],{"class":271},[41,10184,2092],{"class":378},[41,10186,10187,10189,10191,10193],{"class":43,"line":51},[41,10188,2097],{"class":271},[41,10190,2100],{"class":271},[41,10192,2103],{"class":54},[41,10194,1434],{"class":275},[41,10196,10197,10199],{"class":43,"line":62},[41,10198,2089],{"class":271},[41,10200,7887],{"class":378},[41,10202,10203,10205],{"class":43,"line":70},[41,10204,7897],{"class":271},[41,10206,10207],{"class":54}," Sanguo\n",[41,10209,10210],{"class":43,"line":76},[41,10211,1687],{"class":275},[41,10213,10214],{"class":43,"line":83},[41,10215,7923],{"class":275},[41,10217,10218,10220],{"class":43,"line":89},[41,10219,2124],{"class":271},[41,10221,7935],{"class":275},[41,10223,10224],{"class":43,"line":96},[41,10225,10226],{"class":275},"    string gender;\n",[41,10228,10229],{"class":43,"line":104},[41,10230,4133],{"class":275},[41,10232,10233],{"class":43,"line":176},[41,10234,10235],{"class":47},"\u002F\u002F定义排序函数\n",[41,10237,10238,10240,10242,10244,10247,10249,10251,10253,10255,10257],{"class":43,"line":184},[41,10239,5502],{"class":271},[41,10241,7454],{"class":54},[41,10243,276],{"class":275},[41,10245,10246],{"class":54},"Sanguo",[41,10248,6656],{"class":271},[41,10250,968],{"class":5354},[41,10252,651],{"class":275},[41,10254,279],{"class":271},[41,10256,7469],{"class":5354},[41,10258,282],{"class":275},[41,10260,10261],{"class":43,"line":1757},[41,10262,1687],{"class":275},[41,10264,10265,10267,10269,10271,10273,10275,10277,10279,10281,10284,10286],{"class":43,"line":1763},[41,10266,3339],{"class":271},[41,10268,276],{"class":275},[41,10270,279],{"class":271},[41,10272,3170],{"class":275},[41,10274,321],{"class":271},[41,10276,465],{"class":58},[41,10278,3177],{"class":275},[41,10280,1183],{"class":271},[41,10282,10283],{"class":275},"len;i",[41,10285,2431],{"class":271},[41,10287,282],{"class":275},[41,10289,10290],{"class":43,"line":1768},[41,10291,2169],{"class":275},[41,10293,10294,10297,10299,10301,10303,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323],{"class":43,"line":1782},[41,10295,10296],{"class":271},"     for",[41,10298,1798],{"class":275},[41,10300,279],{"class":271},[41,10302,3548],{"class":275},[41,10304,321],{"class":271},[41,10306,465],{"class":58},[41,10308,3555],{"class":275},[41,10310,1183],{"class":271},[41,10312,7496],{"class":275},[41,10314,805],{"class":271},[41,10316,26],{"class":58},[41,10318,805],{"class":271},[41,10320,3688],{"class":275},[41,10322,2431],{"class":271},[41,10324,282],{"class":275},[41,10326,10327],{"class":43,"line":1787},[41,10328,10329],{"class":275},"     {\n",[41,10331,10332,10335,10338,10340,10343,10345,10348,10350,10352,10354,10356],{"class":43,"line":1793},[41,10333,10334],{"class":271},"         if",[41,10336,10337],{"class":275}," ((s",[41,10339,754],{"class":271},[41,10341,10342],{"class":275},"j)->age ",[41,10344,1233],{"class":271},[41,10346,10347],{"class":275}," (s",[41,10349,754],{"class":271},[41,10351,740],{"class":275},[41,10353,754],{"class":271},[41,10355,26],{"class":58},[41,10357,10358],{"class":275},")->age)\n",[41,10360,10361],{"class":43,"line":1814},[41,10362,10363],{"class":275},"         {\n",[41,10365,10366,10369,10371,10374,10376],{"class":43,"line":1819},[41,10367,10368],{"class":275},"             Sanguo temp",[41,10370,7291],{"class":271},[41,10372,10373],{"class":275},"(s",[41,10375,754],{"class":271},[41,10377,10378],{"class":275},"j);\n",[41,10380,10381,10384,10386,10388,10391,10393,10395,10397,10399,10401,10403],{"class":43,"line":1833},[41,10382,10383],{"class":271},"             *",[41,10385,10373],{"class":275},[41,10387,754],{"class":271},[41,10389,10390],{"class":275},"j)",[41,10392,7291],{"class":271},[41,10394,10373],{"class":275},[41,10396,754],{"class":271},[41,10398,740],{"class":275},[41,10400,754],{"class":271},[41,10402,26],{"class":58},[41,10404,2857],{"class":275},[41,10406,10407,10409,10411,10413,10415,10417,10419,10421,10423],{"class":43,"line":1838},[41,10408,10383],{"class":271},[41,10410,10373],{"class":275},[41,10412,754],{"class":271},[41,10414,740],{"class":275},[41,10416,754],{"class":271},[41,10418,26],{"class":58},[41,10420,702],{"class":275},[41,10422,321],{"class":271},[41,10424,4418],{"class":275},[41,10426,10427],{"class":43,"line":1867},[41,10428,10429],{"class":275},"         }\n",[41,10431,10432],{"class":43,"line":1872},[41,10433,10434],{"class":275},"     }\n",[41,10436,10437],{"class":43,"line":1889},[41,10438,2326],{"class":275},[41,10440,10441],{"class":43,"line":1894},[41,10442,1706],{"class":275},[41,10444,10445],{"class":43,"line":1899},[41,10446,10447],{"class":47},"\u002F\u002F定义打印函数\n",[41,10449,10450,10452,10454,10456,10458,10460,10462,10464,10466,10468],{"class":43,"line":1904},[41,10451,5502],{"class":271},[41,10453,9753],{"class":54},[41,10455,276],{"class":275},[41,10457,10246],{"class":54},[41,10459,6656],{"class":271},[41,10461,968],{"class":5354},[41,10463,651],{"class":275},[41,10465,279],{"class":271},[41,10467,7469],{"class":5354},[41,10469,282],{"class":275},[41,10471,10472],{"class":43,"line":1918},[41,10473,1687],{"class":275},[41,10475,10476,10478,10480,10482,10484,10486,10488,10490,10492,10494,10496],{"class":43,"line":1923},[41,10477,3339],{"class":271},[41,10479,1798],{"class":275},[41,10481,279],{"class":271},[41,10483,3170],{"class":275},[41,10485,321],{"class":271},[41,10487,465],{"class":58},[41,10489,3177],{"class":275},[41,10491,1183],{"class":271},[41,10493,10283],{"class":275},[41,10495,2431],{"class":271},[41,10497,282],{"class":275},[41,10499,10500],{"class":43,"line":2715},[41,10501,2169],{"class":275},[41,10503,10504,10506,10508,10510,10512,10515,10517,10519,10521,10524,10526,10528,10530,10533,10535,10537,10539,10542,10544,10546,10548,10551,10553,10555,10557,10560,10562],{"class":43,"line":2729},[41,10505,3589],{"class":275},[41,10507,1317],{"class":271},[41,10509,524],{"class":378},[41,10511,1374],{"class":58},[41,10513,10514],{"class":378},"姓名：\"",[41,10516,1317],{"class":271},[41,10518,10373],{"class":275},[41,10520,754],{"class":271},[41,10522,10523],{"class":275},"i)->name",[41,10525,1317],{"class":271},[41,10527,524],{"class":378},[41,10529,1374],{"class":58},[41,10531,10532],{"class":378},"年龄：\"",[41,10534,1317],{"class":271},[41,10536,10373],{"class":275},[41,10538,754],{"class":271},[41,10540,10541],{"class":275},"i)->age",[41,10543,1317],{"class":271},[41,10545,524],{"class":378},[41,10547,1374],{"class":58},[41,10549,10550],{"class":378},"性别：\"",[41,10552,1317],{"class":271},[41,10554,10373],{"class":275},[41,10556,754],{"class":271},[41,10558,10559],{"class":275},"i)->gender",[41,10561,1317],{"class":271},[41,10563,1339],{"class":275},[41,10565,10566],{"class":43,"line":2737},[41,10567,2326],{"class":275},[41,10569,10570],{"class":43,"line":2742},[41,10571,1706],{"class":275},[41,10573,10574,10576,10578],{"class":43,"line":2748},[41,10575,279],{"class":271},[41,10577,2112],{"class":54},[41,10579,2115],{"class":275},[41,10581,10582],{"class":43,"line":2754},[41,10583,1687],{"class":275},[41,10585,10586],{"class":43,"line":2759},[41,10587,10588],{"class":47},"    \u002F\u002F定义结构体变量\n",[41,10590,10591,10594,10596,10598],{"class":43,"line":8086},[41,10592,10593],{"class":275},"    Sanguo s1[",[41,10595,592],{"class":58},[41,10597,1213],{"class":275},[41,10599,5046],{"class":271},[41,10601,10602],{"class":43,"line":8110},[41,10603,2169],{"class":275},[41,10605,10606,10608,10610,10612,10614,10616,10618],{"class":43,"line":8115},[41,10607,5055],{"class":275},[41,10609,10090],{"class":378},[41,10611,651],{"class":275},[41,10613,1048],{"class":58},[41,10615,651],{"class":275},[41,10617,10099],{"class":378},[41,10619,5068],{"class":275},[41,10621,10622,10624,10626,10628,10630,10632,10634],{"class":43,"line":8121},[41,10623,5055],{"class":275},[41,10625,10108],{"class":378},[41,10627,651],{"class":275},[41,10629,1023],{"class":58},[41,10631,651],{"class":275},[41,10633,10099],{"class":378},[41,10635,5068],{"class":275},[41,10637,10638,10640,10642,10644,10646,10648,10650],{"class":43,"line":8148},[41,10639,5055],{"class":275},[41,10641,10125],{"class":378},[41,10643,651],{"class":275},[41,10645,973],{"class":58},[41,10647,651],{"class":275},[41,10649,10099],{"class":378},[41,10651,5068],{"class":275},[41,10653,10654,10656,10658,10660,10662,10664,10666],{"class":43,"line":8153},[41,10655,5055],{"class":275},[41,10657,10142],{"class":378},[41,10659,651],{"class":275},[41,10661,998],{"class":58},[41,10663,651],{"class":275},[41,10665,10099],{"class":378},[41,10667,5068],{"class":275},[41,10669,10670,10672,10674,10676,10678,10680,10682],{"class":43,"line":8159},[41,10671,5055],{"class":275},[41,10673,10159],{"class":378},[41,10675,651],{"class":275},[41,10677,948],{"class":58},[41,10679,651],{"class":275},[41,10681,10168],{"class":378},[41,10683,5068],{"class":275},[41,10685,10686],{"class":43,"line":8171},[41,10687,5089],{"class":275},[41,10689,10690,10692,10694,10696,10699,10701,10704,10706],{"class":43,"line":8183},[41,10691,2124],{"class":271},[41,10693,7469],{"class":275},[41,10695,4341],{"class":271},[41,10697,10698],{"class":275},"(s1)",[41,10700,4347],{"class":271},[41,10702,10703],{"class":275},"(s1[",[41,10705,465],{"class":58},[41,10707,3994],{"class":275},[41,10709,10710,10713,10715,10718,10720,10723,10726,10728],{"class":43,"line":8195},[41,10711,10712],{"class":275},"    Sanguo ",[41,10714,728],{"class":271},[41,10716,10717],{"class":275},"s ",[41,10719,321],{"class":271},[41,10721,10722],{"class":271}," &",[41,10724,10725],{"class":275},"s1[",[41,10727,465],{"class":58},[41,10729,4828],{"class":275},[41,10731,10732],{"class":43,"line":9854},[41,10733,10734],{"class":47},"    \u002F\u002F排序前：\n",[41,10736,10737,10739,10741,10744,10746],{"class":43,"line":9879},[41,10738,6667],{"class":275},[41,10740,1317],{"class":271},[41,10742,10743],{"class":378}," \"排序前：\"",[41,10745,1585],{"class":271},[41,10747,8978],{"class":275},[41,10749,10750,10752],{"class":43,"line":9902},[41,10751,10053],{"class":54},[41,10753,10754],{"class":275},"(s,len);\n",[41,10756,10757],{"class":43,"line":9926},[41,10758,10759],{"class":47},"    \u002F\u002F调用排序函数\n",[41,10761,10762,10764],{"class":43,"line":9931},[41,10763,7736],{"class":54},[41,10765,10754],{"class":275},[41,10767,10768],{"class":43,"line":9936},[41,10769,10770],{"class":47},"    \u002F\u002F排序后\n",[41,10772,10773,10775,10777,10780,10782],{"class":43,"line":9941},[41,10774,6667],{"class":275},[41,10776,1317],{"class":271},[41,10778,10779],{"class":378}," \"排序后：\"",[41,10781,1585],{"class":271},[41,10783,8978],{"class":275},[41,10785,10786,10788],{"class":43,"line":9950},[41,10787,10053],{"class":54},[41,10789,10754],{"class":275},[41,10791,10792],{"class":43,"line":9955},[41,10793,1706],{"class":275},[20,10795,10796,10797,10799],{},"注意：使用指针时直接用传首地址**&s",[41,10798,465],{},"**",[189,10801,10802],{},"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":37,"searchDepth":51,"depth":51,"links":10804},[10805,10806,10807,10808,10809,10810,10811],{"id":7841,"depth":51,"text":7842},{"id":8203,"depth":51,"text":8204},{"id":8472,"depth":51,"text":8473},{"id":8637,"depth":51,"text":8638},{"id":8853,"depth":51,"text":8854},{"id":9174,"depth":51,"text":9175},{"id":9402,"depth":51,"text":9403},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7830,"description":7838},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10818,"title":10819,"body":10820,"description":37,"extension":197,"meta":12163,"navigation":79,"path":12164,"seo":12165,"stem":12166,"__hash__":12167},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10821,"toc":12157},[10822,10825,10829,10835,10849,10854,10857,10861,10868,10874,10877,10884,10890,10895,10898,10901,10904,11468,11471,11485,11489,11494,11510,11650,11653,11659,11662,11667,11675,11783,11786,11791,11794,11799,11802,11808,11811,12154],[10,10823,10819],{"id":10824},"_5程序内存模型",[15,10826,10828],{"id":10827},"_51内存分区模型","5.1内存分区模型",[20,10830,10831,10832],{},"C++程序在执行时，将内存大方向划分为",[423,10833,10834],{},"4个区域",[1280,10836,10837,10840,10843,10846],{},[227,10838,10839],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[227,10841,10842],{},"全局区：存放全局变量和静态变量以及常量",[227,10844,10845],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[227,10847,10848],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[20,10850,10851],{},[423,10852,10853],{},"内存四区意义：",[20,10855,10856],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[241,10858,10860],{"id":10859},"_511程序运行前","5.1.1程序运行前",[20,10862,10863,10864,10867],{},"​\t在程序编译后，生成了exe可执行程序，",[423,10865,10866],{},"未执行该程序前","分为两个区域",[20,10869,10870,10871],{},"​\t",[423,10872,10873],{},"代码区：",[20,10875,10876],{},"​\t\t存放 CPU 执行的机器指令",[20,10878,10879,10880,10883],{},"​\t\t代码区是",[423,10881,10882],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[20,10885,10879,10886,10889],{},[423,10887,10888],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[20,10891,10870,10892],{},[423,10893,10894],{},"全局区：",[20,10896,10897],{},"​\t\t全局变量和静态变量存放在此.",[20,10899,10900],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[20,10902,10903],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[32,10905,10907],{"className":262,"code":10906,"language":264,"meta":37,"style":37},"\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",[24,10908,10909,10914,10927,10940,10944,10949,10964,10979,10983,10992,10996,11001,11014,11027,11031,11036,11062,11088,11092,11119,11145,11149,11154,11170,11185,11189,11215,11241,11245,11270,11295,11299,11325,11351,11355,11371,11386,11412,11438,11442,11452,11456,11464],{"__ignoreMap":37},[41,10910,10911],{"class":43,"line":44},[41,10912,10913],{"class":47},"\u002F\u002F全局变量\n",[41,10915,10916,10918,10921,10923,10925],{"class":43,"line":51},[41,10917,279],{"class":271},[41,10919,10920],{"class":275}," g_a ",[41,10922,321],{"class":271},[41,10924,2177],{"class":58},[41,10926,1434],{"class":275},[41,10928,10929,10931,10934,10936,10938],{"class":43,"line":62},[41,10930,279],{"class":271},[41,10932,10933],{"class":275}," g_b ",[41,10935,321],{"class":271},[41,10937,2177],{"class":58},[41,10939,1434],{"class":275},[41,10941,10942],{"class":43,"line":70},[41,10943,80],{"emptyLinePlaceholder":79},[41,10945,10946],{"class":43,"line":76},[41,10947,10948],{"class":47},"\u002F\u002F全局常量\n",[41,10950,10951,10953,10955,10958,10960,10962],{"class":43,"line":83},[41,10952,6930],{"class":271},[41,10954,2521],{"class":271},[41,10956,10957],{"class":275}," c_g_a ",[41,10959,321],{"class":271},[41,10961,2177],{"class":58},[41,10963,1434],{"class":275},[41,10965,10966,10968,10970,10973,10975,10977],{"class":43,"line":89},[41,10967,6930],{"class":271},[41,10969,2521],{"class":271},[41,10971,10972],{"class":275}," c_g_b ",[41,10974,321],{"class":271},[41,10976,2177],{"class":58},[41,10978,1434],{"class":275},[41,10980,10981],{"class":43,"line":96},[41,10982,80],{"emptyLinePlaceholder":79},[41,10984,10985,10987,10989],{"class":43,"line":104},[41,10986,279],{"class":271},[41,10988,2112],{"class":54},[41,10990,10991],{"class":275},"() {\n",[41,10993,10994],{"class":43,"line":176},[41,10995,80],{"emptyLinePlaceholder":79},[41,10997,10998],{"class":43,"line":184},[41,10999,11000],{"class":47},"    \u002F\u002F局部变量\n",[41,11002,11003,11005,11008,11010,11012],{"class":43,"line":1757},[41,11004,2124],{"class":271},[41,11006,11007],{"class":275}," a ",[41,11009,321],{"class":271},[41,11011,2177],{"class":58},[41,11013,1434],{"class":275},[41,11015,11016,11018,11021,11023,11025],{"class":43,"line":1763},[41,11017,2124],{"class":271},[41,11019,11020],{"class":275}," b ",[41,11022,321],{"class":271},[41,11024,2177],{"class":58},[41,11026,1434],{"class":275},[41,11028,11029],{"class":43,"line":1768},[41,11030,80],{"emptyLinePlaceholder":79},[41,11032,11033],{"class":43,"line":1782},[41,11034,11035],{"class":47},"    \u002F\u002F打印地址\n",[41,11037,11038,11040,11042,11045,11047,11049,11051,11053,11055,11058,11060],{"class":43,"line":1787},[41,11039,6667],{"class":275},[41,11041,1317],{"class":271},[41,11043,11044],{"class":378}," \"局部变量a地址为： \"",[41,11046,1585],{"class":271},[41,11048,1798],{"class":275},[41,11050,279],{"class":271},[41,11052,702],{"class":275},[41,11054,626],{"class":271},[41,11056,11057],{"class":275},"a ",[41,11059,1317],{"class":271},[41,11061,8978],{"class":275},[41,11063,11064,11066,11068,11071,11073,11075,11077,11079,11081,11084,11086],{"class":43,"line":1793},[41,11065,6667],{"class":275},[41,11067,1317],{"class":271},[41,11069,11070],{"class":378}," \"局部变量b地址为： \"",[41,11072,1585],{"class":271},[41,11074,1798],{"class":275},[41,11076,279],{"class":271},[41,11078,702],{"class":275},[41,11080,626],{"class":271},[41,11082,11083],{"class":275},"b ",[41,11085,1317],{"class":271},[41,11087,8978],{"class":275},[41,11089,11090],{"class":43,"line":1814},[41,11091,80],{"emptyLinePlaceholder":79},[41,11093,11094,11096,11098,11101,11103,11106,11108,11110,11112,11115,11117],{"class":43,"line":1819},[41,11095,6667],{"class":275},[41,11097,1317],{"class":271},[41,11099,11100],{"class":378}," \"全局变量g_a地址为： \"",[41,11102,1585],{"class":271},[41,11104,11105],{"class":275},"  (",[41,11107,279],{"class":271},[41,11109,702],{"class":275},[41,11111,626],{"class":271},[41,11113,11114],{"class":275},"g_a ",[41,11116,1317],{"class":271},[41,11118,8978],{"class":275},[41,11120,11121,11123,11125,11128,11130,11132,11134,11136,11138,11141,11143],{"class":43,"line":1833},[41,11122,6667],{"class":275},[41,11124,1317],{"class":271},[41,11126,11127],{"class":378}," \"全局变量g_b地址为： \"",[41,11129,1585],{"class":271},[41,11131,11105],{"class":275},[41,11133,279],{"class":271},[41,11135,702],{"class":275},[41,11137,626],{"class":271},[41,11139,11140],{"class":275},"g_b ",[41,11142,1317],{"class":271},[41,11144,8978],{"class":275},[41,11146,11147],{"class":43,"line":1838},[41,11148,80],{"emptyLinePlaceholder":79},[41,11150,11151],{"class":43,"line":1867},[41,11152,11153],{"class":47},"    \u002F\u002F静态变量\n",[41,11155,11156,11159,11161,11164,11166,11168],{"class":43,"line":1872},[41,11157,11158],{"class":271},"    static",[41,11160,2521],{"class":271},[41,11162,11163],{"class":275}," s_a ",[41,11165,321],{"class":271},[41,11167,2177],{"class":58},[41,11169,1434],{"class":275},[41,11171,11172,11174,11176,11179,11181,11183],{"class":43,"line":1889},[41,11173,11158],{"class":271},[41,11175,2521],{"class":271},[41,11177,11178],{"class":275}," s_b ",[41,11180,321],{"class":271},[41,11182,2177],{"class":58},[41,11184,1434],{"class":275},[41,11186,11187],{"class":43,"line":1894},[41,11188,80],{"emptyLinePlaceholder":79},[41,11190,11191,11193,11195,11198,11200,11202,11204,11206,11208,11211,11213],{"class":43,"line":1899},[41,11192,6667],{"class":275},[41,11194,1317],{"class":271},[41,11196,11197],{"class":378}," \"静态变量s_a地址为： \"",[41,11199,1585],{"class":271},[41,11201,1798],{"class":275},[41,11203,279],{"class":271},[41,11205,702],{"class":275},[41,11207,626],{"class":271},[41,11209,11210],{"class":275},"s_a ",[41,11212,1317],{"class":271},[41,11214,8978],{"class":275},[41,11216,11217,11219,11221,11224,11226,11228,11230,11232,11234,11237,11239],{"class":43,"line":1904},[41,11218,6667],{"class":275},[41,11220,1317],{"class":271},[41,11222,11223],{"class":378}," \"静态变量s_b地址为： \"",[41,11225,1585],{"class":271},[41,11227,1798],{"class":275},[41,11229,279],{"class":271},[41,11231,702],{"class":275},[41,11233,626],{"class":271},[41,11235,11236],{"class":275},"s_b ",[41,11238,1317],{"class":271},[41,11240,8978],{"class":275},[41,11242,11243],{"class":43,"line":1918},[41,11244,80],{"emptyLinePlaceholder":79},[41,11246,11247,11249,11251,11254,11256,11258,11260,11262,11264,11266,11268],{"class":43,"line":1923},[41,11248,6667],{"class":275},[41,11250,1317],{"class":271},[41,11252,11253],{"class":378}," \"字符串常量地址为： \"",[41,11255,1585],{"class":271},[41,11257,1798],{"class":275},[41,11259,279],{"class":271},[41,11261,702],{"class":275},[41,11263,626],{"class":271},[41,11265,1334],{"class":378},[41,11267,1585],{"class":271},[41,11269,8978],{"class":275},[41,11271,11272,11274,11276,11278,11280,11282,11284,11286,11288,11291,11293],{"class":43,"line":2715},[41,11273,6667],{"class":275},[41,11275,1317],{"class":271},[41,11277,11253],{"class":378},[41,11279,1585],{"class":271},[41,11281,1798],{"class":275},[41,11283,279],{"class":271},[41,11285,702],{"class":275},[41,11287,626],{"class":271},[41,11289,11290],{"class":378},"\"hello world1\"",[41,11292,1585],{"class":271},[41,11294,8978],{"class":275},[41,11296,11297],{"class":43,"line":2729},[41,11298,80],{"emptyLinePlaceholder":79},[41,11300,11301,11303,11305,11308,11310,11312,11314,11316,11318,11321,11323],{"class":43,"line":2737},[41,11302,6667],{"class":275},[41,11304,1317],{"class":271},[41,11306,11307],{"class":378}," \"全局常量c_g_a地址为： \"",[41,11309,1585],{"class":271},[41,11311,1798],{"class":275},[41,11313,279],{"class":271},[41,11315,702],{"class":275},[41,11317,626],{"class":271},[41,11319,11320],{"class":275},"c_g_a ",[41,11322,1317],{"class":271},[41,11324,8978],{"class":275},[41,11326,11327,11329,11331,11334,11336,11338,11340,11342,11344,11347,11349],{"class":43,"line":2742},[41,11328,6667],{"class":275},[41,11330,1317],{"class":271},[41,11332,11333],{"class":378}," \"全局常量c_g_b地址为： \"",[41,11335,1585],{"class":271},[41,11337,1798],{"class":275},[41,11339,279],{"class":271},[41,11341,702],{"class":275},[41,11343,626],{"class":271},[41,11345,11346],{"class":275},"c_g_b ",[41,11348,1317],{"class":271},[41,11350,8978],{"class":275},[41,11352,11353],{"class":43,"line":2748},[41,11354,80],{"emptyLinePlaceholder":79},[41,11356,11357,11360,11362,11365,11367,11369],{"class":43,"line":2754},[41,11358,11359],{"class":271},"    const",[41,11361,2521],{"class":271},[41,11363,11364],{"class":275}," c_l_a ",[41,11366,321],{"class":271},[41,11368,2177],{"class":58},[41,11370,1434],{"class":275},[41,11372,11373,11375,11377,11380,11382,11384],{"class":43,"line":2759},[41,11374,11359],{"class":271},[41,11376,2521],{"class":271},[41,11378,11379],{"class":275}," c_l_b ",[41,11381,321],{"class":271},[41,11383,2177],{"class":58},[41,11385,1434],{"class":275},[41,11387,11388,11390,11392,11395,11397,11399,11401,11403,11405,11408,11410],{"class":43,"line":8086},[41,11389,6667],{"class":275},[41,11391,1317],{"class":271},[41,11393,11394],{"class":378}," \"局部常量c_l_a地址为： \"",[41,11396,1585],{"class":271},[41,11398,1798],{"class":275},[41,11400,279],{"class":271},[41,11402,702],{"class":275},[41,11404,626],{"class":271},[41,11406,11407],{"class":275},"c_l_a ",[41,11409,1317],{"class":271},[41,11411,8978],{"class":275},[41,11413,11414,11416,11418,11421,11423,11425,11427,11429,11431,11434,11436],{"class":43,"line":8110},[41,11415,6667],{"class":275},[41,11417,1317],{"class":271},[41,11419,11420],{"class":378}," \"局部常量c_l_b地址为： \"",[41,11422,1585],{"class":271},[41,11424,1798],{"class":275},[41,11426,279],{"class":271},[41,11428,702],{"class":275},[41,11430,626],{"class":271},[41,11432,11433],{"class":275},"c_l_b ",[41,11435,1317],{"class":271},[41,11437,8978],{"class":275},[41,11439,11440],{"class":43,"line":8115},[41,11441,80],{"emptyLinePlaceholder":79},[41,11443,11444,11446,11448,11450],{"class":43,"line":8121},[41,11445,2442],{"class":54},[41,11447,276],{"class":275},[41,11449,2447],{"class":378},[41,11451,2857],{"class":275},[41,11453,11454],{"class":43,"line":8148},[41,11455,80],{"emptyLinePlaceholder":79},[41,11457,11458,11460,11462],{"class":43,"line":8153},[41,11459,4228],{"class":271},[41,11461,4231],{"class":58},[41,11463,1434],{"class":275},[41,11465,11466],{"class":43,"line":8159},[41,11467,1706],{"class":275},[20,11469,11470],{},"总结：",[1280,11472,11473,11476,11479,11482],{},[227,11474,11475],{},"c++中程序运行前分为全局区和代码区",[227,11477,11478],{},"代码区特点是共享和只读",[227,11480,11481],{},"全局区中存放全局变量、静态变量、常量",[227,11483,11484],{},"常量区中存放const修饰的全局常量和字符串常量",[241,11486,11488],{"id":11487},"_512程序运行后","5.1.2程序运行后",[224,11490,11491],{},[227,11492,11493],{},"栈区：",[1280,11495,11496,11503],{},[227,11497,11498,11499,11502],{},"由编译器自动分配释放, 存放",[423,11500,11501],{},"函数的参数值,局部变量","等",[227,11504,11505,11506,11509],{},"注意事项：",[423,11507,11508],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[32,11511,11513],{"className":262,"code":11512,"language":264,"meta":37,"style":37},"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",[24,11514,11515,11526,11530,11545,11557,11561,11565,11573,11578,11593,11611,11628,11638,11646],{"__ignoreMap":37},[41,11516,11517,11519,11521,11524],{"class":43,"line":44},[41,11518,279],{"class":271},[41,11520,6656],{"class":271},[41,11522,11523],{"class":54}," func",[41,11525,2115],{"class":275},[41,11527,11528],{"class":43,"line":51},[41,11529,1687],{"class":275},[41,11531,11532,11534,11536,11538,11540,11542],{"class":43,"line":62},[41,11533,2124],{"class":271},[41,11535,11007],{"class":275},[41,11537,321],{"class":271},[41,11539,2177],{"class":58},[41,11541,330],{"class":275},[41,11543,11544],{"class":47}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[41,11546,11547,11549,11551,11554],{"class":43,"line":70},[41,11548,4228],{"class":271},[41,11550,10722],{"class":271},[41,11552,11553],{"class":275},"a;",[41,11555,11556],{"class":47}," \u002F\u002F放回局部变量的地址\n",[41,11558,11559],{"class":43,"line":76},[41,11560,1706],{"class":275},[41,11562,11563],{"class":43,"line":83},[41,11564,80],{"emptyLinePlaceholder":79},[41,11566,11567,11569,11571],{"class":43,"line":89},[41,11568,279],{"class":271},[41,11570,2112],{"class":54},[41,11572,10991],{"class":275},[41,11574,11575],{"class":43,"line":96},[41,11576,11577],{"class":47},"    \u002F\u002F接受func的返回值\n",[41,11579,11580,11582,11584,11587,11589,11591],{"class":43,"line":104},[41,11581,2124],{"class":271},[41,11583,6656],{"class":271},[41,11585,11586],{"class":275},"p ",[41,11588,321],{"class":271},[41,11590,11523],{"class":54},[41,11592,5774],{"class":275},[41,11594,11595,11597,11599,11601,11603,11605,11608],{"class":43,"line":176},[41,11596,6667],{"class":275},[41,11598,1317],{"class":271},[41,11600,6656],{"class":271},[41,11602,11586],{"class":275},[41,11604,1317],{"class":271},[41,11606,11607],{"class":275}," endl;",[41,11609,11610],{"class":47}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[41,11612,11613,11615,11617,11619,11621,11623,11625],{"class":43,"line":184},[41,11614,6667],{"class":275},[41,11616,1317],{"class":271},[41,11618,6656],{"class":271},[41,11620,11586],{"class":275},[41,11622,1317],{"class":271},[41,11624,11607],{"class":275},[41,11626,11627],{"class":47}," \u002F\u002F第二次这个数据不再保留\n",[41,11629,11630,11632,11634,11636],{"class":43,"line":1757},[41,11631,2442],{"class":54},[41,11633,276],{"class":275},[41,11635,2447],{"class":378},[41,11637,2857],{"class":275},[41,11639,11640,11642,11644],{"class":43,"line":1763},[41,11641,4228],{"class":271},[41,11643,4231],{"class":58},[41,11645,1434],{"class":275},[41,11647,11648],{"class":43,"line":1768},[41,11649,1706],{"class":275},[20,11651,11652],{},"输出结果：",[20,11654,11655],{},[1603,11656],{"alt":11657,"src":11658},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[20,11660,11661],{},"总结：不要返回局部变量的地址",[224,11663,11664],{"start":51},[227,11665,11666],{},"堆区",[1280,11668,11669,11672],{},[227,11670,11671],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[227,11673,11674],{},"在c++中主要利用new在堆区开辟内存",[32,11676,11678],{"className":262,"code":11677,"language":264,"meta":37,"style":37},"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",[24,11679,11680,11695,11699,11704,11725,11732,11736,11744,11748,11753,11767,11779],{"__ignoreMap":37},[41,11681,11682,11684,11687,11690,11692],{"class":43,"line":44},[41,11683,279],{"class":271},[41,11685,11686],{"class":271},"  *",[41,11688,11689],{"class":54},"func",[41,11691,2565],{"class":275},[41,11693,11694],{"class":47},"  \u002F\u002F函数返回指针\n",[41,11696,11697],{"class":43,"line":51},[41,11698,1687],{"class":275},[41,11700,11701],{"class":43,"line":62},[41,11702,11703],{"class":47},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[41,11705,11706,11708,11710,11712,11714,11717,11719,11721,11723],{"class":43,"line":70},[41,11707,4285],{"class":271},[41,11709,6656],{"class":271},[41,11711,20],{"class":275},[41,11713,321],{"class":271},[41,11715,11716],{"class":271}," new",[41,11718,2521],{"class":271},[41,11720,276],{"class":275},[41,11722,719],{"class":58},[41,11724,2857],{"class":275},[41,11726,11727,11729],{"class":43,"line":76},[41,11728,4519],{"class":271},[41,11730,11731],{"class":275}," p;\n",[41,11733,11734],{"class":43,"line":83},[41,11735,1706],{"class":275},[41,11737,11738,11740,11742],{"class":43,"line":89},[41,11739,279],{"class":271},[41,11741,2112],{"class":54},[41,11743,2115],{"class":275},[41,11745,11746],{"class":43,"line":96},[41,11747,1687],{"class":275},[41,11749,11750],{"class":43,"line":104},[41,11751,11752],{"class":47},"    \u002F\u002F在堆区开辟数据\n",[41,11754,11755,11757,11759,11761,11763,11765],{"class":43,"line":176},[41,11756,2124],{"class":271},[41,11758,6656],{"class":271},[41,11760,20],{"class":275},[41,11762,321],{"class":271},[41,11764,11689],{"class":54},[41,11766,5774],{"class":275},[41,11768,11769,11771,11773,11775,11777],{"class":43,"line":184},[41,11770,1692],{"class":275},[41,11772,6557],{"class":271},[41,11774,20],{"class":275},[41,11776,1317],{"class":271},[41,11778,1339],{"class":275},[41,11780,11781],{"class":43,"line":1757},[41,11782,1706],{"class":275},[20,11784,11785],{},"图片展示：",[20,11787,11788],{},[1603,11789],{"alt":11657,"src":11790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[20,11792,11793],{},"堆区内存由程序员管生死！！！",[224,11795,11796],{"start":62},[227,11797,11798],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[20,11800,11801],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[20,11803,11804,11805],{},"​语法：",[24,11806,11807],{}," new 数据类型",[20,11809,11810],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[32,11812,11814],{"className":262,"code":11813,"language":264,"meta":37,"style":37},"\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",[24,11815,11816,11821,11831,11835,11840,11845,11867,11871,11879,11883,11897,11909,11921,11933,11938,11943,11954,11958,11963,11971,11975,11980,12002,12028,12032,12050,12054,12080,12084,12096,12100,12105,12110,12118,12122,12126,12134,12138,12144,12150],{"__ignoreMap":37},[41,11817,11818],{"class":43,"line":44},[41,11819,11820],{"class":47},"\u002F\u002F1.new的基本语法\n",[41,11822,11823,11825,11827,11829],{"class":43,"line":51},[41,11824,279],{"class":271},[41,11826,6656],{"class":271},[41,11828,11689],{"class":54},[41,11830,2115],{"class":275},[41,11832,11833],{"class":43,"line":62},[41,11834,1687],{"class":275},[41,11836,11837],{"class":43,"line":70},[41,11838,11839],{"class":47},"    \u002F\u002F在堆区创建整型数据\n",[41,11841,11842],{"class":43,"line":76},[41,11843,11844],{"class":47},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[41,11846,11847,11849,11851,11853,11856,11858,11860,11862,11864],{"class":43,"line":83},[41,11848,2124],{"class":271},[41,11850,6656],{"class":271},[41,11852,20],{"class":275},[41,11854,11855],{"class":271},"=new",[41,11857,2521],{"class":271},[41,11859,276],{"class":275},[41,11861,719],{"class":58},[41,11863,6104],{"class":275},[41,11865,11866],{"class":47},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[41,11868,11869],{"class":43,"line":89},[41,11870,1706],{"class":275},[41,11872,11873,11875,11877],{"class":43,"line":96},[41,11874,5502],{"class":271},[41,11876,5726],{"class":54},[41,11878,2115],{"class":275},[41,11880,11881],{"class":43,"line":104},[41,11882,1687],{"class":275},[41,11884,11885,11887,11889,11891,11893,11895],{"class":43,"line":176},[41,11886,2124],{"class":271},[41,11888,6656],{"class":271},[41,11890,20],{"class":275},[41,11892,321],{"class":271},[41,11894,11689],{"class":54},[41,11896,5774],{"class":275},[41,11898,11899,11901,11903,11905,11907],{"class":43,"line":184},[41,11900,1692],{"class":275},[41,11902,6557],{"class":271},[41,11904,20],{"class":275},[41,11906,1317],{"class":271},[41,11908,1339],{"class":275},[41,11910,11911,11913,11915,11917,11919],{"class":43,"line":1757},[41,11912,1692],{"class":275},[41,11914,6557],{"class":271},[41,11916,20],{"class":275},[41,11918,1317],{"class":271},[41,11920,1339],{"class":275},[41,11922,11923,11925,11927,11929,11931],{"class":43,"line":1763},[41,11924,1692],{"class":275},[41,11926,6557],{"class":271},[41,11928,20],{"class":275},[41,11930,1317],{"class":271},[41,11932,1339],{"class":275},[41,11934,11935],{"class":43,"line":1768},[41,11936,11937],{"class":47},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[41,11939,11940],{"class":43,"line":1782},[41,11941,11942],{"class":47},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[41,11944,11945,11948,11951],{"class":43,"line":1787},[41,11946,11947],{"class":271},"    delete",[41,11949,11950],{"class":275}," p;",[41,11952,11953],{"class":47},"\u002F\u002F删除这块地址\n",[41,11955,11956],{"class":43,"line":1793},[41,11957,1706],{"class":275},[41,11959,11960],{"class":43,"line":1814},[41,11961,11962],{"class":47},"\u002F\u002F2.在堆区利用new开辟数组\n",[41,11964,11965,11967,11969],{"class":43,"line":1819},[41,11966,5502],{"class":271},[41,11968,5795],{"class":54},[41,11970,2115],{"class":275},[41,11972,11973],{"class":43,"line":1833},[41,11974,1687],{"class":275},[41,11976,11977],{"class":43,"line":1838},[41,11978,11979],{"class":47},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[41,11981,11982,11984,11986,11988,11990,11992,11994,11996,11999],{"class":43,"line":1867},[41,11983,2124],{"class":271},[41,11985,6656],{"class":271},[41,11987,4018],{"class":275},[41,11989,11855],{"class":271},[41,11991,2521],{"class":271},[41,11993,1163],{"class":275},[41,11995,719],{"class":58},[41,11997,11998],{"class":275},"];",[41,12000,12001],{"class":47},"\u002F\u002F10代表数组有10个元素\n",[41,12003,12004,12006,12008,12010,12012,12014,12016,12018,12020,12022,12024,12026],{"class":43,"line":1872},[41,12005,3339],{"class":271},[41,12007,1798],{"class":275},[41,12009,279],{"class":271},[41,12011,3170],{"class":275},[41,12013,321],{"class":271},[41,12015,465],{"class":58},[41,12017,3177],{"class":275},[41,12019,1183],{"class":271},[41,12021,719],{"class":58},[41,12023,3177],{"class":275},[41,12025,2431],{"class":271},[41,12027,282],{"class":275},[41,12029,12030],{"class":43,"line":1889},[41,12031,2169],{"class":275},[41,12033,12034,12037,12039,12041,12043,12045,12047],{"class":43,"line":1894},[41,12035,12036],{"class":275},"        arr[i]",[41,12038,321],{"class":271},[41,12040,714],{"class":275},[41,12042,754],{"class":271},[41,12044,584],{"class":58},[41,12046,330],{"class":275},[41,12048,12049],{"class":47},"\u002F\u002F给10个元素赋值100～109\n",[41,12051,12052],{"class":43,"line":1899},[41,12053,2326],{"class":275},[41,12055,12056,12058,12060,12062,12064,12066,12068,12070,12072,12074,12076,12078],{"class":43,"line":1904},[41,12057,3339],{"class":271},[41,12059,1798],{"class":275},[41,12061,279],{"class":271},[41,12063,3170],{"class":275},[41,12065,321],{"class":271},[41,12067,465],{"class":58},[41,12069,3177],{"class":275},[41,12071,1183],{"class":271},[41,12073,719],{"class":58},[41,12075,3177],{"class":275},[41,12077,2431],{"class":271},[41,12079,282],{"class":275},[41,12081,12082],{"class":43,"line":1918},[41,12083,2169],{"class":275},[41,12085,12086,12088,12090,12092,12094],{"class":43,"line":1923},[41,12087,3589],{"class":275},[41,12089,1317],{"class":271},[41,12091,4492],{"class":275},[41,12093,1317],{"class":271},[41,12095,1339],{"class":275},[41,12097,12098],{"class":43,"line":2715},[41,12099,2326],{"class":275},[41,12101,12102],{"class":43,"line":2729},[41,12103,12104],{"class":47},"    \u002F\u002F释放堆区数组\n",[41,12106,12107],{"class":43,"line":2737},[41,12108,12109],{"class":47},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[41,12111,12112,12115],{"class":43,"line":2742},[41,12113,12114],{"class":271},"    delete[]",[41,12116,12117],{"class":275}," arr;\n",[41,12119,12120],{"class":43,"line":2748},[41,12121,1706],{"class":275},[41,12123,12124],{"class":43,"line":2754},[41,12125,80],{"emptyLinePlaceholder":79},[41,12127,12128,12130,12132],{"class":43,"line":2759},[41,12129,279],{"class":271},[41,12131,2112],{"class":54},[41,12133,2115],{"class":275},[41,12135,12136],{"class":43,"line":8086},[41,12137,1687],{"class":275},[41,12139,12140,12142],{"class":43,"line":8110},[41,12141,5771],{"class":54},[41,12143,5774],{"class":275},[41,12145,12146,12148],{"class":43,"line":8115},[41,12147,5840],{"class":54},[41,12149,5774],{"class":275},[41,12151,12152],{"class":43,"line":8121},[41,12153,1706],{"class":275},[189,12155,12156],{},"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":37,"searchDepth":51,"depth":51,"links":12158},[12159],{"id":10827,"depth":51,"text":10828,"children":12160},[12161,12162],{"id":10859,"depth":62,"text":10860},{"id":11487,"depth":62,"text":11488},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10819,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12169,"title":12170,"body":12171,"description":37,"extension":197,"meta":13652,"navigation":79,"path":13653,"seo":13654,"stem":13655,"__hash__":13656},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12172,"toc":13644},[12173,12176,12180,12183,12186,12355,12359,12364,12381,12386,12538,12542,12545,12548,12942,12946,12949,12954,12957,13269,13273,13279,13439,13441,13449,13453,13456,13463,13641],[10,12174,12170],{"id":12175},"_6引用",[15,12177,12179],{"id":12178},"_61引用基本用法","6.1引用基本用法",[20,12181,12182],{},"引用的本质：给变量起别名",[20,12184,12185],{},"语法：数据类型 &别名=原名",[32,12187,12189],{"className":262,"code":12188,"language":264,"meta":37,"style":37},"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",[24,12190,12191,12199,12203,12215,12227,12231,12250,12269,12273,12284,12288,12307,12325,12329,12339,12343,12351],{"__ignoreMap":37},[41,12192,12193,12195,12197],{"class":43,"line":44},[41,12194,279],{"class":271},[41,12196,2112],{"class":54},[41,12198,10991],{"class":275},[41,12200,12201],{"class":43,"line":51},[41,12202,80],{"emptyLinePlaceholder":79},[41,12204,12205,12207,12209,12211,12213],{"class":43,"line":62},[41,12206,2124],{"class":271},[41,12208,11007],{"class":275},[41,12210,321],{"class":271},[41,12212,2177],{"class":58},[41,12214,1434],{"class":275},[41,12216,12217,12219,12221,12223,12225],{"class":43,"line":70},[41,12218,2124],{"class":271},[41,12220,10722],{"class":271},[41,12222,11083],{"class":275},[41,12224,321],{"class":271},[41,12226,1573],{"class":275},[41,12228,12229],{"class":43,"line":76},[41,12230,80],{"emptyLinePlaceholder":79},[41,12232,12233,12235,12237,12240,12242,12244,12246,12248],{"class":43,"line":83},[41,12234,6667],{"class":275},[41,12236,1317],{"class":271},[41,12238,12239],{"class":378}," \"a = \"",[41,12241,1585],{"class":271},[41,12243,11007],{"class":275},[41,12245,1317],{"class":271},[41,12247,11607],{"class":275},[41,12249,7406],{"class":47},[41,12251,12252,12254,12256,12259,12261,12263,12265,12267],{"class":43,"line":89},[41,12253,6667],{"class":275},[41,12255,1317],{"class":271},[41,12257,12258],{"class":378}," \"b = \"",[41,12260,1585],{"class":271},[41,12262,11020],{"class":275},[41,12264,1317],{"class":271},[41,12266,11607],{"class":275},[41,12268,7406],{"class":47},[41,12270,12271],{"class":43,"line":96},[41,12272,80],{"emptyLinePlaceholder":79},[41,12274,12275,12278,12280,12282],{"class":43,"line":104},[41,12276,12277],{"class":275},"    b ",[41,12279,321],{"class":271},[41,12281,5892],{"class":58},[41,12283,1434],{"class":275},[41,12285,12286],{"class":43,"line":176},[41,12287,80],{"emptyLinePlaceholder":79},[41,12289,12290,12292,12294,12296,12298,12300,12302,12304],{"class":43,"line":184},[41,12291,6667],{"class":275},[41,12293,1317],{"class":271},[41,12295,12239],{"class":378},[41,12297,1585],{"class":271},[41,12299,11007],{"class":275},[41,12301,1317],{"class":271},[41,12303,11607],{"class":275},[41,12305,12306],{"class":47},"\u002F\u002F100\n",[41,12308,12309,12311,12313,12315,12317,12319,12321,12323],{"class":43,"line":1757},[41,12310,6667],{"class":275},[41,12312,1317],{"class":271},[41,12314,12258],{"class":378},[41,12316,1585],{"class":271},[41,12318,11020],{"class":275},[41,12320,1317],{"class":271},[41,12322,11607],{"class":275},[41,12324,12306],{"class":47},[41,12326,12327],{"class":43,"line":1763},[41,12328,80],{"emptyLinePlaceholder":79},[41,12330,12331,12333,12335,12337],{"class":43,"line":1768},[41,12332,2442],{"class":54},[41,12334,276],{"class":275},[41,12336,2447],{"class":378},[41,12338,2857],{"class":275},[41,12340,12341],{"class":43,"line":1782},[41,12342,80],{"emptyLinePlaceholder":79},[41,12344,12345,12347,12349],{"class":43,"line":1787},[41,12346,4228],{"class":271},[41,12348,4231],{"class":58},[41,12350,1434],{"class":275},[41,12352,12353],{"class":43,"line":1793},[41,12354,1706],{"class":275},[15,12356,12358],{"id":12357},"_62引用的注意事项","6.2引用的注意事项",[224,12360,12361],{},[227,12362,12363],{},"引用必须要初始化",[32,12365,12367],{"className":262,"code":12366,"language":264,"meta":37,"style":37},"int &b;\u002F\u002F非常错误！\n",[24,12368,12369],{"__ignoreMap":37},[41,12370,12371,12373,12375,12378],{"class":43,"line":44},[41,12372,279],{"class":271},[41,12374,10722],{"class":271},[41,12376,12377],{"class":275},"b;",[41,12379,12380],{"class":47},"\u002F\u002F非常错误！\n",[224,12382,12383],{"start":51},[227,12384,12385],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[32,12387,12389],{"className":262,"code":12388,"language":264,"meta":37,"style":37},"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",[24,12390,12391,12399,12411,12423,12431,12447,12460,12478,12496,12516,12526,12534],{"__ignoreMap":37},[41,12392,12393,12395,12397],{"class":43,"line":44},[41,12394,279],{"class":271},[41,12396,2112],{"class":54},[41,12398,10991],{"class":275},[41,12400,12401,12403,12405,12407,12409],{"class":43,"line":51},[41,12402,2124],{"class":271},[41,12404,11007],{"class":275},[41,12406,321],{"class":271},[41,12408,2177],{"class":58},[41,12410,1434],{"class":275},[41,12412,12413,12415,12417,12419,12421],{"class":43,"line":62},[41,12414,2124],{"class":271},[41,12416,11020],{"class":275},[41,12418,321],{"class":271},[41,12420,9088],{"class":58},[41,12422,1434],{"class":275},[41,12424,12425,12428],{"class":43,"line":70},[41,12426,12427],{"class":47},"    \u002F\u002Fint &c;",[41,12429,12430],{"class":47}," \u002F\u002F错误，引用必须初始化\n",[41,12432,12433,12435,12437,12439,12441,12444],{"class":43,"line":76},[41,12434,2124],{"class":271},[41,12436,10722],{"class":271},[41,12438,3084],{"class":275},[41,12440,321],{"class":271},[41,12442,12443],{"class":275}," a;",[41,12445,12446],{"class":47}," \u002F\u002F一旦初始化后，就不可以更改\n",[41,12448,12449,12452,12454,12457],{"class":43,"line":83},[41,12450,12451],{"class":275},"    c ",[41,12453,321],{"class":271},[41,12455,12456],{"class":275}," b;",[41,12458,12459],{"class":47}," \u002F\u002F这是赋值操作，不是更改引用\n",[41,12461,12462,12464,12466,12468,12470,12472,12474,12476],{"class":43,"line":89},[41,12463,6667],{"class":275},[41,12465,1317],{"class":271},[41,12467,12239],{"class":378},[41,12469,1585],{"class":271},[41,12471,11007],{"class":275},[41,12473,1317],{"class":271},[41,12475,11607],{"class":275},[41,12477,7391],{"class":47},[41,12479,12480,12482,12484,12486,12488,12490,12492,12494],{"class":43,"line":96},[41,12481,6667],{"class":275},[41,12483,1317],{"class":271},[41,12485,12258],{"class":378},[41,12487,1585],{"class":271},[41,12489,11020],{"class":275},[41,12491,1317],{"class":271},[41,12493,11607],{"class":275},[41,12495,7391],{"class":47},[41,12497,12498,12500,12502,12505,12507,12510,12512,12514],{"class":43,"line":104},[41,12499,6667],{"class":275},[41,12501,1317],{"class":271},[41,12503,12504],{"class":378}," \"c = \"",[41,12506,1585],{"class":271},[41,12508,12509],{"class":275}," c ",[41,12511,1317],{"class":271},[41,12513,11607],{"class":275},[41,12515,7391],{"class":47},[41,12517,12518,12520,12522,12524],{"class":43,"line":176},[41,12519,2442],{"class":54},[41,12521,276],{"class":275},[41,12523,2447],{"class":378},[41,12525,2857],{"class":275},[41,12527,12528,12530,12532],{"class":43,"line":184},[41,12529,4228],{"class":271},[41,12531,4231],{"class":58},[41,12533,1434],{"class":275},[41,12535,12536],{"class":43,"line":1757},[41,12537,1706],{"class":275},[15,12539,12541],{"id":12540},"_63引用做函数参数","6.3引用做函数参数",[20,12543,12544],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[20,12546,12547],{},"优点：可以简化指针修改实参",[32,12549,12551],{"className":262,"code":12550,"language":264,"meta":37,"style":37},"\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",[24,12552,12553,12558,12581,12592,12602,12611,12615,12619,12624,12646,12658,12670,12680,12684,12688,12693,12715,12725,12733,12741,12745,12749,12757,12761,12773,12785,12789,12800,12826,12830,12850,12874,12878,12888,12912,12916,12926,12930,12938],{"__ignoreMap":37},[41,12554,12555],{"class":43,"line":44},[41,12556,12557],{"class":47},"\u002F\u002F1. 值传递\n",[41,12559,12560,12562,12565,12567,12569,12571,12574,12576,12578],{"class":43,"line":51},[41,12561,5502],{"class":271},[41,12563,12564],{"class":54}," mySwap01",[41,12566,276],{"class":275},[41,12568,279],{"class":271},[41,12570,1539],{"class":5354},[41,12572,12573],{"class":275},", ",[41,12575,279],{"class":271},[41,12577,2971],{"class":5354},[41,12579,12580],{"class":275},") {\n",[41,12582,12583,12585,12588,12590],{"class":43,"line":62},[41,12584,2124],{"class":271},[41,12586,12587],{"class":275}," temp ",[41,12589,321],{"class":271},[41,12591,1573],{"class":275},[41,12593,12594,12597,12599],{"class":43,"line":70},[41,12595,12596],{"class":275},"    a ",[41,12598,321],{"class":271},[41,12600,12601],{"class":275}," b;\n",[41,12603,12604,12606,12608],{"class":43,"line":76},[41,12605,12277],{"class":275},[41,12607,321],{"class":271},[41,12609,12610],{"class":275}," temp;\n",[41,12612,12613],{"class":43,"line":83},[41,12614,1706],{"class":275},[41,12616,12617],{"class":43,"line":89},[41,12618,80],{"emptyLinePlaceholder":79},[41,12620,12621],{"class":43,"line":96},[41,12622,12623],{"class":47},"\u002F\u002F2. 地址传递\n",[41,12625,12626,12628,12631,12633,12636,12638,12640,12642,12644],{"class":43,"line":104},[41,12627,5502],{"class":271},[41,12629,12630],{"class":54}," mySwap02",[41,12632,276],{"class":275},[41,12634,12635],{"class":271},"int*",[41,12637,1539],{"class":5354},[41,12639,12573],{"class":275},[41,12641,12635],{"class":271},[41,12643,2971],{"class":5354},[41,12645,12580],{"class":275},[41,12647,12648,12650,12652,12654,12656],{"class":43,"line":176},[41,12649,2124],{"class":271},[41,12651,12587],{"class":275},[41,12653,321],{"class":271},[41,12655,6656],{"class":271},[41,12657,6335],{"class":275},[41,12659,12660,12662,12664,12666,12668],{"class":43,"line":184},[41,12661,6541],{"class":271},[41,12663,11057],{"class":275},[41,12665,321],{"class":271},[41,12667,6656],{"class":271},[41,12669,6207],{"class":275},[41,12671,12672,12674,12676,12678],{"class":43,"line":1757},[41,12673,6541],{"class":271},[41,12675,11083],{"class":275},[41,12677,321],{"class":271},[41,12679,12610],{"class":275},[41,12681,12682],{"class":43,"line":1763},[41,12683,1706],{"class":275},[41,12685,12686],{"class":43,"line":1768},[41,12687,80],{"emptyLinePlaceholder":79},[41,12689,12690],{"class":43,"line":1782},[41,12691,12692],{"class":47},"\u002F\u002F3. 引用传递\n",[41,12694,12695,12697,12700,12702,12705,12707,12709,12711,12713],{"class":43,"line":1787},[41,12696,5502],{"class":271},[41,12698,12699],{"class":54}," mySwap03",[41,12701,276],{"class":275},[41,12703,12704],{"class":271},"int&",[41,12706,1539],{"class":5354},[41,12708,12573],{"class":275},[41,12710,12704],{"class":271},[41,12712,2971],{"class":5354},[41,12714,12580],{"class":275},[41,12716,12717,12719,12721,12723],{"class":43,"line":1793},[41,12718,2124],{"class":271},[41,12720,12587],{"class":275},[41,12722,321],{"class":271},[41,12724,1573],{"class":275},[41,12726,12727,12729,12731],{"class":43,"line":1814},[41,12728,12596],{"class":275},[41,12730,321],{"class":271},[41,12732,12601],{"class":275},[41,12734,12735,12737,12739],{"class":43,"line":1819},[41,12736,12277],{"class":275},[41,12738,321],{"class":271},[41,12740,12610],{"class":275},[41,12742,12743],{"class":43,"line":1833},[41,12744,1706],{"class":275},[41,12746,12747],{"class":43,"line":1838},[41,12748,80],{"emptyLinePlaceholder":79},[41,12750,12751,12753,12755],{"class":43,"line":1867},[41,12752,279],{"class":271},[41,12754,2112],{"class":54},[41,12756,10991],{"class":275},[41,12758,12759],{"class":43,"line":1872},[41,12760,80],{"emptyLinePlaceholder":79},[41,12762,12763,12765,12767,12769,12771],{"class":43,"line":1889},[41,12764,2124],{"class":271},[41,12766,11007],{"class":275},[41,12768,321],{"class":271},[41,12770,2177],{"class":58},[41,12772,1434],{"class":275},[41,12774,12775,12777,12779,12781,12783],{"class":43,"line":1894},[41,12776,2124],{"class":271},[41,12778,11020],{"class":275},[41,12780,321],{"class":271},[41,12782,9088],{"class":58},[41,12784,1434],{"class":275},[41,12786,12787],{"class":43,"line":1899},[41,12788,80],{"emptyLinePlaceholder":79},[41,12790,12791,12794,12797],{"class":43,"line":1904},[41,12792,12793],{"class":54},"    mySwap01",[41,12795,12796],{"class":275},"(a, b);",[41,12798,12799],{"class":47},"\u002F\u002F值传递，形参不会修饰实参\n",[41,12801,12802,12804,12806,12809,12811,12813,12815,12818,12820,12822,12824],{"class":43,"line":1918},[41,12803,6667],{"class":275},[41,12805,1317],{"class":271},[41,12807,12808],{"class":378}," \"a:\"",[41,12810,1585],{"class":271},[41,12812,11007],{"class":275},[41,12814,1317],{"class":271},[41,12816,12817],{"class":378}," \" b:\"",[41,12819,1585],{"class":271},[41,12821,11020],{"class":275},[41,12823,1317],{"class":271},[41,12825,8978],{"class":275},[41,12827,12828],{"class":43,"line":1923},[41,12829,80],{"emptyLinePlaceholder":79},[41,12831,12832,12835,12837,12839,12842,12844,12847],{"class":43,"line":2715},[41,12833,12834],{"class":54},"    mySwap02",[41,12836,276],{"class":275},[41,12838,626],{"class":271},[41,12840,12841],{"class":275},"a, ",[41,12843,626],{"class":271},[41,12845,12846],{"class":275},"b);",[41,12848,12849],{"class":47},"\u002F\u002F地址传递，形参会修饰实参\n",[41,12851,12852,12854,12856,12858,12860,12862,12864,12866,12868,12870,12872],{"class":43,"line":2729},[41,12853,6667],{"class":275},[41,12855,1317],{"class":271},[41,12857,12808],{"class":378},[41,12859,1585],{"class":271},[41,12861,11007],{"class":275},[41,12863,1317],{"class":271},[41,12865,12817],{"class":378},[41,12867,1585],{"class":271},[41,12869,11020],{"class":275},[41,12871,1317],{"class":271},[41,12873,8978],{"class":275},[41,12875,12876],{"class":43,"line":2737},[41,12877,80],{"emptyLinePlaceholder":79},[41,12879,12880,12883,12885],{"class":43,"line":2742},[41,12881,12882],{"class":54},"    mySwap03",[41,12884,12796],{"class":275},[41,12886,12887],{"class":47},"\u002F\u002F引用传递，形参会修饰实参\n",[41,12889,12890,12892,12894,12896,12898,12900,12902,12904,12906,12908,12910],{"class":43,"line":2748},[41,12891,6667],{"class":275},[41,12893,1317],{"class":271},[41,12895,12808],{"class":378},[41,12897,1585],{"class":271},[41,12899,11007],{"class":275},[41,12901,1317],{"class":271},[41,12903,12817],{"class":378},[41,12905,1585],{"class":271},[41,12907,11020],{"class":275},[41,12909,1317],{"class":271},[41,12911,8978],{"class":275},[41,12913,12914],{"class":43,"line":2754},[41,12915,80],{"emptyLinePlaceholder":79},[41,12917,12918,12920,12922,12924],{"class":43,"line":2759},[41,12919,2442],{"class":54},[41,12921,276],{"class":275},[41,12923,2447],{"class":378},[41,12925,2857],{"class":275},[41,12927,12928],{"class":43,"line":8086},[41,12929,80],{"emptyLinePlaceholder":79},[41,12931,12932,12934,12936],{"class":43,"line":8110},[41,12933,4228],{"class":271},[41,12935,4231],{"class":58},[41,12937,1434],{"class":275},[41,12939,12940],{"class":43,"line":8115},[41,12941,1706],{"class":275},[15,12943,12945],{"id":12944},"_64引用做函数的返回值","6.4引用做函数的返回值",[20,12947,12948],{},"作用：引用是可以作为函数的返回值存在的",[20,12950,9163,12951],{},[423,12952,12953],{},"不要返回局部变量引用",[20,12955,12956],{},"用法：函数调用作为左值",[32,12958,12960],{"className":10079,"code":12959,"language":10081,"meta":37,"style":37},"\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",[24,12961,12962,12967,12975,12990,12996,13000,13004,13009,13017,13034,13040,13044,13048,13056,13060,13065,13079,13099,13118,13122,13127,13140,13160,13178,13182,13198,13202,13221,13239,13243,13253,13257,13265],{"__ignoreMap":37},[41,12963,12964],{"class":43,"line":44},[41,12965,12966],{"class":47},"\u002F\u002F返回局部变量引用\n",[41,12968,12969,12971,12973],{"class":43,"line":51},[41,12970,12704],{"class":271},[41,12972,5726],{"class":54},[41,12974,10991],{"class":275},[41,12976,12977,12979,12981,12983,12985,12987],{"class":43,"line":62},[41,12978,2124],{"class":271},[41,12980,11007],{"class":275},[41,12982,321],{"class":271},[41,12984,2177],{"class":58},[41,12986,330],{"class":275},[41,12988,12989],{"class":47}," \u002F\u002F局部变量\n",[41,12991,12992,12994],{"class":43,"line":70},[41,12993,4228],{"class":271},[41,12995,1573],{"class":275},[41,12997,12998],{"class":43,"line":76},[41,12999,1706],{"class":275},[41,13001,13002],{"class":43,"line":83},[41,13003,80],{"emptyLinePlaceholder":79},[41,13005,13006],{"class":43,"line":89},[41,13007,13008],{"class":47},"\u002F\u002F返回静态变量引用\n",[41,13010,13011,13013,13015],{"class":43,"line":96},[41,13012,12704],{"class":271},[41,13014,5795],{"class":54},[41,13016,10991],{"class":275},[41,13018,13019,13021,13023,13025,13027,13029,13031],{"class":43,"line":104},[41,13020,11158],{"class":271},[41,13022,2521],{"class":271},[41,13024,11007],{"class":275},[41,13026,321],{"class":271},[41,13028,9088],{"class":58},[41,13030,330],{"class":275},[41,13032,13033],{"class":47},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[41,13035,13036,13038],{"class":43,"line":176},[41,13037,4228],{"class":271},[41,13039,1573],{"class":275},[41,13041,13042],{"class":43,"line":184},[41,13043,1706],{"class":275},[41,13045,13046],{"class":43,"line":1757},[41,13047,80],{"emptyLinePlaceholder":79},[41,13049,13050,13052,13054],{"class":43,"line":1763},[41,13051,279],{"class":271},[41,13053,2112],{"class":54},[41,13055,10991],{"class":275},[41,13057,13058],{"class":43,"line":1768},[41,13059,80],{"emptyLinePlaceholder":79},[41,13061,13062],{"class":43,"line":1782},[41,13063,13064],{"class":47},"    \u002F\u002F不能返回局部变量的引用\n",[41,13066,13067,13070,13073,13075,13077],{"class":43,"line":1787},[41,13068,13069],{"class":271},"    int&",[41,13071,13072],{"class":275}," ref ",[41,13074,321],{"class":271},[41,13076,5726],{"class":54},[41,13078,5774],{"class":275},[41,13080,13081,13083,13085,13088,13090,13092,13094,13096],{"class":43,"line":1793},[41,13082,6667],{"class":275},[41,13084,1317],{"class":271},[41,13086,13087],{"class":378}," \"ref = \"",[41,13089,1585],{"class":271},[41,13091,13072],{"class":275},[41,13093,1317],{"class":271},[41,13095,11607],{"class":275},[41,13097,13098],{"class":47},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[41,13100,13101,13103,13105,13107,13109,13111,13113,13115],{"class":43,"line":1814},[41,13102,6667],{"class":275},[41,13104,1317],{"class":271},[41,13106,13087],{"class":378},[41,13108,1585],{"class":271},[41,13110,13072],{"class":275},[41,13112,1317],{"class":271},[41,13114,11607],{"class":275},[41,13116,13117],{"class":47},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[41,13119,13120],{"class":43,"line":1819},[41,13121,80],{"emptyLinePlaceholder":79},[41,13123,13124],{"class":43,"line":1833},[41,13125,13126],{"class":47},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[41,13128,13129,13131,13134,13136,13138],{"class":43,"line":1838},[41,13130,13069],{"class":271},[41,13132,13133],{"class":275}," ref2 ",[41,13135,321],{"class":271},[41,13137,5795],{"class":54},[41,13139,5774],{"class":275},[41,13141,13142,13144,13146,13149,13151,13153,13155,13157],{"class":43,"line":1867},[41,13143,6667],{"class":275},[41,13145,1317],{"class":271},[41,13147,13148],{"class":378}," \"ref2 = \"",[41,13150,1585],{"class":271},[41,13152,13133],{"class":275},[41,13154,1317],{"class":271},[41,13156,11607],{"class":275},[41,13158,13159],{"class":47}," \u002F\u002F20\n",[41,13161,13162,13164,13166,13168,13170,13172,13174,13176],{"class":43,"line":1872},[41,13163,6667],{"class":275},[41,13165,1317],{"class":271},[41,13167,13148],{"class":378},[41,13169,1585],{"class":271},[41,13171,13133],{"class":275},[41,13173,1317],{"class":271},[41,13175,11607],{"class":275},[41,13177,13159],{"class":47},[41,13179,13180],{"class":43,"line":1889},[41,13181,80],{"emptyLinePlaceholder":79},[41,13183,13184,13186,13189,13191,13193,13195],{"class":43,"line":1894},[41,13185,5840],{"class":54},[41,13187,13188],{"class":275},"() ",[41,13190,321],{"class":271},[41,13192,3137],{"class":58},[41,13194,330],{"class":275},[41,13196,13197],{"class":47},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[41,13199,13200],{"class":43,"line":1899},[41,13201,80],{"emptyLinePlaceholder":79},[41,13203,13204,13206,13208,13210,13212,13214,13216,13218],{"class":43,"line":1904},[41,13205,6667],{"class":275},[41,13207,1317],{"class":271},[41,13209,13148],{"class":378},[41,13211,1585],{"class":271},[41,13213,13133],{"class":275},[41,13215,1317],{"class":271},[41,13217,11607],{"class":275},[41,13219,13220],{"class":47}," \u002F\u002F1000\n",[41,13222,13223,13225,13227,13229,13231,13233,13235,13237],{"class":43,"line":1918},[41,13224,6667],{"class":275},[41,13226,1317],{"class":271},[41,13228,13148],{"class":378},[41,13230,1585],{"class":271},[41,13232,13133],{"class":275},[41,13234,1317],{"class":271},[41,13236,11607],{"class":275},[41,13238,13220],{"class":47},[41,13240,13241],{"class":43,"line":1923},[41,13242,80],{"emptyLinePlaceholder":79},[41,13244,13245,13247,13249,13251],{"class":43,"line":2715},[41,13246,2442],{"class":54},[41,13248,276],{"class":275},[41,13250,2447],{"class":378},[41,13252,2857],{"class":275},[41,13254,13255],{"class":43,"line":2729},[41,13256,80],{"emptyLinePlaceholder":79},[41,13258,13259,13261,13263],{"class":43,"line":2737},[41,13260,4228],{"class":271},[41,13262,4231],{"class":58},[41,13264,1434],{"class":275},[41,13266,13267],{"class":43,"line":2742},[41,13268,1706],{"class":275},[15,13270,13272],{"id":13271},"_65引用的本质","6.5引用的本质",[20,13274,13275,13276],{},"本质：",[423,13277,13278],{},"引用的本质在c++内部实现是一个指针常量.",[32,13280,13282],{"className":262,"code":13281,"language":264,"meta":37,"style":37},"\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",[24,13283,13284,13289,13305,13319,13323,13332,13344,13349,13354,13365,13378,13382,13398,13415,13419,13427,13435],{"__ignoreMap":37},[41,13285,13286],{"class":43,"line":44},[41,13287,13288],{"class":47},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[41,13290,13291,13293,13295,13297,13299,13302],{"class":43,"line":51},[41,13292,5502],{"class":271},[41,13294,11523],{"class":54},[41,13296,276],{"class":275},[41,13298,12704],{"class":271},[41,13300,13301],{"class":5354}," ref",[41,13303,13304],{"class":275},"){\n",[41,13306,13307,13310,13312,13314,13316],{"class":43,"line":62},[41,13308,13309],{"class":275},"    ref ",[41,13311,321],{"class":271},[41,13313,5892],{"class":58},[41,13315,330],{"class":275},[41,13317,13318],{"class":47}," \u002F\u002F ref是引用，转换为*ref = 100\n",[41,13320,13321],{"class":43,"line":70},[41,13322,1706],{"class":275},[41,13324,13325,13327,13329],{"class":43,"line":76},[41,13326,279],{"class":271},[41,13328,2112],{"class":54},[41,13330,13331],{"class":275},"(){\n",[41,13333,13334,13336,13338,13340,13342],{"class":43,"line":83},[41,13335,2124],{"class":271},[41,13337,11007],{"class":275},[41,13339,321],{"class":271},[41,13341,2177],{"class":58},[41,13343,1434],{"class":275},[41,13345,13346],{"class":43,"line":89},[41,13347,13348],{"class":275},"    \n",[41,13350,13351],{"class":43,"line":96},[41,13352,13353],{"class":47},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[41,13355,13356,13358,13360,13362],{"class":43,"line":104},[41,13357,13069],{"class":271},[41,13359,13072],{"class":275},[41,13361,321],{"class":271},[41,13363,13364],{"class":275}," a; \n",[41,13366,13367,13369,13371,13373,13375],{"class":43,"line":176},[41,13368,13309],{"class":275},[41,13370,321],{"class":271},[41,13372,9088],{"class":58},[41,13374,330],{"class":275},[41,13376,13377],{"class":47}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[41,13379,13380],{"class":43,"line":184},[41,13381,13348],{"class":275},[41,13383,13384,13386,13388,13390,13392,13394,13396],{"class":43,"line":1757},[41,13385,6667],{"class":275},[41,13387,1317],{"class":271},[41,13389,12808],{"class":378},[41,13391,1585],{"class":271},[41,13393,11007],{"class":275},[41,13395,1317],{"class":271},[41,13397,8978],{"class":275},[41,13399,13400,13402,13404,13407,13409,13411,13413],{"class":43,"line":1763},[41,13401,6667],{"class":275},[41,13403,1317],{"class":271},[41,13405,13406],{"class":378}," \"ref:\"",[41,13408,1585],{"class":271},[41,13410,13072],{"class":275},[41,13412,1317],{"class":271},[41,13414,8978],{"class":275},[41,13416,13417],{"class":43,"line":1768},[41,13418,13348],{"class":275},[41,13420,13421,13424],{"class":43,"line":1782},[41,13422,13423],{"class":54},"    func",[41,13425,13426],{"class":275},"(a);\n",[41,13428,13429,13431,13433],{"class":43,"line":1787},[41,13430,4228],{"class":271},[41,13432,4231],{"class":58},[41,13434,1434],{"class":275},[41,13436,13437],{"class":43,"line":1793},[41,13438,1706],{"class":275},[20,13440,11470],{},[224,13442,13443,13446],{},[227,13444,13445],{},"引用的本质，就是一个指针常量",[227,13447,13448],{},"引用一旦初始化，就不可以发生改变",[15,13450,13452],{"id":13451},"_66常量引用","6.6常量引用",[20,13454,13455],{},"作用：常量引用主要用来修饰形参",[20,13457,13458,13459,13462],{},"在函数形参列表中，可以加",[423,13460,13461],{},"const修饰形参","，防止形参改变实参",[32,13464,13466],{"className":262,"code":13465,"language":264,"meta":37,"style":37},"\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",[24,13467,13468,13473,13478,13497,13502,13515,13519,13523,13531,13535,13540,13545,13559,13563,13571,13583,13587,13592,13604,13611,13615,13625,13629,13637],{"__ignoreMap":37},[41,13469,13470],{"class":43,"line":44},[41,13471,13472],{"class":47},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[41,13474,13475],{"class":43,"line":51},[41,13476,13477],{"class":47},"\u002F\u002F加上const就不能修改实参的\n",[41,13479,13480,13482,13485,13487,13489,13492,13495],{"class":43,"line":62},[41,13481,5502],{"class":271},[41,13483,13484],{"class":54}," showValue",[41,13486,276],{"class":275},[41,13488,6930],{"class":271},[41,13490,13491],{"class":271}," int&",[41,13493,13494],{"class":5354}," v",[41,13496,12580],{"class":275},[41,13498,13499],{"class":43,"line":70},[41,13500,13501],{"class":47},"    \u002F\u002Fv += 100;\n",[41,13503,13504,13506,13508,13511,13513],{"class":43,"line":76},[41,13505,6667],{"class":275},[41,13507,1317],{"class":271},[41,13509,13510],{"class":275}," v ",[41,13512,1317],{"class":271},[41,13514,8978],{"class":275},[41,13516,13517],{"class":43,"line":83},[41,13518,1706],{"class":275},[41,13520,13521],{"class":43,"line":89},[41,13522,80],{"emptyLinePlaceholder":79},[41,13524,13525,13527,13529],{"class":43,"line":96},[41,13526,279],{"class":271},[41,13528,2112],{"class":54},[41,13530,10991],{"class":275},[41,13532,13533],{"class":43,"line":104},[41,13534,80],{"emptyLinePlaceholder":79},[41,13536,13537],{"class":43,"line":176},[41,13538,13539],{"class":47},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[41,13541,13542],{"class":43,"line":184},[41,13543,13544],{"class":47},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[41,13546,13547,13549,13551,13553,13555,13557],{"class":43,"line":1757},[41,13548,11359],{"class":271},[41,13550,13491],{"class":271},[41,13552,13072],{"class":275},[41,13554,321],{"class":271},[41,13556,2177],{"class":58},[41,13558,1434],{"class":275},[41,13560,13561],{"class":43,"line":1763},[41,13562,80],{"emptyLinePlaceholder":79},[41,13564,13565,13568],{"class":43,"line":1768},[41,13566,13567],{"class":47},"    \u002F\u002Fref = 100;",[41,13569,13570],{"class":47},"  \u002F\u002F加入const后不可以修改变量\n",[41,13572,13573,13575,13577,13579,13581],{"class":43,"line":1782},[41,13574,6667],{"class":275},[41,13576,1317],{"class":271},[41,13578,13072],{"class":275},[41,13580,1317],{"class":271},[41,13582,8978],{"class":275},[41,13584,13585],{"class":43,"line":1787},[41,13586,80],{"emptyLinePlaceholder":79},[41,13588,13589],{"class":43,"line":1793},[41,13590,13591],{"class":47},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[41,13593,13594,13596,13598,13600,13602],{"class":43,"line":1814},[41,13595,2124],{"class":271},[41,13597,11007],{"class":275},[41,13599,321],{"class":271},[41,13601,2177],{"class":58},[41,13603,1434],{"class":275},[41,13605,13606,13609],{"class":43,"line":1819},[41,13607,13608],{"class":54},"    showValue",[41,13610,13426],{"class":275},[41,13612,13613],{"class":43,"line":1833},[41,13614,80],{"emptyLinePlaceholder":79},[41,13616,13617,13619,13621,13623],{"class":43,"line":1838},[41,13618,2442],{"class":54},[41,13620,276],{"class":275},[41,13622,2447],{"class":378},[41,13624,2857],{"class":275},[41,13626,13627],{"class":43,"line":1867},[41,13628,80],{"emptyLinePlaceholder":79},[41,13630,13631,13633,13635],{"class":43,"line":1872},[41,13632,4228],{"class":271},[41,13634,4231],{"class":58},[41,13636,1434],{"class":275},[41,13638,13639],{"class":43,"line":1889},[41,13640,1706],{"class":275},[189,13642,13643],{},"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":37,"searchDepth":51,"depth":51,"links":13645},[13646,13647,13648,13649,13650,13651],{"id":12178,"depth":51,"text":12179},{"id":12357,"depth":51,"text":12358},{"id":12540,"depth":51,"text":12541},{"id":12944,"depth":51,"text":12945},{"id":13271,"depth":51,"text":13272},{"id":13451,"depth":51,"text":13452},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12170,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13658,"title":13659,"body":13660,"description":37,"extension":197,"meta":14741,"navigation":79,"path":14742,"seo":14743,"stem":14744,"__hash__":14745},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13661,"toc":14733},[13662,13665,13669,13672,13677,13909,13911,13922,13926,13929,13937,14041,14044,14048,14051,14055,14058,14063,14085,14091,14418,14421,14425,14433,14730],[10,13663,13659],{"id":13664},"_7函数高级部分",[15,13666,13668],{"id":13667},"_71函数默认参数","7.1函数默认参数",[20,13670,13671],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[20,13673,5319,13674],{},[24,13675,13676],{}," 返回值类型  函数名 （参数= 默认值）{}",[32,13678,13680],{"className":262,"code":13679,"language":264,"meta":37,"style":37},"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",[24,13681,13682,13717,13732,13736,13740,13745,13750,13779,13799,13809,13813,13817,13825,13829,13857,13879,13883,13893,13897,13905],{"__ignoreMap":37},[41,13683,13684,13686,13688,13690,13692,13694,13696,13698,13700,13703,13705,13707,13709,13711,13713,13715],{"class":43,"line":44},[41,13685,279],{"class":271},[41,13687,11523],{"class":54},[41,13689,276],{"class":275},[41,13691,279],{"class":271},[41,13693,1539],{"class":5354},[41,13695,12573],{"class":275},[41,13697,279],{"class":271},[41,13699,2971],{"class":5354},[41,13701,13702],{"class":271}," =",[41,13704,2177],{"class":58},[41,13706,12573],{"class":275},[41,13708,279],{"class":271},[41,13710,2987],{"class":5354},[41,13712,13702],{"class":271},[41,13714,2177],{"class":58},[41,13716,12580],{"class":275},[41,13718,13719,13721,13723,13725,13727,13729],{"class":43,"line":51},[41,13720,4228],{"class":271},[41,13722,11007],{"class":275},[41,13724,754],{"class":271},[41,13726,11020],{"class":275},[41,13728,754],{"class":271},[41,13730,13731],{"class":275}," c;\n",[41,13733,13734],{"class":43,"line":62},[41,13735,1706],{"class":275},[41,13737,13738],{"class":43,"line":70},[41,13739,80],{"emptyLinePlaceholder":79},[41,13741,13742],{"class":43,"line":76},[41,13743,13744],{"class":47},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[41,13746,13747],{"class":43,"line":83},[41,13748,13749],{"class":47},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[41,13751,13752,13754,13757,13759,13761,13763,13765,13767,13769,13771,13773,13775,13777],{"class":43,"line":89},[41,13753,279],{"class":271},[41,13755,13756],{"class":54}," func2",[41,13758,276],{"class":275},[41,13760,279],{"class":271},[41,13762,1539],{"class":5354},[41,13764,13702],{"class":271},[41,13766,2177],{"class":58},[41,13768,12573],{"class":275},[41,13770,279],{"class":271},[41,13772,2971],{"class":5354},[41,13774,13702],{"class":271},[41,13776,2177],{"class":58},[41,13778,2857],{"class":275},[41,13780,13781,13783,13785,13787,13789,13791,13793,13795,13797],{"class":43,"line":96},[41,13782,279],{"class":271},[41,13784,13756],{"class":54},[41,13786,276],{"class":275},[41,13788,279],{"class":271},[41,13790,1539],{"class":5354},[41,13792,12573],{"class":275},[41,13794,279],{"class":271},[41,13796,2971],{"class":5354},[41,13798,12580],{"class":275},[41,13800,13801,13803,13805,13807],{"class":43,"line":104},[41,13802,4228],{"class":271},[41,13804,11007],{"class":275},[41,13806,754],{"class":271},[41,13808,12601],{"class":275},[41,13810,13811],{"class":43,"line":176},[41,13812,1706],{"class":275},[41,13814,13815],{"class":43,"line":184},[41,13816,80],{"emptyLinePlaceholder":79},[41,13818,13819,13821,13823],{"class":43,"line":1757},[41,13820,279],{"class":271},[41,13822,2112],{"class":54},[41,13824,10991],{"class":275},[41,13826,13827],{"class":43,"line":1763},[41,13828,80],{"emptyLinePlaceholder":79},[41,13830,13831,13833,13835,13838,13840,13842,13844,13846,13848,13850,13853,13855],{"class":43,"line":1768},[41,13832,6667],{"class":275},[41,13834,1317],{"class":271},[41,13836,13837],{"class":378}," \"ret = \"",[41,13839,1585],{"class":271},[41,13841,11523],{"class":54},[41,13843,276],{"class":275},[41,13845,973],{"class":58},[41,13847,12573],{"class":275},[41,13849,973],{"class":58},[41,13851,13852],{"class":275},") ",[41,13854,1317],{"class":271},[41,13856,8978],{"class":275},[41,13858,13859,13861,13863,13865,13867,13869,13871,13873,13875,13877],{"class":43,"line":1782},[41,13860,6667],{"class":275},[41,13862,1317],{"class":271},[41,13864,13837],{"class":378},[41,13866,1585],{"class":271},[41,13868,11523],{"class":54},[41,13870,276],{"class":275},[41,13872,584],{"class":58},[41,13874,13852],{"class":275},[41,13876,1317],{"class":271},[41,13878,8978],{"class":275},[41,13880,13881],{"class":43,"line":1787},[41,13882,80],{"emptyLinePlaceholder":79},[41,13884,13885,13887,13889,13891],{"class":43,"line":1793},[41,13886,2442],{"class":54},[41,13888,276],{"class":275},[41,13890,2447],{"class":378},[41,13892,2857],{"class":275},[41,13894,13895],{"class":43,"line":1814},[41,13896,80],{"emptyLinePlaceholder":79},[41,13898,13899,13901,13903],{"class":43,"line":1819},[41,13900,4228],{"class":271},[41,13902,4231],{"class":58},[41,13904,1434],{"class":275},[41,13906,13907],{"class":43,"line":1833},[41,13908,1706],{"class":275},[20,13910,11470],{},[224,13912,13913,13916,13919],{},[227,13914,13915],{},"我传就用我；没传就用你",[227,13917,13918],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[227,13920,13921],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[15,13923,13925],{"id":13924},"_72函数的占位参数","7.2函数的占位参数",[20,13927,13928],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[20,13930,13931,13933,13934],{},[423,13932,5319],{}," ",[24,13935,13936],{},"返回值类型 函数名 (数据类型){}",[32,13938,13940],{"className":262,"code":13939,"language":264,"meta":37,"style":37},"\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",[24,13941,13942,13947,13965,13978,13982,13990,13994,14011,14015,14025,14029,14037],{"__ignoreMap":37},[41,13943,13944],{"class":43,"line":44},[41,13945,13946],{"class":47},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[41,13948,13949,13951,13953,13955,13957,13959,13961,13963],{"class":43,"line":51},[41,13950,5502],{"class":271},[41,13952,11523],{"class":54},[41,13954,276],{"class":275},[41,13956,279],{"class":271},[41,13958,1539],{"class":5354},[41,13960,12573],{"class":275},[41,13962,279],{"class":271},[41,13964,12580],{"class":275},[41,13966,13967,13969,13971,13974,13976],{"class":43,"line":62},[41,13968,6667],{"class":275},[41,13970,1317],{"class":271},[41,13972,13973],{"class":378}," \"this is func\"",[41,13975,1585],{"class":271},[41,13977,8978],{"class":275},[41,13979,13980],{"class":43,"line":70},[41,13981,1706],{"class":275},[41,13983,13984,13986,13988],{"class":43,"line":76},[41,13985,279],{"class":271},[41,13987,2112],{"class":54},[41,13989,10991],{"class":275},[41,13991,13992],{"class":43,"line":83},[41,13993,80],{"emptyLinePlaceholder":79},[41,13995,13996,13998,14000,14002,14004,14006,14008],{"class":43,"line":89},[41,13997,13423],{"class":54},[41,13999,276],{"class":275},[41,14001,719],{"class":58},[41,14003,651],{"class":275},[41,14005,719],{"class":58},[41,14007,6104],{"class":275},[41,14009,14010],{"class":47}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[41,14012,14013],{"class":43,"line":96},[41,14014,80],{"emptyLinePlaceholder":79},[41,14016,14017,14019,14021,14023],{"class":43,"line":104},[41,14018,2442],{"class":54},[41,14020,276],{"class":275},[41,14022,2447],{"class":378},[41,14024,2857],{"class":275},[41,14026,14027],{"class":43,"line":176},[41,14028,80],{"emptyLinePlaceholder":79},[41,14030,14031,14033,14035],{"class":43,"line":184},[41,14032,4228],{"class":271},[41,14034,4231],{"class":58},[41,14036,1434],{"class":275},[41,14038,14039],{"class":43,"line":1757},[41,14040,1706],{"class":275},[20,14042,14043],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[15,14045,14047],{"id":14046},"_73函数重载","7.3函数重载",[20,14049,14050],{},"意思是函数名是可以相同的",[241,14052,14054],{"id":14053},"_731基本语法","7.3.1基本语法",[20,14056,14057],{},"作用：函数名可以相同，提高复用性",[20,14059,14060],{},[423,14061,14062],{},"函数重载满足条件：",[1280,14064,14065,14068,14071],{},[227,14066,14067],{},"同一个作用域下",[227,14069,14070],{},"函数名称相同",[227,14072,14073,14074,14077,14078,14081,14082],{},"函数参数",[423,14075,14076],{},"类型不同","  或者 ",[423,14079,14080],{},"个数不同"," 或者 ",[423,14083,14084],{},"顺序不同",[20,14086,14087,14090],{},[423,14088,14089],{},"注意:","  函数的返回值不可以作为函数重载的条件",[32,14092,14094],{"className":10079,"code":14093,"language":10081,"meta":37,"style":37},"\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",[24,14095,14096,14101,14109,14113,14126,14130,14144,14148,14161,14165,14180,14184,14197,14201,14222,14226,14239,14243,14263,14267,14280,14284,14288,14293,14298,14303,14308,14313,14317,14321,14329,14333,14339,14349,14359,14373,14388,14392,14402,14406,14414],{"__ignoreMap":37},[41,14097,14098],{"class":43,"line":44},[41,14099,14100],{"class":47},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[41,14102,14103,14105,14107],{"class":43,"line":51},[41,14104,5502],{"class":271},[41,14106,11523],{"class":54},[41,14108,2115],{"class":275},[41,14110,14111],{"class":43,"line":62},[41,14112,1687],{"class":275},[41,14114,14115,14117,14119,14122,14124],{"class":43,"line":70},[41,14116,6667],{"class":275},[41,14118,1317],{"class":271},[41,14120,14121],{"class":378}," \"func 的调用！\"",[41,14123,1585],{"class":271},[41,14125,8978],{"class":275},[41,14127,14128],{"class":43,"line":76},[41,14129,1706],{"class":275},[41,14131,14132,14134,14136,14138,14140,14142],{"class":43,"line":83},[41,14133,5502],{"class":271},[41,14135,11523],{"class":54},[41,14137,276],{"class":275},[41,14139,279],{"class":271},[41,14141,1539],{"class":5354},[41,14143,282],{"class":275},[41,14145,14146],{"class":43,"line":89},[41,14147,1687],{"class":275},[41,14149,14150,14152,14154,14157,14159],{"class":43,"line":96},[41,14151,6667],{"class":275},[41,14153,1317],{"class":271},[41,14155,14156],{"class":378}," \"func (int a) 的调用！\"",[41,14158,1585],{"class":271},[41,14160,8978],{"class":275},[41,14162,14163],{"class":43,"line":104},[41,14164,1706],{"class":275},[41,14166,14167,14169,14171,14173,14176,14178],{"class":43,"line":176},[41,14168,5502],{"class":271},[41,14170,11523],{"class":54},[41,14172,276],{"class":275},[41,14174,14175],{"class":271},"double",[41,14177,1539],{"class":5354},[41,14179,282],{"class":275},[41,14181,14182],{"class":43,"line":184},[41,14183,1687],{"class":275},[41,14185,14186,14188,14190,14193,14195],{"class":43,"line":1757},[41,14187,6667],{"class":275},[41,14189,1317],{"class":271},[41,14191,14192],{"class":378}," \"func (double a)的调用！\"",[41,14194,1585],{"class":271},[41,14196,8978],{"class":275},[41,14198,14199],{"class":43,"line":1763},[41,14200,1706],{"class":275},[41,14202,14203,14205,14207,14209,14211,14213,14216,14218,14220],{"class":43,"line":1768},[41,14204,5502],{"class":271},[41,14206,11523],{"class":54},[41,14208,276],{"class":275},[41,14210,279],{"class":271},[41,14212,1539],{"class":5354},[41,14214,14215],{"class":275}," ,",[41,14217,14175],{"class":271},[41,14219,2971],{"class":5354},[41,14221,282],{"class":275},[41,14223,14224],{"class":43,"line":1782},[41,14225,1687],{"class":275},[41,14227,14228,14230,14232,14235,14237],{"class":43,"line":1787},[41,14229,6667],{"class":275},[41,14231,1317],{"class":271},[41,14233,14234],{"class":378}," \"func (int a ,double b) 的调用！\"",[41,14236,1585],{"class":271},[41,14238,8978],{"class":275},[41,14240,14241],{"class":43,"line":1793},[41,14242,1706],{"class":275},[41,14244,14245,14247,14249,14251,14253,14255,14257,14259,14261],{"class":43,"line":1814},[41,14246,5502],{"class":271},[41,14248,11523],{"class":54},[41,14250,276],{"class":275},[41,14252,14175],{"class":271},[41,14254,1539],{"class":5354},[41,14256,14215],{"class":275},[41,14258,279],{"class":271},[41,14260,2971],{"class":5354},[41,14262,282],{"class":275},[41,14264,14265],{"class":43,"line":1819},[41,14266,1687],{"class":275},[41,14268,14269,14271,14273,14276,14278],{"class":43,"line":1833},[41,14270,6667],{"class":275},[41,14272,1317],{"class":271},[41,14274,14275],{"class":378}," \"func (double a ,int b)的调用！\"",[41,14277,1585],{"class":271},[41,14279,8978],{"class":275},[41,14281,14282],{"class":43,"line":1838},[41,14283,1706],{"class":275},[41,14285,14286],{"class":43,"line":1867},[41,14287,80],{"emptyLinePlaceholder":79},[41,14289,14290],{"class":43,"line":1872},[41,14291,14292],{"class":47},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[41,14294,14295],{"class":43,"line":1889},[41,14296,14297],{"class":47},"\u002F\u002Fint func(double a, int b)\n",[41,14299,14300],{"class":43,"line":1894},[41,14301,14302],{"class":47},"\u002F\u002F{\n",[41,14304,14305],{"class":43,"line":1899},[41,14306,14307],{"class":47},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[41,14309,14310],{"class":43,"line":1904},[41,14311,14312],{"class":47},"\u002F\u002F}\n",[41,14314,14315],{"class":43,"line":1918},[41,14316,80],{"emptyLinePlaceholder":79},[41,14318,14319],{"class":43,"line":1923},[41,14320,80],{"emptyLinePlaceholder":79},[41,14322,14323,14325,14327],{"class":43,"line":2715},[41,14324,279],{"class":271},[41,14326,2112],{"class":54},[41,14328,10991],{"class":275},[41,14330,14331],{"class":43,"line":2729},[41,14332,80],{"emptyLinePlaceholder":79},[41,14334,14335,14337],{"class":43,"line":2737},[41,14336,13423],{"class":54},[41,14338,5774],{"class":275},[41,14340,14341,14343,14345,14347],{"class":43,"line":2742},[41,14342,13423],{"class":54},[41,14344,276],{"class":275},[41,14346,719],{"class":58},[41,14348,2857],{"class":275},[41,14350,14351,14353,14355,14357],{"class":43,"line":2748},[41,14352,13423],{"class":54},[41,14354,276],{"class":275},[41,14356,324],{"class":58},[41,14358,2857],{"class":275},[41,14360,14361,14363,14365,14367,14369,14371],{"class":43,"line":2754},[41,14362,13423],{"class":54},[41,14364,276],{"class":275},[41,14366,719],{"class":58},[41,14368,651],{"class":275},[41,14370,324],{"class":58},[41,14372,2857],{"class":275},[41,14374,14375,14377,14379,14381,14384,14386],{"class":43,"line":2759},[41,14376,13423],{"class":54},[41,14378,276],{"class":275},[41,14380,324],{"class":58},[41,14382,14383],{"class":275}," , ",[41,14385,719],{"class":58},[41,14387,2857],{"class":275},[41,14389,14390],{"class":43,"line":8086},[41,14391,13348],{"class":275},[41,14393,14394,14396,14398,14400],{"class":43,"line":8110},[41,14395,2442],{"class":54},[41,14397,276],{"class":275},[41,14399,2447],{"class":378},[41,14401,2857],{"class":275},[41,14403,14404],{"class":43,"line":8115},[41,14405,80],{"emptyLinePlaceholder":79},[41,14407,14408,14410,14412],{"class":43,"line":8121},[41,14409,4228],{"class":271},[41,14411,4231],{"class":58},[41,14413,1434],{"class":275},[41,14415,14416],{"class":43,"line":8148},[41,14417,1706],{"class":275},[20,14419,14420],{},"重点：函数返回值不可以作为函数重载条件！",[241,14422,14424],{"id":14423},"_732注意事项","7.3.2注意事项",[1280,14426,14427,14430],{},[227,14428,14429],{},"引用作为重载条件!!!",[227,14431,14432],{},"函数重载碰到函数默认参数",[32,14434,14436],{"className":262,"code":14435,"language":264,"meta":37,"style":37},"\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",[24,14437,14438,14443,14448,14452,14468,14472,14485,14489,14493,14511,14515,14528,14532,14536,14540,14545,14549,14573,14577,14590,14594,14598,14612,14616,14629,14633,14637,14645,14649,14661,14671,14684,14688,14692,14700,14704,14714,14718,14726],{"__ignoreMap":37},[41,14439,14440],{"class":43,"line":44},[41,14441,14442],{"class":47},"\u002F\u002F函数重载注意事项\n",[41,14444,14445],{"class":43,"line":51},[41,14446,14447],{"class":47},"\u002F\u002F1、引用作为重载条件\n",[41,14449,14450],{"class":43,"line":62},[41,14451,80],{"emptyLinePlaceholder":79},[41,14453,14454,14456,14458,14460,14462,14464,14466],{"class":43,"line":70},[41,14455,5502],{"class":271},[41,14457,11523],{"class":54},[41,14459,276],{"class":275},[41,14461,279],{"class":271},[41,14463,10722],{"class":271},[41,14465,511],{"class":5354},[41,14467,282],{"class":275},[41,14469,14470],{"class":43,"line":76},[41,14471,1687],{"class":275},[41,14473,14474,14476,14478,14481,14483],{"class":43,"line":83},[41,14475,6667],{"class":275},[41,14477,1317],{"class":271},[41,14479,14480],{"class":378}," \"func (int &a) 调用 \"",[41,14482,1585],{"class":271},[41,14484,8978],{"class":275},[41,14486,14487],{"class":43,"line":89},[41,14488,1706],{"class":275},[41,14490,14491],{"class":43,"line":96},[41,14492,80],{"emptyLinePlaceholder":79},[41,14494,14495,14497,14499,14501,14503,14505,14507,14509],{"class":43,"line":104},[41,14496,5502],{"class":271},[41,14498,11523],{"class":54},[41,14500,276],{"class":275},[41,14502,6930],{"class":271},[41,14504,2521],{"class":271},[41,14506,10722],{"class":271},[41,14508,511],{"class":5354},[41,14510,282],{"class":275},[41,14512,14513],{"class":43,"line":176},[41,14514,1687],{"class":275},[41,14516,14517,14519,14521,14524,14526],{"class":43,"line":184},[41,14518,6667],{"class":275},[41,14520,1317],{"class":271},[41,14522,14523],{"class":378}," \"func (const int &a) 调用 \"",[41,14525,1585],{"class":271},[41,14527,8978],{"class":275},[41,14529,14530],{"class":43,"line":1757},[41,14531,1706],{"class":275},[41,14533,14534],{"class":43,"line":1763},[41,14535,80],{"emptyLinePlaceholder":79},[41,14537,14538],{"class":43,"line":1768},[41,14539,80],{"emptyLinePlaceholder":79},[41,14541,14542],{"class":43,"line":1782},[41,14543,14544],{"class":47},"\u002F\u002F2、函数重载碰到函数默认参数\n",[41,14546,14547],{"class":43,"line":1787},[41,14548,80],{"emptyLinePlaceholder":79},[41,14550,14551,14553,14555,14557,14559,14561,14563,14565,14567,14569,14571],{"class":43,"line":1793},[41,14552,5502],{"class":271},[41,14554,13756],{"class":54},[41,14556,276],{"class":275},[41,14558,279],{"class":271},[41,14560,1539],{"class":5354},[41,14562,12573],{"class":275},[41,14564,279],{"class":271},[41,14566,2971],{"class":5354},[41,14568,13702],{"class":271},[41,14570,2177],{"class":58},[41,14572,282],{"class":275},[41,14574,14575],{"class":43,"line":1814},[41,14576,1687],{"class":275},[41,14578,14579,14581,14583,14586,14588],{"class":43,"line":1819},[41,14580,6667],{"class":275},[41,14582,1317],{"class":271},[41,14584,14585],{"class":378}," \"func2(int a, int b = 10) 调用\"",[41,14587,1585],{"class":271},[41,14589,8978],{"class":275},[41,14591,14592],{"class":43,"line":1833},[41,14593,1706],{"class":275},[41,14595,14596],{"class":43,"line":1838},[41,14597,80],{"emptyLinePlaceholder":79},[41,14599,14600,14602,14604,14606,14608,14610],{"class":43,"line":1867},[41,14601,5502],{"class":271},[41,14603,13756],{"class":54},[41,14605,276],{"class":275},[41,14607,279],{"class":271},[41,14609,1539],{"class":5354},[41,14611,282],{"class":275},[41,14613,14614],{"class":43,"line":1872},[41,14615,1687],{"class":275},[41,14617,14618,14620,14622,14625,14627],{"class":43,"line":1889},[41,14619,6667],{"class":275},[41,14621,1317],{"class":271},[41,14623,14624],{"class":378}," \"func2(int a) 调用\"",[41,14626,1585],{"class":271},[41,14628,8978],{"class":275},[41,14630,14631],{"class":43,"line":1894},[41,14632,1706],{"class":275},[41,14634,14635],{"class":43,"line":1899},[41,14636,80],{"emptyLinePlaceholder":79},[41,14638,14639,14641,14643],{"class":43,"line":1904},[41,14640,279],{"class":271},[41,14642,2112],{"class":54},[41,14644,10991],{"class":275},[41,14646,14647],{"class":43,"line":1918},[41,14648,13348],{"class":275},[41,14650,14651,14653,14655,14657,14659],{"class":43,"line":1923},[41,14652,2124],{"class":271},[41,14654,11007],{"class":275},[41,14656,321],{"class":271},[41,14658,2177],{"class":58},[41,14660,1434],{"class":275},[41,14662,14663,14665,14668],{"class":43,"line":2715},[41,14664,13423],{"class":54},[41,14666,14667],{"class":275},"(a);",[41,14669,14670],{"class":47}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[41,14672,14673,14675,14677,14679,14681],{"class":43,"line":2729},[41,14674,13423],{"class":54},[41,14676,276],{"class":275},[41,14678,719],{"class":58},[41,14680,6104],{"class":275},[41,14682,14683],{"class":47},"\u002F\u002F调用有const   10是个常量\n",[41,14685,14686],{"class":43,"line":2737},[41,14687,80],{"emptyLinePlaceholder":79},[41,14689,14690],{"class":43,"line":2742},[41,14691,80],{"emptyLinePlaceholder":79},[41,14693,14694,14697],{"class":43,"line":2748},[41,14695,14696],{"class":47},"    \u002F\u002Ffunc2(10);",[41,14698,14699],{"class":47}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[41,14701,14702],{"class":43,"line":2754},[41,14703,80],{"emptyLinePlaceholder":79},[41,14705,14706,14708,14710,14712],{"class":43,"line":2759},[41,14707,2442],{"class":54},[41,14709,276],{"class":275},[41,14711,2447],{"class":378},[41,14713,2857],{"class":275},[41,14715,14716],{"class":43,"line":8086},[41,14717,80],{"emptyLinePlaceholder":79},[41,14719,14720,14722,14724],{"class":43,"line":8110},[41,14721,4228],{"class":271},[41,14723,4231],{"class":58},[41,14725,1434],{"class":275},[41,14727,14728],{"class":43,"line":8115},[41,14729,1706],{"class":275},[189,14731,14732],{},"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":37,"searchDepth":51,"depth":51,"links":14734},[14735,14736,14737],{"id":13667,"depth":51,"text":13668},{"id":13924,"depth":51,"text":13925},{"id":14046,"depth":51,"text":14047,"children":14738},[14739,14740],{"id":14053,"depth":62,"text":14054},{"id":14423,"depth":62,"text":14424},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13659,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14747,"title":14748,"body":14749,"description":23503,"extension":197,"meta":23504,"navigation":79,"path":23505,"seo":23506,"stem":23507,"__hash__":23508},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14750,"toc":23484},[14751,14754,14760,14767,14772,14775,14778,14781,14785,14789,14792,14795,14803,14808,14811,14818,14823,14982,14985,15238,15241,15244,15247,15252,15255,15258,15269,15274,15510,15514,15524,15527,15535,15682,15686,15689,15692,15696,16141,16145,16153,16161,17073,17080,17085,17713,17716,17719,17722,17841,17844,17931,17934,18060,18063,18157,18160,18513,18517,18525,18529,18536,18539,18542,18553,18559,18564,18576,18584,18604,18612,18629,18815,18818,18822,18825,18828,18831,18834,18837,18840,18843,19303,19309,19313,19316,19327,19914,19917,20406,20410,20413,20416,20419,20422,20425,20433,20829,20833,20836,20839,21286,21289,21292,21297,21300,21305,21308,21312,21315,21317,21323,21326,21632,21642,21683,21687,21690,21692,21725,21728,22035,22037,22052,22055,22078,22087,22093,22096,22100,22103,22106,22111,22122,22127,22135,22140,22270,22273,22276,22451,22456,22668,22672,22675,22789,22794,23033,23037,23041,23044,23047,23052,23157,23160,23163,23166,23170,23281,23284,23287,23292,23344,23347,23350,23355,23401,23404,23409,23477,23479,23482],[10,14752,14748],{"id":14753},"_8类和对象",[20,14755,14756,14757],{},"C++面向对象的三大特性为",[423,14758,14759],{},"封装、继承、多态",[20,14761,14762,14763,14766],{},"C++认为",[423,14764,14765],{},"万事万物都皆为对象","，对象上有其属性和行为",[20,14768,14769],{},[423,14770,14771],{},"例如：",[20,14773,14774],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[20,14776,14777],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[20,14779,14780],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[15,14782,14784],{"id":14783},"_81封装","8.1封装",[241,14786,14788],{"id":14787},"_811封装的意义","8.1.1封装的意义",[20,14790,14791],{},"封装是C++面向对象三大特性之一",[20,14793,14794],{},"封装的意义：",[1280,14796,14797,14800],{},[227,14798,14799],{},"将属性和行为作为一个整体，表现生活中的事物",[227,14801,14802],{},"将属性和行为加以权限控制",[20,14804,14805],{},[423,14806,14807],{},"封装意义一：",[20,14809,14810],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[20,14812,14813,13933,14815],{},[423,14814,5319],{},[24,14816,14817],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[224,14819,14820],{},[227,14821,14822],{},"**示例1：**设计一个圆类，求圆的周长",[32,14824,14826],{"className":262,"code":14825,"language":264,"meta":37,"style":37},"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",[24,14827,14828,14836,14840,14845,14850,14855,14860,14867,14872,14882,14886,14904,14908,14912,14920,14924,14929,14934,14939,14944,14955,14978],{"__ignoreMap":37},[41,14829,14830,14833],{"class":43,"line":44},[41,14831,14832],{"class":271},"class",[41,14834,14835],{"class":54}," Circle\n",[41,14837,14838],{"class":43,"line":51},[41,14839,1687],{"class":275},[41,14841,14842],{"class":43,"line":62},[41,14843,14844],{"class":47},"    \u002F\u002F访问权限\n",[41,14846,14847],{"class":43,"line":70},[41,14848,14849],{"class":47},"    \u002F\u002F公共权限\n",[41,14851,14852],{"class":43,"line":76},[41,14853,14854],{"class":271},"public:\n",[41,14856,14857],{"class":43,"line":83},[41,14858,14859],{"class":47},"    \u002F\u002F属性\n",[41,14861,14862,14864],{"class":43,"line":89},[41,14863,2124],{"class":271},[41,14865,14866],{"class":275}," m_r;\n",[41,14868,14869],{"class":43,"line":96},[41,14870,14871],{"class":47},"    \u002F\u002F行为\n",[41,14873,14874,14877,14880],{"class":43,"line":104},[41,14875,14876],{"class":271},"    double",[41,14878,14879],{"class":54}," calculateZC",[41,14881,2115],{"class":275},[41,14883,14884],{"class":43,"line":176},[41,14885,2169],{"class":275},[41,14887,14888,14891,14894,14896,14899,14901],{"class":43,"line":184},[41,14889,14890],{"class":271},"        return",[41,14892,14893],{"class":58}," 2",[41,14895,728],{"class":271},[41,14897,14898],{"class":275},"PI",[41,14900,728],{"class":271},[41,14902,14903],{"class":275},"m_r;\n",[41,14905,14906],{"class":43,"line":1757},[41,14907,2326],{"class":275},[41,14909,14910],{"class":43,"line":1763},[41,14911,4133],{"class":275},[41,14913,14914,14916,14918],{"class":43,"line":1768},[41,14915,279],{"class":271},[41,14917,2112],{"class":54},[41,14919,2115],{"class":275},[41,14921,14922],{"class":43,"line":1782},[41,14923,1687],{"class":275},[41,14925,14926],{"class":43,"line":1787},[41,14927,14928],{"class":47},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[41,14930,14931],{"class":43,"line":1793},[41,14932,14933],{"class":47},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[41,14935,14936],{"class":43,"line":1814},[41,14937,14938],{"class":275},"    Circle c1;\n",[41,14940,14941],{"class":43,"line":1819},[41,14942,14943],{"class":47},"    \u002F\u002F给圆对象 的属性进行赋值\n",[41,14945,14946,14949,14951,14953],{"class":43,"line":1833},[41,14947,14948],{"class":275},"    c1.m_r",[41,14950,321],{"class":271},[41,14952,719],{"class":58},[41,14954,1434],{"class":275},[41,14956,14957,14959,14961,14964,14966,14969,14972,14974,14976],{"class":43,"line":1838},[41,14958,1692],{"class":275},[41,14960,1317],{"class":271},[41,14962,14963],{"class":378},"\"圆的周长\"",[41,14965,1317],{"class":271},[41,14967,14968],{"class":275},"c1.",[41,14970,14971],{"class":54},"calculateZC",[41,14973,2565],{"class":275},[41,14975,1317],{"class":271},[41,14977,1339],{"class":275},[41,14979,14980],{"class":43,"line":1867},[41,14981,1706],{"class":275},[20,14983,14984],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[32,14986,14988],{"className":262,"code":14987,"language":264,"meta":37,"style":37},"#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",[24,14989,14990,14996,15006,15012,15018,15022,15026,15031,15038,15043,15061,15065,15075,15079,15084,15100,15104,15114,15118,15123,15131,15135,15167,15171,15175,15183,15187,15192,15197,15211,15225,15234],{"__ignoreMap":37},[41,14991,14992,14994],{"class":43,"line":44},[41,14993,2089],{"class":271},[41,14995,2092],{"class":378},[41,14997,14998,15000,15002,15004],{"class":43,"line":51},[41,14999,2097],{"class":271},[41,15001,2100],{"class":271},[41,15003,2103],{"class":54},[41,15005,1434],{"class":275},[41,15007,15008,15010],{"class":43,"line":62},[41,15009,2089],{"class":271},[41,15011,7887],{"class":378},[41,15013,15014,15016],{"class":43,"line":70},[41,15015,14832],{"class":271},[41,15017,7900],{"class":54},[41,15019,15020],{"class":43,"line":76},[41,15021,1687],{"class":275},[41,15023,15024],{"class":43,"line":83},[41,15025,14854],{"class":271},[41,15027,15028],{"class":43,"line":89},[41,15029,15030],{"class":275},"    string m_name;\n",[41,15032,15033,15035],{"class":43,"line":96},[41,15034,2124],{"class":271},[41,15036,15037],{"class":275}," m_id;\n",[41,15039,15040],{"class":43,"line":104},[41,15041,15042],{"class":47},"    \u002F\u002F赋值姓名\n",[41,15044,15045,15048,15051,15053,15056,15059],{"class":43,"line":176},[41,15046,15047],{"class":271},"    void",[41,15049,15050],{"class":54}," setName",[41,15052,276],{"class":275},[41,15054,15055],{"class":54},"string",[41,15057,15058],{"class":5354}," name",[41,15060,282],{"class":275},[41,15062,15063],{"class":43,"line":184},[41,15064,2169],{"class":275},[41,15066,15067,15070,15072],{"class":43,"line":1757},[41,15068,15069],{"class":275},"        m_name",[41,15071,321],{"class":271},[41,15073,15074],{"class":275},"name;\n",[41,15076,15077],{"class":43,"line":1763},[41,15078,2326],{"class":275},[41,15080,15081],{"class":43,"line":1768},[41,15082,15083],{"class":47},"    \u002F\u002F赋值学号\n",[41,15085,15086,15088,15091,15093,15095,15098],{"class":43,"line":1782},[41,15087,15047],{"class":271},[41,15089,15090],{"class":54}," setId",[41,15092,276],{"class":275},[41,15094,279],{"class":271},[41,15096,15097],{"class":5354}," id",[41,15099,282],{"class":275},[41,15101,15102],{"class":43,"line":1787},[41,15103,2169],{"class":275},[41,15105,15106,15109,15111],{"class":43,"line":1793},[41,15107,15108],{"class":275},"        m_id",[41,15110,321],{"class":271},[41,15112,15113],{"class":275},"id;\n",[41,15115,15116],{"class":43,"line":1814},[41,15117,2326],{"class":275},[41,15119,15120],{"class":43,"line":1819},[41,15121,15122],{"class":47},"    \u002F\u002F打印学生信息\n",[41,15124,15125,15127,15129],{"class":43,"line":1833},[41,15126,15047],{"class":271},[41,15128,9753],{"class":54},[41,15130,2115],{"class":275},[41,15132,15133],{"class":43,"line":1838},[41,15134,2169],{"class":275},[41,15136,15137,15139,15141,15144,15146,15149,15151,15153,15155,15158,15160,15163,15165],{"class":43,"line":1867},[41,15138,3589],{"class":275},[41,15140,1317],{"class":271},[41,15142,15143],{"class":378},"\"姓名：\"",[41,15145,1317],{"class":271},[41,15147,15148],{"class":275},"m_name",[41,15150,1317],{"class":271},[41,15152,4497],{"class":378},[41,15154,1317],{"class":271},[41,15156,15157],{"class":378},"\"学号：\"",[41,15159,1317],{"class":271},[41,15161,15162],{"class":275},"m_id",[41,15164,1317],{"class":271},[41,15166,1339],{"class":275},[41,15168,15169],{"class":43,"line":1872},[41,15170,2326],{"class":275},[41,15172,15173],{"class":43,"line":1889},[41,15174,4133],{"class":275},[41,15176,15177,15179,15181],{"class":43,"line":1894},[41,15178,279],{"class":271},[41,15180,2112],{"class":54},[41,15182,2115],{"class":275},[41,15184,15185],{"class":43,"line":1899},[41,15186,1687],{"class":275},[41,15188,15189],{"class":43,"line":1904},[41,15190,15191],{"class":47},"    \u002F\u002F实例化\n",[41,15193,15194],{"class":43,"line":1918},[41,15195,15196],{"class":275},"    Student s1;\n",[41,15198,15199,15202,15205,15207,15209],{"class":43,"line":1923},[41,15200,15201],{"class":275},"    s1.",[41,15203,15204],{"class":54},"setName",[41,15206,276],{"class":275},[41,15208,8054],{"class":378},[41,15210,2857],{"class":275},[41,15212,15213,15215,15218,15220,15223],{"class":43,"line":2715},[41,15214,15201],{"class":275},[41,15216,15217],{"class":54},"setId",[41,15219,276],{"class":275},[41,15221,15222],{"class":58},"123456",[41,15224,2857],{"class":275},[41,15226,15227,15229,15232],{"class":43,"line":2729},[41,15228,15201],{"class":275},[41,15230,15231],{"class":54},"printInfo",[41,15233,5774],{"class":275},[41,15235,15236],{"class":43,"line":2737},[41,15237,1706],{"class":275},[20,15239,15240],{},"类中的属性和行为统称为成员",[20,15242,15243],{},"属性：成员属性(成员变量)",[20,15245,15246],{},"方法：成员函数(成员方法)",[20,15248,15249],{},[423,15250,15251],{},"封装意义二：",[20,15253,15254],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[20,15256,15257],{},"访问权限有三种：",[224,15259,15260,15263,15266],{},[227,15261,15262],{},"public        公共权限",[227,15264,15265],{},"protected 保护权限",[227,15267,15268],{},"private      私有权限",[20,15270,15271],{},[423,15272,15273],{},"示例：",[32,15275,15277],{"className":10079,"code":15276,"language":10081,"meta":37,"style":37},"\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",[24,15278,15279,15284,15289,15294,15299,15303,15310,15314,15319,15323,15328,15332,15337,15342,15347,15351,15356,15361,15368,15372,15376,15384,15388,15399,15411,15423,15427,15431,15435,15443,15447,15452,15464,15472,15480,15484,15494,15498,15506],{"__ignoreMap":37},[41,15280,15281],{"class":43,"line":44},[41,15282,15283],{"class":47},"\u002F\u002F三种权限\n",[41,15285,15286],{"class":43,"line":51},[41,15287,15288],{"class":47},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[41,15290,15291],{"class":43,"line":62},[41,15292,15293],{"class":47},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[41,15295,15296],{"class":43,"line":70},[41,15297,15298],{"class":47},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[41,15300,15301],{"class":43,"line":76},[41,15302,80],{"emptyLinePlaceholder":79},[41,15304,15305,15307],{"class":43,"line":83},[41,15306,14832],{"class":271},[41,15308,15309],{"class":54}," Person\n",[41,15311,15312],{"class":43,"line":89},[41,15313,1687],{"class":275},[41,15315,15316],{"class":43,"line":96},[41,15317,15318],{"class":47},"    \u002F\u002F姓名  公共权限\n",[41,15320,15321],{"class":43,"line":104},[41,15322,14854],{"class":271},[41,15324,15325],{"class":43,"line":176},[41,15326,15327],{"class":275},"    string m_Name;\n",[41,15329,15330],{"class":43,"line":184},[41,15331,80],{"emptyLinePlaceholder":79},[41,15333,15334],{"class":43,"line":1757},[41,15335,15336],{"class":47},"    \u002F\u002F汽车  保护权限\n",[41,15338,15339],{"class":43,"line":1763},[41,15340,15341],{"class":271},"protected:\n",[41,15343,15344],{"class":43,"line":1768},[41,15345,15346],{"class":275},"    string m_Car;\n",[41,15348,15349],{"class":43,"line":1782},[41,15350,80],{"emptyLinePlaceholder":79},[41,15352,15353],{"class":43,"line":1787},[41,15354,15355],{"class":47},"    \u002F\u002F银行卡密码  私有权限\n",[41,15357,15358],{"class":43,"line":1793},[41,15359,15360],{"class":271},"private:\n",[41,15362,15363,15365],{"class":43,"line":1814},[41,15364,2124],{"class":271},[41,15366,15367],{"class":275}," m_Password;\n",[41,15369,15370],{"class":43,"line":1819},[41,15371,80],{"emptyLinePlaceholder":79},[41,15373,15374],{"class":43,"line":1833},[41,15375,14854],{"class":271},[41,15377,15378,15380,15382],{"class":43,"line":1838},[41,15379,15047],{"class":271},[41,15381,11523],{"class":54},[41,15383,2115],{"class":275},[41,15385,15386],{"class":43,"line":1867},[41,15387,2169],{"class":275},[41,15389,15390,15393,15395,15397],{"class":43,"line":1872},[41,15391,15392],{"class":275},"        m_Name ",[41,15394,321],{"class":271},[41,15396,9076],{"class":378},[41,15398,1434],{"class":275},[41,15400,15401,15404,15406,15409],{"class":43,"line":1889},[41,15402,15403],{"class":275},"        m_Car ",[41,15405,321],{"class":271},[41,15407,15408],{"class":378}," \"拖拉机\"",[41,15410,1434],{"class":275},[41,15412,15413,15416,15418,15421],{"class":43,"line":1894},[41,15414,15415],{"class":275},"        m_Password ",[41,15417,321],{"class":271},[41,15419,15420],{"class":58}," 123456",[41,15422,1434],{"class":275},[41,15424,15425],{"class":43,"line":1899},[41,15426,2326],{"class":275},[41,15428,15429],{"class":43,"line":1904},[41,15430,4133],{"class":275},[41,15432,15433],{"class":43,"line":1918},[41,15434,80],{"emptyLinePlaceholder":79},[41,15436,15437,15439,15441],{"class":43,"line":1923},[41,15438,279],{"class":271},[41,15440,2112],{"class":54},[41,15442,10991],{"class":275},[41,15444,15445],{"class":43,"line":2715},[41,15446,80],{"emptyLinePlaceholder":79},[41,15448,15449],{"class":43,"line":2729},[41,15450,15451],{"class":275},"    Person p;\n",[41,15453,15454,15457,15459,15462],{"class":43,"line":2737},[41,15455,15456],{"class":275},"    p.m_Name ",[41,15458,321],{"class":271},[41,15460,15461],{"class":378}," \"李四\"",[41,15463,1434],{"class":275},[41,15465,15466,15469],{"class":43,"line":2742},[41,15467,15468],{"class":47},"    \u002F\u002Fp.m_Car = \"奔驰\";",[41,15470,15471],{"class":47},"  \u002F\u002F保护权限类外访问不到\n",[41,15473,15474,15477],{"class":43,"line":2748},[41,15475,15476],{"class":47},"    \u002F\u002Fp.m_Password = 123;",[41,15478,15479],{"class":47}," \u002F\u002F私有权限类外访问不到\n",[41,15481,15482],{"class":43,"line":2754},[41,15483,80],{"emptyLinePlaceholder":79},[41,15485,15486,15488,15490,15492],{"class":43,"line":2759},[41,15487,2442],{"class":54},[41,15489,276],{"class":275},[41,15491,2447],{"class":378},[41,15493,2857],{"class":275},[41,15495,15496],{"class":43,"line":8086},[41,15497,80],{"emptyLinePlaceholder":79},[41,15499,15500,15502,15504],{"class":43,"line":8110},[41,15501,4228],{"class":271},[41,15503,4231],{"class":58},[41,15505,1434],{"class":275},[41,15507,15508],{"class":43,"line":8115},[41,15509,1706],{"class":275},[241,15511,15513],{"id":15512},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[20,15515,15516,15517,15520,15521],{},"在C++中 struct和class唯一的",[423,15518,15519],{},"区别","就在于 ",[423,15522,15523],{},"默认的访问权限不同",[20,15525,15526],{},"区别：",[1280,15528,15529,15532],{},[227,15530,15531],{},"struct 默认权限为公共",[227,15533,15534],{},"class   默认权限为私有",[32,15536,15538],{"className":10079,"code":15537,"language":10081,"meta":37,"style":37},"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",[24,15539,15540,15547,15551,15561,15565,15569,15576,15580,15590,15594,15598,15606,15610,15615,15629,15633,15638,15652,15656,15666,15670,15678],{"__ignoreMap":37},[41,15541,15542,15544],{"class":43,"line":44},[41,15543,14832],{"class":271},[41,15545,15546],{"class":54}," C1\n",[41,15548,15549],{"class":43,"line":51},[41,15550,1687],{"class":275},[41,15552,15553,15555,15558],{"class":43,"line":62},[41,15554,2124],{"class":271},[41,15556,15557],{"class":275},"  m_A;",[41,15559,15560],{"class":47}," \u002F\u002F默认是私有权限\n",[41,15562,15563],{"class":43,"line":70},[41,15564,4133],{"class":275},[41,15566,15567],{"class":43,"line":76},[41,15568,80],{"emptyLinePlaceholder":79},[41,15570,15571,15573],{"class":43,"line":83},[41,15572,7897],{"class":271},[41,15574,15575],{"class":54}," C2\n",[41,15577,15578],{"class":43,"line":89},[41,15579,1687],{"class":275},[41,15581,15582,15584,15587],{"class":43,"line":96},[41,15583,2124],{"class":271},[41,15585,15586],{"class":275}," m_A;",[41,15588,15589],{"class":47},"  \u002F\u002F默认是公共权限\n",[41,15591,15592],{"class":43,"line":104},[41,15593,4133],{"class":275},[41,15595,15596],{"class":43,"line":176},[41,15597,80],{"emptyLinePlaceholder":79},[41,15599,15600,15602,15604],{"class":43,"line":184},[41,15601,279],{"class":271},[41,15603,2112],{"class":54},[41,15605,10991],{"class":275},[41,15607,15608],{"class":43,"line":1757},[41,15609,80],{"emptyLinePlaceholder":79},[41,15611,15612],{"class":43,"line":1763},[41,15613,15614],{"class":275},"    C1 c1;\n",[41,15616,15617,15620,15622,15624,15626],{"class":43,"line":1768},[41,15618,15619],{"class":275},"    c1.m_A ",[41,15621,321],{"class":271},[41,15623,2177],{"class":58},[41,15625,330],{"class":275},[41,15627,15628],{"class":47}," \u002F\u002F错误，访问权限是私有\n",[41,15630,15631],{"class":43,"line":1782},[41,15632,80],{"emptyLinePlaceholder":79},[41,15634,15635],{"class":43,"line":1787},[41,15636,15637],{"class":275},"    C2 c2;\n",[41,15639,15640,15643,15645,15647,15649],{"class":43,"line":1793},[41,15641,15642],{"class":275},"    c2.m_A ",[41,15644,321],{"class":271},[41,15646,2177],{"class":58},[41,15648,330],{"class":275},[41,15650,15651],{"class":47}," \u002F\u002F正确，访问权限是公共\n",[41,15653,15654],{"class":43,"line":1814},[41,15655,80],{"emptyLinePlaceholder":79},[41,15657,15658,15660,15662,15664],{"class":43,"line":1819},[41,15659,2442],{"class":54},[41,15661,276],{"class":275},[41,15663,2447],{"class":378},[41,15665,2857],{"class":275},[41,15667,15668],{"class":43,"line":1833},[41,15669,80],{"emptyLinePlaceholder":79},[41,15671,15672,15674,15676],{"class":43,"line":1838},[41,15673,4228],{"class":271},[41,15675,4231],{"class":58},[41,15677,1434],{"class":275},[41,15679,15680],{"class":43,"line":1867},[41,15681,1706],{"class":275},[241,15683,15685],{"id":15684},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[20,15687,15688],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[20,15690,15691],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[20,15693,15694],{},[423,15695,15273],{},[32,15697,15699],{"className":10079,"code":15698,"language":10081,"meta":37,"style":37},"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",[24,15700,15701,15711,15715,15719,15724,15738,15747,15751,15761,15765,15772,15776,15780,15784,15789,15798,15805,15809,15814,15830,15853,15866,15873,15877,15886,15890,15894,15899,15915,15925,15929,15933,15937,15945,15949,15959,15963,15971,15975,15979,15987,15991,15995,16000,16013,16036,16040,16045,16058,16080,16084,16089,16103,16111,16115,16125,16129,16137],{"__ignoreMap":37},[41,15702,15703,15705,15708],{"class":43,"line":44},[41,15704,14832],{"class":271},[41,15706,15707],{"class":54}," Person",[41,15709,15710],{"class":275}," {\n",[41,15712,15713],{"class":43,"line":51},[41,15714,14854],{"class":271},[41,15716,15717],{"class":43,"line":62},[41,15718,80],{"emptyLinePlaceholder":79},[41,15720,15721],{"class":43,"line":70},[41,15722,15723],{"class":47},"    \u002F\u002F姓名设置可读可写\n",[41,15725,15726,15728,15730,15732,15734,15736],{"class":43,"line":76},[41,15727,15047],{"class":271},[41,15729,15050],{"class":54},[41,15731,276],{"class":275},[41,15733,15055],{"class":54},[41,15735,15058],{"class":5354},[41,15737,12580],{"class":275},[41,15739,15740,15742,15744],{"class":43,"line":83},[41,15741,15392],{"class":275},[41,15743,321],{"class":271},[41,15745,15746],{"class":275}," name;\n",[41,15748,15749],{"class":43,"line":89},[41,15750,2326],{"class":275},[41,15752,15753,15756,15759],{"class":43,"line":96},[41,15754,15755],{"class":54},"    string",[41,15757,15758],{"class":54}," getName",[41,15760,2115],{"class":275},[41,15762,15763],{"class":43,"line":104},[41,15764,2169],{"class":275},[41,15766,15767,15769],{"class":43,"line":176},[41,15768,14890],{"class":271},[41,15770,15771],{"class":275}," m_Name;\n",[41,15773,15774],{"class":43,"line":184},[41,15775,2326],{"class":275},[41,15777,15778],{"class":43,"line":1757},[41,15779,80],{"emptyLinePlaceholder":79},[41,15781,15782],{"class":43,"line":1763},[41,15783,80],{"emptyLinePlaceholder":79},[41,15785,15786],{"class":43,"line":1768},[41,15787,15788],{"class":47},"    \u002F\u002F获取年龄 \n",[41,15790,15791,15793,15796],{"class":43,"line":1782},[41,15792,2124],{"class":271},[41,15794,15795],{"class":54}," getAge",[41,15797,10991],{"class":275},[41,15799,15800,15802],{"class":43,"line":1787},[41,15801,14890],{"class":271},[41,15803,15804],{"class":275}," m_Age;\n",[41,15806,15807],{"class":43,"line":1793},[41,15808,2326],{"class":275},[41,15810,15811],{"class":43,"line":1814},[41,15812,15813],{"class":47},"    \u002F\u002F设置年龄\n",[41,15815,15816,15818,15821,15823,15825,15828],{"class":43,"line":1819},[41,15817,15047],{"class":271},[41,15819,15820],{"class":54}," setAge",[41,15822,276],{"class":275},[41,15824,279],{"class":271},[41,15826,15827],{"class":5354}," age",[41,15829,12580],{"class":275},[41,15831,15832,15834,15837,15839,15841,15843,15846,15848,15851],{"class":43,"line":1833},[41,15833,2635],{"class":271},[41,15835,15836],{"class":275}," (age ",[41,15838,1183],{"class":271},[41,15840,4231],{"class":58},[41,15842,3393],{"class":271},[41,15844,15845],{"class":275}," age ",[41,15847,1233],{"class":271},[41,15849,15850],{"class":58}," 150",[41,15852,12580],{"class":275},[41,15854,15855,15857,15859,15862,15864],{"class":43,"line":1838},[41,15856,9857],{"class":275},[41,15858,1317],{"class":271},[41,15860,15861],{"class":378}," \"你个老妖精!\"",[41,15863,1585],{"class":271},[41,15865,8978],{"class":275},[41,15867,15868,15871],{"class":43,"line":1867},[41,15869,15870],{"class":271},"            return",[41,15872,1434],{"class":275},[41,15874,15875],{"class":43,"line":1872},[41,15876,2667],{"class":275},[41,15878,15879,15882,15884],{"class":43,"line":1889},[41,15880,15881],{"class":275},"        m_Age ",[41,15883,321],{"class":271},[41,15885,7935],{"class":275},[41,15887,15888],{"class":43,"line":1894},[41,15889,2326],{"class":275},[41,15891,15892],{"class":43,"line":1899},[41,15893,80],{"emptyLinePlaceholder":79},[41,15895,15896],{"class":43,"line":1904},[41,15897,15898],{"class":47},"    \u002F\u002F情人设置为只写\n",[41,15900,15901,15903,15906,15908,15910,15913],{"class":43,"line":1918},[41,15902,15047],{"class":271},[41,15904,15905],{"class":54}," setLover",[41,15907,276],{"class":275},[41,15909,15055],{"class":54},[41,15911,15912],{"class":5354}," lover",[41,15914,12580],{"class":275},[41,15916,15917,15920,15922],{"class":43,"line":1923},[41,15918,15919],{"class":275},"        m_Lover ",[41,15921,321],{"class":271},[41,15923,15924],{"class":275}," lover;\n",[41,15926,15927],{"class":43,"line":2715},[41,15928,2326],{"class":275},[41,15930,15931],{"class":43,"line":2729},[41,15932,80],{"emptyLinePlaceholder":79},[41,15934,15935],{"class":43,"line":2737},[41,15936,15360],{"class":271},[41,15938,15939,15942],{"class":43,"line":2742},[41,15940,15941],{"class":275},"    string m_Name;",[41,15943,15944],{"class":47}," \u002F\u002F可读可写  姓名\n",[41,15946,15947],{"class":43,"line":2748},[41,15948,13348],{"class":275},[41,15950,15951,15953,15956],{"class":43,"line":2754},[41,15952,2124],{"class":271},[41,15954,15955],{"class":275}," m_Age;",[41,15957,15958],{"class":47}," \u002F\u002F只读  年龄\n",[41,15960,15961],{"class":43,"line":2759},[41,15962,80],{"emptyLinePlaceholder":79},[41,15964,15965,15968],{"class":43,"line":8086},[41,15966,15967],{"class":275},"    string m_Lover;",[41,15969,15970],{"class":47}," \u002F\u002F只写  情人\n",[41,15972,15973],{"class":43,"line":8110},[41,15974,4133],{"class":275},[41,15976,15977],{"class":43,"line":8115},[41,15978,80],{"emptyLinePlaceholder":79},[41,15980,15981,15983,15985],{"class":43,"line":8121},[41,15982,279],{"class":271},[41,15984,2112],{"class":54},[41,15986,10991],{"class":275},[41,15988,15989],{"class":43,"line":8148},[41,15990,80],{"emptyLinePlaceholder":79},[41,15992,15993],{"class":43,"line":8153},[41,15994,15451],{"class":275},[41,15996,15997],{"class":43,"line":8159},[41,15998,15999],{"class":47},"    \u002F\u002F姓名设置\n",[41,16001,16002,16005,16007,16009,16011],{"class":43,"line":8171},[41,16003,16004],{"class":275},"    p.",[41,16006,15204],{"class":54},[41,16008,276],{"class":275},[41,16010,8054],{"class":378},[41,16012,2857],{"class":275},[41,16014,16015,16017,16019,16022,16024,16027,16030,16032,16034],{"class":43,"line":8183},[41,16016,6667],{"class":275},[41,16018,1317],{"class":271},[41,16020,16021],{"class":378}," \"姓名： \"",[41,16023,1585],{"class":271},[41,16025,16026],{"class":275}," p.",[41,16028,16029],{"class":54},"getName",[41,16031,13188],{"class":275},[41,16033,1317],{"class":271},[41,16035,8978],{"class":275},[41,16037,16038],{"class":43,"line":8195},[41,16039,80],{"emptyLinePlaceholder":79},[41,16041,16042],{"class":43,"line":9854},[41,16043,16044],{"class":47},"    \u002F\u002F年龄设置\n",[41,16046,16047,16049,16052,16054,16056],{"class":43,"line":9879},[41,16048,16004],{"class":275},[41,16050,16051],{"class":54},"setAge",[41,16053,276],{"class":275},[41,16055,929],{"class":58},[41,16057,2857],{"class":275},[41,16059,16060,16062,16064,16067,16069,16071,16074,16076,16078],{"class":43,"line":9902},[41,16061,6667],{"class":275},[41,16063,1317],{"class":271},[41,16065,16066],{"class":378}," \"年龄： \"",[41,16068,1585],{"class":271},[41,16070,16026],{"class":275},[41,16072,16073],{"class":54},"getAge",[41,16075,13188],{"class":275},[41,16077,1317],{"class":271},[41,16079,8978],{"class":275},[41,16081,16082],{"class":43,"line":9926},[41,16083,80],{"emptyLinePlaceholder":79},[41,16085,16086],{"class":43,"line":9931},[41,16087,16088],{"class":47},"    \u002F\u002F情人设置\n",[41,16090,16091,16093,16096,16098,16101],{"class":43,"line":9936},[41,16092,16004],{"class":275},[41,16094,16095],{"class":54},"setLover",[41,16097,276],{"class":275},[41,16099,16100],{"class":378},"\"苍井\"",[41,16102,2857],{"class":275},[41,16104,16105,16108],{"class":43,"line":9941},[41,16106,16107],{"class":47},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[41,16109,16110],{"class":47},"  \u002F\u002F只写属性，不可以读取\n",[41,16112,16113],{"class":43,"line":9950},[41,16114,80],{"emptyLinePlaceholder":79},[41,16116,16117,16119,16121,16123],{"class":43,"line":9955},[41,16118,2442],{"class":54},[41,16120,276],{"class":275},[41,16122,2447],{"class":378},[41,16124,2857],{"class":275},[41,16126,16127],{"class":43,"line":9961},[41,16128,80],{"emptyLinePlaceholder":79},[41,16130,16131,16133,16135],{"class":43,"line":9982},[41,16132,4228],{"class":271},[41,16134,4231],{"class":58},[41,16136,1434],{"class":275},[41,16138,16139],{"class":43,"line":9988},[41,16140,1706],{"class":275},[241,16142,16144],{"id":16143},"_814封装案例","8.1.4封装案例",[224,16146,16147],{},[227,16148,16149,16152],{},[423,16150,16151],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1280,16154,16155,16158],{},[227,16156,16157],{},"求出立方体的面积和体积",[227,16159,16160],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[32,16162,16164],{"className":262,"code":16163,"language":264,"meta":37,"style":37},"#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",[24,16165,16166,16172,16182,16189,16193,16197,16202,16232,16236,16246,16256,16266,16270,16279,16283,16319,16323,16332,16336,16352,16356,16361,16370,16374,16381,16385,16394,16398,16405,16409,16418,16422,16429,16433,16438,16455,16459,16505,16509,16518,16522,16526,16530,16539,16543,16547,16552,16556,16562,16568,16574,16578,16582,16587,16609,16613,16667,16671,16679,16683,16688,16693,16706,16713,16729,16740,16746,16769,16775,16798,16812,16832,16838,16849,16872,16894,16899,16905,16919,16932,16937,16951,16956,16962,16967,16981,16986,16991,17005,17017,17022,17035,17040,17045,17050,17063,17068],{"__ignoreMap":37},[41,16167,16168,16170],{"class":43,"line":44},[41,16169,2089],{"class":271},[41,16171,2092],{"class":378},[41,16173,16174,16176,16178,16180],{"class":43,"line":51},[41,16175,2097],{"class":271},[41,16177,2100],{"class":271},[41,16179,2103],{"class":54},[41,16181,1434],{"class":275},[41,16183,16184,16186],{"class":43,"line":62},[41,16185,14832],{"class":271},[41,16187,16188],{"class":54}," Cube\n",[41,16190,16191],{"class":43,"line":70},[41,16192,1687],{"class":275},[41,16194,16195],{"class":43,"line":76},[41,16196,14854],{"class":271},[41,16198,16199],{"class":43,"line":83},[41,16200,16201],{"class":47},"    \u002F\u002F输入长宽高\n",[41,16203,16204,16206,16209,16211,16213,16216,16218,16220,16223,16225,16227,16230],{"class":43,"line":89},[41,16205,15047],{"class":271},[41,16207,16208],{"class":54}," setLwh",[41,16210,276],{"class":275},[41,16212,279],{"class":271},[41,16214,16215],{"class":5354}," l",[41,16217,651],{"class":275},[41,16219,279],{"class":271},[41,16221,16222],{"class":5354}," w",[41,16224,651],{"class":275},[41,16226,279],{"class":271},[41,16228,16229],{"class":5354}," h",[41,16231,282],{"class":275},[41,16233,16234],{"class":43,"line":96},[41,16235,2169],{"class":275},[41,16237,16238,16241,16243],{"class":43,"line":104},[41,16239,16240],{"class":275},"        m_L",[41,16242,321],{"class":271},[41,16244,16245],{"class":275},"l;\n",[41,16247,16248,16251,16253],{"class":43,"line":176},[41,16249,16250],{"class":275},"        m_W",[41,16252,321],{"class":271},[41,16254,16255],{"class":275},"w;\n",[41,16257,16258,16261,16263],{"class":43,"line":184},[41,16259,16260],{"class":275},"        m_H",[41,16262,321],{"class":271},[41,16264,16265],{"class":275},"h;\n",[41,16267,16268],{"class":43,"line":1757},[41,16269,2326],{"class":275},[41,16271,16272,16274,16277],{"class":43,"line":1763},[41,16273,2124],{"class":271},[41,16275,16276],{"class":54}," mianji",[41,16278,2115],{"class":275},[41,16280,16281],{"class":43,"line":1768},[41,16282,2169],{"class":275},[41,16284,16285,16287,16289,16291,16294,16296,16299,16301,16304,16306,16309,16311,16314,16316],{"class":43,"line":1782},[41,16286,14890],{"class":271},[41,16288,14893],{"class":58},[41,16290,728],{"class":271},[41,16292,16293],{"class":275},"(m_L",[41,16295,728],{"class":271},[41,16297,16298],{"class":275},"m_W ",[41,16300,754],{"class":271},[41,16302,16303],{"class":275}," m_L",[41,16305,728],{"class":271},[41,16307,16308],{"class":275},"m_H ",[41,16310,754],{"class":271},[41,16312,16313],{"class":275}," m_W",[41,16315,728],{"class":271},[41,16317,16318],{"class":275},"m_H);\n",[41,16320,16321],{"class":43,"line":1787},[41,16322,2326],{"class":275},[41,16324,16325,16327,16330],{"class":43,"line":1793},[41,16326,2124],{"class":271},[41,16328,16329],{"class":54}," tiji",[41,16331,2115],{"class":275},[41,16333,16334],{"class":43,"line":1814},[41,16335,2169],{"class":275},[41,16337,16338,16340,16342,16344,16347,16349],{"class":43,"line":1819},[41,16339,14890],{"class":271},[41,16341,16303],{"class":275},[41,16343,728],{"class":271},[41,16345,16346],{"class":275},"m_W",[41,16348,728],{"class":271},[41,16350,16351],{"class":275},"m_H;\n",[41,16353,16354],{"class":43,"line":1833},[41,16355,2326],{"class":275},[41,16357,16358],{"class":43,"line":1838},[41,16359,16360],{"class":47},"    \u002F\u002F获取长宽高\n",[41,16362,16363,16365,16368],{"class":43,"line":1867},[41,16364,2124],{"class":271},[41,16366,16367],{"class":54}," getLength",[41,16369,2115],{"class":275},[41,16371,16372],{"class":43,"line":1872},[41,16373,2169],{"class":275},[41,16375,16376,16378],{"class":43,"line":1889},[41,16377,14890],{"class":271},[41,16379,16380],{"class":275}," m_L;\n",[41,16382,16383],{"class":43,"line":1894},[41,16384,2326],{"class":275},[41,16386,16387,16389,16392],{"class":43,"line":1899},[41,16388,2124],{"class":271},[41,16390,16391],{"class":54}," getWidth",[41,16393,2115],{"class":275},[41,16395,16396],{"class":43,"line":1904},[41,16397,2169],{"class":275},[41,16399,16400,16402],{"class":43,"line":1918},[41,16401,14890],{"class":271},[41,16403,16404],{"class":275}," m_W;\n",[41,16406,16407],{"class":43,"line":1923},[41,16408,2326],{"class":275},[41,16410,16411,16413,16416],{"class":43,"line":2715},[41,16412,2124],{"class":271},[41,16414,16415],{"class":54}," getHeight",[41,16417,2115],{"class":275},[41,16419,16420],{"class":43,"line":2729},[41,16421,2169],{"class":275},[41,16423,16424,16426],{"class":43,"line":2737},[41,16425,14890],{"class":271},[41,16427,16428],{"class":275}," m_H;\n",[41,16430,16431],{"class":43,"line":2742},[41,16432,2326],{"class":275},[41,16434,16435],{"class":43,"line":2748},[41,16436,16437],{"class":47},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[41,16439,16440,16443,16446,16448,16451,16453],{"class":43,"line":2754},[41,16441,16442],{"class":271},"    bool",[41,16444,16445],{"class":54}," isEqual",[41,16447,276],{"class":275},[41,16449,16450],{"class":54},"Cube",[41,16452,2987],{"class":5354},[41,16454,282],{"class":275},[41,16456,16457],{"class":43,"line":2759},[41,16458,2169],{"class":275},[41,16460,16461,16463,16466,16469,16471,16473,16476,16478,16481,16484,16486,16488,16491,16493,16495,16498,16500,16502],{"class":43,"line":8086},[41,16462,2635],{"class":271},[41,16464,16465],{"class":275}," (c.",[41,16467,16468],{"class":54},"getLength",[41,16470,13188],{"class":275},[41,16472,3087],{"class":271},[41,16474,16475],{"class":275}," m_L ",[41,16477,1855],{"class":271},[41,16479,16480],{"class":275}," c.",[41,16482,16483],{"class":54},"getWidth",[41,16485,13188],{"class":275},[41,16487,3087],{"class":271},[41,16489,16490],{"class":275}," m_W ",[41,16492,1855],{"class":271},[41,16494,16480],{"class":275},[41,16496,16497],{"class":54},"getHeight",[41,16499,13188],{"class":275},[41,16501,3087],{"class":271},[41,16503,16504],{"class":275}," m_H)\n",[41,16506,16507],{"class":43,"line":8110},[41,16508,2648],{"class":275},[41,16510,16511,16513,16516],{"class":43,"line":8115},[41,16512,15870],{"class":271},[41,16514,16515],{"class":58}," true",[41,16517,1434],{"class":275},[41,16519,16520],{"class":43,"line":8121},[41,16521,2667],{"class":275},[41,16523,16524],{"class":43,"line":8148},[41,16525,2708],{"class":271},[41,16527,16528],{"class":43,"line":8153},[41,16529,2648],{"class":275},[41,16531,16532,16534,16537],{"class":43,"line":8159},[41,16533,15870],{"class":271},[41,16535,16536],{"class":58}," false",[41,16538,1434],{"class":275},[41,16540,16541],{"class":43,"line":8171},[41,16542,2667],{"class":275},[41,16544,16545],{"class":43,"line":8183},[41,16546,2326],{"class":275},[41,16548,16549],{"class":43,"line":8195},[41,16550,16551],{"class":47},"    \u002F\u002F私有属性\n",[41,16553,16554],{"class":43,"line":9854},[41,16555,15360],{"class":271},[41,16557,16558,16560],{"class":43,"line":9879},[41,16559,2124],{"class":271},[41,16561,16380],{"class":275},[41,16563,16564,16566],{"class":43,"line":9902},[41,16565,2124],{"class":271},[41,16567,16404],{"class":275},[41,16569,16570,16572],{"class":43,"line":9926},[41,16571,2124],{"class":271},[41,16573,16428],{"class":275},[41,16575,16576],{"class":43,"line":9931},[41,16577,80],{"emptyLinePlaceholder":79},[41,16579,16580],{"class":43,"line":9936},[41,16581,4133],{"class":275},[41,16583,16584],{"class":43,"line":9941},[41,16585,16586],{"class":47},"\u002F\u002F全局函数判断两个立方体是否相等\n",[41,16588,16589,16591,16593,16595,16597,16600,16602,16604,16607],{"class":43,"line":9950},[41,16590,1495],{"class":271},[41,16592,16445],{"class":54},[41,16594,276],{"class":275},[41,16596,16450],{"class":54},[41,16598,16599],{"class":5354}," c1",[41,16601,651],{"class":275},[41,16603,16450],{"class":54},[41,16605,16606],{"class":5354}," c2",[41,16608,282],{"class":275},[41,16610,16611],{"class":43,"line":9955},[41,16612,1687],{"class":275},[41,16614,16615,16617,16620,16622,16624,16626,16629,16631,16634,16636,16638,16640,16642,16644,16646,16648,16650,16652,16654,16656,16658,16660,16662,16664],{"class":43,"line":9961},[41,16616,4228],{"class":271},[41,16618,16619],{"class":275}," (c1.",[41,16621,16468],{"class":54},[41,16623,13188],{"class":275},[41,16625,3087],{"class":271},[41,16627,16628],{"class":275}," c2.",[41,16630,16468],{"class":54},[41,16632,16633],{"class":275},"()) ",[41,16635,1855],{"class":271},[41,16637,16619],{"class":275},[41,16639,16483],{"class":54},[41,16641,13188],{"class":275},[41,16643,3087],{"class":271},[41,16645,16628],{"class":275},[41,16647,16483],{"class":54},[41,16649,16633],{"class":275},[41,16651,1855],{"class":271},[41,16653,16619],{"class":275},[41,16655,16497],{"class":54},[41,16657,13188],{"class":275},[41,16659,3087],{"class":271},[41,16661,16628],{"class":275},[41,16663,16497],{"class":54},[41,16665,16666],{"class":275},"());\n",[41,16668,16669],{"class":43,"line":9982},[41,16670,1706],{"class":275},[41,16672,16673,16675,16677],{"class":43,"line":9988},[41,16674,279],{"class":271},[41,16676,2112],{"class":54},[41,16678,2115],{"class":275},[41,16680,16681],{"class":43,"line":10002},[41,16682,1687],{"class":275},[41,16684,16685],{"class":43,"line":10008},[41,16686,16687],{"class":275},"    Cube c1;\n",[41,16689,16690],{"class":43,"line":10035},[41,16691,16692],{"class":47},"    \u002F\u002F输入立方体的长宽高\n",[41,16694,16695,16697,16699,16702,16704],{"class":43,"line":10044},[41,16696,1692],{"class":275},[41,16698,1317],{"class":271},[41,16700,16701],{"class":378},"\"请输入第一个立方体的长、宽、高：\"",[41,16703,1317],{"class":271},[41,16705,1339],{"class":275},[41,16707,16708,16710],{"class":43,"line":10050},[41,16709,2124],{"class":271},[41,16711,16712],{"class":275}," l,w,h,l1,w1,h1;\n",[41,16714,16715,16717,16719,16721,16723,16725,16727],{"class":43,"line":10058},[41,16716,2151],{"class":275},[41,16718,1570],{"class":271},[41,16720,791],{"class":275},[41,16722,1570],{"class":271},[41,16724,1068],{"class":275},[41,16726,1570],{"class":271},[41,16728,16265],{"class":275},[41,16730,16731,16734,16737],{"class":43,"line":10063},[41,16732,16733],{"class":275},"    c1.",[41,16735,16736],{"class":54},"setLwh",[41,16738,16739],{"class":275},"(l,w,h);\n",[41,16741,16743],{"class":43,"line":16742},66,[41,16744,16745],{"class":47},"    \u002F\u002F面积\n",[41,16747,16749,16751,16753,16756,16758,16760,16763,16765,16767],{"class":43,"line":16748},67,[41,16750,1692],{"class":275},[41,16752,1317],{"class":271},[41,16754,16755],{"class":378},"\"立方体的表面积为：\"",[41,16757,1317],{"class":271},[41,16759,14968],{"class":275},[41,16761,16762],{"class":54},"mianji",[41,16764,2565],{"class":275},[41,16766,1317],{"class":271},[41,16768,1339],{"class":275},[41,16770,16772],{"class":43,"line":16771},68,[41,16773,16774],{"class":47},"    \u002F\u002F体积\n",[41,16776,16778,16780,16782,16785,16787,16789,16792,16794,16796],{"class":43,"line":16777},69,[41,16779,1692],{"class":275},[41,16781,1317],{"class":271},[41,16783,16784],{"class":378},"\"立方体的体积为：\"",[41,16786,1317],{"class":271},[41,16788,14968],{"class":275},[41,16790,16791],{"class":54},"tiji",[41,16793,2565],{"class":275},[41,16795,1317],{"class":271},[41,16797,1339],{"class":275},[41,16799,16801,16803,16805,16808,16810],{"class":43,"line":16800},70,[41,16802,1692],{"class":275},[41,16804,1317],{"class":271},[41,16806,16807],{"class":378},"\"请输入第二个立方体的长、宽、高：\"",[41,16809,1317],{"class":271},[41,16811,1339],{"class":275},[41,16813,16815,16817,16819,16822,16824,16827,16829],{"class":43,"line":16814},71,[41,16816,2151],{"class":275},[41,16818,1570],{"class":271},[41,16820,16821],{"class":275},"l1",[41,16823,1570],{"class":271},[41,16825,16826],{"class":275},"w1",[41,16828,1570],{"class":271},[41,16830,16831],{"class":275},"h1;\n",[41,16833,16835],{"class":43,"line":16834},72,[41,16836,16837],{"class":275},"    Cube c2;\n",[41,16839,16841,16844,16846],{"class":43,"line":16840},73,[41,16842,16843],{"class":275},"    c2.",[41,16845,16736],{"class":54},[41,16847,16848],{"class":275},"(l1,w1,h1);\n",[41,16850,16852,16854,16856,16859,16861,16864,16866,16868,16870],{"class":43,"line":16851},74,[41,16853,1692],{"class":275},[41,16855,1317],{"class":271},[41,16857,16858],{"class":378},"\"第二个立方体的表面积为：\"",[41,16860,1317],{"class":271},[41,16862,16863],{"class":275},"c2.",[41,16865,16762],{"class":54},[41,16867,2565],{"class":275},[41,16869,1317],{"class":271},[41,16871,1339],{"class":275},[41,16873,16875,16877,16879,16882,16884,16886,16888,16890,16892],{"class":43,"line":16874},75,[41,16876,1692],{"class":275},[41,16878,1317],{"class":271},[41,16880,16881],{"class":378},"\"第二个立方体的体积为：\"",[41,16883,1317],{"class":271},[41,16885,16863],{"class":275},[41,16887,16791],{"class":54},[41,16889,2565],{"class":275},[41,16891,1317],{"class":271},[41,16893,1339],{"class":275},[41,16895,16897],{"class":43,"line":16896},76,[41,16898,80],{"emptyLinePlaceholder":79},[41,16900,16902],{"class":43,"line":16901},77,[41,16903,16904],{"class":47},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[41,16906,16908,16910,16912,16915,16917],{"class":43,"line":16907},78,[41,16909,1692],{"class":275},[41,16911,1317],{"class":271},[41,16913,16914],{"class":378},"\"内部函数判断结果：\"",[41,16916,1317],{"class":271},[41,16918,1339],{"class":275},[41,16920,16922,16924,16926,16929],{"class":43,"line":16921},79,[41,16923,3239],{"class":271},[41,16925,16619],{"class":275},[41,16927,16928],{"class":54},"isEqual",[41,16930,16931],{"class":275},"(c2))\n",[41,16933,16935],{"class":43,"line":16934},80,[41,16936,2169],{"class":275},[41,16938,16940,16942,16944,16947,16949],{"class":43,"line":16939},81,[41,16941,3589],{"class":275},[41,16943,1317],{"class":271},[41,16945,16946],{"class":378},"\"两个立方体相等\"",[41,16948,1317],{"class":271},[41,16950,1339],{"class":275},[41,16952,16954],{"class":43,"line":16953},82,[41,16955,2326],{"class":275},[41,16957,16959],{"class":43,"line":16958},83,[41,16960,16961],{"class":271},"    else\n",[41,16963,16965],{"class":43,"line":16964},84,[41,16966,2169],{"class":275},[41,16968,16970,16972,16974,16977,16979],{"class":43,"line":16969},85,[41,16971,3589],{"class":275},[41,16973,1317],{"class":271},[41,16975,16976],{"class":378},"\"两个立方体不相等\"",[41,16978,1317],{"class":271},[41,16980,1339],{"class":275},[41,16982,16984],{"class":43,"line":16983},86,[41,16985,2326],{"class":275},[41,16987,16989],{"class":43,"line":16988},87,[41,16990,80],{"emptyLinePlaceholder":79},[41,16992,16994,16996,16998,17001,17003],{"class":43,"line":16993},88,[41,16995,1692],{"class":275},[41,16997,1317],{"class":271},[41,16999,17000],{"class":378},"\"全局函数判断结果：\"",[41,17002,1317],{"class":271},[41,17004,1339],{"class":275},[41,17006,17008,17010,17012,17014],{"class":43,"line":17007},89,[41,17009,3239],{"class":271},[41,17011,1798],{"class":275},[41,17013,16928],{"class":54},[41,17015,17016],{"class":275},"(c1, c2))\n",[41,17018,17020],{"class":43,"line":17019},90,[41,17021,2169],{"class":275},[41,17023,17025,17027,17029,17031,17033],{"class":43,"line":17024},91,[41,17026,3589],{"class":275},[41,17028,1317],{"class":271},[41,17030,16946],{"class":378},[41,17032,1317],{"class":271},[41,17034,1339],{"class":275},[41,17036,17038],{"class":43,"line":17037},92,[41,17039,2326],{"class":275},[41,17041,17043],{"class":43,"line":17042},93,[41,17044,16961],{"class":271},[41,17046,17048],{"class":43,"line":17047},94,[41,17049,2169],{"class":275},[41,17051,17053,17055,17057,17059,17061],{"class":43,"line":17052},95,[41,17054,3589],{"class":275},[41,17056,1317],{"class":271},[41,17058,16976],{"class":378},[41,17060,1317],{"class":271},[41,17062,1339],{"class":275},[41,17064,17066],{"class":43,"line":17065},96,[41,17067,2326],{"class":275},[41,17069,17071],{"class":43,"line":17070},97,[41,17072,1706],{"class":275},[224,17074,17075],{"start":51},[227,17076,17077],{},[423,17078,17079],{},"练习案例2：点和圆的关系",[1280,17081,17082],{},[227,17083,17084],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[32,17086,17088],{"className":262,"code":17087,"language":264,"meta":37,"style":37},"#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",[24,17089,17090,17096,17106,17113,17120,17124,17128,17133,17167,17172,17188,17202,17206,17210,17217,17224,17228,17234,17238,17242,17246,17268,17291,17296,17310,17325,17329,17333,17339,17344,17349,17353,17379,17383,17413,17441,17469,17486,17490,17503,17507,17511,17515,17528,17532,17536,17544,17548,17552,17556,17561,17565,17576,17583,17592,17602,17613,17620,17633,17644,17654,17665,17672,17686,17691,17701,17709],{"__ignoreMap":37},[41,17091,17092,17094],{"class":43,"line":44},[41,17093,2089],{"class":271},[41,17095,2092],{"class":378},[41,17097,17098,17100,17102,17104],{"class":43,"line":51},[41,17099,2097],{"class":271},[41,17101,2100],{"class":271},[41,17103,2103],{"class":54},[41,17105,1434],{"class":275},[41,17107,17108,17110],{"class":43,"line":62},[41,17109,2089],{"class":271},[41,17111,17112],{"class":378},"\u003Ccmath>\n",[41,17114,17115,17117],{"class":43,"line":70},[41,17116,14832],{"class":271},[41,17118,17119],{"class":54}," Point\n",[41,17121,17122],{"class":43,"line":76},[41,17123,1687],{"class":275},[41,17125,17126],{"class":43,"line":83},[41,17127,14854],{"class":271},[41,17129,17130],{"class":43,"line":89},[41,17131,17132],{"class":47},"    \u002F\u002F赋值\n",[41,17134,17135,17137,17140,17142,17144,17147,17149,17151,17154,17157,17159,17162,17164],{"class":43,"line":96},[41,17136,15047],{"class":271},[41,17138,17139],{"class":54}," setPoint",[41,17141,276],{"class":275},[41,17143,14175],{"class":271},[41,17145,17146],{"class":5354}," x",[41,17148,12573],{"class":275},[41,17150,14175],{"class":271},[41,17152,17153],{"class":5354}," y",[41,17155,17156],{"class":275},") { m_x ",[41,17158,321],{"class":271},[41,17160,17161],{"class":275}," x; m_y ",[41,17163,321],{"class":271},[41,17165,17166],{"class":275}," y; }\n",[41,17168,17169],{"class":43,"line":104},[41,17170,17171],{"class":47},"    \u002F\u002F获取坐标\n",[41,17173,17174,17176,17179,17182,17185],{"class":43,"line":176},[41,17175,14876],{"class":271},[41,17177,17178],{"class":54}," getX",[41,17180,17181],{"class":275},"() { ",[41,17183,17184],{"class":271},"return",[41,17186,17187],{"class":275}," m_x; }\n",[41,17189,17190,17192,17195,17197,17199],{"class":43,"line":184},[41,17191,14876],{"class":271},[41,17193,17194],{"class":54}," getY",[41,17196,17181],{"class":275},[41,17198,17184],{"class":271},[41,17200,17201],{"class":275}," m_y; }\n",[41,17203,17204],{"class":43,"line":1757},[41,17205,80],{"emptyLinePlaceholder":79},[41,17207,17208],{"class":43,"line":1763},[41,17209,15360],{"class":271},[41,17211,17212,17214],{"class":43,"line":1768},[41,17213,14876],{"class":271},[41,17215,17216],{"class":275}," m_x;\n",[41,17218,17219,17221],{"class":43,"line":1782},[41,17220,14876],{"class":271},[41,17222,17223],{"class":275}," m_y;\n",[41,17225,17226],{"class":43,"line":1787},[41,17227,4133],{"class":275},[41,17229,17230,17232],{"class":43,"line":1793},[41,17231,14832],{"class":271},[41,17233,14835],{"class":54},[41,17235,17236],{"class":43,"line":1814},[41,17237,1687],{"class":275},[41,17239,17240],{"class":43,"line":1819},[41,17241,14854],{"class":271},[41,17243,17244],{"class":43,"line":1833},[41,17245,17132],{"class":47},[41,17247,17248,17250,17253,17255,17257,17260,17263,17265],{"class":43,"line":1838},[41,17249,15047],{"class":271},[41,17251,17252],{"class":54}," setRadius",[41,17254,276],{"class":275},[41,17256,14175],{"class":271},[41,17258,17259],{"class":5354}," r",[41,17261,17262],{"class":275},") { m_r ",[41,17264,321],{"class":271},[41,17266,17267],{"class":275}," r; }\n",[41,17269,17270,17272,17275,17277,17280,17283,17286,17288],{"class":43,"line":1867},[41,17271,15047],{"class":271},[41,17273,17274],{"class":54}," setCenter",[41,17276,276],{"class":275},[41,17278,17279],{"class":54},"Point",[41,17281,17282],{"class":5354}," center",[41,17284,17285],{"class":275},") { m_center ",[41,17287,321],{"class":271},[41,17289,17290],{"class":275}," center; }\n",[41,17292,17293],{"class":43,"line":1872},[41,17294,17295],{"class":47},"    \u002F\u002F获取属性\n",[41,17297,17298,17300,17303,17305,17307],{"class":43,"line":1889},[41,17299,14876],{"class":271},[41,17301,17302],{"class":54}," getRadius",[41,17304,17181],{"class":275},[41,17306,17184],{"class":271},[41,17308,17309],{"class":275}," m_r; }\n",[41,17311,17312,17315,17318,17320,17322],{"class":43,"line":1894},[41,17313,17314],{"class":54},"    Point",[41,17316,17317],{"class":54}," getCenter",[41,17319,17181],{"class":275},[41,17321,17184],{"class":271},[41,17323,17324],{"class":275}," m_center; }\n",[41,17326,17327],{"class":43,"line":1899},[41,17328,80],{"emptyLinePlaceholder":79},[41,17330,17331],{"class":43,"line":1904},[41,17332,15360],{"class":271},[41,17334,17335,17337],{"class":43,"line":1918},[41,17336,14876],{"class":271},[41,17338,14866],{"class":275},[41,17340,17341],{"class":43,"line":1923},[41,17342,17343],{"class":47},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[41,17345,17346],{"class":43,"line":2715},[41,17347,17348],{"class":275},"    Point m_center;\n",[41,17350,17351],{"class":43,"line":2729},[41,17352,4133],{"class":275},[41,17354,17355,17357,17360,17362,17365,17367,17369,17371,17373,17375,17377],{"class":43,"line":2737},[41,17356,5502],{"class":271},[41,17358,17359],{"class":54}," isInCircle",[41,17361,276],{"class":275},[41,17363,17364],{"class":54},"Circle",[41,17366,10722],{"class":271},[41,17368,561],{"class":5354},[41,17370,651],{"class":275},[41,17372,17279],{"class":54},[41,17374,10722],{"class":271},[41,17376,20],{"class":5354},[41,17378,282],{"class":275},[41,17380,17381],{"class":43,"line":2742},[41,17382,1687],{"class":275},[41,17384,17385,17387,17390,17392,17394,17397,17400,17403,17405,17407,17409,17411],{"class":43,"line":2748},[41,17386,14876],{"class":271},[41,17388,17389],{"class":275}," dx ",[41,17391,321],{"class":271},[41,17393,16480],{"class":275},[41,17395,17396],{"class":54},"getCenter",[41,17398,17399],{"class":275},"().",[41,17401,17402],{"class":54},"getX",[41,17404,13188],{"class":275},[41,17406,805],{"class":271},[41,17408,16026],{"class":275},[41,17410,17402],{"class":54},[41,17412,5774],{"class":275},[41,17414,17415,17417,17420,17422,17424,17426,17428,17431,17433,17435,17437,17439],{"class":43,"line":2754},[41,17416,14876],{"class":271},[41,17418,17419],{"class":275}," dy ",[41,17421,321],{"class":271},[41,17423,16480],{"class":275},[41,17425,17396],{"class":54},[41,17427,17399],{"class":275},[41,17429,17430],{"class":54},"getY",[41,17432,13188],{"class":275},[41,17434,805],{"class":271},[41,17436,16026],{"class":275},[41,17438,17430],{"class":54},[41,17440,5774],{"class":275},[41,17442,17443,17445,17448,17450,17453,17456,17458,17460,17462,17464,17466],{"class":43,"line":2759},[41,17444,14876],{"class":271},[41,17446,17447],{"class":275}," distance ",[41,17449,321],{"class":271},[41,17451,17452],{"class":54}," sqrt",[41,17454,17455],{"class":275},"(dx ",[41,17457,728],{"class":271},[41,17459,17389],{"class":275},[41,17461,754],{"class":271},[41,17463,17419],{"class":275},[41,17465,728],{"class":271},[41,17467,17468],{"class":275}," dy);\n",[41,17470,17471,17473,17476,17478,17480,17483],{"class":43,"line":8086},[41,17472,3239],{"class":271},[41,17474,17475],{"class":275}," (distance ",[41,17477,1183],{"class":271},[41,17479,16480],{"class":275},[41,17481,17482],{"class":54},"getRadius",[41,17484,17485],{"class":275},"())\n",[41,17487,17488],{"class":43,"line":8110},[41,17489,2169],{"class":275},[41,17491,17492,17494,17496,17499,17501],{"class":43,"line":8115},[41,17493,9807],{"class":275},[41,17495,1317],{"class":271},[41,17497,17498],{"class":378}," \"点在圆内\"",[41,17500,1585],{"class":271},[41,17502,8978],{"class":275},[41,17504,17505],{"class":43,"line":8121},[41,17506,2326],{"class":275},[41,17508,17509],{"class":43,"line":8148},[41,17510,16961],{"class":271},[41,17512,17513],{"class":43,"line":8153},[41,17514,2169],{"class":275},[41,17516,17517,17519,17521,17524,17526],{"class":43,"line":8159},[41,17518,9807],{"class":275},[41,17520,1317],{"class":271},[41,17522,17523],{"class":378}," \"点在圆外\"",[41,17525,1585],{"class":271},[41,17527,8978],{"class":275},[41,17529,17530],{"class":43,"line":8171},[41,17531,2326],{"class":275},[41,17533,17534],{"class":43,"line":8183},[41,17535,1706],{"class":275},[41,17537,17538,17540,17542],{"class":43,"line":8195},[41,17539,279],{"class":271},[41,17541,2112],{"class":54},[41,17543,2115],{"class":275},[41,17545,17546],{"class":43,"line":9854},[41,17547,1687],{"class":275},[41,17549,17550],{"class":43,"line":9879},[41,17551,15191],{"class":47},[41,17553,17554],{"class":43,"line":9902},[41,17555,14938],{"class":275},[41,17557,17558],{"class":43,"line":9926},[41,17559,17560],{"class":275},"    Point p1;\n",[41,17562,17563],{"class":43,"line":9931},[41,17564,17132],{"class":47},[41,17566,17567,17569,17571,17574],{"class":43,"line":9936},[41,17568,1692],{"class":275},[41,17570,1317],{"class":271},[41,17572,17573],{"class":378},"\"请输入圆的半径：\"",[41,17575,1434],{"class":275},[41,17577,17578,17580],{"class":43,"line":9941},[41,17579,14876],{"class":271},[41,17581,17582],{"class":275}," r;\n",[41,17584,17585,17587,17589],{"class":43,"line":9950},[41,17586,2151],{"class":275},[41,17588,1570],{"class":271},[41,17590,17591],{"class":275},"r;\n",[41,17593,17594,17596,17599],{"class":43,"line":9955},[41,17595,16733],{"class":275},[41,17597,17598],{"class":54},"setRadius",[41,17600,17601],{"class":275},"(r);\n",[41,17603,17604,17606,17608,17611],{"class":43,"line":9961},[41,17605,1692],{"class":275},[41,17607,1317],{"class":271},[41,17609,17610],{"class":378},"\"请输入圆心坐标：\"",[41,17612,1434],{"class":275},[41,17614,17615,17617],{"class":43,"line":9982},[41,17616,14876],{"class":271},[41,17618,17619],{"class":275}," x, y;\n",[41,17621,17622,17624,17626,17628,17630],{"class":43,"line":9988},[41,17623,2151],{"class":275},[41,17625,1570],{"class":271},[41,17627,1093],{"class":275},[41,17629,1570],{"class":271},[41,17631,17632],{"class":275},"y;\n",[41,17634,17635,17638,17641],{"class":43,"line":10002},[41,17636,17637],{"class":275},"    p1.",[41,17639,17640],{"class":54},"setPoint",[41,17642,17643],{"class":275},"(x, y);\n",[41,17645,17646,17648,17651],{"class":43,"line":10008},[41,17647,16733],{"class":275},[41,17649,17650],{"class":54},"setCenter",[41,17652,17653],{"class":275},"(p1);\n",[41,17655,17656,17658,17660,17663],{"class":43,"line":10035},[41,17657,1692],{"class":275},[41,17659,1317],{"class":271},[41,17661,17662],{"class":378},"\"请输入测试点坐标：\"",[41,17664,1434],{"class":275},[41,17666,17667,17669],{"class":43,"line":10044},[41,17668,14876],{"class":271},[41,17670,17671],{"class":275}," x1, y1;\n",[41,17673,17674,17676,17678,17681,17683],{"class":43,"line":10050},[41,17675,2151],{"class":275},[41,17677,1570],{"class":271},[41,17679,17680],{"class":275},"x1",[41,17682,1570],{"class":271},[41,17684,17685],{"class":275},"y1;\n",[41,17687,17688],{"class":43,"line":10058},[41,17689,17690],{"class":275},"    Point p2;\n",[41,17692,17693,17696,17698],{"class":43,"line":10063},[41,17694,17695],{"class":275},"    p2.",[41,17697,17640],{"class":54},[41,17699,17700],{"class":275},"(x1, y1);\n",[41,17702,17703,17706],{"class":43,"line":16742},[41,17704,17705],{"class":54},"    isInCircle",[41,17707,17708],{"class":275},"(c1, p2);\n",[41,17710,17711],{"class":43,"line":16748},[41,17712,1706],{"class":275},[20,17714,17715],{},"在类中可以让另一个类作为本来的成员",[20,17717,17718],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[20,17720,17721],{},"创建point.h",[32,17723,17725],{"className":262,"code":17724,"language":264,"meta":37,"style":37},"#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",[24,17726,17727,17738,17744,17754,17760,17764,17769,17773,17777,17797,17801,17809,17817,17821,17825,17831,17837],{"__ignoreMap":37},[41,17728,17729,17732,17735],{"class":43,"line":44},[41,17730,17731],{"class":271},"#pragma",[41,17733,17734],{"class":54}," once",[41,17736,17737],{"class":47}," \u002F\u002F防止头文件重复包含\n",[41,17739,17740,17742],{"class":43,"line":51},[41,17741,2089],{"class":271},[41,17743,2092],{"class":378},[41,17745,17746,17748,17750,17752],{"class":43,"line":62},[41,17747,2097],{"class":271},[41,17749,2100],{"class":271},[41,17751,2103],{"class":54},[41,17753,1434],{"class":275},[41,17755,17756,17758],{"class":43,"line":70},[41,17757,14832],{"class":271},[41,17759,17119],{"class":54},[41,17761,17762],{"class":43,"line":76},[41,17763,1687],{"class":275},[41,17765,17766],{"class":43,"line":83},[41,17767,17768],{"class":47},"\u002F\u002F做好声明与变量定义就可以\n",[41,17770,17771],{"class":43,"line":89},[41,17772,14854],{"class":271},[41,17774,17775],{"class":43,"line":96},[41,17776,17132],{"class":47},[41,17778,17779,17781,17783,17785,17787,17789,17791,17793,17795],{"class":43,"line":104},[41,17780,15047],{"class":271},[41,17782,17139],{"class":54},[41,17784,276],{"class":275},[41,17786,14175],{"class":271},[41,17788,17146],{"class":5354},[41,17790,12573],{"class":275},[41,17792,14175],{"class":271},[41,17794,17153],{"class":5354},[41,17796,2857],{"class":275},[41,17798,17799],{"class":43,"line":176},[41,17800,17171],{"class":47},[41,17802,17803,17805,17807],{"class":43,"line":184},[41,17804,14876],{"class":271},[41,17806,17178],{"class":54},[41,17808,5774],{"class":275},[41,17810,17811,17813,17815],{"class":43,"line":1757},[41,17812,14876],{"class":271},[41,17814,17194],{"class":54},[41,17816,5774],{"class":275},[41,17818,17819],{"class":43,"line":1763},[41,17820,80],{"emptyLinePlaceholder":79},[41,17822,17823],{"class":43,"line":1768},[41,17824,15360],{"class":271},[41,17826,17827,17829],{"class":43,"line":1782},[41,17828,14876],{"class":271},[41,17830,17216],{"class":275},[41,17832,17833,17835],{"class":43,"line":1787},[41,17834,14876],{"class":271},[41,17836,17223],{"class":275},[41,17838,17839],{"class":43,"line":1793},[41,17840,4133],{"class":275},[20,17842,17843],{},"创建point.cpp",[32,17845,17847],{"className":262,"code":17846,"language":264,"meta":37,"style":37},"#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",[24,17848,17849,17856,17861,17895,17899,17915],{"__ignoreMap":37},[41,17850,17851,17853],{"class":43,"line":44},[41,17852,2089],{"class":271},[41,17854,17855],{"class":378},"\u003Cpoint.h>\n",[41,17857,17858],{"class":43,"line":51},[41,17859,17860],{"class":47},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[41,17862,17863,17865,17868,17871,17873,17875,17877,17879,17881,17883,17885,17887,17889,17891,17893],{"class":43,"line":62},[41,17864,15047],{"class":271},[41,17866,17867],{"class":54}," Point",[41,17869,17870],{"class":275},"::",[41,17872,17640],{"class":54},[41,17874,276],{"class":275},[41,17876,14175],{"class":271},[41,17878,17146],{"class":5354},[41,17880,12573],{"class":275},[41,17882,14175],{"class":271},[41,17884,17153],{"class":5354},[41,17886,17156],{"class":275},[41,17888,321],{"class":271},[41,17890,17161],{"class":275},[41,17892,321],{"class":271},[41,17894,17166],{"class":275},[41,17896,17897],{"class":43,"line":70},[41,17898,17171],{"class":47},[41,17900,17901,17903,17905,17907,17909,17911,17913],{"class":43,"line":76},[41,17902,14876],{"class":271},[41,17904,17867],{"class":54},[41,17906,17870],{"class":275},[41,17908,17402],{"class":54},[41,17910,17181],{"class":275},[41,17912,17184],{"class":271},[41,17914,17187],{"class":275},[41,17916,17917,17919,17921,17923,17925,17927,17929],{"class":43,"line":83},[41,17918,14876],{"class":271},[41,17920,17867],{"class":54},[41,17922,17870],{"class":275},[41,17924,17430],{"class":54},[41,17926,17181],{"class":275},[41,17928,17184],{"class":271},[41,17930,17201],{"class":275},[20,17932,17933],{},"创建circle.h",[32,17935,17937],{"className":262,"code":17936,"language":264,"meta":37,"style":37},"#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",[24,17938,17939,17946,17952,17962,17968,17974,17978,17982,17986,18000,18014,18018,18026,18034,18038,18042,18048,18052,18056],{"__ignoreMap":37},[41,17940,17941,17943],{"class":43,"line":44},[41,17942,17731],{"class":271},[41,17944,17945],{"class":54}," once\n",[41,17947,17948,17950],{"class":43,"line":51},[41,17949,2089],{"class":271},[41,17951,2092],{"class":378},[41,17953,17954,17956,17958,17960],{"class":43,"line":62},[41,17955,2097],{"class":271},[41,17957,2100],{"class":271},[41,17959,2103],{"class":54},[41,17961,1434],{"class":275},[41,17963,17964,17966],{"class":43,"line":70},[41,17965,2089],{"class":271},[41,17967,17855],{"class":378},[41,17969,17970,17972],{"class":43,"line":76},[41,17971,14832],{"class":271},[41,17973,14835],{"class":54},[41,17975,17976],{"class":43,"line":83},[41,17977,1687],{"class":275},[41,17979,17980],{"class":43,"line":89},[41,17981,14854],{"class":271},[41,17983,17984],{"class":43,"line":96},[41,17985,17132],{"class":47},[41,17987,17988,17990,17992,17994,17996,17998],{"class":43,"line":104},[41,17989,15047],{"class":271},[41,17991,17252],{"class":54},[41,17993,276],{"class":275},[41,17995,14175],{"class":271},[41,17997,17259],{"class":5354},[41,17999,2857],{"class":275},[41,18001,18002,18004,18006,18008,18010,18012],{"class":43,"line":176},[41,18003,15047],{"class":271},[41,18005,17274],{"class":54},[41,18007,276],{"class":275},[41,18009,17279],{"class":54},[41,18011,17282],{"class":5354},[41,18013,2857],{"class":275},[41,18015,18016],{"class":43,"line":184},[41,18017,17295],{"class":47},[41,18019,18020,18022,18024],{"class":43,"line":1757},[41,18021,14876],{"class":271},[41,18023,17302],{"class":54},[41,18025,5774],{"class":275},[41,18027,18028,18030,18032],{"class":43,"line":1763},[41,18029,17314],{"class":54},[41,18031,17317],{"class":54},[41,18033,5774],{"class":275},[41,18035,18036],{"class":43,"line":1768},[41,18037,80],{"emptyLinePlaceholder":79},[41,18039,18040],{"class":43,"line":1782},[41,18041,15360],{"class":271},[41,18043,18044,18046],{"class":43,"line":1787},[41,18045,14876],{"class":271},[41,18047,14866],{"class":275},[41,18049,18050],{"class":43,"line":1793},[41,18051,17343],{"class":47},[41,18053,18054],{"class":43,"line":1814},[41,18055,17348],{"class":275},[41,18057,18058],{"class":43,"line":1819},[41,18059,4133],{"class":275},[20,18061,18062],{},"创建circle.cpp",[32,18064,18066],{"className":262,"code":18065,"language":264,"meta":37,"style":37},"#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",[24,18067,18068,18075,18098,18120,18125,18141],{"__ignoreMap":37},[41,18069,18070,18072],{"class":43,"line":44},[41,18071,2089],{"class":271},[41,18073,18074],{"class":378},"\u003Ccircle.h>\n",[41,18076,18077,18079,18082,18084,18086,18088,18090,18092,18094,18096],{"class":43,"line":51},[41,18078,5502],{"class":271},[41,18080,18081],{"class":54}," Circle",[41,18083,17870],{"class":275},[41,18085,17598],{"class":54},[41,18087,276],{"class":275},[41,18089,14175],{"class":271},[41,18091,17259],{"class":5354},[41,18093,17262],{"class":275},[41,18095,321],{"class":271},[41,18097,17267],{"class":275},[41,18099,18100,18102,18104,18106,18108,18110,18112,18114,18116,18118],{"class":43,"line":62},[41,18101,5502],{"class":271},[41,18103,18081],{"class":54},[41,18105,17870],{"class":275},[41,18107,17650],{"class":54},[41,18109,276],{"class":275},[41,18111,17279],{"class":54},[41,18113,17282],{"class":5354},[41,18115,17285],{"class":275},[41,18117,321],{"class":271},[41,18119,17290],{"class":275},[41,18121,18122],{"class":43,"line":70},[41,18123,18124],{"class":47},"\u002F\u002F获取属性\n",[41,18126,18127,18129,18131,18133,18135,18137,18139],{"class":43,"line":76},[41,18128,14175],{"class":271},[41,18130,18081],{"class":54},[41,18132,17870],{"class":275},[41,18134,17482],{"class":54},[41,18136,17181],{"class":275},[41,18138,17184],{"class":271},[41,18140,17309],{"class":275},[41,18142,18143,18145,18147,18149,18151,18153,18155],{"class":43,"line":83},[41,18144,17279],{"class":54},[41,18146,18081],{"class":54},[41,18148,17870],{"class":275},[41,18150,17396],{"class":54},[41,18152,17181],{"class":275},[41,18154,17184],{"class":271},[41,18156,17324],{"class":275},[20,18158,18159],{},"使用封装的类",[32,18161,18163],{"className":262,"code":18162,"language":264,"meta":37,"style":37},"#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",[24,18164,18165,18171,18181,18187,18193,18217,18221,18247,18273,18297,18311,18315,18327,18331,18335,18339,18351,18355,18359,18367,18371,18375,18379,18383,18387,18397,18403,18411,18419,18429,18435,18447,18455,18463,18473,18479,18491,18495,18503,18509],{"__ignoreMap":37},[41,18166,18167,18169],{"class":43,"line":44},[41,18168,2089],{"class":271},[41,18170,2092],{"class":378},[41,18172,18173,18175,18177,18179],{"class":43,"line":51},[41,18174,2097],{"class":271},[41,18176,2100],{"class":271},[41,18178,2103],{"class":54},[41,18180,1434],{"class":275},[41,18182,18183,18185],{"class":43,"line":62},[41,18184,2089],{"class":271},[41,18186,18074],{"class":378},[41,18188,18189,18191],{"class":43,"line":70},[41,18190,2089],{"class":271},[41,18192,17855],{"class":378},[41,18194,18195,18197,18199,18201,18203,18205,18207,18209,18211,18213,18215],{"class":43,"line":76},[41,18196,5502],{"class":271},[41,18198,17359],{"class":54},[41,18200,276],{"class":275},[41,18202,17364],{"class":54},[41,18204,10722],{"class":271},[41,18206,561],{"class":5354},[41,18208,651],{"class":275},[41,18210,17279],{"class":54},[41,18212,10722],{"class":271},[41,18214,20],{"class":5354},[41,18216,282],{"class":275},[41,18218,18219],{"class":43,"line":83},[41,18220,1687],{"class":275},[41,18222,18223,18225,18227,18229,18231,18233,18235,18237,18239,18241,18243,18245],{"class":43,"line":89},[41,18224,14876],{"class":271},[41,18226,17389],{"class":275},[41,18228,321],{"class":271},[41,18230,16480],{"class":275},[41,18232,17396],{"class":54},[41,18234,17399],{"class":275},[41,18236,17402],{"class":54},[41,18238,13188],{"class":275},[41,18240,805],{"class":271},[41,18242,16026],{"class":275},[41,18244,17402],{"class":54},[41,18246,5774],{"class":275},[41,18248,18249,18251,18253,18255,18257,18259,18261,18263,18265,18267,18269,18271],{"class":43,"line":96},[41,18250,14876],{"class":271},[41,18252,17419],{"class":275},[41,18254,321],{"class":271},[41,18256,16480],{"class":275},[41,18258,17396],{"class":54},[41,18260,17399],{"class":275},[41,18262,17430],{"class":54},[41,18264,13188],{"class":275},[41,18266,805],{"class":271},[41,18268,16026],{"class":275},[41,18270,17430],{"class":54},[41,18272,5774],{"class":275},[41,18274,18275,18277,18279,18281,18283,18285,18287,18289,18291,18293,18295],{"class":43,"line":104},[41,18276,14876],{"class":271},[41,18278,17447],{"class":275},[41,18280,321],{"class":271},[41,18282,17452],{"class":54},[41,18284,17455],{"class":275},[41,18286,728],{"class":271},[41,18288,17389],{"class":275},[41,18290,754],{"class":271},[41,18292,17419],{"class":275},[41,18294,728],{"class":271},[41,18296,17468],{"class":275},[41,18298,18299,18301,18303,18305,18307,18309],{"class":43,"line":176},[41,18300,3239],{"class":271},[41,18302,17475],{"class":275},[41,18304,1183],{"class":271},[41,18306,16480],{"class":275},[41,18308,17482],{"class":54},[41,18310,17485],{"class":275},[41,18312,18313],{"class":43,"line":184},[41,18314,2169],{"class":275},[41,18316,18317,18319,18321,18323,18325],{"class":43,"line":1757},[41,18318,9807],{"class":275},[41,18320,1317],{"class":271},[41,18322,17498],{"class":378},[41,18324,1585],{"class":271},[41,18326,8978],{"class":275},[41,18328,18329],{"class":43,"line":1763},[41,18330,2326],{"class":275},[41,18332,18333],{"class":43,"line":1768},[41,18334,16961],{"class":271},[41,18336,18337],{"class":43,"line":1782},[41,18338,2169],{"class":275},[41,18340,18341,18343,18345,18347,18349],{"class":43,"line":1787},[41,18342,9807],{"class":275},[41,18344,1317],{"class":271},[41,18346,17523],{"class":378},[41,18348,1585],{"class":271},[41,18350,8978],{"class":275},[41,18352,18353],{"class":43,"line":1793},[41,18354,2326],{"class":275},[41,18356,18357],{"class":43,"line":1814},[41,18358,1706],{"class":275},[41,18360,18361,18363,18365],{"class":43,"line":1819},[41,18362,279],{"class":271},[41,18364,2112],{"class":54},[41,18366,2115],{"class":275},[41,18368,18369],{"class":43,"line":1833},[41,18370,1687],{"class":275},[41,18372,18373],{"class":43,"line":1838},[41,18374,15191],{"class":47},[41,18376,18377],{"class":43,"line":1867},[41,18378,14938],{"class":275},[41,18380,18381],{"class":43,"line":1872},[41,18382,17560],{"class":275},[41,18384,18385],{"class":43,"line":1889},[41,18386,17132],{"class":47},[41,18388,18389,18391,18393,18395],{"class":43,"line":1894},[41,18390,1692],{"class":275},[41,18392,1317],{"class":271},[41,18394,17573],{"class":378},[41,18396,1434],{"class":275},[41,18398,18399,18401],{"class":43,"line":1899},[41,18400,14876],{"class":271},[41,18402,17582],{"class":275},[41,18404,18405,18407,18409],{"class":43,"line":1904},[41,18406,2151],{"class":275},[41,18408,1570],{"class":271},[41,18410,17591],{"class":275},[41,18412,18413,18415,18417],{"class":43,"line":1918},[41,18414,16733],{"class":275},[41,18416,17598],{"class":54},[41,18418,17601],{"class":275},[41,18420,18421,18423,18425,18427],{"class":43,"line":1923},[41,18422,1692],{"class":275},[41,18424,1317],{"class":271},[41,18426,17610],{"class":378},[41,18428,1434],{"class":275},[41,18430,18431,18433],{"class":43,"line":2715},[41,18432,14876],{"class":271},[41,18434,17619],{"class":275},[41,18436,18437,18439,18441,18443,18445],{"class":43,"line":2729},[41,18438,2151],{"class":275},[41,18440,1570],{"class":271},[41,18442,1093],{"class":275},[41,18444,1570],{"class":271},[41,18446,17632],{"class":275},[41,18448,18449,18451,18453],{"class":43,"line":2737},[41,18450,17637],{"class":275},[41,18452,17640],{"class":54},[41,18454,17643],{"class":275},[41,18456,18457,18459,18461],{"class":43,"line":2742},[41,18458,16733],{"class":275},[41,18460,17650],{"class":54},[41,18462,17653],{"class":275},[41,18464,18465,18467,18469,18471],{"class":43,"line":2748},[41,18466,1692],{"class":275},[41,18468,1317],{"class":271},[41,18470,17662],{"class":378},[41,18472,1434],{"class":275},[41,18474,18475,18477],{"class":43,"line":2754},[41,18476,14876],{"class":271},[41,18478,17671],{"class":275},[41,18480,18481,18483,18485,18487,18489],{"class":43,"line":2759},[41,18482,2151],{"class":275},[41,18484,1570],{"class":271},[41,18486,17680],{"class":275},[41,18488,1570],{"class":271},[41,18490,17685],{"class":275},[41,18492,18493],{"class":43,"line":8086},[41,18494,17690],{"class":275},[41,18496,18497,18499,18501],{"class":43,"line":8110},[41,18498,17695],{"class":275},[41,18500,17640],{"class":54},[41,18502,17700],{"class":275},[41,18504,18505,18507],{"class":43,"line":8115},[41,18506,17705],{"class":54},[41,18508,17708],{"class":275},[41,18510,18511],{"class":43,"line":8121},[41,18512,1706],{"class":275},[15,18514,18516],{"id":18515},"_82对象的初始化清理","8.2对象的初始化清理",[1280,18518,18519,18522],{},[227,18520,18521],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[227,18523,18524],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[241,18526,18528],{"id":18527},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[20,18530,18531,18532,18535],{},"对象的",[423,18533,18534],{},"初始化和清理","也是两个非常重要的安全问题",[20,18537,18538],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[20,18540,18541],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[20,18543,18544,18545,18548,18549,18552],{},"c++利用了",[423,18546,18547],{},"构造函数","和",[423,18550,18551],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[20,18554,18555,18556],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[423,18557,18558],{},"我们不提供构造和析构，编译器会提供",[20,18560,18561],{},[423,18562,18563],{},"编译器提供的构造函数和析构函数是空实现。",[1280,18565,18566,18569],{},[227,18567,18568],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[227,18570,18571,18572,18575],{},"析构函数：主要作用在于对象",[423,18573,18574],{},"销毁前","系统自动调用，执行一些清理工作。",[20,18577,18578,18581],{},[423,18579,18580],{},"构造函数语法：",[24,18582,18583],{},"类名(){}",[224,18585,18586,18589,18592,18595,18598],{},[227,18587,18588],{},"构造函数，没有返回值也不写void",[227,18590,18591],{},"函数名称与类名相同",[227,18593,18594],{},"构造函数可以有参数，因此可以发生重载",[227,18596,18597],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[227,18599,18600,18601,702],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[24,18602,18603],{},"Person(){}",[20,18605,18606,13933,18609],{},[423,18607,18608],{},"析构函数语法：",[24,18610,18611],{},"~类名(){}",[224,18613,18614,18617,18620,18626],{},[227,18615,18616],{},"析构函数，没有返回值也不写void",[227,18618,18619],{},"函数名称与类名相同,在名称前加上符号  ~",[227,18621,18622,18623],{},"析构函数不可以有参数，因此",[423,18624,18625],{},"不可以发生重载",[227,18627,18628],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[32,18630,18632],{"className":262,"code":18631,"language":264,"meta":37,"style":37},"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",[24,18633,18634,18640,18644,18648,18653,18660,18664,18677,18681,18686,18693,18697,18710,18714,18718,18722,18726,18734,18738,18746,18750,18754,18762,18766,18771,18775,18782,18786,18799,18803,18811],{"__ignoreMap":37},[41,18635,18636,18638],{"class":43,"line":44},[41,18637,14832],{"class":271},[41,18639,15309],{"class":54},[41,18641,18642],{"class":43,"line":51},[41,18643,1687],{"class":275},[41,18645,18646],{"class":43,"line":62},[41,18647,14854],{"class":271},[41,18649,18650],{"class":43,"line":70},[41,18651,18652],{"class":47},"    \u002F\u002F构造函数\n",[41,18654,18655,18658],{"class":43,"line":76},[41,18656,18657],{"class":54},"    Person",[41,18659,2115],{"class":275},[41,18661,18662],{"class":43,"line":83},[41,18663,2169],{"class":275},[41,18665,18666,18668,18670,18673,18675],{"class":43,"line":89},[41,18667,9807],{"class":275},[41,18669,1317],{"class":271},[41,18671,18672],{"class":378}," \"Person的构造函数调用\"",[41,18674,1585],{"class":271},[41,18676,8978],{"class":275},[41,18678,18679],{"class":43,"line":96},[41,18680,2326],{"class":275},[41,18682,18683],{"class":43,"line":104},[41,18684,18685],{"class":47},"    \u002F\u002F析构函数\n",[41,18687,18688,18691],{"class":43,"line":176},[41,18689,18690],{"class":54},"    ~Person",[41,18692,2115],{"class":275},[41,18694,18695],{"class":43,"line":184},[41,18696,2169],{"class":275},[41,18698,18699,18701,18703,18706,18708],{"class":43,"line":1757},[41,18700,9807],{"class":275},[41,18702,1317],{"class":271},[41,18704,18705],{"class":378}," \"Person的析构函数调用\"",[41,18707,1585],{"class":271},[41,18709,8978],{"class":275},[41,18711,18712],{"class":43,"line":1763},[41,18713,2326],{"class":275},[41,18715,18716],{"class":43,"line":1768},[41,18717,80],{"emptyLinePlaceholder":79},[41,18719,18720],{"class":43,"line":1782},[41,18721,4133],{"class":275},[41,18723,18724],{"class":43,"line":1787},[41,18725,80],{"emptyLinePlaceholder":79},[41,18727,18728,18730,18732],{"class":43,"line":1793},[41,18729,5502],{"class":271},[41,18731,5726],{"class":54},[41,18733,2115],{"class":275},[41,18735,18736],{"class":43,"line":1814},[41,18737,1687],{"class":275},[41,18739,18740,18743],{"class":43,"line":1819},[41,18741,18742],{"class":275},"    Person p;",[41,18744,18745],{"class":47},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[41,18747,18748],{"class":43,"line":1833},[41,18749,1706],{"class":275},[41,18751,18752],{"class":43,"line":1838},[41,18753,80],{"emptyLinePlaceholder":79},[41,18755,18756,18758,18760],{"class":43,"line":1867},[41,18757,279],{"class":271},[41,18759,2112],{"class":54},[41,18761,10991],{"class":275},[41,18763,18764],{"class":43,"line":1872},[41,18765,13348],{"class":275},[41,18767,18768],{"class":43,"line":1889},[41,18769,18770],{"class":47},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[41,18772,18773],{"class":43,"line":1894},[41,18774,80],{"emptyLinePlaceholder":79},[41,18776,18777,18779],{"class":43,"line":1899},[41,18778,18742],{"class":275},[41,18780,18781],{"class":47},"\u002F\u002F只有构造函数\n",[41,18783,18784],{"class":43,"line":1904},[41,18785,80],{"emptyLinePlaceholder":79},[41,18787,18788,18790,18792,18794,18796],{"class":43,"line":1918},[41,18789,2442],{"class":54},[41,18791,276],{"class":275},[41,18793,2447],{"class":378},[41,18795,6104],{"class":275},[41,18797,18798],{"class":47},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[41,18800,18801],{"class":43,"line":1923},[41,18802,80],{"emptyLinePlaceholder":79},[41,18804,18805,18807,18809],{"class":43,"line":2715},[41,18806,4228],{"class":271},[41,18808,4231],{"class":58},[41,18810,1434],{"class":275},[41,18812,18813],{"class":43,"line":2729},[41,18814,1706],{"class":275},[20,18816,18817],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[241,18819,18821],{"id":18820},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[20,18823,18824],{},"两种分类方式：",[20,18826,18827],{},"​\t按参数分为： 有参构造和无参构造",[20,18829,18830],{},"​\t按类型分为： 普通构造和拷贝构造",[20,18832,18833],{},"三种调用方式：",[20,18835,18836],{},"​\t括号法",[20,18838,18839],{},"​\t显示法",[20,18841,18842],{},"​\t隐式转换法",[32,18844,18846],{"className":262,"code":18845,"language":264,"meta":37,"style":37},"#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",[24,18847,18848,18854,18864,18869,18874,18879,18884,18888,18896,18900,18904,18908,18914,18918,18931,18935,18947,18951,18960,18973,18977,18981,18987,18991,19004,19008,19013,19029,19033,19038,19047,19060,19064,19070,19074,19079,19087,19091,19096,19100,19108,19112,19117,19122,19127,19132,19137,19141,19146,19151,19156,19161,19165,19170,19175,19191,19203,19208,19212,19217,19222,19227,19231,19236,19250,19263,19267,19275,19279,19285,19291,19299],{"__ignoreMap":37},[41,18849,18850,18852],{"class":43,"line":44},[41,18851,2089],{"class":271},[41,18853,2092],{"class":378},[41,18855,18856,18858,18860,18862],{"class":43,"line":51},[41,18857,2097],{"class":271},[41,18859,2100],{"class":271},[41,18861,2103],{"class":54},[41,18863,1434],{"class":275},[41,18865,18866],{"class":43,"line":62},[41,18867,18868],{"class":47},"\u002F\u002F1.构造函数的分类及调用\n",[41,18870,18871],{"class":43,"line":70},[41,18872,18873],{"class":47},"\u002F\u002F分类\n",[41,18875,18876],{"class":43,"line":76},[41,18877,18878],{"class":47},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[41,18880,18881],{"class":43,"line":83},[41,18882,18883],{"class":47},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[41,18885,18886],{"class":43,"line":89},[41,18887,80],{"emptyLinePlaceholder":79},[41,18889,18890,18892,18894],{"class":43,"line":96},[41,18891,14832],{"class":271},[41,18893,15707],{"class":54},[41,18895,2812],{"class":275},[41,18897,18898],{"class":43,"line":104},[41,18899,1687],{"class":275},[41,18901,18902],{"class":43,"line":176},[41,18903,14854],{"class":271},[41,18905,18906],{"class":43,"line":184},[41,18907,18652],{"class":47},[41,18909,18910,18912],{"class":43,"line":1757},[41,18911,18657],{"class":54},[41,18913,2115],{"class":275},[41,18915,18916],{"class":43,"line":1763},[41,18917,2169],{"class":275},[41,18919,18920,18922,18924,18927,18929],{"class":43,"line":1768},[41,18921,3589],{"class":275},[41,18923,1317],{"class":271},[41,18925,18926],{"class":378},"\"Person构造函数无参构造\"",[41,18928,1317],{"class":271},[41,18930,1339],{"class":275},[41,18932,18933],{"class":43,"line":1782},[41,18934,2326],{"class":275},[41,18936,18937,18939,18941,18943,18945],{"class":43,"line":1787},[41,18938,18657],{"class":54},[41,18940,276],{"class":275},[41,18942,279],{"class":271},[41,18944,1539],{"class":5354},[41,18946,282],{"class":275},[41,18948,18949],{"class":43,"line":1793},[41,18950,2169],{"class":275},[41,18952,18953,18956,18958],{"class":43,"line":1814},[41,18954,18955],{"class":275},"        age",[41,18957,321],{"class":271},[41,18959,6335],{"class":275},[41,18961,18962,18964,18966,18969,18971],{"class":43,"line":1819},[41,18963,3589],{"class":275},[41,18965,1317],{"class":271},[41,18967,18968],{"class":378},"\"Person构造函数有参构造\"",[41,18970,1317],{"class":271},[41,18972,1339],{"class":275},[41,18974,18975],{"class":43,"line":1833},[41,18976,2326],{"class":275},[41,18978,18979],{"class":43,"line":1838},[41,18980,18685],{"class":47},[41,18982,18983,18985],{"class":43,"line":1867},[41,18984,18690],{"class":54},[41,18986,2115],{"class":275},[41,18988,18989],{"class":43,"line":1872},[41,18990,2169],{"class":275},[41,18992,18993,18995,18997,19000,19002],{"class":43,"line":1889},[41,18994,3589],{"class":275},[41,18996,1317],{"class":271},[41,18998,18999],{"class":378},"\"Person析构函数被调用\"",[41,19001,1317],{"class":271},[41,19003,1339],{"class":275},[41,19005,19006],{"class":43,"line":1894},[41,19007,2326],{"class":275},[41,19009,19010],{"class":43,"line":1899},[41,19011,19012],{"class":47},"    \u002F\u002F拷贝构造函数\n",[41,19014,19015,19017,19019,19021,19023,19025,19027],{"class":43,"line":1904},[41,19016,18657],{"class":54},[41,19018,276],{"class":275},[41,19020,6930],{"class":271},[41,19022,15707],{"class":54},[41,19024,10722],{"class":271},[41,19026,20],{"class":5354},[41,19028,282],{"class":275},[41,19030,19031],{"class":43,"line":1918},[41,19032,2169],{"class":275},[41,19034,19035],{"class":43,"line":1923},[41,19036,19037],{"class":47},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[41,19039,19040,19042,19044],{"class":43,"line":2715},[41,19041,18955],{"class":275},[41,19043,321],{"class":271},[41,19045,19046],{"class":275},"p.age;\n",[41,19048,19049,19051,19053,19056,19058],{"class":43,"line":2729},[41,19050,3589],{"class":275},[41,19052,1317],{"class":271},[41,19054,19055],{"class":378},"\"Person拷贝构造函数被调用\"",[41,19057,1317],{"class":271},[41,19059,1339],{"class":275},[41,19061,19062],{"class":43,"line":2737},[41,19063,2326],{"class":275},[41,19065,19066,19068],{"class":43,"line":2742},[41,19067,2124],{"class":271},[41,19069,7935],{"class":275},[41,19071,19072],{"class":43,"line":2748},[41,19073,4133],{"class":275},[41,19075,19076],{"class":43,"line":2754},[41,19077,19078],{"class":47},"\u002F\u002F调用\n",[41,19080,19081,19083,19085],{"class":43,"line":2759},[41,19082,5502],{"class":271},[41,19084,5726],{"class":54},[41,19086,2115],{"class":275},[41,19088,19089],{"class":43,"line":8086},[41,19090,1687],{"class":275},[41,19092,19093],{"class":43,"line":8110},[41,19094,19095],{"class":47},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[41,19097,19098],{"class":43,"line":8115},[41,19099,1706],{"class":275},[41,19101,19102,19104,19106],{"class":43,"line":8121},[41,19103,5502],{"class":271},[41,19105,5795],{"class":54},[41,19107,2115],{"class":275},[41,19109,19110],{"class":43,"line":8148},[41,19111,1687],{"class":275},[41,19113,19114],{"class":43,"line":8153},[41,19115,19116],{"class":47},"    \u002F\u002F1.括号法\n",[41,19118,19119],{"class":43,"line":8159},[41,19120,19121],{"class":47},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[41,19123,19124],{"class":43,"line":8171},[41,19125,19126],{"class":47},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[41,19128,19129],{"class":43,"line":8183},[41,19130,19131],{"class":47},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[41,19133,19134],{"class":43,"line":8195},[41,19135,19136],{"class":47},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[41,19138,19139],{"class":43,"line":9854},[41,19140,80],{"emptyLinePlaceholder":79},[41,19142,19143],{"class":43,"line":9879},[41,19144,19145],{"class":47},"    \u002F\u002F注意事项\n",[41,19147,19148],{"class":43,"line":9902},[41,19149,19150],{"class":47},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[41,19152,19153],{"class":43,"line":9926},[41,19154,19155],{"class":47},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[41,19157,19158],{"class":43,"line":9931},[41,19159,19160],{"class":47},"    \u002F\u002F Person p4();\n",[41,19162,19163],{"class":43,"line":9936},[41,19164,80],{"emptyLinePlaceholder":79},[41,19166,19167],{"class":43,"line":9941},[41,19168,19169],{"class":47},"    \u002F\u002F2.显示法\n",[41,19171,19172],{"class":43,"line":9950},[41,19173,19174],{"class":275},"    Person p1;\n",[41,19176,19177,19180,19182,19185,19187,19189],{"class":43,"line":9955},[41,19178,19179],{"class":275},"    Person p2",[41,19181,321],{"class":271},[41,19183,19184],{"class":54},"Person",[41,19186,276],{"class":275},[41,19188,719],{"class":58},[41,19190,2857],{"class":275},[41,19192,19193,19196,19198,19200],{"class":43,"line":9961},[41,19194,19195],{"class":275},"    Person p3",[41,19197,321],{"class":271},[41,19199,19184],{"class":54},[41,19201,19202],{"class":275},"(p2);\n",[41,19204,19205],{"class":43,"line":9982},[41,19206,19207],{"class":47},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[41,19209,19210],{"class":43,"line":9988},[41,19211,80],{"emptyLinePlaceholder":79},[41,19213,19214],{"class":43,"line":10002},[41,19215,19216],{"class":47},"    \u002F\u002F 注意事项2\n",[41,19218,19219],{"class":43,"line":10008},[41,19220,19221],{"class":47},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[41,19223,19224],{"class":43,"line":10035},[41,19225,19226],{"class":47},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[41,19228,19229],{"class":43,"line":10044},[41,19230,80],{"emptyLinePlaceholder":79},[41,19232,19233],{"class":43,"line":10050},[41,19234,19235],{"class":47},"    \u002F\u002F3.隐士转换法\n",[41,19237,19238,19241,19243,19245,19247],{"class":43,"line":10058},[41,19239,19240],{"class":275},"    Person p4",[41,19242,321],{"class":271},[41,19244,719],{"class":58},[41,19246,330],{"class":275},[41,19248,19249],{"class":47},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[41,19251,19252,19255,19257,19260],{"class":43,"line":10063},[41,19253,19254],{"class":275},"    Person p5",[41,19256,321],{"class":271},[41,19258,19259],{"class":275},"p4;",[41,19261,19262],{"class":47}," \u002F\u002F 这里会调用拷贝构造函数\n",[41,19264,19265],{"class":43,"line":16742},[41,19266,1706],{"class":275},[41,19268,19269,19271,19273],{"class":43,"line":16748},[41,19270,279],{"class":271},[41,19272,2112],{"class":54},[41,19274,2115],{"class":275},[41,19276,19277],{"class":43,"line":16771},[41,19278,1687],{"class":275},[41,19280,19281,19283],{"class":43,"line":16777},[41,19282,5771],{"class":54},[41,19284,5774],{"class":275},[41,19286,19287,19289],{"class":43,"line":16800},[41,19288,5840],{"class":54},[41,19290,5774],{"class":275},[41,19292,19293,19295,19297],{"class":43,"line":16814},[41,19294,4228],{"class":271},[41,19296,4231],{"class":58},[41,19298,1434],{"class":275},[41,19300,19301],{"class":43,"line":16834},[41,19302,1706],{"class":275},[20,19304,19305,19308],{},[423,19306,19307],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[241,19310,19312],{"id":19311},"_823拷贝构造函数","8.2.3拷贝构造函数",[20,19314,19315],{},"C++中拷贝构造函数调用时机通常有三种情况",[1280,19317,19318,19321,19324],{},[227,19319,19320],{},"使用一个已经创建完毕的对象来初始化一个新对象",[227,19322,19323],{},"值传递的方式给函数参数传值",[227,19325,19326],{},"以值方式返回局部对象",[32,19328,19330],{"className":262,"code":19329,"language":264,"meta":37,"style":37},"#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",[24,19331,19332,19338,19348,19352,19357,19361,19366,19371,19376,19382,19386,19390,19396,19400,19413,19417,19422,19434,19438,19446,19459,19463,19467,19483,19487,19496,19509,19513,19519,19523,19535,19539,19545,19549,19553,19561,19565,19578,19586,19604,19608,19613,19618,19633,19637,19650,19654,19662,19666,19670,19678,19682,19687,19696,19700,19704,19729,19739,19743,19751,19755,19766,19791,19795,19799,19803,19811,19815,19820,19825,19832,19837,19842,19847,19852,19856,19861,19865,19870,19874,19879,19884,19888,19892,19897,19902,19910],{"__ignoreMap":37},[41,19333,19334,19336],{"class":43,"line":44},[41,19335,2089],{"class":271},[41,19337,2092],{"class":378},[41,19339,19340,19342,19344,19346],{"class":43,"line":51},[41,19341,2097],{"class":271},[41,19343,2100],{"class":271},[41,19345,2103],{"class":54},[41,19347,1434],{"class":275},[41,19349,19350],{"class":43,"line":62},[41,19351,80],{"emptyLinePlaceholder":79},[41,19353,19354],{"class":43,"line":70},[41,19355,19356],{"class":47},"\u002F\u002F拷贝构造函数调用时机\n",[41,19358,19359],{"class":43,"line":76},[41,19360,80],{"emptyLinePlaceholder":79},[41,19362,19363],{"class":43,"line":83},[41,19364,19365],{"class":47},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[41,19367,19368],{"class":43,"line":89},[41,19369,19370],{"class":47},"\u002F\u002F2.值传递的方式给函数参数传值\n",[41,19372,19373],{"class":43,"line":96},[41,19374,19375],{"class":47},"\u002F\u002F3.以值方式返回局部对象\n",[41,19377,19378,19380],{"class":43,"line":104},[41,19379,14832],{"class":271},[41,19381,15309],{"class":54},[41,19383,19384],{"class":43,"line":176},[41,19385,1687],{"class":275},[41,19387,19388],{"class":43,"line":184},[41,19389,14854],{"class":271},[41,19391,19392,19394],{"class":43,"line":1757},[41,19393,18657],{"class":54},[41,19395,2115],{"class":275},[41,19397,19398],{"class":43,"line":1763},[41,19399,2169],{"class":275},[41,19401,19402,19404,19406,19409,19411],{"class":43,"line":1768},[41,19403,9807],{"class":275},[41,19405,1317],{"class":271},[41,19407,19408],{"class":378}," \"Person的默认构造函数调用\"",[41,19410,1585],{"class":271},[41,19412,8978],{"class":275},[41,19414,19415],{"class":43,"line":1782},[41,19416,2326],{"class":275},[41,19418,19419],{"class":43,"line":1787},[41,19420,19421],{"class":47},"    \u002F\u002F有参构造\n",[41,19423,19424,19426,19428,19430,19432],{"class":43,"line":1793},[41,19425,18657],{"class":54},[41,19427,276],{"class":275},[41,19429,279],{"class":271},[41,19431,15827],{"class":5354},[41,19433,282],{"class":275},[41,19435,19436],{"class":43,"line":1814},[41,19437,2169],{"class":275},[41,19439,19440,19442,19444],{"class":43,"line":1819},[41,19441,15881],{"class":275},[41,19443,321],{"class":271},[41,19445,7935],{"class":275},[41,19447,19448,19450,19452,19455,19457],{"class":43,"line":1833},[41,19449,9807],{"class":275},[41,19451,1317],{"class":271},[41,19453,19454],{"class":378}," \"Person的有参构造函数调用\"",[41,19456,1585],{"class":271},[41,19458,8978],{"class":275},[41,19460,19461],{"class":43,"line":1838},[41,19462,2326],{"class":275},[41,19464,19465],{"class":43,"line":1867},[41,19466,19012],{"class":47},[41,19468,19469,19471,19473,19475,19477,19479,19481],{"class":43,"line":1872},[41,19470,18657],{"class":54},[41,19472,276],{"class":275},[41,19474,6930],{"class":271},[41,19476,15707],{"class":54},[41,19478,10722],{"class":271},[41,19480,20],{"class":5354},[41,19482,282],{"class":275},[41,19484,19485],{"class":43,"line":1889},[41,19486,2169],{"class":275},[41,19488,19489,19491,19493],{"class":43,"line":1894},[41,19490,15881],{"class":275},[41,19492,321],{"class":271},[41,19494,19495],{"class":275}," p.m_Age;\n",[41,19497,19498,19500,19502,19505,19507],{"class":43,"line":1899},[41,19499,9807],{"class":275},[41,19501,1317],{"class":271},[41,19503,19504],{"class":378}," \"Person的拷贝构造函数调用\"",[41,19506,1585],{"class":271},[41,19508,8978],{"class":275},[41,19510,19511],{"class":43,"line":1904},[41,19512,2326],{"class":275},[41,19514,19515,19517],{"class":43,"line":1918},[41,19516,18690],{"class":54},[41,19518,2115],{"class":275},[41,19520,19521],{"class":43,"line":1923},[41,19522,2169],{"class":275},[41,19524,19525,19527,19529,19531,19533],{"class":43,"line":2715},[41,19526,9807],{"class":275},[41,19528,1317],{"class":271},[41,19530,18705],{"class":378},[41,19532,1585],{"class":271},[41,19534,8978],{"class":275},[41,19536,19537],{"class":43,"line":2729},[41,19538,2326],{"class":275},[41,19540,19541,19543],{"class":43,"line":2737},[41,19542,2124],{"class":271},[41,19544,15804],{"class":275},[41,19546,19547],{"class":43,"line":2742},[41,19548,4133],{"class":275},[41,19550,19551],{"class":43,"line":2748},[41,19552,19365],{"class":47},[41,19554,19555,19557,19559],{"class":43,"line":2754},[41,19556,5502],{"class":271},[41,19558,5726],{"class":54},[41,19560,2115],{"class":275},[41,19562,19563],{"class":43,"line":2759},[41,19564,1687],{"class":275},[41,19566,19567,19570,19572,19574,19576],{"class":43,"line":8086},[41,19568,19569],{"class":275},"    Person ",[41,19571,7268],{"class":54},[41,19573,276],{"class":275},[41,19575,973],{"class":58},[41,19577,2857],{"class":275},[41,19579,19580,19582,19584],{"class":43,"line":8110},[41,19581,19569],{"class":275},[41,19583,7171],{"class":54},[41,19585,17653],{"class":275},[41,19587,19588,19590,19592,19595,19597,19600,19602],{"class":43,"line":8115},[41,19589,1692],{"class":275},[41,19591,1317],{"class":271},[41,19593,19594],{"class":378},"\"P2的年龄为：\"",[41,19596,1317],{"class":271},[41,19598,19599],{"class":275},"p2.m_Age",[41,19601,1317],{"class":271},[41,19603,1339],{"class":275},[41,19605,19606],{"class":43,"line":8121},[41,19607,1706],{"class":275},[41,19609,19610],{"class":43,"line":8148},[41,19611,19612],{"class":47},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[41,19614,19615],{"class":43,"line":8153},[41,19616,19617],{"class":47},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[41,19619,19620,19622,19625,19627,19629,19631],{"class":43,"line":8159},[41,19621,5502],{"class":271},[41,19623,19624],{"class":54}," doWork",[41,19626,276],{"class":275},[41,19628,19184],{"class":54},[41,19630,6963],{"class":5354},[41,19632,282],{"class":275},[41,19634,19635],{"class":43,"line":8171},[41,19636,1687],{"class":275},[41,19638,19639,19641,19643,19646,19648],{"class":43,"line":8183},[41,19640,6667],{"class":275},[41,19642,1317],{"class":271},[41,19644,19645],{"class":378}," \"doWork函数调用\"",[41,19647,1585],{"class":271},[41,19649,8978],{"class":275},[41,19651,19652],{"class":43,"line":8195},[41,19653,1706],{"class":275},[41,19655,19656,19658,19660],{"class":43,"line":9854},[41,19657,5502],{"class":271},[41,19659,5795],{"class":54},[41,19661,2115],{"class":275},[41,19663,19664],{"class":43,"line":9879},[41,19665,1687],{"class":275},[41,19667,19668],{"class":43,"line":9902},[41,19669,15451],{"class":275},[41,19671,19672,19675],{"class":43,"line":9926},[41,19673,19674],{"class":54},"    doWork",[41,19676,19677],{"class":275},"(p);\n",[41,19679,19680],{"class":43,"line":9931},[41,19681,1706],{"class":275},[41,19683,19684],{"class":43,"line":9936},[41,19685,19686],{"class":47},"\u002F\u002F 3.以值方式返回局部对象\n",[41,19688,19689,19691,19694],{"class":43,"line":9941},[41,19690,19184],{"class":54},[41,19692,19693],{"class":54}," doWork2",[41,19695,2115],{"class":275},[41,19697,19698],{"class":43,"line":9950},[41,19699,1687],{"class":275},[41,19701,19702],{"class":43,"line":9955},[41,19703,19174],{"class":275},[41,19705,19706,19708,19710,19712,19714,19716,19718,19720,19722,19724,19726],{"class":43,"line":9961},[41,19707,1692],{"class":275},[41,19709,1317],{"class":271},[41,19711,276],{"class":275},[41,19713,279],{"class":271},[41,19715,6656],{"class":271},[41,19717,702],{"class":275},[41,19719,626],{"class":271},[41,19721,7268],{"class":275},[41,19723,1317],{"class":271},[41,19725,1382],{"class":275},[41,19727,19728],{"class":47},"\u002F\u002F打印p1的地址\n",[41,19730,19731,19733,19736],{"class":43,"line":9982},[41,19732,4228],{"class":271},[41,19734,19735],{"class":275}," p1;",[41,19737,19738],{"class":47},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[41,19740,19741],{"class":43,"line":9988},[41,19742,1706],{"class":275},[41,19744,19745,19747,19749],{"class":43,"line":10002},[41,19746,5502],{"class":271},[41,19748,5867],{"class":54},[41,19750,2115],{"class":275},[41,19752,19753],{"class":43,"line":10008},[41,19754,1687],{"class":275},[41,19756,19757,19760,19762,19764],{"class":43,"line":10035},[41,19758,19759],{"class":275},"    Person p ",[41,19761,321],{"class":271},[41,19763,19693],{"class":54},[41,19765,5774],{"class":275},[41,19767,19768,19770,19772,19774,19776,19778,19780,19782,19784,19786,19788],{"class":43,"line":10044},[41,19769,1692],{"class":275},[41,19771,1317],{"class":271},[41,19773,276],{"class":275},[41,19775,279],{"class":271},[41,19777,6656],{"class":271},[41,19779,702],{"class":275},[41,19781,626],{"class":271},[41,19783,20],{"class":275},[41,19785,1317],{"class":271},[41,19787,1382],{"class":275},[41,19789,19790],{"class":47},"\u002F\u002F打印p的地址\n",[41,19792,19793],{"class":43,"line":10050},[41,19794,1706],{"class":275},[41,19796,19797],{"class":43,"line":10058},[41,19798,80],{"emptyLinePlaceholder":79},[41,19800,19801],{"class":43,"line":10063},[41,19802,80],{"emptyLinePlaceholder":79},[41,19804,19805,19807,19809],{"class":43,"line":16742},[41,19806,279],{"class":271},[41,19808,2112],{"class":54},[41,19810,2115],{"class":275},[41,19812,19813],{"class":43,"line":16748},[41,19814,1687],{"class":275},[41,19816,19817],{"class":43,"line":16771},[41,19818,19819],{"class":47},"    \u002F\u002F test01();\n",[41,19821,19822],{"class":43,"line":16777},[41,19823,19824],{"class":47},"    \u002F\u002F test02();\n",[41,19826,19827,19830],{"class":43,"line":16800},[41,19828,19829],{"class":54},"    test03",[41,19831,5774],{"class":275},[41,19833,19834],{"class":43,"line":16814},[41,19835,19836],{"class":47},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[41,19838,19839],{"class":43,"line":16834},[41,19840,19841],{"class":47},"\u002F\u002F 输出结果如下：\n",[41,19843,19844],{"class":43,"line":16840},[41,19845,19846],{"class":47},"\u002F\u002F Person的默认构造函数调用\n",[41,19848,19849],{"class":43,"line":16851},[41,19850,19851],{"class":47},"\u002F\u002F 0x7fffffffceec\n",[41,19853,19854],{"class":43,"line":16874},[41,19855,19851],{"class":47},[41,19857,19858],{"class":43,"line":16896},[41,19859,19860],{"class":47},"\u002F\u002F Person的析构函数调用\n",[41,19862,19863],{"class":43,"line":16901},[41,19864,80],{"emptyLinePlaceholder":79},[41,19866,19867],{"class":43,"line":16907},[41,19868,19869],{"class":47},"\u002F\u002F 之前的输出结果如下：\n",[41,19871,19872],{"class":43,"line":16921},[41,19873,19846],{"class":47},[41,19875,19876],{"class":43,"line":16934},[41,19877,19878],{"class":47},"\u002F\u002F 地址\n",[41,19880,19881],{"class":43,"line":16939},[41,19882,19883],{"class":47},"\u002F\u002F Person的拷贝构造函数调用\n",[41,19885,19886],{"class":43,"line":16953},[41,19887,19860],{"class":47},[41,19889,19890],{"class":43,"line":16958},[41,19891,19878],{"class":47},[41,19893,19894],{"class":43,"line":16964},[41,19895,19896],{"class":47},"\u002F\u002F (这两次输出的地址也是不同的) \n",[41,19898,19899],{"class":43,"line":16969},[41,19900,19901],{"class":47},"\u002F\u002F Person的析构函数调用     \n",[41,19903,19904,19906,19908],{"class":43,"line":16983},[41,19905,4228],{"class":271},[41,19907,4231],{"class":58},[41,19909,1434],{"class":275},[41,19911,19912],{"class":43,"line":16988},[41,19913,1706],{"class":275},[20,19915,19916],{},"简化版理解",[32,19918,19920],{"className":262,"code":19919,"language":264,"meta":37,"style":37},"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",[24,19921,19922,19930,19934,19940,19953,19964,19968,19980,19993,20001,20005,20021,20034,20043,20047,20052,20058,20071,20075,20079,20086,20090,20094,20099,20107,20111,20127,20140,20153,20157,20162,20170,20174,20178,20183,20188,20204,20212,20219,20225,20229,20233,20238,20246,20250,20254,20277,20284,20288,20292,20300,20304,20314,20336,20340,20344,20348,20356,20360,20365,20370,20376,20380,20390,20394,20402],{"__ignoreMap":37},[41,19923,19924,19926,19928],{"class":43,"line":44},[41,19925,14832],{"class":271},[41,19927,15707],{"class":54},[41,19929,15710],{"class":275},[41,19931,19932],{"class":43,"line":51},[41,19933,14854],{"class":271},[41,19935,19936,19938],{"class":43,"line":62},[41,19937,18657],{"class":54},[41,19939,10991],{"class":275},[41,19941,19942,19944,19946,19949,19951],{"class":43,"line":70},[41,19943,9807],{"class":275},[41,19945,1317],{"class":271},[41,19947,19948],{"class":378}," \"无参构造函数!\"",[41,19950,1585],{"class":271},[41,19952,8978],{"class":275},[41,19954,19955,19958,19960,19962],{"class":43,"line":76},[41,19956,19957],{"class":275},"        mAge ",[41,19959,321],{"class":271},[41,19961,4231],{"class":58},[41,19963,1434],{"class":275},[41,19965,19966],{"class":43,"line":83},[41,19967,2326],{"class":275},[41,19969,19970,19972,19974,19976,19978],{"class":43,"line":89},[41,19971,18657],{"class":54},[41,19973,276],{"class":275},[41,19975,279],{"class":271},[41,19977,15827],{"class":5354},[41,19979,12580],{"class":275},[41,19981,19982,19984,19986,19989,19991],{"class":43,"line":96},[41,19983,9807],{"class":275},[41,19985,1317],{"class":271},[41,19987,19988],{"class":378}," \"有参构造函数!\"",[41,19990,1585],{"class":271},[41,19992,8978],{"class":275},[41,19994,19995,19997,19999],{"class":43,"line":104},[41,19996,19957],{"class":275},[41,19998,321],{"class":271},[41,20000,7935],{"class":275},[41,20002,20003],{"class":43,"line":176},[41,20004,2326],{"class":275},[41,20006,20007,20009,20011,20013,20015,20017,20019],{"class":43,"line":184},[41,20008,18657],{"class":54},[41,20010,276],{"class":275},[41,20012,6930],{"class":271},[41,20014,15707],{"class":54},[41,20016,626],{"class":271},[41,20018,6963],{"class":5354},[41,20020,12580],{"class":275},[41,20022,20023,20025,20027,20030,20032],{"class":43,"line":1757},[41,20024,9807],{"class":275},[41,20026,1317],{"class":271},[41,20028,20029],{"class":378}," \"拷贝构造函数!\"",[41,20031,1585],{"class":271},[41,20033,8978],{"class":275},[41,20035,20036,20038,20040],{"class":43,"line":1763},[41,20037,19957],{"class":275},[41,20039,321],{"class":271},[41,20041,20042],{"class":275}," p.mAge;\n",[41,20044,20045],{"class":43,"line":1768},[41,20046,2326],{"class":275},[41,20048,20049],{"class":43,"line":1782},[41,20050,20051],{"class":47},"    \u002F\u002F析构函数在释放内存之前调用\n",[41,20053,20054,20056],{"class":43,"line":1787},[41,20055,18690],{"class":54},[41,20057,10991],{"class":275},[41,20059,20060,20062,20064,20067,20069],{"class":43,"line":1793},[41,20061,9807],{"class":275},[41,20063,1317],{"class":271},[41,20065,20066],{"class":378}," \"析构函数!\"",[41,20068,1585],{"class":271},[41,20070,8978],{"class":275},[41,20072,20073],{"class":43,"line":1814},[41,20074,2326],{"class":275},[41,20076,20077],{"class":43,"line":1819},[41,20078,14854],{"class":271},[41,20080,20081,20083],{"class":43,"line":1833},[41,20082,2124],{"class":271},[41,20084,20085],{"class":275}," mAge;\n",[41,20087,20088],{"class":43,"line":1838},[41,20089,4133],{"class":275},[41,20091,20092],{"class":43,"line":1867},[41,20093,80],{"emptyLinePlaceholder":79},[41,20095,20096],{"class":43,"line":1872},[41,20097,20098],{"class":47},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[41,20100,20101,20103,20105],{"class":43,"line":1889},[41,20102,5502],{"class":271},[41,20104,5726],{"class":54},[41,20106,10991],{"class":275},[41,20108,20109],{"class":43,"line":1894},[41,20110,80],{"emptyLinePlaceholder":79},[41,20112,20113,20115,20118,20120,20122,20124],{"class":43,"line":1899},[41,20114,19569],{"class":275},[41,20116,20117],{"class":54},"man",[41,20119,276],{"class":275},[41,20121,584],{"class":58},[41,20123,6104],{"class":275},[41,20125,20126],{"class":47}," \u002F\u002Fp对象已经创建完毕\n",[41,20128,20129,20131,20134,20137],{"class":43,"line":1904},[41,20130,19569],{"class":275},[41,20132,20133],{"class":54},"newman",[41,20135,20136],{"class":275},"(man);",[41,20138,20139],{"class":47}," \u002F\u002F调用拷贝构造函数\n",[41,20141,20142,20145,20147,20150],{"class":43,"line":1918},[41,20143,20144],{"class":275},"    Person newman2 ",[41,20146,321],{"class":271},[41,20148,20149],{"class":275}," man;",[41,20151,20152],{"class":47}," \u002F\u002F拷贝构造\n",[41,20154,20155],{"class":43,"line":1923},[41,20156,80],{"emptyLinePlaceholder":79},[41,20158,20159],{"class":43,"line":2715},[41,20160,20161],{"class":47},"    \u002F\u002FPerson newman3;\n",[41,20163,20164,20167],{"class":43,"line":2729},[41,20165,20166],{"class":47},"    \u002F\u002Fnewman3 = man;",[41,20168,20169],{"class":47}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[41,20171,20172],{"class":43,"line":2737},[41,20173,1706],{"class":275},[41,20175,20176],{"class":43,"line":2742},[41,20177,80],{"emptyLinePlaceholder":79},[41,20179,20180],{"class":43,"line":2748},[41,20181,20182],{"class":47},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[41,20184,20185],{"class":43,"line":2754},[41,20186,20187],{"class":47},"\u002F\u002F相当于Person p1 = p;\n",[41,20189,20190,20192,20194,20196,20198,20201],{"class":43,"line":2759},[41,20191,5502],{"class":271},[41,20193,19624],{"class":54},[41,20195,276],{"class":275},[41,20197,19184],{"class":54},[41,20199,20200],{"class":5354}," p1",[41,20202,20203],{"class":275},") {}\n",[41,20205,20206,20208,20210],{"class":43,"line":8086},[41,20207,5502],{"class":271},[41,20209,5795],{"class":54},[41,20211,10991],{"class":275},[41,20213,20214,20216],{"class":43,"line":8110},[41,20215,18742],{"class":275},[41,20217,20218],{"class":47}," \u002F\u002F无参构造函数\n",[41,20220,20221,20223],{"class":43,"line":8115},[41,20222,19674],{"class":54},[41,20224,19677],{"class":275},[41,20226,20227],{"class":43,"line":8121},[41,20228,1706],{"class":275},[41,20230,20231],{"class":43,"line":8148},[41,20232,80],{"emptyLinePlaceholder":79},[41,20234,20235],{"class":43,"line":8153},[41,20236,20237],{"class":47},"\u002F\u002F3. 以值方式返回局部对象\n",[41,20239,20240,20242,20244],{"class":43,"line":8159},[41,20241,19184],{"class":54},[41,20243,19693],{"class":54},[41,20245,2115],{"class":275},[41,20247,20248],{"class":43,"line":8171},[41,20249,1687],{"class":275},[41,20251,20252],{"class":43,"line":8183},[41,20253,19174],{"class":275},[41,20255,20256,20258,20260,20262,20264,20266,20268,20270,20273,20275],{"class":43,"line":8195},[41,20257,6667],{"class":275},[41,20259,1317],{"class":271},[41,20261,1798],{"class":275},[41,20263,279],{"class":271},[41,20265,6656],{"class":271},[41,20267,702],{"class":275},[41,20269,626],{"class":271},[41,20271,20272],{"class":275},"p1 ",[41,20274,1317],{"class":271},[41,20276,8978],{"class":275},[41,20278,20279,20281],{"class":43,"line":9854},[41,20280,4228],{"class":271},[41,20282,20283],{"class":275}," p1;\n",[41,20285,20286],{"class":43,"line":9879},[41,20287,1706],{"class":275},[41,20289,20290],{"class":43,"line":9902},[41,20291,80],{"emptyLinePlaceholder":79},[41,20293,20294,20296,20298],{"class":43,"line":9926},[41,20295,5502],{"class":271},[41,20297,5867],{"class":54},[41,20299,2115],{"class":275},[41,20301,20302],{"class":43,"line":9931},[41,20303,1687],{"class":275},[41,20305,20306,20308,20310,20312],{"class":43,"line":9936},[41,20307,19759],{"class":275},[41,20309,321],{"class":271},[41,20311,19693],{"class":54},[41,20313,5774],{"class":275},[41,20315,20316,20318,20320,20322,20324,20326,20328,20330,20332,20334],{"class":43,"line":9941},[41,20317,6667],{"class":275},[41,20319,1317],{"class":271},[41,20321,1798],{"class":275},[41,20323,279],{"class":271},[41,20325,6656],{"class":271},[41,20327,702],{"class":275},[41,20329,626],{"class":271},[41,20331,11586],{"class":275},[41,20333,1317],{"class":271},[41,20335,8978],{"class":275},[41,20337,20338],{"class":43,"line":9950},[41,20339,1706],{"class":275},[41,20341,20342],{"class":43,"line":9955},[41,20343,80],{"emptyLinePlaceholder":79},[41,20345,20346],{"class":43,"line":9961},[41,20347,80],{"emptyLinePlaceholder":79},[41,20349,20350,20352,20354],{"class":43,"line":9982},[41,20351,279],{"class":271},[41,20353,2112],{"class":54},[41,20355,10991],{"class":275},[41,20357,20358],{"class":43,"line":9988},[41,20359,80],{"emptyLinePlaceholder":79},[41,20361,20362],{"class":43,"line":10002},[41,20363,20364],{"class":47},"    \u002F\u002Ftest01();\n",[41,20366,20367],{"class":43,"line":10008},[41,20368,20369],{"class":47},"    \u002F\u002Ftest02();\n",[41,20371,20372,20374],{"class":43,"line":10035},[41,20373,19829],{"class":54},[41,20375,5774],{"class":275},[41,20377,20378],{"class":43,"line":10044},[41,20379,80],{"emptyLinePlaceholder":79},[41,20381,20382,20384,20386,20388],{"class":43,"line":10050},[41,20383,2442],{"class":54},[41,20385,276],{"class":275},[41,20387,2447],{"class":378},[41,20389,2857],{"class":275},[41,20391,20392],{"class":43,"line":10058},[41,20393,80],{"emptyLinePlaceholder":79},[41,20395,20396,20398,20400],{"class":43,"line":10063},[41,20397,4228],{"class":271},[41,20399,4231],{"class":58},[41,20401,1434],{"class":275},[41,20403,20404],{"class":43,"line":16742},[41,20405,1706],{"class":275},[241,20407,20409],{"id":20408},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[20,20411,20412],{},"默认情况下，c++编译器至少给一个类添加3个函数",[20,20414,20415],{},"1．默认构造函数(无参，函数体为空)",[20,20417,20418],{},"2．默认析构函数(无参，函数体为空)",[20,20420,20421],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[20,20423,20424],{},"构造函数调用规则如下：",[1280,20426,20427,20430],{},[227,20428,20429],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[227,20431,20432],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[32,20434,20436],{"className":262,"code":20435,"language":264,"meta":37,"style":37},"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",[24,20437,20438,20446,20450,20455,20461,20473,20477,20482,20494,20503,20515,20519,20523,20539,20548,20560,20564,20568,20574,20586,20590,20594,20600,20604,20608,20616,20620,20632,20637,20645,20649,20667,20671,20675,20683,20687,20692,20700,20715,20728,20732,20737,20744,20760,20773,20777,20781,20789,20793,20799,20803,20813,20817,20825],{"__ignoreMap":37},[41,20439,20440,20442,20444],{"class":43,"line":44},[41,20441,14832],{"class":271},[41,20443,15707],{"class":54},[41,20445,15710],{"class":275},[41,20447,20448],{"class":43,"line":51},[41,20449,14854],{"class":271},[41,20451,20452],{"class":43,"line":62},[41,20453,20454],{"class":47},"    \u002F\u002F无参（默认）构造函数\n",[41,20456,20457,20459],{"class":43,"line":70},[41,20458,18657],{"class":54},[41,20460,10991],{"class":275},[41,20462,20463,20465,20467,20469,20471],{"class":43,"line":76},[41,20464,9807],{"class":275},[41,20466,1317],{"class":271},[41,20468,19948],{"class":378},[41,20470,1585],{"class":271},[41,20472,8978],{"class":275},[41,20474,20475],{"class":43,"line":83},[41,20476,2326],{"class":275},[41,20478,20479],{"class":43,"line":89},[41,20480,20481],{"class":47},"    \u002F\u002F有参构造函数\n",[41,20483,20484,20486,20488,20490,20492],{"class":43,"line":96},[41,20485,18657],{"class":54},[41,20487,276],{"class":275},[41,20489,279],{"class":271},[41,20491,1539],{"class":5354},[41,20493,12580],{"class":275},[41,20495,20496,20499,20501],{"class":43,"line":104},[41,20497,20498],{"class":275},"        age ",[41,20500,321],{"class":271},[41,20502,1573],{"class":275},[41,20504,20505,20507,20509,20511,20513],{"class":43,"line":176},[41,20506,9807],{"class":275},[41,20508,1317],{"class":271},[41,20510,19988],{"class":378},[41,20512,1585],{"class":271},[41,20514,8978],{"class":275},[41,20516,20517],{"class":43,"line":184},[41,20518,2326],{"class":275},[41,20520,20521],{"class":43,"line":1757},[41,20522,19012],{"class":47},[41,20524,20525,20527,20529,20531,20533,20535,20537],{"class":43,"line":1763},[41,20526,18657],{"class":54},[41,20528,276],{"class":275},[41,20530,6930],{"class":271},[41,20532,15707],{"class":54},[41,20534,626],{"class":271},[41,20536,6963],{"class":5354},[41,20538,12580],{"class":275},[41,20540,20541,20543,20545],{"class":43,"line":1768},[41,20542,20498],{"class":275},[41,20544,321],{"class":271},[41,20546,20547],{"class":275}," p.age;\n",[41,20549,20550,20552,20554,20556,20558],{"class":43,"line":1782},[41,20551,9807],{"class":275},[41,20553,1317],{"class":271},[41,20555,20029],{"class":378},[41,20557,1585],{"class":271},[41,20559,8978],{"class":275},[41,20561,20562],{"class":43,"line":1787},[41,20563,2326],{"class":275},[41,20565,20566],{"class":43,"line":1793},[41,20567,18685],{"class":47},[41,20569,20570,20572],{"class":43,"line":1814},[41,20571,18690],{"class":54},[41,20573,10991],{"class":275},[41,20575,20576,20578,20580,20582,20584],{"class":43,"line":1819},[41,20577,9807],{"class":275},[41,20579,1317],{"class":271},[41,20581,20066],{"class":378},[41,20583,1585],{"class":271},[41,20585,8978],{"class":275},[41,20587,20588],{"class":43,"line":1833},[41,20589,2326],{"class":275},[41,20591,20592],{"class":43,"line":1838},[41,20593,14854],{"class":271},[41,20595,20596,20598],{"class":43,"line":1867},[41,20597,2124],{"class":271},[41,20599,7935],{"class":275},[41,20601,20602],{"class":43,"line":1872},[41,20603,4133],{"class":275},[41,20605,20606],{"class":43,"line":1889},[41,20607,80],{"emptyLinePlaceholder":79},[41,20609,20610,20612,20614],{"class":43,"line":1894},[41,20611,5502],{"class":271},[41,20613,5726],{"class":54},[41,20615,2115],{"class":275},[41,20617,20618],{"class":43,"line":1899},[41,20619,1687],{"class":275},[41,20621,20622,20624,20626,20628,20630],{"class":43,"line":1904},[41,20623,19569],{"class":275},[41,20625,7268],{"class":54},[41,20627,276],{"class":275},[41,20629,923],{"class":58},[41,20631,2857],{"class":275},[41,20633,20634],{"class":43,"line":1918},[41,20635,20636],{"class":47},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[41,20638,20639,20641,20643],{"class":43,"line":1923},[41,20640,19569],{"class":275},[41,20642,7171],{"class":54},[41,20644,17653],{"class":275},[41,20646,20647],{"class":43,"line":2715},[41,20648,80],{"emptyLinePlaceholder":79},[41,20650,20651,20653,20655,20658,20660,20663,20665],{"class":43,"line":2729},[41,20652,6667],{"class":275},[41,20654,1317],{"class":271},[41,20656,20657],{"class":378}," \"p2的年龄为： \"",[41,20659,1585],{"class":271},[41,20661,20662],{"class":275}," p2.age ",[41,20664,1317],{"class":271},[41,20666,8978],{"class":275},[41,20668,20669],{"class":43,"line":2737},[41,20670,1706],{"class":275},[41,20672,20673],{"class":43,"line":2742},[41,20674,80],{"emptyLinePlaceholder":79},[41,20676,20677,20679,20681],{"class":43,"line":2748},[41,20678,5502],{"class":271},[41,20680,5795],{"class":54},[41,20682,2115],{"class":275},[41,20684,20685],{"class":43,"line":2754},[41,20686,1687],{"class":275},[41,20688,20689],{"class":43,"line":2759},[41,20690,20691],{"class":47},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[41,20693,20694,20697],{"class":43,"line":8086},[41,20695,20696],{"class":275},"    Person p1;",[41,20698,20699],{"class":47}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[41,20701,20702,20704,20706,20708,20710,20712],{"class":43,"line":8110},[41,20703,19569],{"class":275},[41,20705,7171],{"class":54},[41,20707,276],{"class":275},[41,20709,719],{"class":58},[41,20711,6104],{"class":275},[41,20713,20714],{"class":47}," \u002F\u002F用户提供的有参\n",[41,20716,20717,20719,20722,20725],{"class":43,"line":8115},[41,20718,19569],{"class":275},[41,20720,20721],{"class":54},"p3",[41,20723,20724],{"class":275},"(p2);",[41,20726,20727],{"class":47}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[41,20729,20730],{"class":43,"line":8121},[41,20731,80],{"emptyLinePlaceholder":79},[41,20733,20734],{"class":43,"line":8148},[41,20735,20736],{"class":47},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[41,20738,20739,20742],{"class":43,"line":8153},[41,20740,20741],{"class":275},"    Person p4;",[41,20743,20699],{"class":47},[41,20745,20746,20748,20751,20753,20755,20757],{"class":43,"line":8159},[41,20747,19569],{"class":275},[41,20749,20750],{"class":54},"p5",[41,20752,276],{"class":275},[41,20754,719],{"class":58},[41,20756,6104],{"class":275},[41,20758,20759],{"class":47}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[41,20761,20762,20764,20767,20770],{"class":43,"line":8171},[41,20763,19569],{"class":275},[41,20765,20766],{"class":54},"p6",[41,20768,20769],{"class":275},"(p5);",[41,20771,20772],{"class":47}," \u002F\u002F用户自己提供拷贝构造\n",[41,20774,20775],{"class":43,"line":8183},[41,20776,1706],{"class":275},[41,20778,20779],{"class":43,"line":8195},[41,20780,80],{"emptyLinePlaceholder":79},[41,20782,20783,20785,20787],{"class":43,"line":9854},[41,20784,279],{"class":271},[41,20786,2112],{"class":54},[41,20788,10991],{"class":275},[41,20790,20791],{"class":43,"line":9879},[41,20792,80],{"emptyLinePlaceholder":79},[41,20794,20795,20797],{"class":43,"line":9902},[41,20796,5771],{"class":54},[41,20798,5774],{"class":275},[41,20800,20801],{"class":43,"line":9926},[41,20802,80],{"emptyLinePlaceholder":79},[41,20804,20805,20807,20809,20811],{"class":43,"line":9931},[41,20806,2442],{"class":54},[41,20808,276],{"class":275},[41,20810,2447],{"class":378},[41,20812,2857],{"class":275},[41,20814,20815],{"class":43,"line":9936},[41,20816,80],{"emptyLinePlaceholder":79},[41,20818,20819,20821,20823],{"class":43,"line":9941},[41,20820,4228],{"class":271},[41,20822,4231],{"class":58},[41,20824,1434],{"class":275},[41,20826,20827],{"class":43,"line":9950},[41,20828,1706],{"class":275},[241,20830,20832],{"id":20831},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[20,20834,20835],{},"浅拷贝：简单的赋值拷贝操作",[20,20837,20838],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[32,20840,20842],{"className":262,"code":20841,"language":264,"meta":37,"style":37},"#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",[24,20843,20844,20850,20860,20866,20870,20874,20879,20885,20889,20902,20906,20910,20917,20921,20931,20946,20959,20963,20968,20973,20989,20993,21006,21011,21016,21021,21030,21035,21050,21054,21058,21062,21068,21072,21077,21092,21096,21107,21121,21125,21134,21138,21144,21156,21160,21168,21172,21189,21220,21228,21256,21260,21264,21272,21276,21282],{"__ignoreMap":37},[41,20845,20846,20848],{"class":43,"line":44},[41,20847,2089],{"class":271},[41,20849,2092],{"class":378},[41,20851,20852,20854,20856,20858],{"class":43,"line":51},[41,20853,2097],{"class":271},[41,20855,2100],{"class":271},[41,20857,2103],{"class":54},[41,20859,1434],{"class":275},[41,20861,20862,20864],{"class":43,"line":62},[41,20863,14832],{"class":271},[41,20865,15309],{"class":54},[41,20867,20868],{"class":43,"line":70},[41,20869,1687],{"class":275},[41,20871,20872],{"class":43,"line":76},[41,20873,14854],{"class":271},[41,20875,20876],{"class":43,"line":83},[41,20877,20878],{"class":47},"    \u002F\u002F默认构造函数\n",[41,20880,20881,20883],{"class":43,"line":89},[41,20882,18657],{"class":54},[41,20884,2115],{"class":275},[41,20886,20887],{"class":43,"line":96},[41,20888,2169],{"class":275},[41,20890,20891,20893,20895,20898,20900],{"class":43,"line":104},[41,20892,3589],{"class":275},[41,20894,1317],{"class":271},[41,20896,20897],{"class":378},"\"默认构造函数\"",[41,20899,1317],{"class":271},[41,20901,1339],{"class":275},[41,20903,20904],{"class":43,"line":176},[41,20905,2326],{"class":275},[41,20907,20908],{"class":43,"line":184},[41,20909,20481],{"class":47},[41,20911,20912,20914],{"class":43,"line":1757},[41,20913,18690],{"class":54},[41,20915,20916],{"class":275},"(int age,int height)\n",[41,20918,20919],{"class":43,"line":1763},[41,20920,2169],{"class":275},[41,20922,20923,20926,20928],{"class":43,"line":1768},[41,20924,20925],{"class":275},"        m_Age",[41,20927,321],{"class":271},[41,20929,20930],{"class":275},"age;\n",[41,20932,20933,20936,20938,20940,20943],{"class":43,"line":1782},[41,20934,20935],{"class":275},"        m_Height",[41,20937,11855],{"class":271},[41,20939,2521],{"class":271},[41,20941,20942],{"class":275},"(height);",[41,20944,20945],{"class":47},"\u002F\u002F放到堆区\n",[41,20947,20948,20950,20952,20955,20957],{"class":43,"line":1787},[41,20949,3589],{"class":275},[41,20951,1317],{"class":271},[41,20953,20954],{"class":378},"\"有参构造函数\"",[41,20956,1317],{"class":271},[41,20958,1339],{"class":275},[41,20960,20961],{"class":43,"line":1793},[41,20962,2326],{"class":275},[41,20964,20965],{"class":43,"line":1814},[41,20966,20967],{"class":47},"    \u002F\u002F深拷贝解决上述问题\n",[41,20969,20970],{"class":43,"line":1819},[41,20971,20972],{"class":47},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[41,20974,20975,20977,20979,20981,20983,20985,20987],{"class":43,"line":1833},[41,20976,18657],{"class":54},[41,20978,276],{"class":275},[41,20980,6930],{"class":271},[41,20982,15707],{"class":54},[41,20984,10722],{"class":271},[41,20986,20],{"class":5354},[41,20988,282],{"class":275},[41,20990,20991],{"class":43,"line":1838},[41,20992,2169],{"class":275},[41,20994,20995,20997,20999,21002,21004],{"class":43,"line":1867},[41,20996,3589],{"class":275},[41,20998,1317],{"class":271},[41,21000,21001],{"class":378},"\"拷贝构造函数\"",[41,21003,1317],{"class":271},[41,21005,1339],{"class":275},[41,21007,21008],{"class":43,"line":1872},[41,21009,21010],{"class":47},"        \u002F\u002F编译器默认的写如下注释部分\n",[41,21012,21013],{"class":43,"line":1889},[41,21014,21015],{"class":47},"        \u002F\u002Fm_Age=p.m_Age;\n",[41,21017,21018],{"class":43,"line":1894},[41,21019,21020],{"class":47},"        \u002F\u002Fm_Height=p.m_Height;\n",[41,21022,21023,21025,21027],{"class":43,"line":1899},[41,21024,20925],{"class":275},[41,21026,321],{"class":271},[41,21028,21029],{"class":275},"p.m_Age;\n",[41,21031,21032],{"class":43,"line":1904},[41,21033,21034],{"class":47},"        \u002F\u002F深拷贝操作\n",[41,21036,21037,21039,21041,21043,21045,21047],{"class":43,"line":1918},[41,21038,20935],{"class":275},[41,21040,11855],{"class":271},[41,21042,2521],{"class":271},[41,21044,276],{"class":275},[41,21046,728],{"class":271},[41,21048,21049],{"class":275},"p.m_Height);\n",[41,21051,21052],{"class":43,"line":1923},[41,21053,2326],{"class":275},[41,21055,21056],{"class":43,"line":2715},[41,21057,80],{"emptyLinePlaceholder":79},[41,21059,21060],{"class":43,"line":2729},[41,21061,18685],{"class":47},[41,21063,21064,21066],{"class":43,"line":2737},[41,21065,18690],{"class":54},[41,21067,2115],{"class":275},[41,21069,21070],{"class":43,"line":2742},[41,21071,2169],{"class":275},[41,21073,21074],{"class":43,"line":2748},[41,21075,21076],{"class":47},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[41,21078,21079,21081,21084,21087,21090],{"class":43,"line":2754},[41,21080,2635],{"class":271},[41,21082,21083],{"class":275},"(m_Height ",[41,21085,21086],{"class":271},"!=",[41,21088,21089],{"class":58}," NULL",[41,21091,282],{"class":275},[41,21093,21094],{"class":43,"line":2759},[41,21095,2648],{"class":275},[41,21097,21098,21101,21104],{"class":43,"line":8086},[41,21099,21100],{"class":271},"            delete",[41,21102,21103],{"class":275}," m_Height;",[41,21105,21106],{"class":47}," \u002F\u002F释放堆区内存\n",[41,21108,21109,21112,21114,21116,21118],{"class":43,"line":8110},[41,21110,21111],{"class":275},"            m_Height",[41,21113,321],{"class":271},[41,21115,2531],{"class":58},[41,21117,330],{"class":275},[41,21119,21120],{"class":47}," \u002F\u002F防止野指针\n",[41,21122,21123],{"class":43,"line":8115},[41,21124,2667],{"class":275},[41,21126,21127,21129,21131],{"class":43,"line":8121},[41,21128,3589],{"class":275},[41,21130,1317],{"class":271},[41,21132,21133],{"class":378},"\"Person的析构函数调用\"\n",[41,21135,21136],{"class":43,"line":8148},[41,21137,2326],{"class":275},[41,21139,21140,21142],{"class":43,"line":8153},[41,21141,2124],{"class":271},[41,21143,15804],{"class":275},[41,21145,21146,21148,21150,21153],{"class":43,"line":8159},[41,21147,2124],{"class":271},[41,21149,6656],{"class":271},[41,21151,21152],{"class":275},"m_Height;",[41,21154,21155],{"class":47}," \u002F\u002F定义一个指针，指向身高\n",[41,21157,21158],{"class":43,"line":8171},[41,21159,4133],{"class":275},[41,21161,21162,21164,21166],{"class":43,"line":8183},[41,21163,5502],{"class":271},[41,21165,5726],{"class":54},[41,21167,2115],{"class":275},[41,21169,21170],{"class":43,"line":8195},[41,21171,1687],{"class":275},[41,21173,21174,21176,21178,21180,21182,21184,21187],{"class":43,"line":9854},[41,21175,19569],{"class":275},[41,21177,7268],{"class":54},[41,21179,276],{"class":275},[41,21181,923],{"class":58},[41,21183,651],{"class":275},[41,21185,21186],{"class":58},"160",[41,21188,2857],{"class":275},[41,21190,21191,21193,21195,21198,21200,21203,21205,21208,21210,21213,21215,21217],{"class":43,"line":9879},[41,21192,1692],{"class":275},[41,21194,1317],{"class":271},[41,21196,21197],{"class":378},"\"p1的年龄为:\"",[41,21199,1317],{"class":271},[41,21201,21202],{"class":275},"p1.m_Age",[41,21204,1317],{"class":271},[41,21206,21207],{"class":378},"\"身高为：\"",[41,21209,6557],{"class":271},[41,21211,21212],{"class":275},"p1.m_Height",[41,21214,1317],{"class":271},[41,21216,1382],{"class":275},[41,21218,21219],{"class":47},"  \u002F\u002F18\n",[41,21221,21222,21224,21226],{"class":43,"line":9902},[41,21223,19569],{"class":275},[41,21225,7171],{"class":54},[41,21227,17653],{"class":275},[41,21229,21230,21232,21234,21237,21239,21241,21243,21245,21247,21250,21252,21254],{"class":43,"line":9926},[41,21231,1692],{"class":275},[41,21233,1317],{"class":271},[41,21235,21236],{"class":378},"\"p2的年龄为：\"",[41,21238,1317],{"class":271},[41,21240,19599],{"class":275},[41,21242,1317],{"class":271},[41,21244,21207],{"class":378},[41,21246,6557],{"class":271},[41,21248,21249],{"class":275},"p2.m_Height",[41,21251,1317],{"class":271},[41,21253,1382],{"class":275},[41,21255,21219],{"class":47},[41,21257,21258],{"class":43,"line":9931},[41,21259,13348],{"class":275},[41,21261,21262],{"class":43,"line":9936},[41,21263,1706],{"class":275},[41,21265,21266,21268,21270],{"class":43,"line":9941},[41,21267,279],{"class":271},[41,21269,2112],{"class":54},[41,21271,2115],{"class":275},[41,21273,21274],{"class":43,"line":9950},[41,21275,1687],{"class":275},[41,21277,21278,21280],{"class":43,"line":9955},[41,21279,5771],{"class":54},[41,21281,5774],{"class":275},[41,21283,21284],{"class":43,"line":9961},[41,21285,1706],{"class":275},[20,21287,21288],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[20,21290,21291],{},"浅拷贝带来的问题是堆区的内存重复释放",[20,21293,21294],{},[1603,21295],{"alt":37,"src":21296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[20,21298,21299],{},"浅拷贝问题要使用深拷贝来解决",[20,21301,21302],{},[1603,21303],{"alt":37,"src":21304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[20,21306,21307],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[241,21309,21311],{"id":21310},"_826初始化列表","8.2.6初始化列表",[20,21313,21314],{},"作用：初始化属性",[20,21316,5319],{},[32,21318,21321],{"className":21319,"code":21320,"language":5325},[5323],"构造函数():属性1(值1),属性2(值2).....{}\n",[24,21322,21320],{"__ignoreMap":37},[20,21324,21325],{},"例子",[32,21327,21329],{"className":262,"code":21328,"language":264,"meta":37,"style":37},"#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",[24,21330,21331,21337,21347,21353,21357,21362,21366,21371,21376,21381,21386,21391,21396,21400,21405,21410,21453,21462,21480,21498,21516,21520,21524,21531,21538,21545,21549,21553,21561,21565,21569,21589,21598,21602,21606,21616,21620,21628],{"__ignoreMap":37},[41,21332,21333,21335],{"class":43,"line":44},[41,21334,2089],{"class":271},[41,21336,2092],{"class":378},[41,21338,21339,21341,21343,21345],{"class":43,"line":51},[41,21340,2097],{"class":271},[41,21342,2100],{"class":271},[41,21344,2103],{"class":54},[41,21346,1434],{"class":275},[41,21348,21349,21351],{"class":43,"line":62},[41,21350,14832],{"class":271},[41,21352,15309],{"class":54},[41,21354,21355],{"class":43,"line":70},[41,21356,1687],{"class":275},[41,21358,21359],{"class":43,"line":76},[41,21360,21361],{"class":271},"    public:\n",[41,21363,21364],{"class":43,"line":83},[41,21365,80],{"emptyLinePlaceholder":79},[41,21367,21368],{"class":43,"line":89},[41,21369,21370],{"class":47},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[41,21372,21373],{"class":43,"line":96},[41,21374,21375],{"class":47},"    \u002F\u002FPerson(int a, int b, int c) {\n",[41,21377,21378],{"class":43,"line":104},[41,21379,21380],{"class":47},"    \u002F\u002F  m_A = a;\n",[41,21382,21383],{"class":43,"line":176},[41,21384,21385],{"class":47},"    \u002F\u002F  m_B = b;\n",[41,21387,21388],{"class":43,"line":184},[41,21389,21390],{"class":47},"    \u002F\u002F  m_C = c;\n",[41,21392,21393],{"class":43,"line":1757},[41,21394,21395],{"class":47},"    \u002F\u002F}\n",[41,21397,21398],{"class":43,"line":1763},[41,21399,80],{"emptyLinePlaceholder":79},[41,21401,21402],{"class":43,"line":1768},[41,21403,21404],{"class":47},"    \u002F\u002F初始化列表方式初始化\n",[41,21406,21407],{"class":43,"line":1782},[41,21408,21409],{"class":47},"    \u002F\u002F使用有参构造函数\n",[41,21411,21412,21414,21416,21418,21420,21422,21424,21426,21428,21430,21432,21435,21438,21441,21444,21447,21450],{"class":43,"line":1787},[41,21413,18657],{"class":54},[41,21415,276],{"class":275},[41,21417,279],{"class":271},[41,21419,1539],{"class":5354},[41,21421,12573],{"class":275},[41,21423,279],{"class":271},[41,21425,2971],{"class":5354},[41,21427,12573],{"class":275},[41,21429,279],{"class":271},[41,21431,2987],{"class":5354},[41,21433,21434],{"class":275},") :",[41,21436,21437],{"class":54},"m_A",[41,21439,21440],{"class":275},"(a), ",[41,21442,21443],{"class":54},"m_B",[41,21445,21446],{"class":275},"(b), ",[41,21448,21449],{"class":54},"m_C",[41,21451,21452],{"class":275},"(c) {}\n",[41,21454,21455,21457,21460],{"class":43,"line":1793},[41,21456,15047],{"class":271},[41,21458,21459],{"class":54}," PrintPerson",[41,21461,10991],{"class":275},[41,21463,21464,21466,21468,21471,21473,21476,21478],{"class":43,"line":1814},[41,21465,9807],{"class":275},[41,21467,1317],{"class":271},[41,21469,21470],{"class":378}," \"mA:\"",[41,21472,1585],{"class":271},[41,21474,21475],{"class":275}," m_A ",[41,21477,1317],{"class":271},[41,21479,8978],{"class":275},[41,21481,21482,21484,21486,21489,21491,21494,21496],{"class":43,"line":1819},[41,21483,9807],{"class":275},[41,21485,1317],{"class":271},[41,21487,21488],{"class":378}," \"mB:\"",[41,21490,1585],{"class":271},[41,21492,21493],{"class":275}," m_B ",[41,21495,1317],{"class":271},[41,21497,8978],{"class":275},[41,21499,21500,21502,21504,21507,21509,21512,21514],{"class":43,"line":1833},[41,21501,9807],{"class":275},[41,21503,1317],{"class":271},[41,21505,21506],{"class":378}," \"mC:\"",[41,21508,1585],{"class":271},[41,21510,21511],{"class":275}," m_C ",[41,21513,1317],{"class":271},[41,21515,8978],{"class":275},[41,21517,21518],{"class":43,"line":1838},[41,21519,2326],{"class":275},[41,21521,21522],{"class":43,"line":1867},[41,21523,15360],{"class":271},[41,21525,21526,21528],{"class":43,"line":1872},[41,21527,2124],{"class":271},[41,21529,21530],{"class":275}," m_A;\n",[41,21532,21533,21535],{"class":43,"line":1889},[41,21534,2124],{"class":271},[41,21536,21537],{"class":275}," m_B;\n",[41,21539,21540,21542],{"class":43,"line":1894},[41,21541,2124],{"class":271},[41,21543,21544],{"class":275}," m_C;\n",[41,21546,21547],{"class":43,"line":1899},[41,21548,4133],{"class":275},[41,21550,21551],{"class":43,"line":1904},[41,21552,80],{"emptyLinePlaceholder":79},[41,21554,21555,21557,21559],{"class":43,"line":1918},[41,21556,279],{"class":271},[41,21558,2112],{"class":54},[41,21560,6116],{"class":275},[41,21562,21563],{"class":43,"line":1923},[41,21564,1687],{"class":275},[41,21566,21567],{"class":43,"line":2715},[41,21568,80],{"emptyLinePlaceholder":79},[41,21570,21571,21573,21575,21577,21579,21581,21583,21585,21587],{"class":43,"line":2729},[41,21572,19569],{"class":275},[41,21574,20],{"class":54},[41,21576,276],{"class":275},[41,21578,26],{"class":58},[41,21580,12573],{"class":275},[41,21582,351],{"class":58},[41,21584,12573],{"class":275},[41,21586,345],{"class":58},[41,21588,2857],{"class":275},[41,21590,21591,21593,21596],{"class":43,"line":2737},[41,21592,16004],{"class":275},[41,21594,21595],{"class":54},"PrintPerson",[41,21597,5774],{"class":275},[41,21599,21600],{"class":43,"line":2742},[41,21601,80],{"emptyLinePlaceholder":79},[41,21603,21604],{"class":43,"line":2748},[41,21605,80],{"emptyLinePlaceholder":79},[41,21607,21608,21610,21612,21614],{"class":43,"line":2754},[41,21609,2442],{"class":54},[41,21611,276],{"class":275},[41,21613,2447],{"class":378},[41,21615,2857],{"class":275},[41,21617,21618],{"class":43,"line":2759},[41,21619,80],{"emptyLinePlaceholder":79},[41,21621,21622,21624,21626],{"class":43,"line":8086},[41,21623,4228],{"class":271},[41,21625,4231],{"class":58},[41,21627,1434],{"class":275},[41,21629,21630],{"class":43,"line":8110},[41,21631,1706],{"class":275},[20,21633,21634,21635,21638,21639],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[423,21636,21637],{},"参数名就是定义的对象属性","，",[423,21640,21641],{},"属性后面的值为有参构造函数的形参",[32,21643,21645],{"className":262,"code":21644,"language":264,"meta":37,"style":37},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[24,21646,21647],{"__ignoreMap":37},[41,21648,21649,21651,21653,21655,21658,21660,21663,21665,21668,21670,21673,21675,21678,21680],{"class":43,"line":44},[41,21650,19184],{"class":54},[41,21652,276],{"class":275},[41,21654,279],{"class":271},[41,21656,21657],{"class":275}," a.",[41,21659,279],{"class":271},[41,21661,21662],{"class":275}," b,",[41,21664,279],{"class":271},[41,21666,21667],{"class":275}," b):",[41,21669,21437],{"class":54},[41,21671,21672],{"class":275},"(a),",[41,21674,21443],{"class":54},[41,21676,21677],{"class":275},"(c),",[41,21679,21449],{"class":54},[41,21681,21682],{"class":275},"(b) {}\n",[241,21684,21686],{"id":21685},"_827类对象作为类成员","8.2.7类对象作为类成员",[20,21688,21689],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[20,21691,14771],{},[32,21693,21695],{"className":262,"code":21694,"language":264,"meta":37,"style":37},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[24,21696,21697,21702,21707,21711,21716,21720],{"__ignoreMap":37},[41,21698,21699],{"class":43,"line":44},[41,21700,21701],{"class":275},"A{};\n",[41,21703,21704],{"class":43,"line":51},[41,21705,21706],{"class":275},"B\n",[41,21708,21709],{"class":43,"line":62},[41,21710,1687],{"class":275},[41,21712,21713],{"class":43,"line":70},[41,21714,21715],{"class":275},"    A a;\n",[41,21717,21718],{"class":43,"line":76},[41,21719,1706],{"class":275},[41,21721,21722],{"class":43,"line":83},[41,21723,21724],{"class":47},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[20,21726,21727],{},"案例",[32,21729,21731],{"className":262,"code":21730,"language":264,"meta":37,"style":37},"\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",[24,21732,21733,21738,21745,21749,21754,21759,21773,21777,21787,21798,21802,21809,21813,21826,21830,21835,21840,21844,21850,21854,21858,21862,21893,21897,21908,21912,21918,21922,21935,21939,21943,21947,21952,21957,21961,21969,21973,21990,22009,22013,22021,22025,22031],{"__ignoreMap":37},[41,21734,21735],{"class":43,"line":44},[41,21736,21737],{"class":47},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[41,21739,21740,21742],{"class":43,"line":51},[41,21741,14832],{"class":271},[41,21743,21744],{"class":54}," Phone\n",[41,21746,21747],{"class":43,"line":62},[41,21748,1687],{"class":275},[41,21750,21751],{"class":43,"line":70},[41,21752,21753],{"class":275},"public：\n",[41,21755,21756],{"class":43,"line":76},[41,21757,21758],{"class":47},"    \u002F\u002F 赋值(构造函数)\n",[41,21760,21761,21764,21766,21768,21771],{"class":43,"line":83},[41,21762,21763],{"class":54},"    Phone",[41,21765,276],{"class":275},[41,21767,15055],{"class":54},[41,21769,21770],{"class":5354}," pName",[41,21772,282],{"class":275},[41,21774,21775],{"class":43,"line":89},[41,21776,2169],{"class":275},[41,21778,21779,21782,21784],{"class":43,"line":96},[41,21780,21781],{"class":275},"        m_pName",[41,21783,321],{"class":271},[41,21785,21786],{"class":275},"pName;\n",[41,21788,21789,21791,21793,21796],{"class":43,"line":104},[41,21790,3589],{"class":275},[41,21792,1317],{"class":271},[41,21794,21795],{"class":378},"\"Phone的构造函数调用\"",[41,21797,1434],{"class":275},[41,21799,21800],{"class":43,"line":176},[41,21801,2326],{"class":275},[41,21803,21804,21807],{"class":43,"line":184},[41,21805,21806],{"class":54},"    ~Phone",[41,21808,2115],{"class":275},[41,21810,21811],{"class":43,"line":1757},[41,21812,2169],{"class":275},[41,21814,21815,21817,21819,21822,21824],{"class":43,"line":1763},[41,21816,3589],{"class":275},[41,21818,1317],{"class":271},[41,21820,21821],{"class":378},"\"Phone析构函数调用\"",[41,21823,1317],{"class":271},[41,21825,1339],{"class":275},[41,21827,21828],{"class":43,"line":1768},[41,21829,2326],{"class":275},[41,21831,21832],{"class":43,"line":1782},[41,21833,21834],{"class":47},"    \u002F\u002F\n",[41,21836,21837],{"class":43,"line":1787},[41,21838,21839],{"class":275},"    string m_PName;\n",[41,21841,21842],{"class":43,"line":1793},[41,21843,4133],{"class":275},[41,21845,21846,21848],{"class":43,"line":1814},[41,21847,14832],{"class":271},[41,21849,15309],{"class":54},[41,21851,21852],{"class":43,"line":1819},[41,21853,1687],{"class":275},[41,21855,21856],{"class":43,"line":1833},[41,21857,14854],{"class":271},[41,21859,21860],{"class":43,"line":1838},[41,21861,17132],{"class":47},[41,21863,21864,21866,21868,21870,21872,21874,21876,21879,21882,21884,21887,21890],{"class":43,"line":1867},[41,21865,18657],{"class":54},[41,21867,276],{"class":275},[41,21869,15055],{"class":54},[41,21871,15058],{"class":5354},[41,21873,651],{"class":275},[41,21875,15055],{"class":54},[41,21877,21878],{"class":5354}," pname",[41,21880,21881],{"class":275},"):",[41,21883,15148],{"class":54},[41,21885,21886],{"class":275},"(name),m_phone.",[41,21888,21889],{"class":54},"m_PName",[41,21891,21892],{"class":275},"(pname) \n",[41,21894,21895],{"class":43,"line":1872},[41,21896,2169],{"class":275},[41,21898,21899,21901,21903,21906],{"class":43,"line":1889},[41,21900,3589],{"class":275},[41,21902,1317],{"class":271},[41,21904,21905],{"class":378},"\"Person的构造函数调用\"",[41,21907,1434],{"class":275},[41,21909,21910],{"class":43,"line":1894},[41,21911,2326],{"class":275},[41,21913,21914,21916],{"class":43,"line":1899},[41,21915,18690],{"class":54},[41,21917,2115],{"class":275},[41,21919,21920],{"class":43,"line":1904},[41,21921,2169],{"class":275},[41,21923,21924,21926,21928,21931,21933],{"class":43,"line":1918},[41,21925,3589],{"class":275},[41,21927,1317],{"class":271},[41,21929,21930],{"class":378},"\"Person析构函数调用\"",[41,21932,1317],{"class":271},[41,21934,1339],{"class":275},[41,21936,21937],{"class":43,"line":1923},[41,21938,2326],{"class":275},[41,21940,21941],{"class":43,"line":2715},[41,21942,7918],{"class":47},[41,21944,21945],{"class":43,"line":2729},[41,21946,15030],{"class":275},[41,21948,21949],{"class":43,"line":2737},[41,21950,21951],{"class":47},"    \u002F\u002F手机\n",[41,21953,21954],{"class":43,"line":2742},[41,21955,21956],{"class":275},"    Phone m_Phone;\n",[41,21958,21959],{"class":43,"line":2748},[41,21960,4133],{"class":275},[41,21962,21963,21965,21967],{"class":43,"line":2754},[41,21964,5502],{"class":271},[41,21966,5726],{"class":54},[41,21968,2115],{"class":275},[41,21970,21971],{"class":43,"line":2759},[41,21972,1687],{"class":275},[41,21974,21975,21977,21979,21981,21983,21985,21988],{"class":43,"line":8086},[41,21976,19569],{"class":275},[41,21978,20],{"class":54},[41,21980,276],{"class":275},[41,21982,8054],{"class":378},[41,21984,651],{"class":275},[41,21986,21987],{"class":378},"\"安卓\"",[41,21989,2857],{"class":275},[41,21991,21992,21994,21996,21999,22001,22004,22006],{"class":43,"line":8110},[41,21993,1692],{"class":275},[41,21995,1317],{"class":271},[41,21997,21998],{"class":275},"p.Name",[41,22000,1317],{"class":271},[41,22002,22003],{"class":378},"\"拿着：\"",[41,22005,1317],{"class":271},[41,22007,22008],{"class":275},"p.m_phone.m_PName;\n",[41,22010,22011],{"class":43,"line":8115},[41,22012,1706],{"class":275},[41,22014,22015,22017,22019],{"class":43,"line":8121},[41,22016,279],{"class":271},[41,22018,2112],{"class":54},[41,22020,2115],{"class":275},[41,22022,22023],{"class":43,"line":8148},[41,22024,1687],{"class":275},[41,22026,22027,22029],{"class":43,"line":8153},[41,22028,5771],{"class":54},[41,22030,5774],{"class":275},[41,22032,22033],{"class":43,"line":8159},[41,22034,1706],{"class":275},[20,22036,9163],{},[32,22038,22040],{"className":262,"code":22039,"language":264,"meta":37,"style":37},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[24,22041,22042,22047],{"__ignoreMap":37},[41,22043,22044],{"class":43,"line":44},[41,22045,22046],{"class":47},"    \u002F\u002F不需要写这个：\n",[41,22048,22049],{"class":43,"line":51},[41,22050,22051],{"class":47},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[20,22053,22054],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[32,22056,22058],{"className":262,"code":22057,"language":264,"meta":37,"style":37},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[24,22059,22060],{"__ignoreMap":37},[41,22061,22062,22064,22067,22069,22072,22075],{"class":43,"line":44},[41,22063,19184],{"class":54},[41,22065,22066],{"class":275},"(string name.string pname):",[41,22068,15148],{"class":54},[41,22070,22071],{"class":275},"(name),",[41,22073,22074],{"class":54},"m_phone",[41,22076,22077],{"class":275},"(pname) {}\n",[20,22079,22080,22081,321,22084],{},"采用的是隐式转换法，实际为如下：\n",[24,22082,22083],{},"m_phone(pname)",[24,22085,22086],{},"Phone m_phone=pname",[20,22088,22089,22092],{},[423,22090,22091],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[20,22094,22095],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[241,22097,22099],{"id":22098},"_828静态对象","8.2.8静态对象",[20,22101,22102],{},"静态对象在成员对象前static，称为静态对象",[20,22104,22105],{},"静态对象分为两类：",[224,22107,22108],{},[227,22109,22110],{},"静态成员变量",[1280,22112,22113,22116,22119],{},[227,22114,22115],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[227,22117,22118],{},"②在编译阶段分配内存",[227,22120,22121],{},"③类内声明，类外初始化",[224,22123,22124],{"start":51},[227,22125,22126],{},"静态成员函数",[1280,22128,22129,22132],{},[227,22130,22131],{},"①所有对象共享同一个函数",[227,22133,22134],{},"②静态成员函数只能访问静态成员变量",[22136,22137,22139],"h4",{"id":22138},"_8281静态成员变量","8.2.8.1静态成员变量",[32,22141,22143],{"className":262,"code":22142,"language":264,"meta":37,"style":37},"#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",[24,22144,22145,22151,22161,22167,22171,22175,22180,22185,22190,22198,22202,22206,22210,22218,22222,22226,22231,22244,22248,22256,22260,22266],{"__ignoreMap":37},[41,22146,22147,22149],{"class":43,"line":44},[41,22148,2089],{"class":271},[41,22150,2092],{"class":378},[41,22152,22153,22155,22157,22159],{"class":43,"line":51},[41,22154,2097],{"class":271},[41,22156,2100],{"class":271},[41,22158,2103],{"class":54},[41,22160,1434],{"class":275},[41,22162,22163,22165],{"class":43,"line":62},[41,22164,14832],{"class":271},[41,22166,15309],{"class":54},[41,22168,22169],{"class":43,"line":70},[41,22170,1687],{"class":275},[41,22172,22173],{"class":43,"line":76},[41,22174,14854],{"class":271},[41,22176,22177],{"class":43,"line":83},[41,22178,22179],{"class":47},"    \u002F\u002F非静态成员变量\n",[41,22181,22182],{"class":43,"line":89},[41,22183,22184],{"class":47},"    \u002F\u002F int m_A;\n",[41,22186,22187],{"class":43,"line":96},[41,22188,22189],{"class":47},"    \u002F\u002F定义静态成员变量\n",[41,22191,22192,22194,22196],{"class":43,"line":104},[41,22193,11158],{"class":271},[41,22195,2521],{"class":271},[41,22197,21530],{"class":275},[41,22199,22200],{"class":43,"line":176},[41,22201,80],{"emptyLinePlaceholder":79},[41,22203,22204],{"class":43,"line":184},[41,22205,80],{"emptyLinePlaceholder":79},[41,22207,22208],{"class":43,"line":1757},[41,22209,4133],{"class":275},[41,22211,22212,22214,22216],{"class":43,"line":1763},[41,22213,5502],{"class":271},[41,22215,5726],{"class":54},[41,22217,2115],{"class":275},[41,22219,22220],{"class":43,"line":1768},[41,22221,1687],{"class":275},[41,22223,22224],{"class":43,"line":1782},[41,22225,15451],{"class":275},[41,22227,22228],{"class":43,"line":1787},[41,22229,22230],{"class":47},"    \u002F\u002F输出类成员变量这块内存\n",[41,22232,22233,22235,22237,22240,22242],{"class":43,"line":1793},[41,22234,1692],{"class":275},[41,22236,1317],{"class":271},[41,22238,22239],{"class":275},"p.m_A",[41,22241,1317],{"class":271},[41,22243,1339],{"class":275},[41,22245,22246],{"class":43,"line":1814},[41,22247,1706],{"class":275},[41,22249,22250,22252,22254],{"class":43,"line":1819},[41,22251,279],{"class":271},[41,22253,2112],{"class":54},[41,22255,2115],{"class":275},[41,22257,22258],{"class":43,"line":1833},[41,22259,1687],{"class":275},[41,22261,22262,22264],{"class":43,"line":1838},[41,22263,5771],{"class":54},[41,22265,2115],{"class":275},[41,22267,22268],{"class":43,"line":1867},[41,22269,1706],{"class":275},[20,22271,22272],{},"此时输出是报错的：无法解析外部命令",[20,22274,22275],{},"解决这一问题：必须用到类内声明，类外初始化操作",[32,22277,22279],{"className":262,"code":22278,"language":264,"meta":37,"style":37},"#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",[24,22280,22281,22287,22297,22303,22307,22311,22316,22324,22328,22333,22348,22356,22360,22364,22369,22374,22386,22391,22402,22407,22412,22425,22429,22437,22441,22447],{"__ignoreMap":37},[41,22282,22283,22285],{"class":43,"line":44},[41,22284,2089],{"class":271},[41,22286,2092],{"class":378},[41,22288,22289,22291,22293,22295],{"class":43,"line":51},[41,22290,2097],{"class":271},[41,22292,2100],{"class":271},[41,22294,2103],{"class":54},[41,22296,1434],{"class":275},[41,22298,22299,22301],{"class":43,"line":62},[41,22300,14832],{"class":271},[41,22302,15309],{"class":54},[41,22304,22305],{"class":43,"line":70},[41,22306,1687],{"class":275},[41,22308,22309],{"class":43,"line":76},[41,22310,14854],{"class":271},[41,22312,22313],{"class":43,"line":83},[41,22314,22315],{"class":47},"    \u002F\u002F类内声明\n",[41,22317,22318,22320,22322],{"class":43,"line":89},[41,22319,11158],{"class":271},[41,22321,2521],{"class":271},[41,22323,21530],{"class":275},[41,22325,22326],{"class":43,"line":96},[41,22327,4133],{"class":275},[41,22329,22330],{"class":43,"line":104},[41,22331,22332],{"class":47},"\u002F\u002F类外初始化\n",[41,22334,22335,22337,22339,22342,22344,22346],{"class":43,"line":176},[41,22336,279],{"class":271},[41,22338,15707],{"class":54},[41,22340,22341],{"class":275},"::m_A",[41,22343,321],{"class":271},[41,22345,719],{"class":58},[41,22347,1434],{"class":275},[41,22349,22350,22352,22354],{"class":43,"line":184},[41,22351,5502],{"class":271},[41,22353,5726],{"class":54},[41,22355,2115],{"class":275},[41,22357,22358],{"class":43,"line":1757},[41,22359,1687],{"class":275},[41,22361,22362],{"class":43,"line":1763},[41,22363,15451],{"class":275},[41,22365,22366],{"class":43,"line":1768},[41,22367,22368],{"class":47},"    \u002F\u002F访问变量的原内存空间\n",[41,22370,22371],{"class":43,"line":1782},[41,22372,22373],{"class":47},"    \u002F\u002F100\n",[41,22375,22376,22378,22380,22382,22384],{"class":43,"line":1787},[41,22377,1692],{"class":275},[41,22379,1317],{"class":271},[41,22381,22239],{"class":275},[41,22383,1317],{"class":271},[41,22385,1339],{"class":275},[41,22387,22388],{"class":43,"line":1793},[41,22389,22390],{"class":275},"    Person p2;\n",[41,22392,22393,22396,22398,22400],{"class":43,"line":1814},[41,22394,22395],{"class":275},"    p2.m_A",[41,22397,321],{"class":271},[41,22399,1862],{"class":58},[41,22401,1434],{"class":275},[41,22403,22404],{"class":43,"line":1819},[41,22405,22406],{"class":47},"    \u002F\u002F继续访问这片空间\n",[41,22408,22409],{"class":43,"line":1833},[41,22410,22411],{"class":47},"    \u002F\u002F200\n",[41,22413,22414,22416,22418,22421,22423],{"class":43,"line":1838},[41,22415,1692],{"class":275},[41,22417,1317],{"class":271},[41,22419,22420],{"class":275},"p2.m_A",[41,22422,1317],{"class":271},[41,22424,1339],{"class":275},[41,22426,22427],{"class":43,"line":1867},[41,22428,1706],{"class":275},[41,22430,22431,22433,22435],{"class":43,"line":1872},[41,22432,279],{"class":271},[41,22434,2112],{"class":54},[41,22436,2115],{"class":275},[41,22438,22439],{"class":43,"line":1889},[41,22440,1687],{"class":275},[41,22442,22443,22445],{"class":43,"line":1894},[41,22444,5771],{"class":54},[41,22446,5774],{"class":275},[41,22448,22449],{"class":43,"line":1899},[41,22450,1706],{"class":275},[20,22452,22453],{},[423,22454,22455],{},"静态变量的访问",[32,22457,22459],{"className":262,"code":22458,"language":264,"meta":37,"style":37},"#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",[24,22460,22461,22467,22477,22483,22487,22491,22495,22503,22507,22512,22520,22524,22528,22542,22557,22565,22569,22574,22579,22584,22589,22601,22606,22611,22625,22642,22646,22654,22658,22664],{"__ignoreMap":37},[41,22462,22463,22465],{"class":43,"line":44},[41,22464,2089],{"class":271},[41,22466,2092],{"class":378},[41,22468,22469,22471,22473,22475],{"class":43,"line":51},[41,22470,2097],{"class":271},[41,22472,2100],{"class":271},[41,22474,2103],{"class":54},[41,22476,1434],{"class":275},[41,22478,22479,22481],{"class":43,"line":62},[41,22480,14832],{"class":271},[41,22482,15309],{"class":54},[41,22484,22485],{"class":43,"line":70},[41,22486,1687],{"class":275},[41,22488,22489],{"class":43,"line":76},[41,22490,14854],{"class":271},[41,22492,22493],{"class":43,"line":83},[41,22494,22315],{"class":47},[41,22496,22497,22499,22501],{"class":43,"line":89},[41,22498,11158],{"class":271},[41,22500,2521],{"class":271},[41,22502,21530],{"class":275},[41,22504,22505],{"class":43,"line":96},[41,22506,15360],{"class":271},[41,22508,22509],{"class":43,"line":104},[41,22510,22511],{"class":47},"    \u002F\u002F静态成员变量也是有访问权限的\n",[41,22513,22514,22516,22518],{"class":43,"line":176},[41,22515,11158],{"class":271},[41,22517,2521],{"class":271},[41,22519,21537],{"class":275},[41,22521,22522],{"class":43,"line":184},[41,22523,4133],{"class":275},[41,22525,22526],{"class":43,"line":1757},[41,22527,22332],{"class":47},[41,22529,22530,22532,22534,22536,22538,22540],{"class":43,"line":1763},[41,22531,279],{"class":271},[41,22533,15707],{"class":54},[41,22535,22341],{"class":275},[41,22537,321],{"class":271},[41,22539,719],{"class":58},[41,22541,1434],{"class":275},[41,22543,22544,22546,22548,22551,22553,22555],{"class":43,"line":1768},[41,22545,279],{"class":271},[41,22547,15707],{"class":54},[41,22549,22550],{"class":275},"::m_B",[41,22552,321],{"class":271},[41,22554,973],{"class":58},[41,22556,1434],{"class":275},[41,22558,22559,22561,22563],{"class":43,"line":1782},[41,22560,5502],{"class":271},[41,22562,5795],{"class":54},[41,22564,2115],{"class":275},[41,22566,22567],{"class":43,"line":1787},[41,22568,1687],{"class":275},[41,22570,22571],{"class":43,"line":1793},[41,22572,22573],{"class":47},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[41,22575,22576],{"class":43,"line":1814},[41,22577,22578],{"class":47},"    \u002F\u002F静态成员变量有两种访问方式：\n",[41,22580,22581],{"class":43,"line":1819},[41,22582,22583],{"class":47},"    \u002F\u002F1.通过对象进行访问\n",[41,22585,22586],{"class":43,"line":1833},[41,22587,22588],{"class":275},"    Person p;  \n",[41,22590,22591,22593,22595,22597,22599],{"class":43,"line":1838},[41,22592,1692],{"class":275},[41,22594,1317],{"class":271},[41,22596,22239],{"class":275},[41,22598,1317],{"class":271},[41,22600,1339],{"class":275},[41,22602,22603],{"class":43,"line":1867},[41,22604,22605],{"class":47},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[41,22607,22608],{"class":43,"line":1872},[41,22609,22610],{"class":47},"    \u002F\u002F2.通过类名进行访问\n",[41,22612,22613,22615,22617,22619,22621,22623],{"class":43,"line":1889},[41,22614,1692],{"class":275},[41,22616,1317],{"class":271},[41,22618,19184],{"class":54},[41,22620,22341],{"class":275},[41,22622,1317],{"class":271},[41,22624,1339],{"class":275},[41,22626,22627,22629,22631,22633,22635,22637,22639],{"class":43,"line":1894},[41,22628,1692],{"class":275},[41,22630,1317],{"class":271},[41,22632,19184],{"class":54},[41,22634,22550],{"class":275},[41,22636,1317],{"class":271},[41,22638,1382],{"class":275},[41,22640,22641],{"class":47}," \u002F\u002F没有访问权限，报错\n",[41,22643,22644],{"class":43,"line":1899},[41,22645,1706],{"class":275},[41,22647,22648,22650,22652],{"class":43,"line":1904},[41,22649,279],{"class":271},[41,22651,2112],{"class":54},[41,22653,2115],{"class":275},[41,22655,22656],{"class":43,"line":1918},[41,22657,1687],{"class":275},[41,22659,22660,22662],{"class":43,"line":1923},[41,22661,5840],{"class":54},[41,22663,5774],{"class":275},[41,22665,22666],{"class":43,"line":2715},[41,22667,1706],{"class":275},[22136,22669,22671],{"id":22670},"_8282静态成员函数","8.2.8.2静态成员函数",[20,22673,22674],{},"1.静态成员函数定义与访问",[32,22676,22678],{"className":262,"code":22677,"language":264,"meta":37,"style":37},"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",[24,22679,22680,22686,22690,22694,22699,22710,22714,22728,22732,22736,22744,22748,22753,22758,22762,22770,22775,22785],{"__ignoreMap":37},[41,22681,22682,22684],{"class":43,"line":44},[41,22683,14832],{"class":271},[41,22685,15309],{"class":54},[41,22687,22688],{"class":43,"line":51},[41,22689,1687],{"class":275},[41,22691,22692],{"class":43,"line":62},[41,22693,14854],{"class":271},[41,22695,22696],{"class":43,"line":70},[41,22697,22698],{"class":47},"    \u002F\u002F在公共权限下定义静态成员函数\n",[41,22700,22701,22703,22706,22708],{"class":43,"line":76},[41,22702,11158],{"class":271},[41,22704,22705],{"class":271}," void",[41,22707,11523],{"class":54},[41,22709,2115],{"class":275},[41,22711,22712],{"class":43,"line":83},[41,22713,2169],{"class":275},[41,22715,22716,22719,22721,22724,22726],{"class":43,"line":89},[41,22717,22718],{"class":275},"        coout",[41,22720,1317],{"class":271},[41,22722,22723],{"class":378},"\"静态成员函数的调用\"",[41,22725,1317],{"class":271},[41,22727,1339],{"class":275},[41,22729,22730],{"class":43,"line":96},[41,22731,2326],{"class":275},[41,22733,22734],{"class":43,"line":104},[41,22735,4133],{"class":275},[41,22737,22738,22740,22742],{"class":43,"line":176},[41,22739,5502],{"class":271},[41,22741,5726],{"class":54},[41,22743,2115],{"class":275},[41,22745,22746],{"class":43,"line":184},[41,22747,1687],{"class":275},[41,22749,22750],{"class":43,"line":1757},[41,22751,22752],{"class":47},"    \u002F\u002F静态成员函数的调用方式:\n",[41,22754,22755],{"class":43,"line":1763},[41,22756,22757],{"class":47},"    \u002F\u002F1.通过对象访问\n",[41,22759,22760],{"class":43,"line":1768},[41,22761,15451],{"class":275},[41,22763,22764,22766,22768],{"class":43,"line":1782},[41,22765,16004],{"class":275},[41,22767,11689],{"class":54},[41,22769,5774],{"class":275},[41,22771,22772],{"class":43,"line":1787},[41,22773,22774],{"class":47},"    \u002F\u002F2.通过类名访问\n",[41,22776,22777,22779,22781,22783],{"class":43,"line":1793},[41,22778,18657],{"class":54},[41,22780,17870],{"class":275},[41,22782,11689],{"class":54},[41,22784,5774],{"class":275},[41,22786,22787],{"class":43,"line":1814},[41,22788,1706],{"class":275},[224,22790,22791],{"start":51},[227,22792,22793],{},"静态成员函数只能访问静态成员变量",[32,22795,22797],{"className":262,"code":22796,"language":264,"meta":37,"style":37},"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",[24,22798,22799,22805,22809,22813,22817,22827,22831,22845,22850,22862,22866,22877,22887,22891,22895,22899,22909,22913,22926,22930,22934,22938,22942,22956,22964,22968,22972,22976,22980,22988,22992,23002,23007,23011,23019,23023,23029],{"__ignoreMap":37},[41,22800,22801,22803],{"class":43,"line":44},[41,22802,14832],{"class":271},[41,22804,15309],{"class":54},[41,22806,22807],{"class":43,"line":51},[41,22808,1687],{"class":275},[41,22810,22811],{"class":43,"line":62},[41,22812,14854],{"class":271},[41,22814,22815],{"class":43,"line":70},[41,22816,22698],{"class":47},[41,22818,22819,22821,22823,22825],{"class":43,"line":76},[41,22820,11158],{"class":271},[41,22822,22705],{"class":271},[41,22824,11523],{"class":54},[41,22826,2115],{"class":275},[41,22828,22829],{"class":43,"line":83},[41,22830,2169],{"class":275},[41,22832,22833,22836,22838,22840,22842],{"class":43,"line":89},[41,22834,22835],{"class":275},"        m_A",[41,22837,321],{"class":271},[41,22839,584],{"class":58},[41,22841,330],{"class":275},[41,22843,22844],{"class":47}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[41,22846,22847],{"class":43,"line":96},[41,22848,22849],{"class":47},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[41,22851,22852,22854,22856,22858,22860],{"class":43,"line":104},[41,22853,22718],{"class":275},[41,22855,1317],{"class":271},[41,22857,22723],{"class":378},[41,22859,1317],{"class":271},[41,22861,1339],{"class":275},[41,22863,22864],{"class":43,"line":176},[41,22865,2326],{"class":275},[41,22867,22868,22870,22872,22874],{"class":43,"line":184},[41,22869,11158],{"class":271},[41,22871,2521],{"class":271},[41,22873,15586],{"class":275},[41,22875,22876],{"class":47}," \u002F\u002F静态成员变量\n",[41,22878,22879,22881,22884],{"class":43,"line":1757},[41,22880,2124],{"class":271},[41,22882,22883],{"class":275}," m_B;",[41,22885,22886],{"class":47}," \u002F\u002F非静态成员变量\n",[41,22888,22889],{"class":43,"line":1763},[41,22890,80],{"emptyLinePlaceholder":79},[41,22892,22893],{"class":43,"line":1768},[41,22894,15360],{"class":271},[41,22896,22897],{"class":43,"line":1782},[41,22898,22511],{"class":47},[41,22900,22901,22903,22905,22907],{"class":43,"line":1787},[41,22902,11158],{"class":271},[41,22904,22705],{"class":271},[41,22906,13756],{"class":54},[41,22908,2115],{"class":275},[41,22910,22911],{"class":43,"line":1793},[41,22912,2169],{"class":275},[41,22914,22915,22917,22919,22922,22924],{"class":43,"line":1814},[41,22916,3589],{"class":275},[41,22918,1317],{"class":271},[41,22920,22921],{"class":378},"\"这是私有权限下的静态函数调用\"",[41,22923,1317],{"class":271},[41,22925,1339],{"class":275},[41,22927,22928],{"class":43,"line":1819},[41,22929,2326],{"class":275},[41,22931,22932],{"class":43,"line":1833},[41,22933,80],{"emptyLinePlaceholder":79},[41,22935,22936],{"class":43,"line":1838},[41,22937,80],{"emptyLinePlaceholder":79},[41,22939,22940],{"class":43,"line":1867},[41,22941,4133],{"class":275},[41,22943,22944,22946,22948,22950,22952,22954],{"class":43,"line":1872},[41,22945,279],{"class":271},[41,22947,15707],{"class":54},[41,22949,22341],{"class":275},[41,22951,321],{"class":271},[41,22953,465],{"class":58},[41,22955,1434],{"class":275},[41,22957,22958,22960,22962],{"class":43,"line":1889},[41,22959,5502],{"class":271},[41,22961,5726],{"class":54},[41,22963,2115],{"class":275},[41,22965,22966],{"class":43,"line":1894},[41,22967,1687],{"class":275},[41,22969,22970],{"class":43,"line":1899},[41,22971,22752],{"class":47},[41,22973,22974],{"class":43,"line":1904},[41,22975,22757],{"class":47},[41,22977,22978],{"class":43,"line":1918},[41,22979,15451],{"class":275},[41,22981,22982,22984,22986],{"class":43,"line":1923},[41,22983,16004],{"class":275},[41,22985,11689],{"class":54},[41,22987,5774],{"class":275},[41,22989,22990],{"class":43,"line":2715},[41,22991,22774],{"class":47},[41,22993,22994,22996,22998,23000],{"class":43,"line":2729},[41,22995,18657],{"class":54},[41,22997,17870],{"class":275},[41,22999,11689],{"class":54},[41,23001,5774],{"class":275},[41,23003,23004],{"class":43,"line":2737},[41,23005,23006],{"class":47},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[41,23008,23009],{"class":43,"line":2742},[41,23010,1706],{"class":275},[41,23012,23013,23015,23017],{"class":43,"line":2748},[41,23014,279],{"class":271},[41,23016,2112],{"class":54},[41,23018,2115],{"class":275},[41,23020,23021],{"class":43,"line":2754},[41,23022,1687],{"class":275},[41,23024,23025,23027],{"class":43,"line":2759},[41,23026,5771],{"class":54},[41,23028,5774],{"class":275},[41,23030,23031],{"class":43,"line":8086},[41,23032,1706],{"class":275},[241,23034,23036],{"id":23035},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22136,23038,23040],{"id":23039},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[20,23042,23043],{},"在c++中，类内的成员变量和成员函数分开存储",[20,23045,23046],{},"只有非静态成员变量才属于类的对象上",[23048,23049,23051],"h5",{"id":23050},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[32,23053,23055],{"className":262,"code":23054,"language":264,"meta":37,"style":37},"#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",[24,23056,23057,23064,23074,23080,23084,23088,23092,23100,23104,23108,23131,23135,23143,23147,23153],{"__ignoreMap":37},[41,23058,23059,23061],{"class":43,"line":44},[41,23060,2089],{"class":271},[41,23062,23063],{"class":378},"\u003Ciostraem>\n",[41,23065,23066,23068,23070,23072],{"class":43,"line":51},[41,23067,2097],{"class":271},[41,23069,2100],{"class":271},[41,23071,2103],{"class":54},[41,23073,1434],{"class":275},[41,23075,23076,23078],{"class":43,"line":62},[41,23077,14832],{"class":271},[41,23079,15309],{"class":54},[41,23081,23082],{"class":43,"line":70},[41,23083,1687],{"class":275},[41,23085,23086],{"class":43,"line":76},[41,23087,80],{"emptyLinePlaceholder":79},[41,23089,23090],{"class":43,"line":83},[41,23091,4133],{"class":275},[41,23093,23094,23096,23098],{"class":43,"line":89},[41,23095,5502],{"class":271},[41,23097,5726],{"class":54},[41,23099,2115],{"class":275},[41,23101,23102],{"class":43,"line":96},[41,23103,1687],{"class":275},[41,23105,23106],{"class":43,"line":104},[41,23107,15451],{"class":275},[41,23109,23110,23112,23114,23117,23119,23122,23124,23126,23128],{"class":43,"line":176},[41,23111,1692],{"class":275},[41,23113,1317],{"class":271},[41,23115,23116],{"class":378},"\"size of p=\"",[41,23118,1317],{"class":271},[41,23120,23121],{"class":54},"sizeoif",[41,23123,6677],{"class":275},[41,23125,1317],{"class":271},[41,23127,1382],{"class":275},[41,23129,23130],{"class":47}," \u002F\u002F查看这个空类的占用的内存空间\n",[41,23132,23133],{"class":43,"line":184},[41,23134,1706],{"class":275},[41,23136,23137,23139,23141],{"class":43,"line":1757},[41,23138,279],{"class":271},[41,23140,2112],{"class":54},[41,23142,2115],{"class":275},[41,23144,23145],{"class":43,"line":1763},[41,23146,1687],{"class":275},[41,23148,23149,23151],{"class":43,"line":1768},[41,23150,5771],{"class":54},[41,23152,5774],{"class":275},[41,23154,23155],{"class":43,"line":1782},[41,23156,1706],{"class":275},[20,23158,23159],{},"输出结果为：size of p=1",[20,23161,23162],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[20,23164,23165],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23048,23167,23169],{"id":23168},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[32,23171,23173],{"className":262,"code":23172,"language":264,"meta":37,"style":37},"#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",[24,23174,23175,23181,23191,23199,23203,23212,23216,23224,23228,23232,23251,23255,23259,23267,23271,23277],{"__ignoreMap":37},[41,23176,23177,23179],{"class":43,"line":44},[41,23178,2089],{"class":271},[41,23180,2092],{"class":378},[41,23182,23183,23185,23187,23189],{"class":43,"line":51},[41,23184,2097],{"class":271},[41,23186,2100],{"class":271},[41,23188,2103],{"class":54},[41,23190,1434],{"class":275},[41,23192,23193,23195,23197],{"class":43,"line":62},[41,23194,14832],{"class":271},[41,23196,15707],{"class":54},[41,23198,2812],{"class":275},[41,23200,23201],{"class":43,"line":70},[41,23202,1687],{"class":275},[41,23204,23205,23207,23209],{"class":43,"line":76},[41,23206,2124],{"class":271},[41,23208,15586],{"class":275},[41,23210,23211],{"class":47},"\u002F\u002F非静态成员变量\n",[41,23213,23214],{"class":43,"line":83},[41,23215,4133],{"class":275},[41,23217,23218,23220,23222],{"class":43,"line":89},[41,23219,5502],{"class":271},[41,23221,5726],{"class":54},[41,23223,2115],{"class":275},[41,23225,23226],{"class":43,"line":96},[41,23227,1687],{"class":275},[41,23229,23230],{"class":43,"line":104},[41,23231,15451],{"class":275},[41,23233,23234,23236,23238,23240,23242,23244,23246,23248],{"class":43,"line":176},[41,23235,1692],{"class":275},[41,23237,1317],{"class":271},[41,23239,23116],{"class":378},[41,23241,1513],{"class":271},[41,23243,6677],{"class":275},[41,23245,1317],{"class":271},[41,23247,1382],{"class":275},[41,23249,23250],{"class":47}," \u002F\u002F查看不是空对象时占用多少内存\n",[41,23252,23253],{"class":43,"line":184},[41,23254,80],{"emptyLinePlaceholder":79},[41,23256,23257],{"class":43,"line":1757},[41,23258,1706],{"class":275},[41,23260,23261,23263,23265],{"class":43,"line":1763},[41,23262,279],{"class":271},[41,23264,2112],{"class":54},[41,23266,2115],{"class":275},[41,23268,23269],{"class":43,"line":1768},[41,23270,1687],{"class":275},[41,23272,23273,23275],{"class":43,"line":1782},[41,23274,5771],{"class":54},[41,23276,5774],{"class":275},[41,23278,23279],{"class":43,"line":1787},[41,23280,1706],{"class":275},[20,23282,23283],{},"输出结果：size of p=4",[20,23285,23286],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[224,23288,23289],{},[227,23290,23291],{},"如果加上非静态成员变量，Person类修改如下",[32,23293,23295],{"className":262,"code":23294,"language":264,"meta":37,"style":37},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[24,23296,23297,23303,23307,23313,23321,23325,23330],{"__ignoreMap":37},[41,23298,23299,23301],{"class":43,"line":44},[41,23300,14832],{"class":271},[41,23302,15309],{"class":54},[41,23304,23305],{"class":43,"line":51},[41,23306,1687],{"class":275},[41,23308,23309,23311],{"class":43,"line":62},[41,23310,2124],{"class":271},[41,23312,21530],{"class":275},[41,23314,23315,23317,23319],{"class":43,"line":70},[41,23316,11158],{"class":271},[41,23318,2521],{"class":271},[41,23320,21537],{"class":275},[41,23322,23323],{"class":43,"line":76},[41,23324,4133],{"class":275},[41,23326,23327],{"class":43,"line":83},[41,23328,23329],{"class":47},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[41,23331,23332,23334,23336,23338,23340,23342],{"class":43,"line":89},[41,23333,279],{"class":271},[41,23335,15707],{"class":54},[41,23337,22550],{"class":275},[41,23339,321],{"class":271},[41,23341,465],{"class":58},[41,23343,1434],{"class":275},[20,23345,23346],{},"输出结果：4",[20,23348,23349],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[224,23351,23352],{"start":51},[227,23353,23354],{},"加上非静态成员函数",[32,23356,23358],{"className":262,"code":23357,"language":264,"meta":37,"style":37},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[24,23359,23360,23367,23371,23377,23385,23389,23393,23397],{"__ignoreMap":37},[41,23361,23362,23364],{"class":43,"line":44},[41,23363,14832],{"class":271},[41,23365,23366],{"class":54},"  Person\n",[41,23368,23369],{"class":43,"line":51},[41,23370,1687],{"class":275},[41,23372,23373,23375],{"class":43,"line":62},[41,23374,2124],{"class":271},[41,23376,21530],{"class":275},[41,23378,23379,23381,23383],{"class":43,"line":70},[41,23380,15047],{"class":271},[41,23382,11523],{"class":54},[41,23384,2115],{"class":275},[41,23386,23387],{"class":43,"line":76},[41,23388,2169],{"class":275},[41,23390,23391],{"class":43,"line":83},[41,23392,80],{"emptyLinePlaceholder":79},[41,23394,23395],{"class":43,"line":89},[41,23396,2326],{"class":275},[41,23398,23399],{"class":43,"line":96},[41,23400,4133],{"class":275},[20,23402,23403],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[224,23405,23406],{"start":62},[227,23407,23408],{},"加上静态成员函数",[32,23410,23412],{"className":262,"code":23411,"language":264,"meta":37,"style":37},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[24,23413,23414,23420,23424,23430,23438,23442,23446,23450,23461,23465,23469,23473],{"__ignoreMap":37},[41,23415,23416,23418],{"class":43,"line":44},[41,23417,14832],{"class":271},[41,23419,23366],{"class":54},[41,23421,23422],{"class":43,"line":51},[41,23423,1687],{"class":275},[41,23425,23426,23428],{"class":43,"line":62},[41,23427,2124],{"class":271},[41,23429,21530],{"class":275},[41,23431,23432,23434,23436],{"class":43,"line":70},[41,23433,15047],{"class":271},[41,23435,11523],{"class":54},[41,23437,2115],{"class":275},[41,23439,23440],{"class":43,"line":76},[41,23441,2169],{"class":275},[41,23443,23444],{"class":43,"line":83},[41,23445,80],{"emptyLinePlaceholder":79},[41,23447,23448],{"class":43,"line":89},[41,23449,2326],{"class":275},[41,23451,23452,23454,23456,23459],{"class":43,"line":96},[41,23453,11158],{"class":271},[41,23455,22705],{"class":271},[41,23457,23458],{"class":54}," func1",[41,23460,2115],{"class":275},[41,23462,23463],{"class":43,"line":104},[41,23464,2169],{"class":275},[41,23466,23467],{"class":43,"line":176},[41,23468,80],{"emptyLinePlaceholder":79},[41,23470,23471],{"class":43,"line":184},[41,23472,2326],{"class":275},[41,23474,23475],{"class":43,"line":1757},[41,23476,4133],{"class":275},[20,23478,23346],{},[20,23480,23481],{},"解释：静态成员函数也不属于类上",[189,23483,7812],{},{"title":37,"searchDepth":51,"depth":51,"links":23485},[23486,23492],{"id":14783,"depth":51,"text":14784,"children":23487},[23488,23489,23490,23491],{"id":14787,"depth":62,"text":14788},{"id":15512,"depth":62,"text":15513},{"id":15684,"depth":62,"text":15685},{"id":16143,"depth":62,"text":16144},{"id":18515,"depth":51,"text":18516,"children":23493},[23494,23495,23496,23497,23498,23499,23500,23501,23502],{"id":18527,"depth":62,"text":18528},{"id":18820,"depth":62,"text":18821},{"id":19311,"depth":62,"text":19312},{"id":20408,"depth":62,"text":20409},{"id":20831,"depth":62,"text":20832},{"id":21310,"depth":62,"text":21311},{"id":21685,"depth":62,"text":21686},{"id":22098,"depth":62,"text":22099},{"id":23035,"depth":62,"text":23036},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14748,"description":23503},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23510,"title":264,"body":23511,"description":196,"extension":197,"meta":23515,"navigation":79,"path":23517,"seo":23518,"stem":23519,"__hash__":23520},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23512,"toc":23513},[],{"title":37,"searchDepth":51,"depth":51,"links":23514},[],{"category":23516},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":264,"description":196},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23522,"title":23523,"body":23524,"description":37,"extension":197,"meta":24113,"navigation":79,"path":24114,"seo":24115,"stem":24116,"__hash__":24117},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23525,"toc":24095},[23526,23529,23533,23536,23539,23542,23560,23565,23568,23571,23574,23577,23582,23585,23590,23593,23596,23600,23603,23606,23612,23615,23633,23637,23641,23644,23649,23652,23656,23659,23672,23675,23679,23682,23685,23688,23713,23716,23725,23736,23751,23783,23787,23794,23802,23806,23809,23812,23817,23821,23824,23827,23832,23835,23839,23842,23845,23850,23853,23857,23862,23866,23933,23937,23940,23943,23946,23949,23952,23958,23977,23980,23994,24003,24007,24010,24013,24018,24021,24026,24031,24034,24037,24042,24047,24050,24055,24060,24063,24068,24073,24076,24079,24084,24087,24092],[10,23527,23523],{"id":23528},"_1强化学习基本认识",[15,23530,23532],{"id":23531},"_11什么是强化学习","1.1.什么是强化学习",[20,23534,23535],{},"强化学习有两部分组成：智能体和环境；",[20,23537,23538],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[20,23540,23541],{},"强化学习与监督学习的区别:",[224,23543,23544,23547,23550,23553],{},[227,23545,23546],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[227,23548,23549],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[227,23551,23552],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[227,23554,23555,23556,23559],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[423,23557,23558],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[20,23561,23562],{},[1603,23563],{"alt":37,"src":23564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[20,23566,23567],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[20,23569,23570],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[20,23572,23573],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[20,23575,23576],{},"获取奖励",[20,23578,23579],{},[1603,23580],{"alt":37,"src":23581},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[20,23583,23584],{},"强化学习可以分成标准强化学习和深度强化学习",[20,23586,23587],{},[1603,23588],{"alt":37,"src":23589},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[20,23591,23592],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[20,23594,23595],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[15,23597,23599],{"id":23598},"_12强化学习应用场景","1.2.强化学习应用场景",[20,23601,23602],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[20,23604,23605],{},"具身智能中的应用",[20,23607,23608,23611],{},[423,23609,23610],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[20,23613,23614],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[20,23616,23617,23618,23621,23622,23625,23626,23629,23630],{},"机器人是",[423,23619,23620],{},"躯体","，深度学习是",[423,23623,23624],{},"神经元****网络","，VLA是",[423,23627,23628],{},"通用的行为逻辑","，而强化学习是",[423,23631,23632],{},"教练",[15,23634,23636],{"id":23635},"_13序列决策","1.3.序列决策",[241,23638,23640],{"id":23639},"_131智能体与环境","1.3.1.智能体与环境",[20,23642,23643],{},"强化学习研究的问题是智能体agent与环境交互的问题",[20,23645,23646],{},[1603,23647],{"alt":37,"src":23648},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[20,23650,23651],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[241,23653,23655],{"id":23654},"_132奖励","1.3.2.奖励",[20,23657,23658],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[20,23660,23661,23662,23671],{},"取某个策略的表现如何。强化学习的目的就是",[423,23663,23664,23665,23670],{},"最大化",[423,23666,23667],{},[423,23668,23669],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[20,23673,23674],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[241,23676,23678],{"id":23677},"_133序列决策","1.3.3.序列决策",[20,23680,23681],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[20,23683,23684],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[20,23686,23687],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[20,23689,23690,23694,23695,23697,23698,23700,23701,23703,23704,13933,23707,13933,23710],{},[23691,23692,23693],"em",{},"Ht"," = ",[23691,23696,869],{},"1*, a",[23691,23699,26],{},", r",[23691,23702,26],{},", . . . ,* ",[23691,23705,23706],{},"ot",[23691,23708,23709],{},", at ,",[23691,23711,23712],{},"rt",[20,23714,23715],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[20,23717,23718,23694,23721,1798,23723,702],{},[23691,23719,23720],{},"st",[23691,23722,327],{},[23691,23724,23693],{},[20,23726,23727,23728,23731,23732,23735],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[423,23729,23730],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[423,23733,23734],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[20,23737,23738,23739,23742,23743,23746,23747,23750],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[423,23740,23741],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[423,23744,23745],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23691,23748,23749],{},"S, A, T, R, Ω, O, γ",")。",[20,23752,23753,23754,23756,23757,23759,23760,276,23762,23765,23766,23768,23769,276,23772,23775,23776,23778,23779,23782],{},"其中 ",[23691,23755,962],{}," 表示状态空间，为隐变量，",[23691,23758,505],{}," 为动作空间，",[23691,23761,987],{},[23691,23763,23764],{},"s ′ |s, a",") 为状态转移概率，",[23691,23767,937],{}," 为奖励函数，",[23691,23770,23771],{},"Ω",[23691,23773,23774],{},"o|s, a",") 为观测概率，",[23691,23777,863],{}," 为观测空间，",[23691,23780,23781],{},"γ"," 为折扣因子。",[15,23784,23786],{"id":23785},"_14动作空间","1.4.动作空间",[20,23788,23789,23790,23793],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[423,23791,23792],{},"动作空间"," ，动作空间分为:",[224,23795,23796,23799],{},[227,23797,23798],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[227,23800,23801],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[15,23803,23805],{"id":23804},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[20,23807,23808],{},"由策略、价值函数、模型三部分组成",[20,23810,23811],{},"这三者组成马尔可夫决策过程",[20,23813,23814],{},[1603,23815],{"alt":37,"src":23816},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[241,23818,23820],{"id":23819},"_151策略","1.5.1.策略",[20,23822,23823],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[20,23825,23826],{},"策略可分为两种：",[20,23828,23829],{},[1603,23830],{"alt":37,"src":23831},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[20,23833,23834],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[241,23836,23838],{"id":23837},"_152价值函数","1.5.2.价值函数",[20,23840,23841],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[20,23843,23844],{},"价值函数中有一个折扣因子，类似于存款利息",[20,23846,23847],{},[1603,23848],{"alt":37,"src":23849},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[20,23851,23852],{},"进入某个状态采取的最优动作可以通过Q函数得到",[241,23854,23856],{"id":23855},"_153模型","1.5.3.模型",[20,23858,23859],{},[1603,23860],{"alt":37,"src":23861},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[15,23863,23865],{"id":23864},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[411,23867,23868,23879],{},[414,23869,23870],{},[417,23871,23872,23876],{},[420,23873,23875],{"align":23874},"left","类型",[420,23877,23878],{"align":23874},"特点",[458,23880,23881,23891,23901,23911,23923],{},[417,23882,23883,23888],{},[463,23884,23885],{"align":23874},[423,23886,23887],{},"基于价值的智能体",[463,23889,23890],{"align":23874},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[417,23892,23893,23898],{},[463,23894,23895],{"align":23874},[423,23896,23897],{},"基于策略的智能体",[463,23899,23900],{"align":23874},"直接学习策略，没有学习价值函数",[417,23902,23903,23908],{},[463,23904,23905],{"align":23874},[423,23906,23907],{},"演员-评论员智能体",[463,23909,23910],{"align":23874},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[417,23912,23913,23918],{},[463,23914,23915],{"align":23874},[423,23916,23917],{},"有模型强化学习智能体",[463,23919,23920],{"align":23874},[1603,23921],{"alt":37,"src":23922},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[417,23924,23925,23930],{},[463,23926,23927],{"align":23874},[423,23928,23929],{},"免模型强化学习智能体",[463,23931,23932],{"align":23874},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[15,23934,23936],{"id":23935},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[20,23938,23939],{},"学习和规划是序列决策的两个基本问题",[20,23941,23942],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[20,23944,23945],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[20,23947,23948],{},"强化学习用到的库：Gym",[20,23950,23951],{},"Gym可以检验强化学习算法的优劣",[20,23953,23954,23957],{},[423,23955,23956],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[32,23959,23961],{"className":34,"code":23960,"language":36,"meta":37,"style":37},"pip install gym==0.25.2\n",[24,23962,23963],{"__ignoreMap":37},[41,23964,23965,23968,23971,23974],{"class":43,"line":44},[41,23966,23967],{"class":54},"pip",[41,23969,23970],{"class":378}," install",[41,23972,23973],{"class":378}," gym==",[41,23975,23976],{"class":58},"0.25.2\n",[20,23978,23979],{},"显示图形界面需要",[32,23981,23983],{"className":34,"code":23982,"language":36,"meta":37,"style":37},"pip install pygame\n",[24,23984,23985],{"__ignoreMap":37},[41,23986,23987,23989,23991],{"class":43,"line":44},[41,23988,23967],{"class":54},[41,23990,23970],{"class":378},[41,23992,23993],{"class":378}," pygame\n",[20,23995,23996,23997],{},"有关Gym库的相关文档介绍：",[511,23998,24002],{"href":23999,"rel":24000},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24001],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[15,24004,24006],{"id":24005},"_18一些补充基础概念","1.8.一些补充基础概念",[20,24008,24009],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[20,24011,24012],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[20,24014,24015],{},[1603,24016],{"alt":37,"src":24017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[20,24019,24020],{},"折扣率需要自己来设定",[20,24022,24023],{},[1603,24024],{"alt":37,"src":24025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[224,24027,24028],{},[227,24029,24030],{},"状态转移函数：",[20,24032,24033],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[20,24035,24036],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[20,24038,24039],{},[1603,24040],{"alt":37,"src":24041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[224,24043,24044],{"start":51},[227,24045,24046],{},"动作价值函数：",[20,24048,24049],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[20,24051,24052],{},[1603,24053],{"alt":37,"src":24054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[224,24056,24057],{"start":62},[227,24058,24059],{},"最优动作价值函数：",[20,24061,24062],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[20,24064,24065],{},[1603,24066],{"alt":37,"src":24067},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[224,24069,24070],{"start":70},[227,24071,24072],{},"状态价值函数:",[20,24074,24075],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[20,24077,24078],{},"它衡量的是“一个具体动作”的长期价值",[20,24080,24081],{},[1603,24082],{"alt":37,"src":24083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[20,24085,24086],{},"几个价值函数之间的比较：",[20,24088,24089],{},[1603,24090],{"alt":37,"src":24091},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[189,24093,24094],{},"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":37,"searchDepth":51,"depth":51,"links":24096},[24097,24098,24099,24104,24105,24110,24111,24112],{"id":23531,"depth":51,"text":23532},{"id":23598,"depth":51,"text":23599},{"id":23635,"depth":51,"text":23636,"children":24100},[24101,24102,24103],{"id":23639,"depth":62,"text":23640},{"id":23654,"depth":62,"text":23655},{"id":23677,"depth":62,"text":23678},{"id":23785,"depth":51,"text":23786},{"id":23804,"depth":51,"text":23805,"children":24106},[24107,24108,24109],{"id":23819,"depth":62,"text":23820},{"id":23837,"depth":62,"text":23838},{"id":23855,"depth":62,"text":23856},{"id":23864,"depth":51,"text":23865},{"id":23935,"depth":51,"text":23936},{"id":24005,"depth":51,"text":24006},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23523,"description":37},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24119,"title":24120,"body":24121,"description":24128,"extension":197,"meta":24139,"navigation":79,"path":24140,"seo":24141,"stem":24142,"__hash__":24143},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24122,"toc":24137},[24123,24126,24129,24134],[10,24124,24120],{"id":24125},"_2马尔可夫决策过程",[20,24127,24128],{},"这是强化学习的基本框架",[20,24130,24131],{},[1603,24132],{"alt":37,"src":24133},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[20,24135,24136],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":37,"searchDepth":51,"depth":51,"links":24138},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24120,"description":24128},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24145,"title":24146,"body":24147,"description":37,"extension":197,"meta":24263,"navigation":79,"path":24264,"seo":24265,"stem":24266,"__hash__":24267},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24148,"toc":24258},[24149,24152,24156,24159,24164,24169,24172,24177,24180,24185,24188,24192,24197,24200,24205,24210,24215,24218,24222,24227,24230,24235,24240,24245,24250,24253],[10,24150,24146],{"id":24151},"_3动作价值函数",[15,24153,24155],{"id":24154},"_31dqn","3.1.DQN",[20,24157,24158],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[20,24160,24161],{},[1603,24162],{"alt":37,"src":24163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[20,24165,24166],{},[1603,24167],{"alt":37,"src":24168},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[20,24170,24171],{},"DQN算法的描述：",[20,24173,24174],{},[1603,24175],{"alt":37,"src":24176},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[20,24178,24179],{},"这里的Dense指的是全连接层",[20,24181,24182],{},[1603,24183],{"alt":37,"src":24184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[20,24186,24187],{},"当前观测的状态为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算法",[15,24189,24191],{"id":24190},"_32dqn的举例","3.2.DQN的举例",[20,24193,24194],{},[1603,24195],{"alt":37,"src":24196},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[20,24198,24199],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[20,24201,24202],{},[1603,24203],{"alt":37,"src":24204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[20,24206,24207],{},[1603,24208],{"alt":37,"src":24209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[20,24211,24212],{},[1603,24213],{"alt":37,"src":24214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[20,24216,24217],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[15,24219,24221],{"id":24220},"_33td算法","3.3.TD算法",[20,24223,24224],{},[1603,24225],{"alt":37,"src":24226},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[20,24228,24229],{},"强化学习TD算法公式的粗略解释：",[20,24231,24232],{},[1603,24233],{"alt":37,"src":24234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[20,24236,24237],{},[1603,24238],{"alt":37,"src":24239},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[20,24241,24242],{},[1603,24243],{"alt":37,"src":24244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[20,24246,24247],{},[1603,24248],{"alt":37,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[20,24251,24252],{},"TD算法总结：",[20,24254,24255],{},[1603,24256],{"alt":37,"src":24257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":37,"searchDepth":51,"depth":51,"links":24259},[24260,24261,24262],{"id":24154,"depth":51,"text":24155},{"id":24190,"depth":51,"text":24191},{"id":24220,"depth":51,"text":24221},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24146,"description":37},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24269,"title":24270,"body":24271,"description":37,"extension":197,"meta":24504,"navigation":79,"path":24505,"seo":24506,"stem":24507,"__hash__":24508},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24272,"toc":24500},[24273,24276,24280,24283,24286,24291,24296,24299,24304,24309,24312,24317,24320,24325,24328,24333,24336,24341,24344,24349,24354,24357,24362,24365,24368,24373,24376,24381,24386,24390,24393,24396,24401,24406,24409,24414,24419,24422,24427,24430,24433,24438,24441,24446,24449,24454,24459,24462,24467,24472,24475,24480,24483,24488,24491],[10,24274,24270],{"id":24275},"_4策略学习",[15,24277,24279],{"id":24278},"_41概念描述","4.1.概念描述",[20,24281,24282],{},"用神经网络（策略网络）近似策略函数",[20,24284,24285],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[20,24287,24288],{},[1603,24289],{"alt":37,"src":24290},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[20,24292,24293],{},[1603,24294],{"alt":37,"src":24295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[20,24297,24298],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[20,24300,24301],{},[1603,24302],{"alt":37,"src":24303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[20,24305,24306],{},[1603,24307],{"alt":37,"src":24308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[20,24310,24311],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[20,24313,24314],{},[1603,24315],{"alt":37,"src":24316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[20,24318,24319],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[20,24321,24322],{},[1603,24323],{"alt":37,"src":24324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[20,24326,24327],{},"改进theta要用到策略梯度算法",[20,24329,24330],{},[1603,24331],{"alt":37,"src":24332},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[20,24334,24335],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[20,24337,24338],{},[1603,24339],{"alt":37,"src":24340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[20,24342,24343],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[20,24345,24346],{},[1603,24347],{"alt":37,"src":24348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[20,24350,24351],{},[1603,24352],{"alt":37,"src":24353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[20,24355,24356],{},"梯度公式总结：",[20,24358,24359],{},[1603,24360],{"alt":37,"src":24361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[20,24363,24364],{},"两个公式的分别应用场景：",[20,24366,24367],{},"对于离散的动作：",[20,24369,24370],{},[1603,24371],{"alt":37,"src":24372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[20,24374,24375],{},"对于连续的动作：",[20,24377,24378],{},[1603,24379],{"alt":37,"src":24380},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[20,24382,24383],{},[1603,24384],{"alt":37,"src":24385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[15,24387,24389],{"id":24388},"_42概率梯度算法总结","4.2.概率梯度算法总结",[20,24391,24392],{},"使用蒙特卡洛来近似计算策略梯度",[20,24394,24395],{},"蒙特卡洛法的解释如下：",[20,24397,24398],{},[1603,24399],{"alt":37,"src":24400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[20,24402,24403],{},[1603,24404],{"alt":37,"src":24405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[20,24407,24408],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[224,24410,24411],{},[227,24412,24413],{},"方法一：reinforce算法",[20,24415,24416],{},[1603,24417],{"alt":37,"src":24418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[20,24420,24421],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[224,24423,24424],{"start":51},[227,24425,24426],{},"方法二：actor-critic算法",[20,24428,24429],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[20,24431,24432],{},"两个网络的构建：",[20,24434,24435],{},[1603,24436],{"alt":37,"src":24437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[20,24439,24440],{},"actor网路：",[20,24442,24443],{},[1603,24444],{"alt":37,"src":24445},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[20,24447,24448],{},"critic网络",[20,24450,24451],{},[1603,24452],{"alt":37,"src":24453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[224,24455,24456],{"start":62},[227,24457,24458],{},"网络的训练",[20,24460,24461],{},"网络描述",[20,24463,24464],{},[1603,24465],{"alt":37,"src":24466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[20,24468,24469],{},[1603,24470],{"alt":37,"src":24471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[20,24473,24474],{},"TD算法更新梯度：",[20,24476,24477],{},[1603,24478],{"alt":37,"src":24479},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[20,24481,24482],{},"策略网络更新梯度：",[20,24484,24485],{},[1603,24486],{"alt":37,"src":24487},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[20,24489,24490],{},"训练整个流程的具体描述：",[20,24492,24493,24496,24497],{},[1603,24494],{"alt":37,"src":24495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1603,24498],{"alt":37,"src":24499},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":37,"searchDepth":51,"depth":51,"links":24501},[24502,24503],{"id":24278,"depth":51,"text":24279},{"id":24388,"depth":51,"text":24389},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24270,"description":37},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24510,"title":24511,"body":24512,"description":24519,"extension":197,"meta":24569,"navigation":79,"path":24570,"seo":24571,"stem":24572,"__hash__":24573},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24513,"toc":24565},[24514,24517,24520,24524,24527,24532,24536,24539,24544,24547,24552,24557,24560],[10,24515,24511],{"id":24516},"_5alphago算法",[20,24518,24519],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[15,24521,24523],{"id":24522},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[20,24525,24526],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[20,24528,24529],{},[1603,24530],{"alt":37,"src":24531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[15,24533,24535],{"id":24534},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[20,24537,24538],{},"采用强化学习的方式训练策略网络",[20,24540,24541],{},[1603,24542],{"alt":37,"src":24543},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[20,24545,24546],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[20,24548,24549],{},[1603,24550],{"alt":37,"src":24551},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[20,24553,24554],{},[1603,24555],{"alt":37,"src":24556},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[20,24558,24559],{},"强化学习训练策略网络的总结：",[20,24561,24562],{},[1603,24563],{"alt":37,"src":24564},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":37,"searchDepth":51,"depth":51,"links":24566},[24567,24568],{"id":24522,"depth":51,"text":24523},{"id":24534,"depth":51,"text":24535},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24511,"description":24519},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24575,"title":24576,"body":24577,"description":24584,"extension":197,"meta":24587,"navigation":79,"path":24588,"seo":24589,"stem":24590,"__hash__":24591},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24578,"toc":24585},[24579,24582],[10,24580,24576],{"id":24581},"_6价值网络",[20,24583,24584],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":37,"searchDepth":51,"depth":51,"links":24586},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24576,"description":24584},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24593,"title":24594,"body":24595,"description":24599,"extension":197,"meta":24600,"navigation":79,"path":24601,"seo":24602,"stem":24603,"__hash__":24604},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24596,"toc":24597},[],{"title":37,"searchDepth":51,"depth":51,"links":24598},[],"记录自己的强化学习笔记。",{"category":23516},"\u002Fwiki\u002F2025-12-04",{"title":24594,"description":24599},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24606,"title":24607,"body":24608,"description":196,"extension":197,"meta":24647,"navigation":79,"path":24648,"seo":24649,"stem":24650,"__hash__":24651},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24609,"toc":24645},[24610,24613,24616,24622,24625,24631,24634,24639,24642],[10,24611,24607],{"id":24612},"_1-项目概览与官方资源",[20,24614,24615],{},"官方文档：",[20,24617,24618],{},[511,24619,24620],{"href":24620,"rel":24621},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24001],[20,24623,24624],{},"官方代码仓库：",[20,24626,24627],{},[511,24628,24629],{"href":24629,"rel":24630},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24001],[20,24632,24633],{},"复现大体流程：",[20,24635,24636],{},[1603,24637],{"alt":37,"src":24638},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[20,24640,24641],{},"本教程的目标是打通这条链路：",[20,24643,24644],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":37,"searchDepth":51,"depth":51,"links":24646},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24607,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24653,"title":24654,"body":24655,"description":196,"extension":197,"meta":24771,"navigation":79,"path":24772,"seo":24773,"stem":24774,"__hash__":24775},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24656,"toc":24766},[24657,24660,24664,24667,24674,24678,24681,24690,24700,24704,24734,24737,24763],[10,24658,24654],{"id":24659},"_2-环境准备与设备连接",[15,24661,24663],{"id":24662},"_21-系统与环境","2.1 系统与环境",[20,24665,24666],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[20,24668,24669,24670,24673],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[24,24671,24672],{},"lerobot"," 依赖。",[15,24675,24677],{"id":24676},"_22-机械臂串口识别","2.2 机械臂串口识别",[20,24679,24680],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[32,24682,24684],{"className":34,"code":24683,"language":36,"meta":37,"style":37},"lerobot-find-out\n",[24,24685,24686],{"__ignoreMap":37},[41,24687,24688],{"class":43,"line":44},[41,24689,24683],{"class":54},[20,24691,24692,24693,486,24696,24699],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[24,24694,24695],{},"\u002Fdev\u002FttyACM0",[24,24697,24698],{},"\u002Fdev\u002FttyACM1","）。",[15,24701,24703],{"id":24702},"_23-串口授权","2.3 串口授权",[32,24705,24707],{"className":34,"code":24706,"language":36,"meta":37,"style":37},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[24,24708,24709,24723],{"__ignoreMap":37},[41,24710,24711,24714,24717,24720],{"class":43,"line":44},[41,24712,24713],{"class":54},"sudo",[41,24715,24716],{"class":378}," chmod",[41,24718,24719],{"class":58}," 666",[41,24721,24722],{"class":378}," \u002Fdev\u002FttyACM0\n",[41,24724,24725,24727,24729,24731],{"class":43,"line":51},[41,24726,24713],{"class":54},[41,24728,24716],{"class":378},[41,24730,24719],{"class":58},[41,24732,24733],{"class":378}," \u002Fdev\u002FttyACM1\n",[20,24735,24736],{},"说明：",[1280,24738,24739,24744,24750,24760],{},[227,24740,24741,24743],{},[24,24742,24713],{},"：以 root 权限执行命令。",[227,24745,24746,24749],{},[24,24747,24748],{},"chmod","：修改设备节点权限。",[227,24751,24752,24755,24756,24759],{},[24,24753,24754],{},"666","：",[24,24757,24758],{},"rw-rw-rw-","，所有用户可读写。",[227,24761,24762],{},"串口号必须替换为你机器上的真实端口。",[189,24764,24765],{},"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":37,"searchDepth":51,"depth":51,"links":24767},[24768,24769,24770],{"id":24662,"depth":51,"text":24663},{"id":24676,"depth":51,"text":24677},{"id":24702,"depth":51,"text":24703},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24654,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":4,"title":5,"body":24777,"description":196,"extension":197,"meta":24909,"navigation":79,"path":199,"seo":24910,"stem":201,"__hash__":202},{"type":7,"value":24778,"toc":24905},[24779,24781,24783,24787,24789,24837,24839,24841,24843,24903],[10,24780,13],{"id":12},[15,24782,18],{"id":17},[20,24784,22,24785,27],{},[24,24786,26],{},[20,24788,30],{},[32,24790,24791],{"className":34,"code":35,"language":36,"meta":37,"style":37},[24,24792,24793,24797,24803,24809,24813,24817,24821,24827,24833],{"__ignoreMap":37},[41,24794,24795],{"class":43,"line":44},[41,24796,48],{"class":47},[41,24798,24799,24801],{"class":43,"line":51},[41,24800,55],{"class":54},[41,24802,59],{"class":58},[41,24804,24805,24807],{"class":43,"line":62},[41,24806,65],{"class":58},[41,24808,59],{"class":58},[41,24810,24811],{"class":43,"line":70},[41,24812,73],{"class":58},[41,24814,24815],{"class":43,"line":76},[41,24816,80],{"emptyLinePlaceholder":79},[41,24818,24819],{"class":43,"line":83},[41,24820,86],{"class":47},[41,24822,24823,24825],{"class":43,"line":89},[41,24824,55],{"class":54},[41,24826,59],{"class":58},[41,24828,24829,24831],{"class":43,"line":96},[41,24830,99],{"class":58},[41,24832,59],{"class":58},[41,24834,24835],{"class":43,"line":104},[41,24836,107],{"class":58},[20,24838,110],{},[15,24840,114],{"id":113},[20,24842,117],{},[32,24844,24845],{"className":34,"code":120,"language":36,"meta":37,"style":37},[24,24846,24847,24851,24857,24863,24869,24873,24877,24881,24887,24893,24899],{"__ignoreMap":37},[41,24848,24849],{"class":43,"line":44},[41,24850,127],{"class":47},[41,24852,24853,24855],{"class":43,"line":51},[41,24854,132],{"class":54},[41,24856,59],{"class":58},[41,24858,24859,24861],{"class":43,"line":62},[41,24860,65],{"class":58},[41,24862,59],{"class":58},[41,24864,24865,24867],{"class":43,"line":70},[41,24866,145],{"class":58},[41,24868,59],{"class":58},[41,24870,24871],{"class":43,"line":76},[41,24872,152],{"class":58},[41,24874,24875],{"class":43,"line":83},[41,24876,80],{"emptyLinePlaceholder":79},[41,24878,24879],{"class":43,"line":89},[41,24880,161],{"class":47},[41,24882,24883,24885],{"class":43,"line":96},[41,24884,132],{"class":54},[41,24886,59],{"class":58},[41,24888,24889,24891],{"class":43,"line":104},[41,24890,99],{"class":58},[41,24892,59],{"class":58},[41,24894,24895,24897],{"class":43,"line":176},[41,24896,179],{"class":58},[41,24898,59],{"class":58},[41,24900,24901],{"class":43,"line":184},[41,24902,187],{"class":58},[189,24904,191],{},{"title":37,"searchDepth":51,"depth":51,"links":24906},[24907,24908],{"id":17,"depth":51,"text":18},{"id":113,"depth":51,"text":114},{},{"title":5,"description":196},{"id":24912,"title":24913,"body":24914,"description":196,"extension":197,"meta":25105,"navigation":79,"path":25106,"seo":25107,"stem":25108,"__hash__":25109},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24915,"toc":25101},[24916,24919,24923,24970,24974,24987,25050,25053,25098],[10,24917,24913],{"id":24918},"_4-遥操与相机接入",[15,24920,24922],{"id":24921},"_41-不带相机遥操","4.1 不带相机遥操",[32,24924,24926],{"className":34,"code":24925,"language":36,"meta":37,"style":37},"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",[24,24927,24928,24935,24941,24947,24954,24960,24966],{"__ignoreMap":37},[41,24929,24930,24933],{"class":43,"line":44},[41,24931,24932],{"class":54},"lerobot-teleoperate",[41,24934,59],{"class":58},[41,24936,24937,24939],{"class":43,"line":51},[41,24938,99],{"class":58},[41,24940,59],{"class":58},[41,24942,24943,24945],{"class":43,"line":62},[41,24944,179],{"class":58},[41,24946,59],{"class":58},[41,24948,24949,24952],{"class":43,"line":70},[41,24950,24951],{"class":58},"  --robot.id=my_awesome_follower_arm",[41,24953,59],{"class":58},[41,24955,24956,24958],{"class":43,"line":76},[41,24957,65],{"class":58},[41,24959,59],{"class":58},[41,24961,24962,24964],{"class":43,"line":83},[41,24963,145],{"class":58},[41,24965,59],{"class":58},[41,24967,24968],{"class":43,"line":89},[41,24969,152],{"class":58},[15,24971,24973],{"id":24972},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[32,24975,24977],{"className":34,"code":24976,"language":36,"meta":37,"style":37},"lerobot-find-cameras opencv\n",[24,24978,24979],{"__ignoreMap":37},[41,24980,24981,24984],{"class":43,"line":44},[41,24982,24983],{"class":54},"lerobot-find-cameras",[41,24985,24986],{"class":378}," opencv\n",[32,24988,24990],{"className":34,"code":24989,"language":36,"meta":37,"style":37},"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",[24,24991,24992,24998,25004,25010,25016,25026,25032,25038,25045],{"__ignoreMap":37},[41,24993,24994,24996],{"class":43,"line":44},[41,24995,24932],{"class":54},[41,24997,59],{"class":58},[41,24999,25000,25002],{"class":43,"line":51},[41,25001,99],{"class":58},[41,25003,59],{"class":58},[41,25005,25006,25008],{"class":43,"line":62},[41,25007,179],{"class":58},[41,25009,59],{"class":58},[41,25011,25012,25014],{"class":43,"line":70},[41,25013,24951],{"class":58},[41,25015,59],{"class":58},[41,25017,25018,25021,25024],{"class":43,"line":76},[41,25019,25020],{"class":58},"  --robot.cameras=",[41,25022,25023],{"class":378},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[41,25025,59],{"class":58},[41,25027,25028,25030],{"class":43,"line":83},[41,25029,65],{"class":58},[41,25031,59],{"class":58},[41,25033,25034,25036],{"class":43,"line":89},[41,25035,145],{"class":58},[41,25037,59],{"class":58},[41,25039,25040,25043],{"class":43,"line":96},[41,25041,25042],{"class":58},"  --teleop.id=my_awesome_leader_arm",[41,25044,59],{"class":58},[41,25046,25047],{"class":43,"line":104},[41,25048,25049],{"class":58},"  --display_data=true\n",[20,25051,25052],{},"相机参数说明：",[1280,25054,25055,25061,25067,25076,25086,25092],{},[227,25056,25057,25060],{},[24,25058,25059],{},"front","：相机名称。",[227,25062,25063,25066],{},[24,25064,25065],{},"type: opencv","：相机驱动类型。",[227,25068,25069,25072,25073,24699],{},[24,25070,25071],{},"index_or_path","：设备编号或设备路径（如 ",[24,25074,25075],{},"\u002Fdev\u002Fvideo4",[227,25077,25078,25081,25082,25085],{},[24,25079,25080],{},"width"," \u002F ",[24,25083,25084],{},"height","：图像分辨率。",[227,25087,25088,25091],{},[24,25089,25090],{},"fps","：采样帧率。",[227,25093,25094,25097],{},[24,25095,25096],{},"--display_data=true","：启用实时可视化。",[189,25099,25100],{},"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":37,"searchDepth":51,"depth":51,"links":25102},[25103,25104],{"id":24921,"depth":51,"text":24922},{"id":24972,"depth":51,"text":24973},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24913,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25111,"title":25112,"body":25113,"description":196,"extension":197,"meta":25285,"navigation":79,"path":25286,"seo":25287,"stem":25288,"__hash__":25289},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25114,"toc":25280},[25115,25119,25123,25128,25133,25136,25178,25184,25188,25237,25242,25246,25249,25257,25262,25267,25272,25277],[10,25116,25118],{"id":25117},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[15,25120,25122],{"id":25121},"_51-生成访问令牌","5.1 生成访问令牌",[20,25124,25125],{},[1603,25126],{"alt":37,"src":25127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[20,25129,25130],{},[1603,25131],{"alt":37,"src":25132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[20,25134,25135],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[32,25137,25139],{"className":34,"code":25138,"language":36,"meta":37,"style":37},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[24,25140,25141,25154],{"__ignoreMap":37},[41,25142,25143,25146,25149,25151],{"class":43,"line":44},[41,25144,25145],{"class":271},"export",[41,25147,25148],{"class":275}," HF_TOKEN",[41,25150,321],{"class":271},[41,25152,25153],{"class":378},"\"your_huggingface_token\"\n",[41,25155,25156,25159,25162,25165,25168,25170,25173,25175],{"class":43,"line":51},[41,25157,25158],{"class":54},"hf",[41,25160,25161],{"class":378}," auth",[41,25163,25164],{"class":378}," login",[41,25166,25167],{"class":58}," --token",[41,25169,9862],{"class":378},[41,25171,25172],{"class":275},"$HF_TOKEN",[41,25174,524],{"class":378},[41,25176,25177],{"class":58}," --add-to-git-credential\n",[20,25179,25180,25183],{},[24,25181,25182],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[15,25185,25187],{"id":25186},"_52-验证登录","5.2 验证登录",[32,25189,25191],{"className":34,"code":25190,"language":36,"meta":37,"style":37},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[24,25192,25193,25224],{"__ignoreMap":37},[41,25194,25195,25198,25200,25203,25205,25207,25210,25213,25216,25219,25222],{"class":43,"line":44},[41,25196,25197],{"class":275},"HF_USER",[41,25199,321],{"class":271},[41,25201,25202],{"class":275},"$(",[41,25204,25158],{"class":54},[41,25206,25161],{"class":378},[41,25208,25209],{"class":378}," whoami",[41,25211,25212],{"class":271}," |",[41,25214,25215],{"class":54}," head",[41,25217,25218],{"class":58}," -n",[41,25220,25221],{"class":58}," 1",[41,25223,282],{"class":275},[41,25225,25226,25229,25231,25234],{"class":43,"line":51},[41,25227,25228],{"class":58},"echo",[41,25230,9862],{"class":378},[41,25232,25233],{"class":275},"$HF_USER",[41,25235,25236],{"class":378},"\"\n",[20,25238,25239],{},[1603,25240],{"alt":37,"src":25241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[15,25243,25245],{"id":25244},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[20,25247,25248],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1280,25250,25251,25254],{},[227,25252,25253],{},"Dataset Repo（用于上传演示数据）",[227,25255,25256],{},"Model Repo（用于上传训练后的 ACT 权重）",[20,25258,25259],{},[1603,25260],{"alt":37,"src":25261},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[20,25263,25264],{},[1603,25265],{"alt":37,"src":25266},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[20,25268,25269],{},[1603,25270],{"alt":37,"src":25271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[20,25273,25274],{},[1603,25275],{"alt":37,"src":25276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[189,25278,25279],{},"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":37,"searchDepth":51,"depth":51,"links":25281},[25282,25283,25284],{"id":25121,"depth":51,"text":25122},{"id":25186,"depth":51,"text":25187},{"id":25244,"depth":51,"text":25245},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25112,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25291,"title":25292,"body":25293,"description":196,"extension":197,"meta":25490,"navigation":79,"path":25491,"seo":25492,"stem":25493,"__hash__":25494},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25294,"toc":25485},[25295,25299,25303,25399,25407,25412,25416,25432,25435,25439,25482],[10,25296,25298],{"id":25297},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[15,25300,25302],{"id":25301},"_61-录制示教数据","6.1 录制示教数据",[32,25304,25306],{"className":34,"code":25305,"language":36,"meta":37,"style":37},"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",[24,25307,25308,25315,25321,25327,25333,25342,25348,25354,25360,25367,25377,25384,25394],{"__ignoreMap":37},[41,25309,25310,25313],{"class":43,"line":44},[41,25311,25312],{"class":54},"lerobot-record",[41,25314,59],{"class":58},[41,25316,25317,25319],{"class":43,"line":51},[41,25318,99],{"class":58},[41,25320,59],{"class":58},[41,25322,25323,25325],{"class":43,"line":62},[41,25324,179],{"class":58},[41,25326,59],{"class":58},[41,25328,25329,25331],{"class":43,"line":70},[41,25330,24951],{"class":58},[41,25332,59],{"class":58},[41,25334,25335,25337,25340],{"class":43,"line":76},[41,25336,25020],{"class":58},[41,25338,25339],{"class":378},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[41,25341,59],{"class":58},[41,25343,25344,25346],{"class":43,"line":83},[41,25345,65],{"class":58},[41,25347,59],{"class":58},[41,25349,25350,25352],{"class":43,"line":89},[41,25351,145],{"class":58},[41,25353,59],{"class":58},[41,25355,25356,25358],{"class":43,"line":96},[41,25357,25042],{"class":58},[41,25359,59],{"class":58},[41,25361,25362,25365],{"class":43,"line":104},[41,25363,25364],{"class":58},"  --display_data=true",[41,25366,59],{"class":58},[41,25368,25369,25372,25375],{"class":43,"line":176},[41,25370,25371],{"class":58},"  --dataset.repo_id=",[41,25373,25374],{"class":378},"\"Embodied-AI-6\u002Fso101_test\"",[41,25376,59],{"class":58},[41,25378,25379,25382],{"class":43,"line":184},[41,25380,25381],{"class":58},"  --dataset.num_episodes=10",[41,25383,59],{"class":58},[41,25385,25386,25389,25392],{"class":43,"line":1757},[41,25387,25388],{"class":58},"  --dataset.single_task=",[41,25390,25391],{"class":378},"\"Grab the green cube\"",[41,25393,59],{"class":58},[41,25395,25396],{"class":43,"line":1763},[41,25397,25398],{"class":58},"  --resume=true\n",[1280,25400,25401],{},[227,25402,25403,25406],{},[24,25404,25405],{},"--resume=true","：已有同一数据集时继续追加 episode。",[20,25408,25409],{},[1603,25410],{"alt":37,"src":25411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[15,25413,25415],{"id":25414},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[32,25417,25419],{"className":34,"code":25418,"language":36,"meta":37,"style":37},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[24,25420,25421],{"__ignoreMap":37},[41,25422,25423,25426,25429],{"class":43,"line":44},[41,25424,25425],{"class":54},"rm",[41,25427,25428],{"class":58}," -rf",[41,25430,25431],{"class":378}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[20,25433,25434],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[15,25436,25438],{"id":25437},"_63-回放指定-episode","6.3 回放指定 episode",[32,25440,25442],{"className":34,"code":25441,"language":36,"meta":37,"style":37},"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",[24,25443,25444,25451,25457,25463,25469,25477],{"__ignoreMap":37},[41,25445,25446,25449],{"class":43,"line":44},[41,25447,25448],{"class":54},"lerobot-replay",[41,25450,59],{"class":58},[41,25452,25453,25455],{"class":43,"line":51},[41,25454,99],{"class":58},[41,25456,59],{"class":58},[41,25458,25459,25461],{"class":43,"line":62},[41,25460,179],{"class":58},[41,25462,59],{"class":58},[41,25464,25465,25467],{"class":43,"line":70},[41,25466,24951],{"class":58},[41,25468,59],{"class":58},[41,25470,25471,25473,25475],{"class":43,"line":76},[41,25472,25371],{"class":58},[41,25474,25374],{"class":378},[41,25476,59],{"class":58},[41,25478,25479],{"class":43,"line":83},[41,25480,25481],{"class":58},"  --dataset.episode=0\n",[189,25483,25484],{},"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":37,"searchDepth":51,"depth":51,"links":25486},[25487,25488,25489],{"id":25301,"depth":51,"text":25302},{"id":25414,"depth":51,"text":25415},{"id":25437,"depth":51,"text":25438},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25292,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25496,"title":25497,"body":25498,"description":196,"extension":197,"meta":25626,"navigation":79,"path":25627,"seo":25628,"stem":25629,"__hash__":25630},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25499,"toc":25624},[25500,25504,25567,25570,25617,25622],[10,25501,25503],{"id":25502},"_7-act-模型训练","7. ACT 模型训练",[32,25505,25507],{"className":34,"code":25506,"language":36,"meta":37,"style":37},"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",[24,25508,25509,25516,25524,25531,25538,25545,25552,25559],{"__ignoreMap":37},[41,25510,25511,25514],{"class":43,"line":44},[41,25512,25513],{"class":54},"lerobot-train",[41,25515,59],{"class":58},[41,25517,25518,25520,25522],{"class":43,"line":51},[41,25519,25371],{"class":58},[41,25521,25374],{"class":378},[41,25523,59],{"class":58},[41,25525,25526,25529],{"class":43,"line":62},[41,25527,25528],{"class":58},"  --policy.type=act",[41,25530,59],{"class":58},[41,25532,25533,25536],{"class":43,"line":70},[41,25534,25535],{"class":58},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[41,25537,59],{"class":58},[41,25539,25540,25543],{"class":43,"line":76},[41,25541,25542],{"class":58},"  --job_name=act_so101_test",[41,25544,59],{"class":58},[41,25546,25547,25550],{"class":43,"line":83},[41,25548,25549],{"class":58},"  --policy.device=cuda",[41,25551,59],{"class":58},[41,25553,25554,25557],{"class":43,"line":89},[41,25555,25556],{"class":58},"  --wandb.enable=false",[41,25558,59],{"class":58},[41,25560,25561,25564],{"class":43,"line":96},[41,25562,25563],{"class":58},"  --policy.repo_id=",[41,25565,25566],{"class":378},"\"Embodied-AI-6\u002Flerobot_new\"\n",[20,25568,25569],{},"参数说明：",[1280,25571,25572,25578,25584,25590,25596,25605,25611],{},[227,25573,25574,25577],{},[24,25575,25576],{},"--dataset.repo_id","：训练数据集仓库。",[227,25579,25580,25583],{},[24,25581,25582],{},"--policy.type=act","：策略模型类型为 ACT。",[227,25585,25586,25589],{},[24,25587,25588],{},"--output_dir","：本地训练输出目录。",[227,25591,25592,25595],{},[24,25593,25594],{},"--job_name","：训练任务名称。",[227,25597,25598,25601,25602,24699],{},[24,25599,25600],{},"--policy.device","：训练设备（如 ",[24,25603,25604],{},"cuda",[227,25606,25607,25610],{},[24,25608,25609],{},"--wandb.enable","：是否启用 WandB 可视化。",[227,25612,25613,25616],{},[24,25614,25615],{},"--policy.repo_id","：训练后模型推送目标仓库。",[20,25618,25619],{},[1603,25620],{"alt":37,"src":25621},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[189,25623,25484],{},{"title":37,"searchDepth":51,"depth":51,"links":25625},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25497,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25632,"title":25633,"body":25634,"description":196,"extension":197,"meta":25721,"navigation":79,"path":25722,"seo":25723,"stem":25724,"__hash__":25725},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25635,"toc":25719},[25636,25639,25642,25709,25717],[10,25637,25633],{"id":25638},"_8-策略部署与自动采集",[20,25640,25641],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[32,25643,25645],{"className":34,"code":25644,"language":36,"meta":37,"style":37},"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",[24,25646,25647,25653,25659,25665,25673,25679,25686,25694,25702],{"__ignoreMap":37},[41,25648,25649,25651],{"class":43,"line":44},[41,25650,25312],{"class":54},[41,25652,59],{"class":58},[41,25654,25655,25657],{"class":43,"line":51},[41,25656,99],{"class":58},[41,25658,59],{"class":58},[41,25660,25661,25663],{"class":43,"line":62},[41,25662,179],{"class":58},[41,25664,59],{"class":58},[41,25666,25667,25669,25671],{"class":43,"line":70},[41,25668,25020],{"class":58},[41,25670,25339],{"class":378},[41,25672,59],{"class":58},[41,25674,25675,25677],{"class":43,"line":76},[41,25676,24951],{"class":58},[41,25678,59],{"class":58},[41,25680,25681,25684],{"class":43,"line":83},[41,25682,25683],{"class":58},"  --display_data=false",[41,25685,59],{"class":58},[41,25687,25688,25690,25692],{"class":43,"line":89},[41,25689,25371],{"class":58},[41,25691,25374],{"class":378},[41,25693,59],{"class":58},[41,25695,25696,25698,25700],{"class":43,"line":96},[41,25697,25388],{"class":58},[41,25699,25391],{"class":378},[41,25701,59],{"class":58},[41,25703,25704,25707],{"class":43,"line":104},[41,25705,25706],{"class":58},"  --policy.path=",[41,25708,25566],{"class":378},[1280,25710,25711],{},[227,25712,25713,25716],{},[24,25714,25715],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[189,25718,25484],{},{"title":37,"searchDepth":51,"depth":51,"links":25720},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25633,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25727,"title":25728,"body":25729,"description":196,"extension":197,"meta":25758,"navigation":79,"path":25759,"seo":25760,"stem":25761,"__hash__":25762},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25730,"toc":25756},[25731,25735,25738,25744,25747,25753],[10,25732,25734],{"id":25733},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[20,25736,25737],{},"项目地址：",[20,25739,25740],{},[511,25741,25742],{"href":25742,"rel":25743},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24001],[20,25745,25746],{},"参考教程：",[20,25748,25749],{},[511,25750,25751],{"href":25751,"rel":25752},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24001],[20,25754,25755],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":37,"searchDepth":51,"depth":51,"links":25757},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25728,"description":196},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25764,"title":25765,"body":25766,"description":25770,"extension":197,"meta":25771,"navigation":79,"path":25772,"seo":25773,"stem":25774,"__hash__":25775},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25767,"toc":25768},[],{"title":37,"searchDepth":51,"depth":51,"links":25769},[],"act复现",{"category":23516},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25765,"description":25770},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25777,"title":25778,"body":25779,"description":37,"extension":197,"meta":26081,"navigation":79,"path":26082,"seo":26083,"stem":26084,"__hash__":26085},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25780,"toc":26073},[25781,25784,25788,25798,25805,25812,25815,25822,25825,25828,25832,25844,25848,25894,25897,25900,25903,25906,25909,25913,25951,25957,25961,26015,26020,26023,26026,26031,26034,26039,26042,26045,26049,26052,26055,26059],[10,25782,25778],{"id":25783},"_1简介",[241,25785,25787],{"id":25786},"_11什么是-docker","1.1什么是 Docker？",[20,25789,25790,25791,25794,25795],{},"Docker 是一个开源的 ",[423,25792,25793],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[423,25796,25797],{},"一次构建，到处运行。",[20,25799,25800,25801,25804],{},"“ ",[423,25802,25803],{},"一次构建，到处运行"," ”也就是说：",[224,25806,25807],{},[227,25808,25809],{},[423,25810,25811],{},"之前：",[20,25813,25814],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[224,25816,25817],{},[227,25818,25819],{},[423,25820,25821],{},"使用docker后：",[20,25823,25824],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[20,25826,25827],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[241,25829,25831],{"id":25830},"_12它是怎么工作的","1.2.它是怎么工作的？",[1280,25833,25834,25837],{},[227,25835,25836],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[227,25838,25839,25840,25843],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[423,25841,25842],{},"无论在哪运行都一样稳定"," 。",[241,25845,25847],{"id":25846},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[411,25849,25850,25860],{},[414,25851,25852],{},[417,25853,25854,25857],{},[420,25855,25856],{"align":23874},"概念",[420,25858,25859],{"align":23874},"解释",[458,25861,25862,25870,25878,25886],{},[417,25863,25864,25867],{},[463,25865,25866],{"align":23874},"镜像",[463,25868,25869],{"align":23874},"Image，运行容器的模板，像是一个应用快照",[417,25871,25872,25875],{},[463,25873,25874],{"align":23874},"容器",[463,25876,25877],{"align":23874},"Container，运行中的镜像实例，有自己的文件系统、网络等",[417,25879,25880,25883],{},[463,25881,25882],{"align":23874},"Dockerfile",[463,25884,25885],{"align":23874},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[417,25887,25888,25891],{},[463,25889,25890],{"align":23874},"仓库",[463,25892,25893],{"align":23874},"Registry，存放镜像的地方，比如 Docker Hub",[20,25895,25896],{},"抽象化理解:",[20,25898,25899],{},"Docker镜像≈C++类",[20,25901,25902],{},"Docker容器≈C++类实例(即对象)",[20,25904,25905],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[20,25907,25908],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[241,25910,25912],{"id":25911},"_14类比理解","1.4.类比理解",[411,25914,25915,25925],{},[414,25916,25917],{},[417,25918,25919,25922],{},[420,25920,25921],{"align":23874},"传统部署",[420,25923,25924],{"align":23874},"Docker部署",[458,25926,25927,25935,25943],{},[417,25928,25929,25932],{},[463,25930,25931],{"align":23874},"手动安装依赖、调试版本不一致问题",[463,25933,25934],{"align":23874},"一次打包环境和代码",[417,25936,25937,25940],{},[463,25938,25939],{"align":23874},"程序“裸奔”跑在系统上",[463,25941,25942],{"align":23874},"程序“穿着容器”隔离运行",[417,25944,25945,25948],{},[463,25946,25947],{"align":23874},"容易“在我电脑上能跑”",[463,25949,25950],{"align":23874},"保证“无论在哪都能跑”",[20,25952,25953,25954],{},"就像快递包裹： ",[423,25955,25956],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[241,25958,25960],{"id":25959},"_15docker-的核心优势","1.5.Docker 的核心优势",[411,25962,25963,25973],{},[414,25964,25965],{},[417,25966,25967,25970],{},[420,25968,25969],{"align":23874},"优势",[420,25971,25972],{"align":23874},"说明",[458,25974,25975,25983,25991,25999,26007],{},[417,25976,25977,25980],{},[463,25978,25979],{"align":23874},"轻量级",[463,25981,25982],{"align":23874},"基于系统内核共享，启动速度快，占资源少",[417,25984,25985,25988],{},[463,25986,25987],{"align":23874},"跨平台",[463,25989,25990],{"align":23874},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[417,25992,25993,25996],{},[463,25994,25995],{"align":23874},"易于迁移部署",[463,25997,25998],{"align":23874},"应用和环境一起封装，不怕依赖不一致",[417,26000,26001,26004],{},[463,26002,26003],{"align":23874},"易于版本控制",[463,26005,26006],{"align":23874},"镜像版本可控，支持回滚",[417,26008,26009,26012],{},[463,26010,26011],{"align":23874},"生态丰富",[463,26013,26014],{"align":23874},"Docker Hub 上有成千上万的现成镜像可用",[224,26016,26017],{},[227,26018,26019],{},"在Linux上可以几乎实现无性能损失。",[20,26021,26022],{},"docker里的发行版和本机共用Linux内核。",[20,26024,26025],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[224,26027,26028],{},[227,26029,26030],{},"可以快速部署在绝大多数Linux发行版",[20,26032,26033],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[224,26035,26036],{},[227,26037,26038],{},"配置环境简单",[20,26040,26041],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[20,26043,26044],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[224,26046,26047],{},[227,26048,26011],{},[20,26050,26051],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[20,26053,26054],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[241,26056,26058],{"id":26057},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1280,26060,26061,26064,26067,26070],{},[227,26062,26063],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[227,26065,26066],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[227,26068,26069],{},"微服务架构：每个服务一个容器，灵活组合",[227,26071,26072],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":37,"searchDepth":51,"depth":51,"links":26074},[26075,26076,26077,26078,26079,26080],{"id":25786,"depth":62,"text":25787},{"id":25830,"depth":62,"text":25831},{"id":25846,"depth":62,"text":25847},{"id":25911,"depth":62,"text":25912},{"id":25959,"depth":62,"text":25960},{"id":26057,"depth":62,"text":26058},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25778,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26087,"title":26088,"body":26089,"description":37,"extension":197,"meta":26822,"navigation":79,"path":26823,"seo":26824,"stem":26825,"__hash__":26826},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26090,"toc":26817},[26091,26094,26098,26101,26104,26110,26116,26120,26129,26132,26189,26192,26243,26246,26329,26332,26369,26373,26384,26397,26404,26407,26487,26490,26540,26543,26566,26570,26577,26580,26596,26602,26605,26621,26627,26630,26646,26660,26666,26686,26692,26695,26707,26713,26716,26730,26736,26739,26759,26764,26767,26770,26774,26777,26780,26783,26790,26793,26796,26799,26804,26809,26814],[10,26092,26088],{"id":26093},"_2安装docker",[241,26095,26097],{"id":26096},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[20,26099,26100],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[20,26102,26103],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[20,26105,26106],{},[511,26107,26108],{"href":26108,"rel":26109},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24001],[20,26111,26112],{},[511,26113,26114],{"href":26114,"rel":26115},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24001],[22136,26117,26119],{"id":26118},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[20,26121,26122,26123,26128],{},"以下内容根据 ",[511,26124,26127],{"href":26125,"rel":26126},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24001],"官方文档"," 修改而来。",[20,26130,26131],{},"如果你过去安装过 docker，先删掉：",[32,26133,26135],{"className":34,"code":26134,"language":36,"meta":37,"style":37},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[24,26136,26137],{"__ignoreMap":37},[41,26138,26139,26141,26144,26147,26150,26153,26156,26159,26162,26165,26168,26171,26174,26177,26180,26183,26186],{"class":43,"line":44},[41,26140,3163],{"class":271},[41,26142,26143],{"class":275}," pkg ",[41,26145,26146],{"class":271},"in",[41,26148,26149],{"class":378}," docker.io",[41,26151,26152],{"class":378}," docker-doc",[41,26154,26155],{"class":378}," docker-compose",[41,26157,26158],{"class":378}," docker-compose-v2",[41,26160,26161],{"class":378}," podman-docker",[41,26163,26164],{"class":378}," containerd",[41,26166,26167],{"class":378}," runc",[41,26169,26170],{"class":275},"; ",[41,26172,26173],{"class":271},"do",[41,26175,26176],{"class":54}," sudo",[41,26178,26179],{"class":378}," apt-get",[41,26181,26182],{"class":378}," remove",[41,26184,26185],{"class":275}," $pkg; ",[41,26187,26188],{"class":271},"done\n",[20,26190,26191],{},"首先安装依赖和GPG：",[32,26193,26197],{"className":26194,"code":26195,"language":26196,"meta":37,"style":37},"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",[24,26198,26199,26204,26209,26214,26219,26224,26229,26233,26238],{"__ignoreMap":37},[41,26200,26201],{"class":43,"line":44},[41,26202,26203],{},"# Add Docker's official GPG key:\n",[41,26205,26206],{"class":43,"line":51},[41,26207,26208],{},"sudo apt-get update\n",[41,26210,26211],{"class":43,"line":62},[41,26212,26213],{},"sudo apt-get install ca-certificates curl\n",[41,26215,26216],{"class":43,"line":70},[41,26217,26218],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[41,26220,26221],{"class":43,"line":76},[41,26222,26223],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[41,26225,26226],{"class":43,"line":83},[41,26227,26228],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[41,26230,26231],{"class":43,"line":89},[41,26232,80],{"emptyLinePlaceholder":79},[41,26234,26235],{"class":43,"line":96},[41,26236,26237],{},"# 如果上面这行报错就弄下面这行\n",[41,26239,26240],{"class":43,"line":104},[41,26241,26242],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[20,26244,26245],{},"信任 Docker 的 GPG 公钥并添加仓库：",[32,26247,26249],{"className":34,"code":26248,"language":36,"meta":37,"style":37},"# 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",[24,26250,26251,26256,26262,26279,26312],{"__ignoreMap":37},[41,26252,26253],{"class":43,"line":44},[41,26254,26255],{"class":47},"# Add the repository to Apt sources:\n",[41,26257,26258,26260],{"class":43,"line":51},[41,26259,25228],{"class":58},[41,26261,59],{"class":58},[41,26263,26264,26267,26270,26273,26276],{"class":43,"line":62},[41,26265,26266],{"class":378},"  \"deb [arch=$(",[41,26268,26269],{"class":54},"dpkg",[41,26271,26272],{"class":58}," --print-architecture",[41,26274,26275],{"class":378},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[41,26277,26278],{"class":58},"\\\n",[41,26280,26281,26284,26286,26288,26291,26294,26296,26298,26301,26303,26305,26308,26310],{"class":43,"line":70},[41,26282,26283],{"class":378},"  \"",[41,26285,25202],{"class":275},[41,26287,831],{"class":58},[41,26289,26290],{"class":378}," \u002Fetc\u002Fos-release",[41,26292,26293],{"class":275}," && ",[41,26295,25228],{"class":58},[41,26297,9862],{"class":378},[41,26299,26300],{"class":275},"$VERSION_CODENAME",[41,26302,524],{"class":378},[41,26304,702],{"class":275},[41,26306,26307],{"class":378},"\" stable\"",[41,26309,25212],{"class":271},[41,26311,59],{"class":58},[41,26313,26314,26317,26320,26323,26326],{"class":43,"line":76},[41,26315,26316],{"class":54},"  sudo",[41,26318,26319],{"class":378}," tee",[41,26321,26322],{"class":378}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[41,26324,26325],{"class":271}," >",[41,26327,26328],{"class":378}," \u002Fdev\u002Fnull\n",[20,26330,26331],{},"最后安装",[32,26333,26335],{"className":34,"code":26334,"language":36,"meta":37,"style":37},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[24,26336,26337,26346],{"__ignoreMap":37},[41,26338,26339,26341,26343],{"class":43,"line":44},[41,26340,24713],{"class":54},[41,26342,26179],{"class":378},[41,26344,26345],{"class":378}," update\n",[41,26347,26348,26350,26352,26354,26357,26360,26363,26366],{"class":43,"line":51},[41,26349,24713],{"class":54},[41,26351,26179],{"class":378},[41,26353,23970],{"class":378},[41,26355,26356],{"class":378}," docker-ce",[41,26358,26359],{"class":378}," docker-ce-cli",[41,26361,26362],{"class":378}," containerd.io",[41,26364,26365],{"class":378}," docker-buildx-plugin",[41,26367,26368],{"class":378}," docker-compose-plugin\n",[22136,26370,26372],{"id":26371},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[20,26374,26375,26376,26379,26380,26383],{},"查看自己自己包管理工具版本（dnf是 ",[423,26377,26378],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[423,26381,26382],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[32,26385,26387],{"className":34,"code":26386,"language":36,"meta":37,"style":37},"dnf --version\n",[24,26388,26389],{"__ignoreMap":37},[41,26390,26391,26394],{"class":43,"line":44},[41,26392,26393],{"class":54},"dnf",[41,26395,26396],{"class":58}," --version\n",[20,26398,26122,26399,26403],{},[511,26400,26127],{"href":26401,"rel":26402},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24001]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[20,26405,26406],{},"如果你之前安装过 docker，请先删掉",[32,26408,26410],{"className":34,"code":26409,"language":36,"meta":37,"style":37},"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",[24,26411,26412,26426,26433,26440,26447,26454,26461,26468,26475,26482],{"__ignoreMap":37},[41,26413,26414,26416,26419,26421,26424],{"class":43,"line":44},[41,26415,24713],{"class":54},[41,26417,26418],{"class":378}," dnf",[41,26420,26182],{"class":378},[41,26422,26423],{"class":378}," docker",[41,26425,59],{"class":58},[41,26427,26428,26431],{"class":43,"line":51},[41,26429,26430],{"class":378},"                  docker-client",[41,26432,59],{"class":58},[41,26434,26435,26438],{"class":43,"line":62},[41,26436,26437],{"class":378},"                  docker-client-latest",[41,26439,59],{"class":58},[41,26441,26442,26445],{"class":43,"line":70},[41,26443,26444],{"class":378},"                  docker-common",[41,26446,59],{"class":58},[41,26448,26449,26452],{"class":43,"line":76},[41,26450,26451],{"class":378},"                  docker-latest",[41,26453,59],{"class":58},[41,26455,26456,26459],{"class":43,"line":83},[41,26457,26458],{"class":378},"                  docker-latest-logrotate",[41,26460,59],{"class":58},[41,26462,26463,26466],{"class":43,"line":89},[41,26464,26465],{"class":378},"                  docker-logrotate",[41,26467,59],{"class":58},[41,26469,26470,26473],{"class":43,"line":96},[41,26471,26472],{"class":378},"                  docker-selinux",[41,26474,59],{"class":58},[41,26476,26477,26480],{"class":43,"line":104},[41,26478,26479],{"class":378},"                  docker-engine-selinux",[41,26481,59],{"class":58},[41,26483,26484],{"class":43,"line":176},[41,26485,26486],{"class":378},"                  docker-engine\n",[20,26488,26489],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[32,26491,26493],{"className":34,"code":26492,"language":36,"meta":37,"style":37},"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",[24,26494,26495,26509,26524],{"__ignoreMap":37},[41,26496,26497,26499,26501,26504,26506],{"class":43,"line":44},[41,26498,24713],{"class":54},[41,26500,26418],{"class":378},[41,26502,26503],{"class":58}," -y",[41,26505,23970],{"class":378},[41,26507,26508],{"class":378}," dnf-plugins-core\n",[41,26510,26511,26513,26515,26518,26521],{"class":43,"line":51},[41,26512,24713],{"class":54},[41,26514,26418],{"class":378},[41,26516,26517],{"class":378}," config-manager",[41,26519,26520],{"class":378}," addrepo",[41,26522,26523],{"class":58}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[41,26525,26526,26528,26531,26534,26537],{"class":43,"line":62},[41,26527,24713],{"class":54},[41,26529,26530],{"class":378}," sed",[41,26532,26533],{"class":58}," -i",[41,26535,26536],{"class":378}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[41,26538,26539],{"class":378}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[20,26541,26542],{},"最后安装：",[32,26544,26546],{"className":34,"code":26545,"language":36,"meta":37,"style":37},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[24,26547,26548],{"__ignoreMap":37},[41,26549,26550,26552,26554,26556,26558,26560,26562,26564],{"class":43,"line":44},[41,26551,24713],{"class":54},[41,26553,26418],{"class":378},[41,26555,23970],{"class":378},[41,26557,26356],{"class":378},[41,26559,26359],{"class":378},[41,26561,26362],{"class":378},[41,26563,26365],{"class":378},[41,26565,26368],{"class":378},[241,26567,26569],{"id":26568},"_22配置环境","2.2.配置环境",[22136,26571,26573,26576],{"id":26572},"_221检查-docker-服务状态",[423,26574,26575],{},"2.2.1.检查 Docker 服务状态"," ：",[20,26578,26579],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[32,26581,26583],{"className":34,"code":26582,"language":36,"meta":37,"style":37},"systemctl status docker\n",[24,26584,26585],{"__ignoreMap":37},[41,26586,26587,26590,26593],{"class":43,"line":44},[41,26588,26589],{"class":54},"systemctl",[41,26591,26592],{"class":378}," status",[41,26594,26595],{"class":378}," docker\n",[22136,26597,26599,26576],{"id":26598},"_222启动-docker-服务",[423,26600,26601],{},"2.2.2.启动 Docker 服务",[20,26603,26604],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[32,26606,26608],{"className":34,"code":26607,"language":36,"meta":37,"style":37},"sudo systemctl start docker\n",[24,26609,26610],{"__ignoreMap":37},[41,26611,26612,26614,26617,26619],{"class":43,"line":44},[41,26613,24713],{"class":54},[41,26615,26616],{"class":378}," systemctl",[41,26618,4322],{"class":378},[41,26620,26595],{"class":378},[22136,26622,26624,26576],{"id":26623},"_223设置-docker-开机自启",[423,26625,26626],{},"2.2.3.设置 Docker 开机自启",[20,26628,26629],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[32,26631,26633],{"className":34,"code":26632,"language":36,"meta":37,"style":37},"sudo systemctl enable docker\n",[24,26634,26635],{"__ignoreMap":37},[41,26636,26637,26639,26641,26644],{"class":43,"line":44},[41,26638,24713],{"class":54},[41,26640,26616],{"class":378},[41,26642,26643],{"class":378}," enable",[41,26645,26595],{"class":378},[22136,26647,26649,13933,26652,13933,26657,26576],{"id":26648},"_224将用户添加到-docker-组",[423,26650,26651],{},"2.2.4.将用户添加到",[423,26653,26654],{},[24,26655,26656],{},"docker",[423,26658,26659],{},"组",[20,26661,26662,26663,26665],{},"使用以下命令将当前用户添加到 ",[24,26664,26656],{}," 组：",[32,26667,26669],{"className":34,"code":26668,"language":36,"meta":37,"style":37},"sudo usermod -aG docker $USER\n",[24,26670,26671],{"__ignoreMap":37},[41,26672,26673,26675,26678,26681,26683],{"class":43,"line":44},[41,26674,24713],{"class":54},[41,26676,26677],{"class":378}," usermod",[41,26679,26680],{"class":58}," -aG",[41,26682,26423],{"class":378},[41,26684,26685],{"class":275}," $USER\n",[22136,26687,26689,26576],{"id":26688},"_225退出并重新登录",[423,26690,26691],{},"2.2.5.退出并重新登录",[20,26693,26694],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[32,26696,26698],{"className":34,"code":26697,"language":36,"meta":37,"style":37},"newgrp docker\n",[24,26699,26700],{"__ignoreMap":37},[41,26701,26702,26705],{"class":43,"line":44},[41,26703,26704],{"class":54},"newgrp",[41,26706,26595],{"class":378},[22136,26708,26710,26576],{"id":26709},"_226重新启动-docker-服务如果需要",[423,26711,26712],{},"2.2.6.重新启动 Docker 服务（如果需要）",[20,26714,26715],{},"确保 Docker 服务正在运行，可以使用以下命令：",[32,26717,26718],{"className":34,"code":26607,"language":36,"meta":37,"style":37},[24,26719,26720],{"__ignoreMap":37},[41,26721,26722,26724,26726,26728],{"class":43,"line":44},[41,26723,24713],{"class":54},[41,26725,26616],{"class":378},[41,26727,4322],{"class":378},[41,26729,26595],{"class":378},[22136,26731,26733,26576],{"id":26732},"_227重启电脑后检查-docker-服务状态",[423,26734,26735],{},"2.2.7.重启电脑后检查 Docker 服务状态",[20,26737,26738],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[32,26740,26742],{"className":34,"code":26741,"language":36,"meta":37,"style":37},"sudo reboot\nsystemctl status docker\n",[24,26743,26744,26751],{"__ignoreMap":37},[41,26745,26746,26748],{"class":43,"line":44},[41,26747,24713],{"class":54},[41,26749,26750],{"class":378}," reboot\n",[41,26752,26753,26755,26757],{"class":43,"line":51},[41,26754,26589],{"class":54},[41,26756,26592],{"class":378},[41,26758,26595],{"class":378},[20,26760,26761],{},[1603,26762],{"alt":37,"src":26763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[20,26765,26766],{},"第三行显示enabled说明开机自启动成功",[20,26768,26769],{},"按q退出",[241,26771,26773],{"id":26772},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[20,26775,26776],{},"优先使用linux来使用docker是比较好的",[20,26778,26779],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[20,26781,26782],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[20,26784,26785,26786],{},"官方下载安装:",[511,26787,26788],{"href":26788,"rel":26789},"https:\u002F\u002Fwww.docker.com\u002F",[24001],[20,26791,26792],{},"Windows的Docker显卡直通与USB直通:",[20,26794,26795],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[20,26797,26798],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[20,26800,26801],{},[1603,26802],{"alt":37,"src":26803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[20,26805,26806],{},[1603,26807],{"alt":37,"src":26808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[20,26810,26811],{},[1603,26812],{"alt":37,"src":26813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[189,26815,26816],{},"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":37,"searchDepth":51,"depth":51,"links":26818},[26819,26820,26821],{"id":26096,"depth":62,"text":26097},{"id":26568,"depth":62,"text":26569},{"id":26772,"depth":62,"text":26773},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26088,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26828,"title":26829,"body":26830,"description":26837,"extension":197,"meta":27530,"navigation":79,"path":27531,"seo":27532,"stem":27533,"__hash__":27534},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26831,"toc":27524},[26832,26835,26838,26842,26847,26852,26855,26883,26888,26897,26900,26905,26909,26916,26921,26927,26931,26934,26938,26943,27035,27040,27058,27063,27084,27089,27105,27109,27114,27143,27148,27194,27199,27243,27251,27268,27273,27289,27294,27308,27311,27314,27317,27320,27349,27352,27357,27361,27364,27367,27373,27376,27379,27382,27444,27451,27456,27459,27477,27481,27484,27501,27504,27507,27521],[10,26833,26829],{"id":26834},"_3docker直通",[20,26836,26837],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[241,26839,26841],{"id":26840},"_31usb直通","3.1.USB直通",[20,26843,26844],{},[1603,26845],{"alt":37,"src":26846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[224,26848,26849],{},[227,26850,26851],{},"方法一(不是很推荐新手)：",[20,26853,26854],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[32,26856,26858],{"className":34,"code":26857,"language":36,"meta":37,"style":37},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[24,26859,26860,26868,26873],{"__ignoreMap":37},[41,26861,26862,26865],{"class":43,"line":44},[41,26863,26864],{"class":54},"ls",[41,26866,26867],{"class":378}," \u002Fdev\n",[41,26869,26870],{"class":43,"line":51},[41,26871,26872],{"class":47},"#例如\n",[41,26874,26875,26878,26880],{"class":43,"line":62},[41,26876,26877],{"class":275},"--device",[41,26879,321],{"class":271},[41,26881,26882],{"class":378},"\u002Fdev\u002Ftty_USB0\n",[224,26884,26885],{"start":51},[227,26886,26887],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[32,26889,26891],{"className":34,"code":26890,"language":36,"meta":37,"style":37},"--privileged\n",[24,26892,26893],{"__ignoreMap":37},[41,26894,26895],{"class":43,"line":44},[41,26896,26890],{"class":54},[20,26898,26899],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[20,26901,26902],{},[1603,26903],{"alt":37,"src":26904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[241,26906,26908],{"id":26907},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[20,26910,26911,26912,26915],{},"NVIDIA Container Toolkit使用户 ",[423,26913,26914],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[20,26917,26918],{},[1603,26919],{"alt":37,"src":26920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[20,26922,26923],{},[511,26924,26925],{"href":26925,"rel":26926},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24001],[22136,26928,26930],{"id":26929},"_321安装","3.2.1.安装",[20,26932,26933],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23048,26935,26937],{"id":26936},"_3211ubuntu","3.2.1.1.Ubuntu",[224,26939,26940],{},[227,26941,26942],{},"配置存储库 并更新",[32,26944,26946],{"className":34,"code":26945,"language":36,"meta":37,"style":37},"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",[24,26947,26948,26977,26997,27009,27021,27027],{"__ignoreMap":37},[41,26949,26950,26953,26956,26959,26961,26963,26966,26969,26972,26975],{"class":43,"line":44},[41,26951,26952],{"class":54},"curl",[41,26954,26955],{"class":58}," -fsSL",[41,26957,26958],{"class":378}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[41,26960,25212],{"class":271},[41,26962,26176],{"class":54},[41,26964,26965],{"class":378}," gpg",[41,26967,26968],{"class":58}," --dearmor",[41,26970,26971],{"class":58}," -o",[41,26973,26974],{"class":378}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[41,26976,59],{"class":58},[41,26978,26979,26982,26984,26987,26990,26993,26995],{"class":43,"line":51},[41,26980,26981],{"class":275},"  && ",[41,26983,26952],{"class":54},[41,26985,26986],{"class":58}," -s",[41,26988,26989],{"class":58}," -L",[41,26991,26992],{"class":378}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[41,26994,25212],{"class":271},[41,26996,59],{"class":58},[41,26998,26999,27002,27005,27007],{"class":43,"line":62},[41,27000,27001],{"class":54},"    sed",[41,27003,27004],{"class":378}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[41,27006,25212],{"class":271},[41,27008,59],{"class":58},[41,27010,27011,27014,27016,27019],{"class":43,"line":70},[41,27012,27013],{"class":54},"    sudo",[41,27015,26319],{"class":378},[41,27017,27018],{"class":378}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[41,27020,59],{"class":58},[41,27022,27023,27025],{"class":43,"line":76},[41,27024,26981],{"class":275},[41,27026,26278],{"class":58},[41,27028,27029,27031,27033],{"class":43,"line":83},[41,27030,27013],{"class":54},[41,27032,26179],{"class":378},[41,27034,26345],{"class":378},[224,27036,27037],{"start":51},[227,27038,27039],{},"安装nvidia-docker2",[32,27041,27043],{"className":34,"code":27042,"language":36,"meta":37,"style":37},"sudo apt-get install -y nvidia-docker2\n",[24,27044,27045],{"__ignoreMap":37},[41,27046,27047,27049,27051,27053,27055],{"class":43,"line":44},[41,27048,24713],{"class":54},[41,27050,26179],{"class":378},[41,27052,23970],{"class":378},[41,27054,26503],{"class":58},[41,27056,27057],{"class":378}," nvidia-docker2\n",[224,27059,27060],{"start":62},[227,27061,27062],{},"使用nvidia-ctk命令配置container runtime",[32,27064,27066],{"className":34,"code":27065,"language":36,"meta":37,"style":37},"sudo nvidia-ctk runtime configure --runtime=docker\n",[24,27067,27068],{"__ignoreMap":37},[41,27069,27070,27072,27075,27078,27081],{"class":43,"line":44},[41,27071,24713],{"class":54},[41,27073,27074],{"class":378}," nvidia-ctk",[41,27076,27077],{"class":378}," runtime",[41,27079,27080],{"class":378}," configure",[41,27082,27083],{"class":58}," --runtime=docker\n",[224,27085,27086],{"start":70},[227,27087,27088],{},"重启docker服务:",[32,27090,27092],{"className":34,"code":27091,"language":36,"meta":37,"style":37},"sudo systemctl restart docker\n",[24,27093,27094],{"__ignoreMap":37},[41,27095,27096,27098,27100,27103],{"class":43,"line":44},[41,27097,24713],{"class":54},[41,27099,26616],{"class":378},[41,27101,27102],{"class":378}," restart",[41,27104,26595],{"class":378},[23048,27106,27108],{"id":27107},"_3212fedora","3.2.1.2.Fedora",[224,27110,27111],{},[227,27112,27113],{},"配置存储库",[32,27115,27117],{"className":34,"code":27116,"language":36,"meta":37,"style":37},"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",[24,27118,27119,27134],{"__ignoreMap":37},[41,27120,27121,27123,27125,27127,27130,27132],{"class":43,"line":44},[41,27122,26952],{"class":54},[41,27124,26986],{"class":58},[41,27126,26989],{"class":58},[41,27128,27129],{"class":378}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[41,27131,25212],{"class":271},[41,27133,59],{"class":58},[41,27135,27136,27138,27140],{"class":43,"line":51},[41,27137,24713],{"class":54},[41,27139,26319],{"class":378},[41,27141,27142],{"class":378}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[224,27144,27145],{"start":51},[227,27146,27147],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[32,27149,27151],{"className":34,"code":27150,"language":36,"meta":37,"style":37},"# 如果是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",[24,27152,27153,27158,27172,27176,27181],{"__ignoreMap":37},[41,27154,27155],{"class":43,"line":44},[41,27156,27157],{"class":47},"# 如果是RHEL或者Rocky（DNF4）\n",[41,27159,27160,27162,27164,27166,27169],{"class":43,"line":51},[41,27161,24713],{"class":54},[41,27163,26418],{"class":378},[41,27165,26517],{"class":378},[41,27167,27168],{"class":58}," --add-repo",[41,27170,27171],{"class":378}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[41,27173,27174],{"class":43,"line":62},[41,27175,80],{"emptyLinePlaceholder":79},[41,27177,27178],{"class":43,"line":70},[41,27179,27180],{"class":47},"# 如果是Feodra41+（DNF5）\n",[41,27182,27183,27185,27187,27189,27191],{"class":43,"line":76},[41,27184,24713],{"class":54},[41,27186,26418],{"class":378},[41,27188,26517],{"class":378},[41,27190,26520],{"class":378},[41,27192,27193],{"class":58}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[224,27195,27196],{"start":62},[227,27197,27198],{},"安装NVIDIA Container Toolki包",[32,27200,27202],{"className":34,"code":27201,"language":36,"meta":37,"style":37},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[24,27203,27204,27209,27222,27226,27231],{"__ignoreMap":37},[41,27205,27206],{"class":43,"line":44},[41,27207,27208],{"class":47},"# 如果是RHEL或者Rocky\n",[41,27210,27211,27213,27215,27217,27219],{"class":43,"line":51},[41,27212,24713],{"class":54},[41,27214,26418],{"class":378},[41,27216,23970],{"class":378},[41,27218,26503],{"class":58},[41,27220,27221],{"class":378}," nvidia-container-toolkit\n",[41,27223,27224],{"class":43,"line":62},[41,27225,80],{"emptyLinePlaceholder":79},[41,27227,27228],{"class":43,"line":70},[41,27229,27230],{"class":47},"# 如果是Fedora\n",[41,27232,27233,27235,27237,27239,27241],{"class":43,"line":76},[41,27234,24713],{"class":54},[41,27236,26418],{"class":378},[41,27238,23970],{"class":378},[41,27240,26503],{"class":58},[41,27242,27221],{"class":378},[224,27244,27245],{"start":70},[227,27246,27247,27248,27250],{},"安装nvidia-docker2 ： 在Fedora上使用",[24,27249,26393],{},"进行安装",[32,27252,27254],{"className":34,"code":27253,"language":36,"meta":37,"style":37},"sudo dnf install -y nvidia-docker2\n",[24,27255,27256],{"__ignoreMap":37},[41,27257,27258,27260,27262,27264,27266],{"class":43,"line":44},[41,27259,24713],{"class":54},[41,27261,26418],{"class":378},[41,27263,23970],{"class":378},[41,27265,26503],{"class":58},[41,27267,27057],{"class":378},[224,27269,27270],{"start":76},[227,27271,27272],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[32,27274,27275],{"className":34,"code":27065,"language":36,"meta":37,"style":37},[24,27276,27277],{"__ignoreMap":37},[41,27278,27279,27281,27283,27285,27287],{"class":43,"line":44},[41,27280,24713],{"class":54},[41,27282,27074],{"class":378},[41,27284,27077],{"class":378},[41,27286,27080],{"class":378},[41,27288,27083],{"class":58},[224,27290,27291],{"start":83},[227,27292,27293],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[32,27295,27296],{"className":34,"code":27091,"language":36,"meta":37,"style":37},[24,27297,27298],{"__ignoreMap":37},[41,27299,27300,27302,27304,27306],{"class":43,"line":44},[41,27301,24713],{"class":54},[41,27303,26616],{"class":378},[41,27305,27102],{"class":378},[41,27307,26595],{"class":378},[20,27309,27310],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[20,27312,27313],{},"方法：",[20,27315,27316],{},"1️⃣nvidia-smi",[20,27318,27319],{},"2️⃣运行nvidia cuda 容器进行测试",[32,27321,27323],{"className":34,"code":27322,"language":36,"meta":37,"style":37},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[24,27324,27325],{"__ignoreMap":37},[41,27326,27327,27329,27331,27334,27337,27340,27343,27346],{"class":43,"line":44},[41,27328,24713],{"class":54},[41,27330,26423],{"class":378},[41,27332,27333],{"class":378}," run",[41,27335,27336],{"class":58}," --rm",[41,27338,27339],{"class":58}," --gpus",[41,27341,27342],{"class":378}," all",[41,27344,27345],{"class":378}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[41,27347,27348],{"class":378}," nvidia-smi\n",[20,27350,27351],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[20,27353,27354],{},[1603,27355],{"alt":37,"src":27356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[241,27358,27360],{"id":27359},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[20,27362,27363],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[20,27365,27366],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[20,27368,27369],{},[511,27370,27371],{"href":27371,"rel":27372},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24001],[20,27374,27375],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[20,27377,27378],{},"我们只需要找到对应的Docker镜像当底包即可。",[20,27380,27381],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[411,27383,27384,27400],{},[414,27385,27386],{},[417,27387,27388,27391,27394,27397],{},[420,27389,27390],{"align":23874},"镜像类型",[420,27392,27393],{"align":23874},"适用场景",[420,27395,27396],{"align":23874},"示例标签",[420,27398,27399],{"align":23874},"大小",[458,27401,27402,27416,27430],{},[417,27403,27404,27407,27410,27413],{},[463,27405,27406],{"align":23874},"base",[463,27408,27409],{"align":23874},"仅需 CUDA 运行时库",[463,27411,27412],{"align":23874},"12.4.0-base-ubuntu22.04",[463,27414,27415],{"align":23874},"~240MB",[417,27417,27418,27421,27424,27427],{},[463,27419,27420],{"align":23874},"runtime",[463,27422,27423],{"align":23874},"部署编译后的应用（含数学库）",[463,27425,27426],{"align":23874},"12.4.0-runtime-ubuntu22.04",[463,27428,27429],{"align":23874},"~2GB",[417,27431,27432,27435,27438,27441],{},[463,27433,27434],{"align":23874},"devel",[463,27436,27437],{"align":23874},"开发环境（含编译工具）",[463,27439,27440],{"align":23874},"12.4.0-devel-ubuntu22.04",[463,27442,27443],{"align":23874},"~3GB",[20,27445,27446,27447,27450],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[24,27448,27449],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[20,27452,27453],{},[1603,27454],{"alt":37,"src":27455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[20,27457,27458],{},"在dockerfile里就可以开头这么写：",[32,27460,27462],{"className":34,"code":27461,"language":36,"meta":37,"style":37},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[24,27463,27464,27469],{"__ignoreMap":37},[41,27465,27466],{"class":43,"line":44},[41,27467,27468],{"class":47},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[41,27470,27471,27474],{"class":43,"line":51},[41,27472,27473],{"class":54},"FROM",[41,27475,27476],{"class":378}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[241,27478,27480],{"id":27479},"_34配置以太网","3.4.配置以太网",[20,27482,27483],{},"指定网络模式",[32,27485,27487],{"className":34,"code":27486,"language":36,"meta":37,"style":37},"--net=host \\\n",[24,27488,27489],{"__ignoreMap":37},[41,27490,27491,27494,27496,27499],{"class":43,"line":44},[41,27492,27493],{"class":275},"--net",[41,27495,321],{"class":271},[41,27497,27498],{"class":378},"host",[41,27500,59],{"class":54},[20,27502,27503],{},"启动参数里加上这行即可。具体在下方",[20,27505,27506],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1280,27508,27509,27512,27515,27518],{},[227,27510,27511],{},"--net=bridge:默认选项，表示连接到默认的网桥",[227,27513,27514],{},"--net=host:容器使用宿主机的网络",[227,27516,27517],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[227,27519,27520],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[189,27522,27523],{},"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":37,"searchDepth":51,"depth":51,"links":27525},[27526,27527,27528,27529],{"id":26840,"depth":62,"text":26841},{"id":26907,"depth":62,"text":26908},{"id":27359,"depth":62,"text":27360},{"id":27479,"depth":62,"text":27480},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26829,"description":26837},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27536,"title":27537,"body":27538,"description":27545,"extension":197,"meta":27551,"navigation":79,"path":27552,"seo":27553,"stem":27554,"__hash__":27555},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27539,"toc":27549},[27540,27543,27546],[10,27541,27537],{"id":27542},"_4dockerhub换源",[20,27544,27545],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[20,27547,27548],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":37,"searchDepth":51,"depth":51,"links":27550},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27537,"description":27545},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27557,"title":27558,"body":27559,"description":37,"extension":197,"meta":28571,"navigation":79,"path":28572,"seo":28573,"stem":28574,"__hash__":28575},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27560,"toc":28566},[27561,27564,27568,27574,27578,27581,27921,27924,27927,27930,27935,27940,27943,27946,27949,27952,27971,27974,27985,27991,28173,28183,28199,28462,28464,28489,28504,28513,28563],[10,27562,27558],{"id":27563},"_5docker命令学习",[241,27565,27567],{"id":27566},"_51参考文档","5.1.参考文档",[20,27569,27570],{},[511,27571,27572],{"href":27572,"rel":27573},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24001],[241,27575,27577],{"id":27576},"_52常用命令","5.2.常用命令",[20,27579,27580],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[411,27582,27583,27596],{},[414,27584,27585],{},[417,27586,27587,27590,27593],{},[420,27588,27589],{"align":23874},"命令",[420,27591,27592],{"align":23874},"描述",[420,27594,27595],{"align":23874},"示例",[458,27597,27598,27609,27620,27631,27642,27653,27664,27675,27685,27696,27707,27718,27728,27739,27750,27761,27771,27781,27791,27801,27812,27823,27834,27845,27856,27867,27877,27888,27899,27910],{},[417,27599,27600,27603,27606],{},[463,27601,27602],{"align":23874},"docker run",[463,27604,27605],{"align":23874},"创建并启动一个新的容器。",[463,27607,27608],{"align":23874},"docker run -it ubuntu bash",[417,27610,27611,27614,27617],{},[463,27612,27613],{"align":23874},"docker build",[463,27615,27616],{"align":23874},"通过指定的 Dockerfile 创建一个新的镜像。",[463,27618,27619],{"align":23874},"docker build -t myimage .",[417,27621,27622,27625,27628],{},[463,27623,27624],{"align":23874},"docker pull",[463,27626,27627],{"align":23874},"从 Docker 仓库拉取镜像。",[463,27629,27630],{"align":23874},"docker pull ubuntu",[417,27632,27633,27636,27639],{},[463,27634,27635],{"align":23874},"docker push",[463,27637,27638],{"align":23874},"将本地镜像推送到 Docker 仓库。",[463,27640,27641],{"align":23874},"docker push myimage",[417,27643,27644,27647,27650],{},[463,27645,27646],{"align":23874},"docker stop",[463,27648,27649],{"align":23874},"停止一个正在运行的容器。",[463,27651,27652],{"align":23874},"docker stop container_id",[417,27654,27655,27658,27661],{},[463,27656,27657],{"align":23874},"docker start",[463,27659,27660],{"align":23874},"启动一个已经存在的容器。",[463,27662,27663],{"align":23874},"docker start container_id",[417,27665,27666,27669,27672],{},[463,27667,27668],{"align":23874},"docker restart",[463,27670,27671],{"align":23874},"重新启动容器。",[463,27673,27674],{"align":23874},"docker restart container_id",[417,27676,27677,27680,27683],{},[463,27678,27679],{"align":23874},"docker ps",[463,27681,27682],{"align":23874},"列出当前正在运行的容器。",[463,27684,27679],{"align":23874},[417,27686,27687,27690,27693],{},[463,27688,27689],{"align":23874},"docker rm",[463,27691,27692],{"align":23874},"删除一个或多个停止的容器。",[463,27694,27695],{"align":23874},"docker rm container_id",[417,27697,27698,27701,27704],{},[463,27699,27700],{"align":23874},"docker exec",[463,27702,27703],{"align":23874},"在一个正在运行的容器中执行命令。",[463,27705,27706],{"align":23874},"docker exec -it container_id bash",[417,27708,27709,27712,27715],{},[463,27710,27711],{"align":23874},"docker logs",[463,27713,27714],{"align":23874},"查看容器的日志输出。",[463,27716,27717],{"align":23874},"docker logs container_id",[417,27719,27720,27723,27726],{},[463,27721,27722],{"align":23874},"docker images",[463,27724,27725],{"align":23874},"列出本地所有镜像。",[463,27727,27722],{"align":23874},[417,27729,27730,27733,27736],{},[463,27731,27732],{"align":23874},"docker rmi",[463,27734,27735],{"align":23874},"删除一个或多个镜像。",[463,27737,27738],{"align":23874},"docker rmi myimage",[417,27740,27741,27744,27747],{},[463,27742,27743],{"align":23874},"docker network",[463,27745,27746],{"align":23874},"管理 Docker 网络。",[463,27748,27749],{"align":23874},"docker network ls",[417,27751,27752,27755,27758],{},[463,27753,27754],{"align":23874},"docker volume",[463,27756,27757],{"align":23874},"管理 Docker 数据卷。",[463,27759,27760],{"align":23874},"docker volume ls",[417,27762,27763,27766,27769],{},[463,27764,27765],{"align":23874},"docker-compose up",[463,27767,27768],{"align":23874},"启动 docker-compose.yml 中定义的所有服务。",[463,27770,27765],{"align":23874},[417,27772,27773,27776,27779],{},[463,27774,27775],{"align":23874},"docker-compose down",[463,27777,27778],{"align":23874},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[463,27780,27775],{"align":23874},[417,27782,27783,27786,27789],{},[463,27784,27785],{"align":23874},"docker info",[463,27787,27788],{"align":23874},"显示 Docker 系统的详细信息。",[463,27790,27785],{"align":23874},[417,27792,27793,27796,27799],{},[463,27794,27795],{"align":23874},"docker stats",[463,27797,27798],{"align":23874},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[463,27800,27795],{"align":23874},[417,27802,27803,27806,27809],{},[463,27804,27805],{"align":23874},"docker inspect",[463,27807,27808],{"align":23874},"查看容器或镜像的详细信息（JSON 格式）。",[463,27810,27811],{"align":23874},"docker inspect container_id",[417,27813,27814,27817,27820],{},[463,27815,27816],{"align":23874},"docker save",[463,27818,27819],{"align":23874},"将一个镜像保存为 tar 文件。",[463,27821,27822],{"align":23874},"docker save -o myimage.tar myimage",[417,27824,27825,27828,27831],{},[463,27826,27827],{"align":23874},"docker load",[463,27829,27830],{"align":23874},"从 tar 文件中加载镜像。",[463,27832,27833],{"align":23874},"docker load -i myimage.tar",[417,27835,27836,27839,27842],{},[463,27837,27838],{"align":23874},"docker tag",[463,27840,27841],{"align":23874},"为镜像添加标签（tag）。",[463,27843,27844],{"align":23874},"docker tag myimage myimage:v1",[417,27846,27847,27850,27853],{},[463,27848,27849],{"align":23874},"docker buildx build",[463,27851,27852],{"align":23874},"使用 Buildx 构建多架构镜像。",[463,27854,27855],{"align":23874},"docker buildx build -t myimage .",[417,27857,27858,27861,27864],{},[463,27859,27860],{"align":23874},"docker buildx create",[463,27862,27863],{"align":23874},"创建一个新的 Buildx 构建实例。",[463,27865,27866],{"align":23874},"docker buildx create –use",[417,27868,27869,27872,27875],{},[463,27870,27871],{"align":23874},"docker buildx ls",[463,27873,27874],{"align":23874},"列出所有可用的 Buildx 构建实例。",[463,27876,27871],{"align":23874},[417,27878,27879,27882,27885],{},[463,27880,27881],{"align":23874},"docker buildx use",[463,27883,27884],{"align":23874},"设置当前的 Buildx 构建实例。",[463,27886,27887],{"align":23874},"docker buildx use mybuilder",[417,27889,27890,27893,27896],{},[463,27891,27892],{"align":23874},"docker buildx bake",[463,27894,27895],{"align":23874},"使用 Bake 文件批量构建镜像。",[463,27897,27898],{"align":23874},"docker buildx bake -f bake.hcl",[417,27900,27901,27904,27907],{},[463,27902,27903],{"align":23874},"docker buildx build –push",[463,27905,27906],{"align":23874},"构建镜像并推送到镜像仓库。",[463,27908,27909],{"align":23874},"docker buildx build –push -t myimage .",[417,27911,27912,27915,27918],{},[463,27913,27914],{"align":23874},"docker buildx build –platform",[463,27916,27917],{"align":23874},"构建镜像并为多个平台生成支持。",[463,27919,27920],{"align":23874},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[20,27922,27923],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[20,27925,27926],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[20,27928,27929],{},"docker images 可以查看已经下载的镜像",[20,27931,27932],{},[1603,27933],{"alt":37,"src":27934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[20,27936,27937],{},[423,27938,27939],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[20,27941,27942],{},"docker rmi $(docker images -q) 删除所有的镜像",[20,27944,27945],{},"docker container logs 查看容器日志",[20,27947,27948],{},"docker top 查看容器里的进程",[20,27950,27951],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[32,27953,27955],{"className":34,"code":27954,"language":36,"meta":37,"style":37},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[24,27956,27957],{"__ignoreMap":37},[41,27958,27959,27962,27965,27968],{"class":43,"line":44},[41,27960,27961],{"class":54},"如：docker",[41,27963,27964],{"class":378}," cp",[41,27966,27967],{"class":378}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[41,27969,27970],{"class":378}," \u002Fmydata\u002Fnginx\n",[20,27972,27973],{},"docker run时在启动容器的时候会有几个常用的选项：",[1280,27975,27976,27979,27982],{},[227,27977,27978],{},"-d选项：表示后台运行",[227,27980,27981],{},"-P选项：随机端口映射",[227,27983,27984],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[241,27986,27988],{"id":27987},"_53run命令的参数非常重要",[423,27989,27990],{},"5.3.run命令的参数（非常重要）",[411,27992,27993,28006],{},[414,27994,27995],{},[417,27996,27997,28000,28003],{},[420,27998,27999],{"align":23874},"参数\u002F配置",[420,28001,28002],{"align":23874},"功能说明",[420,28004,28005],{"align":23874},"重要性与参考依据",[458,28007,28008,28019,28030,28041,28052,28063,28074,28085,28096,28107,28118,28129,28140,28151,28162],{},[417,28009,28010,28013,28016],{},[463,28011,28012],{"align":23874},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[463,28014,28015],{"align":23874},"指定容器名称，便于后续管理",[463,28017,28018],{"align":23874},"替代随机生成的容器名。",[417,28020,28021,28024,28027],{},[463,28022,28023],{"align":23874},"–gpus all",[463,28025,28026],{"align":23874},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[463,28028,28029],{"align":23874},"用于CUDA加速等GPU依赖任务。",[417,28031,28032,28035,28038],{},[463,28033,28034],{"align":23874},"-e NVIDIA_DRIVER_CAPABILITIES=all",[463,28036,28037],{"align":23874},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[463,28039,28040],{"align":23874},"确保容器内GPU功能完整67。",[417,28042,28043,28046,28049],{},[463,28044,28045],{"align":23874},"-dit",[463,28047,28048],{"align":23874},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[463,28050,28051],{"align":23874},"允许容器在后台运行并支持交互操作。",[417,28053,28054,28057,28060],{},[463,28055,28056],{"align":23874},"–privileged",[463,28058,28059],{"align":23874},"赋予容器完全主机权限（可访问设备、内核模块等）",[463,28061,28062],{"align":23874},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[417,28064,28065,28068,28071],{},[463,28066,28067],{"align":23874},"–net=host",[463,28069,28070],{"align":23874},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[463,28072,28073],{"align":23874},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[417,28075,28076,28079,28082],{},[463,28077,28078],{"align":23874},"–group-add audio–group-add video–group-add dialout",[463,28080,28081],{"align":23874},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[463,28083,28084],{"align":23874},"避免权限问题（如避免无法调用摄像头、麦克风）。",[417,28086,28087,28090,28093],{},[463,28088,28089],{"align":23874},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[463,28091,28092],{"align":23874},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[463,28094,28095],{"align":23874},"支持容器内运行图形界面应用（如OpenCV可视化）。",[417,28097,28098,28101,28104],{},[463,28099,28100],{"align":23874},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[463,28102,28103],{"align":23874},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[463,28105,28106],{"align":23874},"实现容器内图形显示。",[417,28108,28109,28112,28115],{},[463,28110,28111],{"align":23874},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[463,28113,28114],{"align":23874},"挂载X11认证文件（只读）",[463,28116,28117],{"align":23874},"确保容器有权连接宿主机显示服务。",[417,28119,28120,28123,28126],{},[463,28121,28122],{"align":23874},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[463,28124,28125],{"align":23874},"挂载Wayland显示协议相关目录",[463,28127,28128],{"align":23874},"支持Wayland协议的图形显示。",[417,28130,28131,28134,28137],{},[463,28132,28133],{"align":23874},"–ulimit nofile=1024:524288",[463,28135,28136],{"align":23874},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[463,28138,28139],{"align":23874},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[417,28141,28142,28145,28148],{},[463,28143,28144],{"align":23874},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[463,28146,28147],{"align":23874},"挂载宿主机用户目录到容器内同名路径",[463,28149,28150],{"align":23874},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[417,28152,28153,28156,28159],{},[463,28154,28155],{"align":23874},"-w \u002Fhome\u002Ftungchiahui",[463,28157,28158],{"align":23874},"设置容器启动后的默认工作目录",[463,28160,28161],{"align":23874},"直接进入项目路径，方便执行命令2324。",[417,28163,28164,28167,28170],{},[463,28165,28166],{"align":23874},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[463,28168,28169],{"align":23874},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[463,28171,28172],{"align":23874},"提供预配置的深度学习与机器人开发环境。",[20,28174,28175,28176,28178,28179,28182],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[24,28177,24713],{},"加不加",[24,28180,28181],{},"sudo -E","都无所谓。",[20,28184,28185,28186,28188,28189,28191,28192,28195,28196,28198],{},"用户已经被加到docker组了，不用",[24,28187,24713],{},"也行跑，其次，",[24,28190,24713],{},"运行的话，你的",[24,28193,28194],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[24,28197,28194],{},"更不可能变了。",[32,28200,28202],{"className":34,"code":28201,"language":36,"meta":37,"style":37},"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",[24,28203,28204,28217,28227,28237,28249,28256,28263,28270,28280,28289,28298,28312,28324,28336,28345,28355,28364,28379,28412,28439,28450,28457],{"__ignoreMap":37},[41,28205,28206,28208,28210,28212,28215],{"class":43,"line":44},[41,28207,24713],{"class":54},[41,28209,26423],{"class":378},[41,28211,27333],{"class":378},[41,28213,28214],{"class":58}," --name=ros_opencv_cuda",[41,28216,59],{"class":58},[41,28218,28219,28222,28225],{"class":43,"line":51},[41,28220,28221],{"class":275},"--gpus ",[41,28223,28224],{"class":378},"all",[41,28226,59],{"class":58},[41,28228,28229,28232,28235],{"class":43,"line":62},[41,28230,28231],{"class":275},"-e ",[41,28233,28234],{"class":378},"NVIDIA_DRIVER_CAPABILITIES=all",[41,28236,59],{"class":58},[41,28238,28239,28241,28244,28247],{"class":43,"line":70},[41,28240,28231],{"class":275},[41,28242,28243],{"class":378},"DISPLAY=",[41,28245,28246],{"class":275},"$DISPLAY ",[41,28248,26278],{"class":58},[41,28250,28251,28254],{"class":43,"line":76},[41,28252,28253],{"class":275},"-dit ",[41,28255,26278],{"class":58},[41,28257,28258,28261],{"class":43,"line":83},[41,28259,28260],{"class":275},"--privileged ",[41,28262,26278],{"class":58},[41,28264,28265,28268],{"class":43,"line":89},[41,28266,28267],{"class":275},"--net=host ",[41,28269,26278],{"class":58},[41,28271,28272,28275,28278],{"class":43,"line":96},[41,28273,28274],{"class":275},"--group-add ",[41,28276,28277],{"class":378},"audio",[41,28279,59],{"class":58},[41,28281,28282,28284,28287],{"class":43,"line":104},[41,28283,28274],{"class":275},[41,28285,28286],{"class":378},"video",[41,28288,59],{"class":58},[41,28290,28291,28293,28296],{"class":43,"line":176},[41,28292,28274],{"class":275},[41,28294,28295],{"class":378},"dialout",[41,28297,59],{"class":58},[41,28299,28300,28302,28305,28307,28310],{"class":43,"line":184},[41,28301,28231],{"class":275},[41,28303,28304],{"class":378},"XAUTHORITY=",[41,28306,28194],{"class":275},[41,28308,28309],{"class":378},"\u002F.Xauthority",[41,28311,59],{"class":58},[41,28313,28314,28316,28319,28322],{"class":43,"line":1757},[41,28315,28231],{"class":275},[41,28317,28318],{"class":378},"WAYLAND_DISPLAY=",[41,28320,28321],{"class":275},"$WAYLAND_DISPLAY ",[41,28323,26278],{"class":58},[41,28325,28326,28328,28331,28334],{"class":43,"line":1763},[41,28327,28231],{"class":275},[41,28329,28330],{"class":378},"XDG_RUNTIME_DIR=",[41,28332,28333],{"class":275},"$XDG_RUNTIME_DIR ",[41,28335,26278],{"class":58},[41,28337,28338,28340,28343],{"class":43,"line":1768},[41,28339,28231],{"class":275},[41,28341,28342],{"class":378},"QT_QPA_PLATFORM=xcb",[41,28344,59],{"class":58},[41,28346,28347,28350,28353],{"class":43,"line":1782},[41,28348,28349],{"class":275},"-v ",[41,28351,28352],{"class":378},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[41,28354,59],{"class":58},[41,28356,28357,28359,28362],{"class":43,"line":1787},[41,28358,28349],{"class":275},[41,28360,28361],{"class":378},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[41,28363,59],{"class":58},[41,28365,28366,28369,28372,28374,28377],{"class":43,"line":1793},[41,28367,28368],{"class":275},"-v $HOME",[41,28370,28371],{"class":378},"\u002F.Xauthority:",[41,28373,28194],{"class":275},[41,28375,28376],{"class":378},"\u002F.Xauthority:ro",[41,28378,59],{"class":58},[41,28380,28381,28383,28386,28388,28391,28394,28396,28399,28401,28403,28405,28407,28410],{"class":43,"line":1814},[41,28382,28349],{"class":275},[41,28384,28385],{"class":378},"\u002Frun\u002Fuser\u002F",[41,28387,25202],{"class":275},[41,28389,28390],{"class":54},"id",[41,28392,28393],{"class":58}," -u",[41,28395,702],{"class":275},[41,28397,28398],{"class":378},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[41,28400,25202],{"class":275},[41,28402,28390],{"class":54},[41,28404,28393],{"class":58},[41,28406,702],{"class":275},[41,28408,28409],{"class":378},"\u002Fwayland-0",[41,28411,59],{"class":58},[41,28413,28414,28416,28418,28420,28422,28424,28426,28429,28431,28433,28435,28437],{"class":43,"line":1819},[41,28415,28349],{"class":275},[41,28417,28385],{"class":378},[41,28419,25202],{"class":275},[41,28421,28390],{"class":54},[41,28423,28393],{"class":58},[41,28425,702],{"class":275},[41,28427,28428],{"class":378},":\u002Frun\u002Fuser\u002F",[41,28430,25202],{"class":275},[41,28432,28390],{"class":54},[41,28434,28393],{"class":58},[41,28436,13852],{"class":275},[41,28438,26278],{"class":58},[41,28440,28441,28443,28445,28448],{"class":43,"line":1833},[41,28442,28368],{"class":275},[41,28444,1132],{"class":378},[41,28446,28447],{"class":275},"$HOME ",[41,28449,26278],{"class":58},[41,28451,28452,28455],{"class":43,"line":1838},[41,28453,28454],{"class":275},"-w $HOME ",[41,28456,26278],{"class":58},[41,28458,28459],{"class":43,"line":1867},[41,28460,28461],{"class":275},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[20,28463,9163],{},[224,28465,28466,28474,28477,28480],{},[227,28467,28468,13933,28470,28473],{},[24,28469,28234],{},[24,28471,28472],{},"--gpus all","没有英伟达显卡请注释。",[227,28475,28476],{},"--name后面请自己为容器起名。",[227,28478,28479],{},"最后一行仓库名称请你自己找对应的镜像填上。",[227,28481,28482,28483,28488],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23691,28484,28485],{},[423,28486,28487],{},"请不要加","。",[32,28490,28492],{"className":34,"code":28491,"language":36,"meta":37,"style":37},"--ulimit nofile=1024:524288 \\\n",[24,28493,28494],{"__ignoreMap":37},[41,28495,28496,28499,28502],{"class":43,"line":44},[41,28497,28498],{"class":54},"--ulimit",[41,28500,28501],{"class":378}," nofile=1024:524288",[41,28503,59],{"class":58},[20,28505,28506,28507,28512],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23691,28508,28509],{},[423,28510,28511],{},"不建议","**.**",[32,28514,28516],{"className":34,"code":28515,"language":36,"meta":37,"style":37},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[24,28517,28518,28545,28554],{"__ignoreMap":37},[41,28519,28520,28523,28526,28528,28530,28532,28534,28536,28538,28541,28543],{"class":43,"line":44},[41,28521,28522],{"class":54},"--user",[41,28524,28525],{"class":275}," $(",[41,28527,28390],{"class":54},[41,28529,28393],{"class":58},[41,28531,702],{"class":275},[41,28533,1132],{"class":378},[41,28535,25202],{"class":275},[41,28537,28390],{"class":54},[41,28539,28540],{"class":58}," -g",[41,28542,13852],{"class":275},[41,28544,26278],{"class":58},[41,28546,28547,28549,28552],{"class":43,"line":51},[41,28548,28349],{"class":275},[41,28550,28551],{"class":378},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[41,28553,59],{"class":58},[41,28555,28556,28558,28561],{"class":43,"line":62},[41,28557,28349],{"class":275},[41,28559,28560],{"class":378},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[41,28562,59],{"class":58},[189,28564,28565],{},"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":37,"searchDepth":51,"depth":51,"links":28567},[28568,28569,28570],{"id":27566,"depth":62,"text":27567},{"id":27576,"depth":62,"text":27577},{"id":27987,"depth":62,"text":27990},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27558,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28577,"title":28578,"body":28579,"description":37,"extension":197,"meta":30202,"navigation":79,"path":30203,"seo":30204,"stem":30205,"__hash__":30206},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28580,"toc":30197},[28581,28584,28588,28591,28813,28817,28821,28824,28930,28935,28938,28943,28946,28951,28954,28959,28962,28974,28977,28982,28989,29017,29024,29100,29105,29108,29131,29133,29208,29213,29216,29220,29228,29233,29238,29242,29253,29259,29262,29265,29289,29292,29295,29323,29326,29329,29794,29797,29802,29807,29811,29834,29839,29843,29847,29850,29853,29856,29883,29886,29889,29907,29910,29913,29935,29943,29948,29953,29957,29960,29963,29966,29969,30014,30017,30035,30038,30043,30046,30067,30070,30126,30129,30134,30138,30141,30148,30151,30154,30159,30162,30178,30181,30194],[10,28582,28578],{"id":28583},"_6手动创建docker镜像",[241,28585,28587],{"id":28586},"_61dockerfile","6.1.DockerFile",[20,28589,28590],{},"常用命令：",[411,28592,28593,28604],{},[414,28594,28595],{},[417,28596,28597,28600,28602],{},[420,28598,28599],{"align":23874},"指令",[420,28601,25972],{"align":23874},[420,28603,27595],{"align":23874},[458,28605,28606,28616,28632,28643,28654,28665,28676,28687,28698,28712,28726,28737,28751,28762,28773,28787,28802],{},[417,28607,28608,28610,28613],{},[463,28609,27473],{"align":23874},[463,28611,28612],{"align":23874},"指定基础镜像，是 Dockerfile 的起点",[463,28614,28615],{"align":23874},"FROM ubuntu:22.04",[417,28617,28618,28621,28624],{},[463,28619,28620],{"align":23874},"LABEL",[463,28622,28623],{"align":23874},"添加元数据（如作者、版本等）",[463,28625,28626,28627,28631],{"align":23874},"LABEL maintainer=”",[511,28628,28630],{"href":28629},"mailto:you@example.com","you@example.com","”",[417,28633,28634,28637,28640],{},[463,28635,28636],{"align":23874},"ENV",[463,28638,28639],{"align":23874},"设置环境变量",[463,28641,28642],{"align":23874},"ENV PORT=8080",[417,28644,28645,28648,28651],{},[463,28646,28647],{"align":23874},"ARG",[463,28649,28650],{"align":23874},"构建参数，只在构建期间可用",[463,28652,28653],{"align":23874},"ARG VERSION=1.0",[417,28655,28656,28659,28662],{},[463,28657,28658],{"align":23874},"RUN",[463,28660,28661],{"align":23874},"构建镜像时运行命令",[463,28663,28664],{"align":23874},"RUN apt-get update && apt-get install -y curl",[417,28666,28667,28670,28673],{},[463,28668,28669],{"align":23874},"COPY",[463,28671,28672],{"align":23874},"复制文件到镜像中",[463,28674,28675],{"align":23874},"COPY . \u002Fapp",[417,28677,28678,28681,28684],{},[463,28679,28680],{"align":23874},"ADD",[463,28682,28683],{"align":23874},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[463,28685,28686],{"align":23874},"ADD archive.tar.gz \u002Fdata\u002F",[417,28688,28689,28692,28695],{},[463,28690,28691],{"align":23874},"WORKDIR",[463,28693,28694],{"align":23874},"设置工作目录",[463,28696,28697],{"align":23874},"WORKDIR \u002Fopt",[417,28699,28700,28703,28706],{},[463,28701,28702],{"align":23874},"CMD",[463,28704,28705],{"align":23874},"设置容器启动时默认命令（可被 docker run 覆盖）",[463,28707,28708,28709],{"align":23874},"CMD ",[41,28710,28711],{},"“node”, “index.js”",[417,28713,28714,28717,28720],{},[463,28715,28716],{"align":23874},"ENTRYPOINT",[463,28718,28719],{"align":23874},"设置容器启动时固定命令（通常用于 CLI 工具等）",[463,28721,28722,28723],{"align":23874},"ENTRYPOINT ",[41,28724,28725],{},"“python3”",[417,28727,28728,28731,28734],{},[463,28729,28730],{"align":23874},"EXPOSE",[463,28732,28733],{"align":23874},"声明镜像内服务监听的端口（不会自动映射）",[463,28735,28736],{"align":23874},"EXPOSE 80",[417,28738,28739,28742,28745],{},[463,28740,28741],{"align":23874},"VOLUME",[463,28743,28744],{"align":23874},"声明数据卷挂载点",[463,28746,28747,28748],{"align":23874},"VOLUME ",[41,28749,28750],{},"“\u002Fdata”",[417,28752,28753,28756,28759],{},[463,28754,28755],{"align":23874},"USER",[463,28757,28758],{"align":23874},"设置后续命令执行的用户",[463,28760,28761],{"align":23874},"USER appuser",[417,28763,28764,28767,28770],{},[463,28765,28766],{"align":23874},"ONBUILD",[463,28768,28769],{"align":23874},"当镜像作为其他镜像基础镜像时触发的构建指令",[463,28771,28772],{"align":23874},"ONBUILD COPY . \u002Fsrc",[417,28774,28775,28778,28781],{},[463,28776,28777],{"align":23874},"SHELL",[463,28779,28780],{"align":23874},"更改默认 shell，比如将 sh -c 改为 bash -c",[463,28782,28783,28784],{"align":23874},"SHELL ",[41,28785,28786],{},"“\u002Fbin\u002Fbash”, “-c”",[417,28788,28789,28792,28795],{},[463,28790,28791],{"align":23874},"HEALTHCHECK",[463,28793,28794],{"align":23874},"定义容器运行时的健康检查命令",[463,28796,28797,28798],{"align":23874},"`HEALTHCHECK CMD curl –fail ",[511,28799,28800],{"href":28800,"rel":28801},"http:\u002F\u002Flocalhost:8080",[24001],[417,28803,28804,28807,28810],{},[463,28805,28806],{"align":23874},"STOPSIGNAL",[463,28808,28809],{"align":23874},"容器停止时发送的信号",[463,28811,28812],{"align":23874},"STOPSIGNAL SIGKILL",[241,28814,28816],{"id":28815},"_62自己创建容器","6.2.自己创建容器",[22136,28818,28820],{"id":28819},"_621手动创建","6.2.1.手动创建",[20,28822,28823],{},"在x86电脑上编译x86的：",[32,28825,28827],{"className":34,"code":28826,"language":36,"meta":37,"style":37},"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",[24,28828,28829,28845,28849,28862,28866,28879,28883,28896,28900,28913,28917],{"__ignoreMap":37},[41,28830,28831,28833,28836,28839,28842],{"class":43,"line":44},[41,28832,26656],{"class":54},[41,28834,28835],{"class":378}," build",[41,28837,28838],{"class":58}," -t",[41,28840,28841],{"class":378}," ros-melodic-cuda118-cudnn8-bionic:latest",[41,28843,28844],{"class":378}," .\n",[41,28846,28847],{"class":43,"line":51},[41,28848,80],{"emptyLinePlaceholder":79},[41,28850,28851,28853,28855,28857,28860],{"class":43,"line":62},[41,28852,26656],{"class":54},[41,28854,28835],{"class":378},[41,28856,28838],{"class":58},[41,28858,28859],{"class":378}," ros-noetic-focal:latest",[41,28861,28844],{"class":378},[41,28863,28864],{"class":43,"line":70},[41,28865,80],{"emptyLinePlaceholder":79},[41,28867,28868,28870,28872,28874,28877],{"class":43,"line":76},[41,28869,26656],{"class":54},[41,28871,28835],{"class":378},[41,28873,28838],{"class":58},[41,28875,28876],{"class":378}," ros-humble-jammy:latest",[41,28878,28844],{"class":378},[41,28880,28881],{"class":43,"line":83},[41,28882,80],{"emptyLinePlaceholder":79},[41,28884,28885,28887,28889,28891,28894],{"class":43,"line":89},[41,28886,26656],{"class":54},[41,28888,28835],{"class":378},[41,28890,28838],{"class":58},[41,28892,28893],{"class":378}," ros-jazzy-noble:latest",[41,28895,28844],{"class":378},[41,28897,28898],{"class":43,"line":96},[41,28899,80],{"emptyLinePlaceholder":79},[41,28901,28902,28904,28906,28908,28911],{"class":43,"line":104},[41,28903,26656],{"class":54},[41,28905,28835],{"class":378},[41,28907,28838],{"class":58},[41,28909,28910],{"class":378}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[41,28912,28844],{"class":378},[41,28914,28915],{"class":43,"line":176},[41,28916,80],{"emptyLinePlaceholder":79},[41,28918,28919,28921,28923,28925,28928],{"class":43,"line":184},[41,28920,26656],{"class":54},[41,28922,28835],{"class":378},[41,28924,28838],{"class":58},[41,28926,28927],{"class":378}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[41,28929,28844],{"class":378},[20,28931,28932],{},[1603,28933],{"alt":37,"src":28934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[20,28936,28937],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[20,28939,28940],{},[1603,28941],{"alt":37,"src":28942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[20,28944,28945],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[224,28947,28948],{},[227,28949,28950],{},"创建 Docker Hub 账户",[20,28952,28953],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[224,28955,28956],{"start":51},[227,28957,28958],{},"登录 Docker Hub",[20,28960,28961],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[32,28963,28965],{"className":34,"code":28964,"language":36,"meta":37,"style":37},"docker login\n",[24,28966,28967],{"__ignoreMap":37},[41,28968,28969,28971],{"class":43,"line":44},[41,28970,26656],{"class":54},[41,28972,28973],{"class":378}," login\n",[20,28975,28976],{},"输入你的 Docker Hub 用户名和密码进行验证。",[224,28978,28979],{},[227,28980,28981],{},"为你的镜像打标签",[20,28983,28984,28985,28988],{},"Docker Hub 使用 ",[24,28986,28987],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[32,28990,28992],{"className":34,"code":28991,"language":36,"meta":37,"style":37},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[24,28993,28994],{"__ignoreMap":37},[41,28995,28996,28998,29001,29003,29006,29009,29012,29014],{"class":43,"line":44},[41,28997,26656],{"class":54},[41,28999,29000],{"class":378}," tag",[41,29002,28893],{"class":378},[41,29004,29005],{"class":271}," \u003C",[41,29007,29008],{"class":378},"你的用户",[41,29010,29011],{"class":275},"名",[41,29013,1233],{"class":271},[41,29015,29016],{"class":378},"\u002Fros-jazzy-noble:latest\n",[20,29018,29019,29020,29023],{},"例如，如果你的 Docker Hub 用户名是 ",[24,29021,29022],{},"tungchiahui","，你应该执行：",[32,29025,29027],{"className":34,"code":29026,"language":36,"meta":37,"style":37},"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",[24,29028,29029,29040,29044,29055,29059,29070,29074,29085,29089],{"__ignoreMap":37},[41,29030,29031,29033,29035,29037],{"class":43,"line":44},[41,29032,26656],{"class":54},[41,29034,29000],{"class":378},[41,29036,28859],{"class":378},[41,29038,29039],{"class":378}," tungchiahui\u002Fros-noetic-focal:latest\n",[41,29041,29042],{"class":43,"line":51},[41,29043,80],{"emptyLinePlaceholder":79},[41,29045,29046,29048,29050,29052],{"class":43,"line":62},[41,29047,26656],{"class":54},[41,29049,29000],{"class":378},[41,29051,28876],{"class":378},[41,29053,29054],{"class":378}," tungchiahui\u002Fros-humble-jammy:latest\n",[41,29056,29057],{"class":43,"line":70},[41,29058,80],{"emptyLinePlaceholder":79},[41,29060,29061,29063,29065,29067],{"class":43,"line":76},[41,29062,26656],{"class":54},[41,29064,29000],{"class":378},[41,29066,28893],{"class":378},[41,29068,29069],{"class":378}," tungchiahui\u002Fros-jazzy-noble:latest\n",[41,29071,29072],{"class":43,"line":83},[41,29073,80],{"emptyLinePlaceholder":79},[41,29075,29076,29078,29080,29082],{"class":43,"line":89},[41,29077,26656],{"class":54},[41,29079,29000],{"class":378},[41,29081,28910],{"class":378},[41,29083,29084],{"class":378}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[41,29086,29087],{"class":43,"line":96},[41,29088,80],{"emptyLinePlaceholder":79},[41,29090,29091,29093,29095,29097],{"class":43,"line":104},[41,29092,26656],{"class":54},[41,29094,29000],{"class":378},[41,29096,28927],{"class":378},[41,29098,29099],{"class":378}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[224,29101,29102],{"start":51},[227,29103,29104],{},"推送镜像到 Docker Hub",[20,29106,29107],{},"使用以下命令将镜像推送到 Docker Hub：",[32,29109,29111],{"className":34,"code":29110,"language":36,"meta":37,"style":37},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[24,29112,29113],{"__ignoreMap":37},[41,29114,29115,29117,29120,29122,29124,29126,29128],{"class":43,"line":44},[41,29116,26656],{"class":54},[41,29118,29119],{"class":378}," push",[41,29121,29005],{"class":271},[41,29123,29008],{"class":378},[41,29125,29011],{"class":275},[41,29127,1233],{"class":271},[41,29129,29130],{"class":378},"\u002Fros-noetic-jazzy-noble:latest\n",[20,29132,14771],{},[32,29134,29136],{"className":34,"code":29135,"language":36,"meta":37,"style":37},"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",[24,29137,29138,29146,29150,29158,29162,29170,29174,29183,29187,29195,29199],{"__ignoreMap":37},[41,29139,29140,29142,29144],{"class":43,"line":44},[41,29141,26656],{"class":54},[41,29143,29119],{"class":378},[41,29145,29039],{"class":378},[41,29147,29148],{"class":43,"line":51},[41,29149,80],{"emptyLinePlaceholder":79},[41,29151,29152,29154,29156],{"class":43,"line":62},[41,29153,26656],{"class":54},[41,29155,29119],{"class":378},[41,29157,29054],{"class":378},[41,29159,29160],{"class":43,"line":70},[41,29161,80],{"emptyLinePlaceholder":79},[41,29163,29164,29166,29168],{"class":43,"line":76},[41,29165,26656],{"class":54},[41,29167,29119],{"class":378},[41,29169,29069],{"class":378},[41,29171,29172],{"class":43,"line":83},[41,29173,80],{"emptyLinePlaceholder":79},[41,29175,29176,29178,29180],{"class":43,"line":89},[41,29177,26656],{"class":54},[41,29179,29119],{"class":378},[41,29181,29182],{"class":378}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[41,29184,29185],{"class":43,"line":96},[41,29186,80],{"emptyLinePlaceholder":79},[41,29188,29189,29191,29193],{"class":43,"line":104},[41,29190,26656],{"class":54},[41,29192,29119],{"class":378},[41,29194,29099],{"class":378},[41,29196,29197],{"class":43,"line":176},[41,29198,80],{"emptyLinePlaceholder":79},[41,29200,29201,29203,29205],{"class":43,"line":184},[41,29202,26656],{"class":54},[41,29204,29119],{"class":378},[41,29206,29207],{"class":378}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[224,29209,29210],{"start":62},[227,29211,29212],{},"验证推送成功",[20,29214,29215],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[20,29217,29218],{},[423,29219,3922],{},[1280,29221,29222,29225],{},[227,29223,29224],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[227,29226,29227],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[20,29229,29230],{},[1603,29231],{"alt":37,"src":29232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[20,29234,29235],{},[1603,29236],{"alt":37,"src":29237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22136,29239,29241],{"id":29240},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[20,29243,29244,29245,29248,29249,29252],{},"如果您想在 ",[423,29246,29247],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[423,29250,29251],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[20,29254,29255,29256],{},"1. ",[423,29257,29258],{},"启用 Docker 跨平台构建",[20,29260,29261],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[20,29263,29264],{},"第一步：启用 buildx（只需执行一次）",[32,29266,29268],{"className":34,"code":29267,"language":36,"meta":37,"style":37},"docker buildx create --name multiarch_builder --use\n",[24,29269,29270],{"__ignoreMap":37},[41,29271,29272,29274,29277,29280,29283,29286],{"class":43,"line":44},[41,29273,26656],{"class":54},[41,29275,29276],{"class":378}," buildx",[41,29278,29279],{"class":378}," create",[41,29281,29282],{"class":58}," --name",[41,29284,29285],{"class":378}," multiarch_builder",[41,29287,29288],{"class":58}," --use\n",[20,29290,29291],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[20,29293,29294],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[32,29296,29298],{"className":34,"code":29297,"language":36,"meta":37,"style":37},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[24,29299,29300],{"__ignoreMap":37},[41,29301,29302,29304,29306,29308,29311,29314,29317,29320],{"class":43,"line":44},[41,29303,26656],{"class":54},[41,29305,27333],{"class":378},[41,29307,27336],{"class":58},[41,29309,29310],{"class":58}," --privileged",[41,29312,29313],{"class":378}," multiarch\u002Fqemu-user-static",[41,29315,29316],{"class":58}," --reset",[41,29318,29319],{"class":58}," -p",[41,29321,29322],{"class":378}," yes\n",[20,29324,29325],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[20,29327,29328],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[32,29330,29332],{"className":34,"code":29331,"language":36,"meta":37,"style":37},"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",[24,29333,29334,29376,29380,29385,29395,29405,29414,29420,29424,29428,29438,29446,29455,29461,29465,29469,29479,29487,29496,29502,29506,29510,29520,29528,29537,29543,29547,29551,29561,29569,29578,29584,29588,29592,29602,29610,29619,29625,29629,29633,29643,29651,29660,29666,29670,29674,29684,29692,29701,29707,29711,29715,29725,29733,29742,29748,29752,29756,29767,29775,29784,29790],{"__ignoreMap":37},[41,29335,29336,29338,29340,29342,29345,29348,29350,29352,29355,29357,29359,29361,29363,29366,29369,29371,29374],{"class":43,"line":44},[41,29337,26656],{"class":54},[41,29339,29276],{"class":378},[41,29341,28835],{"class":378},[41,29343,29344],{"class":58}," --platform",[41,29346,29347],{"class":378}," linux\u002Famd64,linux\u002Farm64",[41,29349,28838],{"class":58},[41,29351,29005],{"class":271},[41,29353,29354],{"class":378},"你的镜像",[41,29356,29011],{"class":275},[41,29358,1233],{"class":271},[41,29360,1132],{"class":378},[41,29362,1183],{"class":271},[41,29364,29365],{"class":378},"标",[41,29367,29368],{"class":275},"签",[41,29370,1233],{"class":271},[41,29372,29373],{"class":58}," --push",[41,29375,28844],{"class":378},[41,29377,29378],{"class":43,"line":51},[41,29379,80],{"emptyLinePlaceholder":79},[41,29381,29382],{"class":43,"line":62},[41,29383,29384],{"class":47},"# 例子：\n",[41,29386,29387,29389,29391,29393],{"class":43,"line":70},[41,29388,26656],{"class":54},[41,29390,29276],{"class":378},[41,29392,28835],{"class":378},[41,29394,59],{"class":58},[41,29396,29397,29400,29403],{"class":43,"line":76},[41,29398,29399],{"class":275},"--platform ",[41,29401,29402],{"class":378},"linux\u002Famd64,linux\u002Farm64",[41,29404,59],{"class":58},[41,29406,29407,29409,29412],{"class":43,"line":83},[41,29408,28838],{"class":58},[41,29410,29411],{"class":378}," tungchiahui\u002Fros:noetic-focal",[41,29413,59],{"class":58},[41,29415,29416,29418],{"class":43,"line":89},[41,29417,29373],{"class":58},[41,29419,59],{"class":58},[41,29421,29422],{"class":43,"line":96},[41,29423,28844],{"class":378},[41,29425,29426],{"class":43,"line":104},[41,29427,80],{"emptyLinePlaceholder":79},[41,29429,29430,29432,29434,29436],{"class":43,"line":176},[41,29431,26656],{"class":54},[41,29433,29276],{"class":378},[41,29435,28835],{"class":378},[41,29437,59],{"class":58},[41,29439,29440,29442,29444],{"class":43,"line":184},[41,29441,29399],{"class":275},[41,29443,29402],{"class":378},[41,29445,59],{"class":58},[41,29447,29448,29450,29453],{"class":43,"line":1757},[41,29449,28838],{"class":58},[41,29451,29452],{"class":378}," tungchiahui\u002Fros:humble-jammy",[41,29454,59],{"class":58},[41,29456,29457,29459],{"class":43,"line":1763},[41,29458,29373],{"class":58},[41,29460,59],{"class":58},[41,29462,29463],{"class":43,"line":1768},[41,29464,28844],{"class":378},[41,29466,29467],{"class":43,"line":1782},[41,29468,80],{"emptyLinePlaceholder":79},[41,29470,29471,29473,29475,29477],{"class":43,"line":1787},[41,29472,26656],{"class":54},[41,29474,29276],{"class":378},[41,29476,28835],{"class":378},[41,29478,59],{"class":58},[41,29480,29481,29483,29485],{"class":43,"line":1793},[41,29482,29399],{"class":275},[41,29484,29402],{"class":378},[41,29486,59],{"class":58},[41,29488,29489,29491,29494],{"class":43,"line":1814},[41,29490,28838],{"class":58},[41,29492,29493],{"class":378}," tungchiahui\u002Fros:jazzy-noble",[41,29495,59],{"class":58},[41,29497,29498,29500],{"class":43,"line":1819},[41,29499,29373],{"class":58},[41,29501,59],{"class":58},[41,29503,29504],{"class":43,"line":1833},[41,29505,28844],{"class":378},[41,29507,29508],{"class":43,"line":1838},[41,29509,80],{"emptyLinePlaceholder":79},[41,29511,29512,29514,29516,29518],{"class":43,"line":1867},[41,29513,26423],{"class":54},[41,29515,29276],{"class":378},[41,29517,28835],{"class":378},[41,29519,59],{"class":58},[41,29521,29522,29524,29526],{"class":43,"line":1872},[41,29523,29399],{"class":275},[41,29525,29402],{"class":378},[41,29527,59],{"class":58},[41,29529,29530,29532,29535],{"class":43,"line":1889},[41,29531,28838],{"class":58},[41,29533,29534],{"class":378}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[41,29536,59],{"class":58},[41,29538,29539,29541],{"class":43,"line":1894},[41,29540,29373],{"class":58},[41,29542,59],{"class":58},[41,29544,29545],{"class":43,"line":1899},[41,29546,28844],{"class":378},[41,29548,29549],{"class":43,"line":1904},[41,29550,80],{"emptyLinePlaceholder":79},[41,29552,29553,29555,29557,29559],{"class":43,"line":1918},[41,29554,26656],{"class":54},[41,29556,29276],{"class":378},[41,29558,28835],{"class":378},[41,29560,59],{"class":58},[41,29562,29563,29565,29567],{"class":43,"line":1923},[41,29564,29399],{"class":275},[41,29566,29402],{"class":378},[41,29568,59],{"class":58},[41,29570,29571,29573,29576],{"class":43,"line":2715},[41,29572,28838],{"class":58},[41,29574,29575],{"class":378}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[41,29577,59],{"class":58},[41,29579,29580,29582],{"class":43,"line":2729},[41,29581,29373],{"class":58},[41,29583,59],{"class":58},[41,29585,29586],{"class":43,"line":2737},[41,29587,28844],{"class":378},[41,29589,29590],{"class":43,"line":2742},[41,29591,80],{"emptyLinePlaceholder":79},[41,29593,29594,29596,29598,29600],{"class":43,"line":2748},[41,29595,26423],{"class":54},[41,29597,29276],{"class":378},[41,29599,28835],{"class":378},[41,29601,59],{"class":58},[41,29603,29604,29606,29608],{"class":43,"line":2754},[41,29605,29399],{"class":275},[41,29607,29402],{"class":378},[41,29609,59],{"class":58},[41,29611,29612,29614,29617],{"class":43,"line":2759},[41,29613,28838],{"class":58},[41,29615,29616],{"class":378}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[41,29618,59],{"class":58},[41,29620,29621,29623],{"class":43,"line":8086},[41,29622,29373],{"class":58},[41,29624,59],{"class":58},[41,29626,29627],{"class":43,"line":8110},[41,29628,28844],{"class":378},[41,29630,29631],{"class":43,"line":8115},[41,29632,80],{"emptyLinePlaceholder":79},[41,29634,29635,29637,29639,29641],{"class":43,"line":8121},[41,29636,26656],{"class":54},[41,29638,29276],{"class":378},[41,29640,28835],{"class":378},[41,29642,59],{"class":58},[41,29644,29645,29647,29649],{"class":43,"line":8148},[41,29646,29399],{"class":275},[41,29648,29402],{"class":378},[41,29650,59],{"class":58},[41,29652,29653,29655,29658],{"class":43,"line":8153},[41,29654,28838],{"class":58},[41,29656,29657],{"class":378}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[41,29659,59],{"class":58},[41,29661,29662,29664],{"class":43,"line":8159},[41,29663,29373],{"class":58},[41,29665,59],{"class":58},[41,29667,29668],{"class":43,"line":8171},[41,29669,28844],{"class":378},[41,29671,29672],{"class":43,"line":8183},[41,29673,80],{"emptyLinePlaceholder":79},[41,29675,29676,29678,29680,29682],{"class":43,"line":8195},[41,29677,26656],{"class":54},[41,29679,29276],{"class":378},[41,29681,28835],{"class":378},[41,29683,59],{"class":58},[41,29685,29686,29688,29690],{"class":43,"line":9854},[41,29687,29399],{"class":275},[41,29689,29402],{"class":378},[41,29691,59],{"class":58},[41,29693,29694,29696,29699],{"class":43,"line":9879},[41,29695,28838],{"class":58},[41,29697,29698],{"class":378}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[41,29700,59],{"class":58},[41,29702,29703,29705],{"class":43,"line":9902},[41,29704,29373],{"class":58},[41,29706,59],{"class":58},[41,29708,29709],{"class":43,"line":9926},[41,29710,28844],{"class":378},[41,29712,29713],{"class":43,"line":9931},[41,29714,80],{"emptyLinePlaceholder":79},[41,29716,29717,29719,29721,29723],{"class":43,"line":9936},[41,29718,26423],{"class":54},[41,29720,29276],{"class":378},[41,29722,28835],{"class":378},[41,29724,59],{"class":58},[41,29726,29727,29729,29731],{"class":43,"line":9941},[41,29728,29399],{"class":275},[41,29730,29402],{"class":378},[41,29732,59],{"class":58},[41,29734,29735,29737,29740],{"class":43,"line":9950},[41,29736,28838],{"class":58},[41,29738,29739],{"class":378}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[41,29741,59],{"class":58},[41,29743,29744,29746],{"class":43,"line":9955},[41,29745,29373],{"class":58},[41,29747,59],{"class":58},[41,29749,29750],{"class":43,"line":9961},[41,29751,28844],{"class":378},[41,29753,29754],{"class":43,"line":9982},[41,29755,80],{"emptyLinePlaceholder":79},[41,29757,29758,29761,29763,29765],{"class":43,"line":9988},[41,29759,29760],{"class":54},"  docker",[41,29762,29276],{"class":378},[41,29764,28835],{"class":378},[41,29766,59],{"class":58},[41,29768,29769,29771,29773],{"class":43,"line":10002},[41,29770,29399],{"class":275},[41,29772,29402],{"class":378},[41,29774,59],{"class":58},[41,29776,29777,29779,29782],{"class":43,"line":10008},[41,29778,28838],{"class":58},[41,29780,29781],{"class":378}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[41,29783,59],{"class":58},[41,29785,29786,29788],{"class":43,"line":10035},[41,29787,29373],{"class":58},[41,29789,59],{"class":58},[41,29791,29792],{"class":43,"line":10044},[41,29793,28844],{"class":378},[20,29795,29796],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[20,29798,29799],{},[1603,29800],{"alt":37,"src":29801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[20,29803,29804],{},[1603,29805],{"alt":37,"src":29806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22136,29808,29810],{"id":29809},"_623清除构建缓存","6.2.3.清除构建缓存",[32,29812,29814],{"className":34,"code":29813,"language":36,"meta":37,"style":37},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[24,29815,29816,29821],{"__ignoreMap":37},[41,29817,29818],{"class":43,"line":44},[41,29819,29820],{"class":47},"# 清理BuildKit构建缓存\n",[41,29822,29823,29825,29828,29831],{"class":43,"line":51},[41,29824,26656],{"class":54},[41,29826,29827],{"class":378}," builder",[41,29829,29830],{"class":378}," prune",[41,29832,29833],{"class":58}," -f\n",[20,29835,29836],{},[1603,29837],{"alt":37,"src":29838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[241,29840,29842],{"id":29841},"_63补充","6.3.补充",[22136,29844,29846],{"id":29845},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[20,29848,29849],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[20,29851,29852],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[20,29854,29855],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[32,29857,29859],{"className":34,"code":29858,"language":36,"meta":37,"style":37},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[24,29860,29861,29868],{"__ignoreMap":37},[41,29862,29863,29865],{"class":43,"line":44},[41,29864,27473],{"class":54},[41,29866,29867],{"class":378}," nginx\n",[41,29869,29870,29872,29875,29878,29880],{"class":43,"line":51},[41,29871,28658],{"class":54},[41,29873,29874],{"class":378}," echo",[41,29876,29877],{"class":378}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[41,29879,26325],{"class":271},[41,29881,29882],{"class":378}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[20,29884,29885],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[20,29887,29888],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[32,29890,29892],{"className":34,"code":29891,"language":36,"meta":37,"style":37},"docker build -t nginx:tuling .\n",[24,29893,29894],{"__ignoreMap":37},[41,29895,29896,29898,29900,29902,29905],{"class":43,"line":44},[41,29897,26656],{"class":54},[41,29899,28835],{"class":378},[41,29901,28838],{"class":58},[41,29903,29904],{"class":378}," nginx:tuling",[41,29906,28844],{"class":378},[20,29908,29909],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[20,29911,29912],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[32,29914,29916],{"className":34,"code":29915,"language":36,"meta":37,"style":37},"docker run -d -p 92:80 nginx:tuling\n",[24,29917,29918],{"__ignoreMap":37},[41,29919,29920,29922,29924,29927,29929,29932],{"class":43,"line":44},[41,29921,26656],{"class":54},[41,29923,27333],{"class":378},[41,29925,29926],{"class":58}," -d",[41,29928,29319],{"class":58},[41,29930,29931],{"class":378}," 92:80",[41,29933,29934],{"class":378}," nginx:tuling\n",[20,29936,29937,29938],{},"4、访问 ",[511,29939,29942],{"href":29940,"rel":29941},"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",[24001],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[20,29944,29945],{},[1603,29946],{"alt":37,"src":29947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[20,29949,29950],{},[1603,29951],{"alt":37,"src":29952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22136,29954,29956],{"id":29955},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[20,29958,29959],{},"只需要知道大体流程即可",[20,29961,29962],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[20,29964,29965],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[20,29967,29968],{},"2、在Dockerfile中添加以下内容",[32,29970,29972],{"className":26194,"code":29971,"language":26196,"meta":37,"style":37},"# 基于哪个镜像\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",[24,29973,29974,29979,29984,29989,29994,29999,30004,30009],{"__ignoreMap":37},[41,29975,29976],{"class":43,"line":44},[41,29977,29978],{},"# 基于哪个镜像\n",[41,29980,29981],{"class":43,"line":51},[41,29982,29983],{},"From java:8\n",[41,29985,29986],{"class":43,"line":62},[41,29987,29988],{},"# 复制文件到容器\n",[41,29990,29991],{"class":43,"line":70},[41,29992,29993],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[41,29995,29996],{"class":43,"line":76},[41,29997,29998],{},"# 声明需要暴露的端口\n",[41,30000,30001],{"class":43,"line":83},[41,30002,30003],{},"EXPOSE 8877\n",[41,30005,30006],{"class":43,"line":89},[41,30007,30008],{},"# 配置容器启动后执行的命令\n",[41,30010,30011],{"class":43,"line":96},[41,30012,30013],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[20,30015,30016],{},"3、使用docker build命令构建镜像",[32,30018,30020],{"className":34,"code":30019,"language":36,"meta":37,"style":37},"docker build -t tulingmall-member:0.0.5 .\n",[24,30021,30022],{"__ignoreMap":37},[41,30023,30024,30026,30028,30030,30033],{"class":43,"line":44},[41,30025,26656],{"class":54},[41,30027,28835],{"class":378},[41,30029,28838],{"class":58},[41,30031,30032],{"class":378}," tulingmall-member:0.0.5",[41,30034,28844],{"class":378},[20,30036,30037],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[20,30039,30040],{},[1603,30041],{"alt":37,"src":30042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[20,30044,30045],{},"4、启动镜像，加-d可在后台启动",[32,30047,30049],{"className":34,"code":30048,"language":36,"meta":37,"style":37},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[24,30050,30051],{"__ignoreMap":37},[41,30052,30053,30055,30057,30059,30061,30064],{"class":43,"line":44},[41,30054,26656],{"class":54},[41,30056,27333],{"class":378},[41,30058,29926],{"class":58},[41,30060,29319],{"class":58},[41,30062,30063],{"class":378}," 8877:8877",[41,30065,30066],{"class":378}," tulingmall-member:0.0.5\n",[20,30068,30069],{},"加上JVM参数：",[32,30071,30073],{"className":34,"code":30072,"language":36,"meta":37,"style":37},"# --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",[24,30074,30075,30080,30095,30105,30114,30121],{"__ignoreMap":37},[41,30076,30077],{"class":43,"line":44},[41,30078,30079],{"class":47},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[41,30081,30082,30084,30086,30089,30091,30093],{"class":43,"line":51},[41,30083,26656],{"class":54},[41,30085,27333],{"class":378},[41,30087,30088],{"class":58},"  -d",[41,30090,29319],{"class":58},[41,30092,30063],{"class":378},[41,30094,59],{"class":58},[41,30096,30097,30099,30102],{"class":43,"line":62},[41,30098,28231],{"class":275},[41,30100,30101],{"class":378},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[41,30103,30104],{"class":58},"  \\\n",[41,30106,30107,30109,30112],{"class":43,"line":70},[41,30108,28231],{"class":275},[41,30110,30111],{"class":378},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[41,30113,30104],{"class":58},[41,30115,30116,30119],{"class":43,"line":76},[41,30117,30118],{"class":275},"--cap-add=SYS_PTRACE  ",[41,30120,26278],{"class":58},[41,30122,30123],{"class":43,"line":83},[41,30124,30125],{"class":275},"tulingmall-member:0.0.5\n",[20,30127,30128],{},"5、访问会员服务接口",[20,30130,30131],{},[1603,30132],{"alt":37,"src":30133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22136,30135,30137],{"id":30136},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[20,30139,30140],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[20,30142,30143,30144],{},"阿里云docker镜像仓库：",[511,30145,30146],{"href":30146,"rel":30147},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24001],[20,30149,30150],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[20,30152,30153],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[20,30155,30156],{},[1603,30157],{"alt":37,"src":30158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[20,30160,30161],{},"要把镜像推送到镜像仓库",[32,30163,30165],{"className":34,"code":30164,"language":36,"meta":37,"style":37},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[24,30166,30167],{"__ignoreMap":37},[41,30168,30169,30171,30173,30175],{"class":43,"line":44},[41,30170,26656],{"class":54},[41,30172,29000],{"class":378},[41,30174,30032],{"class":378},[41,30176,30177],{"class":378}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[20,30179,30180],{},"最后将镜像推送到远程仓库",[32,30182,30184],{"className":34,"code":30183,"language":36,"meta":37,"style":37},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[24,30185,30186],{"__ignoreMap":37},[41,30187,30188,30190,30192],{"class":43,"line":44},[41,30189,26656],{"class":54},[41,30191,29119],{"class":378},[41,30193,30177],{"class":378},[189,30195,30196],{},"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":37,"searchDepth":51,"depth":51,"links":30198},[30199,30200,30201],{"id":28586,"depth":62,"text":28587},{"id":28815,"depth":62,"text":28816},{"id":29841,"depth":62,"text":29842},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28578,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30208,"title":30209,"body":30210,"description":37,"extension":197,"meta":30353,"navigation":79,"path":30354,"seo":30355,"stem":30356,"__hash__":30357},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30211,"toc":30351},[30212,30215,30220,30225,30228,30233,30238,30241,30246,30251,30254,30259,30262,30265,30268,30271,30274,30277,30297,30319,30322,30325,30345,30348],[10,30213,30209],{"id":30214},"_7vscode远程开发",[224,30216,30217],{},[227,30218,30219],{},"插件1：微软Docker工具",[20,30221,30222],{},[1603,30223],{"alt":37,"src":30224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[20,30226,30227],{},"docker扩展插件已经进化为container tools了，请安装container tools",[20,30229,30230],{},[1603,30231],{"alt":37,"src":30232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[224,30234,30235],{"start":51},[227,30236,30237],{},"插件2：微软Docker远程开发工具",[20,30239,30240],{},"下面这是远程开发的插件。",[20,30242,30243],{},[1603,30244],{"alt":37,"src":30245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[20,30247,30248],{},[1603,30249],{"alt":37,"src":30250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[20,30252,30253],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[20,30255,30256],{},[1603,30257],{"alt":37,"src":30258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[20,30260,30261],{},"安装完拓展之后，vscode进行链接：",[20,30263,30264],{},"1.按ctrl+shift+p",[20,30266,30267],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[20,30269,30270],{},"3.选择目前运行的容器",[20,30272,30273],{},"4.VS Code 会在新窗口中打开并连接到容器",[20,30275,30276],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[32,30278,30280],{"className":34,"code":30279,"language":36,"meta":37,"style":37},"docker run -v 主机目录:容器目录 image-name\n",[24,30281,30282],{"__ignoreMap":37},[41,30283,30284,30286,30288,30291,30294],{"class":43,"line":44},[41,30285,26656],{"class":54},[41,30287,27333],{"class":378},[41,30289,30290],{"class":58}," -v",[41,30292,30293],{"class":378}," 主机目录:容器目录",[41,30295,30296],{"class":378}," image-name\n",[32,30298,30300],{"className":34,"code":30299,"language":36,"meta":37,"style":37},"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",[24,30301,30302],{"__ignoreMap":37},[41,30303,30304,30306,30308,30311,30313,30316],{"class":43,"line":44},[41,30305,26656],{"class":54},[41,30307,27333],{"class":378},[41,30309,30310],{"class":58}," -it",[41,30312,30290],{"class":58},[41,30314,30315],{"class":378}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[41,30317,30318],{"class":378}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[20,30320,30321],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[20,30323,30324],{},"查看挂载情况：",[32,30326,30328],{"className":34,"code":30327,"language":36,"meta":37,"style":37},"mount | grep -i project\n",[24,30329,30330],{"__ignoreMap":37},[41,30331,30332,30335,30337,30340,30342],{"class":43,"line":44},[41,30333,30334],{"class":54},"mount",[41,30336,25212],{"class":271},[41,30338,30339],{"class":54}," grep",[41,30341,26533],{"class":58},[41,30343,30344],{"class":378}," project\n",[20,30346,30347],{},"也可以通过ls来进行查看",[189,30349,30350],{},"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":37,"searchDepth":51,"depth":51,"links":30352},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30209,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30359,"title":30360,"body":30361,"description":196,"extension":197,"meta":30365,"navigation":79,"path":30367,"seo":30368,"stem":30369,"__hash__":30370},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30362,"toc":30363},[],{"title":37,"searchDepth":51,"depth":51,"links":30364},[],{"category":30366},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30360,"description":196},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30372,"title":30373,"body":30374,"description":196,"extension":197,"meta":30378,"navigation":79,"path":30379,"seo":30380,"stem":30381,"__hash__":30382},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30375,"toc":30376},[],{"title":37,"searchDepth":51,"depth":51,"links":30377},[],{"category":30366},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30373,"description":196},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30384,"title":30385,"body":30386,"description":196,"extension":197,"meta":30679,"navigation":79,"path":30680,"seo":30681,"stem":30682,"__hash__":30683},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30387,"toc":30677},[30388,30391,30399,30414,30419,30470,30473,30479,30666,30671,30674],[10,30389,30385],{"id":30390},"_1验证深度学习环境",[20,30392,30393,30394],{},"关于环境的安装，看",[511,30395,30398],{"href":30396,"rel":30397},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24001],"Pytorch-->深度学习",[20,30400,30401,30402,30405,30406,30409,30410,30413],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[24,30403,30404],{},"pytorch-cuda=12.4"," 是一个“ ",[423,30407,30408],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[423,30411,30412],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[20,30415,30416],{},[1603,30417],{"alt":37,"src":30418},"\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",[32,30420,30422],{"className":34,"code":30421,"language":36,"meta":37,"style":37},"# 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",[24,30423,30424,30429],{"__ignoreMap":37},[41,30425,30426],{"class":43,"line":44},[41,30427,30428],{"class":47},"# CUDA 12.4\n",[41,30430,30431,30434,30436,30439,30442,30445,30448,30451,30453,30456,30459,30462,30465,30467],{"class":43,"line":51},[41,30432,30433],{"class":54},"conda",[41,30435,23970],{"class":378},[41,30437,30438],{"class":378}," pytorch==",[41,30440,30441],{"class":58},"2.5.1",[41,30443,30444],{"class":378}," torchvision==",[41,30446,30447],{"class":58},"0.20.1",[41,30449,30450],{"class":378}," torchaudio==",[41,30452,30441],{"class":58},[41,30454,30455],{"class":378}," pytorch-cuda=",[41,30457,30458],{"class":58},"12.4",[41,30460,30461],{"class":58}," -c",[41,30463,30464],{"class":378}," pytorch",[41,30466,30461],{"class":58},[41,30468,30469],{"class":378}," nvidia\n",[20,30471,30472],{},"）：",[20,30474,30475],{},[511,30476,30477],{"href":30477,"rel":30478},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24001],[32,30480,30484],{"className":30481,"code":30482,"language":30483,"meta":37,"style":37},"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",[24,30485,30486,30491,30499,30504,30514,30530,30535,30545,30582,30589,30601,30617,30622,30632,30644,30654],{"__ignoreMap":37},[41,30487,30488],{"class":43,"line":44},[41,30489,30490],{"class":47},"# 对深度学习环境进行测试\n",[41,30492,30493,30496],{"class":43,"line":51},[41,30494,30495],{"class":271},"import",[41,30497,30498],{"class":275}," torch\n",[41,30500,30501],{"class":43,"line":62},[41,30502,30503],{"class":47},"# 查看cuda是否被激活\n",[41,30505,30506,30509,30511],{"class":43,"line":70},[41,30507,30508],{"class":275},"flag",[41,30510,321],{"class":271},[41,30512,30513],{"class":275},"torch.cuda.is_available()\n",[41,30515,30516,30519,30521,30524,30527],{"class":43,"line":76},[41,30517,30518],{"class":58},"print",[41,30520,276],{"class":275},[41,30522,30523],{"class":378},"\"cuda:\"",[41,30525,30526],{"class":275},", flag)   ",[41,30528,30529],{"class":47},"#返回true的话说明被激活\n",[41,30531,30532],{"class":43,"line":83},[41,30533,30534],{"class":47},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[41,30536,30537,30540,30542],{"class":43,"line":89},[41,30538,30539],{"class":275},"ngpu",[41,30541,321],{"class":271},[41,30543,30544],{"class":58},"1\n",[41,30546,30547,30550,30552,30555,30558,30560,30563,30566,30569,30571,30573,30575,30577,30580],{"class":43,"line":96},[41,30548,30549],{"class":275},"device",[41,30551,321],{"class":271},[41,30553,30554],{"class":275},"torch.device(",[41,30556,30557],{"class":378},"\"cuda:0\"",[41,30559,1844],{"class":271},[41,30561,30562],{"class":275},"(torch.cuda.is_available() ",[41,30564,30565],{"class":271},"and",[41,30567,30568],{"class":275}," ngpu",[41,30570,1233],{"class":271},[41,30572,465],{"class":58},[41,30574,13852],{"class":275},[41,30576,1841],{"class":271},[41,30578,30579],{"class":378}," \"cpu\"",[41,30581,282],{"class":275},[41,30583,30584,30586],{"class":43,"line":104},[41,30585,30518],{"class":58},[41,30587,30588],{"class":275},"(device)\n",[41,30590,30591,30593,30596,30598],{"class":43,"line":176},[41,30592,30518],{"class":58},[41,30594,30595],{"class":275},"(torch.cuda.get_device_name(",[41,30597,465],{"class":58},[41,30599,30600],{"class":275},"))\n",[41,30602,30603,30605,30608,30610,30612,30614],{"class":43,"line":184},[41,30604,30518],{"class":58},[41,30606,30607],{"class":275},"(torch.rand(",[41,30609,345],{"class":58},[41,30611,651],{"class":275},[41,30613,345],{"class":58},[41,30615,30616],{"class":275},").cuda())\n",[41,30618,30619],{"class":43,"line":1757},[41,30620,30621],{"class":47},"# 查看cuda和cudnn的版本\n",[41,30623,30624,30627,30629],{"class":43,"line":1763},[41,30625,30626],{"class":275},"cuda_version",[41,30628,321],{"class":271},[41,30630,30631],{"class":275},"torch.version.cuda\n",[41,30633,30634,30636,30638,30641],{"class":43,"line":1768},[41,30635,30518],{"class":58},[41,30637,276],{"class":275},[41,30639,30640],{"class":378},"\"cuda version\"",[41,30642,30643],{"class":275},",cuda_version)\n",[41,30645,30646,30649,30651],{"class":43,"line":1782},[41,30647,30648],{"class":275},"cudnn_version",[41,30650,321],{"class":271},[41,30652,30653],{"class":275},"torch.backends.cudnn.version()\n",[41,30655,30656,30658,30660,30663],{"class":43,"line":1787},[41,30657,30518],{"class":58},[41,30659,276],{"class":275},[41,30661,30662],{"class":378},"\"cudnn version\"",[41,30664,30665],{"class":275},",cudnn_version)\n",[20,30667,30668],{},[1603,30669],{"alt":37,"src":30670},"\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",[20,30672,30673],{},"cuda:0 指的是一块显卡",[189,30675,30676],{},"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":37,"searchDepth":51,"depth":51,"links":30678},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30385,"description":196},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30685,"title":30686,"body":30687,"description":196,"extension":197,"meta":50491,"navigation":79,"path":50492,"seo":50493,"stem":50494,"__hash__":50495},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30688,"toc":50485},[30689,30692,30696,30700,30703,30708,30713,30716,30721,30726,30731,30734,30738,30743,30747,30752,30755,30760,30763,30766,30769,30772,30777,30780,30785,30790,30795,30800,30803,30807,30810,30815,31419,31424,31427,31432,31435,31438,31902,31905,31908,31911,31914,33965,33968,33973,33978,34773,34776,34781,35559,35563,37222,37226,37940,37944,37948,37953,37958,37963,37966,37971,37976,37981,37986,37991,37995,38000,39282,39287,39290,39293,39296,39451,39454,39457,40673,40678,41373,41377,41381,41386,41391,41394,41399,41404,41409,41414,41419,41424,41429,41434,41439,41444,41449,41454,41459,41464,41469,41474,41479,41484,41489,41494,41499,41504,41509,41514,41519,41524,41529,41534,41539,41544,41548,41552,41555,43033,43037,44684,44688,45382,45386,45389,45392,45936,45939,45943,45946,47343,47347,47350,47928,49715,49719,49722,50482],[10,30690,30686],{"id":30691},"_2经典神经网络",[241,30693,30695],{"id":30694},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22136,30697,30699],{"id":30698},"_211原理介绍","2.1.1.原理介绍",[20,30701,30702],{},"LeNet-5",[224,30704,30705],{},[227,30706,30707],{},"原理",[20,30709,30710],{},[1603,30711],{"alt":37,"src":30712},"\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",[20,30714,30715],{},"B是batch批次；C是channel通道",[224,30717,30718],{"start":51},[227,30719,30720],{},"网络参数详细",[20,30722,30723],{},[1603,30724],{"alt":37,"src":30725},"\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",[20,30727,30728],{},[1603,30729],{"alt":37,"src":30730},"\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",[20,30732,30733],{},"AlexNet",[224,30735,30736],{},[227,30737,30707],{},[20,30739,30740],{},[1603,30741],{"alt":37,"src":30742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[224,30744,30745],{"start":51},[227,30746,30720],{},[20,30748,30749],{},[1603,30750],{"alt":37,"src":30751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[20,30753,30754],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[20,30756,30757],{},[1603,30758],{"alt":37,"src":30759},"\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",[20,30761,30762],{},"数据处理中的图像增强操作:",[20,30764,30765],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[20,30767,30768],{},"①增加数据量，保证训练数据充足；②防止过拟合",[20,30770,30771],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[20,30773,30774],{},[1603,30775],{"alt":37,"src":30776},"\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",[20,30778,30779],{},"提升网络精确度的方法：LRN正则化",[20,30781,30782],{},[1603,30783],{"alt":37,"src":30784},"\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",[20,30786,30787],{},[1603,30788],{"alt":37,"src":30789},"\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",[224,30791,30792],{"start":62},[227,30793,30794],{},"AlexNet的总结",[20,30796,30797],{},[1603,30798],{"alt":37,"src":30799},"\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",[20,30801,30802],{},"比LeNet模型要深一丢丢",[22136,30804,30806],{"id":30805},"_212代码实现","2.1.2.代码实现",[20,30808,30809],{},"（1）LeNet",[224,30811,30812],{},[227,30813,30814],{},"模型搭建",[32,30816,30818],{"className":30481,"code":30817,"language":30483,"meta":37,"style":37},"# 导入库\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",[24,30819,30820,30825,30831,30836,30849,30854,30866,30870,30890,30895,30900,30911,30916,30935,30939,30944,30993,31005,31010,31039,31074,31101,31106,31118,31123,31143,31162,31181,31185,31190,31200,31217,31228,31243,31254,31265,31280,31295,31306,31313,31317,31331,31336,31359,31364,31369,31374,31378,31383,31388,31398],{"__ignoreMap":37},[41,30821,30822],{"class":43,"line":44},[41,30823,30824],{"class":47},"# 导入库\n",[41,30826,30827,30829],{"class":43,"line":51},[41,30828,30495],{"class":271},[41,30830,30498],{"class":275},[41,30832,30833],{"class":43,"line":62},[41,30834,30835],{"class":47},"# 导入神经网络层\n",[41,30837,30838,30841,30844,30846],{"class":43,"line":70},[41,30839,30840],{"class":271},"from",[41,30842,30843],{"class":275}," torch ",[41,30845,30495],{"class":271},[41,30847,30848],{"class":275}," nn\n",[41,30850,30851],{"class":43,"line":76},[41,30852,30853],{"class":47},"# 导入展示神经网络参数的包\n",[41,30855,30856,30858,30861,30863],{"class":43,"line":83},[41,30857,30840],{"class":271},[41,30859,30860],{"class":275}," torchsummary ",[41,30862,30495],{"class":271},[41,30864,30865],{"class":275}," summary\n",[41,30867,30868],{"class":43,"line":89},[41,30869,80],{"emptyLinePlaceholder":79},[41,30871,30872,30874,30877,30879,30882,30884,30887],{"class":43,"line":96},[41,30873,14832],{"class":271},[41,30875,30876],{"class":54}," LeNet",[41,30878,276],{"class":275},[41,30880,30881],{"class":54},"nn",[41,30883,831],{"class":275},[41,30885,30886],{"class":54},"Module",[41,30888,30889],{"class":275},"):\n",[41,30891,30892],{"class":43,"line":104},[41,30893,30894],{"class":47},"    # 模型初始化:\n",[41,30896,30897],{"class":43,"line":176},[41,30898,30899],{"class":47},"    # 定义一些网络层和激活函数\n",[41,30901,30902,30905,30908],{"class":43,"line":184},[41,30903,30904],{"class":271},"    def",[41,30906,30907],{"class":58}," __init__",[41,30909,30910],{"class":275},"(self):\n",[41,30912,30913],{"class":43,"line":1757},[41,30914,30915],{"class":47},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[41,30917,30918,30921,30924,30927,30930,30933],{"class":43,"line":1763},[41,30919,30920],{"class":58},"        super",[41,30922,30923],{"class":275},"(LeNet,",[41,30925,30926],{"class":58},"self",[41,30928,30929],{"class":275},").",[41,30931,30932],{"class":58},"__init__",[41,30934,2115],{"class":275},[41,30936,30937],{"class":43,"line":1768},[41,30938,80],{"emptyLinePlaceholder":79},[41,30940,30941],{"class":43,"line":1782},[41,30942,30943],{"class":47},"        # 定义网络层\n",[41,30945,30946,30949,30952,30954,30957,30960,30962,30964,30966,30969,30971,30973,30975,30978,30980,30982,30984,30987,30989,30991],{"class":43,"line":1787},[41,30947,30948],{"class":58},"        self",[41,30950,30951],{"class":275},".c1",[41,30953,321],{"class":271},[41,30955,30956],{"class":275},"nn.Conv2d(",[41,30958,30959],{"class":5354},"in_channels",[41,30961,321],{"class":271},[41,30963,26],{"class":58},[41,30965,651],{"class":275},[41,30967,30968],{"class":5354},"out_channels",[41,30970,321],{"class":271},[41,30972,617],{"class":58},[41,30974,651],{"class":275},[41,30976,30977],{"class":5354},"kernel_size",[41,30979,321],{"class":271},[41,30981,592],{"class":58},[41,30983,651],{"class":275},[41,30985,30986],{"class":5354},"padding",[41,30988,321],{"class":271},[41,30990,351],{"class":58},[41,30992,282],{"class":275},[41,30994,30995,30997,31000,31002],{"class":43,"line":1793},[41,30996,30948],{"class":58},[41,30998,30999],{"class":275},".sig",[41,31001,321],{"class":271},[41,31003,31004],{"class":275},"nn.Sigmoid()\n",[41,31006,31007],{"class":43,"line":1814},[41,31008,31009],{"class":47},"        # 定义池化\n",[41,31011,31012,31014,31017,31019,31022,31024,31026,31028,31030,31033,31035,31037],{"class":43,"line":1819},[41,31013,30948],{"class":58},[41,31015,31016],{"class":275},".s2",[41,31018,321],{"class":271},[41,31020,31021],{"class":275},"nn.AvgPool2d(",[41,31023,30977],{"class":5354},[41,31025,321],{"class":271},[41,31027,351],{"class":58},[41,31029,651],{"class":275},[41,31031,31032],{"class":5354},"stride",[41,31034,321],{"class":271},[41,31036,351],{"class":58},[41,31038,282],{"class":275},[41,31040,31041,31043,31046,31048,31050,31052,31054,31056,31058,31060,31062,31064,31066,31068,31070,31072],{"class":43,"line":1833},[41,31042,30948],{"class":58},[41,31044,31045],{"class":275},".c3",[41,31047,321],{"class":271},[41,31049,30956],{"class":275},[41,31051,30959],{"class":5354},[41,31053,321],{"class":271},[41,31055,617],{"class":58},[41,31057,651],{"class":275},[41,31059,30968],{"class":5354},[41,31061,321],{"class":271},[41,31063,874],{"class":58},[41,31065,651],{"class":275},[41,31067,30977],{"class":5354},[41,31069,321],{"class":271},[41,31071,592],{"class":58},[41,31073,282],{"class":275},[41,31075,31076,31078,31081,31083,31085,31087,31089,31091,31093,31095,31097,31099],{"class":43,"line":1838},[41,31077,30948],{"class":58},[41,31079,31080],{"class":275},".s4",[41,31082,321],{"class":271},[41,31084,31021],{"class":275},[41,31086,30977],{"class":5354},[41,31088,321],{"class":271},[41,31090,351],{"class":58},[41,31092,651],{"class":275},[41,31094,31032],{"class":5354},[41,31096,321],{"class":271},[41,31098,351],{"class":58},[41,31100,282],{"class":275},[41,31102,31103],{"class":43,"line":1867},[41,31104,31105],{"class":47},"        # 定义平展层\n",[41,31107,31108,31110,31113,31115],{"class":43,"line":1872},[41,31109,30948],{"class":58},[41,31111,31112],{"class":275},".flatten",[41,31114,321],{"class":271},[41,31116,31117],{"class":275},"nn.Flatten()\n",[41,31119,31120],{"class":43,"line":1889},[41,31121,31122],{"class":47},"        # 定义全连接层\n",[41,31124,31125,31127,31130,31132,31135,31137,31139,31141],{"class":43,"line":1894},[41,31126,30948],{"class":58},[41,31128,31129],{"class":275},".f5",[41,31131,321],{"class":271},[41,31133,31134],{"class":275},"nn.Linear(",[41,31136,4125],{"class":58},[41,31138,651],{"class":275},[41,31140,1090],{"class":58},[41,31142,282],{"class":275},[41,31144,31145,31147,31150,31152,31154,31156,31158,31160],{"class":43,"line":1899},[41,31146,30948],{"class":58},[41,31148,31149],{"class":275},".f6",[41,31151,321],{"class":271},[41,31153,31134],{"class":275},[41,31155,1090],{"class":58},[41,31157,651],{"class":275},[41,31159,984],{"class":58},[41,31161,282],{"class":275},[41,31163,31164,31166,31169,31171,31173,31175,31177,31179],{"class":43,"line":1904},[41,31165,30948],{"class":58},[41,31167,31168],{"class":275},".f7",[41,31170,321],{"class":271},[41,31172,31134],{"class":275},[41,31174,984],{"class":58},[41,31176,651],{"class":275},[41,31178,719],{"class":58},[41,31180,282],{"class":275},[41,31182,31183],{"class":43,"line":1918},[41,31184,80],{"emptyLinePlaceholder":79},[41,31186,31187],{"class":43,"line":1923},[41,31188,31189],{"class":47},"    # 写工具->写前向传播\n",[41,31191,31192,31194,31197],{"class":43,"line":2715},[41,31193,30904],{"class":271},[41,31195,31196],{"class":54}," forward",[41,31198,31199],{"class":275},"(self,x):\n",[41,31201,31202,31205,31207,31209,31212,31214],{"class":43,"line":2729},[41,31203,31204],{"class":275},"        x",[41,31206,321],{"class":271},[41,31208,30926],{"class":58},[41,31210,31211],{"class":275},".sig(",[41,31213,30926],{"class":58},[41,31215,31216],{"class":275},".c1(x))\n",[41,31218,31219,31221,31223,31225],{"class":43,"line":2737},[41,31220,31204],{"class":275},[41,31222,321],{"class":271},[41,31224,30926],{"class":58},[41,31226,31227],{"class":275},".s2(x)\n",[41,31229,31230,31232,31234,31236,31238,31240],{"class":43,"line":2742},[41,31231,31204],{"class":275},[41,31233,321],{"class":271},[41,31235,30926],{"class":58},[41,31237,31211],{"class":275},[41,31239,30926],{"class":58},[41,31241,31242],{"class":275},".c3(x))\n",[41,31244,31245,31247,31249,31251],{"class":43,"line":2748},[41,31246,31204],{"class":275},[41,31248,321],{"class":271},[41,31250,30926],{"class":58},[41,31252,31253],{"class":275},".s4(x)\n",[41,31255,31256,31258,31260,31262],{"class":43,"line":2754},[41,31257,31204],{"class":275},[41,31259,321],{"class":271},[41,31261,30926],{"class":58},[41,31263,31264],{"class":275},".flatten(x)\n",[41,31266,31267,31269,31271,31273,31275,31277],{"class":43,"line":2759},[41,31268,31204],{"class":275},[41,31270,321],{"class":271},[41,31272,30926],{"class":58},[41,31274,31211],{"class":275},[41,31276,30926],{"class":58},[41,31278,31279],{"class":275},".f5(x))\n",[41,31281,31282,31284,31286,31288,31290,31292],{"class":43,"line":8086},[41,31283,31204],{"class":275},[41,31285,321],{"class":271},[41,31287,30926],{"class":58},[41,31289,31211],{"class":275},[41,31291,30926],{"class":58},[41,31293,31294],{"class":275},".f6(x))\n",[41,31296,31297,31299,31301,31303],{"class":43,"line":8110},[41,31298,31204],{"class":275},[41,31300,321],{"class":271},[41,31302,30926],{"class":58},[41,31304,31305],{"class":275},".f7(x)\n",[41,31307,31308,31310],{"class":43,"line":8115},[41,31309,14890],{"class":271},[41,31311,31312],{"class":275}," x\n",[41,31314,31315],{"class":43,"line":8121},[41,31316,80],{"emptyLinePlaceholder":79},[41,31318,31319,31321,31324,31326,31329],{"class":43,"line":8148},[41,31320,1672],{"class":271},[41,31322,31323],{"class":58}," __name__",[41,31325,3087],{"class":271},[41,31327,31328],{"class":378},"\"__main__\"",[41,31330,3877],{"class":275},[41,31332,31333],{"class":43,"line":8153},[41,31334,31335],{"class":47},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[41,31337,31338,31341,31343,31345,31348,31350,31353,31355,31357],{"class":43,"line":8159},[41,31339,31340],{"class":275},"    device",[41,31342,321],{"class":271},[41,31344,30554],{"class":275},[41,31346,31347],{"class":378},"\"cuda\"",[41,31349,1844],{"class":271},[41,31351,31352],{"class":275}," torch.cuda.is_available() ",[41,31354,1841],{"class":271},[41,31356,30579],{"class":378},[41,31358,282],{"class":275},[41,31360,31361],{"class":43,"line":8171},[41,31362,31363],{"class":47},"    # 如果就是想指定用cpu用下方代码:\n",[41,31365,31366],{"class":43,"line":8183},[41,31367,31368],{"class":47},"    # device=\"cpu\"\n",[41,31370,31371],{"class":43,"line":8195},[41,31372,31373],{"class":47},"    # print(device)\n",[41,31375,31376],{"class":43,"line":9854},[41,31377,80],{"emptyLinePlaceholder":79},[41,31379,31380],{"class":43,"line":9879},[41,31381,31382],{"class":47},"    # 实例化模型\n",[41,31384,31385],{"class":43,"line":9902},[41,31386,31387],{"class":47},"    # 将模型放到设备中去运行\n",[41,31389,31390,31393,31395],{"class":43,"line":9926},[41,31391,31392],{"class":275},"    model",[41,31394,321],{"class":271},[41,31396,31397],{"class":275},"LeNet().to(device)\n",[41,31399,31400,31403,31406,31408,31410,31412,31414,31416],{"class":43,"line":9931},[41,31401,31402],{"class":58},"    print",[41,31404,31405],{"class":275},"(summary(model,(",[41,31407,26],{"class":58},[41,31409,651],{"class":275},[41,31411,1174],{"class":58},[41,31413,651],{"class":275},[41,31415,1174],{"class":58},[41,31417,31418],{"class":275},")))\n",[20,31420,31421],{},[1603,31422],{"alt":37,"src":31423},"\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",[20,31425,31426],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[224,31428,31429],{"start":51},[227,31430,31431],{},"训练",[20,31433,31434],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[20,31436,31437],{},"在训练之前可以将数据展示看一下",[32,31439,31441],{"className":30481,"code":31440,"language":30483,"meta":37,"style":37},"# 建立画图的函数，用于展示数据\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",[24,31442,31443,31448,31453,31465,31477,31490,31495,31507,31512,31524,31529,31541,31545,31549,31570,31582,31587,31608,31619,31623,31628,31646,31657,31662,31673,31678,31689,31693,31698,31713,31726,31731,31736,31749,31762,31775,31780,31784,31789,31809,31826,31846,31859,31872,31882,31897],{"__ignoreMap":37},[41,31444,31445],{"class":43,"line":44},[41,31446,31447],{"class":47},"# 建立画图的函数，用于展示数据\n",[41,31449,31450],{"class":43,"line":51},[41,31451,31452],{"class":47},"# torchvision中包含很多内置的数据集\n",[41,31454,31455,31457,31460,31462],{"class":43,"line":62},[41,31456,30840],{"class":271},[41,31458,31459],{"class":275}," sklearn.externals.array_api_compat.torch ",[41,31461,30495],{"class":271},[41,31463,31464],{"class":275}," squeeze\n",[41,31466,31467,31469,31472,31474],{"class":43,"line":70},[41,31468,30840],{"class":271},[41,31470,31471],{"class":275}," torchvision.datasets ",[41,31473,30495],{"class":271},[41,31475,31476],{"class":275}," FashionMNIST\n",[41,31478,31479,31481,31484,31487],{"class":43,"line":76},[41,31480,30495],{"class":271},[41,31482,31483],{"class":275}," numpy ",[41,31485,31486],{"class":271},"as",[41,31488,31489],{"class":275}," np\n",[41,31491,31492],{"class":43,"line":83},[41,31493,31494],{"class":47},"# 引入处理数据集的包\n",[41,31496,31497,31499,31502,31504],{"class":43,"line":89},[41,31498,30840],{"class":271},[41,31500,31501],{"class":275}," torchvision ",[41,31503,30495],{"class":271},[41,31505,31506],{"class":275}," transforms\n",[41,31508,31509],{"class":43,"line":96},[41,31510,31511],{"class":47},"# 从torch库中引入数据处理的包\n",[41,31513,31514,31516,31519,31521],{"class":43,"line":104},[41,31515,30495],{"class":271},[41,31517,31518],{"class":275}," torch.utils.data ",[41,31520,31486],{"class":271},[41,31522,31523],{"class":275}," Data\n",[41,31525,31526],{"class":43,"line":176},[41,31527,31528],{"class":47},"# 导入画图的库\n",[41,31530,31531,31533,31536,31538],{"class":43,"line":184},[41,31532,30495],{"class":271},[41,31534,31535],{"class":275}," matplotlib.pyplot ",[41,31537,31486],{"class":271},[41,31539,31540],{"class":275}," plt\n",[41,31542,31543],{"class":43,"line":1757},[41,31544,80],{"emptyLinePlaceholder":79},[41,31546,31547],{"class":43,"line":1763},[41,31548,80],{"emptyLinePlaceholder":79},[41,31550,31551,31554,31556,31559,31562,31564,31567],{"class":43,"line":1768},[41,31552,31553],{"class":275},"train_data",[41,31555,321],{"class":271},[41,31557,31558],{"class":275},"FashionMNIST(",[41,31560,31561],{"class":5354},"root",[41,31563,321],{"class":271},[41,31565,31566],{"class":378},"'.\u002Fdata'",[41,31568,31569],{"class":275},",\n",[41,31571,31572,31575,31577,31580],{"class":43,"line":1782},[41,31573,31574],{"class":5354},"                        train",[41,31576,321],{"class":271},[41,31578,31579],{"class":58},"True",[41,31581,31569],{"class":275},[41,31583,31584],{"class":43,"line":1787},[41,31585,31586],{"class":47},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[41,31588,31589,31592,31594,31597,31600,31602,31605],{"class":43,"line":1793},[41,31590,31591],{"class":5354},"                        transform",[41,31593,321],{"class":271},[41,31595,31596],{"class":275},"transforms.Compose([transforms.Resize(",[41,31598,31599],{"class":5354},"size",[41,31601,321],{"class":271},[41,31603,31604],{"class":58},"224",[41,31606,31607],{"class":275},"),transforms.ToTensor()]),\n",[41,31609,31610,31613,31615,31617],{"class":43,"line":1814},[41,31611,31612],{"class":5354},"                        download",[41,31614,321],{"class":271},[41,31616,31579],{"class":58},[41,31618,282],{"class":275},[41,31620,31621],{"class":43,"line":1819},[41,31622,80],{"emptyLinePlaceholder":79},[41,31624,31625],{"class":43,"line":1833},[41,31626,31627],{"class":47},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[41,31629,31630,31633,31635,31638,31641,31643],{"class":43,"line":1838},[41,31631,31632],{"class":275},"train_loader",[41,31634,321],{"class":271},[41,31636,31637],{"class":275},"Data.DataLoader(",[41,31639,31640],{"class":5354},"dataset",[41,31642,321],{"class":271},[41,31644,31645],{"class":275},"train_data,\n",[41,31647,31648,31651,31653,31655],{"class":43,"line":1867},[41,31649,31650],{"class":5354},"                             batch_size",[41,31652,321],{"class":271},[41,31654,477],{"class":58},[41,31656,31569],{"class":275},[41,31658,31659],{"class":43,"line":1872},[41,31660,31661],{"class":47},"                             # 数据是否打乱\n",[41,31663,31664,31667,31669,31671],{"class":43,"line":1889},[41,31665,31666],{"class":5354},"                             shuffle",[41,31668,321],{"class":271},[41,31670,31579],{"class":58},[41,31672,31569],{"class":275},[41,31674,31675],{"class":43,"line":1894},[41,31676,31677],{"class":47},"                             # 规定加载数据的进程\n",[41,31679,31680,31683,31685,31687],{"class":43,"line":1899},[41,31681,31682],{"class":5354},"                             num_workers",[41,31684,321],{"class":271},[41,31686,465],{"class":58},[41,31688,282],{"class":275},[41,31690,31691],{"class":43,"line":1904},[41,31692,80],{"emptyLinePlaceholder":79},[41,31694,31695],{"class":43,"line":1918},[41,31696,31697],{"class":47},"# 获得一个batch的数据\n",[41,31699,31700,31702,31705,31707,31710],{"class":43,"line":1923},[41,31701,3163],{"class":271},[41,31703,31704],{"class":275}," step,(b_x,b_y) ",[41,31706,26146],{"class":271},[41,31708,31709],{"class":58}," enumerate",[41,31711,31712],{"class":275},"(train_loader):\n",[41,31714,31715,31717,31720,31722,31724],{"class":43,"line":2715},[41,31716,3239],{"class":271},[41,31718,31719],{"class":275}," step ",[41,31721,1233],{"class":271},[41,31723,4231],{"class":58},[41,31725,3877],{"class":275},[41,31727,31728],{"class":43,"line":2729},[41,31729,31730],{"class":271},"        break\n",[41,31732,31733],{"class":43,"line":2737},[41,31734,31735],{"class":47},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[41,31737,31738,31741,31743,31746],{"class":43,"line":2742},[41,31739,31740],{"class":275},"batch_x",[41,31742,321],{"class":271},[41,31744,31745],{"class":275},"b_x.squeeze().numpy()  ",[41,31747,31748],{"class":47},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[41,31750,31751,31754,31756,31759],{"class":43,"line":2748},[41,31752,31753],{"class":275},"batch_y",[41,31755,321],{"class":271},[41,31757,31758],{"class":275},"b_y.numpy()   ",[41,31760,31761],{"class":47},"#将张量转换成功numpy数组\n",[41,31763,31764,31767,31769,31772],{"class":43,"line":2754},[41,31765,31766],{"class":275},"class_label",[41,31768,321],{"class":271},[41,31770,31771],{"class":275},"train_data.classes  ",[41,31773,31774],{"class":47},"#训练集标签\n",[41,31776,31777],{"class":43,"line":2759},[41,31778,31779],{"class":47},"# print(class_label)\n",[41,31781,31782],{"class":43,"line":8086},[41,31783,80],{"emptyLinePlaceholder":79},[41,31785,31786],{"class":43,"line":8110},[41,31787,31788],{"class":47},"# 可视化一个batch的图像\n",[41,31790,31791,31794,31797,31799,31801,31803,31805,31807],{"class":43,"line":8115},[41,31792,31793],{"class":275},"plt.figure(",[41,31795,31796],{"class":5354},"figsize",[41,31798,321],{"class":271},[41,31800,276],{"class":275},[41,31802,771],{"class":58},[41,31804,651],{"class":275},[41,31806,592],{"class":58},[41,31808,30600],{"class":275},[41,31810,31811,31813,31816,31818,31821,31823],{"class":43,"line":8121},[41,31812,3163],{"class":271},[41,31814,31815],{"class":275}," ii ",[41,31817,26146],{"class":271},[41,31819,31820],{"class":275}," np.arange(",[41,31822,7496],{"class":58},[41,31824,31825],{"class":275},"(batch_y)):\n",[41,31827,31828,31831,31833,31835,31837,31840,31842,31844],{"class":43,"line":8148},[41,31829,31830],{"class":275},"    plt.subplot(",[41,31832,566],{"class":58},[41,31834,651],{"class":275},[41,31836,874],{"class":58},[41,31838,31839],{"class":275},",ii ",[41,31841,754],{"class":271},[41,31843,25221],{"class":58},[41,31845,282],{"class":275},[41,31847,31848,31851,31854,31856],{"class":43,"line":8153},[41,31849,31850],{"class":275},"    plt.imshow(batch_x[ii,:,:],",[41,31852,31853],{"class":5354},"cmap",[41,31855,321],{"class":271},[41,31857,31858],{"class":275},"plt.cm.gray)\n",[41,31860,31861,31864,31866,31868,31870],{"class":43,"line":8159},[41,31862,31863],{"class":275},"    plt.title(class_label[batch_y[ii]],",[41,31865,31599],{"class":5354},[41,31867,321],{"class":271},[41,31869,719],{"class":58},[41,31871,282],{"class":275},[41,31873,31874,31877,31880],{"class":43,"line":8171},[41,31875,31876],{"class":275},"    plt.axis(",[41,31878,31879],{"class":378},"\"off\"",[41,31881,282],{"class":275},[41,31883,31884,31887,31890,31892,31895],{"class":43,"line":8183},[41,31885,31886],{"class":275},"    plt.subplots_adjust(",[41,31888,31889],{"class":5354},"wspace",[41,31891,321],{"class":271},[41,31893,31894],{"class":58},"0.05",[41,31896,282],{"class":275},[41,31898,31899],{"class":43,"line":8195},[41,31900,31901],{"class":275},"plt.show()\n",[20,31903,31904],{},"用matplotlib进行展示的过程可以后续再补",[20,31906,31907],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[20,31909,31910],{},"训练次数就是按照批次过整个训练集数据的次数",[20,31912,31913],{},"模型训练：",[32,31915,31917],{"className":30481,"code":31916,"language":30483,"meta":37,"style":37},"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",[24,31918,31919,31926,31933,31937,31949,31955,31966,31976,31986,31996,32006,32011,32023,32033,32037,32041,32046,32057,32070,32081,32098,32109,32148,32164,32176,32187,32192,32203,32219,32230,32241,32252,32259,32263,32268,32273,32277,32282,32292,32313,32317,32321,32326,32331,32336,32356,32360,32365,32375,32379,32384,32393,32398,32403,32408,32418,32422,32426,32431,32436,32446,32451,32461,32466,32475,32480,32489,32494,32503,32507,32512,32522,32526,32530,32535,32550,32578,32593,32597,32602,32607,32616,32621,32630,32635,32644,32649,32658,32663,32672,32677,32686,32691,32704,32709,32719,32724,32734,32740,32746,32752,32758,32769,32775,32795,32801,32812,32818,32824,32830,32836,32842,32848,32854,32874,32880,32896,32902,32916,32922,32937,32943,32952,32958,32967,32973,32979,32988,32994,33005,33011,33030,33036,33047,33053,33073,33089,33095,33109,33115,33121,33132,33138,33144,33154,33160,33171,33177,33187,33192,33198,33247,33294,33299,33305,33324,33330,33350,33356,33362,33372,33377,33383,33399,33444,33450,33456,33462,33473,33479,33485,33491,33509,33523,33532,33541,33550,33559,33565,33571,33579,33584,33590,33601,33607,33627,33633,33639,33645,33662,33668,33674,33680,33686,33692,33719,33743,33749,33755,33761,33772,33783,33789,33806,33829,33852,33858,33863,33872,33882,33888,33893,33899,33912,33918,33929,33940,33959],{"__ignoreMap":37},[41,31920,31921,31923],{"class":43,"line":44},[41,31922,30495],{"class":271},[41,31924,31925],{"class":275}," copy\n",[41,31927,31928,31930],{"class":43,"line":51},[41,31929,30495],{"class":271},[41,31931,31932],{"class":275}," time\n",[41,31934,31935],{"class":43,"line":62},[41,31936,80],{"emptyLinePlaceholder":79},[41,31938,31939,31941,31944,31946],{"class":43,"line":70},[41,31940,30495],{"class":271},[41,31942,31943],{"class":275}," pandas ",[41,31945,31486],{"class":271},[41,31947,31948],{"class":275}," pd\n",[41,31950,31951,31953],{"class":43,"line":76},[41,31952,30495],{"class":271},[41,31954,30498],{"class":275},[41,31956,31957,31959,31961,31963],{"class":43,"line":83},[41,31958,30840],{"class":271},[41,31960,31518],{"class":275},[41,31962,30495],{"class":271},[41,31964,31965],{"class":275}," Dataset\n",[41,31967,31968,31970,31972,31974],{"class":43,"line":89},[41,31969,30840],{"class":271},[41,31971,31471],{"class":275},[41,31973,30495],{"class":271},[41,31975,31476],{"class":275},[41,31977,31978,31980,31982,31984],{"class":43,"line":96},[41,31979,30840],{"class":271},[41,31981,31501],{"class":275},[41,31983,30495],{"class":271},[41,31985,31506],{"class":275},[41,31987,31988,31990,31992,31994],{"class":43,"line":104},[41,31989,30495],{"class":271},[41,31991,31518],{"class":275},[41,31993,31486],{"class":271},[41,31995,31523],{"class":275},[41,31997,31998,32000,32002,32004],{"class":43,"line":176},[41,31999,30495],{"class":271},[41,32001,31535],{"class":275},[41,32003,31486],{"class":271},[41,32005,31540],{"class":275},[41,32007,32008],{"class":43,"line":184},[41,32009,32010],{"class":47},"# 导入模型\n",[41,32012,32013,32015,32018,32020],{"class":43,"line":1757},[41,32014,30840],{"class":271},[41,32016,32017],{"class":275}," model ",[41,32019,30495],{"class":271},[41,32021,32022],{"class":275}," LeNet\n",[41,32024,32025,32027,32029,32031],{"class":43,"line":1763},[41,32026,30840],{"class":271},[41,32028,30843],{"class":275},[41,32030,30495],{"class":271},[41,32032,30848],{"class":275},[41,32034,32035],{"class":43,"line":1768},[41,32036,80],{"emptyLinePlaceholder":79},[41,32038,32039],{"class":43,"line":1782},[41,32040,80],{"emptyLinePlaceholder":79},[41,32042,32043],{"class":43,"line":1787},[41,32044,32045],{"class":47},"# 处理训练集与验证集函数--->划分数据集\n",[41,32047,32048,32051,32054],{"class":43,"line":1793},[41,32049,32050],{"class":271},"def",[41,32052,32053],{"class":54}," train_val_data_process",[41,32055,32056],{"class":275},"():\n",[41,32058,32059,32062,32064,32066,32068],{"class":43,"line":1814},[41,32060,32061],{"class":275},"    train_data",[41,32063,321],{"class":271},[41,32065,31558],{"class":275},[41,32067,31566],{"class":378},[41,32069,31569],{"class":275},[41,32071,32072,32075,32077,32079],{"class":43,"line":1819},[41,32073,32074],{"class":5354},"                            train",[41,32076,321],{"class":271},[41,32078,31579],{"class":58},[41,32080,31569],{"class":275},[41,32082,32083,32086,32088,32090,32092,32094,32096],{"class":43,"line":1833},[41,32084,32085],{"class":5354},"                            transform",[41,32087,321],{"class":271},[41,32089,31596],{"class":275},[41,32091,31599],{"class":5354},[41,32093,321],{"class":271},[41,32095,1174],{"class":58},[41,32097,31607],{"class":275},[41,32099,32100,32103,32105,32107],{"class":43,"line":1838},[41,32101,32102],{"class":5354},"                            download",[41,32104,321],{"class":271},[41,32106,31579],{"class":58},[41,32108,282],{"class":275},[41,32110,32111,32114,32116,32119,32122,32124,32127,32129,32131,32134,32136,32138,32141,32143,32145],{"class":43,"line":1867},[41,32112,32113],{"class":275},"    train_data,val_data",[41,32115,321],{"class":271},[41,32117,32118],{"class":275},"Data.random_split(train_data,[",[41,32120,32121],{"class":58},"round",[41,32123,276],{"class":275},[41,32125,32126],{"class":58},"0.8",[41,32128,728],{"class":271},[41,32130,7496],{"class":58},[41,32132,32133],{"class":275},"(train_data)),",[41,32135,32121],{"class":58},[41,32137,276],{"class":275},[41,32139,32140],{"class":58},"0.2",[41,32142,728],{"class":271},[41,32144,7496],{"class":58},[41,32146,32147],{"class":275},"(train_data))])\n",[41,32149,32150,32153,32155,32158,32160,32162],{"class":43,"line":1872},[41,32151,32152],{"class":275},"    train_dataloader ",[41,32154,321],{"class":271},[41,32156,32157],{"class":275}," Data.DataLoader(",[41,32159,31640],{"class":5354},[41,32161,321],{"class":271},[41,32163,31645],{"class":275},[41,32165,32166,32169,32171,32174],{"class":43,"line":1889},[41,32167,32168],{"class":5354},"                                       batch_size",[41,32170,321],{"class":271},[41,32172,32173],{"class":58},"128",[41,32175,31569],{"class":275},[41,32177,32178,32181,32183,32185],{"class":43,"line":1894},[41,32179,32180],{"class":5354},"                                       shuffle",[41,32182,321],{"class":271},[41,32184,31579],{"class":58},[41,32186,31569],{"class":275},[41,32188,32189],{"class":43,"line":1899},[41,32190,32191],{"class":47},"                                       # 规定8个进程\n",[41,32193,32194,32197,32199,32201],{"class":43,"line":1904},[41,32195,32196],{"class":5354},"                                       num_workers",[41,32198,321],{"class":271},[41,32200,668],{"class":58},[41,32202,282],{"class":275},[41,32204,32205,32208,32210,32212,32214,32216],{"class":43,"line":1918},[41,32206,32207],{"class":275},"    val_dataloader",[41,32209,321],{"class":271},[41,32211,31637],{"class":275},[41,32213,31640],{"class":5354},[41,32215,321],{"class":271},[41,32217,32218],{"class":275},"val_data,\n",[41,32220,32221,32224,32226,32228],{"class":43,"line":1923},[41,32222,32223],{"class":5354},"                                   batch_size",[41,32225,321],{"class":271},[41,32227,32173],{"class":58},[41,32229,31569],{"class":275},[41,32231,32232,32235,32237,32239],{"class":43,"line":2715},[41,32233,32234],{"class":5354},"                                   shuffle",[41,32236,321],{"class":271},[41,32238,31579],{"class":58},[41,32240,31569],{"class":275},[41,32242,32243,32246,32248,32250],{"class":43,"line":2729},[41,32244,32245],{"class":5354},"                                   num_workers",[41,32247,321],{"class":271},[41,32249,668],{"class":58},[41,32251,282],{"class":275},[41,32253,32254,32256],{"class":43,"line":2737},[41,32255,4228],{"class":271},[41,32257,32258],{"class":275}," train_dataloader,val_dataloader\n",[41,32260,32261],{"class":43,"line":2742},[41,32262,80],{"emptyLinePlaceholder":79},[41,32264,32265],{"class":43,"line":2748},[41,32266,32267],{"class":47},"# 验证是否出错\n",[41,32269,32270],{"class":43,"line":2754},[41,32271,32272],{"class":47},"# train_val_data_process()\n",[41,32274,32275],{"class":43,"line":2759},[41,32276,80],{"emptyLinePlaceholder":79},[41,32278,32279],{"class":43,"line":8086},[41,32280,32281],{"class":47},"# 定义模型训练函数\n",[41,32283,32284,32286,32289],{"class":43,"line":8110},[41,32285,32050],{"class":271},[41,32287,32288],{"class":54}," train_model_process",[41,32290,32291],{"class":275},"(model,train_dataloader,val_dataloader,num_epochs):\n",[41,32293,32294,32296,32298,32300,32302,32304,32306,32308,32311],{"class":43,"line":8115},[41,32295,31340],{"class":275},[41,32297,321],{"class":271},[41,32299,30554],{"class":275},[41,32301,31347],{"class":378},[41,32303,1844],{"class":271},[41,32305,31352],{"class":275},[41,32307,1841],{"class":271},[41,32309,32310],{"class":378}," 'cpu'",[41,32312,282],{"class":275},[41,32314,32315],{"class":43,"line":8121},[41,32316,80],{"emptyLinePlaceholder":79},[41,32318,32319],{"class":43,"line":8148},[41,32320,80],{"emptyLinePlaceholder":79},[41,32322,32323],{"class":43,"line":8153},[41,32324,32325],{"class":47},"    # 定义优化器\n",[41,32327,32328],{"class":43,"line":8159},[41,32329,32330],{"class":47},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[41,32332,32333],{"class":43,"line":8171},[41,32334,32335],{"class":47},"    # lr为学习率\n",[41,32337,32338,32341,32343,32346,32349,32351,32354],{"class":43,"line":8183},[41,32339,32340],{"class":275},"    optimizer",[41,32342,321],{"class":271},[41,32344,32345],{"class":275},"torch.optim.Adam(model.parameters(),",[41,32347,32348],{"class":5354},"lr",[41,32350,321],{"class":271},[41,32352,32353],{"class":58},"0.001",[41,32355,282],{"class":275},[41,32357,32358],{"class":43,"line":8195},[41,32359,80],{"emptyLinePlaceholder":79},[41,32361,32362],{"class":43,"line":9854},[41,32363,32364],{"class":47},"    # 定义损失函数使用交叉熵损失函数\n",[41,32366,32367,32370,32372],{"class":43,"line":9879},[41,32368,32369],{"class":275},"    criterion",[41,32371,321],{"class":271},[41,32373,32374],{"class":275},"nn.CrossEntropyLoss()\n",[41,32376,32377],{"class":43,"line":9902},[41,32378,80],{"emptyLinePlaceholder":79},[41,32380,32381],{"class":43,"line":9926},[41,32382,32383],{"class":47},"    # 将模型放到GPU中进行训练\n",[41,32385,32386,32388,32390],{"class":43,"line":9931},[41,32387,31392],{"class":275},[41,32389,321],{"class":271},[41,32391,32392],{"class":275},"model.to(device)\n",[41,32394,32395],{"class":43,"line":9936},[41,32396,32397],{"class":47},"    # 复制当前模型的参数\n",[41,32399,32400],{"class":43,"line":9941},[41,32401,32402],{"class":47},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[41,32404,32405],{"class":43,"line":9950},[41,32406,32407],{"class":47},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[41,32409,32410,32413,32415],{"class":43,"line":9955},[41,32411,32412],{"class":275},"    best_model_wts",[41,32414,321],{"class":271},[41,32416,32417],{"class":275},"copy.deepcopy(model.state_dict())\n",[41,32419,32420],{"class":43,"line":9961},[41,32421,80],{"emptyLinePlaceholder":79},[41,32423,32424],{"class":43,"line":9982},[41,32425,80],{"emptyLinePlaceholder":79},[41,32427,32428],{"class":43,"line":9988},[41,32429,32430],{"class":47},"    # 初始化参数\n",[41,32432,32433],{"class":43,"line":10002},[41,32434,32435],{"class":47},"    # 最高准确度\n",[41,32437,32438,32441,32443],{"class":43,"line":10008},[41,32439,32440],{"class":275},"    best_acc",[41,32442,321],{"class":271},[41,32444,32445],{"class":58},"0.0\n",[41,32447,32448],{"class":43,"line":10035},[41,32449,32450],{"class":47},"    # 训练集损失列表\n",[41,32452,32453,32456,32458],{"class":43,"line":10044},[41,32454,32455],{"class":275},"    train_loss_all",[41,32457,321],{"class":271},[41,32459,32460],{"class":275},"[]\n",[41,32462,32463],{"class":43,"line":10050},[41,32464,32465],{"class":47},"    # 验证集函数列表\n",[41,32467,32468,32471,32473],{"class":43,"line":10058},[41,32469,32470],{"class":275},"    val_loss_all",[41,32472,321],{"class":271},[41,32474,32460],{"class":275},[41,32476,32477],{"class":43,"line":10063},[41,32478,32479],{"class":47},"    # 训练集准确度列表\n",[41,32481,32482,32485,32487],{"class":43,"line":16742},[41,32483,32484],{"class":275},"    train_acc_all",[41,32486,321],{"class":271},[41,32488,32460],{"class":275},[41,32490,32491],{"class":43,"line":16748},[41,32492,32493],{"class":47},"    # 验证集准确度列表\n",[41,32495,32496,32499,32501],{"class":43,"line":16771},[41,32497,32498],{"class":275},"    val_acc_all",[41,32500,321],{"class":271},[41,32502,32460],{"class":275},[41,32504,32505],{"class":43,"line":16777},[41,32506,80],{"emptyLinePlaceholder":79},[41,32508,32509],{"class":43,"line":16800},[41,32510,32511],{"class":47},"    # 保存当前时间--->方便看每轮训练的时间\n",[41,32513,32514,32517,32519],{"class":43,"line":16814},[41,32515,32516],{"class":275},"    since",[41,32518,321],{"class":271},[41,32520,32521],{"class":275},"time.time()\n",[41,32523,32524],{"class":43,"line":16834},[41,32525,80],{"emptyLinePlaceholder":79},[41,32527,32528],{"class":43,"line":16840},[41,32529,80],{"emptyLinePlaceholder":79},[41,32531,32532],{"class":43,"line":16851},[41,32533,32534],{"class":47},"    # 准备工作完成--->开始训练模型\n",[41,32536,32537,32539,32542,32544,32547],{"class":43,"line":16874},[41,32538,3339],{"class":271},[41,32540,32541],{"class":275}," epoch ",[41,32543,26146],{"class":271},[41,32545,32546],{"class":58}," range",[41,32548,32549],{"class":275},"(num_epochs):\n",[41,32551,32552,32555,32557,32560,32563,32565,32567,32569,32572,32574,32576],{"class":43,"line":16896},[41,32553,32554],{"class":58},"        print",[41,32556,276],{"class":275},[41,32558,32559],{"class":378},"\"Epoch ",[41,32561,32562],{"class":58},"{}",[41,32564,857],{"class":378},[41,32566,32562],{"class":58},[41,32568,524],{"class":378},[41,32570,32571],{"class":275},".format(epoch,num_epochs",[41,32573,805],{"class":271},[41,32575,26],{"class":58},[41,32577,30600],{"class":275},[41,32579,32580,32582,32584,32587,32589,32591],{"class":43,"line":16901},[41,32581,32554],{"class":58},[41,32583,276],{"class":275},[41,32585,32586],{"class":378},"\"-\"",[41,32588,728],{"class":271},[41,32590,719],{"class":58},[41,32592,282],{"class":275},[41,32594,32595],{"class":43,"line":16907},[41,32596,80],{"emptyLinePlaceholder":79},[41,32598,32599],{"class":43,"line":16921},[41,32600,32601],{"class":47},"        # 初始化参数\n",[41,32603,32604],{"class":43,"line":16934},[41,32605,32606],{"class":47},"        # 训练集损失函数\n",[41,32608,32609,32612,32614],{"class":43,"line":16939},[41,32610,32611],{"class":275},"        train_loss",[41,32613,321],{"class":271},[41,32615,32445],{"class":58},[41,32617,32618],{"class":43,"line":16953},[41,32619,32620],{"class":47},"        # 训练集准确度\n",[41,32622,32623,32626,32628],{"class":43,"line":16958},[41,32624,32625],{"class":275},"        train_corrects",[41,32627,321],{"class":271},[41,32629,3223],{"class":58},[41,32631,32632],{"class":43,"line":16964},[41,32633,32634],{"class":47},"        # 验证集损失函数\n",[41,32636,32637,32640,32642],{"class":43,"line":16969},[41,32638,32639],{"class":275},"        val_loss",[41,32641,321],{"class":271},[41,32643,32445],{"class":58},[41,32645,32646],{"class":43,"line":16983},[41,32647,32648],{"class":47},"        # 验证集准确度\n",[41,32650,32651,32654,32656],{"class":43,"line":16988},[41,32652,32653],{"class":275},"        val_corrects",[41,32655,321],{"class":271},[41,32657,3223],{"class":58},[41,32659,32660],{"class":43,"line":16993},[41,32661,32662],{"class":47},"        # 训练集样本数量\n",[41,32664,32665,32668,32670],{"class":43,"line":17007},[41,32666,32667],{"class":275},"        train_num",[41,32669,321],{"class":271},[41,32671,3223],{"class":58},[41,32673,32674],{"class":43,"line":17019},[41,32675,32676],{"class":47},"        # 验证集样本数量\n",[41,32678,32679,32682,32684],{"class":43,"line":17024},[41,32680,32681],{"class":275},"        val_num",[41,32683,321],{"class":271},[41,32685,3223],{"class":58},[41,32687,32688],{"class":43,"line":17037},[41,32689,32690],{"class":47},"        # 将数据放到设备,并开始训练\n",[41,32692,32693,32695,32697,32699,32701],{"class":43,"line":17042},[41,32694,3541],{"class":271},[41,32696,31704],{"class":275},[41,32698,26146],{"class":271},[41,32700,31709],{"class":58},[41,32702,32703],{"class":275},"(train_dataloader):\n",[41,32705,32706],{"class":43,"line":17047},[41,32707,32708],{"class":47},"            # 将特征放入到训练设备\n",[41,32710,32711,32714,32716],{"class":43,"line":17052},[41,32712,32713],{"class":275},"            b_x",[41,32715,321],{"class":271},[41,32717,32718],{"class":275},"b_x.to(device)\n",[41,32720,32721],{"class":43,"line":17065},[41,32722,32723],{"class":47},"            # 将标签放入到训练设备当中\n",[41,32725,32726,32729,32731],{"class":43,"line":17070},[41,32727,32728],{"class":275},"            b_y",[41,32730,321],{"class":271},[41,32732,32733],{"class":275},"b_y.to(device)\n",[41,32735,32737],{"class":43,"line":32736},98,[41,32738,32739],{"class":47},"            # 设置模型为训练模式\n",[41,32741,32743],{"class":43,"line":32742},99,[41,32744,32745],{"class":275},"            model.train()\n",[41,32747,32749],{"class":43,"line":32748},100,[41,32750,32751],{"class":47},"            # 将数据放到模型当中,开始前向传播\n",[41,32753,32755],{"class":43,"line":32754},101,[41,32756,32757],{"class":47},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[41,32759,32761,32764,32766],{"class":43,"line":32760},102,[41,32762,32763],{"class":275},"            output",[41,32765,321],{"class":271},[41,32767,32768],{"class":275},"model(b_x)\n",[41,32770,32772],{"class":43,"line":32771},103,[41,32773,32774],{"class":47},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[41,32776,32778,32781,32783,32786,32789,32791,32793],{"class":43,"line":32777},104,[41,32779,32780],{"class":275},"            pre_lab",[41,32782,321],{"class":271},[41,32784,32785],{"class":275},"torch.argmax(output,",[41,32787,32788],{"class":5354},"dim",[41,32790,321],{"class":271},[41,32792,26],{"class":58},[41,32794,282],{"class":275},[41,32796,32798],{"class":43,"line":32797},105,[41,32799,32800],{"class":47},"            # 计算每一个batch的损失函数\n",[41,32802,32804,32807,32809],{"class":43,"line":32803},106,[41,32805,32806],{"class":275},"            loss",[41,32808,321],{"class":271},[41,32810,32811],{"class":275},"criterion(output,b_y)\n",[41,32813,32815],{"class":43,"line":32814},107,[41,32816,32817],{"class":47},"            # 将梯度初始化为0\n",[41,32819,32821],{"class":43,"line":32820},108,[41,32822,32823],{"class":275},"            optimizer.zero_grad()\n",[41,32825,32827],{"class":43,"line":32826},109,[41,32828,32829],{"class":47},"            # 梯度置为0后再进行反向传播\n",[41,32831,32833],{"class":43,"line":32832},110,[41,32834,32835],{"class":275},"            loss.backward()\n",[41,32837,32839],{"class":43,"line":32838},111,[41,32840,32841],{"class":47},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[41,32843,32845],{"class":43,"line":32844},112,[41,32846,32847],{"class":275},"            optimizer.step()\n",[41,32849,32851],{"class":43,"line":32850},113,[41,32852,32853],{"class":47},"            # loss.item()指的是batch的平均损失\n",[41,32855,32857,32860,32862,32865,32867,32870,32872],{"class":43,"line":32856},114,[41,32858,32859],{"class":275},"            train_loss",[41,32861,9615],{"class":271},[41,32863,32864],{"class":275},"loss.item()",[41,32866,728],{"class":271},[41,32868,32869],{"class":275},"b_x.size(",[41,32871,465],{"class":58},[41,32873,282],{"class":275},[41,32875,32877],{"class":43,"line":32876},115,[41,32878,32879],{"class":47},"            # 计算每个批次中正确预测的数量\n",[41,32881,32883,32886,32888,32891,32893],{"class":43,"line":32882},116,[41,32884,32885],{"class":275},"            train_corrects",[41,32887,9615],{"class":271},[41,32889,32890],{"class":275},"torch.sum(pre_lab",[41,32892,3087],{"class":271},[41,32894,32895],{"class":275},"b_y.data)\n",[41,32897,32899],{"class":43,"line":32898},117,[41,32900,32901],{"class":47},"            # 计算目前为止一共处理了多少样本\n",[41,32903,32905,32908,32910,32912,32914],{"class":43,"line":32904},118,[41,32906,32907],{"class":275},"            train_num",[41,32909,9615],{"class":271},[41,32911,32869],{"class":275},[41,32913,465],{"class":58},[41,32915,282],{"class":275},[41,32917,32919],{"class":43,"line":32918},119,[41,32920,32921],{"class":47},"        # 验证数据\n",[41,32923,32925,32927,32930,32932,32934],{"class":43,"line":32924},120,[41,32926,3541],{"class":271},[41,32928,32929],{"class":275}," step ,(b_x,b_y) ",[41,32931,26146],{"class":271},[41,32933,31709],{"class":58},[41,32935,32936],{"class":275},"(val_dataloader):\n",[41,32938,32940],{"class":43,"line":32939},121,[41,32941,32942],{"class":47},"            # 将特征放到验证设备当中\n",[41,32944,32946,32948,32950],{"class":43,"line":32945},122,[41,32947,32713],{"class":275},[41,32949,321],{"class":271},[41,32951,32718],{"class":275},[41,32953,32955],{"class":43,"line":32954},123,[41,32956,32957],{"class":47},"            # 将标签放到放到训练设备当中\n",[41,32959,32961,32963,32965],{"class":43,"line":32960},124,[41,32962,32728],{"class":275},[41,32964,321],{"class":271},[41,32966,32733],{"class":275},[41,32968,32970],{"class":43,"line":32969},125,[41,32971,32972],{"class":47},"            # 开启验证模式，设置模型为评估模式\n",[41,32974,32976],{"class":43,"line":32975},126,[41,32977,32978],{"class":275},"            model.eval()\n",[41,32980,32982,32985],{"class":43,"line":32981},127,[41,32983,32984],{"class":271},"            with",[41,32986,32987],{"class":275}," torch.no_grad():\n",[41,32989,32991],{"class":43,"line":32990},128,[41,32992,32993],{"class":47},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[41,32995,32997,33000,33002],{"class":43,"line":32996},129,[41,32998,32999],{"class":275},"                output ",[41,33001,321],{"class":271},[41,33003,33004],{"class":275}," model(b_x)\n",[41,33006,33008],{"class":43,"line":33007},130,[41,33009,33010],{"class":47},"                # 查找每一行中最大值对应的下标\n",[41,33012,33014,33017,33019,33022,33024,33026,33028],{"class":43,"line":33013},131,[41,33015,33016],{"class":275},"                pre_lab ",[41,33018,321],{"class":271},[41,33020,33021],{"class":275}," torch.argmax(output, ",[41,33023,32788],{"class":5354},[41,33025,321],{"class":271},[41,33027,26],{"class":58},[41,33029,282],{"class":275},[41,33031,33033],{"class":43,"line":33032},132,[41,33034,33035],{"class":47},"                # 计算验证集上的当前 batch 损失\n",[41,33037,33039,33042,33044],{"class":43,"line":33038},133,[41,33040,33041],{"class":275},"                val_batch_loss ",[41,33043,321],{"class":271},[41,33045,33046],{"class":275}," criterion(output, b_y)\n",[41,33048,33050],{"class":43,"line":33049},134,[41,33051,33052],{"class":47},"                # 对损失函数进行累加（按样本数加权）\n",[41,33054,33056,33059,33061,33064,33066,33069,33071],{"class":43,"line":33055},135,[41,33057,33058],{"class":275},"                val_loss ",[41,33060,9615],{"class":271},[41,33062,33063],{"class":275}," val_batch_loss.item() ",[41,33065,728],{"class":271},[41,33067,33068],{"class":275}," b_x.size(",[41,33070,465],{"class":58},[41,33072,282],{"class":275},[41,33074,33076,33079,33081,33084,33086],{"class":43,"line":33075},136,[41,33077,33078],{"class":275},"                val_corrects ",[41,33080,9615],{"class":271},[41,33082,33083],{"class":275}," torch.sum(pre_lab ",[41,33085,3087],{"class":271},[41,33087,33088],{"class":275}," b_y.data)\n",[41,33090,33092],{"class":43,"line":33091},137,[41,33093,33094],{"class":47},"                # 当前用于验证的样本数量\n",[41,33096,33098,33101,33103,33105,33107],{"class":43,"line":33097},138,[41,33099,33100],{"class":275},"            val_num ",[41,33102,9615],{"class":271},[41,33104,33068],{"class":275},[41,33106,465],{"class":58},[41,33108,282],{"class":275},[41,33110,33112],{"class":43,"line":33111},139,[41,33113,33114],{"class":47},"        # 计算并保存每一次迭代的loss值和准确率\n",[41,33116,33118],{"class":43,"line":33117},140,[41,33119,33120],{"class":47},"        # 计算并保存训练集的loss值\n",[41,33122,33124,33127,33129],{"class":43,"line":33123},141,[41,33125,33126],{"class":275},"        train_loss_all.append(train_loss",[41,33128,857],{"class":271},[41,33130,33131],{"class":275},"train_num)\n",[41,33133,33135],{"class":43,"line":33134},142,[41,33136,33137],{"class":47},"        # 取双精度\n",[41,33139,33141],{"class":43,"line":33140},143,[41,33142,33143],{"class":47},"        # 计算并保存训练集的准确率\n",[41,33145,33147,33150,33152],{"class":43,"line":33146},144,[41,33148,33149],{"class":275},"        train_acc_all.append(train_corrects.double().item()",[41,33151,857],{"class":271},[41,33153,33131],{"class":275},[41,33155,33157],{"class":43,"line":33156},145,[41,33158,33159],{"class":47},"        # 计算并保存验证集的loss值\n",[41,33161,33163,33166,33168],{"class":43,"line":33162},146,[41,33164,33165],{"class":275},"        val_loss_all.append(val_loss",[41,33167,857],{"class":271},[41,33169,33170],{"class":275},"val_num)\n",[41,33172,33174],{"class":43,"line":33173},147,[41,33175,33176],{"class":47},"        # 计算并保存验证集的准确率\n",[41,33178,33180,33183,33185],{"class":43,"line":33179},148,[41,33181,33182],{"class":275},"        val_acc_all.append(val_corrects.double().item()",[41,33184,857],{"class":271},[41,33186,33170],{"class":275},[41,33188,33190],{"class":43,"line":33189},149,[41,33191,80],{"emptyLinePlaceholder":79},[41,33193,33195],{"class":43,"line":33194},150,[41,33196,33197],{"class":47},"        # 打印训练一轮的loss值和准确率\n",[41,33199,33201,33203,33205,33207,33209,33212,33214,33217,33219,33222,33224,33226,33228,33230,33233,33235,33237,33240,33242,33244],{"class":43,"line":33200},151,[41,33202,32554],{"class":58},[41,33204,276],{"class":275},[41,33206,3730],{"class":378},[41,33208,32562],{"class":58},[41,33210,33211],{"class":378},"train loss:",[41,33213,1169],{"class":58},[41,33215,33216],{"class":271},":.4f",[41,33218,1219],{"class":58},[41,33220,33221],{"class":378}," train acc:",[41,33223,1169],{"class":58},[41,33225,33216],{"class":271},[41,33227,1219],{"class":58},[41,33229,3730],{"class":378},[41,33231,33232],{"class":275},".format(epoch,train_loss_all[",[41,33234,805],{"class":271},[41,33236,26],{"class":58},[41,33238,33239],{"class":275},"],train_acc_all[",[41,33241,805],{"class":271},[41,33243,26],{"class":58},[41,33245,33246],{"class":275},"]))\n",[41,33248,33250,33252,33254,33256,33258,33261,33263,33265,33267,33270,33272,33274,33276,33278,33281,33283,33285,33288,33290,33292],{"class":43,"line":33249},152,[41,33251,32554],{"class":58},[41,33253,276],{"class":275},[41,33255,3730],{"class":378},[41,33257,32562],{"class":58},[41,33259,33260],{"class":378},"val loss:",[41,33262,1169],{"class":58},[41,33264,33216],{"class":271},[41,33266,1219],{"class":58},[41,33268,33269],{"class":378}," val acc:",[41,33271,1169],{"class":58},[41,33273,33216],{"class":271},[41,33275,1219],{"class":58},[41,33277,3730],{"class":378},[41,33279,33280],{"class":275},".format(epoch,val_loss_all[",[41,33282,805],{"class":271},[41,33284,26],{"class":58},[41,33286,33287],{"class":275},"],val_acc_all[",[41,33289,805],{"class":271},[41,33291,26],{"class":58},[41,33293,33246],{"class":275},[41,33295,33297],{"class":43,"line":33296},153,[41,33298,80],{"emptyLinePlaceholder":79},[41,33300,33302],{"class":43,"line":33301},154,[41,33303,33304],{"class":47},"        # 判断准确度--->保存最优模型\n",[41,33306,33308,33310,33313,33315,33317,33319,33321],{"class":43,"line":33307},155,[41,33309,2635],{"class":271},[41,33311,33312],{"class":275}," val_acc_all[",[41,33314,805],{"class":271},[41,33316,26],{"class":58},[41,33318,1213],{"class":275},[41,33320,1233],{"class":271},[41,33322,33323],{"class":275},"best_acc:\n",[41,33325,33327],{"class":43,"line":33326},156,[41,33328,33329],{"class":47},"            # 保存当前模型准确度\n",[41,33331,33333,33336,33338,33340,33343,33345,33347],{"class":43,"line":33332},157,[41,33334,33335],{"class":275},"            best_acc:",[41,33337,315],{"class":58},[41,33339,321],{"class":271},[41,33341,33342],{"class":275},"val_acc_all[",[41,33344,805],{"class":271},[41,33346,26],{"class":58},[41,33348,33349],{"class":275},"]\n",[41,33351,33353],{"class":43,"line":33352},158,[41,33354,33355],{"class":47},"            # 保存当前的准确度\n",[41,33357,33359],{"class":43,"line":33358},159,[41,33360,33361],{"class":47},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[41,33363,33365,33368,33370],{"class":43,"line":33364},160,[41,33366,33367],{"class":275},"            best_model_wts",[41,33369,321],{"class":271},[41,33371,32417],{"class":275},[41,33373,33375],{"class":43,"line":33374},161,[41,33376,80],{"emptyLinePlaceholder":79},[41,33378,33380],{"class":43,"line":33379},162,[41,33381,33382],{"class":47},"        # 计算耗时\n",[41,33384,33386,33389,33391,33394,33396],{"class":43,"line":33385},163,[41,33387,33388],{"class":275},"        time_use",[41,33390,321],{"class":271},[41,33392,33393],{"class":275},"time.time()",[41,33395,805],{"class":271},[41,33397,33398],{"class":275},"since\n",[41,33400,33402,33404,33406,33409,33411,33414,33416,33418,33420,33422,33424,33427,33430,33433,33435,33438,33440,33442],{"class":43,"line":33401},164,[41,33403,32554],{"class":58},[41,33405,276],{"class":275},[41,33407,33408],{"class":378},"'训练和验证耗费的时间",[41,33410,1169],{"class":58},[41,33412,33413],{"class":271},":.0f",[41,33415,1219],{"class":58},[41,33417,817],{"class":378},[41,33419,1169],{"class":58},[41,33421,33413],{"class":271},[41,33423,1219],{"class":58},[41,33425,33426],{"class":378},"s'",[41,33428,33429],{"class":275},".format(time_use",[41,33431,33432],{"class":271},"\u002F\u002F",[41,33434,1180],{"class":58},[41,33436,33437],{"class":275},",time_use",[41,33439,601],{"class":271},[41,33441,1180],{"class":58},[41,33443,30600],{"class":275},[41,33445,33447],{"class":43,"line":33446},165,[41,33448,33449],{"class":47},"    # 选择最优参数\n",[41,33451,33453],{"class":43,"line":33452},166,[41,33454,33455],{"class":47},"    # 加载最高准确率下的模型参数\n",[41,33457,33459],{"class":43,"line":33458},167,[41,33460,33461],{"class":47},"    # model.load_state_dict(best_model_wts)\n",[41,33463,33465,33468,33471],{"class":43,"line":33464},168,[41,33466,33467],{"class":275},"    torch.save(model.state_dict(best_model_wts), ",[41,33469,33470],{"class":378},"'.\u002Fbest_model.pth'",[41,33472,282],{"class":275},[41,33474,33476],{"class":43,"line":33475},169,[41,33477,33478],{"class":47},"    # 或者写成\n",[41,33480,33482],{"class":43,"line":33481},170,[41,33483,33484],{"class":47},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[41,33486,33488],{"class":43,"line":33487},171,[41,33489,33490],{"class":47},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[41,33492,33494,33497,33499,33502,33505,33507],{"class":43,"line":33493},172,[41,33495,33496],{"class":275},"    train_process",[41,33498,321],{"class":271},[41,33500,33501],{"class":275},"pd.DataFrame(",[41,33503,33504],{"class":5354},"data",[41,33506,321],{"class":271},[41,33508,1687],{"class":275},[41,33510,33512,33515,33517,33520],{"class":43,"line":33511},173,[41,33513,33514],{"class":378},"        \"epoch\"",[41,33516,1132],{"class":275},[41,33518,33519],{"class":58},"range",[41,33521,33522],{"class":275},"(num_epochs),\n",[41,33524,33526,33529],{"class":43,"line":33525},174,[41,33527,33528],{"class":378},"        \"train_loss_all\"",[41,33530,33531],{"class":275},":train_loss_all,\n",[41,33533,33535,33538],{"class":43,"line":33534},175,[41,33536,33537],{"class":378},"        \"val_loss_all\"",[41,33539,33540],{"class":275},":val_loss_all,\n",[41,33542,33544,33547],{"class":43,"line":33543},176,[41,33545,33546],{"class":378},"        \"train_acc_all\"",[41,33548,33549],{"class":275},":train_acc_all,\n",[41,33551,33553,33556],{"class":43,"line":33552},177,[41,33554,33555],{"class":378},"        \"val_acc_all\"",[41,33557,33558],{"class":275},":val_acc_all\n",[41,33560,33562],{"class":43,"line":33561},178,[41,33563,33564],{"class":275},"    })\n",[41,33566,33568],{"class":43,"line":33567},179,[41,33569,33570],{"class":47},"    # 返回训练保存的过程\n",[41,33572,33574,33576],{"class":43,"line":33573},180,[41,33575,4228],{"class":271},[41,33577,33578],{"class":275}," train_process\n",[41,33580,33582],{"class":43,"line":33581},181,[41,33583,80],{"emptyLinePlaceholder":79},[41,33585,33587],{"class":43,"line":33586},182,[41,33588,33589],{"class":47},"# 将loss值和精度按照图片的形式展示出来\n",[41,33591,33593,33595,33598],{"class":43,"line":33592},183,[41,33594,32050],{"class":271},[41,33596,33597],{"class":54}," matplot_acc_loss",[41,33599,33600],{"class":275},"(train_process):\n",[41,33602,33604],{"class":43,"line":33603},184,[41,33605,33606],{"class":47},"    # 设置图的大小\n",[41,33608,33610,33613,33615,33617,33619,33621,33623,33625],{"class":43,"line":33609},185,[41,33611,33612],{"class":275},"    plt.figure(",[41,33614,31796],{"class":5354},[41,33616,321],{"class":271},[41,33618,276],{"class":275},[41,33620,771],{"class":58},[41,33622,651],{"class":275},[41,33624,566],{"class":58},[41,33626,30600],{"class":275},[41,33628,33630],{"class":43,"line":33629},186,[41,33631,33632],{"class":47},"    # 设置图中有几张图\n",[41,33634,33636],{"class":43,"line":33635},187,[41,33637,33638],{"class":47},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[41,33640,33642],{"class":43,"line":33641},188,[41,33643,33644],{"class":47},"    # ①loss图\n",[41,33646,33648,33650,33652,33654,33656,33658,33660],{"class":43,"line":33647},189,[41,33649,31830],{"class":275},[41,33651,26],{"class":58},[41,33653,651],{"class":275},[41,33655,351],{"class":58},[41,33657,651],{"class":275},[41,33659,26],{"class":58},[41,33661,282],{"class":275},[41,33663,33665],{"class":43,"line":33664},190,[41,33666,33667],{"class":47},"    # 补充:\n",[41,33669,33671],{"class":43,"line":33670},191,[41,33672,33673],{"class":47},"    # plt.subplot(nrows, ncols, index)\n",[41,33675,33677],{"class":43,"line":33676},192,[41,33678,33679],{"class":47},"    # nrows：行数\n",[41,33681,33683],{"class":43,"line":33682},193,[41,33684,33685],{"class":47},"    # ncols：列数\n",[41,33687,33689],{"class":43,"line":33688},194,[41,33690,33691],{"class":47},"    # index：目前选中第几个子图（从1开始）\n",[41,33693,33695,33698,33701,33704,33707,33709,33712,33714,33717],{"class":43,"line":33694},195,[41,33696,33697],{"class":275},"    plt.plot(train_process[",[41,33699,33700],{"class":378},"\"epoch\"",[41,33702,33703],{"class":275},"],train_process.train_loss_all,",[41,33705,33706],{"class":378},"'ro-'",[41,33708,651],{"class":275},[41,33710,33711],{"class":5354},"label",[41,33713,321],{"class":271},[41,33715,33716],{"class":378},"'train loss'",[41,33718,282],{"class":275},[41,33720,33722,33724,33726,33729,33732,33734,33736,33738,33741],{"class":43,"line":33721},196,[41,33723,33697],{"class":275},[41,33725,33700],{"class":378},[41,33727,33728],{"class":275},"],train_process.val_loss_all,",[41,33730,33731],{"class":378},"'bs--'",[41,33733,651],{"class":275},[41,33735,33711],{"class":5354},[41,33737,321],{"class":271},[41,33739,33740],{"class":378},"'val loss'",[41,33742,282],{"class":275},[41,33744,33746],{"class":43,"line":33745},197,[41,33747,33748],{"class":47},"    # 添加一个图例\n",[41,33750,33752],{"class":43,"line":33751},198,[41,33753,33754],{"class":275},"    plt.legend()\n",[41,33756,33758],{"class":43,"line":33757},199,[41,33759,33760],{"class":47},"    # 给轴添加标签\n",[41,33762,33764,33767,33770],{"class":43,"line":33763},200,[41,33765,33766],{"class":275},"    plt.xlabel(",[41,33768,33769],{"class":378},"'epoch'",[41,33771,282],{"class":275},[41,33773,33775,33778,33781],{"class":43,"line":33774},201,[41,33776,33777],{"class":275},"    plt.ylabel(",[41,33779,33780],{"class":378},"'loss'",[41,33782,282],{"class":275},[41,33784,33786],{"class":43,"line":33785},202,[41,33787,33788],{"class":47},"    # ②准确度图\n",[41,33790,33792,33794,33796,33798,33800,33802,33804],{"class":43,"line":33791},203,[41,33793,31830],{"class":275},[41,33795,26],{"class":58},[41,33797,651],{"class":275},[41,33799,351],{"class":58},[41,33801,651],{"class":275},[41,33803,351],{"class":58},[41,33805,282],{"class":275},[41,33807,33809,33811,33813,33816,33818,33820,33822,33824,33827],{"class":43,"line":33808},204,[41,33810,33697],{"class":275},[41,33812,33700],{"class":378},[41,33814,33815],{"class":275},"],train_process.train_acc_all,",[41,33817,33706],{"class":378},[41,33819,651],{"class":275},[41,33821,33711],{"class":5354},[41,33823,321],{"class":271},[41,33825,33826],{"class":378},"'train acc'",[41,33828,282],{"class":275},[41,33830,33832,33834,33836,33839,33841,33843,33845,33847,33850],{"class":43,"line":33831},205,[41,33833,33697],{"class":275},[41,33835,33700],{"class":378},[41,33837,33838],{"class":275},"],train_process.val_acc_all,",[41,33840,33731],{"class":378},[41,33842,651],{"class":275},[41,33844,33711],{"class":5354},[41,33846,321],{"class":271},[41,33848,33849],{"class":378},"'val acc'",[41,33851,282],{"class":275},[41,33853,33855],{"class":43,"line":33854},206,[41,33856,33857],{"class":47},"    # 添加图例\n",[41,33859,33861],{"class":43,"line":33860},207,[41,33862,33754],{"class":275},[41,33864,33866,33868,33870],{"class":43,"line":33865},208,[41,33867,33766],{"class":275},[41,33869,33700],{"class":378},[41,33871,282],{"class":275},[41,33873,33875,33877,33880],{"class":43,"line":33874},209,[41,33876,33777],{"class":275},[41,33878,33879],{"class":378},"\"acc\"",[41,33881,282],{"class":275},[41,33883,33885],{"class":43,"line":33884},210,[41,33886,33887],{"class":275},"    plt.show()\n",[41,33889,33891],{"class":43,"line":33890},211,[41,33892,80],{"emptyLinePlaceholder":79},[41,33894,33896],{"class":43,"line":33895},212,[41,33897,33898],{"class":47},"# 正式开始训练:\n",[41,33900,33902,33904,33906,33908,33910],{"class":43,"line":33901},213,[41,33903,1672],{"class":271},[41,33905,31323],{"class":58},[41,33907,3087],{"class":271},[41,33909,31328],{"class":378},[41,33911,3877],{"class":275},[41,33913,33915],{"class":43,"line":33914},214,[41,33916,33917],{"class":47},"    # 将模型实例化\n",[41,33919,33921,33924,33926],{"class":43,"line":33920},215,[41,33922,33923],{"class":275},"    LeNet",[41,33925,321],{"class":271},[41,33927,33928],{"class":275},"LeNet()\n",[41,33930,33932,33935,33937],{"class":43,"line":33931},216,[41,33933,33934],{"class":275},"    train_dataloader,val_dataloader",[41,33936,321],{"class":271},[41,33938,33939],{"class":275},"train_val_data_process()\n",[41,33941,33943,33945,33947,33950,33953,33955,33957],{"class":43,"line":33942},217,[41,33944,33496],{"class":275},[41,33946,321],{"class":271},[41,33948,33949],{"class":275},"train_model_process(LeNet,train_dataloader,val_dataloader,",[41,33951,33952],{"class":5354},"num_epochs",[41,33954,321],{"class":271},[41,33956,973],{"class":58},[41,33958,282],{"class":275},[41,33960,33962],{"class":43,"line":33961},218,[41,33963,33964],{"class":275},"    matplot_acc_loss(train_process)\n",[20,33966,33967],{},"画图的补充点学习：",[20,33969,33970],{},[1603,33971],{"alt":37,"src":33972},"\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",[224,33974,33975],{"start":62},[227,33976,33977],{},"测试",[32,33979,33981],{"className":30481,"code":33980,"language":30483,"meta":37,"style":37},"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",[24,33982,33983,33989,33999,34011,34021,34026,34036,34046,34050,34055,34064,34081,34093,34110,34121,34137,34142,34153,34164,34175,34182,34186,34191,34201,34206,34223,34231,34235,34240,34249,34258,34262,34267,34272,34277,34284,34289,34301,34311,34321,34326,34330,34335,34344,34349,34365,34370,34375,34380,34394,34399,34413,34417,34422,34437,34442,34454,34458,34463,34475,34480,34488,34493,34498,34508,34513,34522,34527,34532,34536,34541,34546,34562,34570,34575,34580,34639,34645,34650,34661,34669,34677,34681,34686,34690,34695,34703,34708,34724,34729,34739,34749],{"__ignoreMap":37},[41,33984,33985,33987],{"class":43,"line":44},[41,33986,30495],{"class":271},[41,33988,30498],{"class":275},[41,33990,33991,33993,33995,33997],{"class":43,"line":51},[41,33992,30495],{"class":271},[41,33994,31518],{"class":275},[41,33996,31486],{"class":271},[41,33998,31523],{"class":275},[41,34000,34001,34003,34006,34008],{"class":43,"line":62},[41,34002,30840],{"class":271},[41,34004,34005],{"class":275}," jupyter_client.consoleapp ",[41,34007,30495],{"class":271},[41,34009,34010],{"class":275}," classes\n",[41,34012,34013,34015,34017,34019],{"class":43,"line":70},[41,34014,30840],{"class":271},[41,34016,31501],{"class":275},[41,34018,30495],{"class":271},[41,34020,31506],{"class":275},[41,34022,34023],{"class":43,"line":76},[41,34024,34025],{"class":47},"# 导入数据集\n",[41,34027,34028,34030,34032,34034],{"class":43,"line":83},[41,34029,30840],{"class":271},[41,34031,31471],{"class":275},[41,34033,30495],{"class":271},[41,34035,31476],{"class":275},[41,34037,34038,34040,34042,34044],{"class":43,"line":89},[41,34039,30840],{"class":271},[41,34041,32017],{"class":275},[41,34043,30495],{"class":271},[41,34045,32022],{"class":275},[41,34047,34048],{"class":43,"line":96},[41,34049,80],{"emptyLinePlaceholder":79},[41,34051,34052],{"class":43,"line":104},[41,34053,34054],{"class":47},"# 测试数据处理\n",[41,34056,34057,34059,34062],{"class":43,"line":176},[41,34058,32050],{"class":271},[41,34060,34061],{"class":54}," test_data_process",[41,34063,32056],{"class":275},[41,34065,34066,34069,34071,34073,34075,34077,34079],{"class":43,"line":184},[41,34067,34068],{"class":275},"    test_data",[41,34070,321],{"class":271},[41,34072,31558],{"class":275},[41,34074,31561],{"class":5354},[41,34076,321],{"class":271},[41,34078,31566],{"class":378},[41,34080,31569],{"class":275},[41,34082,34083,34086,34088,34091],{"class":43,"line":1757},[41,34084,34085],{"class":5354},"                           train",[41,34087,321],{"class":271},[41,34089,34090],{"class":58},"False",[41,34092,31569],{"class":275},[41,34094,34095,34098,34100,34102,34104,34106,34108],{"class":43,"line":1763},[41,34096,34097],{"class":5354},"                           transform",[41,34099,321],{"class":271},[41,34101,31596],{"class":275},[41,34103,31599],{"class":5354},[41,34105,321],{"class":271},[41,34107,1174],{"class":58},[41,34109,31607],{"class":275},[41,34111,34112,34115,34117,34119],{"class":43,"line":1768},[41,34113,34114],{"class":5354},"                           download",[41,34116,321],{"class":271},[41,34118,31579],{"class":58},[41,34120,282],{"class":275},[41,34122,34123,34126,34128,34130,34132,34134],{"class":43,"line":1782},[41,34124,34125],{"class":275},"    test_dataloader",[41,34127,321],{"class":271},[41,34129,31637],{"class":275},[41,34131,31640],{"class":5354},[41,34133,321],{"class":271},[41,34135,34136],{"class":275},"test_data,\n",[41,34138,34139],{"class":43,"line":1787},[41,34140,34141],{"class":47},"                                    # 这里是一张一张进行测试\n",[41,34143,34144,34147,34149,34151],{"class":43,"line":1793},[41,34145,34146],{"class":5354},"                                    batch_size",[41,34148,321],{"class":271},[41,34150,26],{"class":58},[41,34152,31569],{"class":275},[41,34154,34155,34158,34160,34162],{"class":43,"line":1814},[41,34156,34157],{"class":5354},"                                    shuffle",[41,34159,321],{"class":271},[41,34161,31579],{"class":58},[41,34163,31569],{"class":275},[41,34165,34166,34169,34171,34173],{"class":43,"line":1819},[41,34167,34168],{"class":5354},"                                    num_workers",[41,34170,321],{"class":271},[41,34172,465],{"class":58},[41,34174,282],{"class":275},[41,34176,34177,34179],{"class":43,"line":1833},[41,34178,4228],{"class":271},[41,34180,34181],{"class":275}," test_dataloader\n",[41,34183,34184],{"class":43,"line":1838},[41,34185,80],{"emptyLinePlaceholder":79},[41,34187,34188],{"class":43,"line":1867},[41,34189,34190],{"class":47},"# 定义模型测试函数\n",[41,34192,34193,34195,34198],{"class":43,"line":1872},[41,34194,32050],{"class":271},[41,34196,34197],{"class":54}," test_model_process",[41,34199,34200],{"class":275},"(model,test_dataloader):\n",[41,34202,34203],{"class":43,"line":1889},[41,34204,34205],{"class":47},"    # 将模型放到设备当中，先进行判断\n",[41,34207,34208,34210,34212,34214,34216,34218,34220],{"class":43,"line":1894},[41,34209,31340],{"class":275},[41,34211,321],{"class":271},[41,34213,31347],{"class":378},[41,34215,1844],{"class":271},[41,34217,31352],{"class":275},[41,34219,1841],{"class":271},[41,34221,34222],{"class":378}," \"cpu\"\n",[41,34224,34225,34227,34229],{"class":43,"line":1899},[41,34226,31392],{"class":275},[41,34228,321],{"class":271},[41,34230,32392],{"class":275},[41,34232,34233],{"class":43,"line":1904},[41,34234,80],{"emptyLinePlaceholder":79},[41,34236,34237],{"class":43,"line":1918},[41,34238,34239],{"class":47},"    # 设置初始化参数\n",[41,34241,34242,34245,34247],{"class":43,"line":1923},[41,34243,34244],{"class":275},"    test_corrects",[41,34246,321],{"class":271},[41,34248,32445],{"class":58},[41,34250,34251,34254,34256],{"class":43,"line":2715},[41,34252,34253],{"class":275},"    test_num",[41,34255,321],{"class":271},[41,34257,3223],{"class":58},[41,34259,34260],{"class":43,"line":2729},[41,34261,80],{"emptyLinePlaceholder":79},[41,34263,34264],{"class":43,"line":2737},[41,34265,34266],{"class":47},"    # 进行模型测试\n",[41,34268,34269],{"class":43,"line":2742},[41,34270,34271],{"class":47},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[41,34273,34274],{"class":43,"line":2748},[41,34275,34276],{"class":47},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[41,34278,34279,34282],{"class":43,"line":2754},[41,34280,34281],{"class":271},"    with",[41,34283,32987],{"class":275},[41,34285,34286],{"class":43,"line":2759},[41,34287,34288],{"class":47},"        # 从数据中进行\n",[41,34290,34291,34293,34296,34298],{"class":43,"line":8086},[41,34292,3541],{"class":271},[41,34294,34295],{"class":275}," test_data_x,test_data_y ",[41,34297,26146],{"class":271},[41,34299,34300],{"class":275}," test_dataloader:\n",[41,34302,34303,34306,34308],{"class":43,"line":8110},[41,34304,34305],{"class":275},"            test_data_x",[41,34307,321],{"class":271},[41,34309,34310],{"class":275},"test_data_x.to(device)\n",[41,34312,34313,34316,34318],{"class":43,"line":8115},[41,34314,34315],{"class":275},"            test_data_y",[41,34317,321],{"class":271},[41,34319,34320],{"class":275},"test_data_y.to(device)\n",[41,34322,34323],{"class":43,"line":8121},[41,34324,34325],{"class":47},"            # 设置为验证模式\n",[41,34327,34328],{"class":43,"line":8148},[41,34329,32978],{"class":275},[41,34331,34332],{"class":43,"line":8153},[41,34333,34334],{"class":47},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[41,34336,34337,34339,34341],{"class":43,"line":8159},[41,34338,32763],{"class":275},[41,34340,321],{"class":271},[41,34342,34343],{"class":275},"model(test_data_x)\n",[41,34345,34346],{"class":43,"line":8171},[41,34347,34348],{"class":47},"            # 查找每一行中最大值对应的下标\n",[41,34350,34351,34353,34355,34357,34359,34361,34363],{"class":43,"line":8183},[41,34352,32780],{"class":275},[41,34354,321],{"class":271},[41,34356,32785],{"class":275},[41,34358,32788],{"class":5354},[41,34360,321],{"class":271},[41,34362,26],{"class":58},[41,34364,282],{"class":275},[41,34366,34367],{"class":43,"line":8195},[41,34368,34369],{"class":47},"            # 计算正确率\n",[41,34371,34372],{"class":43,"line":9854},[41,34373,34374],{"class":47},"            # .data表示是一个不带梯度信息的tensor\n",[41,34376,34377],{"class":43,"line":9879},[41,34378,34379],{"class":47},"            # 如果预测正确，则准确度test_corrects加1\n",[41,34381,34382,34385,34387,34389,34391],{"class":43,"line":9902},[41,34383,34384],{"class":275},"            test_corrects",[41,34386,9615],{"class":271},[41,34388,32890],{"class":275},[41,34390,3087],{"class":271},[41,34392,34393],{"class":275},"test_data_y.data)\n",[41,34395,34396],{"class":43,"line":9926},[41,34397,34398],{"class":47},"            # 将所有的测试样本进行累计\n",[41,34400,34401,34404,34406,34409,34411],{"class":43,"line":9931},[41,34402,34403],{"class":275},"            test_num",[41,34405,9615],{"class":271},[41,34407,34408],{"class":275},"test_data_x.size(",[41,34410,465],{"class":58},[41,34412,282],{"class":275},[41,34414,34415],{"class":43,"line":9936},[41,34416,80],{"emptyLinePlaceholder":79},[41,34418,34419],{"class":43,"line":9941},[41,34420,34421],{"class":47},"        # 计算准确度\n",[41,34423,34424,34427,34429,34432,34434],{"class":43,"line":9950},[41,34425,34426],{"class":275},"        test_acc",[41,34428,321],{"class":271},[41,34430,34431],{"class":275},"test_corrects.double().item()",[41,34433,857],{"class":271},[41,34435,34436],{"class":275},"test_num\n",[41,34438,34439],{"class":43,"line":9955},[41,34440,34441],{"class":47},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[41,34443,34444,34446,34448,34451],{"class":43,"line":9961},[41,34445,32554],{"class":58},[41,34447,276],{"class":275},[41,34449,34450],{"class":378},"\"测试的准确率：\"",[41,34452,34453],{"class":275},",test_acc)\n",[41,34455,34456],{"class":43,"line":9982},[41,34457,80],{"emptyLinePlaceholder":79},[41,34459,34460],{"class":43,"line":9988},[41,34461,34462],{"class":47},"# 实现模型的测试功能\n",[41,34464,34465,34467,34469,34471,34473],{"class":43,"line":10002},[41,34466,1672],{"class":271},[41,34468,31323],{"class":58},[41,34470,3087],{"class":271},[41,34472,31328],{"class":378},[41,34474,3877],{"class":275},[41,34476,34477],{"class":43,"line":10008},[41,34478,34479],{"class":47},"    # 加载模型\n",[41,34481,34482,34484,34486],{"class":43,"line":10035},[41,34483,31392],{"class":275},[41,34485,321],{"class":271},[41,34487,33928],{"class":275},[41,34489,34490],{"class":43,"line":10044},[41,34491,34492],{"class":47},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[41,34494,34495],{"class":43,"line":10050},[41,34496,34497],{"class":47},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[41,34499,34500,34503,34506],{"class":43,"line":10058},[41,34501,34502],{"class":275},"    model.load_state_dict(torch.load(",[41,34504,34505],{"class":378},"'best_model.pth'",[41,34507,30600],{"class":275},[41,34509,34510],{"class":43,"line":10063},[41,34511,34512],{"class":47},"    # 数据加载\n",[41,34514,34515,34517,34519],{"class":43,"line":16742},[41,34516,34125],{"class":275},[41,34518,321],{"class":271},[41,34520,34521],{"class":275},"test_data_process()\n",[41,34523,34524],{"class":43,"line":16748},[41,34525,34526],{"class":47},"    # 加载模型测试的函数\n",[41,34528,34529],{"class":43,"line":16771},[41,34530,34531],{"class":275},"    test_model_process(model,test_dataloader)\n",[41,34533,34534],{"class":43,"line":16777},[41,34535,80],{"emptyLinePlaceholder":79},[41,34537,34538],{"class":43,"line":16800},[41,34539,34540],{"class":47},"    # 验证集推理实现：\n",[41,34542,34543],{"class":43,"line":16814},[41,34544,34545],{"class":47},"    # 加载数据加载的更详细一些\n",[41,34547,34548,34550,34552,34554,34556,34558,34560],{"class":43,"line":16834},[41,34549,31340],{"class":275},[41,34551,321],{"class":271},[41,34553,31347],{"class":378},[41,34555,1844],{"class":271},[41,34557,31352],{"class":275},[41,34559,1841],{"class":271},[41,34561,34222],{"class":378},[41,34563,34564,34566,34568],{"class":43,"line":16840},[41,34565,31392],{"class":275},[41,34567,321],{"class":271},[41,34569,32392],{"class":275},[41,34571,34572],{"class":43,"line":16851},[41,34573,34574],{"class":47},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[41,34576,34577],{"class":43,"line":16874},[41,34578,34579],{"class":47},"    # 顺序不可改变\n",[41,34581,34582,34585,34587,34589,34592,34594,34597,34599,34602,34604,34607,34609,34612,34614,34617,34619,34622,34624,34627,34629,34632,34634,34637],{"class":43,"line":16896},[41,34583,34584],{"class":275},"    classes",[41,34586,321],{"class":271},[41,34588,1163],{"class":275},[41,34590,34591],{"class":378},"'T-shirt\u002Ftop'",[41,34593,651],{"class":275},[41,34595,34596],{"class":378},"'Trouser'",[41,34598,651],{"class":275},[41,34600,34601],{"class":378},"'Pullover'",[41,34603,651],{"class":275},[41,34605,34606],{"class":378},"'Dress'",[41,34608,651],{"class":275},[41,34610,34611],{"class":378},"'Coat'",[41,34613,651],{"class":275},[41,34615,34616],{"class":378},"'Sandal'",[41,34618,651],{"class":275},[41,34620,34621],{"class":378},"'Shirt'",[41,34623,651],{"class":275},[41,34625,34626],{"class":378},"'Sneaker'",[41,34628,651],{"class":275},[41,34630,34631],{"class":378},"'Bag'",[41,34633,651],{"class":275},[41,34635,34636],{"class":378},"'Ankle boot'",[41,34638,33349],{"class":275},[41,34640,34641,34643],{"class":43,"line":16901},[41,34642,34281],{"class":271},[41,34644,32987],{"class":275},[41,34646,34647],{"class":43,"line":16907},[41,34648,34649],{"class":47},"        # 将数据和标签都放到设备当中\n",[41,34651,34652,34654,34657,34659],{"class":43,"line":16921},[41,34653,3541],{"class":271},[41,34655,34656],{"class":275}," b_x,b_y ",[41,34658,26146],{"class":271},[41,34660,34300],{"class":275},[41,34662,34663,34665,34667],{"class":43,"line":16934},[41,34664,32713],{"class":275},[41,34666,321],{"class":271},[41,34668,32718],{"class":275},[41,34670,34671,34673,34675],{"class":43,"line":16939},[41,34672,32728],{"class":275},[41,34674,321],{"class":271},[41,34676,32733],{"class":275},[41,34678,34679],{"class":43,"line":16953},[41,34680,80],{"emptyLinePlaceholder":79},[41,34682,34683],{"class":43,"line":16958},[41,34684,34685],{"class":47},"            # 设置模型为验证模式\n",[41,34687,34688],{"class":43,"line":16964},[41,34689,32978],{"class":275},[41,34691,34692],{"class":43,"line":16969},[41,34693,34694],{"class":47},"            # 模型推理结果\n",[41,34696,34697,34699,34701],{"class":43,"line":16983},[41,34698,32763],{"class":275},[41,34700,321],{"class":271},[41,34702,32768],{"class":275},[41,34704,34705],{"class":43,"line":16988},[41,34706,34707],{"class":47},"            # 获取最大下标，最大下标就是类别号\n",[41,34709,34710,34712,34714,34716,34718,34720,34722],{"class":43,"line":16993},[41,34711,32780],{"class":275},[41,34713,321],{"class":271},[41,34715,32785],{"class":275},[41,34717,32788],{"class":5354},[41,34719,321],{"class":271},[41,34721,26],{"class":58},[41,34723,282],{"class":275},[41,34725,34726],{"class":43,"line":17007},[41,34727,34728],{"class":47},"            # 取出张量中的数值\n",[41,34730,34731,34734,34736],{"class":43,"line":17019},[41,34732,34733],{"class":275},"            result",[41,34735,321],{"class":271},[41,34737,34738],{"class":275},"pre_lab.item()\n",[41,34740,34741,34744,34746],{"class":43,"line":17024},[41,34742,34743],{"class":275},"            label",[41,34745,321],{"class":271},[41,34747,34748],{"class":275},"b_y.item()\n",[41,34750,34751,34754,34756,34759,34762,34765,34767,34770],{"class":43,"line":17037},[41,34752,34753],{"class":58},"            print",[41,34755,276],{"class":275},[41,34757,34758],{"class":378},"\"预测值：\"",[41,34760,34761],{"class":275},",classes[result],",[41,34763,34764],{"class":378},"\"------\"",[41,34766,651],{"class":275},[41,34768,34769],{"class":378},"\"真实值：\"",[41,34771,34772],{"class":275},",classes[label])\n",[20,34774,34775],{},"（2）AlexNet",[224,34777,34778],{},[227,34779,34780],{},"神经网络构建",[32,34782,34784],{"className":30481,"code":34783,"language":30483,"meta":37,"style":37},"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",[24,34785,34786,34792,34802,34812,34824,34828,34845,34853,34868,34880,34922,34949,34992,35018,35062,35105,35148,35175,35179,35189,35194,35222,35241,35260,35264,35269,35277,35292,35302,35316,35326,35341,35356,35371,35382,35386,35391,35401,35416,35421,35435,35450,35462,35467,35478,35483,35489,35494,35506,35526,35531,35540],{"__ignoreMap":37},[41,34787,34788,34790],{"class":43,"line":44},[41,34789,30495],{"class":271},[41,34791,30498],{"class":275},[41,34793,34794,34796,34798,34800],{"class":43,"line":51},[41,34795,30840],{"class":271},[41,34797,30843],{"class":275},[41,34799,30495],{"class":271},[41,34801,30848],{"class":275},[41,34803,34804,34806,34808,34810],{"class":43,"line":62},[41,34805,30840],{"class":271},[41,34807,30860],{"class":275},[41,34809,30495],{"class":271},[41,34811,30865],{"class":275},[41,34813,34814,34816,34819,34821],{"class":43,"line":70},[41,34815,30495],{"class":271},[41,34817,34818],{"class":275}," torch.nn.functional ",[41,34820,31486],{"class":271},[41,34822,34823],{"class":275}," F\n",[41,34825,34826],{"class":43,"line":76},[41,34827,80],{"emptyLinePlaceholder":79},[41,34829,34830,34832,34835,34837,34839,34841,34843],{"class":43,"line":83},[41,34831,14832],{"class":271},[41,34833,34834],{"class":54}," AlexNet",[41,34836,276],{"class":275},[41,34838,30881],{"class":54},[41,34840,831],{"class":275},[41,34842,30886],{"class":54},[41,34844,30889],{"class":275},[41,34846,34847,34849,34851],{"class":43,"line":89},[41,34848,30904],{"class":271},[41,34850,30907],{"class":58},[41,34852,30910],{"class":275},[41,34854,34855,34857,34860,34862,34864,34866],{"class":43,"line":96},[41,34856,30920],{"class":58},[41,34858,34859],{"class":275},"(AlexNet,",[41,34861,30926],{"class":58},[41,34863,30929],{"class":275},[41,34865,30932],{"class":58},[41,34867,2115],{"class":275},[41,34869,34870,34872,34875,34877],{"class":43,"line":104},[41,34871,30948],{"class":58},[41,34873,34874],{"class":275},".ReLu",[41,34876,321],{"class":271},[41,34878,34879],{"class":275},"nn.ReLU()\n",[41,34881,34882,34884,34886,34888,34890,34892,34894,34896,34898,34900,34902,34904,34906,34908,34910,34912,34914,34916,34918,34920],{"class":43,"line":176},[41,34883,30948],{"class":58},[41,34885,30951],{"class":275},[41,34887,321],{"class":271},[41,34889,30956],{"class":275},[41,34891,30959],{"class":5354},[41,34893,321],{"class":271},[41,34895,26],{"class":58},[41,34897,651],{"class":275},[41,34899,30968],{"class":5354},[41,34901,321],{"class":271},[41,34903,483],{"class":58},[41,34905,651],{"class":275},[41,34907,30977],{"class":5354},[41,34909,321],{"class":271},[41,34911,745],{"class":58},[41,34913,651],{"class":275},[41,34915,31032],{"class":5354},[41,34917,321],{"class":271},[41,34919,566],{"class":58},[41,34921,282],{"class":275},[41,34923,34924,34926,34928,34930,34933,34935,34937,34939,34941,34943,34945,34947],{"class":43,"line":184},[41,34925,30948],{"class":58},[41,34927,31016],{"class":275},[41,34929,321],{"class":271},[41,34931,34932],{"class":275},"nn.MaxPool2d(",[41,34934,30977],{"class":5354},[41,34936,321],{"class":271},[41,34938,345],{"class":58},[41,34940,651],{"class":275},[41,34942,31032],{"class":5354},[41,34944,321],{"class":271},[41,34946,351],{"class":58},[41,34948,282],{"class":275},[41,34950,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971,34974,34976,34978,34980,34982,34984,34986,34988,34990],{"class":43,"line":1757},[41,34952,30948],{"class":58},[41,34954,31045],{"class":275},[41,34956,321],{"class":271},[41,34958,30956],{"class":275},[41,34960,30959],{"class":5354},[41,34962,321],{"class":271},[41,34964,483],{"class":58},[41,34966,651],{"class":275},[41,34968,30968],{"class":5354},[41,34970,321],{"class":271},[41,34972,34973],{"class":58},"256",[41,34975,651],{"class":275},[41,34977,30977],{"class":5354},[41,34979,321],{"class":271},[41,34981,592],{"class":58},[41,34983,651],{"class":275},[41,34985,30986],{"class":5354},[41,34987,321],{"class":271},[41,34989,351],{"class":58},[41,34991,282],{"class":275},[41,34993,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016],{"class":43,"line":1763},[41,34995,30948],{"class":58},[41,34997,31080],{"class":275},[41,34999,321],{"class":271},[41,35001,34932],{"class":275},[41,35003,30977],{"class":5354},[41,35005,321],{"class":271},[41,35007,345],{"class":58},[41,35009,651],{"class":275},[41,35011,31032],{"class":5354},[41,35013,321],{"class":271},[41,35015,351],{"class":58},[41,35017,282],{"class":275},[41,35019,35020,35022,35025,35027,35029,35031,35033,35035,35037,35039,35041,35044,35046,35048,35050,35052,35054,35056,35058,35060],{"class":43,"line":1768},[41,35021,30948],{"class":58},[41,35023,35024],{"class":275},".c5",[41,35026,321],{"class":271},[41,35028,30956],{"class":275},[41,35030,30959],{"class":5354},[41,35032,321],{"class":271},[41,35034,34973],{"class":58},[41,35036,651],{"class":275},[41,35038,30968],{"class":5354},[41,35040,321],{"class":271},[41,35042,35043],{"class":58},"384",[41,35045,651],{"class":275},[41,35047,30977],{"class":5354},[41,35049,321],{"class":271},[41,35051,345],{"class":58},[41,35053,651],{"class":275},[41,35055,30986],{"class":5354},[41,35057,321],{"class":271},[41,35059,26],{"class":58},[41,35061,282],{"class":275},[41,35063,35064,35066,35069,35071,35073,35075,35077,35079,35081,35083,35085,35087,35089,35091,35093,35095,35097,35099,35101,35103],{"class":43,"line":1782},[41,35065,30948],{"class":58},[41,35067,35068],{"class":275},".c6",[41,35070,321],{"class":271},[41,35072,30956],{"class":275},[41,35074,30959],{"class":5354},[41,35076,321],{"class":271},[41,35078,35043],{"class":58},[41,35080,651],{"class":275},[41,35082,30968],{"class":5354},[41,35084,321],{"class":271},[41,35086,35043],{"class":58},[41,35088,651],{"class":275},[41,35090,30977],{"class":5354},[41,35092,321],{"class":271},[41,35094,345],{"class":58},[41,35096,651],{"class":275},[41,35098,30986],{"class":5354},[41,35100,321],{"class":271},[41,35102,26],{"class":58},[41,35104,282],{"class":275},[41,35106,35107,35109,35112,35114,35116,35118,35120,35122,35124,35126,35128,35130,35132,35134,35136,35138,35140,35142,35144,35146],{"class":43,"line":1787},[41,35108,30948],{"class":58},[41,35110,35111],{"class":275},".c7",[41,35113,321],{"class":271},[41,35115,30956],{"class":275},[41,35117,30959],{"class":5354},[41,35119,321],{"class":271},[41,35121,35043],{"class":58},[41,35123,651],{"class":275},[41,35125,30968],{"class":5354},[41,35127,321],{"class":271},[41,35129,34973],{"class":58},[41,35131,651],{"class":275},[41,35133,30977],{"class":5354},[41,35135,321],{"class":271},[41,35137,345],{"class":58},[41,35139,651],{"class":275},[41,35141,30986],{"class":5354},[41,35143,321],{"class":271},[41,35145,26],{"class":58},[41,35147,282],{"class":275},[41,35149,35150,35152,35155,35157,35159,35161,35163,35165,35167,35169,35171,35173],{"class":43,"line":1793},[41,35151,30948],{"class":58},[41,35153,35154],{"class":275},".s8",[41,35156,321],{"class":271},[41,35158,34932],{"class":275},[41,35160,30977],{"class":5354},[41,35162,321],{"class":271},[41,35164,345],{"class":58},[41,35166,651],{"class":275},[41,35168,31032],{"class":5354},[41,35170,321],{"class":271},[41,35172,351],{"class":58},[41,35174,282],{"class":275},[41,35176,35177],{"class":43,"line":1814},[41,35178,31105],{"class":47},[41,35180,35181,35183,35185,35187],{"class":43,"line":1819},[41,35182,30948],{"class":58},[41,35184,31112],{"class":275},[41,35186,321],{"class":271},[41,35188,31117],{"class":275},[41,35190,35191],{"class":43,"line":1833},[41,35192,35193],{"class":47},"       # 定义全连接层\n",[41,35195,35196,35198,35201,35203,35205,35207,35209,35211,35213,35215,35217,35220],{"class":43,"line":1838},[41,35197,30948],{"class":58},[41,35199,35200],{"class":275},".f1",[41,35202,321],{"class":271},[41,35204,31134],{"class":275},[41,35206,617],{"class":58},[41,35208,728],{"class":271},[41,35210,617],{"class":58},[41,35212,728],{"class":271},[41,35214,34973],{"class":58},[41,35216,651],{"class":275},[41,35218,35219],{"class":58},"4096",[41,35221,282],{"class":275},[41,35223,35224,35226,35229,35231,35233,35235,35237,35239],{"class":43,"line":1867},[41,35225,30948],{"class":58},[41,35227,35228],{"class":275},".f2",[41,35230,321],{"class":271},[41,35232,31134],{"class":275},[41,35234,35219],{"class":58},[41,35236,651],{"class":275},[41,35238,35219],{"class":58},[41,35240,282],{"class":275},[41,35242,35243,35245,35248,35250,35252,35254,35256,35258],{"class":43,"line":1872},[41,35244,30948],{"class":58},[41,35246,35247],{"class":275},".f3",[41,35249,321],{"class":271},[41,35251,31134],{"class":275},[41,35253,35219],{"class":58},[41,35255,651],{"class":275},[41,35257,719],{"class":58},[41,35259,282],{"class":275},[41,35261,35262],{"class":43,"line":1889},[41,35263,80],{"emptyLinePlaceholder":79},[41,35265,35266],{"class":43,"line":1894},[41,35267,35268],{"class":47},"    # 定义前向传播\n",[41,35270,35271,35273,35275],{"class":43,"line":1899},[41,35272,30904],{"class":271},[41,35274,31196],{"class":54},[41,35276,31199],{"class":275},[41,35278,35279,35281,35283,35285,35288,35290],{"class":43,"line":1904},[41,35280,31204],{"class":275},[41,35282,321],{"class":271},[41,35284,30926],{"class":58},[41,35286,35287],{"class":275},".ReLu(",[41,35289,30926],{"class":58},[41,35291,31216],{"class":275},[41,35293,35294,35296,35298,35300],{"class":43,"line":1918},[41,35295,31204],{"class":275},[41,35297,321],{"class":271},[41,35299,30926],{"class":58},[41,35301,31227],{"class":275},[41,35303,35304,35306,35308,35310,35312,35314],{"class":43,"line":1923},[41,35305,31204],{"class":275},[41,35307,321],{"class":271},[41,35309,30926],{"class":58},[41,35311,35287],{"class":275},[41,35313,30926],{"class":58},[41,35315,31242],{"class":275},[41,35317,35318,35320,35322,35324],{"class":43,"line":2715},[41,35319,31204],{"class":275},[41,35321,321],{"class":271},[41,35323,30926],{"class":58},[41,35325,31253],{"class":275},[41,35327,35328,35330,35332,35334,35336,35338],{"class":43,"line":2729},[41,35329,31204],{"class":275},[41,35331,321],{"class":271},[41,35333,30926],{"class":58},[41,35335,35287],{"class":275},[41,35337,30926],{"class":58},[41,35339,35340],{"class":275},".c5(x))\n",[41,35342,35343,35345,35347,35349,35351,35353],{"class":43,"line":2737},[41,35344,31204],{"class":275},[41,35346,321],{"class":271},[41,35348,30926],{"class":58},[41,35350,35287],{"class":275},[41,35352,30926],{"class":58},[41,35354,35355],{"class":275},".c6(x))\n",[41,35357,35358,35360,35362,35364,35366,35368],{"class":43,"line":2742},[41,35359,31204],{"class":275},[41,35361,321],{"class":271},[41,35363,30926],{"class":58},[41,35365,35287],{"class":275},[41,35367,30926],{"class":58},[41,35369,35370],{"class":275},".c7(x))\n",[41,35372,35373,35375,35377,35379],{"class":43,"line":2748},[41,35374,31204],{"class":275},[41,35376,321],{"class":271},[41,35378,30926],{"class":58},[41,35380,35381],{"class":275},".s8(x)\n",[41,35383,35384],{"class":43,"line":2754},[41,35385,80],{"emptyLinePlaceholder":79},[41,35387,35388],{"class":43,"line":2759},[41,35389,35390],{"class":47},"        # 展平加线性全连接层\n",[41,35392,35393,35395,35397,35399],{"class":43,"line":8086},[41,35394,31204],{"class":275},[41,35396,321],{"class":271},[41,35398,30926],{"class":58},[41,35400,31264],{"class":275},[41,35402,35403,35405,35407,35409,35411,35413],{"class":43,"line":8110},[41,35404,31204],{"class":275},[41,35406,321],{"class":271},[41,35408,30926],{"class":58},[41,35410,35287],{"class":275},[41,35412,30926],{"class":58},[41,35414,35415],{"class":275},".f1(x))\n",[41,35417,35418],{"class":43,"line":8115},[41,35419,35420],{"class":47},"        # 还需要dropout对神经元随机进行失活\n",[41,35422,35423,35425,35427,35430,35433],{"class":43,"line":8121},[41,35424,31204],{"class":275},[41,35426,321],{"class":271},[41,35428,35429],{"class":275},"F.dropout(x,",[41,35431,35432],{"class":58},"0.5",[41,35434,282],{"class":275},[41,35436,35437,35439,35441,35443,35445,35447],{"class":43,"line":8148},[41,35438,31204],{"class":275},[41,35440,321],{"class":271},[41,35442,30926],{"class":58},[41,35444,35287],{"class":275},[41,35446,30926],{"class":58},[41,35448,35449],{"class":275},".f2(x))\n",[41,35451,35452,35454,35456,35458,35460],{"class":43,"line":8153},[41,35453,31204],{"class":275},[41,35455,321],{"class":271},[41,35457,35429],{"class":275},[41,35459,35432],{"class":58},[41,35461,282],{"class":275},[41,35463,35464],{"class":43,"line":8159},[41,35465,35466],{"class":47},"        # 直接输出\n",[41,35468,35469,35471,35473,35475],{"class":43,"line":8171},[41,35470,31204],{"class":275},[41,35472,321],{"class":271},[41,35474,30926],{"class":58},[41,35476,35477],{"class":275},".f3(x)\n",[41,35479,35480],{"class":43,"line":8183},[41,35481,35482],{"class":47},"        # 前向传播输出\n",[41,35484,35485,35487],{"class":43,"line":8195},[41,35486,14890],{"class":271},[41,35488,31312],{"class":275},[41,35490,35491],{"class":43,"line":9854},[41,35492,35493],{"class":47},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[41,35495,35496,35498,35500,35502,35504],{"class":43,"line":9879},[41,35497,1672],{"class":271},[41,35499,31323],{"class":58},[41,35501,3087],{"class":271},[41,35503,31328],{"class":378},[41,35505,3877],{"class":275},[41,35507,35508,35510,35512,35514,35516,35518,35520,35522,35524],{"class":43,"line":9902},[41,35509,31340],{"class":275},[41,35511,321],{"class":271},[41,35513,30554],{"class":275},[41,35515,31347],{"class":378},[41,35517,1844],{"class":271},[41,35519,31352],{"class":275},[41,35521,1841],{"class":271},[41,35523,30579],{"class":378},[41,35525,282],{"class":275},[41,35527,35528],{"class":43,"line":9926},[41,35529,35530],{"class":47},"    # 模型实例化，然后将实例化的模型放到设备中\n",[41,35532,35533,35535,35537],{"class":43,"line":9931},[41,35534,31392],{"class":275},[41,35536,321],{"class":271},[41,35538,35539],{"class":275},"AlexNet().to(device)\n",[41,35541,35542,35544,35546,35548,35550,35553,35555,35557],{"class":43,"line":9936},[41,35543,31402],{"class":58},[41,35545,31405],{"class":275},[41,35547,26],{"class":58},[41,35549,651],{"class":275},[41,35551,35552],{"class":58},"227",[41,35554,651],{"class":275},[41,35556,35552],{"class":58},[41,35558,31418],{"class":275},[224,35560,35561],{"start":51},[227,35562,31431],{},[32,35564,35566],{"className":30481,"code":35565,"language":30483,"meta":37,"style":37},"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",[24,35567,35568,35574,35580,35590,35596,35606,35616,35626,35636,35646,35650,35661,35671,35675,35679,35683,35691,35703,35713,35729,35739,35771,35785,35795,35805,35809,35819,35833,35843,35853,35863,35869,35873,35877,35881,35885,35889,35897,35917,35921,35925,35929,35933,35937,35953,35957,35961,35969,35973,35977,35985,35989,35993,35997,36005,36009,36013,36017,36021,36029,36033,36041,36045,36053,36057,36065,36069,36077,36081,36085,36093,36097,36101,36105,36117,36141,36155,36159,36163,36167,36175,36179,36187,36191,36199,36203,36211,36215,36223,36227,36235,36239,36251,36255,36263,36267,36275,36279,36283,36287,36291,36299,36303,36319,36323,36331,36335,36339,36343,36347,36351,36355,36359,36375,36379,36391,36395,36407,36411,36423,36427,36435,36439,36447,36451,36455,36460,36466,36470,36479,36483,36500,36504,36513,36517,36535,36548,36553,36566,36570,36574,36582,36586,36590,36598,36602,36610,36614,36622,36626,36630,36672,36714,36718,36722,36738,36742,36758,36762,36766,36774,36778,36782,36794,36832,36837,36842,36851,36855,36869,36879,36885,36891,36897,36903,36907,36911,36917,36921,36925,36933,36937,36955,36959,36963,36967,36983,36987,36991,36995,36999,37003,37023,37043,37047,37051,37055,37063,37071,37075,37091,37111,37131,37135,37139,37147,37155,37159,37163,37167,37179,37183,37193,37201,37218],{"__ignoreMap":37},[41,35569,35570,35572],{"class":43,"line":44},[41,35571,30495],{"class":271},[41,35573,31925],{"class":275},[41,35575,35576,35578],{"class":43,"line":51},[41,35577,30495],{"class":271},[41,35579,31932],{"class":275},[41,35581,35582,35584,35586,35588],{"class":43,"line":62},[41,35583,30495],{"class":271},[41,35585,31943],{"class":275},[41,35587,31486],{"class":271},[41,35589,31948],{"class":275},[41,35591,35592,35594],{"class":43,"line":70},[41,35593,30495],{"class":271},[41,35595,30498],{"class":275},[41,35597,35598,35600,35602,35604],{"class":43,"line":76},[41,35599,30840],{"class":271},[41,35601,31518],{"class":275},[41,35603,30495],{"class":271},[41,35605,31965],{"class":275},[41,35607,35608,35610,35612,35614],{"class":43,"line":83},[41,35609,30840],{"class":271},[41,35611,31471],{"class":275},[41,35613,30495],{"class":271},[41,35615,31476],{"class":275},[41,35617,35618,35620,35622,35624],{"class":43,"line":89},[41,35619,30840],{"class":271},[41,35621,31501],{"class":275},[41,35623,30495],{"class":271},[41,35625,31506],{"class":275},[41,35627,35628,35630,35632,35634],{"class":43,"line":96},[41,35629,30495],{"class":271},[41,35631,31518],{"class":275},[41,35633,31486],{"class":271},[41,35635,31523],{"class":275},[41,35637,35638,35640,35642,35644],{"class":43,"line":104},[41,35639,30495],{"class":271},[41,35641,31535],{"class":275},[41,35643,31486],{"class":271},[41,35645,31540],{"class":275},[41,35647,35648],{"class":43,"line":176},[41,35649,32010],{"class":47},[41,35651,35652,35654,35656,35658],{"class":43,"line":184},[41,35653,30840],{"class":271},[41,35655,32017],{"class":275},[41,35657,30495],{"class":271},[41,35659,35660],{"class":275}," AlexNet\n",[41,35662,35663,35665,35667,35669],{"class":43,"line":1757},[41,35664,30840],{"class":271},[41,35666,30843],{"class":275},[41,35668,30495],{"class":271},[41,35670,30848],{"class":275},[41,35672,35673],{"class":43,"line":1763},[41,35674,80],{"emptyLinePlaceholder":79},[41,35676,35677],{"class":43,"line":1768},[41,35678,80],{"emptyLinePlaceholder":79},[41,35680,35681],{"class":43,"line":1782},[41,35682,32045],{"class":47},[41,35684,35685,35687,35689],{"class":43,"line":1787},[41,35686,32050],{"class":271},[41,35688,32053],{"class":54},[41,35690,32056],{"class":275},[41,35692,35693,35695,35697,35699,35701],{"class":43,"line":1793},[41,35694,32061],{"class":275},[41,35696,321],{"class":271},[41,35698,31558],{"class":275},[41,35700,31566],{"class":378},[41,35702,31569],{"class":275},[41,35704,35705,35707,35709,35711],{"class":43,"line":1814},[41,35706,32074],{"class":5354},[41,35708,321],{"class":271},[41,35710,31579],{"class":58},[41,35712,31569],{"class":275},[41,35714,35715,35717,35719,35721,35723,35725,35727],{"class":43,"line":1819},[41,35716,32085],{"class":5354},[41,35718,321],{"class":271},[41,35720,31596],{"class":275},[41,35722,31599],{"class":5354},[41,35724,321],{"class":271},[41,35726,35552],{"class":58},[41,35728,31607],{"class":275},[41,35730,35731,35733,35735,35737],{"class":43,"line":1833},[41,35732,32102],{"class":5354},[41,35734,321],{"class":271},[41,35736,31579],{"class":58},[41,35738,282],{"class":275},[41,35740,35741,35743,35745,35747,35749,35751,35753,35755,35757,35759,35761,35763,35765,35767,35769],{"class":43,"line":1838},[41,35742,32113],{"class":275},[41,35744,321],{"class":271},[41,35746,32118],{"class":275},[41,35748,32121],{"class":58},[41,35750,276],{"class":275},[41,35752,32126],{"class":58},[41,35754,728],{"class":271},[41,35756,7496],{"class":58},[41,35758,32133],{"class":275},[41,35760,32121],{"class":58},[41,35762,276],{"class":275},[41,35764,32140],{"class":58},[41,35766,728],{"class":271},[41,35768,7496],{"class":58},[41,35770,32147],{"class":275},[41,35772,35773,35775,35777,35779,35781,35783],{"class":43,"line":1867},[41,35774,32152],{"class":275},[41,35776,321],{"class":271},[41,35778,32157],{"class":275},[41,35780,31640],{"class":5354},[41,35782,321],{"class":271},[41,35784,31645],{"class":275},[41,35786,35787,35789,35791,35793],{"class":43,"line":1872},[41,35788,32168],{"class":5354},[41,35790,321],{"class":271},[41,35792,32173],{"class":58},[41,35794,31569],{"class":275},[41,35796,35797,35799,35801,35803],{"class":43,"line":1889},[41,35798,32180],{"class":5354},[41,35800,321],{"class":271},[41,35802,31579],{"class":58},[41,35804,31569],{"class":275},[41,35806,35807],{"class":43,"line":1894},[41,35808,32191],{"class":47},[41,35810,35811,35813,35815,35817],{"class":43,"line":1899},[41,35812,32196],{"class":5354},[41,35814,321],{"class":271},[41,35816,668],{"class":58},[41,35818,282],{"class":275},[41,35820,35821,35823,35825,35827,35829,35831],{"class":43,"line":1904},[41,35822,32207],{"class":275},[41,35824,321],{"class":271},[41,35826,31637],{"class":275},[41,35828,31640],{"class":5354},[41,35830,321],{"class":271},[41,35832,32218],{"class":275},[41,35834,35835,35837,35839,35841],{"class":43,"line":1918},[41,35836,32223],{"class":5354},[41,35838,321],{"class":271},[41,35840,32173],{"class":58},[41,35842,31569],{"class":275},[41,35844,35845,35847,35849,35851],{"class":43,"line":1923},[41,35846,32234],{"class":5354},[41,35848,321],{"class":271},[41,35850,31579],{"class":58},[41,35852,31569],{"class":275},[41,35854,35855,35857,35859,35861],{"class":43,"line":2715},[41,35856,32245],{"class":5354},[41,35858,321],{"class":271},[41,35860,668],{"class":58},[41,35862,282],{"class":275},[41,35864,35865,35867],{"class":43,"line":2729},[41,35866,4228],{"class":271},[41,35868,32258],{"class":275},[41,35870,35871],{"class":43,"line":2737},[41,35872,80],{"emptyLinePlaceholder":79},[41,35874,35875],{"class":43,"line":2742},[41,35876,32267],{"class":47},[41,35878,35879],{"class":43,"line":2748},[41,35880,32272],{"class":47},[41,35882,35883],{"class":43,"line":2754},[41,35884,80],{"emptyLinePlaceholder":79},[41,35886,35887],{"class":43,"line":2759},[41,35888,32281],{"class":47},[41,35890,35891,35893,35895],{"class":43,"line":8086},[41,35892,32050],{"class":271},[41,35894,32288],{"class":54},[41,35896,32291],{"class":275},[41,35898,35899,35901,35903,35905,35907,35909,35911,35913,35915],{"class":43,"line":8110},[41,35900,31340],{"class":275},[41,35902,321],{"class":271},[41,35904,30554],{"class":275},[41,35906,31347],{"class":378},[41,35908,1844],{"class":271},[41,35910,31352],{"class":275},[41,35912,1841],{"class":271},[41,35914,32310],{"class":378},[41,35916,282],{"class":275},[41,35918,35919],{"class":43,"line":8115},[41,35920,80],{"emptyLinePlaceholder":79},[41,35922,35923],{"class":43,"line":8121},[41,35924,80],{"emptyLinePlaceholder":79},[41,35926,35927],{"class":43,"line":8148},[41,35928,32325],{"class":47},[41,35930,35931],{"class":43,"line":8153},[41,35932,32330],{"class":47},[41,35934,35935],{"class":43,"line":8159},[41,35936,32335],{"class":47},[41,35938,35939,35941,35943,35945,35947,35949,35951],{"class":43,"line":8171},[41,35940,32340],{"class":275},[41,35942,321],{"class":271},[41,35944,32345],{"class":275},[41,35946,32348],{"class":5354},[41,35948,321],{"class":271},[41,35950,32353],{"class":58},[41,35952,282],{"class":275},[41,35954,35955],{"class":43,"line":8183},[41,35956,80],{"emptyLinePlaceholder":79},[41,35958,35959],{"class":43,"line":8195},[41,35960,32364],{"class":47},[41,35962,35963,35965,35967],{"class":43,"line":9854},[41,35964,32369],{"class":275},[41,35966,321],{"class":271},[41,35968,32374],{"class":275},[41,35970,35971],{"class":43,"line":9879},[41,35972,80],{"emptyLinePlaceholder":79},[41,35974,35975],{"class":43,"line":9902},[41,35976,32383],{"class":47},[41,35978,35979,35981,35983],{"class":43,"line":9926},[41,35980,31392],{"class":275},[41,35982,321],{"class":271},[41,35984,32392],{"class":275},[41,35986,35987],{"class":43,"line":9931},[41,35988,32397],{"class":47},[41,35990,35991],{"class":43,"line":9936},[41,35992,32402],{"class":47},[41,35994,35995],{"class":43,"line":9941},[41,35996,32407],{"class":47},[41,35998,35999,36001,36003],{"class":43,"line":9950},[41,36000,32412],{"class":275},[41,36002,321],{"class":271},[41,36004,32417],{"class":275},[41,36006,36007],{"class":43,"line":9955},[41,36008,80],{"emptyLinePlaceholder":79},[41,36010,36011],{"class":43,"line":9961},[41,36012,80],{"emptyLinePlaceholder":79},[41,36014,36015],{"class":43,"line":9982},[41,36016,32430],{"class":47},[41,36018,36019],{"class":43,"line":9988},[41,36020,32435],{"class":47},[41,36022,36023,36025,36027],{"class":43,"line":10002},[41,36024,32440],{"class":275},[41,36026,321],{"class":271},[41,36028,32445],{"class":58},[41,36030,36031],{"class":43,"line":10008},[41,36032,32450],{"class":47},[41,36034,36035,36037,36039],{"class":43,"line":10035},[41,36036,32455],{"class":275},[41,36038,321],{"class":271},[41,36040,32460],{"class":275},[41,36042,36043],{"class":43,"line":10044},[41,36044,32465],{"class":47},[41,36046,36047,36049,36051],{"class":43,"line":10050},[41,36048,32470],{"class":275},[41,36050,321],{"class":271},[41,36052,32460],{"class":275},[41,36054,36055],{"class":43,"line":10058},[41,36056,32479],{"class":47},[41,36058,36059,36061,36063],{"class":43,"line":10063},[41,36060,32484],{"class":275},[41,36062,321],{"class":271},[41,36064,32460],{"class":275},[41,36066,36067],{"class":43,"line":16742},[41,36068,32493],{"class":47},[41,36070,36071,36073,36075],{"class":43,"line":16748},[41,36072,32498],{"class":275},[41,36074,321],{"class":271},[41,36076,32460],{"class":275},[41,36078,36079],{"class":43,"line":16771},[41,36080,80],{"emptyLinePlaceholder":79},[41,36082,36083],{"class":43,"line":16777},[41,36084,32511],{"class":47},[41,36086,36087,36089,36091],{"class":43,"line":16800},[41,36088,32516],{"class":275},[41,36090,321],{"class":271},[41,36092,32521],{"class":275},[41,36094,36095],{"class":43,"line":16814},[41,36096,80],{"emptyLinePlaceholder":79},[41,36098,36099],{"class":43,"line":16834},[41,36100,80],{"emptyLinePlaceholder":79},[41,36102,36103],{"class":43,"line":16840},[41,36104,32534],{"class":47},[41,36106,36107,36109,36111,36113,36115],{"class":43,"line":16851},[41,36108,3339],{"class":271},[41,36110,32541],{"class":275},[41,36112,26146],{"class":271},[41,36114,32546],{"class":58},[41,36116,32549],{"class":275},[41,36118,36119,36121,36123,36125,36127,36129,36131,36133,36135,36137,36139],{"class":43,"line":16874},[41,36120,32554],{"class":58},[41,36122,276],{"class":275},[41,36124,32559],{"class":378},[41,36126,32562],{"class":58},[41,36128,857],{"class":378},[41,36130,32562],{"class":58},[41,36132,524],{"class":378},[41,36134,32571],{"class":275},[41,36136,805],{"class":271},[41,36138,26],{"class":58},[41,36140,30600],{"class":275},[41,36142,36143,36145,36147,36149,36151,36153],{"class":43,"line":16896},[41,36144,32554],{"class":58},[41,36146,276],{"class":275},[41,36148,32586],{"class":378},[41,36150,728],{"class":271},[41,36152,719],{"class":58},[41,36154,282],{"class":275},[41,36156,36157],{"class":43,"line":16901},[41,36158,80],{"emptyLinePlaceholder":79},[41,36160,36161],{"class":43,"line":16907},[41,36162,32601],{"class":47},[41,36164,36165],{"class":43,"line":16921},[41,36166,32606],{"class":47},[41,36168,36169,36171,36173],{"class":43,"line":16934},[41,36170,32611],{"class":275},[41,36172,321],{"class":271},[41,36174,32445],{"class":58},[41,36176,36177],{"class":43,"line":16939},[41,36178,32620],{"class":47},[41,36180,36181,36183,36185],{"class":43,"line":16953},[41,36182,32625],{"class":275},[41,36184,321],{"class":271},[41,36186,3223],{"class":58},[41,36188,36189],{"class":43,"line":16958},[41,36190,32634],{"class":47},[41,36192,36193,36195,36197],{"class":43,"line":16964},[41,36194,32639],{"class":275},[41,36196,321],{"class":271},[41,36198,32445],{"class":58},[41,36200,36201],{"class":43,"line":16969},[41,36202,32648],{"class":47},[41,36204,36205,36207,36209],{"class":43,"line":16983},[41,36206,32653],{"class":275},[41,36208,321],{"class":271},[41,36210,3223],{"class":58},[41,36212,36213],{"class":43,"line":16988},[41,36214,32662],{"class":47},[41,36216,36217,36219,36221],{"class":43,"line":16993},[41,36218,32667],{"class":275},[41,36220,321],{"class":271},[41,36222,3223],{"class":58},[41,36224,36225],{"class":43,"line":17007},[41,36226,32676],{"class":47},[41,36228,36229,36231,36233],{"class":43,"line":17019},[41,36230,32681],{"class":275},[41,36232,321],{"class":271},[41,36234,3223],{"class":58},[41,36236,36237],{"class":43,"line":17024},[41,36238,32690],{"class":47},[41,36240,36241,36243,36245,36247,36249],{"class":43,"line":17037},[41,36242,3541],{"class":271},[41,36244,31704],{"class":275},[41,36246,26146],{"class":271},[41,36248,31709],{"class":58},[41,36250,32703],{"class":275},[41,36252,36253],{"class":43,"line":17042},[41,36254,32708],{"class":47},[41,36256,36257,36259,36261],{"class":43,"line":17047},[41,36258,32713],{"class":275},[41,36260,321],{"class":271},[41,36262,32718],{"class":275},[41,36264,36265],{"class":43,"line":17052},[41,36266,32723],{"class":47},[41,36268,36269,36271,36273],{"class":43,"line":17065},[41,36270,32728],{"class":275},[41,36272,321],{"class":271},[41,36274,32733],{"class":275},[41,36276,36277],{"class":43,"line":17070},[41,36278,32739],{"class":47},[41,36280,36281],{"class":43,"line":32736},[41,36282,32745],{"class":275},[41,36284,36285],{"class":43,"line":32742},[41,36286,32751],{"class":47},[41,36288,36289],{"class":43,"line":32748},[41,36290,32757],{"class":47},[41,36292,36293,36295,36297],{"class":43,"line":32754},[41,36294,32763],{"class":275},[41,36296,321],{"class":271},[41,36298,32768],{"class":275},[41,36300,36301],{"class":43,"line":32760},[41,36302,32774],{"class":47},[41,36304,36305,36307,36309,36311,36313,36315,36317],{"class":43,"line":32771},[41,36306,32780],{"class":275},[41,36308,321],{"class":271},[41,36310,32785],{"class":275},[41,36312,32788],{"class":5354},[41,36314,321],{"class":271},[41,36316,26],{"class":58},[41,36318,282],{"class":275},[41,36320,36321],{"class":43,"line":32777},[41,36322,32800],{"class":47},[41,36324,36325,36327,36329],{"class":43,"line":32797},[41,36326,32806],{"class":275},[41,36328,321],{"class":271},[41,36330,32811],{"class":275},[41,36332,36333],{"class":43,"line":32803},[41,36334,32817],{"class":47},[41,36336,36337],{"class":43,"line":32814},[41,36338,32823],{"class":275},[41,36340,36341],{"class":43,"line":32820},[41,36342,32829],{"class":47},[41,36344,36345],{"class":43,"line":32826},[41,36346,32835],{"class":275},[41,36348,36349],{"class":43,"line":32832},[41,36350,32841],{"class":47},[41,36352,36353],{"class":43,"line":32838},[41,36354,32847],{"class":275},[41,36356,36357],{"class":43,"line":32844},[41,36358,32853],{"class":47},[41,36360,36361,36363,36365,36367,36369,36371,36373],{"class":43,"line":32850},[41,36362,32859],{"class":275},[41,36364,9615],{"class":271},[41,36366,32864],{"class":275},[41,36368,728],{"class":271},[41,36370,32869],{"class":275},[41,36372,465],{"class":58},[41,36374,282],{"class":275},[41,36376,36377],{"class":43,"line":32856},[41,36378,32879],{"class":47},[41,36380,36381,36383,36385,36387,36389],{"class":43,"line":32876},[41,36382,32885],{"class":275},[41,36384,9615],{"class":271},[41,36386,32890],{"class":275},[41,36388,3087],{"class":271},[41,36390,32895],{"class":275},[41,36392,36393],{"class":43,"line":32882},[41,36394,32901],{"class":47},[41,36396,36397,36399,36401,36403,36405],{"class":43,"line":32898},[41,36398,32907],{"class":275},[41,36400,9615],{"class":271},[41,36402,32869],{"class":275},[41,36404,465],{"class":58},[41,36406,282],{"class":275},[41,36408,36409],{"class":43,"line":32904},[41,36410,32921],{"class":47},[41,36412,36413,36415,36417,36419,36421],{"class":43,"line":32918},[41,36414,3541],{"class":271},[41,36416,32929],{"class":275},[41,36418,26146],{"class":271},[41,36420,31709],{"class":58},[41,36422,32936],{"class":275},[41,36424,36425],{"class":43,"line":32924},[41,36426,32942],{"class":47},[41,36428,36429,36431,36433],{"class":43,"line":32939},[41,36430,32713],{"class":275},[41,36432,321],{"class":271},[41,36434,32718],{"class":275},[41,36436,36437],{"class":43,"line":32945},[41,36438,32957],{"class":47},[41,36440,36441,36443,36445],{"class":43,"line":32954},[41,36442,32728],{"class":275},[41,36444,321],{"class":271},[41,36446,32733],{"class":275},[41,36448,36449],{"class":43,"line":32960},[41,36450,32972],{"class":47},[41,36452,36453],{"class":43,"line":32969},[41,36454,32978],{"class":275},[41,36456,36457],{"class":43,"line":32975},[41,36458,36459],{"class":47},"            # 验证时不计算梯度以节省内存\u002F计算\n",[41,36461,36462,36464],{"class":43,"line":32981},[41,36463,32984],{"class":271},[41,36465,32987],{"class":275},[41,36467,36468],{"class":43,"line":32990},[41,36469,32993],{"class":47},[41,36471,36472,36475,36477],{"class":43,"line":32996},[41,36473,36474],{"class":275},"                output",[41,36476,321],{"class":271},[41,36478,32768],{"class":275},[41,36480,36481],{"class":43,"line":33007},[41,36482,33010],{"class":47},[41,36484,36485,36488,36490,36492,36494,36496,36498],{"class":43,"line":33013},[41,36486,36487],{"class":275},"                pre_lab",[41,36489,321],{"class":271},[41,36491,32785],{"class":275},[41,36493,32788],{"class":5354},[41,36495,321],{"class":271},[41,36497,26],{"class":58},[41,36499,282],{"class":275},[41,36501,36502],{"class":43,"line":33032},[41,36503,33035],{"class":47},[41,36505,36506,36509,36511],{"class":43,"line":33038},[41,36507,36508],{"class":275},"                val_batch_loss",[41,36510,321],{"class":271},[41,36512,32811],{"class":275},[41,36514,36515],{"class":43,"line":33049},[41,36516,33052],{"class":47},[41,36518,36519,36522,36524,36527,36529,36531,36533],{"class":43,"line":33055},[41,36520,36521],{"class":275},"                val_loss",[41,36523,9615],{"class":271},[41,36525,36526],{"class":275},"val_batch_loss.item()",[41,36528,728],{"class":271},[41,36530,32869],{"class":275},[41,36532,465],{"class":58},[41,36534,282],{"class":275},[41,36536,36537,36540,36542,36544,36546],{"class":43,"line":33075},[41,36538,36539],{"class":275},"                val_corrects",[41,36541,9615],{"class":271},[41,36543,32890],{"class":275},[41,36545,3087],{"class":271},[41,36547,32895],{"class":275},[41,36549,36550],{"class":43,"line":33091},[41,36551,36552],{"class":47},"            # 当前用于验证的样本数量\n",[41,36554,36555,36558,36560,36562,36564],{"class":43,"line":33097},[41,36556,36557],{"class":275},"            val_num",[41,36559,9615],{"class":271},[41,36561,32869],{"class":275},[41,36563,465],{"class":58},[41,36565,282],{"class":275},[41,36567,36568],{"class":43,"line":33111},[41,36569,33114],{"class":47},[41,36571,36572],{"class":43,"line":33117},[41,36573,33120],{"class":47},[41,36575,36576,36578,36580],{"class":43,"line":33123},[41,36577,33126],{"class":275},[41,36579,857],{"class":271},[41,36581,33131],{"class":275},[41,36583,36584],{"class":43,"line":33134},[41,36585,33137],{"class":47},[41,36587,36588],{"class":43,"line":33140},[41,36589,33143],{"class":47},[41,36591,36592,36594,36596],{"class":43,"line":33146},[41,36593,33149],{"class":275},[41,36595,857],{"class":271},[41,36597,33131],{"class":275},[41,36599,36600],{"class":43,"line":33156},[41,36601,33159],{"class":47},[41,36603,36604,36606,36608],{"class":43,"line":33162},[41,36605,33165],{"class":275},[41,36607,857],{"class":271},[41,36609,33170],{"class":275},[41,36611,36612],{"class":43,"line":33173},[41,36613,33176],{"class":47},[41,36615,36616,36618,36620],{"class":43,"line":33179},[41,36617,33182],{"class":275},[41,36619,857],{"class":271},[41,36621,33170],{"class":275},[41,36623,36624],{"class":43,"line":33189},[41,36625,80],{"emptyLinePlaceholder":79},[41,36627,36628],{"class":43,"line":33194},[41,36629,33197],{"class":47},[41,36631,36632,36634,36636,36638,36640,36642,36644,36646,36648,36650,36652,36654,36656,36658,36660,36662,36664,36666,36668,36670],{"class":43,"line":33200},[41,36633,32554],{"class":58},[41,36635,276],{"class":275},[41,36637,3730],{"class":378},[41,36639,32562],{"class":58},[41,36641,33211],{"class":378},[41,36643,1169],{"class":58},[41,36645,33216],{"class":271},[41,36647,1219],{"class":58},[41,36649,33221],{"class":378},[41,36651,1169],{"class":58},[41,36653,33216],{"class":271},[41,36655,1219],{"class":58},[41,36657,3730],{"class":378},[41,36659,33232],{"class":275},[41,36661,805],{"class":271},[41,36663,26],{"class":58},[41,36665,33239],{"class":275},[41,36667,805],{"class":271},[41,36669,26],{"class":58},[41,36671,33246],{"class":275},[41,36673,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712],{"class":43,"line":33249},[41,36675,32554],{"class":58},[41,36677,276],{"class":275},[41,36679,3730],{"class":378},[41,36681,32562],{"class":58},[41,36683,33260],{"class":378},[41,36685,1169],{"class":58},[41,36687,33216],{"class":271},[41,36689,1219],{"class":58},[41,36691,33269],{"class":378},[41,36693,1169],{"class":58},[41,36695,33216],{"class":271},[41,36697,1219],{"class":58},[41,36699,3730],{"class":378},[41,36701,33280],{"class":275},[41,36703,805],{"class":271},[41,36705,26],{"class":58},[41,36707,33287],{"class":275},[41,36709,805],{"class":271},[41,36711,26],{"class":58},[41,36713,33246],{"class":275},[41,36715,36716],{"class":43,"line":33296},[41,36717,80],{"emptyLinePlaceholder":79},[41,36719,36720],{"class":43,"line":33301},[41,36721,33304],{"class":47},[41,36723,36724,36726,36728,36730,36732,36734,36736],{"class":43,"line":33307},[41,36725,2635],{"class":271},[41,36727,33312],{"class":275},[41,36729,805],{"class":271},[41,36731,26],{"class":58},[41,36733,1213],{"class":275},[41,36735,1233],{"class":271},[41,36737,33323],{"class":275},[41,36739,36740],{"class":43,"line":33326},[41,36741,33329],{"class":47},[41,36743,36744,36746,36748,36750,36752,36754,36756],{"class":43,"line":33332},[41,36745,33335],{"class":275},[41,36747,315],{"class":58},[41,36749,321],{"class":271},[41,36751,33342],{"class":275},[41,36753,805],{"class":271},[41,36755,26],{"class":58},[41,36757,33349],{"class":275},[41,36759,36760],{"class":43,"line":33352},[41,36761,33355],{"class":47},[41,36763,36764],{"class":43,"line":33358},[41,36765,33361],{"class":47},[41,36767,36768,36770,36772],{"class":43,"line":33364},[41,36769,33367],{"class":275},[41,36771,321],{"class":271},[41,36773,32417],{"class":275},[41,36775,36776],{"class":43,"line":33374},[41,36777,80],{"emptyLinePlaceholder":79},[41,36779,36780],{"class":43,"line":33379},[41,36781,33382],{"class":47},[41,36783,36784,36786,36788,36790,36792],{"class":43,"line":33385},[41,36785,33388],{"class":275},[41,36787,321],{"class":271},[41,36789,33393],{"class":275},[41,36791,805],{"class":271},[41,36793,33398],{"class":275},[41,36795,36796,36798,36800,36802,36804,36806,36808,36810,36812,36814,36816,36818,36820,36822,36824,36826,36828,36830],{"class":43,"line":33401},[41,36797,32554],{"class":58},[41,36799,276],{"class":275},[41,36801,33408],{"class":378},[41,36803,1169],{"class":58},[41,36805,33413],{"class":271},[41,36807,1219],{"class":58},[41,36809,817],{"class":378},[41,36811,1169],{"class":58},[41,36813,33413],{"class":271},[41,36815,1219],{"class":58},[41,36817,33426],{"class":378},[41,36819,33429],{"class":275},[41,36821,33432],{"class":271},[41,36823,1180],{"class":58},[41,36825,33437],{"class":275},[41,36827,601],{"class":271},[41,36829,1180],{"class":58},[41,36831,30600],{"class":275},[41,36833,36834],{"class":43,"line":33446},[41,36835,36836],{"class":47},"    # 选择最优参数并保存\n",[41,36838,36839],{"class":43,"line":33452},[41,36840,36841],{"class":47},"    # 保存最佳模型权重字典\n",[41,36843,36844,36847,36849],{"class":43,"line":33458},[41,36845,36846],{"class":275},"    torch.save(best_model_wts,",[41,36848,33470],{"class":378},[41,36850,282],{"class":275},[41,36852,36853],{"class":43,"line":33464},[41,36854,33490],{"class":47},[41,36856,36857,36859,36861,36863,36865,36867],{"class":43,"line":33475},[41,36858,33496],{"class":275},[41,36860,321],{"class":271},[41,36862,33501],{"class":275},[41,36864,33504],{"class":5354},[41,36866,321],{"class":271},[41,36868,1687],{"class":275},[41,36870,36871,36873,36875,36877],{"class":43,"line":33481},[41,36872,33514],{"class":378},[41,36874,1132],{"class":275},[41,36876,33519],{"class":58},[41,36878,33522],{"class":275},[41,36880,36881,36883],{"class":43,"line":33487},[41,36882,33528],{"class":378},[41,36884,33531],{"class":275},[41,36886,36887,36889],{"class":43,"line":33493},[41,36888,33537],{"class":378},[41,36890,33540],{"class":275},[41,36892,36893,36895],{"class":43,"line":33511},[41,36894,33546],{"class":378},[41,36896,33549],{"class":275},[41,36898,36899,36901],{"class":43,"line":33525},[41,36900,33555],{"class":378},[41,36902,33558],{"class":275},[41,36904,36905],{"class":43,"line":33534},[41,36906,33564],{"class":275},[41,36908,36909],{"class":43,"line":33543},[41,36910,33570],{"class":47},[41,36912,36913,36915],{"class":43,"line":33552},[41,36914,4228],{"class":271},[41,36916,33578],{"class":275},[41,36918,36919],{"class":43,"line":33561},[41,36920,80],{"emptyLinePlaceholder":79},[41,36922,36923],{"class":43,"line":33567},[41,36924,33589],{"class":47},[41,36926,36927,36929,36931],{"class":43,"line":33573},[41,36928,32050],{"class":271},[41,36930,33597],{"class":54},[41,36932,33600],{"class":275},[41,36934,36935],{"class":43,"line":33581},[41,36936,33606],{"class":47},[41,36938,36939,36941,36943,36945,36947,36949,36951,36953],{"class":43,"line":33586},[41,36940,33612],{"class":275},[41,36942,31796],{"class":5354},[41,36944,321],{"class":271},[41,36946,276],{"class":275},[41,36948,771],{"class":58},[41,36950,651],{"class":275},[41,36952,566],{"class":58},[41,36954,30600],{"class":275},[41,36956,36957],{"class":43,"line":33592},[41,36958,33632],{"class":47},[41,36960,36961],{"class":43,"line":33603},[41,36962,33638],{"class":47},[41,36964,36965],{"class":43,"line":33609},[41,36966,33644],{"class":47},[41,36968,36969,36971,36973,36975,36977,36979,36981],{"class":43,"line":33629},[41,36970,31830],{"class":275},[41,36972,26],{"class":58},[41,36974,651],{"class":275},[41,36976,351],{"class":58},[41,36978,651],{"class":275},[41,36980,26],{"class":58},[41,36982,282],{"class":275},[41,36984,36985],{"class":43,"line":33635},[41,36986,33667],{"class":47},[41,36988,36989],{"class":43,"line":33641},[41,36990,33673],{"class":47},[41,36992,36993],{"class":43,"line":33647},[41,36994,33679],{"class":47},[41,36996,36997],{"class":43,"line":33664},[41,36998,33685],{"class":47},[41,37000,37001],{"class":43,"line":33670},[41,37002,33691],{"class":47},[41,37004,37005,37007,37009,37011,37013,37015,37017,37019,37021],{"class":43,"line":33676},[41,37006,33697],{"class":275},[41,37008,33700],{"class":378},[41,37010,33703],{"class":275},[41,37012,33706],{"class":378},[41,37014,651],{"class":275},[41,37016,33711],{"class":5354},[41,37018,321],{"class":271},[41,37020,33716],{"class":378},[41,37022,282],{"class":275},[41,37024,37025,37027,37029,37031,37033,37035,37037,37039,37041],{"class":43,"line":33682},[41,37026,33697],{"class":275},[41,37028,33700],{"class":378},[41,37030,33728],{"class":275},[41,37032,33731],{"class":378},[41,37034,651],{"class":275},[41,37036,33711],{"class":5354},[41,37038,321],{"class":271},[41,37040,33740],{"class":378},[41,37042,282],{"class":275},[41,37044,37045],{"class":43,"line":33688},[41,37046,33748],{"class":47},[41,37048,37049],{"class":43,"line":33694},[41,37050,33754],{"class":275},[41,37052,37053],{"class":43,"line":33721},[41,37054,33760],{"class":47},[41,37056,37057,37059,37061],{"class":43,"line":33745},[41,37058,33766],{"class":275},[41,37060,33769],{"class":378},[41,37062,282],{"class":275},[41,37064,37065,37067,37069],{"class":43,"line":33751},[41,37066,33777],{"class":275},[41,37068,33780],{"class":378},[41,37070,282],{"class":275},[41,37072,37073],{"class":43,"line":33757},[41,37074,33788],{"class":47},[41,37076,37077,37079,37081,37083,37085,37087,37089],{"class":43,"line":33763},[41,37078,31830],{"class":275},[41,37080,26],{"class":58},[41,37082,651],{"class":275},[41,37084,351],{"class":58},[41,37086,651],{"class":275},[41,37088,351],{"class":58},[41,37090,282],{"class":275},[41,37092,37093,37095,37097,37099,37101,37103,37105,37107,37109],{"class":43,"line":33774},[41,37094,33697],{"class":275},[41,37096,33700],{"class":378},[41,37098,33815],{"class":275},[41,37100,33706],{"class":378},[41,37102,651],{"class":275},[41,37104,33711],{"class":5354},[41,37106,321],{"class":271},[41,37108,33826],{"class":378},[41,37110,282],{"class":275},[41,37112,37113,37115,37117,37119,37121,37123,37125,37127,37129],{"class":43,"line":33785},[41,37114,33697],{"class":275},[41,37116,33700],{"class":378},[41,37118,33838],{"class":275},[41,37120,33731],{"class":378},[41,37122,651],{"class":275},[41,37124,33711],{"class":5354},[41,37126,321],{"class":271},[41,37128,33849],{"class":378},[41,37130,282],{"class":275},[41,37132,37133],{"class":43,"line":33791},[41,37134,33857],{"class":47},[41,37136,37137],{"class":43,"line":33808},[41,37138,33754],{"class":275},[41,37140,37141,37143,37145],{"class":43,"line":33831},[41,37142,33766],{"class":275},[41,37144,33700],{"class":378},[41,37146,282],{"class":275},[41,37148,37149,37151,37153],{"class":43,"line":33854},[41,37150,33777],{"class":275},[41,37152,33879],{"class":378},[41,37154,282],{"class":275},[41,37156,37157],{"class":43,"line":33860},[41,37158,33887],{"class":275},[41,37160,37161],{"class":43,"line":33865},[41,37162,80],{"emptyLinePlaceholder":79},[41,37164,37165],{"class":43,"line":33874},[41,37166,33898],{"class":47},[41,37168,37169,37171,37173,37175,37177],{"class":43,"line":33884},[41,37170,1672],{"class":271},[41,37172,31323],{"class":58},[41,37174,3087],{"class":271},[41,37176,31328],{"class":378},[41,37178,3877],{"class":275},[41,37180,37181],{"class":43,"line":33890},[41,37182,33917],{"class":47},[41,37184,37185,37188,37190],{"class":43,"line":33895},[41,37186,37187],{"class":275},"    AlexNet",[41,37189,321],{"class":271},[41,37191,37192],{"class":275},"AlexNet()\n",[41,37194,37195,37197,37199],{"class":43,"line":33901},[41,37196,33934],{"class":275},[41,37198,321],{"class":271},[41,37200,33939],{"class":275},[41,37202,37203,37205,37207,37210,37212,37214,37216],{"class":43,"line":33914},[41,37204,33496],{"class":275},[41,37206,321],{"class":271},[41,37208,37209],{"class":275},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[41,37211,33952],{"class":5354},[41,37213,321],{"class":271},[41,37215,973],{"class":58},[41,37217,282],{"class":275},[41,37219,37220],{"class":43,"line":33920},[41,37221,33964],{"class":275},[224,37223,37224],{"start":62},[227,37225,33977],{},[32,37227,37229],{"className":30481,"code":37228,"language":30483,"meta":37,"style":37},"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",[24,37230,37231,37237,37247,37257,37267,37271,37281,37291,37302,37306,37310,37314,37322,37338,37348,37364,37374,37388,37392,37402,37412,37422,37428,37432,37436,37444,37448,37464,37472,37476,37480,37488,37496,37500,37504,37508,37512,37518,37522,37532,37540,37548,37552,37556,37560,37568,37572,37588,37592,37596,37600,37612,37616,37628,37632,37636,37648,37652,37662,37666,37670,37682,37686,37694,37698,37702,37710,37714,37722,37726,37730,37734,37738,37742,37758,37766,37770,37774,37822,37828,37832,37842,37850,37858,37862,37866,37870,37874,37882,37886,37902,37906,37914,37922],{"__ignoreMap":37},[41,37232,37233,37235],{"class":43,"line":44},[41,37234,30495],{"class":271},[41,37236,30498],{"class":275},[41,37238,37239,37241,37243,37245],{"class":43,"line":51},[41,37240,30495],{"class":271},[41,37242,31518],{"class":275},[41,37244,31486],{"class":271},[41,37246,31523],{"class":275},[41,37248,37249,37251,37253,37255],{"class":43,"line":62},[41,37250,30840],{"class":271},[41,37252,34005],{"class":275},[41,37254,30495],{"class":271},[41,37256,34010],{"class":275},[41,37258,37259,37261,37263,37265],{"class":43,"line":70},[41,37260,30840],{"class":271},[41,37262,31501],{"class":275},[41,37264,30495],{"class":271},[41,37266,31506],{"class":275},[41,37268,37269],{"class":43,"line":76},[41,37270,34025],{"class":47},[41,37272,37273,37275,37277,37279],{"class":43,"line":83},[41,37274,30840],{"class":271},[41,37276,31471],{"class":275},[41,37278,30495],{"class":271},[41,37280,31476],{"class":275},[41,37282,37283,37285,37287,37289],{"class":43,"line":89},[41,37284,30840],{"class":271},[41,37286,32017],{"class":275},[41,37288,30495],{"class":271},[41,37290,35660],{"class":275},[41,37292,37293,37295,37298,37300],{"class":43,"line":96},[41,37294,30840],{"class":271},[41,37296,37297],{"class":275}," 练习.AlexNet.model ",[41,37299,30495],{"class":271},[41,37301,35660],{"class":275},[41,37303,37304],{"class":43,"line":104},[41,37305,80],{"emptyLinePlaceholder":79},[41,37307,37308],{"class":43,"line":176},[41,37309,80],{"emptyLinePlaceholder":79},[41,37311,37312],{"class":43,"line":184},[41,37313,34054],{"class":47},[41,37315,37316,37318,37320],{"class":43,"line":1757},[41,37317,32050],{"class":271},[41,37319,34061],{"class":54},[41,37321,32056],{"class":275},[41,37323,37324,37326,37328,37330,37332,37334,37336],{"class":43,"line":1763},[41,37325,34068],{"class":275},[41,37327,321],{"class":271},[41,37329,31558],{"class":275},[41,37331,31561],{"class":5354},[41,37333,321],{"class":271},[41,37335,31566],{"class":378},[41,37337,31569],{"class":275},[41,37339,37340,37342,37344,37346],{"class":43,"line":1768},[41,37341,34085],{"class":5354},[41,37343,321],{"class":271},[41,37345,34090],{"class":58},[41,37347,31569],{"class":275},[41,37349,37350,37352,37354,37356,37358,37360,37362],{"class":43,"line":1782},[41,37351,34097],{"class":5354},[41,37353,321],{"class":271},[41,37355,31596],{"class":275},[41,37357,31599],{"class":5354},[41,37359,321],{"class":271},[41,37361,35552],{"class":58},[41,37363,31607],{"class":275},[41,37365,37366,37368,37370,37372],{"class":43,"line":1787},[41,37367,34114],{"class":5354},[41,37369,321],{"class":271},[41,37371,31579],{"class":58},[41,37373,282],{"class":275},[41,37375,37376,37378,37380,37382,37384,37386],{"class":43,"line":1793},[41,37377,34125],{"class":275},[41,37379,321],{"class":271},[41,37381,31637],{"class":275},[41,37383,31640],{"class":5354},[41,37385,321],{"class":271},[41,37387,34136],{"class":275},[41,37389,37390],{"class":43,"line":1814},[41,37391,34141],{"class":47},[41,37393,37394,37396,37398,37400],{"class":43,"line":1819},[41,37395,34146],{"class":5354},[41,37397,321],{"class":271},[41,37399,26],{"class":58},[41,37401,31569],{"class":275},[41,37403,37404,37406,37408,37410],{"class":43,"line":1833},[41,37405,34157],{"class":5354},[41,37407,321],{"class":271},[41,37409,31579],{"class":58},[41,37411,31569],{"class":275},[41,37413,37414,37416,37418,37420],{"class":43,"line":1838},[41,37415,34168],{"class":5354},[41,37417,321],{"class":271},[41,37419,465],{"class":58},[41,37421,282],{"class":275},[41,37423,37424,37426],{"class":43,"line":1867},[41,37425,4228],{"class":271},[41,37427,34181],{"class":275},[41,37429,37430],{"class":43,"line":1872},[41,37431,80],{"emptyLinePlaceholder":79},[41,37433,37434],{"class":43,"line":1889},[41,37435,34190],{"class":47},[41,37437,37438,37440,37442],{"class":43,"line":1894},[41,37439,32050],{"class":271},[41,37441,34197],{"class":54},[41,37443,34200],{"class":275},[41,37445,37446],{"class":43,"line":1899},[41,37447,34205],{"class":47},[41,37449,37450,37452,37454,37456,37458,37460,37462],{"class":43,"line":1904},[41,37451,31340],{"class":275},[41,37453,321],{"class":271},[41,37455,31347],{"class":378},[41,37457,1844],{"class":271},[41,37459,31352],{"class":275},[41,37461,1841],{"class":271},[41,37463,34222],{"class":378},[41,37465,37466,37468,37470],{"class":43,"line":1918},[41,37467,31392],{"class":275},[41,37469,321],{"class":271},[41,37471,32392],{"class":275},[41,37473,37474],{"class":43,"line":1923},[41,37475,80],{"emptyLinePlaceholder":79},[41,37477,37478],{"class":43,"line":2715},[41,37479,34239],{"class":47},[41,37481,37482,37484,37486],{"class":43,"line":2729},[41,37483,34244],{"class":275},[41,37485,321],{"class":271},[41,37487,32445],{"class":58},[41,37489,37490,37492,37494],{"class":43,"line":2737},[41,37491,34253],{"class":275},[41,37493,321],{"class":271},[41,37495,3223],{"class":58},[41,37497,37498],{"class":43,"line":2742},[41,37499,80],{"emptyLinePlaceholder":79},[41,37501,37502],{"class":43,"line":2748},[41,37503,34266],{"class":47},[41,37505,37506],{"class":43,"line":2754},[41,37507,34271],{"class":47},[41,37509,37510],{"class":43,"line":2759},[41,37511,34276],{"class":47},[41,37513,37514,37516],{"class":43,"line":8086},[41,37515,34281],{"class":271},[41,37517,32987],{"class":275},[41,37519,37520],{"class":43,"line":8110},[41,37521,34288],{"class":47},[41,37523,37524,37526,37528,37530],{"class":43,"line":8115},[41,37525,3541],{"class":271},[41,37527,34295],{"class":275},[41,37529,26146],{"class":271},[41,37531,34300],{"class":275},[41,37533,37534,37536,37538],{"class":43,"line":8121},[41,37535,34305],{"class":275},[41,37537,321],{"class":271},[41,37539,34310],{"class":275},[41,37541,37542,37544,37546],{"class":43,"line":8148},[41,37543,34315],{"class":275},[41,37545,321],{"class":271},[41,37547,34320],{"class":275},[41,37549,37550],{"class":43,"line":8153},[41,37551,34325],{"class":47},[41,37553,37554],{"class":43,"line":8159},[41,37555,32978],{"class":275},[41,37557,37558],{"class":43,"line":8171},[41,37559,34334],{"class":47},[41,37561,37562,37564,37566],{"class":43,"line":8183},[41,37563,32763],{"class":275},[41,37565,321],{"class":271},[41,37567,34343],{"class":275},[41,37569,37570],{"class":43,"line":8195},[41,37571,34348],{"class":47},[41,37573,37574,37576,37578,37580,37582,37584,37586],{"class":43,"line":9854},[41,37575,32780],{"class":275},[41,37577,321],{"class":271},[41,37579,32785],{"class":275},[41,37581,32788],{"class":5354},[41,37583,321],{"class":271},[41,37585,26],{"class":58},[41,37587,282],{"class":275},[41,37589,37590],{"class":43,"line":9879},[41,37591,34369],{"class":47},[41,37593,37594],{"class":43,"line":9902},[41,37595,34374],{"class":47},[41,37597,37598],{"class":43,"line":9926},[41,37599,34379],{"class":47},[41,37601,37602,37604,37606,37608,37610],{"class":43,"line":9931},[41,37603,34384],{"class":275},[41,37605,9615],{"class":271},[41,37607,32890],{"class":275},[41,37609,3087],{"class":271},[41,37611,34393],{"class":275},[41,37613,37614],{"class":43,"line":9936},[41,37615,34398],{"class":47},[41,37617,37618,37620,37622,37624,37626],{"class":43,"line":9941},[41,37619,34403],{"class":275},[41,37621,9615],{"class":271},[41,37623,34408],{"class":275},[41,37625,465],{"class":58},[41,37627,282],{"class":275},[41,37629,37630],{"class":43,"line":9950},[41,37631,80],{"emptyLinePlaceholder":79},[41,37633,37634],{"class":43,"line":9955},[41,37635,34421],{"class":47},[41,37637,37638,37640,37642,37644,37646],{"class":43,"line":9961},[41,37639,34426],{"class":275},[41,37641,321],{"class":271},[41,37643,34431],{"class":275},[41,37645,857],{"class":271},[41,37647,34436],{"class":275},[41,37649,37650],{"class":43,"line":9982},[41,37651,34441],{"class":47},[41,37653,37654,37656,37658,37660],{"class":43,"line":9988},[41,37655,32554],{"class":58},[41,37657,276],{"class":275},[41,37659,34450],{"class":378},[41,37661,34453],{"class":275},[41,37663,37664],{"class":43,"line":10002},[41,37665,80],{"emptyLinePlaceholder":79},[41,37667,37668],{"class":43,"line":10008},[41,37669,34462],{"class":47},[41,37671,37672,37674,37676,37678,37680],{"class":43,"line":10035},[41,37673,1672],{"class":271},[41,37675,31323],{"class":58},[41,37677,3087],{"class":271},[41,37679,31328],{"class":378},[41,37681,3877],{"class":275},[41,37683,37684],{"class":43,"line":10044},[41,37685,34479],{"class":47},[41,37687,37688,37690,37692],{"class":43,"line":10050},[41,37689,31392],{"class":275},[41,37691,321],{"class":271},[41,37693,37192],{"class":275},[41,37695,37696],{"class":43,"line":10058},[41,37697,34492],{"class":47},[41,37699,37700],{"class":43,"line":10063},[41,37701,34497],{"class":47},[41,37703,37704,37706,37708],{"class":43,"line":16742},[41,37705,34502],{"class":275},[41,37707,34505],{"class":378},[41,37709,30600],{"class":275},[41,37711,37712],{"class":43,"line":16748},[41,37713,34512],{"class":47},[41,37715,37716,37718,37720],{"class":43,"line":16771},[41,37717,34125],{"class":275},[41,37719,321],{"class":271},[41,37721,34521],{"class":275},[41,37723,37724],{"class":43,"line":16777},[41,37725,34526],{"class":47},[41,37727,37728],{"class":43,"line":16800},[41,37729,34531],{"class":275},[41,37731,37732],{"class":43,"line":16814},[41,37733,80],{"emptyLinePlaceholder":79},[41,37735,37736],{"class":43,"line":16834},[41,37737,34540],{"class":47},[41,37739,37740],{"class":43,"line":16840},[41,37741,34545],{"class":47},[41,37743,37744,37746,37748,37750,37752,37754,37756],{"class":43,"line":16851},[41,37745,31340],{"class":275},[41,37747,321],{"class":271},[41,37749,31347],{"class":378},[41,37751,1844],{"class":271},[41,37753,31352],{"class":275},[41,37755,1841],{"class":271},[41,37757,34222],{"class":378},[41,37759,37760,37762,37764],{"class":43,"line":16874},[41,37761,31392],{"class":275},[41,37763,321],{"class":271},[41,37765,32392],{"class":275},[41,37767,37768],{"class":43,"line":16896},[41,37769,34574],{"class":47},[41,37771,37772],{"class":43,"line":16901},[41,37773,34579],{"class":47},[41,37775,37776,37778,37780,37782,37784,37786,37788,37790,37792,37794,37796,37798,37800,37802,37804,37806,37808,37810,37812,37814,37816,37818,37820],{"class":43,"line":16907},[41,37777,34584],{"class":275},[41,37779,321],{"class":271},[41,37781,1163],{"class":275},[41,37783,34591],{"class":378},[41,37785,651],{"class":275},[41,37787,34596],{"class":378},[41,37789,651],{"class":275},[41,37791,34601],{"class":378},[41,37793,651],{"class":275},[41,37795,34606],{"class":378},[41,37797,651],{"class":275},[41,37799,34611],{"class":378},[41,37801,651],{"class":275},[41,37803,34616],{"class":378},[41,37805,651],{"class":275},[41,37807,34621],{"class":378},[41,37809,651],{"class":275},[41,37811,34626],{"class":378},[41,37813,651],{"class":275},[41,37815,34631],{"class":378},[41,37817,651],{"class":275},[41,37819,34636],{"class":378},[41,37821,33349],{"class":275},[41,37823,37824,37826],{"class":43,"line":16921},[41,37825,34281],{"class":271},[41,37827,32987],{"class":275},[41,37829,37830],{"class":43,"line":16934},[41,37831,34649],{"class":47},[41,37833,37834,37836,37838,37840],{"class":43,"line":16939},[41,37835,3541],{"class":271},[41,37837,34656],{"class":275},[41,37839,26146],{"class":271},[41,37841,34300],{"class":275},[41,37843,37844,37846,37848],{"class":43,"line":16953},[41,37845,32713],{"class":275},[41,37847,321],{"class":271},[41,37849,32718],{"class":275},[41,37851,37852,37854,37856],{"class":43,"line":16958},[41,37853,32728],{"class":275},[41,37855,321],{"class":271},[41,37857,32733],{"class":275},[41,37859,37860],{"class":43,"line":16964},[41,37861,80],{"emptyLinePlaceholder":79},[41,37863,37864],{"class":43,"line":16969},[41,37865,34685],{"class":47},[41,37867,37868],{"class":43,"line":16983},[41,37869,32978],{"class":275},[41,37871,37872],{"class":43,"line":16988},[41,37873,34694],{"class":47},[41,37875,37876,37878,37880],{"class":43,"line":16993},[41,37877,32763],{"class":275},[41,37879,321],{"class":271},[41,37881,32768],{"class":275},[41,37883,37884],{"class":43,"line":17007},[41,37885,34707],{"class":47},[41,37887,37888,37890,37892,37894,37896,37898,37900],{"class":43,"line":17019},[41,37889,32780],{"class":275},[41,37891,321],{"class":271},[41,37893,32785],{"class":275},[41,37895,32788],{"class":5354},[41,37897,321],{"class":271},[41,37899,26],{"class":58},[41,37901,282],{"class":275},[41,37903,37904],{"class":43,"line":17024},[41,37905,34728],{"class":47},[41,37907,37908,37910,37912],{"class":43,"line":17037},[41,37909,34733],{"class":275},[41,37911,321],{"class":271},[41,37913,34738],{"class":275},[41,37915,37916,37918,37920],{"class":43,"line":17042},[41,37917,34743],{"class":275},[41,37919,321],{"class":271},[41,37921,34748],{"class":275},[41,37923,37924,37926,37928,37930,37932,37934,37936,37938],{"class":43,"line":17047},[41,37925,34753],{"class":58},[41,37927,276],{"class":275},[41,37929,34758],{"class":378},[41,37931,34761],{"class":275},[41,37933,34764],{"class":378},[41,37935,651],{"class":275},[41,37937,34769],{"class":378},[41,37939,34772],{"class":275},[241,37941,37943],{"id":37942},"_22vgg","2.2.VGG",[22136,37945,37947],{"id":37946},"_221原理","2.2.1.原理",[20,37949,37950],{},[1603,37951],{"alt":37,"src":37952},"\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",[20,37954,37955],{},[1603,37956],{"alt":37,"src":37957},"\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",[20,37959,37960],{},[1603,37961],{"alt":37,"src":37962},"\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",[20,37964,37965],{},"参数详细描述：",[20,37967,37968],{},[1603,37969],{"alt":37,"src":37970},"\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",[20,37972,37973],{},[1603,37974],{"alt":37,"src":37975},"\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",[20,37977,37978],{},[1603,37979],{"alt":37,"src":37980},"\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",[20,37982,37983],{},[1603,37984],{"alt":37,"src":37985},"\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",[20,37987,37988],{},[1603,37989],{"alt":37,"src":37990},"\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",[22136,37992,37994],{"id":37993},"_222代码实现","2.2.2.代码实现",[224,37996,37997],{},[227,37998,37999],{},"网络搭建",[32,38001,38003],{"className":30481,"code":38002,"language":30483,"meta":37,"style":37},"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",[24,38004,38005,38011,38023,38033,38043,38047,38064,38072,38091,38096,38101,38113,38151,38156,38192,38196,38225,38230,38235,38246,38282,38286,38322,38326,38354,38358,38363,38374,38410,38414,38450,38454,38490,38494,38522,38526,38531,38542,38579,38583,38619,38623,38659,38663,38691,38695,38700,38711,38747,38751,38787,38791,38827,38831,38859,38863,38868,38879,38884,38889,38894,38915,38919,38931,38935,38947,38951,38955,38960,38965,38980,38985,38995,39000,39015,39020,39039,39044,39053,39058,39068,39073,39078,39092,39097,39111,39119,39123,39127,39135,39146,39157,39168,39179,39190,39201,39207,39211,39216,39229,39249,39255,39264],{"__ignoreMap":37},[41,38006,38007,38009],{"class":43,"line":44},[41,38008,30495],{"class":271},[41,38010,30498],{"class":275},[41,38012,38013,38015,38018,38020],{"class":43,"line":51},[41,38014,30840],{"class":271},[41,38016,38017],{"class":275}," sympy.core.sympify ",[41,38019,30495],{"class":271},[41,38021,38022],{"class":275}," kernS\n",[41,38024,38025,38027,38029,38031],{"class":43,"line":62},[41,38026,30840],{"class":271},[41,38028,30843],{"class":275},[41,38030,30495],{"class":271},[41,38032,30848],{"class":275},[41,38034,38035,38037,38039,38041],{"class":43,"line":70},[41,38036,30840],{"class":271},[41,38038,30860],{"class":275},[41,38040,30495],{"class":271},[41,38042,30865],{"class":275},[41,38044,38045],{"class":43,"line":76},[41,38046,80],{"emptyLinePlaceholder":79},[41,38048,38049,38051,38054,38056,38058,38060,38062],{"class":43,"line":83},[41,38050,14832],{"class":271},[41,38052,38053],{"class":54}," VGG16",[41,38055,276],{"class":275},[41,38057,30881],{"class":54},[41,38059,831],{"class":275},[41,38061,30886],{"class":54},[41,38063,30889],{"class":275},[41,38065,38066,38068,38070],{"class":43,"line":89},[41,38067,30904],{"class":271},[41,38069,30907],{"class":58},[41,38071,30910],{"class":275},[41,38073,38074,38076,38078,38081,38083,38085,38087,38089],{"class":43,"line":96},[41,38075,30920],{"class":58},[41,38077,276],{"class":275},[41,38079,38080],{"class":58},"VGG16",[41,38082,12573],{"class":275},[41,38084,30926],{"class":58},[41,38086,30929],{"class":275},[41,38088,30932],{"class":58},[41,38090,2115],{"class":275},[41,38092,38093],{"class":43,"line":104},[41,38094,38095],{"class":47},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[41,38097,38098],{"class":43,"line":176},[41,38099,38100],{"class":47},"        # 这里用的是灰度图\n",[41,38102,38103,38105,38108,38110],{"class":43,"line":184},[41,38104,30948],{"class":58},[41,38106,38107],{"class":275},".block1",[41,38109,321],{"class":271},[41,38111,38112],{"class":275},"nn.Sequential(\n",[41,38114,38115,38118,38120,38122,38124,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148],{"class":43,"line":1757},[41,38116,38117],{"class":275},"            nn.Conv2d(",[41,38119,30959],{"class":5354},[41,38121,321],{"class":271},[41,38123,26],{"class":58},[41,38125,651],{"class":275},[41,38127,30968],{"class":5354},[41,38129,321],{"class":271},[41,38131,477],{"class":58},[41,38133,651],{"class":275},[41,38135,30977],{"class":5354},[41,38137,321],{"class":271},[41,38139,345],{"class":58},[41,38141,651],{"class":275},[41,38143,30986],{"class":5354},[41,38145,321],{"class":271},[41,38147,26],{"class":58},[41,38149,38150],{"class":275},"),\n",[41,38152,38153],{"class":43,"line":1763},[41,38154,38155],{"class":275},"            nn.ReLU(),\n",[41,38157,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190],{"class":43,"line":1768},[41,38159,38117],{"class":275},[41,38161,30959],{"class":5354},[41,38163,321],{"class":271},[41,38165,477],{"class":58},[41,38167,651],{"class":275},[41,38169,30968],{"class":5354},[41,38171,321],{"class":271},[41,38173,477],{"class":58},[41,38175,651],{"class":275},[41,38177,30977],{"class":5354},[41,38179,321],{"class":271},[41,38181,345],{"class":58},[41,38183,651],{"class":275},[41,38185,30986],{"class":5354},[41,38187,321],{"class":271},[41,38189,26],{"class":58},[41,38191,38150],{"class":275},[41,38193,38194],{"class":43,"line":1782},[41,38195,38155],{"class":275},[41,38197,38198,38201,38203,38205,38207,38209,38211,38213,38215,38217,38219,38221,38223],{"class":43,"line":1787},[41,38199,38200],{"class":275},"            nn.MaxPool2d(",[41,38202,30977],{"class":5354},[41,38204,321],{"class":271},[41,38206,351],{"class":58},[41,38208,651],{"class":275},[41,38210,31032],{"class":5354},[41,38212,321],{"class":271},[41,38214,351],{"class":58},[41,38216,651],{"class":275},[41,38218,30986],{"class":5354},[41,38220,321],{"class":271},[41,38222,465],{"class":58},[41,38224,282],{"class":275},[41,38226,38227],{"class":43,"line":1793},[41,38228,38229],{"class":275},"        )\n",[41,38231,38232],{"class":43,"line":1814},[41,38233,38234],{"class":47},"        # 第二层\n",[41,38236,38237,38239,38242,38244],{"class":43,"line":1819},[41,38238,30948],{"class":58},[41,38240,38241],{"class":275},".block2",[41,38243,321],{"class":271},[41,38245,38112],{"class":275},[41,38247,38248,38250,38252,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280],{"class":43,"line":1833},[41,38249,38117],{"class":275},[41,38251,30959],{"class":5354},[41,38253,321],{"class":271},[41,38255,477],{"class":58},[41,38257,651],{"class":275},[41,38259,30968],{"class":5354},[41,38261,321],{"class":271},[41,38263,32173],{"class":58},[41,38265,651],{"class":275},[41,38267,30977],{"class":5354},[41,38269,321],{"class":271},[41,38271,345],{"class":58},[41,38273,651],{"class":275},[41,38275,30986],{"class":5354},[41,38277,321],{"class":271},[41,38279,26],{"class":58},[41,38281,38150],{"class":275},[41,38283,38284],{"class":43,"line":1838},[41,38285,38155],{"class":275},[41,38287,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320],{"class":43,"line":1867},[41,38289,38117],{"class":275},[41,38291,30959],{"class":5354},[41,38293,321],{"class":271},[41,38295,32173],{"class":58},[41,38297,651],{"class":275},[41,38299,30968],{"class":5354},[41,38301,321],{"class":271},[41,38303,32173],{"class":58},[41,38305,651],{"class":275},[41,38307,30977],{"class":5354},[41,38309,321],{"class":271},[41,38311,345],{"class":58},[41,38313,651],{"class":275},[41,38315,30986],{"class":5354},[41,38317,321],{"class":271},[41,38319,26],{"class":58},[41,38321,38150],{"class":275},[41,38323,38324],{"class":43,"line":1872},[41,38325,38155],{"class":275},[41,38327,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352],{"class":43,"line":1889},[41,38329,38200],{"class":275},[41,38331,30977],{"class":5354},[41,38333,321],{"class":271},[41,38335,351],{"class":58},[41,38337,651],{"class":275},[41,38339,31032],{"class":5354},[41,38341,321],{"class":271},[41,38343,351],{"class":58},[41,38345,651],{"class":275},[41,38347,30986],{"class":5354},[41,38349,321],{"class":271},[41,38351,465],{"class":58},[41,38353,282],{"class":275},[41,38355,38356],{"class":43,"line":1894},[41,38357,38229],{"class":275},[41,38359,38360],{"class":43,"line":1899},[41,38361,38362],{"class":47},"        # 第三层\n",[41,38364,38365,38367,38370,38372],{"class":43,"line":1904},[41,38366,30948],{"class":58},[41,38368,38369],{"class":275},".block3",[41,38371,321],{"class":271},[41,38373,38112],{"class":275},[41,38375,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408],{"class":43,"line":1918},[41,38377,38117],{"class":275},[41,38379,30959],{"class":5354},[41,38381,321],{"class":271},[41,38383,32173],{"class":58},[41,38385,651],{"class":275},[41,38387,30968],{"class":5354},[41,38389,321],{"class":271},[41,38391,34973],{"class":58},[41,38393,651],{"class":275},[41,38395,30977],{"class":5354},[41,38397,321],{"class":271},[41,38399,345],{"class":58},[41,38401,651],{"class":275},[41,38403,30986],{"class":5354},[41,38405,321],{"class":271},[41,38407,26],{"class":58},[41,38409,38150],{"class":275},[41,38411,38412],{"class":43,"line":1923},[41,38413,38155],{"class":275},[41,38415,38416,38418,38420,38422,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446,38448],{"class":43,"line":2715},[41,38417,38117],{"class":275},[41,38419,30959],{"class":5354},[41,38421,321],{"class":271},[41,38423,34973],{"class":58},[41,38425,651],{"class":275},[41,38427,30968],{"class":5354},[41,38429,321],{"class":271},[41,38431,34973],{"class":58},[41,38433,651],{"class":275},[41,38435,30977],{"class":5354},[41,38437,321],{"class":271},[41,38439,345],{"class":58},[41,38441,651],{"class":275},[41,38443,30986],{"class":5354},[41,38445,321],{"class":271},[41,38447,26],{"class":58},[41,38449,38150],{"class":275},[41,38451,38452],{"class":43,"line":2729},[41,38453,38155],{"class":275},[41,38455,38456,38458,38460,38462,38464,38466,38468,38470,38472,38474,38476,38478,38480,38482,38484,38486,38488],{"class":43,"line":2737},[41,38457,38117],{"class":275},[41,38459,30959],{"class":5354},[41,38461,321],{"class":271},[41,38463,34973],{"class":58},[41,38465,651],{"class":275},[41,38467,30968],{"class":5354},[41,38469,321],{"class":271},[41,38471,34973],{"class":58},[41,38473,651],{"class":275},[41,38475,30977],{"class":5354},[41,38477,321],{"class":271},[41,38479,345],{"class":58},[41,38481,651],{"class":275},[41,38483,30986],{"class":5354},[41,38485,321],{"class":271},[41,38487,26],{"class":58},[41,38489,38150],{"class":275},[41,38491,38492],{"class":43,"line":2742},[41,38493,38155],{"class":275},[41,38495,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514,38516,38518,38520],{"class":43,"line":2748},[41,38497,38200],{"class":275},[41,38499,30977],{"class":5354},[41,38501,321],{"class":271},[41,38503,351],{"class":58},[41,38505,651],{"class":275},[41,38507,31032],{"class":5354},[41,38509,321],{"class":271},[41,38511,351],{"class":58},[41,38513,651],{"class":275},[41,38515,30986],{"class":5354},[41,38517,321],{"class":271},[41,38519,465],{"class":58},[41,38521,282],{"class":275},[41,38523,38524],{"class":43,"line":2754},[41,38525,38229],{"class":275},[41,38527,38528],{"class":43,"line":2759},[41,38529,38530],{"class":47},"        # 第四层\n",[41,38532,38533,38535,38538,38540],{"class":43,"line":8086},[41,38534,30948],{"class":58},[41,38536,38537],{"class":275},".block4",[41,38539,321],{"class":271},[41,38541,38112],{"class":275},[41,38543,38544,38546,38548,38550,38552,38554,38556,38558,38561,38563,38565,38567,38569,38571,38573,38575,38577],{"class":43,"line":8110},[41,38545,38117],{"class":275},[41,38547,30959],{"class":5354},[41,38549,321],{"class":271},[41,38551,34973],{"class":58},[41,38553,651],{"class":275},[41,38555,30968],{"class":5354},[41,38557,321],{"class":271},[41,38559,38560],{"class":58},"512",[41,38562,651],{"class":275},[41,38564,30977],{"class":5354},[41,38566,321],{"class":271},[41,38568,345],{"class":58},[41,38570,651],{"class":275},[41,38572,30986],{"class":5354},[41,38574,321],{"class":271},[41,38576,26],{"class":58},[41,38578,38150],{"class":275},[41,38580,38581],{"class":43,"line":8115},[41,38582,38155],{"class":275},[41,38584,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617],{"class":43,"line":8121},[41,38586,38117],{"class":275},[41,38588,30959],{"class":5354},[41,38590,321],{"class":271},[41,38592,38560],{"class":58},[41,38594,651],{"class":275},[41,38596,30968],{"class":5354},[41,38598,321],{"class":271},[41,38600,38560],{"class":58},[41,38602,651],{"class":275},[41,38604,30977],{"class":5354},[41,38606,321],{"class":271},[41,38608,345],{"class":58},[41,38610,651],{"class":275},[41,38612,30986],{"class":5354},[41,38614,321],{"class":271},[41,38616,26],{"class":58},[41,38618,38150],{"class":275},[41,38620,38621],{"class":43,"line":8148},[41,38622,38155],{"class":275},[41,38624,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657],{"class":43,"line":8153},[41,38626,38117],{"class":275},[41,38628,30959],{"class":5354},[41,38630,321],{"class":271},[41,38632,38560],{"class":58},[41,38634,651],{"class":275},[41,38636,30968],{"class":5354},[41,38638,321],{"class":271},[41,38640,38560],{"class":58},[41,38642,651],{"class":275},[41,38644,30977],{"class":5354},[41,38646,321],{"class":271},[41,38648,345],{"class":58},[41,38650,651],{"class":275},[41,38652,30986],{"class":5354},[41,38654,321],{"class":271},[41,38656,26],{"class":58},[41,38658,38150],{"class":275},[41,38660,38661],{"class":43,"line":8159},[41,38662,38155],{"class":275},[41,38664,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689],{"class":43,"line":8171},[41,38666,38200],{"class":275},[41,38668,30977],{"class":5354},[41,38670,321],{"class":271},[41,38672,351],{"class":58},[41,38674,651],{"class":275},[41,38676,31032],{"class":5354},[41,38678,321],{"class":271},[41,38680,351],{"class":58},[41,38682,651],{"class":275},[41,38684,30986],{"class":5354},[41,38686,321],{"class":271},[41,38688,465],{"class":58},[41,38690,282],{"class":275},[41,38692,38693],{"class":43,"line":8183},[41,38694,38229],{"class":275},[41,38696,38697],{"class":43,"line":8195},[41,38698,38699],{"class":47},"        # 第五层\n",[41,38701,38702,38704,38707,38709],{"class":43,"line":9854},[41,38703,30948],{"class":58},[41,38705,38706],{"class":275},".block5",[41,38708,321],{"class":271},[41,38710,38112],{"class":275},[41,38712,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745],{"class":43,"line":9879},[41,38714,38117],{"class":275},[41,38716,30959],{"class":5354},[41,38718,321],{"class":271},[41,38720,38560],{"class":58},[41,38722,651],{"class":275},[41,38724,30968],{"class":5354},[41,38726,321],{"class":271},[41,38728,38560],{"class":58},[41,38730,651],{"class":275},[41,38732,30977],{"class":5354},[41,38734,321],{"class":271},[41,38736,345],{"class":58},[41,38738,651],{"class":275},[41,38740,30986],{"class":5354},[41,38742,321],{"class":271},[41,38744,26],{"class":58},[41,38746,38150],{"class":275},[41,38748,38749],{"class":43,"line":9902},[41,38750,38155],{"class":275},[41,38752,38753,38755,38757,38759,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783,38785],{"class":43,"line":9926},[41,38754,38117],{"class":275},[41,38756,30959],{"class":5354},[41,38758,321],{"class":271},[41,38760,38560],{"class":58},[41,38762,651],{"class":275},[41,38764,30968],{"class":5354},[41,38766,321],{"class":271},[41,38768,38560],{"class":58},[41,38770,651],{"class":275},[41,38772,30977],{"class":5354},[41,38774,321],{"class":271},[41,38776,345],{"class":58},[41,38778,651],{"class":275},[41,38780,30986],{"class":5354},[41,38782,321],{"class":271},[41,38784,26],{"class":58},[41,38786,38150],{"class":275},[41,38788,38789],{"class":43,"line":9931},[41,38790,38155],{"class":275},[41,38792,38793,38795,38797,38799,38801,38803,38805,38807,38809,38811,38813,38815,38817,38819,38821,38823,38825],{"class":43,"line":9936},[41,38794,38117],{"class":275},[41,38796,30959],{"class":5354},[41,38798,321],{"class":271},[41,38800,38560],{"class":58},[41,38802,651],{"class":275},[41,38804,30968],{"class":5354},[41,38806,321],{"class":271},[41,38808,38560],{"class":58},[41,38810,651],{"class":275},[41,38812,30977],{"class":5354},[41,38814,321],{"class":271},[41,38816,345],{"class":58},[41,38818,651],{"class":275},[41,38820,30986],{"class":5354},[41,38822,321],{"class":271},[41,38824,26],{"class":58},[41,38826,38150],{"class":275},[41,38828,38829],{"class":43,"line":9941},[41,38830,38155],{"class":275},[41,38832,38833,38835,38837,38839,38841,38843,38845,38847,38849,38851,38853,38855,38857],{"class":43,"line":9950},[41,38834,38200],{"class":275},[41,38836,30977],{"class":5354},[41,38838,321],{"class":271},[41,38840,351],{"class":58},[41,38842,651],{"class":275},[41,38844,31032],{"class":5354},[41,38846,321],{"class":271},[41,38848,351],{"class":58},[41,38850,651],{"class":275},[41,38852,30986],{"class":5354},[41,38854,321],{"class":271},[41,38856,465],{"class":58},[41,38858,282],{"class":275},[41,38860,38861],{"class":43,"line":9955},[41,38862,38229],{"class":275},[41,38864,38865],{"class":43,"line":9961},[41,38866,38867],{"class":47},"        # 全连接层\n",[41,38869,38870,38872,38875,38877],{"class":43,"line":9982},[41,38871,30948],{"class":58},[41,38873,38874],{"class":275},".block6",[41,38876,321],{"class":271},[41,38878,38112],{"class":275},[41,38880,38881],{"class":43,"line":9988},[41,38882,38883],{"class":47},"            # 平展操作\n",[41,38885,38886],{"class":43,"line":10002},[41,38887,38888],{"class":47},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[41,38890,38891],{"class":43,"line":10008},[41,38892,38893],{"class":275},"            nn.Flatten(),\n",[41,38895,38896,38899,38901,38903,38905,38907,38909,38911,38913],{"class":43,"line":10035},[41,38897,38898],{"class":275},"            nn.Linear(",[41,38900,642],{"class":58},[41,38902,728],{"class":271},[41,38904,642],{"class":58},[41,38906,728],{"class":271},[41,38908,38560],{"class":58},[41,38910,651],{"class":275},[41,38912,34973],{"class":58},[41,38914,38150],{"class":275},[41,38916,38917],{"class":43,"line":10044},[41,38918,38155],{"class":275},[41,38920,38921,38923,38925,38927,38929],{"class":43,"line":10050},[41,38922,38898],{"class":275},[41,38924,34973],{"class":58},[41,38926,651],{"class":275},[41,38928,32173],{"class":58},[41,38930,38150],{"class":275},[41,38932,38933],{"class":43,"line":10058},[41,38934,38155],{"class":275},[41,38936,38937,38939,38941,38943,38945],{"class":43,"line":10063},[41,38938,38898],{"class":275},[41,38940,32173],{"class":58},[41,38942,651],{"class":275},[41,38944,719],{"class":58},[41,38946,282],{"class":275},[41,38948,38949],{"class":43,"line":16742},[41,38950,38229],{"class":275},[41,38952,38953],{"class":43,"line":16748},[41,38954,80],{"emptyLinePlaceholder":79},[41,38956,38957],{"class":43,"line":16771},[41,38958,38959],{"class":47},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[41,38961,38962],{"class":43,"line":16777},[41,38963,38964],{"class":47},"        # 循环遍历模型\n",[41,38966,38967,38969,38972,38974,38977],{"class":43,"line":16800},[41,38968,3541],{"class":271},[41,38970,38971],{"class":275}," m ",[41,38973,26146],{"class":271},[41,38975,38976],{"class":58}," self",[41,38978,38979],{"class":275},".modules():\n",[41,38981,38982],{"class":43,"line":16814},[41,38983,38984],{"class":47},"            # print(m)\n",[41,38986,38987,38989,38992],{"class":43,"line":16834},[41,38988,4780],{"class":271},[41,38990,38991],{"class":58}," isinstance",[41,38993,38994],{"class":275},"(m,nn.Conv2d):\n",[41,38996,38997],{"class":43,"line":16840},[41,38998,38999],{"class":47},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[41,39001,39002,39005,39008,39010,39013],{"class":43,"line":16851},[41,39003,39004],{"class":275},"                nn.init.kaiming_normal_(m.weight,",[41,39006,39007],{"class":5354},"nonlinearity",[41,39009,321],{"class":271},[41,39011,39012],{"class":378},"'relu'",[41,39014,282],{"class":275},[41,39016,39017],{"class":43,"line":16874},[41,39018,39019],{"class":47},"                # 判断b参数是否存在\n",[41,39021,39022,39025,39028,39031,39034,39037],{"class":43,"line":16896},[41,39023,39024],{"class":271},"                if",[41,39026,39027],{"class":275}," m.bias ",[41,39029,39030],{"class":271},"is",[41,39032,39033],{"class":271}," not",[41,39035,39036],{"class":58}," None",[41,39038,3877],{"class":275},[41,39040,39041],{"class":43,"line":16901},[41,39042,39043],{"class":47},"                    # 如果参数不存在的化初始化b=0\n",[41,39045,39046,39049,39051],{"class":43,"line":16907},[41,39047,39048],{"class":275},"                    nn.init.constant_(m.bias,",[41,39050,465],{"class":58},[41,39052,282],{"class":275},[41,39054,39055],{"class":43,"line":16921},[41,39056,39057],{"class":47},"            # 全连接层初始化\n",[41,39059,39060,39063,39065],{"class":43,"line":16934},[41,39061,39062],{"class":271},"            elif",[41,39064,38991],{"class":58},[41,39066,39067],{"class":275},"(m,nn.Linear):\n",[41,39069,39070],{"class":43,"line":16939},[41,39071,39072],{"class":47},"                # 这个初始化方法是利用的是正太分布的方式\n",[41,39074,39075],{"class":43,"line":16953},[41,39076,39077],{"class":47},"                # 均值为0，方差为0.01\n",[41,39079,39080,39083,39085,39087,39090],{"class":43,"line":16958},[41,39081,39082],{"class":275},"                nn.init.normal_(m.weight,",[41,39084,465],{"class":58},[41,39086,651],{"class":275},[41,39088,39089],{"class":58},"0.01",[41,39091,282],{"class":275},[41,39093,39094],{"class":43,"line":16964},[41,39095,39096],{"class":47},"                # 初始化b参数\n",[41,39098,39099,39101,39103,39105,39107,39109],{"class":43,"line":16969},[41,39100,39024],{"class":271},[41,39102,39027],{"class":275},[41,39104,39030],{"class":271},[41,39106,39033],{"class":271},[41,39108,39036],{"class":58},[41,39110,3877],{"class":275},[41,39112,39113,39115,39117],{"class":43,"line":16983},[41,39114,39048],{"class":275},[41,39116,465],{"class":58},[41,39118,282],{"class":275},[41,39120,39121],{"class":43,"line":16988},[41,39122,80],{"emptyLinePlaceholder":79},[41,39124,39125],{"class":43,"line":16993},[41,39126,35268],{"class":47},[41,39128,39129,39131,39133],{"class":43,"line":17007},[41,39130,30904],{"class":271},[41,39132,31196],{"class":54},[41,39134,31199],{"class":275},[41,39136,39137,39139,39141,39143],{"class":43,"line":17019},[41,39138,31204],{"class":275},[41,39140,321],{"class":271},[41,39142,30926],{"class":58},[41,39144,39145],{"class":275},".block1(x)\n",[41,39147,39148,39150,39152,39154],{"class":43,"line":17024},[41,39149,31204],{"class":275},[41,39151,321],{"class":271},[41,39153,30926],{"class":58},[41,39155,39156],{"class":275},".block2(x)\n",[41,39158,39159,39161,39163,39165],{"class":43,"line":17037},[41,39160,31204],{"class":275},[41,39162,321],{"class":271},[41,39164,30926],{"class":58},[41,39166,39167],{"class":275},".block3(x)\n",[41,39169,39170,39172,39174,39176],{"class":43,"line":17042},[41,39171,31204],{"class":275},[41,39173,321],{"class":271},[41,39175,30926],{"class":58},[41,39177,39178],{"class":275},".block4(x)\n",[41,39180,39181,39183,39185,39187],{"class":43,"line":17047},[41,39182,31204],{"class":275},[41,39184,321],{"class":271},[41,39186,30926],{"class":58},[41,39188,39189],{"class":275},".block5(x)\n",[41,39191,39192,39194,39196,39198],{"class":43,"line":17052},[41,39193,31204],{"class":275},[41,39195,321],{"class":271},[41,39197,30926],{"class":58},[41,39199,39200],{"class":275},".block6(x)\n",[41,39202,39203,39205],{"class":43,"line":17065},[41,39204,14890],{"class":271},[41,39206,31312],{"class":275},[41,39208,39209],{"class":43,"line":17070},[41,39210,80],{"emptyLinePlaceholder":79},[41,39212,39213],{"class":43,"line":32736},[41,39214,39215],{"class":47},"# 验证模型\n",[41,39217,39218,39220,39222,39224,39227],{"class":43,"line":32742},[41,39219,1672],{"class":271},[41,39221,31323],{"class":58},[41,39223,3087],{"class":271},[41,39225,39226],{"class":378},"'__main__'",[41,39228,3877],{"class":275},[41,39230,39231,39233,39235,39237,39239,39241,39243,39245,39247],{"class":43,"line":32748},[41,39232,31340],{"class":275},[41,39234,321],{"class":271},[41,39236,30554],{"class":275},[41,39238,31347],{"class":378},[41,39240,1844],{"class":271},[41,39242,31352],{"class":275},[41,39244,1841],{"class":271},[41,39246,30579],{"class":378},[41,39248,282],{"class":275},[41,39250,39251,39253],{"class":43,"line":32754},[41,39252,31402],{"class":58},[41,39254,30588],{"class":275},[41,39256,39257,39259,39261],{"class":43,"line":32760},[41,39258,31392],{"class":275},[41,39260,321],{"class":271},[41,39262,39263],{"class":275},"VGG16().to(device)\n",[41,39265,39266,39268,39270,39272,39274,39276,39278,39280],{"class":43,"line":32771},[41,39267,31402],{"class":58},[41,39269,31405],{"class":275},[41,39271,26],{"class":58},[41,39273,651],{"class":275},[41,39275,31604],{"class":58},[41,39277,651],{"class":275},[41,39279,31604],{"class":58},[41,39281,31418],{"class":275},[224,39283,39284],{"start":51},[227,39285,39286],{},"训练代码",[20,39288,39289],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[20,39291,39292],{},"解决方式:",[20,39294,39295],{},"①权重初始化",[32,39297,39299],{"className":30481,"code":39298,"language":30483,"meta":37,"style":37},"# 权重初始化,保证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",[24,39300,39301,39306,39311,39323,39328,39336,39341,39354,39359,39373,39378,39387,39392,39401,39406,39411,39424,39429,39443],{"__ignoreMap":37},[41,39302,39303],{"class":43,"line":44},[41,39304,39305],{"class":47},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[41,39307,39308],{"class":43,"line":51},[41,39309,39310],{"class":47},"# 循环遍历模型\n",[41,39312,39313,39315,39317,39319,39321],{"class":43,"line":62},[41,39314,3163],{"class":271},[41,39316,38971],{"class":275},[41,39318,26146],{"class":271},[41,39320,38976],{"class":58},[41,39322,38979],{"class":275},[41,39324,39325],{"class":43,"line":70},[41,39326,39327],{"class":47},"    # print(m)\n",[41,39329,39330,39332,39334],{"class":43,"line":76},[41,39331,3239],{"class":271},[41,39333,38991],{"class":58},[41,39335,38994],{"class":275},[41,39337,39338],{"class":43,"line":83},[41,39339,39340],{"class":47},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[41,39342,39343,39346,39348,39350,39352],{"class":43,"line":89},[41,39344,39345],{"class":275},"        nn.init.kaiming_normal_(m.weight,",[41,39347,39007],{"class":5354},[41,39349,321],{"class":271},[41,39351,39012],{"class":378},[41,39353,282],{"class":275},[41,39355,39356],{"class":43,"line":96},[41,39357,39358],{"class":47},"        # 判断b参数是否存在\n",[41,39360,39361,39363,39365,39367,39369,39371],{"class":43,"line":104},[41,39362,2635],{"class":271},[41,39364,39027],{"class":275},[41,39366,39030],{"class":271},[41,39368,39033],{"class":271},[41,39370,39036],{"class":58},[41,39372,3877],{"class":275},[41,39374,39375],{"class":43,"line":176},[41,39376,39377],{"class":47},"            # 如果参数不存在的化初始化b=0\n",[41,39379,39380,39383,39385],{"class":43,"line":184},[41,39381,39382],{"class":275},"            nn.init.constant_(m.bias,",[41,39384,465],{"class":58},[41,39386,282],{"class":275},[41,39388,39389],{"class":43,"line":1757},[41,39390,39391],{"class":47},"    # 全连接层初始化\n",[41,39393,39394,39397,39399],{"class":43,"line":1763},[41,39395,39396],{"class":271},"    elif",[41,39398,38991],{"class":58},[41,39400,39067],{"class":275},[41,39402,39403],{"class":43,"line":1768},[41,39404,39405],{"class":47},"        # 这个初始化方法是利用的是正太分布的方式\n",[41,39407,39408],{"class":43,"line":1782},[41,39409,39410],{"class":47},"        # 均值为0，方差为0.01\n",[41,39412,39413,39416,39418,39420,39422],{"class":43,"line":1787},[41,39414,39415],{"class":275},"        nn.init.normal_(m.weight,",[41,39417,465],{"class":58},[41,39419,651],{"class":275},[41,39421,39089],{"class":58},[41,39423,282],{"class":275},[41,39425,39426],{"class":43,"line":1793},[41,39427,39428],{"class":47},"        # 初始化b参数\n",[41,39430,39431,39433,39435,39437,39439,39441],{"class":43,"line":1814},[41,39432,2635],{"class":271},[41,39434,39027],{"class":275},[41,39436,39030],{"class":271},[41,39438,39033],{"class":271},[41,39440,39036],{"class":58},[41,39442,3877],{"class":275},[41,39444,39445,39447,39449],{"class":43,"line":1819},[41,39446,39382],{"class":275},[41,39448,465],{"class":58},[41,39450,282],{"class":275},[20,39452,39453],{},"②尽可能地增加批次",[20,39455,39456],{},"训练完整代码：",[32,39458,39459],{"className":30481,"code":38002,"language":30483,"meta":37,"style":37},[24,39460,39461,39467,39477,39487,39497,39501,39517,39525,39543,39547,39551,39561,39597,39601,39637,39641,39669,39673,39677,39687,39723,39727,39763,39767,39795,39799,39803,39813,39849,39853,39889,39893,39929,39933,39961,39965,39969,39979,40015,40019,40055,40059,40095,40099,40127,40131,40135,40145,40181,40185,40221,40225,40261,40265,40293,40297,40301,40311,40315,40319,40323,40343,40347,40359,40363,40375,40379,40383,40387,40391,40403,40407,40415,40419,40431,40435,40449,40453,40461,40465,40473,40477,40481,40493,40497,40511,40519,40523,40527,40535,40545,40555,40565,40575,40585,40595,40601,40605,40609,40621,40641,40647,40655],{"__ignoreMap":37},[41,39462,39463,39465],{"class":43,"line":44},[41,39464,30495],{"class":271},[41,39466,30498],{"class":275},[41,39468,39469,39471,39473,39475],{"class":43,"line":51},[41,39470,30840],{"class":271},[41,39472,38017],{"class":275},[41,39474,30495],{"class":271},[41,39476,38022],{"class":275},[41,39478,39479,39481,39483,39485],{"class":43,"line":62},[41,39480,30840],{"class":271},[41,39482,30843],{"class":275},[41,39484,30495],{"class":271},[41,39486,30848],{"class":275},[41,39488,39489,39491,39493,39495],{"class":43,"line":70},[41,39490,30840],{"class":271},[41,39492,30860],{"class":275},[41,39494,30495],{"class":271},[41,39496,30865],{"class":275},[41,39498,39499],{"class":43,"line":76},[41,39500,80],{"emptyLinePlaceholder":79},[41,39502,39503,39505,39507,39509,39511,39513,39515],{"class":43,"line":83},[41,39504,14832],{"class":271},[41,39506,38053],{"class":54},[41,39508,276],{"class":275},[41,39510,30881],{"class":54},[41,39512,831],{"class":275},[41,39514,30886],{"class":54},[41,39516,30889],{"class":275},[41,39518,39519,39521,39523],{"class":43,"line":89},[41,39520,30904],{"class":271},[41,39522,30907],{"class":58},[41,39524,30910],{"class":275},[41,39526,39527,39529,39531,39533,39535,39537,39539,39541],{"class":43,"line":96},[41,39528,30920],{"class":58},[41,39530,276],{"class":275},[41,39532,38080],{"class":58},[41,39534,12573],{"class":275},[41,39536,30926],{"class":58},[41,39538,30929],{"class":275},[41,39540,30932],{"class":58},[41,39542,2115],{"class":275},[41,39544,39545],{"class":43,"line":104},[41,39546,38095],{"class":47},[41,39548,39549],{"class":43,"line":176},[41,39550,38100],{"class":47},[41,39552,39553,39555,39557,39559],{"class":43,"line":184},[41,39554,30948],{"class":58},[41,39556,38107],{"class":275},[41,39558,321],{"class":271},[41,39560,38112],{"class":275},[41,39562,39563,39565,39567,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595],{"class":43,"line":1757},[41,39564,38117],{"class":275},[41,39566,30959],{"class":5354},[41,39568,321],{"class":271},[41,39570,26],{"class":58},[41,39572,651],{"class":275},[41,39574,30968],{"class":5354},[41,39576,321],{"class":271},[41,39578,477],{"class":58},[41,39580,651],{"class":275},[41,39582,30977],{"class":5354},[41,39584,321],{"class":271},[41,39586,345],{"class":58},[41,39588,651],{"class":275},[41,39590,30986],{"class":5354},[41,39592,321],{"class":271},[41,39594,26],{"class":58},[41,39596,38150],{"class":275},[41,39598,39599],{"class":43,"line":1763},[41,39600,38155],{"class":275},[41,39602,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635],{"class":43,"line":1768},[41,39604,38117],{"class":275},[41,39606,30959],{"class":5354},[41,39608,321],{"class":271},[41,39610,477],{"class":58},[41,39612,651],{"class":275},[41,39614,30968],{"class":5354},[41,39616,321],{"class":271},[41,39618,477],{"class":58},[41,39620,651],{"class":275},[41,39622,30977],{"class":5354},[41,39624,321],{"class":271},[41,39626,345],{"class":58},[41,39628,651],{"class":275},[41,39630,30986],{"class":5354},[41,39632,321],{"class":271},[41,39634,26],{"class":58},[41,39636,38150],{"class":275},[41,39638,39639],{"class":43,"line":1782},[41,39640,38155],{"class":275},[41,39642,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667],{"class":43,"line":1787},[41,39644,38200],{"class":275},[41,39646,30977],{"class":5354},[41,39648,321],{"class":271},[41,39650,351],{"class":58},[41,39652,651],{"class":275},[41,39654,31032],{"class":5354},[41,39656,321],{"class":271},[41,39658,351],{"class":58},[41,39660,651],{"class":275},[41,39662,30986],{"class":5354},[41,39664,321],{"class":271},[41,39666,465],{"class":58},[41,39668,282],{"class":275},[41,39670,39671],{"class":43,"line":1793},[41,39672,38229],{"class":275},[41,39674,39675],{"class":43,"line":1814},[41,39676,38234],{"class":47},[41,39678,39679,39681,39683,39685],{"class":43,"line":1819},[41,39680,30948],{"class":58},[41,39682,38241],{"class":275},[41,39684,321],{"class":271},[41,39686,38112],{"class":275},[41,39688,39689,39691,39693,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721],{"class":43,"line":1833},[41,39690,38117],{"class":275},[41,39692,30959],{"class":5354},[41,39694,321],{"class":271},[41,39696,477],{"class":58},[41,39698,651],{"class":275},[41,39700,30968],{"class":5354},[41,39702,321],{"class":271},[41,39704,32173],{"class":58},[41,39706,651],{"class":275},[41,39708,30977],{"class":5354},[41,39710,321],{"class":271},[41,39712,345],{"class":58},[41,39714,651],{"class":275},[41,39716,30986],{"class":5354},[41,39718,321],{"class":271},[41,39720,26],{"class":58},[41,39722,38150],{"class":275},[41,39724,39725],{"class":43,"line":1838},[41,39726,38155],{"class":275},[41,39728,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761],{"class":43,"line":1867},[41,39730,38117],{"class":275},[41,39732,30959],{"class":5354},[41,39734,321],{"class":271},[41,39736,32173],{"class":58},[41,39738,651],{"class":275},[41,39740,30968],{"class":5354},[41,39742,321],{"class":271},[41,39744,32173],{"class":58},[41,39746,651],{"class":275},[41,39748,30977],{"class":5354},[41,39750,321],{"class":271},[41,39752,345],{"class":58},[41,39754,651],{"class":275},[41,39756,30986],{"class":5354},[41,39758,321],{"class":271},[41,39760,26],{"class":58},[41,39762,38150],{"class":275},[41,39764,39765],{"class":43,"line":1872},[41,39766,38155],{"class":275},[41,39768,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793],{"class":43,"line":1889},[41,39770,38200],{"class":275},[41,39772,30977],{"class":5354},[41,39774,321],{"class":271},[41,39776,351],{"class":58},[41,39778,651],{"class":275},[41,39780,31032],{"class":5354},[41,39782,321],{"class":271},[41,39784,351],{"class":58},[41,39786,651],{"class":275},[41,39788,30986],{"class":5354},[41,39790,321],{"class":271},[41,39792,465],{"class":58},[41,39794,282],{"class":275},[41,39796,39797],{"class":43,"line":1894},[41,39798,38229],{"class":275},[41,39800,39801],{"class":43,"line":1899},[41,39802,38362],{"class":47},[41,39804,39805,39807,39809,39811],{"class":43,"line":1904},[41,39806,30948],{"class":58},[41,39808,38369],{"class":275},[41,39810,321],{"class":271},[41,39812,38112],{"class":275},[41,39814,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847],{"class":43,"line":1918},[41,39816,38117],{"class":275},[41,39818,30959],{"class":5354},[41,39820,321],{"class":271},[41,39822,32173],{"class":58},[41,39824,651],{"class":275},[41,39826,30968],{"class":5354},[41,39828,321],{"class":271},[41,39830,34973],{"class":58},[41,39832,651],{"class":275},[41,39834,30977],{"class":5354},[41,39836,321],{"class":271},[41,39838,345],{"class":58},[41,39840,651],{"class":275},[41,39842,30986],{"class":5354},[41,39844,321],{"class":271},[41,39846,26],{"class":58},[41,39848,38150],{"class":275},[41,39850,39851],{"class":43,"line":1923},[41,39852,38155],{"class":275},[41,39854,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887],{"class":43,"line":2715},[41,39856,38117],{"class":275},[41,39858,30959],{"class":5354},[41,39860,321],{"class":271},[41,39862,34973],{"class":58},[41,39864,651],{"class":275},[41,39866,30968],{"class":5354},[41,39868,321],{"class":271},[41,39870,34973],{"class":58},[41,39872,651],{"class":275},[41,39874,30977],{"class":5354},[41,39876,321],{"class":271},[41,39878,345],{"class":58},[41,39880,651],{"class":275},[41,39882,30986],{"class":5354},[41,39884,321],{"class":271},[41,39886,26],{"class":58},[41,39888,38150],{"class":275},[41,39890,39891],{"class":43,"line":2729},[41,39892,38155],{"class":275},[41,39894,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927],{"class":43,"line":2737},[41,39896,38117],{"class":275},[41,39898,30959],{"class":5354},[41,39900,321],{"class":271},[41,39902,34973],{"class":58},[41,39904,651],{"class":275},[41,39906,30968],{"class":5354},[41,39908,321],{"class":271},[41,39910,34973],{"class":58},[41,39912,651],{"class":275},[41,39914,30977],{"class":5354},[41,39916,321],{"class":271},[41,39918,345],{"class":58},[41,39920,651],{"class":275},[41,39922,30986],{"class":5354},[41,39924,321],{"class":271},[41,39926,26],{"class":58},[41,39928,38150],{"class":275},[41,39930,39931],{"class":43,"line":2742},[41,39932,38155],{"class":275},[41,39934,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959],{"class":43,"line":2748},[41,39936,38200],{"class":275},[41,39938,30977],{"class":5354},[41,39940,321],{"class":271},[41,39942,351],{"class":58},[41,39944,651],{"class":275},[41,39946,31032],{"class":5354},[41,39948,321],{"class":271},[41,39950,351],{"class":58},[41,39952,651],{"class":275},[41,39954,30986],{"class":5354},[41,39956,321],{"class":271},[41,39958,465],{"class":58},[41,39960,282],{"class":275},[41,39962,39963],{"class":43,"line":2754},[41,39964,38229],{"class":275},[41,39966,39967],{"class":43,"line":2759},[41,39968,38530],{"class":47},[41,39970,39971,39973,39975,39977],{"class":43,"line":8086},[41,39972,30948],{"class":58},[41,39974,38537],{"class":275},[41,39976,321],{"class":271},[41,39978,38112],{"class":275},[41,39980,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013],{"class":43,"line":8110},[41,39982,38117],{"class":275},[41,39984,30959],{"class":5354},[41,39986,321],{"class":271},[41,39988,34973],{"class":58},[41,39990,651],{"class":275},[41,39992,30968],{"class":5354},[41,39994,321],{"class":271},[41,39996,38560],{"class":58},[41,39998,651],{"class":275},[41,40000,30977],{"class":5354},[41,40002,321],{"class":271},[41,40004,345],{"class":58},[41,40006,651],{"class":275},[41,40008,30986],{"class":5354},[41,40010,321],{"class":271},[41,40012,26],{"class":58},[41,40014,38150],{"class":275},[41,40016,40017],{"class":43,"line":8115},[41,40018,38155],{"class":275},[41,40020,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053],{"class":43,"line":8121},[41,40022,38117],{"class":275},[41,40024,30959],{"class":5354},[41,40026,321],{"class":271},[41,40028,38560],{"class":58},[41,40030,651],{"class":275},[41,40032,30968],{"class":5354},[41,40034,321],{"class":271},[41,40036,38560],{"class":58},[41,40038,651],{"class":275},[41,40040,30977],{"class":5354},[41,40042,321],{"class":271},[41,40044,345],{"class":58},[41,40046,651],{"class":275},[41,40048,30986],{"class":5354},[41,40050,321],{"class":271},[41,40052,26],{"class":58},[41,40054,38150],{"class":275},[41,40056,40057],{"class":43,"line":8148},[41,40058,38155],{"class":275},[41,40060,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093],{"class":43,"line":8153},[41,40062,38117],{"class":275},[41,40064,30959],{"class":5354},[41,40066,321],{"class":271},[41,40068,38560],{"class":58},[41,40070,651],{"class":275},[41,40072,30968],{"class":5354},[41,40074,321],{"class":271},[41,40076,38560],{"class":58},[41,40078,651],{"class":275},[41,40080,30977],{"class":5354},[41,40082,321],{"class":271},[41,40084,345],{"class":58},[41,40086,651],{"class":275},[41,40088,30986],{"class":5354},[41,40090,321],{"class":271},[41,40092,26],{"class":58},[41,40094,38150],{"class":275},[41,40096,40097],{"class":43,"line":8159},[41,40098,38155],{"class":275},[41,40100,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125],{"class":43,"line":8171},[41,40102,38200],{"class":275},[41,40104,30977],{"class":5354},[41,40106,321],{"class":271},[41,40108,351],{"class":58},[41,40110,651],{"class":275},[41,40112,31032],{"class":5354},[41,40114,321],{"class":271},[41,40116,351],{"class":58},[41,40118,651],{"class":275},[41,40120,30986],{"class":5354},[41,40122,321],{"class":271},[41,40124,465],{"class":58},[41,40126,282],{"class":275},[41,40128,40129],{"class":43,"line":8183},[41,40130,38229],{"class":275},[41,40132,40133],{"class":43,"line":8195},[41,40134,38699],{"class":47},[41,40136,40137,40139,40141,40143],{"class":43,"line":9854},[41,40138,30948],{"class":58},[41,40140,38706],{"class":275},[41,40142,321],{"class":271},[41,40144,38112],{"class":275},[41,40146,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179],{"class":43,"line":9879},[41,40148,38117],{"class":275},[41,40150,30959],{"class":5354},[41,40152,321],{"class":271},[41,40154,38560],{"class":58},[41,40156,651],{"class":275},[41,40158,30968],{"class":5354},[41,40160,321],{"class":271},[41,40162,38560],{"class":58},[41,40164,651],{"class":275},[41,40166,30977],{"class":5354},[41,40168,321],{"class":271},[41,40170,345],{"class":58},[41,40172,651],{"class":275},[41,40174,30986],{"class":5354},[41,40176,321],{"class":271},[41,40178,26],{"class":58},[41,40180,38150],{"class":275},[41,40182,40183],{"class":43,"line":9902},[41,40184,38155],{"class":275},[41,40186,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219],{"class":43,"line":9926},[41,40188,38117],{"class":275},[41,40190,30959],{"class":5354},[41,40192,321],{"class":271},[41,40194,38560],{"class":58},[41,40196,651],{"class":275},[41,40198,30968],{"class":5354},[41,40200,321],{"class":271},[41,40202,38560],{"class":58},[41,40204,651],{"class":275},[41,40206,30977],{"class":5354},[41,40208,321],{"class":271},[41,40210,345],{"class":58},[41,40212,651],{"class":275},[41,40214,30986],{"class":5354},[41,40216,321],{"class":271},[41,40218,26],{"class":58},[41,40220,38150],{"class":275},[41,40222,40223],{"class":43,"line":9931},[41,40224,38155],{"class":275},[41,40226,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259],{"class":43,"line":9936},[41,40228,38117],{"class":275},[41,40230,30959],{"class":5354},[41,40232,321],{"class":271},[41,40234,38560],{"class":58},[41,40236,651],{"class":275},[41,40238,30968],{"class":5354},[41,40240,321],{"class":271},[41,40242,38560],{"class":58},[41,40244,651],{"class":275},[41,40246,30977],{"class":5354},[41,40248,321],{"class":271},[41,40250,345],{"class":58},[41,40252,651],{"class":275},[41,40254,30986],{"class":5354},[41,40256,321],{"class":271},[41,40258,26],{"class":58},[41,40260,38150],{"class":275},[41,40262,40263],{"class":43,"line":9941},[41,40264,38155],{"class":275},[41,40266,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289,40291],{"class":43,"line":9950},[41,40268,38200],{"class":275},[41,40270,30977],{"class":5354},[41,40272,321],{"class":271},[41,40274,351],{"class":58},[41,40276,651],{"class":275},[41,40278,31032],{"class":5354},[41,40280,321],{"class":271},[41,40282,351],{"class":58},[41,40284,651],{"class":275},[41,40286,30986],{"class":5354},[41,40288,321],{"class":271},[41,40290,465],{"class":58},[41,40292,282],{"class":275},[41,40294,40295],{"class":43,"line":9955},[41,40296,38229],{"class":275},[41,40298,40299],{"class":43,"line":9961},[41,40300,38867],{"class":47},[41,40302,40303,40305,40307,40309],{"class":43,"line":9982},[41,40304,30948],{"class":58},[41,40306,38874],{"class":275},[41,40308,321],{"class":271},[41,40310,38112],{"class":275},[41,40312,40313],{"class":43,"line":9988},[41,40314,38883],{"class":47},[41,40316,40317],{"class":43,"line":10002},[41,40318,38888],{"class":47},[41,40320,40321],{"class":43,"line":10008},[41,40322,38893],{"class":275},[41,40324,40325,40327,40329,40331,40333,40335,40337,40339,40341],{"class":43,"line":10035},[41,40326,38898],{"class":275},[41,40328,642],{"class":58},[41,40330,728],{"class":271},[41,40332,642],{"class":58},[41,40334,728],{"class":271},[41,40336,38560],{"class":58},[41,40338,651],{"class":275},[41,40340,34973],{"class":58},[41,40342,38150],{"class":275},[41,40344,40345],{"class":43,"line":10044},[41,40346,38155],{"class":275},[41,40348,40349,40351,40353,40355,40357],{"class":43,"line":10050},[41,40350,38898],{"class":275},[41,40352,34973],{"class":58},[41,40354,651],{"class":275},[41,40356,32173],{"class":58},[41,40358,38150],{"class":275},[41,40360,40361],{"class":43,"line":10058},[41,40362,38155],{"class":275},[41,40364,40365,40367,40369,40371,40373],{"class":43,"line":10063},[41,40366,38898],{"class":275},[41,40368,32173],{"class":58},[41,40370,651],{"class":275},[41,40372,719],{"class":58},[41,40374,282],{"class":275},[41,40376,40377],{"class":43,"line":16742},[41,40378,38229],{"class":275},[41,40380,40381],{"class":43,"line":16748},[41,40382,80],{"emptyLinePlaceholder":79},[41,40384,40385],{"class":43,"line":16771},[41,40386,38959],{"class":47},[41,40388,40389],{"class":43,"line":16777},[41,40390,38964],{"class":47},[41,40392,40393,40395,40397,40399,40401],{"class":43,"line":16800},[41,40394,3541],{"class":271},[41,40396,38971],{"class":275},[41,40398,26146],{"class":271},[41,40400,38976],{"class":58},[41,40402,38979],{"class":275},[41,40404,40405],{"class":43,"line":16814},[41,40406,38984],{"class":47},[41,40408,40409,40411,40413],{"class":43,"line":16834},[41,40410,4780],{"class":271},[41,40412,38991],{"class":58},[41,40414,38994],{"class":275},[41,40416,40417],{"class":43,"line":16840},[41,40418,38999],{"class":47},[41,40420,40421,40423,40425,40427,40429],{"class":43,"line":16851},[41,40422,39004],{"class":275},[41,40424,39007],{"class":5354},[41,40426,321],{"class":271},[41,40428,39012],{"class":378},[41,40430,282],{"class":275},[41,40432,40433],{"class":43,"line":16874},[41,40434,39019],{"class":47},[41,40436,40437,40439,40441,40443,40445,40447],{"class":43,"line":16896},[41,40438,39024],{"class":271},[41,40440,39027],{"class":275},[41,40442,39030],{"class":271},[41,40444,39033],{"class":271},[41,40446,39036],{"class":58},[41,40448,3877],{"class":275},[41,40450,40451],{"class":43,"line":16901},[41,40452,39043],{"class":47},[41,40454,40455,40457,40459],{"class":43,"line":16907},[41,40456,39048],{"class":275},[41,40458,465],{"class":58},[41,40460,282],{"class":275},[41,40462,40463],{"class":43,"line":16921},[41,40464,39057],{"class":47},[41,40466,40467,40469,40471],{"class":43,"line":16934},[41,40468,39062],{"class":271},[41,40470,38991],{"class":58},[41,40472,39067],{"class":275},[41,40474,40475],{"class":43,"line":16939},[41,40476,39072],{"class":47},[41,40478,40479],{"class":43,"line":16953},[41,40480,39077],{"class":47},[41,40482,40483,40485,40487,40489,40491],{"class":43,"line":16958},[41,40484,39082],{"class":275},[41,40486,465],{"class":58},[41,40488,651],{"class":275},[41,40490,39089],{"class":58},[41,40492,282],{"class":275},[41,40494,40495],{"class":43,"line":16964},[41,40496,39096],{"class":47},[41,40498,40499,40501,40503,40505,40507,40509],{"class":43,"line":16969},[41,40500,39024],{"class":271},[41,40502,39027],{"class":275},[41,40504,39030],{"class":271},[41,40506,39033],{"class":271},[41,40508,39036],{"class":58},[41,40510,3877],{"class":275},[41,40512,40513,40515,40517],{"class":43,"line":16983},[41,40514,39048],{"class":275},[41,40516,465],{"class":58},[41,40518,282],{"class":275},[41,40520,40521],{"class":43,"line":16988},[41,40522,80],{"emptyLinePlaceholder":79},[41,40524,40525],{"class":43,"line":16993},[41,40526,35268],{"class":47},[41,40528,40529,40531,40533],{"class":43,"line":17007},[41,40530,30904],{"class":271},[41,40532,31196],{"class":54},[41,40534,31199],{"class":275},[41,40536,40537,40539,40541,40543],{"class":43,"line":17019},[41,40538,31204],{"class":275},[41,40540,321],{"class":271},[41,40542,30926],{"class":58},[41,40544,39145],{"class":275},[41,40546,40547,40549,40551,40553],{"class":43,"line":17024},[41,40548,31204],{"class":275},[41,40550,321],{"class":271},[41,40552,30926],{"class":58},[41,40554,39156],{"class":275},[41,40556,40557,40559,40561,40563],{"class":43,"line":17037},[41,40558,31204],{"class":275},[41,40560,321],{"class":271},[41,40562,30926],{"class":58},[41,40564,39167],{"class":275},[41,40566,40567,40569,40571,40573],{"class":43,"line":17042},[41,40568,31204],{"class":275},[41,40570,321],{"class":271},[41,40572,30926],{"class":58},[41,40574,39178],{"class":275},[41,40576,40577,40579,40581,40583],{"class":43,"line":17047},[41,40578,31204],{"class":275},[41,40580,321],{"class":271},[41,40582,30926],{"class":58},[41,40584,39189],{"class":275},[41,40586,40587,40589,40591,40593],{"class":43,"line":17052},[41,40588,31204],{"class":275},[41,40590,321],{"class":271},[41,40592,30926],{"class":58},[41,40594,39200],{"class":275},[41,40596,40597,40599],{"class":43,"line":17065},[41,40598,14890],{"class":271},[41,40600,31312],{"class":275},[41,40602,40603],{"class":43,"line":17070},[41,40604,80],{"emptyLinePlaceholder":79},[41,40606,40607],{"class":43,"line":32736},[41,40608,39215],{"class":47},[41,40610,40611,40613,40615,40617,40619],{"class":43,"line":32742},[41,40612,1672],{"class":271},[41,40614,31323],{"class":58},[41,40616,3087],{"class":271},[41,40618,39226],{"class":378},[41,40620,3877],{"class":275},[41,40622,40623,40625,40627,40629,40631,40633,40635,40637,40639],{"class":43,"line":32748},[41,40624,31340],{"class":275},[41,40626,321],{"class":271},[41,40628,30554],{"class":275},[41,40630,31347],{"class":378},[41,40632,1844],{"class":271},[41,40634,31352],{"class":275},[41,40636,1841],{"class":271},[41,40638,30579],{"class":378},[41,40640,282],{"class":275},[41,40642,40643,40645],{"class":43,"line":32754},[41,40644,31402],{"class":58},[41,40646,30588],{"class":275},[41,40648,40649,40651,40653],{"class":43,"line":32760},[41,40650,31392],{"class":275},[41,40652,321],{"class":271},[41,40654,39263],{"class":275},[41,40656,40657,40659,40661,40663,40665,40667,40669,40671],{"class":43,"line":32771},[41,40658,31402],{"class":58},[41,40660,31405],{"class":275},[41,40662,26],{"class":58},[41,40664,651],{"class":275},[41,40666,31604],{"class":58},[41,40668,651],{"class":275},[41,40670,31604],{"class":58},[41,40672,31418],{"class":275},[224,40674,40675],{"start":62},[227,40676,40677],{},"测试代码",[32,40679,40681],{"className":30481,"code":40680,"language":30483,"meta":37,"style":37},"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",[24,40682,40683,40689,40699,40709,40713,40723,40734,40738,40742,40746,40754,40770,40780,40796,40806,40820,40824,40834,40844,40854,40860,40864,40868,40876,40880,40896,40904,40908,40912,40920,40928,40932,40936,40940,40944,40950,40954,40964,40972,40980,40984,40988,40992,41000,41004,41020,41024,41028,41032,41044,41048,41060,41064,41068,41080,41084,41094,41098,41102,41114,41118,41127,41131,41135,41143,41147,41155,41159,41163,41167,41171,41175,41191,41199,41203,41207,41255,41261,41265,41275,41283,41291,41295,41299,41303,41307,41315,41319,41335,41339,41347,41355],{"__ignoreMap":37},[41,40684,40685,40687],{"class":43,"line":44},[41,40686,30495],{"class":271},[41,40688,30498],{"class":275},[41,40690,40691,40693,40695,40697],{"class":43,"line":51},[41,40692,30495],{"class":271},[41,40694,31518],{"class":275},[41,40696,31486],{"class":271},[41,40698,31523],{"class":275},[41,40700,40701,40703,40705,40707],{"class":43,"line":62},[41,40702,30840],{"class":271},[41,40704,31501],{"class":275},[41,40706,30495],{"class":271},[41,40708,31506],{"class":275},[41,40710,40711],{"class":43,"line":70},[41,40712,34025],{"class":47},[41,40714,40715,40717,40719,40721],{"class":43,"line":76},[41,40716,30840],{"class":271},[41,40718,31471],{"class":275},[41,40720,30495],{"class":271},[41,40722,31476],{"class":275},[41,40724,40725,40727,40729,40731],{"class":43,"line":83},[41,40726,30840],{"class":271},[41,40728,32017],{"class":275},[41,40730,30495],{"class":271},[41,40732,40733],{"class":58}," VGG16\n",[41,40735,40736],{"class":43,"line":89},[41,40737,80],{"emptyLinePlaceholder":79},[41,40739,40740],{"class":43,"line":96},[41,40741,80],{"emptyLinePlaceholder":79},[41,40743,40744],{"class":43,"line":104},[41,40745,34054],{"class":47},[41,40747,40748,40750,40752],{"class":43,"line":176},[41,40749,32050],{"class":271},[41,40751,34061],{"class":54},[41,40753,32056],{"class":275},[41,40755,40756,40758,40760,40762,40764,40766,40768],{"class":43,"line":184},[41,40757,34068],{"class":275},[41,40759,321],{"class":271},[41,40761,31558],{"class":275},[41,40763,31561],{"class":5354},[41,40765,321],{"class":271},[41,40767,31566],{"class":378},[41,40769,31569],{"class":275},[41,40771,40772,40774,40776,40778],{"class":43,"line":1757},[41,40773,34085],{"class":5354},[41,40775,321],{"class":271},[41,40777,34090],{"class":58},[41,40779,31569],{"class":275},[41,40781,40782,40784,40786,40788,40790,40792,40794],{"class":43,"line":1763},[41,40783,34097],{"class":5354},[41,40785,321],{"class":271},[41,40787,31596],{"class":275},[41,40789,31599],{"class":5354},[41,40791,321],{"class":271},[41,40793,31604],{"class":58},[41,40795,31607],{"class":275},[41,40797,40798,40800,40802,40804],{"class":43,"line":1768},[41,40799,34114],{"class":5354},[41,40801,321],{"class":271},[41,40803,31579],{"class":58},[41,40805,282],{"class":275},[41,40807,40808,40810,40812,40814,40816,40818],{"class":43,"line":1782},[41,40809,34125],{"class":275},[41,40811,321],{"class":271},[41,40813,31637],{"class":275},[41,40815,31640],{"class":5354},[41,40817,321],{"class":271},[41,40819,34136],{"class":275},[41,40821,40822],{"class":43,"line":1787},[41,40823,34141],{"class":47},[41,40825,40826,40828,40830,40832],{"class":43,"line":1793},[41,40827,34146],{"class":5354},[41,40829,321],{"class":271},[41,40831,26],{"class":58},[41,40833,31569],{"class":275},[41,40835,40836,40838,40840,40842],{"class":43,"line":1814},[41,40837,34157],{"class":5354},[41,40839,321],{"class":271},[41,40841,31579],{"class":58},[41,40843,31569],{"class":275},[41,40845,40846,40848,40850,40852],{"class":43,"line":1819},[41,40847,34168],{"class":5354},[41,40849,321],{"class":271},[41,40851,465],{"class":58},[41,40853,282],{"class":275},[41,40855,40856,40858],{"class":43,"line":1833},[41,40857,4228],{"class":271},[41,40859,34181],{"class":275},[41,40861,40862],{"class":43,"line":1838},[41,40863,80],{"emptyLinePlaceholder":79},[41,40865,40866],{"class":43,"line":1867},[41,40867,34190],{"class":47},[41,40869,40870,40872,40874],{"class":43,"line":1872},[41,40871,32050],{"class":271},[41,40873,34197],{"class":54},[41,40875,34200],{"class":275},[41,40877,40878],{"class":43,"line":1889},[41,40879,34205],{"class":47},[41,40881,40882,40884,40886,40888,40890,40892,40894],{"class":43,"line":1894},[41,40883,31340],{"class":275},[41,40885,321],{"class":271},[41,40887,31347],{"class":378},[41,40889,1844],{"class":271},[41,40891,31352],{"class":275},[41,40893,1841],{"class":271},[41,40895,34222],{"class":378},[41,40897,40898,40900,40902],{"class":43,"line":1899},[41,40899,31392],{"class":275},[41,40901,321],{"class":271},[41,40903,32392],{"class":275},[41,40905,40906],{"class":43,"line":1904},[41,40907,80],{"emptyLinePlaceholder":79},[41,40909,40910],{"class":43,"line":1918},[41,40911,34239],{"class":47},[41,40913,40914,40916,40918],{"class":43,"line":1923},[41,40915,34244],{"class":275},[41,40917,321],{"class":271},[41,40919,32445],{"class":58},[41,40921,40922,40924,40926],{"class":43,"line":2715},[41,40923,34253],{"class":275},[41,40925,321],{"class":271},[41,40927,3223],{"class":58},[41,40929,40930],{"class":43,"line":2729},[41,40931,80],{"emptyLinePlaceholder":79},[41,40933,40934],{"class":43,"line":2737},[41,40935,34266],{"class":47},[41,40937,40938],{"class":43,"line":2742},[41,40939,34271],{"class":47},[41,40941,40942],{"class":43,"line":2748},[41,40943,34276],{"class":47},[41,40945,40946,40948],{"class":43,"line":2754},[41,40947,34281],{"class":271},[41,40949,32987],{"class":275},[41,40951,40952],{"class":43,"line":2759},[41,40953,34288],{"class":47},[41,40955,40956,40958,40960,40962],{"class":43,"line":8086},[41,40957,3541],{"class":271},[41,40959,34295],{"class":275},[41,40961,26146],{"class":271},[41,40963,34300],{"class":275},[41,40965,40966,40968,40970],{"class":43,"line":8110},[41,40967,34305],{"class":275},[41,40969,321],{"class":271},[41,40971,34310],{"class":275},[41,40973,40974,40976,40978],{"class":43,"line":8115},[41,40975,34315],{"class":275},[41,40977,321],{"class":271},[41,40979,34320],{"class":275},[41,40981,40982],{"class":43,"line":8121},[41,40983,34325],{"class":47},[41,40985,40986],{"class":43,"line":8148},[41,40987,32978],{"class":275},[41,40989,40990],{"class":43,"line":8153},[41,40991,34334],{"class":47},[41,40993,40994,40996,40998],{"class":43,"line":8159},[41,40995,32763],{"class":275},[41,40997,321],{"class":271},[41,40999,34343],{"class":275},[41,41001,41002],{"class":43,"line":8171},[41,41003,34348],{"class":47},[41,41005,41006,41008,41010,41012,41014,41016,41018],{"class":43,"line":8183},[41,41007,32780],{"class":275},[41,41009,321],{"class":271},[41,41011,32785],{"class":275},[41,41013,32788],{"class":5354},[41,41015,321],{"class":271},[41,41017,26],{"class":58},[41,41019,282],{"class":275},[41,41021,41022],{"class":43,"line":8195},[41,41023,34369],{"class":47},[41,41025,41026],{"class":43,"line":9854},[41,41027,34374],{"class":47},[41,41029,41030],{"class":43,"line":9879},[41,41031,34379],{"class":47},[41,41033,41034,41036,41038,41040,41042],{"class":43,"line":9902},[41,41035,34384],{"class":275},[41,41037,9615],{"class":271},[41,41039,32890],{"class":275},[41,41041,3087],{"class":271},[41,41043,34393],{"class":275},[41,41045,41046],{"class":43,"line":9926},[41,41047,34398],{"class":47},[41,41049,41050,41052,41054,41056,41058],{"class":43,"line":9931},[41,41051,34403],{"class":275},[41,41053,9615],{"class":271},[41,41055,34408],{"class":275},[41,41057,465],{"class":58},[41,41059,282],{"class":275},[41,41061,41062],{"class":43,"line":9936},[41,41063,80],{"emptyLinePlaceholder":79},[41,41065,41066],{"class":43,"line":9941},[41,41067,34421],{"class":47},[41,41069,41070,41072,41074,41076,41078],{"class":43,"line":9950},[41,41071,34426],{"class":275},[41,41073,321],{"class":271},[41,41075,34431],{"class":275},[41,41077,857],{"class":271},[41,41079,34436],{"class":275},[41,41081,41082],{"class":43,"line":9955},[41,41083,34441],{"class":47},[41,41085,41086,41088,41090,41092],{"class":43,"line":9961},[41,41087,32554],{"class":58},[41,41089,276],{"class":275},[41,41091,34450],{"class":378},[41,41093,34453],{"class":275},[41,41095,41096],{"class":43,"line":9982},[41,41097,80],{"emptyLinePlaceholder":79},[41,41099,41100],{"class":43,"line":9988},[41,41101,34462],{"class":47},[41,41103,41104,41106,41108,41110,41112],{"class":43,"line":10002},[41,41105,1672],{"class":271},[41,41107,31323],{"class":58},[41,41109,3087],{"class":271},[41,41111,31328],{"class":378},[41,41113,3877],{"class":275},[41,41115,41116],{"class":43,"line":10008},[41,41117,34479],{"class":47},[41,41119,41120,41122,41124],{"class":43,"line":10035},[41,41121,31392],{"class":275},[41,41123,321],{"class":271},[41,41125,41126],{"class":275},"VGG16()\n",[41,41128,41129],{"class":43,"line":10044},[41,41130,34492],{"class":47},[41,41132,41133],{"class":43,"line":10050},[41,41134,34497],{"class":47},[41,41136,41137,41139,41141],{"class":43,"line":10058},[41,41138,34502],{"class":275},[41,41140,34505],{"class":378},[41,41142,30600],{"class":275},[41,41144,41145],{"class":43,"line":10063},[41,41146,34512],{"class":47},[41,41148,41149,41151,41153],{"class":43,"line":16742},[41,41150,34125],{"class":275},[41,41152,321],{"class":271},[41,41154,34521],{"class":275},[41,41156,41157],{"class":43,"line":16748},[41,41158,34526],{"class":47},[41,41160,41161],{"class":43,"line":16771},[41,41162,34531],{"class":275},[41,41164,41165],{"class":43,"line":16777},[41,41166,80],{"emptyLinePlaceholder":79},[41,41168,41169],{"class":43,"line":16800},[41,41170,34540],{"class":47},[41,41172,41173],{"class":43,"line":16814},[41,41174,34545],{"class":47},[41,41176,41177,41179,41181,41183,41185,41187,41189],{"class":43,"line":16834},[41,41178,31340],{"class":275},[41,41180,321],{"class":271},[41,41182,31347],{"class":378},[41,41184,1844],{"class":271},[41,41186,31352],{"class":275},[41,41188,1841],{"class":271},[41,41190,34222],{"class":378},[41,41192,41193,41195,41197],{"class":43,"line":16840},[41,41194,31392],{"class":275},[41,41196,321],{"class":271},[41,41198,32392],{"class":275},[41,41200,41201],{"class":43,"line":16851},[41,41202,34574],{"class":47},[41,41204,41205],{"class":43,"line":16874},[41,41206,34579],{"class":47},[41,41208,41209,41211,41213,41215,41217,41219,41221,41223,41225,41227,41229,41231,41233,41235,41237,41239,41241,41243,41245,41247,41249,41251,41253],{"class":43,"line":16896},[41,41210,34584],{"class":275},[41,41212,321],{"class":271},[41,41214,1163],{"class":275},[41,41216,34591],{"class":378},[41,41218,651],{"class":275},[41,41220,34596],{"class":378},[41,41222,651],{"class":275},[41,41224,34601],{"class":378},[41,41226,651],{"class":275},[41,41228,34606],{"class":378},[41,41230,651],{"class":275},[41,41232,34611],{"class":378},[41,41234,651],{"class":275},[41,41236,34616],{"class":378},[41,41238,651],{"class":275},[41,41240,34621],{"class":378},[41,41242,651],{"class":275},[41,41244,34626],{"class":378},[41,41246,651],{"class":275},[41,41248,34631],{"class":378},[41,41250,651],{"class":275},[41,41252,34636],{"class":378},[41,41254,33349],{"class":275},[41,41256,41257,41259],{"class":43,"line":16901},[41,41258,34281],{"class":271},[41,41260,32987],{"class":275},[41,41262,41263],{"class":43,"line":16907},[41,41264,34649],{"class":47},[41,41266,41267,41269,41271,41273],{"class":43,"line":16921},[41,41268,3541],{"class":271},[41,41270,34656],{"class":275},[41,41272,26146],{"class":271},[41,41274,34300],{"class":275},[41,41276,41277,41279,41281],{"class":43,"line":16934},[41,41278,32713],{"class":275},[41,41280,321],{"class":271},[41,41282,32718],{"class":275},[41,41284,41285,41287,41289],{"class":43,"line":16939},[41,41286,32728],{"class":275},[41,41288,321],{"class":271},[41,41290,32733],{"class":275},[41,41292,41293],{"class":43,"line":16953},[41,41294,80],{"emptyLinePlaceholder":79},[41,41296,41297],{"class":43,"line":16958},[41,41298,34685],{"class":47},[41,41300,41301],{"class":43,"line":16964},[41,41302,32978],{"class":275},[41,41304,41305],{"class":43,"line":16969},[41,41306,34694],{"class":47},[41,41308,41309,41311,41313],{"class":43,"line":16983},[41,41310,32763],{"class":275},[41,41312,321],{"class":271},[41,41314,32768],{"class":275},[41,41316,41317],{"class":43,"line":16988},[41,41318,34707],{"class":47},[41,41320,41321,41323,41325,41327,41329,41331,41333],{"class":43,"line":16993},[41,41322,32780],{"class":275},[41,41324,321],{"class":271},[41,41326,32785],{"class":275},[41,41328,32788],{"class":5354},[41,41330,321],{"class":271},[41,41332,26],{"class":58},[41,41334,282],{"class":275},[41,41336,41337],{"class":43,"line":17007},[41,41338,34728],{"class":47},[41,41340,41341,41343,41345],{"class":43,"line":17019},[41,41342,34733],{"class":275},[41,41344,321],{"class":271},[41,41346,34738],{"class":275},[41,41348,41349,41351,41353],{"class":43,"line":17024},[41,41350,34743],{"class":275},[41,41352,321],{"class":271},[41,41354,34748],{"class":275},[41,41356,41357,41359,41361,41363,41365,41367,41369,41371],{"class":43,"line":17037},[41,41358,34753],{"class":58},[41,41360,276],{"class":275},[41,41362,34758],{"class":378},[41,41364,34761],{"class":275},[41,41366,34764],{"class":378},[41,41368,651],{"class":275},[41,41370,34769],{"class":378},[41,41372,34772],{"class":275},[241,41374,41376],{"id":41375},"_23googlenet","2.3.GoogLeNet",[22136,41378,41380],{"id":41379},"_231原理","2.3.1.原理",[224,41382,41383],{},[227,41384,41385],{},"网络结构",[20,41387,41388],{},[1603,41389],{"alt":37,"src":41390},"\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",[20,41392,41393],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[20,41395,41396],{},[1603,41397],{"alt":37,"src":41398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[20,41400,41401],{},[1603,41402],{"alt":37,"src":41403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[20,41405,41406],{},[1603,41407],{"alt":37,"src":41408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[224,41410,41411],{"start":51},[227,41412,41413],{},"1x1卷积的优点",[20,41415,41416],{},[1603,41417],{"alt":37,"src":41418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[224,41420,41421],{"start":62},[227,41422,41423],{},"全局平均池化层优点",[20,41425,41426],{},[1603,41427],{"alt":37,"src":41428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[20,41430,41431],{},[1603,41432],{"alt":37,"src":41433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[224,41435,41436],{"start":70},[227,41437,41438],{},"参数详细描述",[20,41440,41441],{},[1603,41442],{"alt":37,"src":41443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[20,41445,41446],{},[1603,41447],{"alt":37,"src":41448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[20,41450,41451],{},[1603,41452],{"alt":37,"src":41453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[20,41455,41456],{},[1603,41457],{"alt":37,"src":41458},"\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",[20,41460,41461],{},[1603,41462],{"alt":37,"src":41463},"\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",[20,41465,41466],{},[1603,41467],{"alt":37,"src":41468},"\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",[20,41470,41471],{},[1603,41472],{"alt":37,"src":41473},"\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",[20,41475,41476],{},[1603,41477],{"alt":37,"src":41478},"\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",[20,41480,41481],{},[1603,41482],{"alt":37,"src":41483},"\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",[20,41485,41486],{},[1603,41487],{"alt":37,"src":41488},"\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",[20,41490,41491],{},[1603,41492],{"alt":37,"src":41493},"\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",[20,41495,41496],{},[1603,41497],{"alt":37,"src":41498},"\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",[20,41500,41501],{},[1603,41502],{"alt":37,"src":41503},"\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",[20,41505,41506],{},[1603,41507],{"alt":37,"src":41508},"\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",[20,41510,41511],{},[1603,41512],{"alt":37,"src":41513},"\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",[20,41515,41516],{},[1603,41517],{"alt":37,"src":41518},"\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",[20,41520,41521],{},[1603,41522],{"alt":37,"src":41523},"\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",[20,41525,41526],{},[1603,41527],{"alt":37,"src":41528},"\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",[20,41530,41531],{},[1603,41532],{"alt":37,"src":41533},"\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",[20,41535,41536],{},[1603,41537],{"alt":37,"src":41538},"\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",[20,41540,41541],{},[1603,41542],{"alt":37,"src":41543},"\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",[22136,41545,41547],{"id":41546},"_232代码实现","2.3.2.代码实现",[224,41549,41550],{},[227,41551,30814],{},[20,41553,41554],{},"根据原理一步一步搭建即可",[32,41556,41558],{"className":30481,"code":41557,"language":30483,"meta":37,"style":37},"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",[24,41559,41560,41566,41576,41586,41590,41607,41616,41631,41641,41646,41679,41684,41721,41768,41773,41809,41856,41861,41866,41901,41933,41937,41945,41961,41985,42010,42031,42036,42051,42055,42059,42064,42081,42086,42095,42110,42121,42165,42169,42197,42201,42212,42240,42244,42281,42285,42313,42317,42328,42364,42396,42424,42428,42439,42473,42505,42537,42570,42604,42632,42636,42647,42680,42712,42726,42730,42743,42747,42752,42764,42772,42794,42799,42804,42809,42814,42819,42824,42838,42846,42855,42868,42883,42892,42896,42904,42915,42926,42937,42948,42959,42965,42969,42974,42986,43006,43015],{"__ignoreMap":37},[41,41561,41562,41564],{"class":43,"line":44},[41,41563,30495],{"class":271},[41,41565,30498],{"class":275},[41,41567,41568,41570,41572,41574],{"class":43,"line":51},[41,41569,30840],{"class":271},[41,41571,30843],{"class":275},[41,41573,30495],{"class":271},[41,41575,30848],{"class":275},[41,41577,41578,41580,41582,41584],{"class":43,"line":62},[41,41579,30840],{"class":271},[41,41581,30860],{"class":275},[41,41583,30495],{"class":271},[41,41585,30865],{"class":275},[41,41587,41588],{"class":43,"line":70},[41,41589,80],{"emptyLinePlaceholder":79},[41,41591,41592,41594,41597,41599,41601,41603,41605],{"class":43,"line":76},[41,41593,14832],{"class":271},[41,41595,41596],{"class":54}," Inception",[41,41598,276],{"class":275},[41,41600,30881],{"class":54},[41,41602,831],{"class":275},[41,41604,30886],{"class":54},[41,41606,30889],{"class":275},[41,41608,41609,41611,41613],{"class":43,"line":83},[41,41610,30904],{"class":271},[41,41612,30907],{"class":58},[41,41614,41615],{"class":275},"(self,in_channels,c1,c2,c3,c4):\n",[41,41617,41618,41620,41623,41625,41627,41629],{"class":43,"line":89},[41,41619,30920],{"class":58},[41,41621,41622],{"class":275},"(Inception,",[41,41624,30926],{"class":58},[41,41626,30929],{"class":275},[41,41628,30932],{"class":58},[41,41630,2115],{"class":275},[41,41632,41633,41635,41637,41639],{"class":43,"line":96},[41,41634,30948],{"class":58},[41,41636,34874],{"class":275},[41,41638,321],{"class":271},[41,41640,34879],{"class":275},[41,41642,41643],{"class":43,"line":104},[41,41644,41645],{"class":47},"        # 路线1：定义1*1卷积\n",[41,41647,41648,41650,41653,41655,41657,41659,41661,41664,41666,41668,41671,41673,41675,41677],{"class":43,"line":176},[41,41649,30948],{"class":58},[41,41651,41652],{"class":275},".p1_1",[41,41654,321],{"class":271},[41,41656,30956],{"class":275},[41,41658,30959],{"class":5354},[41,41660,321],{"class":271},[41,41662,41663],{"class":275},"in_channels,",[41,41665,30968],{"class":5354},[41,41667,321],{"class":271},[41,41669,41670],{"class":275},"c1,",[41,41672,30977],{"class":5354},[41,41674,321],{"class":271},[41,41676,26],{"class":58},[41,41678,282],{"class":275},[41,41680,41681],{"class":43,"line":184},[41,41682,41683],{"class":47},"        # 路线2：定义1*1卷积和3*3\n",[41,41685,41686,41688,41691,41693,41695,41697,41699,41701,41703,41705,41708,41710,41713,41715,41717,41719],{"class":43,"line":1757},[41,41687,30948],{"class":58},[41,41689,41690],{"class":275},".p2_1",[41,41692,321],{"class":271},[41,41694,30956],{"class":275},[41,41696,30959],{"class":5354},[41,41698,321],{"class":271},[41,41700,41663],{"class":275},[41,41702,30968],{"class":5354},[41,41704,321],{"class":271},[41,41706,41707],{"class":275},"c2[",[41,41709,465],{"class":58},[41,41711,41712],{"class":275},"],",[41,41714,30977],{"class":5354},[41,41716,321],{"class":271},[41,41718,26],{"class":58},[41,41720,282],{"class":275},[41,41722,41723,41725,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762,41764,41766],{"class":43,"line":1763},[41,41724,30948],{"class":58},[41,41726,41727],{"class":275},".p2_2",[41,41729,321],{"class":271},[41,41731,30956],{"class":275},[41,41733,30959],{"class":5354},[41,41735,321],{"class":271},[41,41737,41707],{"class":275},[41,41739,465],{"class":58},[41,41741,41712],{"class":275},[41,41743,30968],{"class":5354},[41,41745,321],{"class":271},[41,41747,41707],{"class":275},[41,41749,26],{"class":58},[41,41751,41712],{"class":275},[41,41753,30977],{"class":5354},[41,41755,321],{"class":271},[41,41757,345],{"class":58},[41,41759,651],{"class":275},[41,41761,30986],{"class":5354},[41,41763,321],{"class":271},[41,41765,26],{"class":58},[41,41767,282],{"class":275},[41,41769,41770],{"class":43,"line":1768},[41,41771,41772],{"class":47},"        # 路线3：定义1*1卷积和5*5\n",[41,41774,41775,41777,41780,41782,41784,41786,41788,41790,41792,41794,41797,41799,41801,41803,41805,41807],{"class":43,"line":1782},[41,41776,30948],{"class":58},[41,41778,41779],{"class":275},".p3_1",[41,41781,321],{"class":271},[41,41783,30956],{"class":275},[41,41785,30959],{"class":5354},[41,41787,321],{"class":271},[41,41789,41663],{"class":275},[41,41791,30968],{"class":5354},[41,41793,321],{"class":271},[41,41795,41796],{"class":275},"c3[",[41,41798,465],{"class":58},[41,41800,41712],{"class":275},[41,41802,30977],{"class":5354},[41,41804,321],{"class":271},[41,41806,26],{"class":58},[41,41808,282],{"class":275},[41,41810,41811,41813,41816,41818,41820,41822,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854],{"class":43,"line":1787},[41,41812,30948],{"class":58},[41,41814,41815],{"class":275},".p3_2",[41,41817,321],{"class":271},[41,41819,30956],{"class":275},[41,41821,30959],{"class":5354},[41,41823,321],{"class":271},[41,41825,41796],{"class":275},[41,41827,465],{"class":58},[41,41829,41712],{"class":275},[41,41831,30968],{"class":5354},[41,41833,321],{"class":271},[41,41835,41796],{"class":275},[41,41837,26],{"class":58},[41,41839,41712],{"class":275},[41,41841,30977],{"class":5354},[41,41843,321],{"class":271},[41,41845,592],{"class":58},[41,41847,651],{"class":275},[41,41849,30986],{"class":5354},[41,41851,321],{"class":271},[41,41853,351],{"class":58},[41,41855,282],{"class":275},[41,41857,41858],{"class":43,"line":1793},[41,41859,41860],{"class":47},"        # 路线4：定义3*3最大池化和1*1卷积\n",[41,41862,41863],{"class":43,"line":1814},[41,41864,41865],{"class":47},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[41,41867,41868,41870,41873,41875,41877,41879,41881,41883,41885,41887,41889,41891,41893,41895,41897,41899],{"class":43,"line":1819},[41,41869,30948],{"class":58},[41,41871,41872],{"class":275},".p4_1",[41,41874,321],{"class":271},[41,41876,34932],{"class":275},[41,41878,30977],{"class":5354},[41,41880,321],{"class":271},[41,41882,345],{"class":58},[41,41884,651],{"class":275},[41,41886,31032],{"class":5354},[41,41888,321],{"class":271},[41,41890,26],{"class":58},[41,41892,651],{"class":275},[41,41894,30986],{"class":5354},[41,41896,321],{"class":271},[41,41898,26],{"class":58},[41,41900,282],{"class":275},[41,41902,41903,41905,41908,41910,41912,41914,41916,41918,41920,41922,41925,41927,41929,41931],{"class":43,"line":1833},[41,41904,30948],{"class":58},[41,41906,41907],{"class":275},".p4_2",[41,41909,321],{"class":271},[41,41911,30956],{"class":275},[41,41913,30959],{"class":5354},[41,41915,321],{"class":271},[41,41917,41663],{"class":275},[41,41919,30968],{"class":5354},[41,41921,321],{"class":271},[41,41923,41924],{"class":275},"c4,",[41,41926,30977],{"class":5354},[41,41928,321],{"class":271},[41,41930,26],{"class":58},[41,41932,282],{"class":275},[41,41934,41935],{"class":43,"line":1838},[41,41936,80],{"emptyLinePlaceholder":79},[41,41938,41939,41941,41943],{"class":43,"line":1867},[41,41940,30904],{"class":271},[41,41942,31196],{"class":54},[41,41944,31199],{"class":275},[41,41946,41947,41950,41952,41954,41956,41958],{"class":43,"line":1872},[41,41948,41949],{"class":275},"        p1",[41,41951,321],{"class":271},[41,41953,30926],{"class":58},[41,41955,35287],{"class":275},[41,41957,30926],{"class":58},[41,41959,41960],{"class":275},".p1_1(x))\n",[41,41962,41963,41965,41967,41969,41971,41973,41976,41978,41980,41982],{"class":43,"line":1889},[41,41964,7223],{"class":275},[41,41966,321],{"class":271},[41,41968,30926],{"class":58},[41,41970,35287],{"class":275},[41,41972,30926],{"class":58},[41,41974,41975],{"class":275},".p2_2(",[41,41977,30926],{"class":58},[41,41979,35287],{"class":275},[41,41981,30926],{"class":58},[41,41983,41984],{"class":275},".p2_1(x))))\n",[41,41986,41987,41990,41992,41994,41996,41998,42001,42003,42005,42007],{"class":43,"line":1894},[41,41988,41989],{"class":275},"        p3",[41,41991,321],{"class":271},[41,41993,30926],{"class":58},[41,41995,35287],{"class":275},[41,41997,30926],{"class":58},[41,41999,42000],{"class":275},".p3_2(",[41,42002,30926],{"class":58},[41,42004,35287],{"class":275},[41,42006,30926],{"class":58},[41,42008,42009],{"class":275},".p3_1(x))))\n",[41,42011,42012,42015,42017,42019,42021,42023,42026,42028],{"class":43,"line":1899},[41,42013,42014],{"class":275},"        p4",[41,42016,321],{"class":271},[41,42018,30926],{"class":58},[41,42020,35287],{"class":275},[41,42022,30926],{"class":58},[41,42024,42025],{"class":275},".p4_2(",[41,42027,30926],{"class":58},[41,42029,42030],{"class":275},".p4_1(x)))\n",[41,42032,42033],{"class":43,"line":1904},[41,42034,42035],{"class":47},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[41,42037,42038,42040,42043,42045,42047,42049],{"class":43,"line":1918},[41,42039,14890],{"class":271},[41,42041,42042],{"class":275}," torch.cat((p1,p2,p3,p4),",[41,42044,32788],{"class":5354},[41,42046,321],{"class":271},[41,42048,26],{"class":58},[41,42050,282],{"class":275},[41,42052,42053],{"class":43,"line":1923},[41,42054,80],{"emptyLinePlaceholder":79},[41,42056,42057],{"class":43,"line":2715},[41,42058,80],{"emptyLinePlaceholder":79},[41,42060,42061],{"class":43,"line":2729},[41,42062,42063],{"class":47},"# 搭建GoogLeNet网络\n",[41,42065,42066,42068,42071,42073,42075,42077,42079],{"class":43,"line":2737},[41,42067,14832],{"class":271},[41,42069,42070],{"class":54}," GoogLeNet",[41,42072,276],{"class":275},[41,42074,30881],{"class":54},[41,42076,831],{"class":275},[41,42078,30886],{"class":54},[41,42080,30889],{"class":275},[41,42082,42083],{"class":43,"line":2742},[41,42084,42085],{"class":47},"    # 必须把Inception导入到里边\n",[41,42087,42088,42090,42092],{"class":43,"line":2748},[41,42089,30904],{"class":271},[41,42091,30907],{"class":58},[41,42093,42094],{"class":275},"(self,Inception):\n",[41,42096,42097,42099,42102,42104,42106,42108],{"class":43,"line":2754},[41,42098,30920],{"class":58},[41,42100,42101],{"class":275},"(GoogLeNet,",[41,42103,30926],{"class":58},[41,42105,30929],{"class":275},[41,42107,30932],{"class":58},[41,42109,2115],{"class":275},[41,42111,42112,42114,42117,42119],{"class":43,"line":2759},[41,42113,30948],{"class":58},[41,42115,42116],{"class":275},".b1",[41,42118,321],{"class":271},[41,42120,38112],{"class":275},[41,42122,42123,42125,42127,42129,42131,42133,42135,42137,42139,42141,42143,42145,42147,42149,42151,42153,42155,42157,42159,42161,42163],{"class":43,"line":8086},[41,42124,38117],{"class":275},[41,42126,30959],{"class":5354},[41,42128,321],{"class":271},[41,42130,26],{"class":58},[41,42132,651],{"class":275},[41,42134,30968],{"class":5354},[41,42136,321],{"class":271},[41,42138,477],{"class":58},[41,42140,651],{"class":275},[41,42142,30977],{"class":5354},[41,42144,321],{"class":271},[41,42146,642],{"class":58},[41,42148,651],{"class":275},[41,42150,31032],{"class":5354},[41,42152,321],{"class":271},[41,42154,351],{"class":58},[41,42156,651],{"class":275},[41,42158,30986],{"class":5354},[41,42160,321],{"class":271},[41,42162,345],{"class":58},[41,42164,38150],{"class":275},[41,42166,42167],{"class":43,"line":8110},[41,42168,38155],{"class":275},[41,42170,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193,42195],{"class":43,"line":8115},[41,42172,38200],{"class":275},[41,42174,30977],{"class":5354},[41,42176,321],{"class":271},[41,42178,345],{"class":58},[41,42180,651],{"class":275},[41,42182,31032],{"class":5354},[41,42184,321],{"class":271},[41,42186,351],{"class":58},[41,42188,651],{"class":275},[41,42190,30986],{"class":5354},[41,42192,321],{"class":271},[41,42194,26],{"class":58},[41,42196,282],{"class":275},[41,42198,42199],{"class":43,"line":8121},[41,42200,38229],{"class":275},[41,42202,42203,42205,42208,42210],{"class":43,"line":8148},[41,42204,30948],{"class":58},[41,42206,42207],{"class":275},".b2",[41,42209,321],{"class":271},[41,42211,38112],{"class":275},[41,42213,42214,42216,42218,42220,42222,42224,42226,42228,42230,42232,42234,42236,42238],{"class":43,"line":8153},[41,42215,38117],{"class":275},[41,42217,30959],{"class":5354},[41,42219,321],{"class":271},[41,42221,477],{"class":58},[41,42223,651],{"class":275},[41,42225,30968],{"class":5354},[41,42227,321],{"class":271},[41,42229,477],{"class":58},[41,42231,651],{"class":275},[41,42233,30977],{"class":5354},[41,42235,321],{"class":271},[41,42237,26],{"class":58},[41,42239,38150],{"class":275},[41,42241,42242],{"class":43,"line":8159},[41,42243,38155],{"class":275},[41,42245,42246,42248,42250,42252,42254,42256,42258,42260,42263,42265,42267,42269,42271,42273,42275,42277,42279],{"class":43,"line":8171},[41,42247,38117],{"class":275},[41,42249,30959],{"class":5354},[41,42251,321],{"class":271},[41,42253,477],{"class":58},[41,42255,651],{"class":275},[41,42257,30968],{"class":5354},[41,42259,321],{"class":271},[41,42261,42262],{"class":58},"192",[41,42264,651],{"class":275},[41,42266,30977],{"class":5354},[41,42268,321],{"class":271},[41,42270,345],{"class":58},[41,42272,651],{"class":275},[41,42274,30986],{"class":5354},[41,42276,321],{"class":271},[41,42278,26],{"class":58},[41,42280,38150],{"class":275},[41,42282,42283],{"class":43,"line":8183},[41,42284,38155],{"class":275},[41,42286,42287,42289,42291,42293,42295,42297,42299,42301,42303,42305,42307,42309,42311],{"class":43,"line":8195},[41,42288,38200],{"class":275},[41,42290,30977],{"class":5354},[41,42292,321],{"class":271},[41,42294,345],{"class":58},[41,42296,651],{"class":275},[41,42298,31032],{"class":5354},[41,42300,321],{"class":271},[41,42302,351],{"class":58},[41,42304,651],{"class":275},[41,42306,30986],{"class":5354},[41,42308,321],{"class":271},[41,42310,26],{"class":58},[41,42312,282],{"class":275},[41,42314,42315],{"class":43,"line":9854},[41,42316,38229],{"class":275},[41,42318,42319,42321,42324,42326],{"class":43,"line":9879},[41,42320,30948],{"class":58},[41,42322,42323],{"class":275},".b3",[41,42325,321],{"class":271},[41,42327,38112],{"class":275},[41,42329,42330,42333,42335,42337,42339,42342,42344,42346,42348,42351,42353,42355,42357,42360,42362],{"class":43,"line":9902},[41,42331,42332],{"class":275},"            Inception(",[41,42334,42262],{"class":58},[41,42336,651],{"class":275},[41,42338,477],{"class":58},[41,42340,42341],{"class":275},",(",[41,42343,483],{"class":58},[41,42345,651],{"class":275},[41,42347,32173],{"class":58},[41,42349,42350],{"class":275},"),(",[41,42352,874],{"class":58},[41,42354,651],{"class":275},[41,42356,471],{"class":58},[41,42358,42359],{"class":275},"),",[41,42361,471],{"class":58},[41,42363,38150],{"class":275},[41,42365,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394],{"class":43,"line":9926},[41,42367,42332],{"class":275},[41,42369,34973],{"class":58},[41,42371,651],{"class":275},[41,42373,32173],{"class":58},[41,42375,42341],{"class":275},[41,42377,32173],{"class":58},[41,42379,651],{"class":275},[41,42381,42262],{"class":58},[41,42383,42350],{"class":275},[41,42385,471],{"class":58},[41,42387,651],{"class":275},[41,42389,483],{"class":58},[41,42391,42359],{"class":275},[41,42393,477],{"class":58},[41,42395,38150],{"class":275},[41,42397,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418,42420,42422],{"class":43,"line":9931},[41,42399,38200],{"class":275},[41,42401,30977],{"class":5354},[41,42403,321],{"class":271},[41,42405,345],{"class":58},[41,42407,651],{"class":275},[41,42409,31032],{"class":5354},[41,42411,321],{"class":271},[41,42413,351],{"class":58},[41,42415,651],{"class":275},[41,42417,30986],{"class":5354},[41,42419,321],{"class":271},[41,42421,26],{"class":58},[41,42423,282],{"class":275},[41,42425,42426],{"class":43,"line":9936},[41,42427,38229],{"class":275},[41,42429,42430,42432,42435,42437],{"class":43,"line":9941},[41,42431,30948],{"class":58},[41,42433,42434],{"class":275},".b4",[41,42436,321],{"class":271},[41,42438,38112],{"class":275},[41,42440,42441,42443,42446,42448,42450,42452,42454,42456,42459,42461,42463,42465,42467,42469,42471],{"class":43,"line":9950},[41,42442,42332],{"class":275},[41,42444,42445],{"class":58},"480",[41,42447,651],{"class":275},[41,42449,42262],{"class":58},[41,42451,42341],{"class":275},[41,42453,483],{"class":58},[41,42455,651],{"class":275},[41,42457,42458],{"class":58},"208",[41,42460,42350],{"class":275},[41,42462,874],{"class":58},[41,42464,651],{"class":275},[41,42466,880],{"class":58},[41,42468,42359],{"class":275},[41,42470,477],{"class":58},[41,42472,38150],{"class":275},[41,42474,42475,42477,42479,42481,42483,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503],{"class":43,"line":9955},[41,42476,42332],{"class":275},[41,42478,38560],{"class":58},[41,42480,651],{"class":275},[41,42482,21186],{"class":58},[41,42484,42341],{"class":275},[41,42486,891],{"class":58},[41,42488,651],{"class":275},[41,42490,31604],{"class":58},[41,42492,42350],{"class":275},[41,42494,1073],{"class":58},[41,42496,651],{"class":275},[41,42498,477],{"class":58},[41,42500,42359],{"class":275},[41,42502,477],{"class":58},[41,42504,38150],{"class":275},[41,42506,42507,42509,42511,42513,42515,42517,42519,42521,42523,42525,42527,42529,42531,42533,42535],{"class":43,"line":9961},[41,42508,42332],{"class":275},[41,42510,38560],{"class":58},[41,42512,651],{"class":275},[41,42514,32173],{"class":58},[41,42516,42341],{"class":275},[41,42518,32173],{"class":58},[41,42520,651],{"class":275},[41,42522,34973],{"class":58},[41,42524,42350],{"class":275},[41,42526,1073],{"class":58},[41,42528,651],{"class":275},[41,42530,477],{"class":58},[41,42532,42359],{"class":275},[41,42534,477],{"class":58},[41,42536,38150],{"class":275},[41,42538,42539,42541,42543,42545,42547,42549,42551,42553,42556,42558,42560,42562,42564,42566,42568],{"class":43,"line":9982},[41,42540,42332],{"class":275},[41,42542,38560],{"class":58},[41,42544,651],{"class":275},[41,42546,891],{"class":58},[41,42548,42341],{"class":275},[41,42550,32173],{"class":58},[41,42552,651],{"class":275},[41,42554,42555],{"class":58},"288",[41,42557,42350],{"class":275},[41,42559,471],{"class":58},[41,42561,651],{"class":275},[41,42563,477],{"class":58},[41,42565,42359],{"class":275},[41,42567,477],{"class":58},[41,42569,38150],{"class":275},[41,42571,42572,42574,42577,42579,42581,42583,42585,42587,42590,42592,42594,42596,42598,42600,42602],{"class":43,"line":9988},[41,42573,42332],{"class":275},[41,42575,42576],{"class":58},"528",[41,42578,651],{"class":275},[41,42580,34973],{"class":58},[41,42582,42341],{"class":275},[41,42584,21186],{"class":58},[41,42586,651],{"class":275},[41,42588,42589],{"class":58},"320",[41,42591,42350],{"class":275},[41,42593,471],{"class":58},[41,42595,651],{"class":275},[41,42597,32173],{"class":58},[41,42599,42359],{"class":275},[41,42601,32173],{"class":58},[41,42603,38150],{"class":275},[41,42605,42606,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626,42628,42630],{"class":43,"line":10002},[41,42607,38200],{"class":275},[41,42609,30977],{"class":5354},[41,42611,321],{"class":271},[41,42613,345],{"class":58},[41,42615,651],{"class":275},[41,42617,31032],{"class":5354},[41,42619,321],{"class":271},[41,42621,351],{"class":58},[41,42623,651],{"class":275},[41,42625,30986],{"class":5354},[41,42627,321],{"class":271},[41,42629,26],{"class":58},[41,42631,282],{"class":275},[41,42633,42634],{"class":43,"line":10008},[41,42635,38229],{"class":275},[41,42637,42638,42640,42643,42645],{"class":43,"line":10035},[41,42639,30948],{"class":58},[41,42641,42642],{"class":275},".b5",[41,42644,321],{"class":271},[41,42646,38112],{"class":275},[41,42648,42649,42651,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672,42674,42676,42678],{"class":43,"line":10044},[41,42650,42332],{"class":275},[41,42652,42653],{"class":58},"832",[41,42655,651],{"class":275},[41,42657,34973],{"class":58},[41,42659,42341],{"class":275},[41,42661,21186],{"class":58},[41,42663,651],{"class":275},[41,42665,42589],{"class":58},[41,42667,42350],{"class":275},[41,42669,471],{"class":58},[41,42671,651],{"class":275},[41,42673,32173],{"class":58},[41,42675,42359],{"class":275},[41,42677,32173],{"class":58},[41,42679,38150],{"class":275},[41,42681,42682,42684,42686,42688,42690,42692,42694,42696,42698,42700,42702,42704,42706,42708,42710],{"class":43,"line":10050},[41,42683,42332],{"class":275},[41,42685,42653],{"class":58},[41,42687,651],{"class":275},[41,42689,35043],{"class":58},[41,42691,42341],{"class":275},[41,42693,42262],{"class":58},[41,42695,651],{"class":275},[41,42697,35043],{"class":58},[41,42699,42350],{"class":275},[41,42701,880],{"class":58},[41,42703,651],{"class":275},[41,42705,32173],{"class":58},[41,42707,42359],{"class":275},[41,42709,32173],{"class":58},[41,42711,38150],{"class":275},[41,42713,42714,42717,42719,42721,42723],{"class":43,"line":10058},[41,42715,42716],{"class":275},"            nn.AdaptiveAvgPool2d((",[41,42718,26],{"class":58},[41,42720,651],{"class":275},[41,42722,26],{"class":58},[41,42724,42725],{"class":275},")),\n",[41,42727,42728],{"class":43,"line":10063},[41,42729,38893],{"class":275},[41,42731,42732,42734,42737,42739,42741],{"class":43,"line":16742},[41,42733,38898],{"class":275},[41,42735,42736],{"class":58},"1024",[41,42738,651],{"class":275},[41,42740,719],{"class":58},[41,42742,282],{"class":275},[41,42744,42745],{"class":43,"line":16748},[41,42746,38229],{"class":275},[41,42748,42749],{"class":43,"line":16771},[41,42750,42751],{"class":47},"        # 对模型参数初始化\n",[41,42753,42754,42756,42758,42760,42762],{"class":43,"line":16777},[41,42755,3541],{"class":271},[41,42757,38971],{"class":275},[41,42759,26146],{"class":271},[41,42761,38976],{"class":58},[41,42763,38979],{"class":275},[41,42765,42766,42768,42770],{"class":43,"line":16800},[41,42767,4780],{"class":271},[41,42769,38991],{"class":58},[41,42771,38994],{"class":275},[41,42773,42774,42776,42779,42781,42784,42786,42788,42790,42792],{"class":43,"line":16814},[41,42775,39004],{"class":275},[41,42777,42778],{"class":5354},"mode",[41,42780,321],{"class":271},[41,42782,42783],{"class":378},"'fan_out'",[41,42785,651],{"class":275},[41,42787,39007],{"class":5354},[41,42789,321],{"class":271},[41,42791,39012],{"class":378},[41,42793,282],{"class":275},[41,42795,42796],{"class":43,"line":16834},[41,42797,42798],{"class":47},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[41,42800,42801],{"class":43,"line":16840},[41,42802,42803],{"class":47},"                # ② mode = 'fan_out'决定使用的fan值：\n",[41,42805,42806],{"class":43,"line":16851},[41,42807,42808],{"class":47},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[41,42810,42811],{"class":43,"line":16874},[41,42812,42813],{"class":47},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[41,42815,42816],{"class":43,"line":16896},[41,42817,42818],{"class":47},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[41,42820,42821],{"class":43,"line":16901},[41,42822,42823],{"class":47},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[41,42825,42826,42828,42830,42832,42834,42836],{"class":43,"line":16907},[41,42827,39024],{"class":271},[41,42829,39027],{"class":275},[41,42831,39030],{"class":271},[41,42833,39033],{"class":271},[41,42835,39036],{"class":58},[41,42837,3877],{"class":275},[41,42839,42840,42842,42844],{"class":43,"line":16921},[41,42841,39048],{"class":275},[41,42843,465],{"class":58},[41,42845,282],{"class":275},[41,42847,42848,42851,42853],{"class":43,"line":16934},[41,42849,42850],{"class":271},"                elif",[41,42852,38991],{"class":58},[41,42854,39067],{"class":275},[41,42856,42857,42860,42862,42864,42866],{"class":43,"line":16939},[41,42858,42859],{"class":275},"                    nn.init.normal_(m.weight,",[41,42861,465],{"class":58},[41,42863,651],{"class":275},[41,42865,39089],{"class":58},[41,42867,282],{"class":275},[41,42869,42870,42873,42875,42877,42879,42881],{"class":43,"line":16953},[41,42871,42872],{"class":271},"                    if",[41,42874,39027],{"class":275},[41,42876,39030],{"class":271},[41,42878,39033],{"class":271},[41,42880,39036],{"class":58},[41,42882,3877],{"class":275},[41,42884,42885,42888,42890],{"class":43,"line":16958},[41,42886,42887],{"class":275},"                        nn.init.constant_(m.bias,",[41,42889,465],{"class":58},[41,42891,282],{"class":275},[41,42893,42894],{"class":43,"line":16964},[41,42895,35268],{"class":47},[41,42897,42898,42900,42902],{"class":43,"line":16969},[41,42899,30904],{"class":271},[41,42901,31196],{"class":54},[41,42903,31199],{"class":275},[41,42905,42906,42908,42910,42912],{"class":43,"line":16983},[41,42907,31204],{"class":275},[41,42909,321],{"class":271},[41,42911,30926],{"class":58},[41,42913,42914],{"class":275},".b1(x)\n",[41,42916,42917,42919,42921,42923],{"class":43,"line":16988},[41,42918,31204],{"class":275},[41,42920,321],{"class":271},[41,42922,30926],{"class":58},[41,42924,42925],{"class":275},".b2(x)\n",[41,42927,42928,42930,42932,42934],{"class":43,"line":16993},[41,42929,31204],{"class":275},[41,42931,321],{"class":271},[41,42933,30926],{"class":58},[41,42935,42936],{"class":275},".b3(x)\n",[41,42938,42939,42941,42943,42945],{"class":43,"line":17007},[41,42940,31204],{"class":275},[41,42942,321],{"class":271},[41,42944,30926],{"class":58},[41,42946,42947],{"class":275},".b4(x)\n",[41,42949,42950,42952,42954,42956],{"class":43,"line":17019},[41,42951,31204],{"class":275},[41,42953,321],{"class":271},[41,42955,30926],{"class":58},[41,42957,42958],{"class":275},".b5(x)\n",[41,42960,42961,42963],{"class":43,"line":17024},[41,42962,14890],{"class":271},[41,42964,31312],{"class":275},[41,42966,42967],{"class":43,"line":17037},[41,42968,80],{"emptyLinePlaceholder":79},[41,42970,42971],{"class":43,"line":17042},[41,42972,42973],{"class":47},"# 模型展示\n",[41,42975,42976,42978,42980,42982,42984],{"class":43,"line":17047},[41,42977,1672],{"class":271},[41,42979,31323],{"class":58},[41,42981,3087],{"class":271},[41,42983,31328],{"class":378},[41,42985,3877],{"class":275},[41,42987,42988,42990,42992,42994,42996,42998,43000,43002,43004],{"class":43,"line":17052},[41,42989,31340],{"class":275},[41,42991,321],{"class":271},[41,42993,30554],{"class":275},[41,42995,31347],{"class":378},[41,42997,1844],{"class":271},[41,42999,31352],{"class":275},[41,43001,1841],{"class":271},[41,43003,30579],{"class":378},[41,43005,282],{"class":275},[41,43007,43008,43010,43012],{"class":43,"line":17065},[41,43009,31392],{"class":275},[41,43011,321],{"class":271},[41,43013,43014],{"class":275},"GoogLeNet(Inception).to(device)\n",[41,43016,43017,43019,43021,43023,43025,43027,43029,43031],{"class":43,"line":17070},[41,43018,31402],{"class":58},[41,43020,31405],{"class":275},[41,43022,26],{"class":58},[41,43024,651],{"class":275},[41,43026,31604],{"class":58},[41,43028,651],{"class":275},[41,43030,31604],{"class":58},[41,43032,31418],{"class":275},[224,43034,43035],{"start":51},[227,43036,39286],{},[32,43038,43040],{"className":30481,"code":43039,"language":30483,"meta":37,"style":37},"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",[24,43041,43042,43048,43054,43064,43070,43080,43090,43100,43110,43120,43124,43135,43145,43149,43153,43157,43165,43177,43187,43203,43213,43245,43259,43269,43279,43283,43293,43307,43317,43327,43337,43343,43347,43351,43355,43359,43363,43371,43391,43395,43399,43403,43407,43411,43427,43431,43435,43443,43447,43451,43459,43463,43467,43471,43479,43483,43487,43491,43495,43503,43507,43515,43519,43527,43531,43539,43543,43551,43555,43559,43567,43571,43575,43579,43591,43615,43629,43633,43637,43641,43649,43653,43661,43665,43673,43677,43685,43689,43697,43701,43709,43713,43725,43729,43737,43741,43749,43753,43757,43761,43765,43773,43777,43793,43797,43805,43809,43813,43817,43821,43825,43829,43833,43849,43853,43865,43869,43881,43885,43897,43901,43909,43913,43921,43925,43929,43933,43939,43943,43951,43955,43971,43975,43983,43987,44003,44015,44019,44031,44035,44039,44047,44051,44055,44063,44067,44075,44079,44087,44091,44095,44137,44179,44183,44187,44203,44207,44223,44227,44231,44239,44243,44247,44259,44297,44301,44305,44313,44317,44331,44341,44347,44353,44359,44365,44369,44373,44379,44383,44387,44395,44399,44417,44421,44425,44429,44445,44449,44453,44457,44461,44465,44485,44505,44509,44513,44517,44525,44533,44537,44553,44573,44593,44597,44601,44609,44617,44621,44625,44629,44641,44645,44655,44663,44680],{"__ignoreMap":37},[41,43043,43044,43046],{"class":43,"line":44},[41,43045,30495],{"class":271},[41,43047,31925],{"class":275},[41,43049,43050,43052],{"class":43,"line":51},[41,43051,30495],{"class":271},[41,43053,31932],{"class":275},[41,43055,43056,43058,43060,43062],{"class":43,"line":62},[41,43057,30495],{"class":271},[41,43059,31943],{"class":275},[41,43061,31486],{"class":271},[41,43063,31948],{"class":275},[41,43065,43066,43068],{"class":43,"line":70},[41,43067,30495],{"class":271},[41,43069,30498],{"class":275},[41,43071,43072,43074,43076,43078],{"class":43,"line":76},[41,43073,30840],{"class":271},[41,43075,31518],{"class":275},[41,43077,30495],{"class":271},[41,43079,31965],{"class":275},[41,43081,43082,43084,43086,43088],{"class":43,"line":83},[41,43083,30840],{"class":271},[41,43085,31471],{"class":275},[41,43087,30495],{"class":271},[41,43089,31476],{"class":275},[41,43091,43092,43094,43096,43098],{"class":43,"line":89},[41,43093,30840],{"class":271},[41,43095,31501],{"class":275},[41,43097,30495],{"class":271},[41,43099,31506],{"class":275},[41,43101,43102,43104,43106,43108],{"class":43,"line":96},[41,43103,30495],{"class":271},[41,43105,31518],{"class":275},[41,43107,31486],{"class":271},[41,43109,31523],{"class":275},[41,43111,43112,43114,43116,43118],{"class":43,"line":104},[41,43113,30495],{"class":271},[41,43115,31535],{"class":275},[41,43117,31486],{"class":271},[41,43119,31540],{"class":275},[41,43121,43122],{"class":43,"line":176},[41,43123,32010],{"class":47},[41,43125,43126,43128,43130,43132],{"class":43,"line":184},[41,43127,30840],{"class":271},[41,43129,32017],{"class":275},[41,43131,30495],{"class":271},[41,43133,43134],{"class":275}," GoogLeNet, Inception\n",[41,43136,43137,43139,43141,43143],{"class":43,"line":1757},[41,43138,30840],{"class":271},[41,43140,30843],{"class":275},[41,43142,30495],{"class":271},[41,43144,30848],{"class":275},[41,43146,43147],{"class":43,"line":1763},[41,43148,80],{"emptyLinePlaceholder":79},[41,43150,43151],{"class":43,"line":1768},[41,43152,80],{"emptyLinePlaceholder":79},[41,43154,43155],{"class":43,"line":1782},[41,43156,32045],{"class":47},[41,43158,43159,43161,43163],{"class":43,"line":1787},[41,43160,32050],{"class":271},[41,43162,32053],{"class":54},[41,43164,32056],{"class":275},[41,43166,43167,43169,43171,43173,43175],{"class":43,"line":1793},[41,43168,32061],{"class":275},[41,43170,321],{"class":271},[41,43172,31558],{"class":275},[41,43174,31566],{"class":378},[41,43176,31569],{"class":275},[41,43178,43179,43181,43183,43185],{"class":43,"line":1814},[41,43180,32074],{"class":5354},[41,43182,321],{"class":271},[41,43184,31579],{"class":58},[41,43186,31569],{"class":275},[41,43188,43189,43191,43193,43195,43197,43199,43201],{"class":43,"line":1819},[41,43190,32085],{"class":5354},[41,43192,321],{"class":271},[41,43194,31596],{"class":275},[41,43196,31599],{"class":5354},[41,43198,321],{"class":271},[41,43200,35552],{"class":58},[41,43202,31607],{"class":275},[41,43204,43205,43207,43209,43211],{"class":43,"line":1833},[41,43206,32102],{"class":5354},[41,43208,321],{"class":271},[41,43210,31579],{"class":58},[41,43212,282],{"class":275},[41,43214,43215,43217,43219,43221,43223,43225,43227,43229,43231,43233,43235,43237,43239,43241,43243],{"class":43,"line":1838},[41,43216,32113],{"class":275},[41,43218,321],{"class":271},[41,43220,32118],{"class":275},[41,43222,32121],{"class":58},[41,43224,276],{"class":275},[41,43226,32126],{"class":58},[41,43228,728],{"class":271},[41,43230,7496],{"class":58},[41,43232,32133],{"class":275},[41,43234,32121],{"class":58},[41,43236,276],{"class":275},[41,43238,32140],{"class":58},[41,43240,728],{"class":271},[41,43242,7496],{"class":58},[41,43244,32147],{"class":275},[41,43246,43247,43249,43251,43253,43255,43257],{"class":43,"line":1867},[41,43248,32152],{"class":275},[41,43250,321],{"class":271},[41,43252,32157],{"class":275},[41,43254,31640],{"class":5354},[41,43256,321],{"class":271},[41,43258,31645],{"class":275},[41,43260,43261,43263,43265,43267],{"class":43,"line":1872},[41,43262,32168],{"class":5354},[41,43264,321],{"class":271},[41,43266,471],{"class":58},[41,43268,31569],{"class":275},[41,43270,43271,43273,43275,43277],{"class":43,"line":1889},[41,43272,32180],{"class":5354},[41,43274,321],{"class":271},[41,43276,31579],{"class":58},[41,43278,31569],{"class":275},[41,43280,43281],{"class":43,"line":1894},[41,43282,32191],{"class":47},[41,43284,43285,43287,43289,43291],{"class":43,"line":1899},[41,43286,32196],{"class":5354},[41,43288,321],{"class":271},[41,43290,668],{"class":58},[41,43292,282],{"class":275},[41,43294,43295,43297,43299,43301,43303,43305],{"class":43,"line":1904},[41,43296,32207],{"class":275},[41,43298,321],{"class":271},[41,43300,31637],{"class":275},[41,43302,31640],{"class":5354},[41,43304,321],{"class":271},[41,43306,32218],{"class":275},[41,43308,43309,43311,43313,43315],{"class":43,"line":1918},[41,43310,32223],{"class":5354},[41,43312,321],{"class":271},[41,43314,471],{"class":58},[41,43316,31569],{"class":275},[41,43318,43319,43321,43323,43325],{"class":43,"line":1923},[41,43320,32234],{"class":5354},[41,43322,321],{"class":271},[41,43324,31579],{"class":58},[41,43326,31569],{"class":275},[41,43328,43329,43331,43333,43335],{"class":43,"line":2715},[41,43330,32245],{"class":5354},[41,43332,321],{"class":271},[41,43334,668],{"class":58},[41,43336,282],{"class":275},[41,43338,43339,43341],{"class":43,"line":2729},[41,43340,4228],{"class":271},[41,43342,32258],{"class":275},[41,43344,43345],{"class":43,"line":2737},[41,43346,80],{"emptyLinePlaceholder":79},[41,43348,43349],{"class":43,"line":2742},[41,43350,32267],{"class":47},[41,43352,43353],{"class":43,"line":2748},[41,43354,32272],{"class":47},[41,43356,43357],{"class":43,"line":2754},[41,43358,80],{"emptyLinePlaceholder":79},[41,43360,43361],{"class":43,"line":2759},[41,43362,32281],{"class":47},[41,43364,43365,43367,43369],{"class":43,"line":8086},[41,43366,32050],{"class":271},[41,43368,32288],{"class":54},[41,43370,32291],{"class":275},[41,43372,43373,43375,43377,43379,43381,43383,43385,43387,43389],{"class":43,"line":8110},[41,43374,31340],{"class":275},[41,43376,321],{"class":271},[41,43378,30554],{"class":275},[41,43380,31347],{"class":378},[41,43382,1844],{"class":271},[41,43384,31352],{"class":275},[41,43386,1841],{"class":271},[41,43388,32310],{"class":378},[41,43390,282],{"class":275},[41,43392,43393],{"class":43,"line":8115},[41,43394,80],{"emptyLinePlaceholder":79},[41,43396,43397],{"class":43,"line":8121},[41,43398,80],{"emptyLinePlaceholder":79},[41,43400,43401],{"class":43,"line":8148},[41,43402,32325],{"class":47},[41,43404,43405],{"class":43,"line":8153},[41,43406,32330],{"class":47},[41,43408,43409],{"class":43,"line":8159},[41,43410,32335],{"class":47},[41,43412,43413,43415,43417,43419,43421,43423,43425],{"class":43,"line":8171},[41,43414,32340],{"class":275},[41,43416,321],{"class":271},[41,43418,32345],{"class":275},[41,43420,32348],{"class":5354},[41,43422,321],{"class":271},[41,43424,32353],{"class":58},[41,43426,282],{"class":275},[41,43428,43429],{"class":43,"line":8183},[41,43430,80],{"emptyLinePlaceholder":79},[41,43432,43433],{"class":43,"line":8195},[41,43434,32364],{"class":47},[41,43436,43437,43439,43441],{"class":43,"line":9854},[41,43438,32369],{"class":275},[41,43440,321],{"class":271},[41,43442,32374],{"class":275},[41,43444,43445],{"class":43,"line":9879},[41,43446,80],{"emptyLinePlaceholder":79},[41,43448,43449],{"class":43,"line":9902},[41,43450,32383],{"class":47},[41,43452,43453,43455,43457],{"class":43,"line":9926},[41,43454,31392],{"class":275},[41,43456,321],{"class":271},[41,43458,32392],{"class":275},[41,43460,43461],{"class":43,"line":9931},[41,43462,32397],{"class":47},[41,43464,43465],{"class":43,"line":9936},[41,43466,32402],{"class":47},[41,43468,43469],{"class":43,"line":9941},[41,43470,32407],{"class":47},[41,43472,43473,43475,43477],{"class":43,"line":9950},[41,43474,32412],{"class":275},[41,43476,321],{"class":271},[41,43478,32417],{"class":275},[41,43480,43481],{"class":43,"line":9955},[41,43482,80],{"emptyLinePlaceholder":79},[41,43484,43485],{"class":43,"line":9961},[41,43486,80],{"emptyLinePlaceholder":79},[41,43488,43489],{"class":43,"line":9982},[41,43490,32430],{"class":47},[41,43492,43493],{"class":43,"line":9988},[41,43494,32435],{"class":47},[41,43496,43497,43499,43501],{"class":43,"line":10002},[41,43498,32440],{"class":275},[41,43500,321],{"class":271},[41,43502,32445],{"class":58},[41,43504,43505],{"class":43,"line":10008},[41,43506,32450],{"class":47},[41,43508,43509,43511,43513],{"class":43,"line":10035},[41,43510,32455],{"class":275},[41,43512,321],{"class":271},[41,43514,32460],{"class":275},[41,43516,43517],{"class":43,"line":10044},[41,43518,32465],{"class":47},[41,43520,43521,43523,43525],{"class":43,"line":10050},[41,43522,32470],{"class":275},[41,43524,321],{"class":271},[41,43526,32460],{"class":275},[41,43528,43529],{"class":43,"line":10058},[41,43530,32479],{"class":47},[41,43532,43533,43535,43537],{"class":43,"line":10063},[41,43534,32484],{"class":275},[41,43536,321],{"class":271},[41,43538,32460],{"class":275},[41,43540,43541],{"class":43,"line":16742},[41,43542,32493],{"class":47},[41,43544,43545,43547,43549],{"class":43,"line":16748},[41,43546,32498],{"class":275},[41,43548,321],{"class":271},[41,43550,32460],{"class":275},[41,43552,43553],{"class":43,"line":16771},[41,43554,80],{"emptyLinePlaceholder":79},[41,43556,43557],{"class":43,"line":16777},[41,43558,32511],{"class":47},[41,43560,43561,43563,43565],{"class":43,"line":16800},[41,43562,32516],{"class":275},[41,43564,321],{"class":271},[41,43566,32521],{"class":275},[41,43568,43569],{"class":43,"line":16814},[41,43570,80],{"emptyLinePlaceholder":79},[41,43572,43573],{"class":43,"line":16834},[41,43574,80],{"emptyLinePlaceholder":79},[41,43576,43577],{"class":43,"line":16840},[41,43578,32534],{"class":47},[41,43580,43581,43583,43585,43587,43589],{"class":43,"line":16851},[41,43582,3339],{"class":271},[41,43584,32541],{"class":275},[41,43586,26146],{"class":271},[41,43588,32546],{"class":58},[41,43590,32549],{"class":275},[41,43592,43593,43595,43597,43599,43601,43603,43605,43607,43609,43611,43613],{"class":43,"line":16874},[41,43594,32554],{"class":58},[41,43596,276],{"class":275},[41,43598,32559],{"class":378},[41,43600,32562],{"class":58},[41,43602,857],{"class":378},[41,43604,32562],{"class":58},[41,43606,524],{"class":378},[41,43608,32571],{"class":275},[41,43610,805],{"class":271},[41,43612,26],{"class":58},[41,43614,30600],{"class":275},[41,43616,43617,43619,43621,43623,43625,43627],{"class":43,"line":16896},[41,43618,32554],{"class":58},[41,43620,276],{"class":275},[41,43622,32586],{"class":378},[41,43624,728],{"class":271},[41,43626,719],{"class":58},[41,43628,282],{"class":275},[41,43630,43631],{"class":43,"line":16901},[41,43632,80],{"emptyLinePlaceholder":79},[41,43634,43635],{"class":43,"line":16907},[41,43636,32601],{"class":47},[41,43638,43639],{"class":43,"line":16921},[41,43640,32606],{"class":47},[41,43642,43643,43645,43647],{"class":43,"line":16934},[41,43644,32611],{"class":275},[41,43646,321],{"class":271},[41,43648,32445],{"class":58},[41,43650,43651],{"class":43,"line":16939},[41,43652,32620],{"class":47},[41,43654,43655,43657,43659],{"class":43,"line":16953},[41,43656,32625],{"class":275},[41,43658,321],{"class":271},[41,43660,3223],{"class":58},[41,43662,43663],{"class":43,"line":16958},[41,43664,32634],{"class":47},[41,43666,43667,43669,43671],{"class":43,"line":16964},[41,43668,32639],{"class":275},[41,43670,321],{"class":271},[41,43672,32445],{"class":58},[41,43674,43675],{"class":43,"line":16969},[41,43676,32648],{"class":47},[41,43678,43679,43681,43683],{"class":43,"line":16983},[41,43680,32653],{"class":275},[41,43682,321],{"class":271},[41,43684,3223],{"class":58},[41,43686,43687],{"class":43,"line":16988},[41,43688,32662],{"class":47},[41,43690,43691,43693,43695],{"class":43,"line":16993},[41,43692,32667],{"class":275},[41,43694,321],{"class":271},[41,43696,3223],{"class":58},[41,43698,43699],{"class":43,"line":17007},[41,43700,32676],{"class":47},[41,43702,43703,43705,43707],{"class":43,"line":17019},[41,43704,32681],{"class":275},[41,43706,321],{"class":271},[41,43708,3223],{"class":58},[41,43710,43711],{"class":43,"line":17024},[41,43712,32690],{"class":47},[41,43714,43715,43717,43719,43721,43723],{"class":43,"line":17037},[41,43716,3541],{"class":271},[41,43718,31704],{"class":275},[41,43720,26146],{"class":271},[41,43722,31709],{"class":58},[41,43724,32703],{"class":275},[41,43726,43727],{"class":43,"line":17042},[41,43728,32708],{"class":47},[41,43730,43731,43733,43735],{"class":43,"line":17047},[41,43732,32713],{"class":275},[41,43734,321],{"class":271},[41,43736,32718],{"class":275},[41,43738,43739],{"class":43,"line":17052},[41,43740,32723],{"class":47},[41,43742,43743,43745,43747],{"class":43,"line":17065},[41,43744,32728],{"class":275},[41,43746,321],{"class":271},[41,43748,32733],{"class":275},[41,43750,43751],{"class":43,"line":17070},[41,43752,32739],{"class":47},[41,43754,43755],{"class":43,"line":32736},[41,43756,32745],{"class":275},[41,43758,43759],{"class":43,"line":32742},[41,43760,32751],{"class":47},[41,43762,43763],{"class":43,"line":32748},[41,43764,32757],{"class":47},[41,43766,43767,43769,43771],{"class":43,"line":32754},[41,43768,32763],{"class":275},[41,43770,321],{"class":271},[41,43772,32768],{"class":275},[41,43774,43775],{"class":43,"line":32760},[41,43776,32774],{"class":47},[41,43778,43779,43781,43783,43785,43787,43789,43791],{"class":43,"line":32771},[41,43780,32780],{"class":275},[41,43782,321],{"class":271},[41,43784,32785],{"class":275},[41,43786,32788],{"class":5354},[41,43788,321],{"class":271},[41,43790,26],{"class":58},[41,43792,282],{"class":275},[41,43794,43795],{"class":43,"line":32777},[41,43796,32800],{"class":47},[41,43798,43799,43801,43803],{"class":43,"line":32797},[41,43800,32806],{"class":275},[41,43802,321],{"class":271},[41,43804,32811],{"class":275},[41,43806,43807],{"class":43,"line":32803},[41,43808,32817],{"class":47},[41,43810,43811],{"class":43,"line":32814},[41,43812,32823],{"class":275},[41,43814,43815],{"class":43,"line":32820},[41,43816,32829],{"class":47},[41,43818,43819],{"class":43,"line":32826},[41,43820,32835],{"class":275},[41,43822,43823],{"class":43,"line":32832},[41,43824,32841],{"class":47},[41,43826,43827],{"class":43,"line":32838},[41,43828,32847],{"class":275},[41,43830,43831],{"class":43,"line":32844},[41,43832,32853],{"class":47},[41,43834,43835,43837,43839,43841,43843,43845,43847],{"class":43,"line":32850},[41,43836,32859],{"class":275},[41,43838,9615],{"class":271},[41,43840,32864],{"class":275},[41,43842,728],{"class":271},[41,43844,32869],{"class":275},[41,43846,465],{"class":58},[41,43848,282],{"class":275},[41,43850,43851],{"class":43,"line":32856},[41,43852,32879],{"class":47},[41,43854,43855,43857,43859,43861,43863],{"class":43,"line":32876},[41,43856,32885],{"class":275},[41,43858,9615],{"class":271},[41,43860,32890],{"class":275},[41,43862,3087],{"class":271},[41,43864,32895],{"class":275},[41,43866,43867],{"class":43,"line":32882},[41,43868,32901],{"class":47},[41,43870,43871,43873,43875,43877,43879],{"class":43,"line":32898},[41,43872,32907],{"class":275},[41,43874,9615],{"class":271},[41,43876,32869],{"class":275},[41,43878,465],{"class":58},[41,43880,282],{"class":275},[41,43882,43883],{"class":43,"line":32904},[41,43884,32921],{"class":47},[41,43886,43887,43889,43891,43893,43895],{"class":43,"line":32918},[41,43888,3541],{"class":271},[41,43890,32929],{"class":275},[41,43892,26146],{"class":271},[41,43894,31709],{"class":58},[41,43896,32936],{"class":275},[41,43898,43899],{"class":43,"line":32924},[41,43900,32942],{"class":47},[41,43902,43903,43905,43907],{"class":43,"line":32939},[41,43904,32713],{"class":275},[41,43906,321],{"class":271},[41,43908,32718],{"class":275},[41,43910,43911],{"class":43,"line":32945},[41,43912,32957],{"class":47},[41,43914,43915,43917,43919],{"class":43,"line":32954},[41,43916,32728],{"class":275},[41,43918,321],{"class":271},[41,43920,32733],{"class":275},[41,43922,43923],{"class":43,"line":32960},[41,43924,32972],{"class":47},[41,43926,43927],{"class":43,"line":32969},[41,43928,32978],{"class":275},[41,43930,43931],{"class":43,"line":32975},[41,43932,36459],{"class":47},[41,43934,43935,43937],{"class":43,"line":32981},[41,43936,32984],{"class":271},[41,43938,32987],{"class":275},[41,43940,43941],{"class":43,"line":32990},[41,43942,32993],{"class":47},[41,43944,43945,43947,43949],{"class":43,"line":32996},[41,43946,36474],{"class":275},[41,43948,321],{"class":271},[41,43950,32768],{"class":275},[41,43952,43953],{"class":43,"line":33007},[41,43954,33010],{"class":47},[41,43956,43957,43959,43961,43963,43965,43967,43969],{"class":43,"line":33013},[41,43958,36487],{"class":275},[41,43960,321],{"class":271},[41,43962,32785],{"class":275},[41,43964,32788],{"class":5354},[41,43966,321],{"class":271},[41,43968,26],{"class":58},[41,43970,282],{"class":275},[41,43972,43973],{"class":43,"line":33032},[41,43974,33035],{"class":47},[41,43976,43977,43979,43981],{"class":43,"line":33038},[41,43978,36508],{"class":275},[41,43980,321],{"class":271},[41,43982,32811],{"class":275},[41,43984,43985],{"class":43,"line":33049},[41,43986,33052],{"class":47},[41,43988,43989,43991,43993,43995,43997,43999,44001],{"class":43,"line":33055},[41,43990,36521],{"class":275},[41,43992,9615],{"class":271},[41,43994,36526],{"class":275},[41,43996,728],{"class":271},[41,43998,32869],{"class":275},[41,44000,465],{"class":58},[41,44002,282],{"class":275},[41,44004,44005,44007,44009,44011,44013],{"class":43,"line":33075},[41,44006,36539],{"class":275},[41,44008,9615],{"class":271},[41,44010,32890],{"class":275},[41,44012,3087],{"class":271},[41,44014,32895],{"class":275},[41,44016,44017],{"class":43,"line":33091},[41,44018,36552],{"class":47},[41,44020,44021,44023,44025,44027,44029],{"class":43,"line":33097},[41,44022,36557],{"class":275},[41,44024,9615],{"class":271},[41,44026,32869],{"class":275},[41,44028,465],{"class":58},[41,44030,282],{"class":275},[41,44032,44033],{"class":43,"line":33111},[41,44034,33114],{"class":47},[41,44036,44037],{"class":43,"line":33117},[41,44038,33120],{"class":47},[41,44040,44041,44043,44045],{"class":43,"line":33123},[41,44042,33126],{"class":275},[41,44044,857],{"class":271},[41,44046,33131],{"class":275},[41,44048,44049],{"class":43,"line":33134},[41,44050,33137],{"class":47},[41,44052,44053],{"class":43,"line":33140},[41,44054,33143],{"class":47},[41,44056,44057,44059,44061],{"class":43,"line":33146},[41,44058,33149],{"class":275},[41,44060,857],{"class":271},[41,44062,33131],{"class":275},[41,44064,44065],{"class":43,"line":33156},[41,44066,33159],{"class":47},[41,44068,44069,44071,44073],{"class":43,"line":33162},[41,44070,33165],{"class":275},[41,44072,857],{"class":271},[41,44074,33170],{"class":275},[41,44076,44077],{"class":43,"line":33173},[41,44078,33176],{"class":47},[41,44080,44081,44083,44085],{"class":43,"line":33179},[41,44082,33182],{"class":275},[41,44084,857],{"class":271},[41,44086,33170],{"class":275},[41,44088,44089],{"class":43,"line":33189},[41,44090,80],{"emptyLinePlaceholder":79},[41,44092,44093],{"class":43,"line":33194},[41,44094,33197],{"class":47},[41,44096,44097,44099,44101,44103,44105,44107,44109,44111,44113,44115,44117,44119,44121,44123,44125,44127,44129,44131,44133,44135],{"class":43,"line":33200},[41,44098,32554],{"class":58},[41,44100,276],{"class":275},[41,44102,3730],{"class":378},[41,44104,32562],{"class":58},[41,44106,33211],{"class":378},[41,44108,1169],{"class":58},[41,44110,33216],{"class":271},[41,44112,1219],{"class":58},[41,44114,33221],{"class":378},[41,44116,1169],{"class":58},[41,44118,33216],{"class":271},[41,44120,1219],{"class":58},[41,44122,3730],{"class":378},[41,44124,33232],{"class":275},[41,44126,805],{"class":271},[41,44128,26],{"class":58},[41,44130,33239],{"class":275},[41,44132,805],{"class":271},[41,44134,26],{"class":58},[41,44136,33246],{"class":275},[41,44138,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177],{"class":43,"line":33249},[41,44140,32554],{"class":58},[41,44142,276],{"class":275},[41,44144,3730],{"class":378},[41,44146,32562],{"class":58},[41,44148,33260],{"class":378},[41,44150,1169],{"class":58},[41,44152,33216],{"class":271},[41,44154,1219],{"class":58},[41,44156,33269],{"class":378},[41,44158,1169],{"class":58},[41,44160,33216],{"class":271},[41,44162,1219],{"class":58},[41,44164,3730],{"class":378},[41,44166,33280],{"class":275},[41,44168,805],{"class":271},[41,44170,26],{"class":58},[41,44172,33287],{"class":275},[41,44174,805],{"class":271},[41,44176,26],{"class":58},[41,44178,33246],{"class":275},[41,44180,44181],{"class":43,"line":33296},[41,44182,80],{"emptyLinePlaceholder":79},[41,44184,44185],{"class":43,"line":33301},[41,44186,33304],{"class":47},[41,44188,44189,44191,44193,44195,44197,44199,44201],{"class":43,"line":33307},[41,44190,2635],{"class":271},[41,44192,33312],{"class":275},[41,44194,805],{"class":271},[41,44196,26],{"class":58},[41,44198,1213],{"class":275},[41,44200,1233],{"class":271},[41,44202,33323],{"class":275},[41,44204,44205],{"class":43,"line":33326},[41,44206,33329],{"class":47},[41,44208,44209,44211,44213,44215,44217,44219,44221],{"class":43,"line":33332},[41,44210,33335],{"class":275},[41,44212,315],{"class":58},[41,44214,321],{"class":271},[41,44216,33342],{"class":275},[41,44218,805],{"class":271},[41,44220,26],{"class":58},[41,44222,33349],{"class":275},[41,44224,44225],{"class":43,"line":33352},[41,44226,33355],{"class":47},[41,44228,44229],{"class":43,"line":33358},[41,44230,33361],{"class":47},[41,44232,44233,44235,44237],{"class":43,"line":33364},[41,44234,33367],{"class":275},[41,44236,321],{"class":271},[41,44238,32417],{"class":275},[41,44240,44241],{"class":43,"line":33374},[41,44242,80],{"emptyLinePlaceholder":79},[41,44244,44245],{"class":43,"line":33379},[41,44246,33382],{"class":47},[41,44248,44249,44251,44253,44255,44257],{"class":43,"line":33385},[41,44250,33388],{"class":275},[41,44252,321],{"class":271},[41,44254,33393],{"class":275},[41,44256,805],{"class":271},[41,44258,33398],{"class":275},[41,44260,44261,44263,44265,44267,44269,44271,44273,44275,44277,44279,44281,44283,44285,44287,44289,44291,44293,44295],{"class":43,"line":33401},[41,44262,32554],{"class":58},[41,44264,276],{"class":275},[41,44266,33408],{"class":378},[41,44268,1169],{"class":58},[41,44270,33413],{"class":271},[41,44272,1219],{"class":58},[41,44274,817],{"class":378},[41,44276,1169],{"class":58},[41,44278,33413],{"class":271},[41,44280,1219],{"class":58},[41,44282,33426],{"class":378},[41,44284,33429],{"class":275},[41,44286,33432],{"class":271},[41,44288,1180],{"class":58},[41,44290,33437],{"class":275},[41,44292,601],{"class":271},[41,44294,1180],{"class":58},[41,44296,30600],{"class":275},[41,44298,44299],{"class":43,"line":33446},[41,44300,36836],{"class":47},[41,44302,44303],{"class":43,"line":33452},[41,44304,36841],{"class":47},[41,44306,44307,44309,44311],{"class":43,"line":33458},[41,44308,36846],{"class":275},[41,44310,33470],{"class":378},[41,44312,282],{"class":275},[41,44314,44315],{"class":43,"line":33464},[41,44316,33490],{"class":47},[41,44318,44319,44321,44323,44325,44327,44329],{"class":43,"line":33475},[41,44320,33496],{"class":275},[41,44322,321],{"class":271},[41,44324,33501],{"class":275},[41,44326,33504],{"class":5354},[41,44328,321],{"class":271},[41,44330,1687],{"class":275},[41,44332,44333,44335,44337,44339],{"class":43,"line":33481},[41,44334,33514],{"class":378},[41,44336,1132],{"class":275},[41,44338,33519],{"class":58},[41,44340,33522],{"class":275},[41,44342,44343,44345],{"class":43,"line":33487},[41,44344,33528],{"class":378},[41,44346,33531],{"class":275},[41,44348,44349,44351],{"class":43,"line":33493},[41,44350,33537],{"class":378},[41,44352,33540],{"class":275},[41,44354,44355,44357],{"class":43,"line":33511},[41,44356,33546],{"class":378},[41,44358,33549],{"class":275},[41,44360,44361,44363],{"class":43,"line":33525},[41,44362,33555],{"class":378},[41,44364,33558],{"class":275},[41,44366,44367],{"class":43,"line":33534},[41,44368,33564],{"class":275},[41,44370,44371],{"class":43,"line":33543},[41,44372,33570],{"class":47},[41,44374,44375,44377],{"class":43,"line":33552},[41,44376,4228],{"class":271},[41,44378,33578],{"class":275},[41,44380,44381],{"class":43,"line":33561},[41,44382,80],{"emptyLinePlaceholder":79},[41,44384,44385],{"class":43,"line":33567},[41,44386,33589],{"class":47},[41,44388,44389,44391,44393],{"class":43,"line":33573},[41,44390,32050],{"class":271},[41,44392,33597],{"class":54},[41,44394,33600],{"class":275},[41,44396,44397],{"class":43,"line":33581},[41,44398,33606],{"class":47},[41,44400,44401,44403,44405,44407,44409,44411,44413,44415],{"class":43,"line":33586},[41,44402,33612],{"class":275},[41,44404,31796],{"class":5354},[41,44406,321],{"class":271},[41,44408,276],{"class":275},[41,44410,771],{"class":58},[41,44412,651],{"class":275},[41,44414,566],{"class":58},[41,44416,30600],{"class":275},[41,44418,44419],{"class":43,"line":33592},[41,44420,33632],{"class":47},[41,44422,44423],{"class":43,"line":33603},[41,44424,33638],{"class":47},[41,44426,44427],{"class":43,"line":33609},[41,44428,33644],{"class":47},[41,44430,44431,44433,44435,44437,44439,44441,44443],{"class":43,"line":33629},[41,44432,31830],{"class":275},[41,44434,26],{"class":58},[41,44436,651],{"class":275},[41,44438,351],{"class":58},[41,44440,651],{"class":275},[41,44442,26],{"class":58},[41,44444,282],{"class":275},[41,44446,44447],{"class":43,"line":33635},[41,44448,33667],{"class":47},[41,44450,44451],{"class":43,"line":33641},[41,44452,33673],{"class":47},[41,44454,44455],{"class":43,"line":33647},[41,44456,33679],{"class":47},[41,44458,44459],{"class":43,"line":33664},[41,44460,33685],{"class":47},[41,44462,44463],{"class":43,"line":33670},[41,44464,33691],{"class":47},[41,44466,44467,44469,44471,44473,44475,44477,44479,44481,44483],{"class":43,"line":33676},[41,44468,33697],{"class":275},[41,44470,33700],{"class":378},[41,44472,33703],{"class":275},[41,44474,33706],{"class":378},[41,44476,651],{"class":275},[41,44478,33711],{"class":5354},[41,44480,321],{"class":271},[41,44482,33716],{"class":378},[41,44484,282],{"class":275},[41,44486,44487,44489,44491,44493,44495,44497,44499,44501,44503],{"class":43,"line":33682},[41,44488,33697],{"class":275},[41,44490,33700],{"class":378},[41,44492,33728],{"class":275},[41,44494,33731],{"class":378},[41,44496,651],{"class":275},[41,44498,33711],{"class":5354},[41,44500,321],{"class":271},[41,44502,33740],{"class":378},[41,44504,282],{"class":275},[41,44506,44507],{"class":43,"line":33688},[41,44508,33748],{"class":47},[41,44510,44511],{"class":43,"line":33694},[41,44512,33754],{"class":275},[41,44514,44515],{"class":43,"line":33721},[41,44516,33760],{"class":47},[41,44518,44519,44521,44523],{"class":43,"line":33745},[41,44520,33766],{"class":275},[41,44522,33769],{"class":378},[41,44524,282],{"class":275},[41,44526,44527,44529,44531],{"class":43,"line":33751},[41,44528,33777],{"class":275},[41,44530,33780],{"class":378},[41,44532,282],{"class":275},[41,44534,44535],{"class":43,"line":33757},[41,44536,33788],{"class":47},[41,44538,44539,44541,44543,44545,44547,44549,44551],{"class":43,"line":33763},[41,44540,31830],{"class":275},[41,44542,26],{"class":58},[41,44544,651],{"class":275},[41,44546,351],{"class":58},[41,44548,651],{"class":275},[41,44550,351],{"class":58},[41,44552,282],{"class":275},[41,44554,44555,44557,44559,44561,44563,44565,44567,44569,44571],{"class":43,"line":33774},[41,44556,33697],{"class":275},[41,44558,33700],{"class":378},[41,44560,33815],{"class":275},[41,44562,33706],{"class":378},[41,44564,651],{"class":275},[41,44566,33711],{"class":5354},[41,44568,321],{"class":271},[41,44570,33826],{"class":378},[41,44572,282],{"class":275},[41,44574,44575,44577,44579,44581,44583,44585,44587,44589,44591],{"class":43,"line":33785},[41,44576,33697],{"class":275},[41,44578,33700],{"class":378},[41,44580,33838],{"class":275},[41,44582,33731],{"class":378},[41,44584,651],{"class":275},[41,44586,33711],{"class":5354},[41,44588,321],{"class":271},[41,44590,33849],{"class":378},[41,44592,282],{"class":275},[41,44594,44595],{"class":43,"line":33791},[41,44596,33857],{"class":47},[41,44598,44599],{"class":43,"line":33808},[41,44600,33754],{"class":275},[41,44602,44603,44605,44607],{"class":43,"line":33831},[41,44604,33766],{"class":275},[41,44606,33700],{"class":378},[41,44608,282],{"class":275},[41,44610,44611,44613,44615],{"class":43,"line":33854},[41,44612,33777],{"class":275},[41,44614,33879],{"class":378},[41,44616,282],{"class":275},[41,44618,44619],{"class":43,"line":33860},[41,44620,33887],{"class":275},[41,44622,44623],{"class":43,"line":33865},[41,44624,80],{"emptyLinePlaceholder":79},[41,44626,44627],{"class":43,"line":33874},[41,44628,33898],{"class":47},[41,44630,44631,44633,44635,44637,44639],{"class":43,"line":33884},[41,44632,1672],{"class":271},[41,44634,31323],{"class":58},[41,44636,3087],{"class":271},[41,44638,31328],{"class":378},[41,44640,3877],{"class":275},[41,44642,44643],{"class":43,"line":33890},[41,44644,33917],{"class":47},[41,44646,44647,44650,44652],{"class":43,"line":33895},[41,44648,44649],{"class":275},"    GoogLeNet",[41,44651,321],{"class":271},[41,44653,44654],{"class":275},"GoogLeNet(Inception)\n",[41,44656,44657,44659,44661],{"class":43,"line":33901},[41,44658,33934],{"class":275},[41,44660,321],{"class":271},[41,44662,33939],{"class":275},[41,44664,44665,44667,44669,44672,44674,44676,44678],{"class":43,"line":33914},[41,44666,33496],{"class":275},[41,44668,321],{"class":271},[41,44670,44671],{"class":275},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[41,44673,33952],{"class":5354},[41,44675,321],{"class":271},[41,44677,1224],{"class":58},[41,44679,282],{"class":275},[41,44681,44682],{"class":43,"line":33920},[41,44683,33964],{"class":275},[224,44685,44686],{"start":62},[227,44687,40677],{},[32,44689,44691],{"className":30481,"code":44690,"language":30483,"meta":37,"style":37},"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",[24,44692,44693,44699,44709,44719,44723,44733,44744,44748,44752,44756,44764,44780,44790,44806,44816,44830,44834,44844,44854,44864,44870,44874,44878,44886,44890,44906,44914,44918,44922,44930,44938,44942,44946,44950,44954,44960,44964,44974,44982,44990,44994,44998,45002,45010,45014,45030,45034,45038,45042,45054,45058,45070,45074,45078,45090,45094,45104,45108,45112,45124,45128,45136,45140,45144,45152,45156,45164,45168,45172,45176,45180,45184,45200,45208,45212,45216,45264,45270,45274,45284,45292,45300,45304,45308,45312,45316,45324,45328,45344,45348,45356,45364],{"__ignoreMap":37},[41,44694,44695,44697],{"class":43,"line":44},[41,44696,30495],{"class":271},[41,44698,30498],{"class":275},[41,44700,44701,44703,44705,44707],{"class":43,"line":51},[41,44702,30495],{"class":271},[41,44704,31518],{"class":275},[41,44706,31486],{"class":271},[41,44708,31523],{"class":275},[41,44710,44711,44713,44715,44717],{"class":43,"line":62},[41,44712,30840],{"class":271},[41,44714,31501],{"class":275},[41,44716,30495],{"class":271},[41,44718,31506],{"class":275},[41,44720,44721],{"class":43,"line":70},[41,44722,34025],{"class":47},[41,44724,44725,44727,44729,44731],{"class":43,"line":76},[41,44726,30840],{"class":271},[41,44728,31471],{"class":275},[41,44730,30495],{"class":271},[41,44732,31476],{"class":275},[41,44734,44735,44737,44739,44741],{"class":43,"line":83},[41,44736,30840],{"class":271},[41,44738,32017],{"class":275},[41,44740,30495],{"class":271},[41,44742,44743],{"class":275}," GoogLeNet,Inception\n",[41,44745,44746],{"class":43,"line":89},[41,44747,80],{"emptyLinePlaceholder":79},[41,44749,44750],{"class":43,"line":96},[41,44751,80],{"emptyLinePlaceholder":79},[41,44753,44754],{"class":43,"line":104},[41,44755,34054],{"class":47},[41,44757,44758,44760,44762],{"class":43,"line":176},[41,44759,32050],{"class":271},[41,44761,34061],{"class":54},[41,44763,32056],{"class":275},[41,44765,44766,44768,44770,44772,44774,44776,44778],{"class":43,"line":184},[41,44767,34068],{"class":275},[41,44769,321],{"class":271},[41,44771,31558],{"class":275},[41,44773,31561],{"class":5354},[41,44775,321],{"class":271},[41,44777,31566],{"class":378},[41,44779,31569],{"class":275},[41,44781,44782,44784,44786,44788],{"class":43,"line":1757},[41,44783,34085],{"class":5354},[41,44785,321],{"class":271},[41,44787,34090],{"class":58},[41,44789,31569],{"class":275},[41,44791,44792,44794,44796,44798,44800,44802,44804],{"class":43,"line":1763},[41,44793,34097],{"class":5354},[41,44795,321],{"class":271},[41,44797,31596],{"class":275},[41,44799,31599],{"class":5354},[41,44801,321],{"class":271},[41,44803,35552],{"class":58},[41,44805,31607],{"class":275},[41,44807,44808,44810,44812,44814],{"class":43,"line":1768},[41,44809,34114],{"class":5354},[41,44811,321],{"class":271},[41,44813,31579],{"class":58},[41,44815,282],{"class":275},[41,44817,44818,44820,44822,44824,44826,44828],{"class":43,"line":1782},[41,44819,34125],{"class":275},[41,44821,321],{"class":271},[41,44823,31637],{"class":275},[41,44825,31640],{"class":5354},[41,44827,321],{"class":271},[41,44829,34136],{"class":275},[41,44831,44832],{"class":43,"line":1787},[41,44833,34141],{"class":47},[41,44835,44836,44838,44840,44842],{"class":43,"line":1793},[41,44837,34146],{"class":5354},[41,44839,321],{"class":271},[41,44841,26],{"class":58},[41,44843,31569],{"class":275},[41,44845,44846,44848,44850,44852],{"class":43,"line":1814},[41,44847,34157],{"class":5354},[41,44849,321],{"class":271},[41,44851,31579],{"class":58},[41,44853,31569],{"class":275},[41,44855,44856,44858,44860,44862],{"class":43,"line":1819},[41,44857,34168],{"class":5354},[41,44859,321],{"class":271},[41,44861,465],{"class":58},[41,44863,282],{"class":275},[41,44865,44866,44868],{"class":43,"line":1833},[41,44867,4228],{"class":271},[41,44869,34181],{"class":275},[41,44871,44872],{"class":43,"line":1838},[41,44873,80],{"emptyLinePlaceholder":79},[41,44875,44876],{"class":43,"line":1867},[41,44877,34190],{"class":47},[41,44879,44880,44882,44884],{"class":43,"line":1872},[41,44881,32050],{"class":271},[41,44883,34197],{"class":54},[41,44885,34200],{"class":275},[41,44887,44888],{"class":43,"line":1889},[41,44889,34205],{"class":47},[41,44891,44892,44894,44896,44898,44900,44902,44904],{"class":43,"line":1894},[41,44893,31340],{"class":275},[41,44895,321],{"class":271},[41,44897,31347],{"class":378},[41,44899,1844],{"class":271},[41,44901,31352],{"class":275},[41,44903,1841],{"class":271},[41,44905,34222],{"class":378},[41,44907,44908,44910,44912],{"class":43,"line":1899},[41,44909,31392],{"class":275},[41,44911,321],{"class":271},[41,44913,32392],{"class":275},[41,44915,44916],{"class":43,"line":1904},[41,44917,80],{"emptyLinePlaceholder":79},[41,44919,44920],{"class":43,"line":1918},[41,44921,34239],{"class":47},[41,44923,44924,44926,44928],{"class":43,"line":1923},[41,44925,34244],{"class":275},[41,44927,321],{"class":271},[41,44929,32445],{"class":58},[41,44931,44932,44934,44936],{"class":43,"line":2715},[41,44933,34253],{"class":275},[41,44935,321],{"class":271},[41,44937,3223],{"class":58},[41,44939,44940],{"class":43,"line":2729},[41,44941,80],{"emptyLinePlaceholder":79},[41,44943,44944],{"class":43,"line":2737},[41,44945,34266],{"class":47},[41,44947,44948],{"class":43,"line":2742},[41,44949,34271],{"class":47},[41,44951,44952],{"class":43,"line":2748},[41,44953,34276],{"class":47},[41,44955,44956,44958],{"class":43,"line":2754},[41,44957,34281],{"class":271},[41,44959,32987],{"class":275},[41,44961,44962],{"class":43,"line":2759},[41,44963,34288],{"class":47},[41,44965,44966,44968,44970,44972],{"class":43,"line":8086},[41,44967,3541],{"class":271},[41,44969,34295],{"class":275},[41,44971,26146],{"class":271},[41,44973,34300],{"class":275},[41,44975,44976,44978,44980],{"class":43,"line":8110},[41,44977,34305],{"class":275},[41,44979,321],{"class":271},[41,44981,34310],{"class":275},[41,44983,44984,44986,44988],{"class":43,"line":8115},[41,44985,34315],{"class":275},[41,44987,321],{"class":271},[41,44989,34320],{"class":275},[41,44991,44992],{"class":43,"line":8121},[41,44993,34325],{"class":47},[41,44995,44996],{"class":43,"line":8148},[41,44997,32978],{"class":275},[41,44999,45000],{"class":43,"line":8153},[41,45001,34334],{"class":47},[41,45003,45004,45006,45008],{"class":43,"line":8159},[41,45005,32763],{"class":275},[41,45007,321],{"class":271},[41,45009,34343],{"class":275},[41,45011,45012],{"class":43,"line":8171},[41,45013,34348],{"class":47},[41,45015,45016,45018,45020,45022,45024,45026,45028],{"class":43,"line":8183},[41,45017,32780],{"class":275},[41,45019,321],{"class":271},[41,45021,32785],{"class":275},[41,45023,32788],{"class":5354},[41,45025,321],{"class":271},[41,45027,26],{"class":58},[41,45029,282],{"class":275},[41,45031,45032],{"class":43,"line":8195},[41,45033,34369],{"class":47},[41,45035,45036],{"class":43,"line":9854},[41,45037,34374],{"class":47},[41,45039,45040],{"class":43,"line":9879},[41,45041,34379],{"class":47},[41,45043,45044,45046,45048,45050,45052],{"class":43,"line":9902},[41,45045,34384],{"class":275},[41,45047,9615],{"class":271},[41,45049,32890],{"class":275},[41,45051,3087],{"class":271},[41,45053,34393],{"class":275},[41,45055,45056],{"class":43,"line":9926},[41,45057,34398],{"class":47},[41,45059,45060,45062,45064,45066,45068],{"class":43,"line":9931},[41,45061,34403],{"class":275},[41,45063,9615],{"class":271},[41,45065,34408],{"class":275},[41,45067,465],{"class":58},[41,45069,282],{"class":275},[41,45071,45072],{"class":43,"line":9936},[41,45073,80],{"emptyLinePlaceholder":79},[41,45075,45076],{"class":43,"line":9941},[41,45077,34421],{"class":47},[41,45079,45080,45082,45084,45086,45088],{"class":43,"line":9950},[41,45081,34426],{"class":275},[41,45083,321],{"class":271},[41,45085,34431],{"class":275},[41,45087,857],{"class":271},[41,45089,34436],{"class":275},[41,45091,45092],{"class":43,"line":9955},[41,45093,34441],{"class":47},[41,45095,45096,45098,45100,45102],{"class":43,"line":9961},[41,45097,32554],{"class":58},[41,45099,276],{"class":275},[41,45101,34450],{"class":378},[41,45103,34453],{"class":275},[41,45105,45106],{"class":43,"line":9982},[41,45107,80],{"emptyLinePlaceholder":79},[41,45109,45110],{"class":43,"line":9988},[41,45111,34462],{"class":47},[41,45113,45114,45116,45118,45120,45122],{"class":43,"line":10002},[41,45115,1672],{"class":271},[41,45117,31323],{"class":58},[41,45119,3087],{"class":271},[41,45121,31328],{"class":378},[41,45123,3877],{"class":275},[41,45125,45126],{"class":43,"line":10008},[41,45127,34479],{"class":47},[41,45129,45130,45132,45134],{"class":43,"line":10035},[41,45131,31392],{"class":275},[41,45133,321],{"class":271},[41,45135,44654],{"class":275},[41,45137,45138],{"class":43,"line":10044},[41,45139,34492],{"class":47},[41,45141,45142],{"class":43,"line":10050},[41,45143,34497],{"class":47},[41,45145,45146,45148,45150],{"class":43,"line":10058},[41,45147,34502],{"class":275},[41,45149,34505],{"class":378},[41,45151,30600],{"class":275},[41,45153,45154],{"class":43,"line":10063},[41,45155,34512],{"class":47},[41,45157,45158,45160,45162],{"class":43,"line":16742},[41,45159,34125],{"class":275},[41,45161,321],{"class":271},[41,45163,34521],{"class":275},[41,45165,45166],{"class":43,"line":16748},[41,45167,34526],{"class":47},[41,45169,45170],{"class":43,"line":16771},[41,45171,34531],{"class":275},[41,45173,45174],{"class":43,"line":16777},[41,45175,80],{"emptyLinePlaceholder":79},[41,45177,45178],{"class":43,"line":16800},[41,45179,34540],{"class":47},[41,45181,45182],{"class":43,"line":16814},[41,45183,34545],{"class":47},[41,45185,45186,45188,45190,45192,45194,45196,45198],{"class":43,"line":16834},[41,45187,31340],{"class":275},[41,45189,321],{"class":271},[41,45191,31347],{"class":378},[41,45193,1844],{"class":271},[41,45195,31352],{"class":275},[41,45197,1841],{"class":271},[41,45199,34222],{"class":378},[41,45201,45202,45204,45206],{"class":43,"line":16840},[41,45203,31392],{"class":275},[41,45205,321],{"class":271},[41,45207,32392],{"class":275},[41,45209,45210],{"class":43,"line":16851},[41,45211,34574],{"class":47},[41,45213,45214],{"class":43,"line":16874},[41,45215,34579],{"class":47},[41,45217,45218,45220,45222,45224,45226,45228,45230,45232,45234,45236,45238,45240,45242,45244,45246,45248,45250,45252,45254,45256,45258,45260,45262],{"class":43,"line":16896},[41,45219,34584],{"class":275},[41,45221,321],{"class":271},[41,45223,1163],{"class":275},[41,45225,34591],{"class":378},[41,45227,651],{"class":275},[41,45229,34596],{"class":378},[41,45231,651],{"class":275},[41,45233,34601],{"class":378},[41,45235,651],{"class":275},[41,45237,34606],{"class":378},[41,45239,651],{"class":275},[41,45241,34611],{"class":378},[41,45243,651],{"class":275},[41,45245,34616],{"class":378},[41,45247,651],{"class":275},[41,45249,34621],{"class":378},[41,45251,651],{"class":275},[41,45253,34626],{"class":378},[41,45255,651],{"class":275},[41,45257,34631],{"class":378},[41,45259,651],{"class":275},[41,45261,34636],{"class":378},[41,45263,33349],{"class":275},[41,45265,45266,45268],{"class":43,"line":16901},[41,45267,34281],{"class":271},[41,45269,32987],{"class":275},[41,45271,45272],{"class":43,"line":16907},[41,45273,34649],{"class":47},[41,45275,45276,45278,45280,45282],{"class":43,"line":16921},[41,45277,3541],{"class":271},[41,45279,34656],{"class":275},[41,45281,26146],{"class":271},[41,45283,34300],{"class":275},[41,45285,45286,45288,45290],{"class":43,"line":16934},[41,45287,32713],{"class":275},[41,45289,321],{"class":271},[41,45291,32718],{"class":275},[41,45293,45294,45296,45298],{"class":43,"line":16939},[41,45295,32728],{"class":275},[41,45297,321],{"class":271},[41,45299,32733],{"class":275},[41,45301,45302],{"class":43,"line":16953},[41,45303,80],{"emptyLinePlaceholder":79},[41,45305,45306],{"class":43,"line":16958},[41,45307,34685],{"class":47},[41,45309,45310],{"class":43,"line":16964},[41,45311,32978],{"class":275},[41,45313,45314],{"class":43,"line":16969},[41,45315,34694],{"class":47},[41,45317,45318,45320,45322],{"class":43,"line":16983},[41,45319,32763],{"class":275},[41,45321,321],{"class":271},[41,45323,32768],{"class":275},[41,45325,45326],{"class":43,"line":16988},[41,45327,34707],{"class":47},[41,45329,45330,45332,45334,45336,45338,45340,45342],{"class":43,"line":16993},[41,45331,32780],{"class":275},[41,45333,321],{"class":271},[41,45335,32785],{"class":275},[41,45337,32788],{"class":5354},[41,45339,321],{"class":271},[41,45341,26],{"class":58},[41,45343,282],{"class":275},[41,45345,45346],{"class":43,"line":17007},[41,45347,34728],{"class":47},[41,45349,45350,45352,45354],{"class":43,"line":17019},[41,45351,34733],{"class":275},[41,45353,321],{"class":271},[41,45355,34738],{"class":275},[41,45357,45358,45360,45362],{"class":43,"line":17024},[41,45359,34743],{"class":275},[41,45361,321],{"class":271},[41,45363,34748],{"class":275},[41,45365,45366,45368,45370,45372,45374,45376,45378,45380],{"class":43,"line":17037},[41,45367,34753],{"class":58},[41,45369,276],{"class":275},[41,45371,34758],{"class":378},[41,45373,34761],{"class":275},[41,45375,34764],{"class":378},[41,45377,651],{"class":275},[41,45379,34769],{"class":378},[41,45381,34772],{"class":275},[241,45383,45385],{"id":45384},"_24训练自己的数据集","2.4.训练自己的数据集",[20,45387,45388],{},"猫狗分类任务",[20,45390,45391],{},"划分数据集和验证集",[32,45393,45395],{"className":30481,"code":45394,"language":30483,"meta":37,"style":37},"# 创建脚本，用于划分数据集和验证集\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",[24,45396,45397,45402,45409,45414,45425,45432,45436,45446,45460,45469,45473,45478,45488,45508,45512,45517,45527,45538,45551,45555,45560,45569,45579,45590,45594,45599,45609,45613,45618,45623,45628,45633,45638,45642,45652,45679,45692,45704,45731,45736,45741,45755,45760,45772,45787,45802,45810,45814,45819,45825,45837,45850,45855,45860,45865,45915,45921,45925],{"__ignoreMap":37},[41,45398,45399],{"class":43,"line":44},[41,45400,45401],{"class":47},"# 创建脚本，用于划分数据集和验证集\n",[41,45403,45404,45406],{"class":43,"line":51},[41,45405,30495],{"class":271},[41,45407,45408],{"class":275}," os\n",[41,45410,45411],{"class":43,"line":62},[41,45412,45413],{"class":47},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[41,45415,45416,45418,45421,45423],{"class":43,"line":70},[41,45417,30840],{"class":271},[41,45419,45420],{"class":275}," shutil ",[41,45422,30495],{"class":271},[41,45424,31925],{"class":275},[41,45426,45427,45429],{"class":43,"line":76},[41,45428,30495],{"class":271},[41,45430,45431],{"class":275}," random\n",[41,45433,45434],{"class":43,"line":83},[41,45435,80],{"emptyLinePlaceholder":79},[41,45437,45438,45440,45443],{"class":43,"line":89},[41,45439,32050],{"class":271},[41,45441,45442],{"class":54}," mkfile",[41,45444,45445],{"class":275},"(file):\n",[41,45447,45448,45450,45452,45455,45458],{"class":43,"line":96},[41,45449,3239],{"class":271},[41,45451,39033],{"class":271},[41,45453,45454],{"class":275}," os.path.exists(",[41,45456,45457],{"class":5354},"file",[41,45459,30889],{"class":275},[41,45461,45462,45465,45467],{"class":43,"line":104},[41,45463,45464],{"class":275},"        os.makedirs(",[41,45466,45457],{"class":5354},[41,45468,282],{"class":275},[41,45470,45471],{"class":43,"line":176},[41,45472,80],{"emptyLinePlaceholder":79},[41,45474,45475],{"class":43,"line":184},[41,45476,45477],{"class":47},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[41,45479,45480,45483,45485],{"class":43,"line":1757},[41,45481,45482],{"class":275},"file_path",[41,45484,321],{"class":271},[41,45486,45487],{"class":378},"'data_cat_dog'\n",[41,45489,45490,45493,45495,45498,45500,45503,45505],{"class":43,"line":1763},[41,45491,45492],{"class":275},"flower_class",[41,45494,321],{"class":271},[41,45496,45497],{"class":275},"[cla ",[41,45499,3163],{"class":271},[41,45501,45502],{"class":275}," cla ",[41,45504,26146],{"class":271},[41,45506,45507],{"class":275}," os.listdir(file_path)]\n",[41,45509,45510],{"class":43,"line":1768},[41,45511,80],{"emptyLinePlaceholder":79},[41,45513,45514],{"class":43,"line":1782},[41,45515,45516],{"class":47},"# 创建训练集train文件夹\n",[41,45518,45519,45522,45525],{"class":43,"line":1787},[41,45520,45521],{"class":275},"mkfile(",[41,45523,45524],{"class":378},"'data\u002Ftrain'",[41,45526,282],{"class":275},[41,45528,45529,45531,45533,45535],{"class":43,"line":1793},[41,45530,3163],{"class":271},[41,45532,45502],{"class":275},[41,45534,26146],{"class":271},[41,45536,45537],{"class":275}," flower_class:\n",[41,45539,45540,45543,45546,45548],{"class":43,"line":1814},[41,45541,45542],{"class":275},"    mkfile(",[41,45544,45545],{"class":378},"'data\u002Ftrain\u002F'",[41,45547,754],{"class":271},[41,45549,45550],{"class":275},"cla)\n",[41,45552,45553],{"class":43,"line":1819},[41,45554,80],{"emptyLinePlaceholder":79},[41,45556,45557],{"class":43,"line":1833},[41,45558,45559],{"class":47},"# 创建验证集val文件夹\n",[41,45561,45562,45564,45567],{"class":43,"line":1838},[41,45563,45521],{"class":275},[41,45565,45566],{"class":378},"'data\u002Ftest'",[41,45568,282],{"class":275},[41,45570,45571,45573,45575,45577],{"class":43,"line":1867},[41,45572,3163],{"class":271},[41,45574,45502],{"class":275},[41,45576,26146],{"class":271},[41,45578,45537],{"class":275},[41,45580,45581,45583,45586,45588],{"class":43,"line":1872},[41,45582,45542],{"class":275},[41,45584,45585],{"class":378},"'data\u002Ftest\u002F'",[41,45587,754],{"class":271},[41,45589,45550],{"class":275},[41,45591,45592],{"class":43,"line":1889},[41,45593,80],{"emptyLinePlaceholder":79},[41,45595,45596],{"class":43,"line":1894},[41,45597,45598],{"class":47},"# 划分比例，训练集：测试集=9：1\n",[41,45600,45601,45604,45606],{"class":43,"line":1899},[41,45602,45603],{"class":275},"split_rate",[41,45605,321],{"class":271},[41,45607,45608],{"class":58},"0.1\n",[41,45610,45611],{"class":43,"line":1904},[41,45612,80],{"emptyLinePlaceholder":79},[41,45614,45615],{"class":43,"line":1918},[41,45616,45617],{"class":47},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[41,45619,45620],{"class":43,"line":1923},[41,45621,45622],{"class":47},"# cla_path：当前类别的原始图片路径\n",[41,45624,45625],{"class":43,"line":2715},[41,45626,45627],{"class":47},"# images：当前类别下所有图片的文件名列表\n",[41,45629,45630],{"class":43,"line":2729},[41,45631,45632],{"class":47},"# num：该类别图片总数\n",[41,45634,45635],{"class":43,"line":2737},[41,45636,45637],{"class":47},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[41,45639,45640],{"class":43,"line":2742},[41,45641,80],{"emptyLinePlaceholder":79},[41,45643,45644,45646,45648,45650],{"class":43,"line":2748},[41,45645,3163],{"class":271},[41,45647,45502],{"class":275},[41,45649,26146],{"class":271},[41,45651,45537],{"class":275},[41,45653,45654,45657,45659,45662,45664,45667,45670,45672,45674,45676],{"class":43,"line":2754},[41,45655,45656],{"class":275},"    cla_path ",[41,45658,321],{"class":271},[41,45660,45661],{"class":275}," file_path ",[41,45663,754],{"class":271},[41,45665,45666],{"class":378}," '\u002F'",[41,45668,45669],{"class":271}," +",[41,45671,45502],{"class":275},[41,45673,754],{"class":271},[41,45675,45666],{"class":378},[41,45677,45678],{"class":47},"  # 某一类别的子目录\n",[41,45680,45681,45684,45686,45689],{"class":43,"line":2759},[41,45682,45683],{"class":275},"    images ",[41,45685,321],{"class":271},[41,45687,45688],{"class":275}," os.listdir(cla_path)  ",[41,45690,45691],{"class":47},"# iamges 列表存储了该目录下所有图像的名称\n",[41,45693,45694,45697,45699,45701],{"class":43,"line":8086},[41,45695,45696],{"class":275},"    num ",[41,45698,321],{"class":271},[41,45700,7469],{"class":58},[41,45702,45703],{"class":275},"(images)\n",[41,45705,45706,45709,45711,45714,45716,45718,45720,45723,45725,45728],{"class":43,"line":8110},[41,45707,45708],{"class":275},"    eval_index ",[41,45710,321],{"class":271},[41,45712,45713],{"class":275}," random.sample(images, ",[41,45715,766],{"class":5354},[41,45717,321],{"class":271},[41,45719,279],{"class":58},[41,45721,45722],{"class":275},"(num ",[41,45724,728],{"class":271},[41,45726,45727],{"class":275}," split_rate))  ",[41,45729,45730],{"class":47},"# 从images列表中随机抽取 k 个图像名称\n",[41,45732,45733],{"class":43,"line":8115},[41,45734,45735],{"class":47},"    # 遍历该类别下的所有图片\n",[41,45737,45738],{"class":43,"line":8121},[41,45739,45740],{"class":47},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[41,45742,45743,45745,45748,45750,45752],{"class":43,"line":8148},[41,45744,3339],{"class":271},[41,45746,45747],{"class":275}," index, image ",[41,45749,26146],{"class":271},[41,45751,31709],{"class":58},[41,45753,45754],{"class":275},"(images):\n",[41,45756,45757],{"class":43,"line":8153},[41,45758,45759],{"class":47},"        # eval_index 中保存验证集val的图像名称\n",[41,45761,45762,45764,45767,45769],{"class":43,"line":8159},[41,45763,2635],{"class":271},[41,45765,45766],{"class":275}," image ",[41,45768,26146],{"class":271},[41,45770,45771],{"class":275}," eval_index:\n",[41,45773,45774,45777,45779,45782,45784],{"class":43,"line":8171},[41,45775,45776],{"class":275},"            image_path ",[41,45778,321],{"class":271},[41,45780,45781],{"class":275}," cla_path ",[41,45783,754],{"class":271},[41,45785,45786],{"class":275}," image\n",[41,45788,45789,45792,45794,45797,45799],{"class":43,"line":8183},[41,45790,45791],{"class":275},"            new_path ",[41,45793,321],{"class":271},[41,45795,45796],{"class":378}," 'data\u002Ftest\u002F'",[41,45798,45669],{"class":271},[41,45800,45801],{"class":275}," cla\n",[41,45803,45804,45807],{"class":43,"line":8195},[41,45805,45806],{"class":275},"            copy(image_path, new_path)  ",[41,45808,45809],{"class":47},"# 将选中的图像复制到新路径\n",[41,45811,45812],{"class":43,"line":9854},[41,45813,80],{"emptyLinePlaceholder":79},[41,45815,45816],{"class":43,"line":9879},[41,45817,45818],{"class":47},"        # 其余的图像保存在训练集train中\n",[41,45820,45821,45823],{"class":43,"line":9902},[41,45822,2672],{"class":271},[41,45824,3877],{"class":275},[41,45826,45827,45829,45831,45833,45835],{"class":43,"line":9926},[41,45828,45776],{"class":275},[41,45830,321],{"class":271},[41,45832,45781],{"class":275},[41,45834,754],{"class":271},[41,45836,45786],{"class":275},[41,45838,45839,45841,45843,45846,45848],{"class":43,"line":9931},[41,45840,45791],{"class":275},[41,45842,321],{"class":271},[41,45844,45845],{"class":378}," 'data\u002Ftrain\u002F'",[41,45847,45669],{"class":271},[41,45849,45801],{"class":275},[41,45851,45852],{"class":43,"line":9936},[41,45853,45854],{"class":275},"            copy(image_path, new_path)\n",[41,45856,45857],{"class":43,"line":9941},[41,45858,45859],{"class":47},"            # 打印进度条信息\n",[41,45861,45862],{"class":43,"line":9950},[41,45863,45864],{"class":47},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[41,45866,45867,45869,45871,45873,45876,45878,45880,45883,45885,45887,45889,45892,45895,45897,45899,45902,45905,45907,45909,45912],{"class":43,"line":9955},[41,45868,32554],{"class":58},[41,45870,276],{"class":275},[41,45872,524],{"class":378},[41,45874,45875],{"class":58},"\\r",[41,45877,1163],{"class":378},[41,45879,32562],{"class":58},[41,45881,45882],{"class":378},"] processing [",[41,45884,32562],{"class":58},[41,45886,857],{"class":378},[41,45888,32562],{"class":58},[41,45890,45891],{"class":378},"]\"",[41,45893,45894],{"class":275},".format(cla, index ",[41,45896,754],{"class":271},[41,45898,25221],{"class":58},[41,45900,45901],{"class":275},", num), ",[41,45903,45904],{"class":5354},"end",[41,45906,321],{"class":271},[41,45908,7790],{"class":378},[41,45910,45911],{"class":275},")  ",[41,45913,45914],{"class":47},"# processing bar\n",[41,45916,45917,45919],{"class":43,"line":9961},[41,45918,31402],{"class":58},[41,45920,2115],{"class":275},[41,45922,45923],{"class":43,"line":9982},[41,45924,80],{"emptyLinePlaceholder":79},[41,45926,45927,45929,45931,45934],{"class":43,"line":9988},[41,45928,30518],{"class":58},[41,45930,276],{"class":275},[41,45932,45933],{"class":378},"\"processing done!\"",[41,45935,282],{"class":275},[20,45937,45938],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22136,45940,45942],{"id":45941},"_242模型代码","2.4.2.模型代码",[20,45944,45945],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[32,45947,45949],{"className":30481,"code":45948,"language":30483,"meta":37,"style":37},"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",[24,45950,45951,45957,45967,45977,45981,45997,46005,46019,46029,46033,46063,46067,46101,46147,46151,46185,46231,46235,46239,46273,46303,46307,46315,46329,46351,46373,46391,46395,46409,46413,46417,46433,46437,46445,46459,46469,46513,46517,46545,46549,46559,46587,46591,46627,46631,46659,46663,46673,46705,46737,46765,46769,46779,46811,46843,46875,46907,46939,46967,46971,46981,47013,47045,47057,47061,47073,47077,47081,47093,47101,47121,47125,47129,47133,47137,47141,47145,47159,47167,47175,47187,47201,47209,47213,47221,47231,47241,47251,47261,47271,47277,47281,47285,47297,47317,47325],{"__ignoreMap":37},[41,45952,45953,45955],{"class":43,"line":44},[41,45954,30495],{"class":271},[41,45956,30498],{"class":275},[41,45958,45959,45961,45963,45965],{"class":43,"line":51},[41,45960,30840],{"class":271},[41,45962,30843],{"class":275},[41,45964,30495],{"class":271},[41,45966,30848],{"class":275},[41,45968,45969,45971,45973,45975],{"class":43,"line":62},[41,45970,30840],{"class":271},[41,45972,30860],{"class":275},[41,45974,30495],{"class":271},[41,45976,30865],{"class":275},[41,45978,45979],{"class":43,"line":70},[41,45980,80],{"emptyLinePlaceholder":79},[41,45982,45983,45985,45987,45989,45991,45993,45995],{"class":43,"line":76},[41,45984,14832],{"class":271},[41,45986,41596],{"class":54},[41,45988,276],{"class":275},[41,45990,30881],{"class":54},[41,45992,831],{"class":275},[41,45994,30886],{"class":54},[41,45996,30889],{"class":275},[41,45998,45999,46001,46003],{"class":43,"line":83},[41,46000,30904],{"class":271},[41,46002,30907],{"class":58},[41,46004,41615],{"class":275},[41,46006,46007,46009,46011,46013,46015,46017],{"class":43,"line":89},[41,46008,30920],{"class":58},[41,46010,41622],{"class":275},[41,46012,30926],{"class":58},[41,46014,30929],{"class":275},[41,46016,30932],{"class":58},[41,46018,2115],{"class":275},[41,46020,46021,46023,46025,46027],{"class":43,"line":96},[41,46022,30948],{"class":58},[41,46024,34874],{"class":275},[41,46026,321],{"class":271},[41,46028,34879],{"class":275},[41,46030,46031],{"class":43,"line":104},[41,46032,41645],{"class":47},[41,46034,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061],{"class":43,"line":176},[41,46036,30948],{"class":58},[41,46038,41652],{"class":275},[41,46040,321],{"class":271},[41,46042,30956],{"class":275},[41,46044,30959],{"class":5354},[41,46046,321],{"class":271},[41,46048,41663],{"class":275},[41,46050,30968],{"class":5354},[41,46052,321],{"class":271},[41,46054,41670],{"class":275},[41,46056,30977],{"class":5354},[41,46058,321],{"class":271},[41,46060,26],{"class":58},[41,46062,282],{"class":275},[41,46064,46065],{"class":43,"line":184},[41,46066,41683],{"class":47},[41,46068,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099],{"class":43,"line":1757},[41,46070,30948],{"class":58},[41,46072,41690],{"class":275},[41,46074,321],{"class":271},[41,46076,30956],{"class":275},[41,46078,30959],{"class":5354},[41,46080,321],{"class":271},[41,46082,41663],{"class":275},[41,46084,30968],{"class":5354},[41,46086,321],{"class":271},[41,46088,41707],{"class":275},[41,46090,465],{"class":58},[41,46092,41712],{"class":275},[41,46094,30977],{"class":5354},[41,46096,321],{"class":271},[41,46098,26],{"class":58},[41,46100,282],{"class":275},[41,46102,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145],{"class":43,"line":1763},[41,46104,30948],{"class":58},[41,46106,41727],{"class":275},[41,46108,321],{"class":271},[41,46110,30956],{"class":275},[41,46112,30959],{"class":5354},[41,46114,321],{"class":271},[41,46116,41707],{"class":275},[41,46118,465],{"class":58},[41,46120,41712],{"class":275},[41,46122,30968],{"class":5354},[41,46124,321],{"class":271},[41,46126,41707],{"class":275},[41,46128,26],{"class":58},[41,46130,41712],{"class":275},[41,46132,30977],{"class":5354},[41,46134,321],{"class":271},[41,46136,345],{"class":58},[41,46138,651],{"class":275},[41,46140,30986],{"class":5354},[41,46142,321],{"class":271},[41,46144,26],{"class":58},[41,46146,282],{"class":275},[41,46148,46149],{"class":43,"line":1768},[41,46150,41772],{"class":47},[41,46152,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183],{"class":43,"line":1782},[41,46154,30948],{"class":58},[41,46156,41779],{"class":275},[41,46158,321],{"class":271},[41,46160,30956],{"class":275},[41,46162,30959],{"class":5354},[41,46164,321],{"class":271},[41,46166,41663],{"class":275},[41,46168,30968],{"class":5354},[41,46170,321],{"class":271},[41,46172,41796],{"class":275},[41,46174,465],{"class":58},[41,46176,41712],{"class":275},[41,46178,30977],{"class":5354},[41,46180,321],{"class":271},[41,46182,26],{"class":58},[41,46184,282],{"class":275},[41,46186,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227,46229],{"class":43,"line":1787},[41,46188,30948],{"class":58},[41,46190,41815],{"class":275},[41,46192,321],{"class":271},[41,46194,30956],{"class":275},[41,46196,30959],{"class":5354},[41,46198,321],{"class":271},[41,46200,41796],{"class":275},[41,46202,465],{"class":58},[41,46204,41712],{"class":275},[41,46206,30968],{"class":5354},[41,46208,321],{"class":271},[41,46210,41796],{"class":275},[41,46212,26],{"class":58},[41,46214,41712],{"class":275},[41,46216,30977],{"class":5354},[41,46218,321],{"class":271},[41,46220,592],{"class":58},[41,46222,651],{"class":275},[41,46224,30986],{"class":5354},[41,46226,321],{"class":271},[41,46228,351],{"class":58},[41,46230,282],{"class":275},[41,46232,46233],{"class":43,"line":1793},[41,46234,41860],{"class":47},[41,46236,46237],{"class":43,"line":1814},[41,46238,41865],{"class":47},[41,46240,46241,46243,46245,46247,46249,46251,46253,46255,46257,46259,46261,46263,46265,46267,46269,46271],{"class":43,"line":1819},[41,46242,30948],{"class":58},[41,46244,41872],{"class":275},[41,46246,321],{"class":271},[41,46248,34932],{"class":275},[41,46250,30977],{"class":5354},[41,46252,321],{"class":271},[41,46254,345],{"class":58},[41,46256,651],{"class":275},[41,46258,31032],{"class":5354},[41,46260,321],{"class":271},[41,46262,26],{"class":58},[41,46264,651],{"class":275},[41,46266,30986],{"class":5354},[41,46268,321],{"class":271},[41,46270,26],{"class":58},[41,46272,282],{"class":275},[41,46274,46275,46277,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297,46299,46301],{"class":43,"line":1833},[41,46276,30948],{"class":58},[41,46278,41907],{"class":275},[41,46280,321],{"class":271},[41,46282,30956],{"class":275},[41,46284,30959],{"class":5354},[41,46286,321],{"class":271},[41,46288,41663],{"class":275},[41,46290,30968],{"class":5354},[41,46292,321],{"class":271},[41,46294,41924],{"class":275},[41,46296,30977],{"class":5354},[41,46298,321],{"class":271},[41,46300,26],{"class":58},[41,46302,282],{"class":275},[41,46304,46305],{"class":43,"line":1838},[41,46306,80],{"emptyLinePlaceholder":79},[41,46308,46309,46311,46313],{"class":43,"line":1867},[41,46310,30904],{"class":271},[41,46312,31196],{"class":54},[41,46314,31199],{"class":275},[41,46316,46317,46319,46321,46323,46325,46327],{"class":43,"line":1872},[41,46318,41949],{"class":275},[41,46320,321],{"class":271},[41,46322,30926],{"class":58},[41,46324,35287],{"class":275},[41,46326,30926],{"class":58},[41,46328,41960],{"class":275},[41,46330,46331,46333,46335,46337,46339,46341,46343,46345,46347,46349],{"class":43,"line":1889},[41,46332,7223],{"class":275},[41,46334,321],{"class":271},[41,46336,30926],{"class":58},[41,46338,35287],{"class":275},[41,46340,30926],{"class":58},[41,46342,41975],{"class":275},[41,46344,30926],{"class":58},[41,46346,35287],{"class":275},[41,46348,30926],{"class":58},[41,46350,41984],{"class":275},[41,46352,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371],{"class":43,"line":1894},[41,46354,41989],{"class":275},[41,46356,321],{"class":271},[41,46358,30926],{"class":58},[41,46360,35287],{"class":275},[41,46362,30926],{"class":58},[41,46364,42000],{"class":275},[41,46366,30926],{"class":58},[41,46368,35287],{"class":275},[41,46370,30926],{"class":58},[41,46372,42009],{"class":275},[41,46374,46375,46377,46379,46381,46383,46385,46387,46389],{"class":43,"line":1899},[41,46376,42014],{"class":275},[41,46378,321],{"class":271},[41,46380,30926],{"class":58},[41,46382,35287],{"class":275},[41,46384,30926],{"class":58},[41,46386,42025],{"class":275},[41,46388,30926],{"class":58},[41,46390,42030],{"class":275},[41,46392,46393],{"class":43,"line":1904},[41,46394,42035],{"class":47},[41,46396,46397,46399,46401,46403,46405,46407],{"class":43,"line":1918},[41,46398,14890],{"class":271},[41,46400,42042],{"class":275},[41,46402,32788],{"class":5354},[41,46404,321],{"class":271},[41,46406,26],{"class":58},[41,46408,282],{"class":275},[41,46410,46411],{"class":43,"line":1923},[41,46412,80],{"emptyLinePlaceholder":79},[41,46414,46415],{"class":43,"line":2715},[41,46416,42063],{"class":47},[41,46418,46419,46421,46423,46425,46427,46429,46431],{"class":43,"line":2729},[41,46420,14832],{"class":271},[41,46422,42070],{"class":54},[41,46424,276],{"class":275},[41,46426,30881],{"class":54},[41,46428,831],{"class":275},[41,46430,30886],{"class":54},[41,46432,30889],{"class":275},[41,46434,46435],{"class":43,"line":2737},[41,46436,42085],{"class":47},[41,46438,46439,46441,46443],{"class":43,"line":2742},[41,46440,30904],{"class":271},[41,46442,30907],{"class":58},[41,46444,42094],{"class":275},[41,46446,46447,46449,46451,46453,46455,46457],{"class":43,"line":2748},[41,46448,30920],{"class":58},[41,46450,42101],{"class":275},[41,46452,30926],{"class":58},[41,46454,30929],{"class":275},[41,46456,30932],{"class":58},[41,46458,2115],{"class":275},[41,46460,46461,46463,46465,46467],{"class":43,"line":2754},[41,46462,30948],{"class":58},[41,46464,42116],{"class":275},[41,46466,321],{"class":271},[41,46468,38112],{"class":275},[41,46470,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511],{"class":43,"line":2759},[41,46472,38117],{"class":275},[41,46474,30959],{"class":5354},[41,46476,321],{"class":271},[41,46478,345],{"class":58},[41,46480,651],{"class":275},[41,46482,30968],{"class":5354},[41,46484,321],{"class":271},[41,46486,477],{"class":58},[41,46488,651],{"class":275},[41,46490,30977],{"class":5354},[41,46492,321],{"class":271},[41,46494,642],{"class":58},[41,46496,651],{"class":275},[41,46498,31032],{"class":5354},[41,46500,321],{"class":271},[41,46502,351],{"class":58},[41,46504,651],{"class":275},[41,46506,30986],{"class":5354},[41,46508,321],{"class":271},[41,46510,345],{"class":58},[41,46512,38150],{"class":275},[41,46514,46515],{"class":43,"line":8086},[41,46516,38155],{"class":275},[41,46518,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543],{"class":43,"line":8110},[41,46520,38200],{"class":275},[41,46522,30977],{"class":5354},[41,46524,321],{"class":271},[41,46526,345],{"class":58},[41,46528,651],{"class":275},[41,46530,31032],{"class":5354},[41,46532,321],{"class":271},[41,46534,351],{"class":58},[41,46536,651],{"class":275},[41,46538,30986],{"class":5354},[41,46540,321],{"class":271},[41,46542,26],{"class":58},[41,46544,282],{"class":275},[41,46546,46547],{"class":43,"line":8115},[41,46548,38229],{"class":275},[41,46550,46551,46553,46555,46557],{"class":43,"line":8121},[41,46552,30948],{"class":58},[41,46554,42207],{"class":275},[41,46556,321],{"class":271},[41,46558,38112],{"class":275},[41,46560,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585],{"class":43,"line":8148},[41,46562,38117],{"class":275},[41,46564,30959],{"class":5354},[41,46566,321],{"class":271},[41,46568,477],{"class":58},[41,46570,651],{"class":275},[41,46572,30968],{"class":5354},[41,46574,321],{"class":271},[41,46576,477],{"class":58},[41,46578,651],{"class":275},[41,46580,30977],{"class":5354},[41,46582,321],{"class":271},[41,46584,26],{"class":58},[41,46586,38150],{"class":275},[41,46588,46589],{"class":43,"line":8153},[41,46590,38155],{"class":275},[41,46592,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625],{"class":43,"line":8159},[41,46594,38117],{"class":275},[41,46596,30959],{"class":5354},[41,46598,321],{"class":271},[41,46600,477],{"class":58},[41,46602,651],{"class":275},[41,46604,30968],{"class":5354},[41,46606,321],{"class":271},[41,46608,42262],{"class":58},[41,46610,651],{"class":275},[41,46612,30977],{"class":5354},[41,46614,321],{"class":271},[41,46616,345],{"class":58},[41,46618,651],{"class":275},[41,46620,30986],{"class":5354},[41,46622,321],{"class":271},[41,46624,26],{"class":58},[41,46626,38150],{"class":275},[41,46628,46629],{"class":43,"line":8171},[41,46630,38155],{"class":275},[41,46632,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657],{"class":43,"line":8183},[41,46634,38200],{"class":275},[41,46636,30977],{"class":5354},[41,46638,321],{"class":271},[41,46640,345],{"class":58},[41,46642,651],{"class":275},[41,46644,31032],{"class":5354},[41,46646,321],{"class":271},[41,46648,351],{"class":58},[41,46650,651],{"class":275},[41,46652,30986],{"class":5354},[41,46654,321],{"class":271},[41,46656,26],{"class":58},[41,46658,282],{"class":275},[41,46660,46661],{"class":43,"line":8195},[41,46662,38229],{"class":275},[41,46664,46665,46667,46669,46671],{"class":43,"line":9854},[41,46666,30948],{"class":58},[41,46668,42323],{"class":275},[41,46670,321],{"class":271},[41,46672,38112],{"class":275},[41,46674,46675,46677,46679,46681,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701,46703],{"class":43,"line":9879},[41,46676,42332],{"class":275},[41,46678,42262],{"class":58},[41,46680,651],{"class":275},[41,46682,477],{"class":58},[41,46684,42341],{"class":275},[41,46686,483],{"class":58},[41,46688,651],{"class":275},[41,46690,32173],{"class":58},[41,46692,42350],{"class":275},[41,46694,874],{"class":58},[41,46696,651],{"class":275},[41,46698,471],{"class":58},[41,46700,42359],{"class":275},[41,46702,471],{"class":58},[41,46704,38150],{"class":275},[41,46706,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735],{"class":43,"line":9902},[41,46708,42332],{"class":275},[41,46710,34973],{"class":58},[41,46712,651],{"class":275},[41,46714,32173],{"class":58},[41,46716,42341],{"class":275},[41,46718,32173],{"class":58},[41,46720,651],{"class":275},[41,46722,42262],{"class":58},[41,46724,42350],{"class":275},[41,46726,471],{"class":58},[41,46728,651],{"class":275},[41,46730,483],{"class":58},[41,46732,42359],{"class":275},[41,46734,477],{"class":58},[41,46736,38150],{"class":275},[41,46738,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763],{"class":43,"line":9926},[41,46740,38200],{"class":275},[41,46742,30977],{"class":5354},[41,46744,321],{"class":271},[41,46746,345],{"class":58},[41,46748,651],{"class":275},[41,46750,31032],{"class":5354},[41,46752,321],{"class":271},[41,46754,351],{"class":58},[41,46756,651],{"class":275},[41,46758,30986],{"class":5354},[41,46760,321],{"class":271},[41,46762,26],{"class":58},[41,46764,282],{"class":275},[41,46766,46767],{"class":43,"line":9931},[41,46768,38229],{"class":275},[41,46770,46771,46773,46775,46777],{"class":43,"line":9936},[41,46772,30948],{"class":58},[41,46774,42434],{"class":275},[41,46776,321],{"class":271},[41,46778,38112],{"class":275},[41,46780,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809],{"class":43,"line":9941},[41,46782,42332],{"class":275},[41,46784,42445],{"class":58},[41,46786,651],{"class":275},[41,46788,42262],{"class":58},[41,46790,42341],{"class":275},[41,46792,483],{"class":58},[41,46794,651],{"class":275},[41,46796,42458],{"class":58},[41,46798,42350],{"class":275},[41,46800,874],{"class":58},[41,46802,651],{"class":275},[41,46804,880],{"class":58},[41,46806,42359],{"class":275},[41,46808,477],{"class":58},[41,46810,38150],{"class":275},[41,46812,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841],{"class":43,"line":9950},[41,46814,42332],{"class":275},[41,46816,38560],{"class":58},[41,46818,651],{"class":275},[41,46820,21186],{"class":58},[41,46822,42341],{"class":275},[41,46824,891],{"class":58},[41,46826,651],{"class":275},[41,46828,31604],{"class":58},[41,46830,42350],{"class":275},[41,46832,1073],{"class":58},[41,46834,651],{"class":275},[41,46836,477],{"class":58},[41,46838,42359],{"class":275},[41,46840,477],{"class":58},[41,46842,38150],{"class":275},[41,46844,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873],{"class":43,"line":9955},[41,46846,42332],{"class":275},[41,46848,38560],{"class":58},[41,46850,651],{"class":275},[41,46852,32173],{"class":58},[41,46854,42341],{"class":275},[41,46856,32173],{"class":58},[41,46858,651],{"class":275},[41,46860,34973],{"class":58},[41,46862,42350],{"class":275},[41,46864,1073],{"class":58},[41,46866,651],{"class":275},[41,46868,477],{"class":58},[41,46870,42359],{"class":275},[41,46872,477],{"class":58},[41,46874,38150],{"class":275},[41,46876,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903,46905],{"class":43,"line":9961},[41,46878,42332],{"class":275},[41,46880,38560],{"class":58},[41,46882,651],{"class":275},[41,46884,891],{"class":58},[41,46886,42341],{"class":275},[41,46888,32173],{"class":58},[41,46890,651],{"class":275},[41,46892,42555],{"class":58},[41,46894,42350],{"class":275},[41,46896,471],{"class":58},[41,46898,651],{"class":275},[41,46900,477],{"class":58},[41,46902,42359],{"class":275},[41,46904,477],{"class":58},[41,46906,38150],{"class":275},[41,46908,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937],{"class":43,"line":9982},[41,46910,42332],{"class":275},[41,46912,42576],{"class":58},[41,46914,651],{"class":275},[41,46916,34973],{"class":58},[41,46918,42341],{"class":275},[41,46920,21186],{"class":58},[41,46922,651],{"class":275},[41,46924,42589],{"class":58},[41,46926,42350],{"class":275},[41,46928,471],{"class":58},[41,46930,651],{"class":275},[41,46932,32173],{"class":58},[41,46934,42359],{"class":275},[41,46936,32173],{"class":58},[41,46938,38150],{"class":275},[41,46940,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965],{"class":43,"line":9988},[41,46942,38200],{"class":275},[41,46944,30977],{"class":5354},[41,46946,321],{"class":271},[41,46948,345],{"class":58},[41,46950,651],{"class":275},[41,46952,31032],{"class":5354},[41,46954,321],{"class":271},[41,46956,351],{"class":58},[41,46958,651],{"class":275},[41,46960,30986],{"class":5354},[41,46962,321],{"class":271},[41,46964,26],{"class":58},[41,46966,282],{"class":275},[41,46968,46969],{"class":43,"line":10002},[41,46970,38229],{"class":275},[41,46972,46973,46975,46977,46979],{"class":43,"line":10008},[41,46974,30948],{"class":58},[41,46976,42642],{"class":275},[41,46978,321],{"class":271},[41,46980,38112],{"class":275},[41,46982,46983,46985,46987,46989,46991,46993,46995,46997,46999,47001,47003,47005,47007,47009,47011],{"class":43,"line":10035},[41,46984,42332],{"class":275},[41,46986,42653],{"class":58},[41,46988,651],{"class":275},[41,46990,34973],{"class":58},[41,46992,42341],{"class":275},[41,46994,21186],{"class":58},[41,46996,651],{"class":275},[41,46998,42589],{"class":58},[41,47000,42350],{"class":275},[41,47002,471],{"class":58},[41,47004,651],{"class":275},[41,47006,32173],{"class":58},[41,47008,42359],{"class":275},[41,47010,32173],{"class":58},[41,47012,38150],{"class":275},[41,47014,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033,47035,47037,47039,47041,47043],{"class":43,"line":10044},[41,47016,42332],{"class":275},[41,47018,42653],{"class":58},[41,47020,651],{"class":275},[41,47022,35043],{"class":58},[41,47024,42341],{"class":275},[41,47026,42262],{"class":58},[41,47028,651],{"class":275},[41,47030,35043],{"class":58},[41,47032,42350],{"class":275},[41,47034,880],{"class":58},[41,47036,651],{"class":275},[41,47038,32173],{"class":58},[41,47040,42359],{"class":275},[41,47042,32173],{"class":58},[41,47044,38150],{"class":275},[41,47046,47047,47049,47051,47053,47055],{"class":43,"line":10050},[41,47048,42716],{"class":275},[41,47050,26],{"class":58},[41,47052,651],{"class":275},[41,47054,26],{"class":58},[41,47056,42725],{"class":275},[41,47058,47059],{"class":43,"line":10058},[41,47060,38893],{"class":275},[41,47062,47063,47065,47067,47069,47071],{"class":43,"line":10063},[41,47064,38898],{"class":275},[41,47066,42736],{"class":58},[41,47068,651],{"class":275},[41,47070,351],{"class":58},[41,47072,282],{"class":275},[41,47074,47075],{"class":43,"line":16742},[41,47076,38229],{"class":275},[41,47078,47079],{"class":43,"line":16748},[41,47080,42751],{"class":47},[41,47082,47083,47085,47087,47089,47091],{"class":43,"line":16771},[41,47084,3541],{"class":271},[41,47086,38971],{"class":275},[41,47088,26146],{"class":271},[41,47090,38976],{"class":58},[41,47092,38979],{"class":275},[41,47094,47095,47097,47099],{"class":43,"line":16777},[41,47096,4780],{"class":271},[41,47098,38991],{"class":58},[41,47100,38994],{"class":275},[41,47102,47103,47105,47107,47109,47111,47113,47115,47117,47119],{"class":43,"line":16800},[41,47104,39004],{"class":275},[41,47106,42778],{"class":5354},[41,47108,321],{"class":271},[41,47110,42783],{"class":378},[41,47112,651],{"class":275},[41,47114,39007],{"class":5354},[41,47116,321],{"class":271},[41,47118,39012],{"class":378},[41,47120,282],{"class":275},[41,47122,47123],{"class":43,"line":16814},[41,47124,42798],{"class":47},[41,47126,47127],{"class":43,"line":16834},[41,47128,42803],{"class":47},[41,47130,47131],{"class":43,"line":16840},[41,47132,42808],{"class":47},[41,47134,47135],{"class":43,"line":16851},[41,47136,42813],{"class":47},[41,47138,47139],{"class":43,"line":16874},[41,47140,42818],{"class":47},[41,47142,47143],{"class":43,"line":16896},[41,47144,42823],{"class":47},[41,47146,47147,47149,47151,47153,47155,47157],{"class":43,"line":16901},[41,47148,39024],{"class":271},[41,47150,39027],{"class":275},[41,47152,39030],{"class":271},[41,47154,39033],{"class":271},[41,47156,39036],{"class":58},[41,47158,3877],{"class":275},[41,47160,47161,47163,47165],{"class":43,"line":16907},[41,47162,39048],{"class":275},[41,47164,465],{"class":58},[41,47166,282],{"class":275},[41,47168,47169,47171,47173],{"class":43,"line":16921},[41,47170,42850],{"class":271},[41,47172,38991],{"class":58},[41,47174,39067],{"class":275},[41,47176,47177,47179,47181,47183,47185],{"class":43,"line":16934},[41,47178,42859],{"class":275},[41,47180,465],{"class":58},[41,47182,651],{"class":275},[41,47184,39089],{"class":58},[41,47186,282],{"class":275},[41,47188,47189,47191,47193,47195,47197,47199],{"class":43,"line":16939},[41,47190,42872],{"class":271},[41,47192,39027],{"class":275},[41,47194,39030],{"class":271},[41,47196,39033],{"class":271},[41,47198,39036],{"class":58},[41,47200,3877],{"class":275},[41,47202,47203,47205,47207],{"class":43,"line":16953},[41,47204,42887],{"class":275},[41,47206,465],{"class":58},[41,47208,282],{"class":275},[41,47210,47211],{"class":43,"line":16958},[41,47212,35268],{"class":47},[41,47214,47215,47217,47219],{"class":43,"line":16964},[41,47216,30904],{"class":271},[41,47218,31196],{"class":54},[41,47220,31199],{"class":275},[41,47222,47223,47225,47227,47229],{"class":43,"line":16969},[41,47224,31204],{"class":275},[41,47226,321],{"class":271},[41,47228,30926],{"class":58},[41,47230,42914],{"class":275},[41,47232,47233,47235,47237,47239],{"class":43,"line":16983},[41,47234,31204],{"class":275},[41,47236,321],{"class":271},[41,47238,30926],{"class":58},[41,47240,42925],{"class":275},[41,47242,47243,47245,47247,47249],{"class":43,"line":16988},[41,47244,31204],{"class":275},[41,47246,321],{"class":271},[41,47248,30926],{"class":58},[41,47250,42936],{"class":275},[41,47252,47253,47255,47257,47259],{"class":43,"line":16993},[41,47254,31204],{"class":275},[41,47256,321],{"class":271},[41,47258,30926],{"class":58},[41,47260,42947],{"class":275},[41,47262,47263,47265,47267,47269],{"class":43,"line":17007},[41,47264,31204],{"class":275},[41,47266,321],{"class":271},[41,47268,30926],{"class":58},[41,47270,42958],{"class":275},[41,47272,47273,47275],{"class":43,"line":17019},[41,47274,14890],{"class":271},[41,47276,31312],{"class":275},[41,47278,47279],{"class":43,"line":17024},[41,47280,80],{"emptyLinePlaceholder":79},[41,47282,47283],{"class":43,"line":17037},[41,47284,42973],{"class":47},[41,47286,47287,47289,47291,47293,47295],{"class":43,"line":17042},[41,47288,1672],{"class":271},[41,47290,31323],{"class":58},[41,47292,3087],{"class":271},[41,47294,31328],{"class":378},[41,47296,3877],{"class":275},[41,47298,47299,47301,47303,47305,47307,47309,47311,47313,47315],{"class":43,"line":17047},[41,47300,31340],{"class":275},[41,47302,321],{"class":271},[41,47304,30554],{"class":275},[41,47306,31347],{"class":378},[41,47308,1844],{"class":271},[41,47310,31352],{"class":275},[41,47312,1841],{"class":271},[41,47314,30579],{"class":378},[41,47316,282],{"class":275},[41,47318,47319,47321,47323],{"class":43,"line":17052},[41,47320,31392],{"class":275},[41,47322,321],{"class":271},[41,47324,43014],{"class":275},[41,47326,47327,47329,47331,47333,47335,47337,47339,47341],{"class":43,"line":17065},[41,47328,31402],{"class":58},[41,47330,31405],{"class":275},[41,47332,26],{"class":58},[41,47334,651],{"class":275},[41,47336,31604],{"class":58},[41,47338,651],{"class":275},[41,47340,31604],{"class":58},[41,47342,31418],{"class":275},[22136,47344,47346],{"id":47345},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[20,47348,47349],{},"计算图片的均值与方差，用于训练中归一化处理操作",[32,47351,47353],{"className":30481,"code":47352,"language":30483,"meta":37,"style":37},"# 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",[24,47354,47355,47360,47373,47378,47384,47389,47399,47403,47408,47418,47422,47427,47437,47454,47458,47463,47475,47487,47518,47527,47537,47547,47551,47556,47571,47575,47580,47585,47590,47600,47605,47630,47634,47639,47654,47658,47671,47675,47680,47685,47690,47695,47700,47710,47720,47743,47751,47759,47767,47771,47783,47787,47792,47796,47800,47807,47827,47851,47858,47872,47877,47882,47886,47900,47904,47916],{"__ignoreMap":37},[41,47356,47357],{"class":43,"line":44},[41,47358,47359],{"class":47},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[41,47361,47362,47364,47367,47370],{"class":43,"line":51},[41,47363,30840],{"class":271},[41,47365,47366],{"class":58}," PIL",[41,47368,47369],{"class":271}," import",[41,47371,47372],{"class":275}," Image\n",[41,47374,47375],{"class":43,"line":62},[41,47376,47377],{"class":47},"# os 用来处理文件夹和文件路径\n",[41,47379,47380,47382],{"class":43,"line":70},[41,47381,30495],{"class":271},[41,47383,45408],{"class":275},[41,47385,47386],{"class":43,"line":76},[41,47387,47388],{"class":47},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[41,47390,47391,47393,47395,47397],{"class":43,"line":83},[41,47392,30495],{"class":271},[41,47394,31483],{"class":275},[41,47396,31486],{"class":271},[41,47398,31489],{"class":275},[41,47400,47401],{"class":43,"line":89},[41,47402,80],{"emptyLinePlaceholder":79},[41,47404,47405],{"class":43,"line":96},[41,47406,47407],{"class":47},"# 文件夹路径，包含所有图片文件\n",[41,47409,47410,47413,47415],{"class":43,"line":104},[41,47411,47412],{"class":275},"folder_path ",[41,47414,321],{"class":271},[41,47416,47417],{"class":378}," 'data_cat_dog'\n",[41,47419,47420],{"class":43,"line":176},[41,47421,80],{"emptyLinePlaceholder":79},[41,47423,47424],{"class":43,"line":184},[41,47425,47426],{"class":47},"# 初始化累积变量\n",[41,47428,47429,47432,47434],{"class":43,"line":1757},[41,47430,47431],{"class":275},"total_pixels ",[41,47433,321],{"class":271},[41,47435,47436],{"class":58}," 0\n",[41,47438,47439,47442,47444,47447,47449,47451],{"class":43,"line":1763},[41,47440,47441],{"class":275},"sum_normalized_pixel_values ",[41,47443,321],{"class":271},[41,47445,47446],{"class":275}," np.zeros(",[41,47448,345],{"class":58},[41,47450,45911],{"class":275},[41,47452,47453],{"class":47},"# 如果是RGB图像，需要三个通道的均值和方差\n",[41,47455,47456],{"class":43,"line":1768},[41,47457,80],{"emptyLinePlaceholder":79},[41,47459,47460],{"class":43,"line":1782},[41,47461,47462],{"class":47},"# 遍历文件夹中的图片文件\n",[41,47464,47465,47467,47470,47472],{"class":43,"line":1787},[41,47466,3163],{"class":271},[41,47468,47469],{"class":275}," root, dirs, files ",[41,47471,26146],{"class":271},[41,47473,47474],{"class":275}," os.walk(folder_path):\n",[41,47476,47477,47479,47482,47484],{"class":43,"line":1793},[41,47478,3339],{"class":271},[41,47480,47481],{"class":275}," filename ",[41,47483,26146],{"class":271},[41,47485,47486],{"class":275}," files:\n",[41,47488,47489,47491,47494,47497,47499,47502,47504,47507,47509,47512,47515],{"class":43,"line":1814},[41,47490,2635],{"class":271},[41,47492,47493],{"class":275}," filename.endswith((",[41,47495,47496],{"class":378},"'.jpg'",[41,47498,12573],{"class":275},[41,47500,47501],{"class":378},"'.jpeg'",[41,47503,12573],{"class":275},[41,47505,47506],{"class":378},"'.png'",[41,47508,12573],{"class":275},[41,47510,47511],{"class":378},"'.bmp'",[41,47513,47514],{"class":275},")):  ",[41,47516,47517],{"class":47},"# 可根据实际情况添加其他格式\n",[41,47519,47520,47522,47524],{"class":43,"line":1819},[41,47521,45776],{"class":275},[41,47523,321],{"class":271},[41,47525,47526],{"class":275}," os.path.join(root, filename)\n",[41,47528,47529,47532,47534],{"class":43,"line":1833},[41,47530,47531],{"class":275},"            image ",[41,47533,321],{"class":271},[41,47535,47536],{"class":275}," Image.open(image_path)\n",[41,47538,47539,47542,47544],{"class":43,"line":1838},[41,47540,47541],{"class":275},"            image_array ",[41,47543,321],{"class":271},[41,47545,47546],{"class":275}," np.array(image)\n",[41,47548,47549],{"class":43,"line":1867},[41,47550,80],{"emptyLinePlaceholder":79},[41,47552,47553],{"class":43,"line":1872},[41,47554,47555],{"class":47},"            # 归一化像素值到0-1之间\n",[41,47557,47558,47561,47563,47566,47568],{"class":43,"line":1889},[41,47559,47560],{"class":275},"            normalized_image_array ",[41,47562,321],{"class":271},[41,47564,47565],{"class":275}," image_array ",[41,47567,857],{"class":271},[41,47569,47570],{"class":58}," 255.0\n",[41,47572,47573],{"class":43,"line":1894},[41,47574,80],{"emptyLinePlaceholder":79},[41,47576,47577],{"class":43,"line":1899},[41,47578,47579],{"class":47},"            # print(image_path)\n",[41,47581,47582],{"class":43,"line":1904},[41,47583,47584],{"class":47},"            # print(normalized_image_array.shape)\n",[41,47586,47587],{"class":43,"line":1918},[41,47588,47589],{"class":47},"            # 累积归一化后的像素值和像素数量\n",[41,47591,47592,47595,47597],{"class":43,"line":1923},[41,47593,47594],{"class":275},"            total_pixels ",[41,47596,9615],{"class":271},[41,47598,47599],{"class":275}," normalized_image_array.size\n",[41,47601,47602],{"class":43,"line":2715},[41,47603,47604],{"class":47},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[41,47606,47607,47610,47612,47615,47618,47620,47622,47624,47626,47628],{"class":43,"line":2729},[41,47608,47609],{"class":275},"            sum_normalized_pixel_values ",[41,47611,9615],{"class":271},[41,47613,47614],{"class":275}," np.sum(normalized_image_array, ",[41,47616,47617],{"class":5354},"axis",[41,47619,321],{"class":271},[41,47621,276],{"class":275},[41,47623,465],{"class":58},[41,47625,12573],{"class":275},[41,47627,26],{"class":58},[41,47629,30600],{"class":275},[41,47631,47632],{"class":43,"line":2737},[41,47633,80],{"emptyLinePlaceholder":79},[41,47635,47636],{"class":43,"line":2742},[41,47637,47638],{"class":47},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[41,47640,47641,47644,47646,47649,47651],{"class":43,"line":2748},[41,47642,47643],{"class":275},"mean ",[41,47645,321],{"class":271},[41,47647,47648],{"class":275}," sum_normalized_pixel_values ",[41,47650,857],{"class":271},[41,47652,47653],{"class":275}," total_pixels\n",[41,47655,47656],{"class":43,"line":2754},[41,47657,80],{"emptyLinePlaceholder":79},[41,47659,47660,47663,47665,47667,47669],{"class":43,"line":2759},[41,47661,47662],{"class":275},"sum_squared_diff ",[41,47664,321],{"class":271},[41,47666,47446],{"class":275},[41,47668,345],{"class":58},[41,47670,282],{"class":275},[41,47672,47673],{"class":43,"line":8086},[41,47674,80],{"emptyLinePlaceholder":79},[41,47676,47677],{"class":43,"line":8110},[41,47678,47679],{"class":47},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[41,47681,47682],{"class":43,"line":8115},[41,47683,47684],{"class":47},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[41,47686,47687],{"class":43,"line":8121},[41,47688,47689],{"class":47},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[41,47691,47692],{"class":43,"line":8148},[41,47693,47694],{"class":47},"# Image.open(image_path)：打开图片\n",[41,47696,47697],{"class":43,"line":8153},[41,47698,47699],{"class":47},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[41,47701,47702,47704,47706,47708],{"class":43,"line":8159},[41,47703,3163],{"class":271},[41,47705,47469],{"class":275},[41,47707,26146],{"class":271},[41,47709,47474],{"class":275},[41,47711,47712,47714,47716,47718],{"class":43,"line":8171},[41,47713,3339],{"class":271},[41,47715,47481],{"class":275},[41,47717,26146],{"class":271},[41,47719,47486],{"class":275},[41,47721,47722,47724,47726,47728,47730,47732,47734,47736,47738,47740],{"class":43,"line":8183},[41,47723,2635],{"class":271},[41,47725,47493],{"class":275},[41,47727,47496],{"class":378},[41,47729,12573],{"class":275},[41,47731,47501],{"class":378},[41,47733,12573],{"class":275},[41,47735,47506],{"class":378},[41,47737,12573],{"class":275},[41,47739,47511],{"class":378},[41,47741,47742],{"class":275},")):\n",[41,47744,47745,47747,47749],{"class":43,"line":8195},[41,47746,45776],{"class":275},[41,47748,321],{"class":271},[41,47750,47526],{"class":275},[41,47752,47753,47755,47757],{"class":43,"line":9854},[41,47754,47531],{"class":275},[41,47756,321],{"class":271},[41,47758,47536],{"class":275},[41,47760,47761,47763,47765],{"class":43,"line":9879},[41,47762,47541],{"class":275},[41,47764,321],{"class":271},[41,47766,47546],{"class":275},[41,47768,47769],{"class":43,"line":9902},[41,47770,47555],{"class":47},[41,47772,47773,47775,47777,47779,47781],{"class":43,"line":9926},[41,47774,47560],{"class":275},[41,47776,321],{"class":271},[41,47778,47565],{"class":275},[41,47780,857],{"class":271},[41,47782,47570],{"class":58},[41,47784,47785],{"class":43,"line":9931},[41,47786,47584],{"class":47},[41,47788,47789],{"class":43,"line":9936},[41,47790,47791],{"class":47},"            # print(mean.shape)\n",[41,47793,47794],{"class":43,"line":9941},[41,47795,47579],{"class":47},[41,47797,47798],{"class":43,"line":9950},[41,47799,80],{"emptyLinePlaceholder":79},[41,47801,47802,47805],{"class":43,"line":9955},[41,47803,47804],{"class":271},"            try",[41,47806,3877],{"class":275},[41,47808,47809,47812,47814,47817,47819,47822,47824],{"class":43,"line":9961},[41,47810,47811],{"class":275},"                diff ",[41,47813,321],{"class":271},[41,47815,47816],{"class":275}," (normalized_image_array ",[41,47818,805],{"class":271},[41,47820,47821],{"class":275}," mean) ",[41,47823,10799],{"class":271},[41,47825,47826],{"class":58}," 2\n",[41,47828,47829,47832,47834,47837,47839,47841,47843,47845,47847,47849],{"class":43,"line":9982},[41,47830,47831],{"class":275},"                sum_squared_diff ",[41,47833,9615],{"class":271},[41,47835,47836],{"class":275}," np.sum(diff, ",[41,47838,47617],{"class":5354},[41,47840,321],{"class":271},[41,47842,276],{"class":275},[41,47844,465],{"class":58},[41,47846,12573],{"class":275},[41,47848,26],{"class":58},[41,47850,30600],{"class":275},[41,47852,47853,47856],{"class":43,"line":9988},[41,47854,47855],{"class":271},"            except",[41,47857,3877],{"class":275},[41,47859,47860,47863,47865,47867,47870],{"class":43,"line":10002},[41,47861,47862],{"class":58},"                print",[41,47864,276],{"class":275},[41,47866,327],{"class":271},[41,47868,47869],{"class":378},"\"捕获到自定义异常\"",[41,47871,282],{"class":275},[41,47873,47874],{"class":43,"line":10008},[41,47875,47876],{"class":47},"            # diff = (normalized_image_array - mean) ** 2\n",[41,47878,47879],{"class":43,"line":10035},[41,47880,47881],{"class":47},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[41,47883,47884],{"class":43,"line":10044},[41,47885,80],{"emptyLinePlaceholder":79},[41,47887,47888,47891,47893,47896,47898],{"class":43,"line":10050},[41,47889,47890],{"class":275},"variance ",[41,47892,321],{"class":271},[41,47894,47895],{"class":275}," sum_squared_diff ",[41,47897,857],{"class":271},[41,47899,47653],{"class":275},[41,47901,47902],{"class":43,"line":10058},[41,47903,80],{"emptyLinePlaceholder":79},[41,47905,47906,47908,47910,47913],{"class":43,"line":10063},[41,47907,30518],{"class":58},[41,47909,276],{"class":275},[41,47911,47912],{"class":378},"\"Mean:\"",[41,47914,47915],{"class":275},", mean)\n",[41,47917,47918,47920,47922,47925],{"class":43,"line":16742},[41,47919,30518],{"class":58},[41,47921,276],{"class":275},[41,47923,47924],{"class":378},"\"Variance:\"",[41,47926,47927],{"class":275},", variance)\n",[32,47929,47931],{"className":30481,"code":47930,"language":30483,"meta":37,"style":37},"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",[24,47932,47933,47939,47945,47955,47961,47971,47985,47995,48005,48015,48019,48029,48039,48043,48047,48055,48060,48065,48084,48088,48093,48098,48103,48108,48149,48154,48164,48169,48182,48187,48192,48197,48202,48207,48211,48216,48221,48243,48247,48279,48293,48303,48313,48317,48327,48341,48351,48361,48371,48377,48381,48385,48389,48393,48397,48405,48425,48429,48433,48437,48441,48457,48461,48465,48473,48477,48481,48489,48493,48497,48501,48509,48513,48517,48521,48529,48533,48541,48545,48553,48557,48565,48569,48577,48581,48585,48593,48597,48601,48613,48637,48651,48655,48659,48663,48671,48675,48683,48687,48695,48699,48707,48711,48719,48723,48731,48735,48747,48751,48759,48763,48771,48775,48779,48783,48787,48795,48799,48815,48819,48827,48831,48835,48839,48843,48847,48851,48855,48871,48875,48887,48891,48903,48907,48919,48923,48931,48935,48943,48947,48951,48955,48961,48965,48973,48977,48993,48997,49005,49009,49025,49037,49041,49053,49057,49061,49069,49073,49077,49085,49089,49097,49101,49109,49113,49117,49159,49201,49205,49209,49225,49229,49245,49249,49253,49261,49265,49269,49281,49319,49323,49327,49335,49339,49353,49363,49369,49375,49381,49387,49391,49395,49401,49405,49409,49417,49421,49439,49443,49447,49451,49467,49471,49475,49479,49483,49487,49507,49527,49531,49535,49539,49547,49555,49559,49575,49595,49615,49619,49624,49633,49642,49647,49652,49657,49670,49675,49684,49693,49710],{"__ignoreMap":37},[41,47934,47935,47937],{"class":43,"line":44},[41,47936,30495],{"class":271},[41,47938,31925],{"class":275},[41,47940,47941,47943],{"class":43,"line":51},[41,47942,30495],{"class":271},[41,47944,31932],{"class":275},[41,47946,47947,47949,47951,47953],{"class":43,"line":62},[41,47948,30495],{"class":271},[41,47950,31943],{"class":275},[41,47952,31486],{"class":271},[41,47954,31948],{"class":275},[41,47956,47957,47959],{"class":43,"line":70},[41,47958,30495],{"class":271},[41,47960,30498],{"class":275},[41,47962,47963,47965,47967,47969],{"class":43,"line":76},[41,47964,30840],{"class":271},[41,47966,31518],{"class":275},[41,47968,30495],{"class":271},[41,47970,31965],{"class":275},[41,47972,47973,47975,47977,47979,47982],{"class":43,"line":83},[41,47974,30840],{"class":271},[41,47976,31471],{"class":275},[41,47978,30495],{"class":271},[41,47980,47981],{"class":275}," ImageFolder ",[41,47983,47984],{"class":47},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[41,47986,47987,47989,47991,47993],{"class":43,"line":89},[41,47988,30840],{"class":271},[41,47990,31501],{"class":275},[41,47992,30495],{"class":271},[41,47994,31506],{"class":275},[41,47996,47997,47999,48001,48003],{"class":43,"line":96},[41,47998,30495],{"class":271},[41,48000,31518],{"class":275},[41,48002,31486],{"class":271},[41,48004,31523],{"class":275},[41,48006,48007,48009,48011,48013],{"class":43,"line":104},[41,48008,30495],{"class":271},[41,48010,31535],{"class":275},[41,48012,31486],{"class":271},[41,48014,31540],{"class":275},[41,48016,48017],{"class":43,"line":176},[41,48018,32010],{"class":47},[41,48020,48021,48023,48025,48027],{"class":43,"line":184},[41,48022,30840],{"class":271},[41,48024,32017],{"class":275},[41,48026,30495],{"class":271},[41,48028,43134],{"class":275},[41,48030,48031,48033,48035,48037],{"class":43,"line":1757},[41,48032,30840],{"class":271},[41,48034,30843],{"class":275},[41,48036,30495],{"class":271},[41,48038,30848],{"class":275},[41,48040,48041],{"class":43,"line":1763},[41,48042,80],{"emptyLinePlaceholder":79},[41,48044,48045],{"class":43,"line":1768},[41,48046,32045],{"class":47},[41,48048,48049,48051,48053],{"class":43,"line":1782},[41,48050,32050],{"class":271},[41,48052,32053],{"class":54},[41,48054,32056],{"class":275},[41,48056,48057],{"class":43,"line":1787},[41,48058,48059],{"class":47},"    # 导入自己的数据集，并进行数据处理\n",[41,48061,48062],{"class":43,"line":1793},[41,48063,48064],{"class":47},"    # 定义数据集的路径\n",[41,48066,48067,48070,48072,48074,48076,48078,48082],{"class":43,"line":1814},[41,48068,48069],{"class":58},"    ROOT_PATH",[41,48071,321],{"class":271},[41,48073,943],{"class":271},[41,48075,524],{"class":378},[41,48077,831],{"class":58},[41,48079,48081],{"class":48080},"sA_wV","\u002Fdata\u002Ftrain",[41,48083,25236],{"class":378},[41,48085,48086],{"class":43,"line":1819},[41,48087,80],{"emptyLinePlaceholder":79},[41,48089,48090],{"class":43,"line":1833},[41,48091,48092],{"class":47},"    # 定义归一化方法\n",[41,48094,48095],{"class":43,"line":1838},[41,48096,48097],{"class":47},"    # 这里需要先计算一下数据集的均值和方差\n",[41,48099,48100],{"class":43,"line":1867},[41,48101,48102],{"class":47},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[41,48104,48105],{"class":43,"line":1872},[41,48106,48107],{"class":47},"    # 第一个参数是均值，第二个参数是方差\n",[41,48109,48110,48113,48115,48118,48121,48123,48126,48128,48131,48134,48137,48139,48142,48144,48147],{"class":43,"line":1889},[41,48111,48112],{"class":275},"    normalize",[41,48114,321],{"class":271},[41,48116,48117],{"class":275},"transforms.Normalize([",[41,48119,48120],{"class":58},"0.162",[41,48122,651],{"class":275},[41,48124,48125],{"class":58},"0.151",[41,48127,651],{"class":275},[41,48129,48130],{"class":58},"0.138",[41,48132,48133],{"class":275},"],[",[41,48135,48136],{"class":58},"0.058",[41,48138,651],{"class":275},[41,48140,48141],{"class":58},"0.052",[41,48143,651],{"class":275},[41,48145,48146],{"class":58},"0.048",[41,48148,4795],{"class":275},[41,48150,48151],{"class":43,"line":1894},[41,48152,48153],{"class":47},"    # 定义数据集处理方法变量\n",[41,48155,48156,48159,48161],{"class":43,"line":1899},[41,48157,48158],{"class":275},"    train_transform",[41,48160,321],{"class":271},[41,48162,48163],{"class":275},"transforms.Compose([\n",[41,48165,48166],{"class":43,"line":1904},[41,48167,48168],{"class":47},"        # 调整图像大小为224*224\n",[41,48170,48171,48174,48176,48178,48180],{"class":43,"line":1918},[41,48172,48173],{"class":275},"        transforms.Resize((",[41,48175,31604],{"class":58},[41,48177,651],{"class":275},[41,48179,31604],{"class":58},[41,48181,42725],{"class":275},[41,48183,48184],{"class":43,"line":1923},[41,48185,48186],{"class":47},"        # 将图像转换为张量\n",[41,48188,48189],{"class":43,"line":2715},[41,48190,48191],{"class":275},"        transforms.ToTensor(),\n",[41,48193,48194],{"class":43,"line":2729},[41,48195,48196],{"class":275},"        normalize])\n",[41,48198,48199],{"class":43,"line":2737},[41,48200,48201],{"class":47},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[41,48203,48204],{"class":43,"line":2742},[41,48205,48206],{"class":47},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[41,48208,48209],{"class":43,"line":2748},[41,48210,80],{"emptyLinePlaceholder":79},[41,48212,48213],{"class":43,"line":2754},[41,48214,48215],{"class":47},"    # 加载数据集\n",[41,48217,48218],{"class":43,"line":2759},[41,48219,48220],{"class":47},"    # 传入数据集路径与处理方法\n",[41,48222,48223,48225,48227,48230,48233,48235,48238,48240],{"class":43,"line":8086},[41,48224,32061],{"class":275},[41,48226,321],{"class":271},[41,48228,48229],{"class":275},"ImageFolder(",[41,48231,48232],{"class":58},"ROOT_PATH",[41,48234,651],{"class":275},[41,48236,48237],{"class":5354},"transform",[41,48239,321],{"class":271},[41,48241,48242],{"class":275},"train_transform)\n",[41,48244,48245],{"class":43,"line":8110},[41,48246,80],{"emptyLinePlaceholder":79},[41,48248,48249,48251,48253,48255,48257,48259,48261,48263,48265,48267,48269,48271,48273,48275,48277],{"class":43,"line":8115},[41,48250,32113],{"class":275},[41,48252,321],{"class":271},[41,48254,32118],{"class":275},[41,48256,32121],{"class":58},[41,48258,276],{"class":275},[41,48260,32126],{"class":58},[41,48262,728],{"class":271},[41,48264,7496],{"class":58},[41,48266,32133],{"class":275},[41,48268,32121],{"class":58},[41,48270,276],{"class":275},[41,48272,32140],{"class":58},[41,48274,728],{"class":271},[41,48276,7496],{"class":58},[41,48278,32147],{"class":275},[41,48280,48281,48283,48285,48287,48289,48291],{"class":43,"line":8121},[41,48282,32152],{"class":275},[41,48284,321],{"class":271},[41,48286,32157],{"class":275},[41,48288,31640],{"class":5354},[41,48290,321],{"class":271},[41,48292,31645],{"class":275},[41,48294,48295,48297,48299,48301],{"class":43,"line":8148},[41,48296,32168],{"class":5354},[41,48298,321],{"class":271},[41,48300,471],{"class":58},[41,48302,31569],{"class":275},[41,48304,48305,48307,48309,48311],{"class":43,"line":8153},[41,48306,32180],{"class":5354},[41,48308,321],{"class":271},[41,48310,31579],{"class":58},[41,48312,31569],{"class":275},[41,48314,48315],{"class":43,"line":8159},[41,48316,32191],{"class":47},[41,48318,48319,48321,48323,48325],{"class":43,"line":8171},[41,48320,32196],{"class":5354},[41,48322,321],{"class":271},[41,48324,668],{"class":58},[41,48326,282],{"class":275},[41,48328,48329,48331,48333,48335,48337,48339],{"class":43,"line":8183},[41,48330,32207],{"class":275},[41,48332,321],{"class":271},[41,48334,31637],{"class":275},[41,48336,31640],{"class":5354},[41,48338,321],{"class":271},[41,48340,32218],{"class":275},[41,48342,48343,48345,48347,48349],{"class":43,"line":8195},[41,48344,32223],{"class":5354},[41,48346,321],{"class":271},[41,48348,471],{"class":58},[41,48350,31569],{"class":275},[41,48352,48353,48355,48357,48359],{"class":43,"line":9854},[41,48354,32234],{"class":5354},[41,48356,321],{"class":271},[41,48358,31579],{"class":58},[41,48360,31569],{"class":275},[41,48362,48363,48365,48367,48369],{"class":43,"line":9879},[41,48364,32245],{"class":5354},[41,48366,321],{"class":271},[41,48368,668],{"class":58},[41,48370,282],{"class":275},[41,48372,48373,48375],{"class":43,"line":9902},[41,48374,4228],{"class":271},[41,48376,32258],{"class":275},[41,48378,48379],{"class":43,"line":9926},[41,48380,80],{"emptyLinePlaceholder":79},[41,48382,48383],{"class":43,"line":9931},[41,48384,32267],{"class":47},[41,48386,48387],{"class":43,"line":9936},[41,48388,32272],{"class":47},[41,48390,48391],{"class":43,"line":9941},[41,48392,80],{"emptyLinePlaceholder":79},[41,48394,48395],{"class":43,"line":9950},[41,48396,32281],{"class":47},[41,48398,48399,48401,48403],{"class":43,"line":9955},[41,48400,32050],{"class":271},[41,48402,32288],{"class":54},[41,48404,32291],{"class":275},[41,48406,48407,48409,48411,48413,48415,48417,48419,48421,48423],{"class":43,"line":9961},[41,48408,31340],{"class":275},[41,48410,321],{"class":271},[41,48412,30554],{"class":275},[41,48414,31347],{"class":378},[41,48416,1844],{"class":271},[41,48418,31352],{"class":275},[41,48420,1841],{"class":271},[41,48422,32310],{"class":378},[41,48424,282],{"class":275},[41,48426,48427],{"class":43,"line":9982},[41,48428,80],{"emptyLinePlaceholder":79},[41,48430,48431],{"class":43,"line":9988},[41,48432,32325],{"class":47},[41,48434,48435],{"class":43,"line":10002},[41,48436,32330],{"class":47},[41,48438,48439],{"class":43,"line":10008},[41,48440,32335],{"class":47},[41,48442,48443,48445,48447,48449,48451,48453,48455],{"class":43,"line":10035},[41,48444,32340],{"class":275},[41,48446,321],{"class":271},[41,48448,32345],{"class":275},[41,48450,32348],{"class":5354},[41,48452,321],{"class":271},[41,48454,32353],{"class":58},[41,48456,282],{"class":275},[41,48458,48459],{"class":43,"line":10044},[41,48460,80],{"emptyLinePlaceholder":79},[41,48462,48463],{"class":43,"line":10050},[41,48464,32364],{"class":47},[41,48466,48467,48469,48471],{"class":43,"line":10058},[41,48468,32369],{"class":275},[41,48470,321],{"class":271},[41,48472,32374],{"class":275},[41,48474,48475],{"class":43,"line":10063},[41,48476,80],{"emptyLinePlaceholder":79},[41,48478,48479],{"class":43,"line":16742},[41,48480,32383],{"class":47},[41,48482,48483,48485,48487],{"class":43,"line":16748},[41,48484,31392],{"class":275},[41,48486,321],{"class":271},[41,48488,32392],{"class":275},[41,48490,48491],{"class":43,"line":16771},[41,48492,32397],{"class":47},[41,48494,48495],{"class":43,"line":16777},[41,48496,32402],{"class":47},[41,48498,48499],{"class":43,"line":16800},[41,48500,32407],{"class":47},[41,48502,48503,48505,48507],{"class":43,"line":16814},[41,48504,32412],{"class":275},[41,48506,321],{"class":271},[41,48508,32417],{"class":275},[41,48510,48511],{"class":43,"line":16834},[41,48512,80],{"emptyLinePlaceholder":79},[41,48514,48515],{"class":43,"line":16840},[41,48516,32430],{"class":47},[41,48518,48519],{"class":43,"line":16851},[41,48520,32435],{"class":47},[41,48522,48523,48525,48527],{"class":43,"line":16874},[41,48524,32440],{"class":275},[41,48526,321],{"class":271},[41,48528,32445],{"class":58},[41,48530,48531],{"class":43,"line":16896},[41,48532,32450],{"class":47},[41,48534,48535,48537,48539],{"class":43,"line":16901},[41,48536,32455],{"class":275},[41,48538,321],{"class":271},[41,48540,32460],{"class":275},[41,48542,48543],{"class":43,"line":16907},[41,48544,32465],{"class":47},[41,48546,48547,48549,48551],{"class":43,"line":16921},[41,48548,32470],{"class":275},[41,48550,321],{"class":271},[41,48552,32460],{"class":275},[41,48554,48555],{"class":43,"line":16934},[41,48556,32479],{"class":47},[41,48558,48559,48561,48563],{"class":43,"line":16939},[41,48560,32484],{"class":275},[41,48562,321],{"class":271},[41,48564,32460],{"class":275},[41,48566,48567],{"class":43,"line":16953},[41,48568,32493],{"class":47},[41,48570,48571,48573,48575],{"class":43,"line":16958},[41,48572,32498],{"class":275},[41,48574,321],{"class":271},[41,48576,32460],{"class":275},[41,48578,48579],{"class":43,"line":16964},[41,48580,80],{"emptyLinePlaceholder":79},[41,48582,48583],{"class":43,"line":16969},[41,48584,32511],{"class":47},[41,48586,48587,48589,48591],{"class":43,"line":16983},[41,48588,32516],{"class":275},[41,48590,321],{"class":271},[41,48592,32521],{"class":275},[41,48594,48595],{"class":43,"line":16988},[41,48596,80],{"emptyLinePlaceholder":79},[41,48598,48599],{"class":43,"line":16993},[41,48600,32534],{"class":47},[41,48602,48603,48605,48607,48609,48611],{"class":43,"line":17007},[41,48604,3339],{"class":271},[41,48606,32541],{"class":275},[41,48608,26146],{"class":271},[41,48610,32546],{"class":58},[41,48612,32549],{"class":275},[41,48614,48615,48617,48619,48621,48623,48625,48627,48629,48631,48633,48635],{"class":43,"line":17019},[41,48616,32554],{"class":58},[41,48618,276],{"class":275},[41,48620,32559],{"class":378},[41,48622,32562],{"class":58},[41,48624,857],{"class":378},[41,48626,32562],{"class":58},[41,48628,524],{"class":378},[41,48630,32571],{"class":275},[41,48632,805],{"class":271},[41,48634,26],{"class":58},[41,48636,30600],{"class":275},[41,48638,48639,48641,48643,48645,48647,48649],{"class":43,"line":17024},[41,48640,32554],{"class":58},[41,48642,276],{"class":275},[41,48644,32586],{"class":378},[41,48646,728],{"class":271},[41,48648,719],{"class":58},[41,48650,282],{"class":275},[41,48652,48653],{"class":43,"line":17037},[41,48654,80],{"emptyLinePlaceholder":79},[41,48656,48657],{"class":43,"line":17042},[41,48658,32601],{"class":47},[41,48660,48661],{"class":43,"line":17047},[41,48662,32606],{"class":47},[41,48664,48665,48667,48669],{"class":43,"line":17052},[41,48666,32611],{"class":275},[41,48668,321],{"class":271},[41,48670,32445],{"class":58},[41,48672,48673],{"class":43,"line":17065},[41,48674,32620],{"class":47},[41,48676,48677,48679,48681],{"class":43,"line":17070},[41,48678,32625],{"class":275},[41,48680,321],{"class":271},[41,48682,3223],{"class":58},[41,48684,48685],{"class":43,"line":32736},[41,48686,32634],{"class":47},[41,48688,48689,48691,48693],{"class":43,"line":32742},[41,48690,32639],{"class":275},[41,48692,321],{"class":271},[41,48694,32445],{"class":58},[41,48696,48697],{"class":43,"line":32748},[41,48698,32648],{"class":47},[41,48700,48701,48703,48705],{"class":43,"line":32754},[41,48702,32653],{"class":275},[41,48704,321],{"class":271},[41,48706,3223],{"class":58},[41,48708,48709],{"class":43,"line":32760},[41,48710,32662],{"class":47},[41,48712,48713,48715,48717],{"class":43,"line":32771},[41,48714,32667],{"class":275},[41,48716,321],{"class":271},[41,48718,3223],{"class":58},[41,48720,48721],{"class":43,"line":32777},[41,48722,32676],{"class":47},[41,48724,48725,48727,48729],{"class":43,"line":32797},[41,48726,32681],{"class":275},[41,48728,321],{"class":271},[41,48730,3223],{"class":58},[41,48732,48733],{"class":43,"line":32803},[41,48734,32690],{"class":47},[41,48736,48737,48739,48741,48743,48745],{"class":43,"line":32814},[41,48738,3541],{"class":271},[41,48740,31704],{"class":275},[41,48742,26146],{"class":271},[41,48744,31709],{"class":58},[41,48746,32703],{"class":275},[41,48748,48749],{"class":43,"line":32820},[41,48750,32708],{"class":47},[41,48752,48753,48755,48757],{"class":43,"line":32826},[41,48754,32713],{"class":275},[41,48756,321],{"class":271},[41,48758,32718],{"class":275},[41,48760,48761],{"class":43,"line":32832},[41,48762,32723],{"class":47},[41,48764,48765,48767,48769],{"class":43,"line":32838},[41,48766,32728],{"class":275},[41,48768,321],{"class":271},[41,48770,32733],{"class":275},[41,48772,48773],{"class":43,"line":32844},[41,48774,32739],{"class":47},[41,48776,48777],{"class":43,"line":32850},[41,48778,32745],{"class":275},[41,48780,48781],{"class":43,"line":32856},[41,48782,32751],{"class":47},[41,48784,48785],{"class":43,"line":32876},[41,48786,32757],{"class":47},[41,48788,48789,48791,48793],{"class":43,"line":32882},[41,48790,32763],{"class":275},[41,48792,321],{"class":271},[41,48794,32768],{"class":275},[41,48796,48797],{"class":43,"line":32898},[41,48798,32774],{"class":47},[41,48800,48801,48803,48805,48807,48809,48811,48813],{"class":43,"line":32904},[41,48802,32780],{"class":275},[41,48804,321],{"class":271},[41,48806,32785],{"class":275},[41,48808,32788],{"class":5354},[41,48810,321],{"class":271},[41,48812,26],{"class":58},[41,48814,282],{"class":275},[41,48816,48817],{"class":43,"line":32918},[41,48818,32800],{"class":47},[41,48820,48821,48823,48825],{"class":43,"line":32924},[41,48822,32806],{"class":275},[41,48824,321],{"class":271},[41,48826,32811],{"class":275},[41,48828,48829],{"class":43,"line":32939},[41,48830,32817],{"class":47},[41,48832,48833],{"class":43,"line":32945},[41,48834,32823],{"class":275},[41,48836,48837],{"class":43,"line":32954},[41,48838,32829],{"class":47},[41,48840,48841],{"class":43,"line":32960},[41,48842,32835],{"class":275},[41,48844,48845],{"class":43,"line":32969},[41,48846,32841],{"class":47},[41,48848,48849],{"class":43,"line":32975},[41,48850,32847],{"class":275},[41,48852,48853],{"class":43,"line":32981},[41,48854,32853],{"class":47},[41,48856,48857,48859,48861,48863,48865,48867,48869],{"class":43,"line":32990},[41,48858,32859],{"class":275},[41,48860,9615],{"class":271},[41,48862,32864],{"class":275},[41,48864,728],{"class":271},[41,48866,32869],{"class":275},[41,48868,465],{"class":58},[41,48870,282],{"class":275},[41,48872,48873],{"class":43,"line":32996},[41,48874,32879],{"class":47},[41,48876,48877,48879,48881,48883,48885],{"class":43,"line":33007},[41,48878,32885],{"class":275},[41,48880,9615],{"class":271},[41,48882,32890],{"class":275},[41,48884,3087],{"class":271},[41,48886,32895],{"class":275},[41,48888,48889],{"class":43,"line":33013},[41,48890,32901],{"class":47},[41,48892,48893,48895,48897,48899,48901],{"class":43,"line":33032},[41,48894,32907],{"class":275},[41,48896,9615],{"class":271},[41,48898,32869],{"class":275},[41,48900,465],{"class":58},[41,48902,282],{"class":275},[41,48904,48905],{"class":43,"line":33038},[41,48906,32921],{"class":47},[41,48908,48909,48911,48913,48915,48917],{"class":43,"line":33049},[41,48910,3541],{"class":271},[41,48912,32929],{"class":275},[41,48914,26146],{"class":271},[41,48916,31709],{"class":58},[41,48918,32936],{"class":275},[41,48920,48921],{"class":43,"line":33055},[41,48922,32942],{"class":47},[41,48924,48925,48927,48929],{"class":43,"line":33075},[41,48926,32713],{"class":275},[41,48928,321],{"class":271},[41,48930,32718],{"class":275},[41,48932,48933],{"class":43,"line":33091},[41,48934,32957],{"class":47},[41,48936,48937,48939,48941],{"class":43,"line":33097},[41,48938,32728],{"class":275},[41,48940,321],{"class":271},[41,48942,32733],{"class":275},[41,48944,48945],{"class":43,"line":33111},[41,48946,32972],{"class":47},[41,48948,48949],{"class":43,"line":33117},[41,48950,32978],{"class":275},[41,48952,48953],{"class":43,"line":33123},[41,48954,36459],{"class":47},[41,48956,48957,48959],{"class":43,"line":33134},[41,48958,32984],{"class":271},[41,48960,32987],{"class":275},[41,48962,48963],{"class":43,"line":33140},[41,48964,32993],{"class":47},[41,48966,48967,48969,48971],{"class":43,"line":33146},[41,48968,36474],{"class":275},[41,48970,321],{"class":271},[41,48972,32768],{"class":275},[41,48974,48975],{"class":43,"line":33156},[41,48976,33010],{"class":47},[41,48978,48979,48981,48983,48985,48987,48989,48991],{"class":43,"line":33162},[41,48980,36487],{"class":275},[41,48982,321],{"class":271},[41,48984,32785],{"class":275},[41,48986,32788],{"class":5354},[41,48988,321],{"class":271},[41,48990,26],{"class":58},[41,48992,282],{"class":275},[41,48994,48995],{"class":43,"line":33173},[41,48996,33035],{"class":47},[41,48998,48999,49001,49003],{"class":43,"line":33179},[41,49000,36508],{"class":275},[41,49002,321],{"class":271},[41,49004,32811],{"class":275},[41,49006,49007],{"class":43,"line":33189},[41,49008,33052],{"class":47},[41,49010,49011,49013,49015,49017,49019,49021,49023],{"class":43,"line":33194},[41,49012,36521],{"class":275},[41,49014,9615],{"class":271},[41,49016,36526],{"class":275},[41,49018,728],{"class":271},[41,49020,32869],{"class":275},[41,49022,465],{"class":58},[41,49024,282],{"class":275},[41,49026,49027,49029,49031,49033,49035],{"class":43,"line":33200},[41,49028,36539],{"class":275},[41,49030,9615],{"class":271},[41,49032,32890],{"class":275},[41,49034,3087],{"class":271},[41,49036,32895],{"class":275},[41,49038,49039],{"class":43,"line":33249},[41,49040,36552],{"class":47},[41,49042,49043,49045,49047,49049,49051],{"class":43,"line":33296},[41,49044,36557],{"class":275},[41,49046,9615],{"class":271},[41,49048,32869],{"class":275},[41,49050,465],{"class":58},[41,49052,282],{"class":275},[41,49054,49055],{"class":43,"line":33301},[41,49056,33114],{"class":47},[41,49058,49059],{"class":43,"line":33307},[41,49060,33120],{"class":47},[41,49062,49063,49065,49067],{"class":43,"line":33326},[41,49064,33126],{"class":275},[41,49066,857],{"class":271},[41,49068,33131],{"class":275},[41,49070,49071],{"class":43,"line":33332},[41,49072,33137],{"class":47},[41,49074,49075],{"class":43,"line":33352},[41,49076,33143],{"class":47},[41,49078,49079,49081,49083],{"class":43,"line":33358},[41,49080,33149],{"class":275},[41,49082,857],{"class":271},[41,49084,33131],{"class":275},[41,49086,49087],{"class":43,"line":33364},[41,49088,33159],{"class":47},[41,49090,49091,49093,49095],{"class":43,"line":33374},[41,49092,33165],{"class":275},[41,49094,857],{"class":271},[41,49096,33170],{"class":275},[41,49098,49099],{"class":43,"line":33379},[41,49100,33176],{"class":47},[41,49102,49103,49105,49107],{"class":43,"line":33385},[41,49104,33182],{"class":275},[41,49106,857],{"class":271},[41,49108,33170],{"class":275},[41,49110,49111],{"class":43,"line":33401},[41,49112,80],{"emptyLinePlaceholder":79},[41,49114,49115],{"class":43,"line":33446},[41,49116,33197],{"class":47},[41,49118,49119,49121,49123,49125,49127,49129,49131,49133,49135,49137,49139,49141,49143,49145,49147,49149,49151,49153,49155,49157],{"class":43,"line":33452},[41,49120,32554],{"class":58},[41,49122,276],{"class":275},[41,49124,3730],{"class":378},[41,49126,32562],{"class":58},[41,49128,33211],{"class":378},[41,49130,1169],{"class":58},[41,49132,33216],{"class":271},[41,49134,1219],{"class":58},[41,49136,33221],{"class":378},[41,49138,1169],{"class":58},[41,49140,33216],{"class":271},[41,49142,1219],{"class":58},[41,49144,3730],{"class":378},[41,49146,33232],{"class":275},[41,49148,805],{"class":271},[41,49150,26],{"class":58},[41,49152,33239],{"class":275},[41,49154,805],{"class":271},[41,49156,26],{"class":58},[41,49158,33246],{"class":275},[41,49160,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199],{"class":43,"line":33458},[41,49162,32554],{"class":58},[41,49164,276],{"class":275},[41,49166,3730],{"class":378},[41,49168,32562],{"class":58},[41,49170,33260],{"class":378},[41,49172,1169],{"class":58},[41,49174,33216],{"class":271},[41,49176,1219],{"class":58},[41,49178,33269],{"class":378},[41,49180,1169],{"class":58},[41,49182,33216],{"class":271},[41,49184,1219],{"class":58},[41,49186,3730],{"class":378},[41,49188,33280],{"class":275},[41,49190,805],{"class":271},[41,49192,26],{"class":58},[41,49194,33287],{"class":275},[41,49196,805],{"class":271},[41,49198,26],{"class":58},[41,49200,33246],{"class":275},[41,49202,49203],{"class":43,"line":33464},[41,49204,80],{"emptyLinePlaceholder":79},[41,49206,49207],{"class":43,"line":33475},[41,49208,33304],{"class":47},[41,49210,49211,49213,49215,49217,49219,49221,49223],{"class":43,"line":33481},[41,49212,2635],{"class":271},[41,49214,33312],{"class":275},[41,49216,805],{"class":271},[41,49218,26],{"class":58},[41,49220,1213],{"class":275},[41,49222,1233],{"class":271},[41,49224,33323],{"class":275},[41,49226,49227],{"class":43,"line":33487},[41,49228,33329],{"class":47},[41,49230,49231,49233,49235,49237,49239,49241,49243],{"class":43,"line":33493},[41,49232,33335],{"class":275},[41,49234,315],{"class":58},[41,49236,321],{"class":271},[41,49238,33342],{"class":275},[41,49240,805],{"class":271},[41,49242,26],{"class":58},[41,49244,33349],{"class":275},[41,49246,49247],{"class":43,"line":33511},[41,49248,33355],{"class":47},[41,49250,49251],{"class":43,"line":33525},[41,49252,33361],{"class":47},[41,49254,49255,49257,49259],{"class":43,"line":33534},[41,49256,33367],{"class":275},[41,49258,321],{"class":271},[41,49260,32417],{"class":275},[41,49262,49263],{"class":43,"line":33543},[41,49264,80],{"emptyLinePlaceholder":79},[41,49266,49267],{"class":43,"line":33552},[41,49268,33382],{"class":47},[41,49270,49271,49273,49275,49277,49279],{"class":43,"line":33561},[41,49272,33388],{"class":275},[41,49274,321],{"class":271},[41,49276,33393],{"class":275},[41,49278,805],{"class":271},[41,49280,33398],{"class":275},[41,49282,49283,49285,49287,49289,49291,49293,49295,49297,49299,49301,49303,49305,49307,49309,49311,49313,49315,49317],{"class":43,"line":33567},[41,49284,32554],{"class":58},[41,49286,276],{"class":275},[41,49288,33408],{"class":378},[41,49290,1169],{"class":58},[41,49292,33413],{"class":271},[41,49294,1219],{"class":58},[41,49296,817],{"class":378},[41,49298,1169],{"class":58},[41,49300,33413],{"class":271},[41,49302,1219],{"class":58},[41,49304,33426],{"class":378},[41,49306,33429],{"class":275},[41,49308,33432],{"class":271},[41,49310,1180],{"class":58},[41,49312,33437],{"class":275},[41,49314,601],{"class":271},[41,49316,1180],{"class":58},[41,49318,30600],{"class":275},[41,49320,49321],{"class":43,"line":33573},[41,49322,36836],{"class":47},[41,49324,49325],{"class":43,"line":33581},[41,49326,36841],{"class":47},[41,49328,49329,49331,49333],{"class":43,"line":33586},[41,49330,36846],{"class":275},[41,49332,33470],{"class":378},[41,49334,282],{"class":275},[41,49336,49337],{"class":43,"line":33592},[41,49338,33490],{"class":47},[41,49340,49341,49343,49345,49347,49349,49351],{"class":43,"line":33603},[41,49342,33496],{"class":275},[41,49344,321],{"class":271},[41,49346,33501],{"class":275},[41,49348,33504],{"class":5354},[41,49350,321],{"class":271},[41,49352,1687],{"class":275},[41,49354,49355,49357,49359,49361],{"class":43,"line":33609},[41,49356,33514],{"class":378},[41,49358,1132],{"class":275},[41,49360,33519],{"class":58},[41,49362,33522],{"class":275},[41,49364,49365,49367],{"class":43,"line":33629},[41,49366,33528],{"class":378},[41,49368,33531],{"class":275},[41,49370,49371,49373],{"class":43,"line":33635},[41,49372,33537],{"class":378},[41,49374,33540],{"class":275},[41,49376,49377,49379],{"class":43,"line":33641},[41,49378,33546],{"class":378},[41,49380,33549],{"class":275},[41,49382,49383,49385],{"class":43,"line":33647},[41,49384,33555],{"class":378},[41,49386,33558],{"class":275},[41,49388,49389],{"class":43,"line":33664},[41,49390,33564],{"class":275},[41,49392,49393],{"class":43,"line":33670},[41,49394,33570],{"class":47},[41,49396,49397,49399],{"class":43,"line":33676},[41,49398,4228],{"class":271},[41,49400,33578],{"class":275},[41,49402,49403],{"class":43,"line":33682},[41,49404,80],{"emptyLinePlaceholder":79},[41,49406,49407],{"class":43,"line":33688},[41,49408,33589],{"class":47},[41,49410,49411,49413,49415],{"class":43,"line":33694},[41,49412,32050],{"class":271},[41,49414,33597],{"class":54},[41,49416,33600],{"class":275},[41,49418,49419],{"class":43,"line":33721},[41,49420,33606],{"class":47},[41,49422,49423,49425,49427,49429,49431,49433,49435,49437],{"class":43,"line":33745},[41,49424,33612],{"class":275},[41,49426,31796],{"class":5354},[41,49428,321],{"class":271},[41,49430,276],{"class":275},[41,49432,771],{"class":58},[41,49434,651],{"class":275},[41,49436,566],{"class":58},[41,49438,30600],{"class":275},[41,49440,49441],{"class":43,"line":33751},[41,49442,33632],{"class":47},[41,49444,49445],{"class":43,"line":33757},[41,49446,33638],{"class":47},[41,49448,49449],{"class":43,"line":33763},[41,49450,33644],{"class":47},[41,49452,49453,49455,49457,49459,49461,49463,49465],{"class":43,"line":33774},[41,49454,31830],{"class":275},[41,49456,26],{"class":58},[41,49458,651],{"class":275},[41,49460,351],{"class":58},[41,49462,651],{"class":275},[41,49464,26],{"class":58},[41,49466,282],{"class":275},[41,49468,49469],{"class":43,"line":33785},[41,49470,33667],{"class":47},[41,49472,49473],{"class":43,"line":33791},[41,49474,33673],{"class":47},[41,49476,49477],{"class":43,"line":33808},[41,49478,33679],{"class":47},[41,49480,49481],{"class":43,"line":33831},[41,49482,33685],{"class":47},[41,49484,49485],{"class":43,"line":33854},[41,49486,33691],{"class":47},[41,49488,49489,49491,49493,49495,49497,49499,49501,49503,49505],{"class":43,"line":33860},[41,49490,33697],{"class":275},[41,49492,33700],{"class":378},[41,49494,33703],{"class":275},[41,49496,33706],{"class":378},[41,49498,651],{"class":275},[41,49500,33711],{"class":5354},[41,49502,321],{"class":271},[41,49504,33716],{"class":378},[41,49506,282],{"class":275},[41,49508,49509,49511,49513,49515,49517,49519,49521,49523,49525],{"class":43,"line":33865},[41,49510,33697],{"class":275},[41,49512,33700],{"class":378},[41,49514,33728],{"class":275},[41,49516,33731],{"class":378},[41,49518,651],{"class":275},[41,49520,33711],{"class":5354},[41,49522,321],{"class":271},[41,49524,33740],{"class":378},[41,49526,282],{"class":275},[41,49528,49529],{"class":43,"line":33874},[41,49530,33748],{"class":47},[41,49532,49533],{"class":43,"line":33884},[41,49534,33754],{"class":275},[41,49536,49537],{"class":43,"line":33890},[41,49538,33760],{"class":47},[41,49540,49541,49543,49545],{"class":43,"line":33895},[41,49542,33766],{"class":275},[41,49544,33769],{"class":378},[41,49546,282],{"class":275},[41,49548,49549,49551,49553],{"class":43,"line":33901},[41,49550,33777],{"class":275},[41,49552,33780],{"class":378},[41,49554,282],{"class":275},[41,49556,49557],{"class":43,"line":33914},[41,49558,33788],{"class":47},[41,49560,49561,49563,49565,49567,49569,49571,49573],{"class":43,"line":33920},[41,49562,31830],{"class":275},[41,49564,26],{"class":58},[41,49566,651],{"class":275},[41,49568,351],{"class":58},[41,49570,651],{"class":275},[41,49572,351],{"class":58},[41,49574,282],{"class":275},[41,49576,49577,49579,49581,49583,49585,49587,49589,49591,49593],{"class":43,"line":33931},[41,49578,33697],{"class":275},[41,49580,33700],{"class":378},[41,49582,33815],{"class":275},[41,49584,33706],{"class":378},[41,49586,651],{"class":275},[41,49588,33711],{"class":5354},[41,49590,321],{"class":271},[41,49592,33826],{"class":378},[41,49594,282],{"class":275},[41,49596,49597,49599,49601,49603,49605,49607,49609,49611,49613],{"class":43,"line":33942},[41,49598,33697],{"class":275},[41,49600,33700],{"class":378},[41,49602,33838],{"class":275},[41,49604,33731],{"class":378},[41,49606,651],{"class":275},[41,49608,33711],{"class":5354},[41,49610,321],{"class":271},[41,49612,33849],{"class":378},[41,49614,282],{"class":275},[41,49616,49617],{"class":43,"line":33961},[41,49618,33857],{"class":47},[41,49620,49622],{"class":43,"line":49621},219,[41,49623,33754],{"class":275},[41,49625,49627,49629,49631],{"class":43,"line":49626},220,[41,49628,33766],{"class":275},[41,49630,33700],{"class":378},[41,49632,282],{"class":275},[41,49634,49636,49638,49640],{"class":43,"line":49635},221,[41,49637,33777],{"class":275},[41,49639,33879],{"class":378},[41,49641,282],{"class":275},[41,49643,49645],{"class":43,"line":49644},222,[41,49646,33887],{"class":275},[41,49648,49650],{"class":43,"line":49649},223,[41,49651,80],{"emptyLinePlaceholder":79},[41,49653,49655],{"class":43,"line":49654},224,[41,49656,33898],{"class":47},[41,49658,49660,49662,49664,49666,49668],{"class":43,"line":49659},225,[41,49661,1672],{"class":271},[41,49663,31323],{"class":58},[41,49665,3087],{"class":271},[41,49667,31328],{"class":378},[41,49669,3877],{"class":275},[41,49671,49673],{"class":43,"line":49672},226,[41,49674,33917],{"class":47},[41,49676,49678,49680,49682],{"class":43,"line":49677},227,[41,49679,44649],{"class":275},[41,49681,321],{"class":271},[41,49683,44654],{"class":275},[41,49685,49687,49689,49691],{"class":43,"line":49686},228,[41,49688,33934],{"class":275},[41,49690,321],{"class":271},[41,49692,33939],{"class":275},[41,49694,49696,49698,49700,49702,49704,49706,49708],{"class":43,"line":49695},229,[41,49697,33496],{"class":275},[41,49699,321],{"class":271},[41,49701,44671],{"class":275},[41,49703,33952],{"class":5354},[41,49705,321],{"class":271},[41,49707,1180],{"class":58},[41,49709,282],{"class":275},[41,49711,49713],{"class":43,"line":49712},230,[41,49714,33964],{"class":275},[22136,49716,49718],{"id":49717},"_242测试代码","2.4.2.测试代码",[20,49720,49721],{},"使用测试集进行测试与推理",[32,49723,49725],{"className":30481,"code":49724,"language":30483,"meta":37,"style":37},"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",[24,49726,49727,49733,49743,49753,49764,49774,49778,49782,49790,49795,49799,49816,49820,49824,49828,49832,49836,49868,49872,49880,49884,49896,49900,49904,49908,49912,49916,49920,49924,49928,49946,49960,49964,49974,49984,49994,50000,50004,50008,50016,50020,50036,50044,50048,50052,50060,50068,50072,50076,50080,50084,50090,50094,50104,50112,50120,50124,50128,50132,50140,50144,50160,50164,50168,50172,50184,50188,50200,50204,50208,50220,50224,50234,50238,50242,50254,50258,50266,50270,50274,50282,50286,50294,50298,50302,50306,50310,50314,50330,50338,50342,50346,50364,50370,50374,50384,50392,50400,50404,50408,50412,50416,50424,50428,50444,50448,50456,50464],{"__ignoreMap":37},[41,49728,49729,49731],{"class":43,"line":44},[41,49730,30495],{"class":271},[41,49732,30498],{"class":275},[41,49734,49735,49737,49739,49741],{"class":43,"line":51},[41,49736,30495],{"class":271},[41,49738,31518],{"class":275},[41,49740,31486],{"class":271},[41,49742,31523],{"class":275},[41,49744,49745,49747,49749,49751],{"class":43,"line":62},[41,49746,30840],{"class":271},[41,49748,31501],{"class":275},[41,49750,30495],{"class":271},[41,49752,31506],{"class":275},[41,49754,49755,49757,49759,49761],{"class":43,"line":70},[41,49756,30840],{"class":271},[41,49758,31471],{"class":275},[41,49760,30495],{"class":271},[41,49762,49763],{"class":275}," ImageFolder\n",[41,49765,49766,49768,49770,49772],{"class":43,"line":76},[41,49767,30840],{"class":271},[41,49769,32017],{"class":275},[41,49771,30495],{"class":271},[41,49773,44743],{"class":275},[41,49775,49776],{"class":43,"line":83},[41,49777,80],{"emptyLinePlaceholder":79},[41,49779,49780],{"class":43,"line":89},[41,49781,34054],{"class":47},[41,49783,49784,49786,49788],{"class":43,"line":96},[41,49785,32050],{"class":271},[41,49787,34061],{"class":54},[41,49789,32056],{"class":275},[41,49791,49792],{"class":43,"line":104},[41,49793,49794],{"class":47},"   # 导入自己的数据集，并进行数据处理\n",[41,49796,49797],{"class":43,"line":176},[41,49798,48064],{"class":47},[41,49800,49801,49803,49805,49807,49809,49811,49814],{"class":43,"line":184},[41,49802,48069],{"class":58},[41,49804,321],{"class":271},[41,49806,943],{"class":271},[41,49808,524],{"class":378},[41,49810,831],{"class":58},[41,49812,49813],{"class":48080},"\u002Fdata\u002Ftest",[41,49815,25236],{"class":378},[41,49817,49818],{"class":43,"line":1757},[41,49819,80],{"emptyLinePlaceholder":79},[41,49821,49822],{"class":43,"line":1763},[41,49823,48092],{"class":47},[41,49825,49826],{"class":43,"line":1768},[41,49827,48097],{"class":47},[41,49829,49830],{"class":43,"line":1782},[41,49831,48102],{"class":47},[41,49833,49834],{"class":43,"line":1787},[41,49835,48107],{"class":47},[41,49837,49838,49840,49842,49844,49846,49848,49850,49852,49854,49856,49858,49860,49862,49864,49866],{"class":43,"line":1793},[41,49839,48112],{"class":275},[41,49841,321],{"class":271},[41,49843,48117],{"class":275},[41,49845,48120],{"class":58},[41,49847,651],{"class":275},[41,49849,48125],{"class":58},[41,49851,651],{"class":275},[41,49853,48130],{"class":58},[41,49855,48133],{"class":275},[41,49857,48136],{"class":58},[41,49859,651],{"class":275},[41,49861,48141],{"class":58},[41,49863,651],{"class":275},[41,49865,48146],{"class":58},[41,49867,4795],{"class":275},[41,49869,49870],{"class":43,"line":1814},[41,49871,48153],{"class":47},[41,49873,49874,49876,49878],{"class":43,"line":1819},[41,49875,48158],{"class":275},[41,49877,321],{"class":271},[41,49879,48163],{"class":275},[41,49881,49882],{"class":43,"line":1833},[41,49883,48168],{"class":47},[41,49885,49886,49888,49890,49892,49894],{"class":43,"line":1838},[41,49887,48173],{"class":275},[41,49889,31604],{"class":58},[41,49891,651],{"class":275},[41,49893,31604],{"class":58},[41,49895,42725],{"class":275},[41,49897,49898],{"class":43,"line":1867},[41,49899,48186],{"class":47},[41,49901,49902],{"class":43,"line":1872},[41,49903,48191],{"class":275},[41,49905,49906],{"class":43,"line":1889},[41,49907,48196],{"class":275},[41,49909,49910],{"class":43,"line":1894},[41,49911,48201],{"class":47},[41,49913,49914],{"class":43,"line":1899},[41,49915,48206],{"class":47},[41,49917,49918],{"class":43,"line":1904},[41,49919,80],{"emptyLinePlaceholder":79},[41,49921,49922],{"class":43,"line":1918},[41,49923,48215],{"class":47},[41,49925,49926],{"class":43,"line":1923},[41,49927,48220],{"class":47},[41,49929,49930,49932,49934,49936,49938,49940,49942,49944],{"class":43,"line":2715},[41,49931,34068],{"class":275},[41,49933,321],{"class":271},[41,49935,48229],{"class":275},[41,49937,48232],{"class":58},[41,49939,651],{"class":275},[41,49941,48237],{"class":5354},[41,49943,321],{"class":271},[41,49945,48242],{"class":275},[41,49947,49948,49950,49952,49954,49956,49958],{"class":43,"line":2729},[41,49949,34125],{"class":275},[41,49951,321],{"class":271},[41,49953,31637],{"class":275},[41,49955,31640],{"class":5354},[41,49957,321],{"class":271},[41,49959,34136],{"class":275},[41,49961,49962],{"class":43,"line":2737},[41,49963,34141],{"class":47},[41,49965,49966,49968,49970,49972],{"class":43,"line":2742},[41,49967,34146],{"class":5354},[41,49969,321],{"class":271},[41,49971,26],{"class":58},[41,49973,31569],{"class":275},[41,49975,49976,49978,49980,49982],{"class":43,"line":2748},[41,49977,34157],{"class":5354},[41,49979,321],{"class":271},[41,49981,31579],{"class":58},[41,49983,31569],{"class":275},[41,49985,49986,49988,49990,49992],{"class":43,"line":2754},[41,49987,34168],{"class":5354},[41,49989,321],{"class":271},[41,49991,465],{"class":58},[41,49993,282],{"class":275},[41,49995,49996,49998],{"class":43,"line":2759},[41,49997,4228],{"class":271},[41,49999,34181],{"class":275},[41,50001,50002],{"class":43,"line":8086},[41,50003,80],{"emptyLinePlaceholder":79},[41,50005,50006],{"class":43,"line":8110},[41,50007,34190],{"class":47},[41,50009,50010,50012,50014],{"class":43,"line":8115},[41,50011,32050],{"class":271},[41,50013,34197],{"class":54},[41,50015,34200],{"class":275},[41,50017,50018],{"class":43,"line":8121},[41,50019,34205],{"class":47},[41,50021,50022,50024,50026,50028,50030,50032,50034],{"class":43,"line":8148},[41,50023,31340],{"class":275},[41,50025,321],{"class":271},[41,50027,31347],{"class":378},[41,50029,1844],{"class":271},[41,50031,31352],{"class":275},[41,50033,1841],{"class":271},[41,50035,34222],{"class":378},[41,50037,50038,50040,50042],{"class":43,"line":8153},[41,50039,31392],{"class":275},[41,50041,321],{"class":271},[41,50043,32392],{"class":275},[41,50045,50046],{"class":43,"line":8159},[41,50047,80],{"emptyLinePlaceholder":79},[41,50049,50050],{"class":43,"line":8171},[41,50051,34239],{"class":47},[41,50053,50054,50056,50058],{"class":43,"line":8183},[41,50055,34244],{"class":275},[41,50057,321],{"class":271},[41,50059,32445],{"class":58},[41,50061,50062,50064,50066],{"class":43,"line":8195},[41,50063,34253],{"class":275},[41,50065,321],{"class":271},[41,50067,3223],{"class":58},[41,50069,50070],{"class":43,"line":9854},[41,50071,80],{"emptyLinePlaceholder":79},[41,50073,50074],{"class":43,"line":9879},[41,50075,34266],{"class":47},[41,50077,50078],{"class":43,"line":9902},[41,50079,34271],{"class":47},[41,50081,50082],{"class":43,"line":9926},[41,50083,34276],{"class":47},[41,50085,50086,50088],{"class":43,"line":9931},[41,50087,34281],{"class":271},[41,50089,32987],{"class":275},[41,50091,50092],{"class":43,"line":9936},[41,50093,34288],{"class":47},[41,50095,50096,50098,50100,50102],{"class":43,"line":9941},[41,50097,3541],{"class":271},[41,50099,34295],{"class":275},[41,50101,26146],{"class":271},[41,50103,34300],{"class":275},[41,50105,50106,50108,50110],{"class":43,"line":9950},[41,50107,34305],{"class":275},[41,50109,321],{"class":271},[41,50111,34310],{"class":275},[41,50113,50114,50116,50118],{"class":43,"line":9955},[41,50115,34315],{"class":275},[41,50117,321],{"class":271},[41,50119,34320],{"class":275},[41,50121,50122],{"class":43,"line":9961},[41,50123,34325],{"class":47},[41,50125,50126],{"class":43,"line":9982},[41,50127,32978],{"class":275},[41,50129,50130],{"class":43,"line":9988},[41,50131,34334],{"class":47},[41,50133,50134,50136,50138],{"class":43,"line":10002},[41,50135,32763],{"class":275},[41,50137,321],{"class":271},[41,50139,34343],{"class":275},[41,50141,50142],{"class":43,"line":10008},[41,50143,34348],{"class":47},[41,50145,50146,50148,50150,50152,50154,50156,50158],{"class":43,"line":10035},[41,50147,32780],{"class":275},[41,50149,321],{"class":271},[41,50151,32785],{"class":275},[41,50153,32788],{"class":5354},[41,50155,321],{"class":271},[41,50157,26],{"class":58},[41,50159,282],{"class":275},[41,50161,50162],{"class":43,"line":10044},[41,50163,34369],{"class":47},[41,50165,50166],{"class":43,"line":10050},[41,50167,34374],{"class":47},[41,50169,50170],{"class":43,"line":10058},[41,50171,34379],{"class":47},[41,50173,50174,50176,50178,50180,50182],{"class":43,"line":10063},[41,50175,34384],{"class":275},[41,50177,9615],{"class":271},[41,50179,32890],{"class":275},[41,50181,3087],{"class":271},[41,50183,34393],{"class":275},[41,50185,50186],{"class":43,"line":16742},[41,50187,34398],{"class":47},[41,50189,50190,50192,50194,50196,50198],{"class":43,"line":16748},[41,50191,34403],{"class":275},[41,50193,9615],{"class":271},[41,50195,34408],{"class":275},[41,50197,465],{"class":58},[41,50199,282],{"class":275},[41,50201,50202],{"class":43,"line":16771},[41,50203,80],{"emptyLinePlaceholder":79},[41,50205,50206],{"class":43,"line":16777},[41,50207,34421],{"class":47},[41,50209,50210,50212,50214,50216,50218],{"class":43,"line":16800},[41,50211,34426],{"class":275},[41,50213,321],{"class":271},[41,50215,34431],{"class":275},[41,50217,857],{"class":271},[41,50219,34436],{"class":275},[41,50221,50222],{"class":43,"line":16814},[41,50223,34441],{"class":47},[41,50225,50226,50228,50230,50232],{"class":43,"line":16834},[41,50227,32554],{"class":58},[41,50229,276],{"class":275},[41,50231,34450],{"class":378},[41,50233,34453],{"class":275},[41,50235,50236],{"class":43,"line":16840},[41,50237,80],{"emptyLinePlaceholder":79},[41,50239,50240],{"class":43,"line":16851},[41,50241,34462],{"class":47},[41,50243,50244,50246,50248,50250,50252],{"class":43,"line":16874},[41,50245,1672],{"class":271},[41,50247,31323],{"class":58},[41,50249,3087],{"class":271},[41,50251,31328],{"class":378},[41,50253,3877],{"class":275},[41,50255,50256],{"class":43,"line":16896},[41,50257,34479],{"class":47},[41,50259,50260,50262,50264],{"class":43,"line":16901},[41,50261,31392],{"class":275},[41,50263,321],{"class":271},[41,50265,44654],{"class":275},[41,50267,50268],{"class":43,"line":16907},[41,50269,34492],{"class":47},[41,50271,50272],{"class":43,"line":16921},[41,50273,34497],{"class":47},[41,50275,50276,50278,50280],{"class":43,"line":16934},[41,50277,34502],{"class":275},[41,50279,34505],{"class":378},[41,50281,30600],{"class":275},[41,50283,50284],{"class":43,"line":16939},[41,50285,34512],{"class":47},[41,50287,50288,50290,50292],{"class":43,"line":16953},[41,50289,34125],{"class":275},[41,50291,321],{"class":271},[41,50293,34521],{"class":275},[41,50295,50296],{"class":43,"line":16958},[41,50297,34526],{"class":47},[41,50299,50300],{"class":43,"line":16964},[41,50301,34531],{"class":275},[41,50303,50304],{"class":43,"line":16969},[41,50305,80],{"emptyLinePlaceholder":79},[41,50307,50308],{"class":43,"line":16983},[41,50309,34540],{"class":47},[41,50311,50312],{"class":43,"line":16988},[41,50313,34545],{"class":47},[41,50315,50316,50318,50320,50322,50324,50326,50328],{"class":43,"line":16993},[41,50317,31340],{"class":275},[41,50319,321],{"class":271},[41,50321,31347],{"class":378},[41,50323,1844],{"class":271},[41,50325,31352],{"class":275},[41,50327,1841],{"class":271},[41,50329,34222],{"class":378},[41,50331,50332,50334,50336],{"class":43,"line":17007},[41,50333,31392],{"class":275},[41,50335,321],{"class":271},[41,50337,32392],{"class":275},[41,50339,50340],{"class":43,"line":17019},[41,50341,34574],{"class":47},[41,50343,50344],{"class":43,"line":17024},[41,50345,34579],{"class":47},[41,50347,50348,50350,50352,50354,50357,50359,50362],{"class":43,"line":17037},[41,50349,34584],{"class":275},[41,50351,321],{"class":271},[41,50353,1163],{"class":275},[41,50355,50356],{"class":378},"'猫'",[41,50358,651],{"class":275},[41,50360,50361],{"class":378},"'狗'",[41,50363,33349],{"class":275},[41,50365,50366,50368],{"class":43,"line":17042},[41,50367,34281],{"class":271},[41,50369,32987],{"class":275},[41,50371,50372],{"class":43,"line":17047},[41,50373,34649],{"class":47},[41,50375,50376,50378,50380,50382],{"class":43,"line":17052},[41,50377,3541],{"class":271},[41,50379,34656],{"class":275},[41,50381,26146],{"class":271},[41,50383,34300],{"class":275},[41,50385,50386,50388,50390],{"class":43,"line":17065},[41,50387,32713],{"class":275},[41,50389,321],{"class":271},[41,50391,32718],{"class":275},[41,50393,50394,50396,50398],{"class":43,"line":17070},[41,50395,32728],{"class":275},[41,50397,321],{"class":271},[41,50399,32733],{"class":275},[41,50401,50402],{"class":43,"line":32736},[41,50403,80],{"emptyLinePlaceholder":79},[41,50405,50406],{"class":43,"line":32742},[41,50407,34685],{"class":47},[41,50409,50410],{"class":43,"line":32748},[41,50411,32978],{"class":275},[41,50413,50414],{"class":43,"line":32754},[41,50415,34694],{"class":47},[41,50417,50418,50420,50422],{"class":43,"line":32760},[41,50419,32763],{"class":275},[41,50421,321],{"class":271},[41,50423,32768],{"class":275},[41,50425,50426],{"class":43,"line":32771},[41,50427,34707],{"class":47},[41,50429,50430,50432,50434,50436,50438,50440,50442],{"class":43,"line":32777},[41,50431,32780],{"class":275},[41,50433,321],{"class":271},[41,50435,32785],{"class":275},[41,50437,32788],{"class":5354},[41,50439,321],{"class":271},[41,50441,26],{"class":58},[41,50443,282],{"class":275},[41,50445,50446],{"class":43,"line":32797},[41,50447,34728],{"class":47},[41,50449,50450,50452,50454],{"class":43,"line":32803},[41,50451,34733],{"class":275},[41,50453,321],{"class":271},[41,50455,34738],{"class":275},[41,50457,50458,50460,50462],{"class":43,"line":32814},[41,50459,34743],{"class":275},[41,50461,321],{"class":271},[41,50463,34748],{"class":275},[41,50465,50466,50468,50470,50472,50474,50476,50478,50480],{"class":43,"line":32820},[41,50467,34753],{"class":58},[41,50469,276],{"class":275},[41,50471,34758],{"class":378},[41,50473,34761],{"class":275},[41,50475,34764],{"class":378},[41,50477,651],{"class":275},[41,50479,34769],{"class":378},[41,50481,34772],{"class":275},[189,50483,50484],{},"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":37,"searchDepth":51,"depth":51,"links":50486},[50487,50488,50489,50490],{"id":30694,"depth":62,"text":30695},{"id":37942,"depth":62,"text":37943},{"id":41375,"depth":62,"text":41376},{"id":45384,"depth":62,"text":45385},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30686,"description":196},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50497,"title":50498,"body":50499,"description":196,"extension":197,"meta":50506,"navigation":79,"path":50507,"seo":50508,"stem":50509,"__hash__":50510},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50500,"toc":50504},[50501],[10,50502,50498],{"id":50503},"_3yolo模型学习",{"title":37,"searchDepth":51,"depth":51,"links":50505},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50498,"description":196},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50512,"title":50513,"body":50514,"description":50521,"extension":197,"meta":50522,"navigation":79,"path":50524,"seo":50525,"stem":50526,"__hash__":50527},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50515,"toc":50519},[50516],[20,50517,50518],{},"yolo模型还未补充",{"title":37,"searchDepth":51,"depth":51,"links":50520},[],"深度学习学习",{"category":50523},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50513,"description":50521},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50529,"title":50530,"body":50531,"description":196,"extension":197,"meta":50556,"navigation":79,"path":50557,"seo":50558,"stem":50559,"__hash__":50560},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50532,"toc":50554},[50533,50536,50539,50544,50551],[10,50534,50530],{"id":50535},"_1工具",[20,50537,50538],{},"提示错误插件：有问题会提前报错",[20,50540,50541],{},[1603,50542],{"alt":37,"src":50543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[20,50545,50546],{},[511,50547,50550],{"href":50548,"rel":50549},"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",[24001],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[20,50552,50553],{},"alt键加上下箭头可以实现语句的移动",{"title":37,"searchDepth":51,"depth":51,"links":50555},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50530,"description":196},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50562,"title":50563,"body":50564,"description":196,"extension":197,"meta":53428,"navigation":79,"path":53429,"seo":53430,"stem":53431,"__hash__":53432},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50565,"toc":53379},[50566,50569,50573,50577,50582,50585,50590,50594,50601,50606,50613,50618,50625,50630,50634,50639,50642,50646,50651,50655,50660,50663,50666,50669,50672,50675,50678,50681,50684,50689,50694,50699,50703,50706,50709,50713,50718,50721,50729,50734,50751,50759,50764,50769,50774,50779,50784,50787,50792,50797,50801,50810,50815,50820,50824,50829,50832,50836,50841,50849,50854,50859,50862,50867,50872,50877,50880,50883,50886,50891,50896,50899,50904,50907,50912,50915,50918,50921,50926,50929,50932,50947,50952,50957,50962,50965,50968,50971,50985,50988,50993,50998,51001,51004,51007,51010,51013,51016,51019,51023,51027,51032,51036,51039,51044,51049,51052,51057,51060,51064,51069,51072,51075,51078,51081,51084,51087,51090,51093,51096,51100,51105,51110,51115,51118,51121,51125,51130,51133,51137,51140,51143,51148,51151,51154,51158,51162,51165,51170,51175,51178,51207,51212,51217,51222,51227,51231,51236,51240,51245,51248,51252,51256,51261,51265,51270,51275,51279,51284,51287,51289,51292,51297,51301,51306,51310,51314,51319,51324,51329,51334,51338,51343,51348,51353,51356,51359,51364,51367,51372,51377,51382,51387,51391,52198,52202,52545,52550,52553,52556,52559,52562,52565,52568,52571,52574,52576,52579,52581,52584,52588,52593,52596,52599,52602,52606,52611,52616,52636,52639,52643,52648,52653,52670,52674,52703,52707,52729,52731,52770,52778,52784,52788,52791,52794,52799,52804,52807,52810,52813,52818,52823,52826,52829,52832,52835,52838,52841,52844,52847,52850,52853,52856,52858,52861,52864,52867,52870,52873,52876,52879,52882,52886,52891,52894,52899,52902,52905,52908,52911,52914,52917,52920,52922,52925,52928,52931,52934,52937,52940,52944,52947,52956,52959,52964,52967,52972,52975,52978,52981,52984,52987,52990,52993,52997,53001,53004,53007,53012,53017,53022,53026,53031,53036,53039,53042,53045,53048,53051,53056,53059,53064,53066,53071,53074,53078,53083,53086,53089,53094,53098,53101,53106,53109,53112,53141,53146,53149,53152,53155,53158,53161,53165,53168,53254,53258,53261,53266,53271,53278,53281,53284,53287,53290,53293,53298,53303,53306,53309,53312,53315,53318,53321,53324,53327,53330,53332,53335,53339,53344,53349,53354,53357,53362,53367,53370,53373,53376],[10,50567,50563],{"id":50568},"_2基础语法",[15,50570,50572],{"id":50571},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[241,50574,50576],{"id":50575},"_211-js组成","2.1.1 js组成",[224,50578,50579],{},[227,50580,50581],{},"js是编程语言，html和css不是编程语言，是标记语言",[20,50583,50584],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[224,50586,50587],{"start":51},[227,50588,50589],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[241,50591,50593],{"id":50592},"_212-js书写位置","2.1.2 js书写位置",[224,50595,50596],{},[227,50597,50598],{},[423,50599,50600],{},"内部 JavaScript",[20,50602,50603],{},[1603,50604],{"alt":37,"src":50605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[224,50607,50608],{"start":51},[227,50609,50610],{},[423,50611,50612],{},"外部 JavaScript",[20,50614,50615],{},[1603,50616],{"alt":37,"src":50617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[224,50619,50620],{"start":62},[227,50621,50622],{},[423,50623,50624],{},"内联 JavaScript",[20,50626,50627],{},[1603,50628],{"alt":37,"src":50629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[241,50631,50633],{"id":50632},"_213-javascript注释","2.1.3 JavaScript注释",[20,50635,50636],{},[1603,50637],{"alt":37,"src":50638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[20,50640,50641],{},"alt+shift+a一定要记住！",[241,50643,50645],{"id":50644},"_214-javascript结束符","2.1.4 JavaScript结束符",[20,50647,50648],{},[1603,50649],{"alt":37,"src":50650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[241,50652,50654],{"id":50653},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[224,50656,50657],{},[227,50658,50659],{},"输出语法：",[20,50661,50662],{},"①document.write('要出的内容')",[20,50664,50665],{},"向body内输出内容；",[20,50667,50668],{},"如果输出的内容写的是标签，也会被解析cheng",[20,50670,50671],{},"②alert('要出的内容')",[20,50673,50674],{},"页面弹出警告对话框",[20,50676,50677],{},"③console.log('控制台打印')",[20,50679,50680],{},"控制台输出语法，程序员调试使用",[20,50682,50683],{},"输入log就行，自动生成：",[20,50685,50686],{},[1603,50687],{"alt":37,"src":50688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[224,50690,50691],{"start":51},[227,50692,50693],{},"输入语法：",[20,50695,50696],{},[1603,50697],{"alt":37,"src":50698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[241,50700,50702],{"id":50701},"_2116-字面量","21.1.6 字面量",[20,50704,50705],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[20,50707,50708],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[15,50710,50712],{"id":50711},"_22-变量","2.2 变量",[224,50714,50715],{},[227,50716,50717],{},"变量声明",[20,50719,50720],{},"let 变量名",[1280,50722,50723,50726],{},[227,50724,50725],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[227,50727,50728],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[224,50730,50731],{"start":51},[227,50732,50733],{},"变量赋值",[32,50735,50739],{"className":50736,"code":50737,"language":50738,"meta":37,"style":37},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[24,50740,50741,50746],{"__ignoreMap":37},[41,50742,50743],{"class":43,"line":44},[41,50744,50745],{"class":275},"let age\n",[41,50747,50748],{"class":43,"line":51},[41,50749,50750],{"class":275},"age=18\n",[224,50752,50753,50756],{"start":62},[227,50754,50755],{},"连这些（变量的初始化）：let age=18",[227,50757,50758],{},"更新变量",[20,50760,50761],{},[1603,50762],{"alt":37,"src":50763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[224,50765,50766],{"start":76},[227,50767,50768],{},"声明多个变量",[20,50770,50771],{},[1603,50772],{"alt":37,"src":50773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[224,50775,50776],{"start":83},[227,50777,50778],{},"变量命名规则与规范",[20,50780,50781],{},[1603,50782],{"alt":37,"src":50783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[20,50785,50786],{},"遵守小驼峰！",[224,50788,50789],{"start":89},[227,50790,50791],{},"变量拓展-let和var的区别",[20,50793,50794],{},[1603,50795],{"alt":37,"src":50796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[15,50798,50800],{"id":50799},"_23-数组","2.3 数组",[32,50802,50804],{"className":50736,"code":50803,"language":50738,"meta":37,"style":37},"let arr = []\n",[24,50805,50806],{"__ignoreMap":37},[41,50807,50808],{"class":43,"line":44},[41,50809,50803],{"class":275},[20,50811,50812],{},[1603,50813],{"alt":37,"src":50814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[20,50816,50817],{},[1603,50818],{"alt":37,"src":50819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[15,50821,50823],{"id":50822},"_24-常量","2.4 常量",[20,50825,50826],{},[1603,50827],{"alt":37,"src":50828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[20,50830,50831],{},"const — 类似于 let ，但是变量的值无法被修改",[15,50833,50835],{"id":50834},"_25-数据类型","2.5 数据类型",[20,50837,50838],{},[1603,50839],{"alt":37,"src":50840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[224,50842,50843,50846],{},[227,50844,50845],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[227,50847,50848],{},"算数运算符：",[20,50850,50851],{},[1603,50852],{"alt":37,"src":50853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[224,50855,50856],{"start":62},[227,50857,50858],{},"数字类型（Number）",[20,50860,50861],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[20,50863,50864],{},[1603,50865],{"alt":37,"src":50866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[224,50868,50869],{"start":70},[227,50870,50871],{},"字符串类型（string）",[20,50873,50874],{},[1603,50875],{"alt":37,"src":50876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[20,50878,50879],{},"反引号也是可以使用的",[20,50881,50882],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[20,50884,50885],{},"例如：document.write(\"我今年\"+age+\"岁\")",[224,50887,50888],{"start":76},[227,50889,50890],{},"模板字符串",[20,50892,50893],{},[1603,50894],{"alt":37,"src":50895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[20,50897,50898],{},"类似于python的字符串格式化",[224,50900,50901],{"start":83},[227,50902,50903],{},"布尔类型",[20,50905,50906],{},"true 和 false",[224,50908,50909],{"start":89},[227,50910,50911],{},"未定义类型（underfined）",[20,50913,50914],{},"表示没有赋值",[20,50916,50917],{},"未定义类型是比较特殊的类型，只有一个值undefined",[20,50919,50920],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[224,50922,50923],{"start":96},[227,50924,50925],{},"null（空类型）",[20,50927,50928],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[20,50930,50931],{},"赋值了，但是内容为空",[32,50933,50935],{"className":50736,"code":50934,"language":50738,"meta":37,"style":37},"typeof null\n输出的是'object'，是一个对象数据类型\n",[24,50936,50937,50942],{"__ignoreMap":37},[41,50938,50939],{"class":43,"line":44},[41,50940,50941],{"class":275},"typeof null\n",[41,50943,50944],{"class":43,"line":51},[41,50945,50946],{"class":275},"输出的是'object'，是一个对象数据类型\n",[224,50948,50949],{"start":104},[227,50950,50951],{},"控制台检测数据类型",[20,50953,50954],{},[1603,50955],{"alt":37,"src":50956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[224,50958,50959],{"start":176},[227,50960,50961],{},"类型转换",[20,50963,50964],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[20,50966,50967],{},"转换方式：隐式转换和显示转换",[20,50969,50970],{},"①隐式转换",[1280,50972,50973,50976,50979,50982],{},[227,50974,50975],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[227,50977,50978],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[227,50980,50981],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[227,50983,50984],{},"任何数据和字符串相加结果都是字符串",[20,50986,50987],{},"②显示转换",[20,50989,50990],{},[1603,50991],{"alt":37,"src":50992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[20,50994,50995],{},[1603,50996],{"alt":37,"src":50997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[20,50999,51000],{},"在输入的时候要用好隐式转换，简单写起来",[20,51002,51003],{},"let num = +prompt(’请输入数字：‘)",[20,51005,51006],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[20,51008,51009],{},"console.log(parseInt('12.333px'))",[20,51011,51012],{},"输出为：12",[20,51014,51015],{},"console.log(parseInt('a'a'a12.333px'))",[20,51017,51018],{},"输出：NaN",[15,51020,51022],{"id":51021},"_26-运算符","2.6 运算符",[241,51024,51026],{"id":51025},"_261-赋值运算符","2.6.1 赋值运算符",[20,51028,51029],{},[1603,51030],{"alt":37,"src":51031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[241,51033,51035],{"id":51034},"_262-一元运算符","2.6.2 一元运算符",[20,51037,51038],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[20,51040,51041],{},[1603,51042],{"alt":37,"src":51043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[20,51045,51046],{},[1603,51047],{"alt":37,"src":51048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[20,51050,51051],{},"两者的区别：",[20,51053,51054],{},[1603,51055],{"alt":37,"src":51056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[20,51058,51059],{},"前置先自加；后置后加，代码执行完之后再加",[241,51061,51063],{"id":51062},"_263-比较运算符","2.6.3 比较运算符",[20,51065,51066],{},[1603,51067],{"alt":37,"src":51068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[20,51070,51071],{},"比较运算符也有隐式转换",[20,51073,51074],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[20,51076,51077],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[20,51079,51080],{},"要使用三等，开发的时候",[20,51082,51083],{},"NaN不等于任何人，包括它自己",[20,51085,51086],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[20,51088,51089],{},"7\u002F10=0.7",[20,51091,51092],{},"最后：0.5+0.2=0.7",[20,51094,51095],{},"字符串比较，比较的是字符对应的ASCII码",[241,51097,51099],{"id":51098},"_264-逻辑运算符","2.6.4 逻辑运算符",[20,51101,51102],{},[1603,51103],{"alt":37,"src":51104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[20,51106,51107],{},[1603,51108],{"alt":37,"src":51109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[20,51111,51112],{},[1603,51113],{"alt":37,"src":51114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[20,51116,51117],{},"上述题目选D",[20,51119,51120],{},"与真2假1；或真1假2",[241,51122,51124],{"id":51123},"_265-运算符优先级","2.6.5 运算符优先级",[20,51126,51127],{},[1603,51128],{"alt":37,"src":51129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[20,51131,51132],{},"先算逻辑与，后算逻辑或",[15,51134,51136],{"id":51135},"_27-语句","2.7 语句",[20,51138,51139],{},"表达式：是可以被求值的代码，会有结果给我们",[20,51141,51142],{},"语句：语句是可以被执行的代码，例如prompt()",[20,51144,51145],{},[1603,51146],{"alt":37,"src":51147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[20,51149,51150],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[20,51152,51153],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[241,51155,51157],{"id":51156},"_271-分支语句","2.7.1 分支语句",[22136,51159,51161],{"id":51160},"_2711-if分支语句","2.7.1.1 if分支语句",[20,51163,51164],{},"if语句单行简单的话，可以不写{}，写在一行就行",[224,51166,51167],{},[227,51168,51169],{},"单分支语句",[20,51171,51172],{},[1603,51173],{"alt":37,"src":51174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[20,51176,51177],{},"除了0，所有数字都为真",[32,51179,51181],{"className":50736,"code":51180,"language":50738,"meta":37,"style":37},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[24,51182,51183,51188,51193,51198,51202],{"__ignoreMap":37},[41,51184,51185],{"class":43,"line":44},[41,51186,51187],{"class":275},"if（0) {\n",[41,51189,51190],{"class":43,"line":51},[41,51191,51192],{"class":275},"    let a=1\n",[41,51194,51195],{"class":43,"line":62},[41,51196,51197],{"class":275},"    alert(typeof a)\n",[41,51199,51200],{"class":43,"line":70},[41,51201,1706],{"class":275},[41,51203,51204],{"class":43,"line":76},[41,51205,51206],{"class":275},"不输出，括号为假\n",[224,51208,51209],{"start":51},[227,51210,51211],{},"双分支语句",[20,51213,51214],{},[1603,51215],{"alt":37,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[224,51218,51219],{"start":62},[227,51220,51221],{},"多分支语句",[20,51223,51224],{},[1603,51225],{"alt":37,"src":51226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22136,51228,51230],{"id":51229},"_2712-三元运算符","2.7.1.2 三元运算符",[20,51232,51233],{},[1603,51234],{"alt":37,"src":51235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22136,51237,51239],{"id":51238},"_2713-switch语句","2.7.1.3 switch语句",[20,51241,51242],{},[1603,51243],{"alt":37,"src":51244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[20,51246,51247],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[241,51249,51251],{"id":51250},"_272-循环语句","2.7.2 循环语句",[22136,51253,51255],{"id":51254},"_2721-断点演示","2.7.2.1 断点演示",[20,51257,51258],{},[1603,51259],{"alt":37,"src":51260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22136,51262,51264],{"id":51263},"_2722-while循环","2.7.2.2 while循环",[20,51266,51267],{},[1603,51268],{"alt":37,"src":51269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[20,51271,51272],{},[1603,51273],{"alt":37,"src":51274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22136,51276,51278],{"id":51277},"_2723-for循环","2.7.2.3 for循环",[20,51280,51281],{},[1603,51282],{"alt":37,"src":51283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[20,51285,51286],{},"for(;;) {",[20,51288,1219],{},[20,51290,51291],{},"表示无限循环",[20,51293,51294],{},[1603,51295],{"alt":37,"src":51296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22136,51298,51300],{"id":51299},"_2724-循环的退出","2.7.2.4 循环的退出",[20,51302,51303],{},[1603,51304],{"alt":37,"src":51305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[15,51307,51309],{"id":51308},"_28-数组","2.8 数组",[241,51311,51313],{"id":51312},"_281-基础认识","2.8.1 基础认识",[20,51315,51316],{},[1603,51317],{"alt":37,"src":51318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[20,51320,51321],{},[1603,51322],{"alt":37,"src":51323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[20,51325,51326],{},[1603,51327],{"alt":37,"src":51328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[20,51330,51331],{},[1603,51332],{"alt":37,"src":51333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[241,51335,51337],{"id":51336},"_282-操作数组","2.8.2 操作数组",[20,51339,51340],{},[1603,51341],{"alt":37,"src":51342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[224,51344,51345],{},[227,51346,51347],{},"添加元素",[20,51349,51350],{},[1603,51351],{"alt":37,"src":51352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[20,51354,51355],{},"console.log(arr.push('green'))",[20,51357,51358],{},"输出结果：为新数组的长度",[20,51360,51361],{},[1603,51362],{"alt":37,"src":51363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[20,51365,51366],{},"push用的非常多，一定要记住",[224,51368,51369],{},[227,51370,51371],{},"删除元素",[20,51373,51374],{},[1603,51375],{"alt":37,"src":51376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[20,51378,51379],{},[1603,51380],{"alt":37,"src":51381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[20,51383,51384],{},[1603,51385],{"alt":37,"src":51386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[241,51388,51390],{"id":51389},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[32,51392,51394],{"className":50736,"code":51393,"language":50738,"meta":37,"style":37},"\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",[24,51395,51396,51411,51427,51431,51440,51458,51482,51504,51518,51526,51533,51545,51556,51560,51564,51571,51583,51598,51611,51630,51647,51662,51674,51686,51698,51702,51706,51717,51727,51739,51751,51763,51774,51778,51782,51794,51798,51812,51816,51820,51831,51845,51857,51871,51875,51884,51893,51897,51906,51910,51919,51924,51929,51942,51970,51975,51980,52005,52010,52014,52019,52024,52039,52043,52048,52078,52090,52106,52122,52136,52141,52148,52152,52157,52170,52178,52186,52190],{"__ignoreMap":37},[41,51397,51398,51401,51405,51408],{"class":43,"line":44},[41,51399,51400],{"class":275},"\u003C!",[41,51402,51404],{"class":51403},"s9eBZ","DOCTYPE",[41,51406,51407],{"class":54}," html",[41,51409,51410],{"class":275},">\n",[41,51412,51413,51415,51417,51420,51422,51425],{"class":43,"line":51},[41,51414,1183],{"class":275},[41,51416,50738],{"class":51403},[41,51418,51419],{"class":54}," lang",[41,51421,321],{"class":275},[41,51423,51424],{"class":378},"\"en\"",[41,51426,51410],{"class":275},[41,51428,51429],{"class":43,"line":62},[41,51430,80],{"emptyLinePlaceholder":79},[41,51432,51433,51435,51438],{"class":43,"line":70},[41,51434,1183],{"class":275},[41,51436,51437],{"class":51403},"head",[41,51439,51410],{"class":275},[41,51441,51442,51445,51448,51451,51453,51456],{"class":43,"line":76},[41,51443,51444],{"class":275},"    \u003C",[41,51446,51447],{"class":51403},"meta",[41,51449,51450],{"class":54}," charset",[41,51452,321],{"class":275},[41,51454,51455],{"class":378},"\"UTF-8\"",[41,51457,51410],{"class":275},[41,51459,51460,51462,51464,51467,51469,51472,51475,51477,51480],{"class":43,"line":83},[41,51461,51444],{"class":275},[41,51463,51447],{"class":51403},[41,51465,51466],{"class":54}," http-equiv",[41,51468,321],{"class":275},[41,51470,51471],{"class":378},"\"X-UA-Compatible\"",[41,51473,51474],{"class":54}," content",[41,51476,321],{"class":275},[41,51478,51479],{"class":378},"\"IE=edge\"",[41,51481,51410],{"class":275},[41,51483,51484,51486,51488,51490,51492,51495,51497,51499,51502],{"class":43,"line":89},[41,51485,51444],{"class":275},[41,51487,51447],{"class":51403},[41,51489,15058],{"class":54},[41,51491,321],{"class":275},[41,51493,51494],{"class":378},"\"viewport\"",[41,51496,51474],{"class":54},[41,51498,321],{"class":275},[41,51500,51501],{"class":378},"\"width=device-width, initial-scale=1.0\"",[41,51503,51410],{"class":275},[41,51505,51506,51508,51511,51514,51516],{"class":43,"line":96},[41,51507,51444],{"class":275},[41,51509,51510],{"class":51403},"title",[41,51512,51513],{"class":275},">Document\u003C\u002F",[41,51515,51510],{"class":51403},[41,51517,51410],{"class":275},[41,51519,51520,51522,51524],{"class":43,"line":104},[41,51521,51444],{"class":275},[41,51523,189],{"class":51403},[41,51525,51410],{"class":275},[41,51527,51528,51531],{"class":43,"line":176},[41,51529,51530],{"class":51403},"        *",[41,51532,15710],{"class":275},[41,51534,51535,51538,51541,51543],{"class":43,"line":184},[41,51536,51537],{"class":58},"            margin",[41,51539,51540],{"class":275},": ",[41,51542,465],{"class":58},[41,51544,1434],{"class":275},[41,51546,51547,51550,51552,51554],{"class":43,"line":1757},[41,51548,51549],{"class":58},"            padding",[41,51551,51540],{"class":275},[41,51553,465],{"class":58},[41,51555,1434],{"class":275},[41,51557,51558],{"class":43,"line":1763},[41,51559,2667],{"class":275},[41,51561,51562],{"class":43,"line":1768},[41,51563,80],{"emptyLinePlaceholder":79},[41,51565,51566,51569],{"class":43,"line":1782},[41,51567,51568],{"class":54},"        .box",[41,51570,15710],{"class":275},[41,51572,51573,51576,51578,51581],{"class":43,"line":1787},[41,51574,51575],{"class":58},"            display",[41,51577,51540],{"class":275},[41,51579,51580],{"class":58},"flex",[41,51582,1434],{"class":275},[41,51584,51585,51588,51590,51593,51596],{"class":43,"line":1793},[41,51586,51587],{"class":58},"            width",[41,51589,51540],{"class":275},[41,51591,51592],{"class":58},"700",[41,51594,51595],{"class":271},"px",[41,51597,1434],{"class":275},[41,51599,51600,51603,51605,51607,51609],{"class":43,"line":1814},[41,51601,51602],{"class":58},"            height",[41,51604,51540],{"class":275},[41,51606,4111],{"class":58},[41,51608,51595],{"class":271},[41,51610,1434],{"class":275},[41,51612,51613,51616,51618,51620,51622,51625,51628],{"class":43,"line":1819},[41,51614,51615],{"class":58},"            border-left",[41,51617,51540],{"class":275},[41,51619,26],{"class":58},[41,51621,51595],{"class":271},[41,51623,51624],{"class":58}," solid",[41,51626,51627],{"class":58}," pink",[41,51629,1434],{"class":275},[41,51631,51632,51635,51637,51639,51641,51643,51645],{"class":43,"line":1833},[41,51633,51634],{"class":58},"            border-bottom",[41,51636,51540],{"class":275},[41,51638,26],{"class":58},[41,51640,51595],{"class":271},[41,51642,51624],{"class":58},[41,51644,51627],{"class":58},[41,51646,1434],{"class":275},[41,51648,51649,51651,51653,51655,51657,51660],{"class":43,"line":1838},[41,51650,51537],{"class":58},[41,51652,51540],{"class":275},[41,51654,929],{"class":58},[41,51656,51595],{"class":271},[41,51658,51659],{"class":58}," auto",[41,51661,1434],{"class":275},[41,51663,51664,51667,51669,51672],{"class":43,"line":1867},[41,51665,51666],{"class":58},"            justify-content",[41,51668,51540],{"class":275},[41,51670,51671],{"class":58},"space-around",[41,51673,1434],{"class":275},[41,51675,51676,51679,51681,51684],{"class":43,"line":1872},[41,51677,51678],{"class":58},"            align-items",[41,51680,51540],{"class":275},[41,51682,51683],{"class":58},"flex-end",[41,51685,1434],{"class":275},[41,51687,51688,51691,51693,51696],{"class":43,"line":1889},[41,51689,51690],{"class":58},"            text-align",[41,51692,51540],{"class":275},[41,51694,51695],{"class":58},"center",[41,51697,1434],{"class":275},[41,51699,51700],{"class":43,"line":1894},[41,51701,2667],{"class":275},[41,51703,51704],{"class":43,"line":1899},[41,51705,80],{"emptyLinePlaceholder":79},[41,51707,51708,51710,51712,51715],{"class":43,"line":1904},[41,51709,51568],{"class":54},[41,51711,1233],{"class":271},[41,51713,51714],{"class":51403},"div",[41,51716,15710],{"class":275},[41,51718,51719,51721,51723,51725],{"class":43,"line":1918},[41,51720,51575],{"class":58},[41,51722,51540],{"class":275},[41,51724,51580],{"class":58},[41,51726,1434],{"class":275},[41,51728,51729,51731,51733,51735,51737],{"class":43,"line":1923},[41,51730,51587],{"class":58},[41,51732,51540],{"class":275},[41,51734,929],{"class":58},[41,51736,51595],{"class":271},[41,51738,1434],{"class":275},[41,51740,51741,51744,51746,51749],{"class":43,"line":2715},[41,51742,51743],{"class":58},"            background-color",[41,51745,51540],{"class":275},[41,51747,51748],{"class":58},"pink",[41,51750,1434],{"class":275},[41,51752,51753,51756,51758,51761],{"class":43,"line":2729},[41,51754,51755],{"class":58},"            flex-direction",[41,51757,51540],{"class":275},[41,51759,51760],{"class":58},"column",[41,51762,1434],{"class":275},[41,51764,51765,51767,51769,51772],{"class":43,"line":2737},[41,51766,51666],{"class":58},[41,51768,51540],{"class":275},[41,51770,51771],{"class":58},"space-between",[41,51773,1434],{"class":275},[41,51775,51776],{"class":43,"line":2742},[41,51777,2667],{"class":275},[41,51779,51780],{"class":43,"line":2748},[41,51781,80],{"emptyLinePlaceholder":79},[41,51783,51784,51786,51789,51792],{"class":43,"line":2754},[41,51785,51568],{"class":54},[41,51787,51788],{"class":51403}," div",[41,51790,51791],{"class":51403}," span",[41,51793,15710],{"class":275},[41,51795,51796],{"class":43,"line":2759},[41,51797,80],{"emptyLinePlaceholder":79},[41,51799,51800,51803,51805,51808,51810],{"class":43,"line":8086},[41,51801,51802],{"class":58},"            margin-top",[41,51804,51540],{"class":275},[41,51806,51807],{"class":58},"-20",[41,51809,51595],{"class":271},[41,51811,1434],{"class":275},[41,51813,51814],{"class":43,"line":8110},[41,51815,2667],{"class":275},[41,51817,51818],{"class":43,"line":8115},[41,51819,80],{"emptyLinePlaceholder":79},[41,51821,51822,51824,51826,51829],{"class":43,"line":8121},[41,51823,51568],{"class":54},[41,51825,51788],{"class":51403},[41,51827,51828],{"class":51403}," h4",[41,51830,15710],{"class":275},[41,51832,51833,51836,51838,51841,51843],{"class":43,"line":8148},[41,51834,51835],{"class":58},"            margin-bottom",[41,51837,51540],{"class":275},[41,51839,51840],{"class":58},"-35",[41,51842,51595],{"class":271},[41,51844,1434],{"class":275},[41,51846,51847,51849,51851,51853,51855],{"class":43,"line":8153},[41,51848,51587],{"class":58},[41,51850,51540],{"class":275},[41,51852,629],{"class":58},[41,51854,51595],{"class":271},[41,51856,1434],{"class":275},[41,51858,51859,51862,51864,51867,51869],{"class":43,"line":8159},[41,51860,51861],{"class":58},"            margin-left",[41,51863,51540],{"class":275},[41,51865,51866],{"class":58},"-10",[41,51868,51595],{"class":271},[41,51870,1434],{"class":275},[41,51872,51873],{"class":43,"line":8171},[41,51874,2667],{"class":275},[41,51876,51877,51880,51882],{"class":43,"line":8183},[41,51878,51879],{"class":275},"    \u003C\u002F",[41,51881,189],{"class":51403},[41,51883,51410],{"class":275},[41,51885,51886,51889,51891],{"class":43,"line":8195},[41,51887,51888],{"class":275},"\u003C\u002F",[41,51890,51437],{"class":51403},[41,51892,51410],{"class":275},[41,51894,51895],{"class":43,"line":9854},[41,51896,80],{"emptyLinePlaceholder":79},[41,51898,51899,51901,51904],{"class":43,"line":9879},[41,51900,1183],{"class":275},[41,51902,51903],{"class":51403},"body",[41,51905,51410],{"class":275},[41,51907,51908],{"class":43,"line":9902},[41,51909,80],{"emptyLinePlaceholder":79},[41,51911,51912,51914,51917],{"class":43,"line":9926},[41,51913,51444],{"class":275},[41,51915,51916],{"class":51403},"script",[41,51918,51410],{"class":275},[41,51920,51921],{"class":43,"line":9931},[41,51922,51923],{"class":47},"        \u002F\u002F 1. 四次弹框效果\n",[41,51925,51926],{"class":43,"line":9936},[41,51927,51928],{"class":47},"        \u002F\u002F 声明一个新的数组\n",[41,51930,51931,51934,51937,51939],{"class":43,"line":9941},[41,51932,51933],{"class":271},"        let",[41,51935,51936],{"class":275}," arr ",[41,51938,321],{"class":271},[41,51940,51941],{"class":275}," []\n",[41,51943,51944,51946,51948,51951,51953,51955,51957,51959,51961,51964,51966,51968],{"class":43,"line":9950},[41,51945,3541],{"class":271},[41,51947,1798],{"class":275},[41,51949,51950],{"class":271},"let",[41,51952,9576],{"class":275},[41,51954,321],{"class":271},[41,51956,25221],{"class":58},[41,51958,9583],{"class":275},[41,51960,1729],{"class":271},[41,51962,51963],{"class":58}," 4",[41,51965,3352],{"class":275},[41,51967,2431],{"class":271},[41,51969,12580],{"class":275},[41,51971,51972],{"class":43,"line":9955},[41,51973,51974],{"class":47},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[41,51976,51977],{"class":43,"line":9961},[41,51978,51979],{"class":47},"            \u002F\u002F arr.push(num)\n",[41,51981,51982,51985,51988,51990,51993,51995,51998,52000,52003],{"class":43,"line":9982},[41,51983,51984],{"class":275},"            arr.",[41,51986,51987],{"class":54},"push",[41,51989,276],{"class":275},[41,51991,51992],{"class":54},"prompt",[41,51994,276],{"class":275},[41,51996,51997],{"class":378},"`请输入第${",[41,51999,714],{"class":275},[41,52001,52002],{"class":378},"}季度的数据:`",[41,52004,30600],{"class":275},[41,52006,52007],{"class":43,"line":9988},[41,52008,52009],{"class":47},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[41,52011,52012],{"class":43,"line":10002},[41,52013,2667],{"class":275},[41,52015,52016],{"class":43,"line":10008},[41,52017,52018],{"class":47},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[41,52020,52021],{"class":43,"line":10035},[41,52022,52023],{"class":47},"        \u002F\u002F 盒子开头\n",[41,52025,52026,52029,52032,52034,52037],{"class":43,"line":10044},[41,52027,52028],{"class":275},"        document.",[41,52030,52031],{"class":54},"write",[41,52033,276],{"class":275},[41,52035,52036],{"class":378},"` \u003Cdiv class=\"box\">`",[41,52038,282],{"class":275},[41,52040,52041],{"class":43,"line":10050},[41,52042,80],{"emptyLinePlaceholder":79},[41,52044,52045],{"class":43,"line":10058},[41,52046,52047],{"class":47},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[41,52049,52050,52052,52054,52056,52058,52060,52062,52064,52066,52069,52072,52074,52076],{"class":43,"line":10063},[41,52051,3541],{"class":271},[41,52053,1798],{"class":275},[41,52055,51950],{"class":271},[41,52057,9576],{"class":275},[41,52059,321],{"class":271},[41,52061,4231],{"class":58},[41,52063,9583],{"class":275},[41,52065,1183],{"class":271},[41,52067,52068],{"class":275}," arr.",[41,52070,52071],{"class":58},"length",[41,52073,3352],{"class":275},[41,52075,2431],{"class":271},[41,52077,12580],{"class":275},[41,52079,52080,52083,52085,52087],{"class":43,"line":16742},[41,52081,52082],{"class":275},"            document.",[41,52084,52031],{"class":54},[41,52086,276],{"class":275},[41,52088,52089],{"class":378},"`\n",[41,52091,52092,52095,52097,52099,52101,52103],{"class":43,"line":16748},[41,52093,52094],{"class":378},"              \u003Cdiv style=\"height: ${",[41,52096,4018],{"class":275},[41,52098,1163],{"class":378},[41,52100,714],{"class":275},[41,52102,1213],{"class":378},[41,52104,52105],{"class":378},"}px;\">\n",[41,52107,52108,52111,52113,52115,52117,52119],{"class":43,"line":16771},[41,52109,52110],{"class":378},"                \u003Cspan>${",[41,52112,4018],{"class":275},[41,52114,1163],{"class":378},[41,52116,714],{"class":275},[41,52118,1213],{"class":378},[41,52120,52121],{"class":378},"}\u003C\u002Fspan>\n",[41,52123,52124,52127,52129,52131,52133],{"class":43,"line":16777},[41,52125,52126],{"class":378},"                \u003Ch4>第${",[41,52128,714],{"class":275},[41,52130,45669],{"class":271},[41,52132,25221],{"class":58},[41,52134,52135],{"class":378},"}季度\u003C\u002Fh4>\n",[41,52137,52138],{"class":43,"line":16800},[41,52139,52140],{"class":378},"              \u003C\u002Fdiv>          \n",[41,52142,52143,52146],{"class":43,"line":16814},[41,52144,52145],{"class":378},"            `",[41,52147,282],{"class":275},[41,52149,52150],{"class":43,"line":16834},[41,52151,2667],{"class":275},[41,52153,52154],{"class":43,"line":16840},[41,52155,52156],{"class":47},"        \u002F\u002F 盒子结尾\n",[41,52158,52159,52161,52163,52165,52168],{"class":43,"line":16851},[41,52160,52028],{"class":275},[41,52162,52031],{"class":54},[41,52164,276],{"class":275},[41,52166,52167],{"class":378},"` \u003C\u002Fdiv>`",[41,52169,282],{"class":275},[41,52171,52172,52174,52176],{"class":43,"line":16874},[41,52173,51879],{"class":275},[41,52175,51916],{"class":51403},[41,52177,51410],{"class":275},[41,52179,52180,52182,52184],{"class":43,"line":16896},[41,52181,51888],{"class":275},[41,52183,51903],{"class":51403},[41,52185,51410],{"class":275},[41,52187,52188],{"class":43,"line":16901},[41,52189,80],{"emptyLinePlaceholder":79},[41,52191,52192,52194,52196],{"class":43,"line":16907},[41,52193,51888],{"class":275},[41,52195,50738],{"class":51403},[41,52197,51410],{"class":275},[241,52199,52201],{"id":52200},"_284-冒泡排序","2.8.4 冒泡排序",[32,52203,52205],{"className":50736,"code":52204,"language":50738,"meta":37,"style":37},"\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",[24,52206,52207,52217,52231,52235,52243,52258,52278,52290,52298,52302,52310,52318,52350,52383,52420,52425,52444,52449,52462,52477,52493,52497,52502,52506,52516,52525,52533,52537],{"__ignoreMap":37},[41,52208,52209,52211,52213,52215],{"class":43,"line":44},[41,52210,51400],{"class":275},[41,52212,51404],{"class":51403},[41,52214,51407],{"class":54},[41,52216,51410],{"class":275},[41,52218,52219,52221,52223,52225,52227,52229],{"class":43,"line":51},[41,52220,1183],{"class":275},[41,52222,50738],{"class":51403},[41,52224,51419],{"class":54},[41,52226,321],{"class":275},[41,52228,51424],{"class":378},[41,52230,51410],{"class":275},[41,52232,52233],{"class":43,"line":62},[41,52234,80],{"emptyLinePlaceholder":79},[41,52236,52237,52239,52241],{"class":43,"line":70},[41,52238,1183],{"class":275},[41,52240,51437],{"class":51403},[41,52242,51410],{"class":275},[41,52244,52245,52248,52250,52252,52254,52256],{"class":43,"line":76},[41,52246,52247],{"class":275},"  \u003C",[41,52249,51447],{"class":51403},[41,52251,51450],{"class":54},[41,52253,321],{"class":275},[41,52255,51455],{"class":378},[41,52257,51410],{"class":275},[41,52259,52260,52262,52264,52266,52268,52270,52272,52274,52276],{"class":43,"line":83},[41,52261,52247],{"class":275},[41,52263,51447],{"class":51403},[41,52265,15058],{"class":54},[41,52267,321],{"class":275},[41,52269,51494],{"class":378},[41,52271,51474],{"class":54},[41,52273,321],{"class":275},[41,52275,51501],{"class":378},[41,52277,51410],{"class":275},[41,52279,52280,52282,52284,52286,52288],{"class":43,"line":89},[41,52281,52247],{"class":275},[41,52283,51510],{"class":51403},[41,52285,51513],{"class":275},[41,52287,51510],{"class":51403},[41,52289,51410],{"class":275},[41,52291,52292,52294,52296],{"class":43,"line":96},[41,52293,51888],{"class":275},[41,52295,51437],{"class":51403},[41,52297,51410],{"class":275},[41,52299,52300],{"class":43,"line":104},[41,52301,80],{"emptyLinePlaceholder":79},[41,52303,52304,52306,52308],{"class":43,"line":176},[41,52305,1183],{"class":275},[41,52307,51903],{"class":51403},[41,52309,51410],{"class":275},[41,52311,52312,52314,52316],{"class":43,"line":184},[41,52313,52247],{"class":275},[41,52315,51916],{"class":51403},[41,52317,51410],{"class":275},[41,52319,52320,52323,52325,52327,52330,52332,52334,52336,52338,52340,52342,52344,52346,52348],{"class":43,"line":1757},[41,52321,52322],{"class":271},"    let",[41,52324,51936],{"class":275},[41,52326,321],{"class":271},[41,52328,52329],{"class":275}," [",[41,52331,592],{"class":58},[41,52333,12573],{"class":275},[41,52335,566],{"class":58},[41,52337,12573],{"class":275},[41,52339,345],{"class":58},[41,52341,12573],{"class":275},[41,52343,351],{"class":58},[41,52345,12573],{"class":275},[41,52347,26],{"class":58},[41,52349,33349],{"class":275},[41,52351,52352,52354,52356,52358,52360,52362,52364,52366,52368,52370,52372,52375,52377,52379,52381],{"class":43,"line":1763},[41,52353,3339],{"class":271},[41,52355,1798],{"class":275},[41,52357,51950],{"class":271},[41,52359,9576],{"class":275},[41,52361,321],{"class":271},[41,52363,4231],{"class":58},[41,52365,9583],{"class":275},[41,52367,1183],{"class":271},[41,52369,52068],{"class":275},[41,52371,52071],{"class":58},[41,52373,52374],{"class":271}," -",[41,52376,25221],{"class":58},[41,52378,3352],{"class":275},[41,52380,2431],{"class":271},[41,52382,12580],{"class":275},[41,52384,52385,52388,52390,52392,52394,52396,52398,52400,52402,52404,52406,52408,52410,52412,52414,52416,52418],{"class":43,"line":1768},[41,52386,52387],{"class":271},"      for",[41,52389,1798],{"class":275},[41,52391,51950],{"class":271},[41,52393,9638],{"class":275},[41,52395,321],{"class":271},[41,52397,4231],{"class":58},[41,52399,9645],{"class":275},[41,52401,1183],{"class":271},[41,52403,52068],{"class":275},[41,52405,52071],{"class":58},[41,52407,52374],{"class":271},[41,52409,9576],{"class":275},[41,52411,805],{"class":271},[41,52413,25221],{"class":58},[41,52415,9652],{"class":275},[41,52417,2431],{"class":271},[41,52419,12580],{"class":275},[41,52421,52422],{"class":43,"line":1782},[41,52423,52424],{"class":47},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[41,52426,52427,52429,52432,52434,52437,52439,52441],{"class":43,"line":1787},[41,52428,2635],{"class":271},[41,52430,52431],{"class":275}," (arr[j] ",[41,52433,1233],{"class":271},[41,52435,52436],{"class":275}," arr[j ",[41,52438,754],{"class":271},[41,52440,25221],{"class":58},[41,52442,52443],{"class":275},"]) {\n",[41,52445,52446],{"class":43,"line":1793},[41,52447,52448],{"class":47},"          \u002F\u002F 交换两个变量\n",[41,52450,52451,52454,52457,52459],{"class":43,"line":1814},[41,52452,52453],{"class":271},"          let",[41,52455,52456],{"class":275}," tmp ",[41,52458,321],{"class":271},[41,52460,52461],{"class":275}," arr[j]\n",[41,52463,52464,52467,52469,52471,52473,52475],{"class":43,"line":1819},[41,52465,52466],{"class":275},"          arr[j] ",[41,52468,321],{"class":271},[41,52470,52436],{"class":275},[41,52472,754],{"class":271},[41,52474,25221],{"class":58},[41,52476,33349],{"class":275},[41,52478,52479,52482,52484,52486,52488,52490],{"class":43,"line":1833},[41,52480,52481],{"class":275},"          arr[j ",[41,52483,754],{"class":271},[41,52485,25221],{"class":58},[41,52487,4581],{"class":275},[41,52489,321],{"class":271},[41,52491,52492],{"class":275}," tmp\n",[41,52494,52495],{"class":43,"line":1838},[41,52496,2667],{"class":275},[41,52498,52499],{"class":43,"line":1867},[41,52500,52501],{"class":275},"      }\n",[41,52503,52504],{"class":43,"line":1872},[41,52505,2326],{"class":275},[41,52507,52508,52511,52513],{"class":43,"line":1889},[41,52509,52510],{"class":275},"    document.",[41,52512,52031],{"class":54},[41,52514,52515],{"class":275},"(arr)\n",[41,52517,52518,52521,52523],{"class":43,"line":1894},[41,52519,52520],{"class":275},"  \u003C\u002F",[41,52522,51916],{"class":51403},[41,52524,51410],{"class":275},[41,52526,52527,52529,52531],{"class":43,"line":1899},[41,52528,51888],{"class":275},[41,52530,51903],{"class":51403},[41,52532,51410],{"class":275},[41,52534,52535],{"class":43,"line":1904},[41,52536,80],{"emptyLinePlaceholder":79},[41,52538,52539,52541,52543],{"class":43,"line":1918},[41,52540,51888],{"class":275},[41,52542,50738],{"class":51403},[41,52544,51410],{"class":275},[20,52546,52547],{},[1603,52548],{"alt":37,"src":52549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[20,52551,52552],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[20,52554,52555],{},"let arr = [4, 2, 5, 1, 3]",[20,52557,52558],{},"\u002F\u002F 1.升序排列写法",[20,52560,52561],{},"arr.sort(function (a, b) {",[20,52563,52564],{},"return a - b",[20,52566,52567],{},"})",[20,52569,52570],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[20,52572,52573],{},"\u002F\u002F 降序排列写法",[20,52575,52561],{},[20,52577,52578],{},"return b - a",[20,52580,52567],{},[20,52582,52583],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[15,52585,52587],{"id":52586},"_29-函数","2.9 函数",[20,52589,52590],{},[1603,52591],{"alt":37,"src":52592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[20,52594,52595],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[20,52597,52598],{},"函数的声明用function",[20,52600,52601],{},"函数里边可以嵌套函数",[241,52603,52605],{"id":52604},"_291-函数传参","2.9.1 函数传参",[20,52607,52608],{},[1603,52609],{"alt":37,"src":52610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[20,52612,52613],{},[1603,52614],{"alt":37,"src":52615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1280,52617,52618,52621,52624,52627,52630,52633],{},[227,52619,52620],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[227,52622,52623],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[227,52625,52626],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[227,52628,52629],{},"开发中尽量保持形参和实参个数一致",[227,52631,52632],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[227,52634,52635],{},"形参只在函数中有用，所以不需要进行声明这个变量",[20,52637,52638],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[241,52640,52642],{"id":52641},"_292-函数的返回值","2.9.2 函数的返回值",[20,52644,52645],{},[1603,52646],{"alt":37,"src":52647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[20,52649,52650],{},[1603,52651],{"alt":37,"src":52652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1280,52654,52655,52658,52661,52664,52667],{},[227,52656,52657],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[227,52659,52660],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[227,52662,52663],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[227,52665,52666],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[227,52668,52669],{},"断点调试:进入函数内部看执行过程F11",[241,52671,52673],{"id":52672},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[32,52675,52677],{"className":50736,"code":52676,"language":50738,"meta":37,"style":37},"    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",[24,52678,52679,52684,52689,52693,52698],{"__ignoreMap":37},[41,52680,52681],{"class":43,"line":44},[41,52682,52683],{"class":275},"    function fn(a, b) {\n",[41,52685,52686],{"class":43,"line":51},[41,52687,52688],{"class":275},"      console.log(a + b);\n",[41,52690,52691],{"class":43,"line":62},[41,52692,2326],{"class":275},[41,52694,52695],{"class":43,"line":70},[41,52696,52697],{"class":275},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[41,52699,52700],{"class":43,"line":76},[41,52701,52702],{"class":275},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[241,52704,52706],{"id":52705},"_294-作用域","2.9.4 作用域",[1280,52708,52709,52715,52720,52723,52726],{},[227,52710,52711,52712],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[423,52713,52714],{},"作用域",[227,52716,52717],{},[423,52718,52719],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[227,52721,52722],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[227,52724,52725],{},"函数内部可以直接所使用全局变量",[227,52727,52728],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[20,52730,14771],{},[32,52732,52734],{"className":50736,"code":52733,"language":50738,"meta":37,"style":37},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[24,52735,52736,52741,52746,52750,52755,52760,52765],{"__ignoreMap":37},[41,52737,52738],{"class":43,"line":44},[41,52739,52740],{"class":275},"    function fun() {\n",[41,52742,52743],{"class":43,"line":51},[41,52744,52745],{"class":275},"      num = 10\n",[41,52747,52748],{"class":43,"line":62},[41,52749,2326],{"class":275},[41,52751,52752],{"class":43,"line":70},[41,52753,52754],{"class":275},"    fun()\n",[41,52756,52757],{"class":43,"line":76},[41,52758,52759],{"class":275},"    console.log(num)\n",[41,52761,52762],{"class":43,"line":83},[41,52763,52764],{"class":275},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[41,52766,52767],{"class":43,"line":89},[41,52768,52769],{"class":275},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1280,52771,52772,52775],{},[227,52773,52774],{},"函数内部的形参可以看做是局部变量",[227,52776,52777],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[20,52779,52780,52781],{},"变量访问原则： ",[423,52782,52783],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[241,52785,52787],{"id":52786},"_295-匿名函数","2.9.5 匿名函数",[20,52789,52790],{},"函数可以分为具名函数和匿名函数",[20,52792,52793],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[224,52795,52796],{},[227,52797,52798],{},"函数表达式",[20,52800,52801],{},[1603,52802],{"alt":37,"src":52803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[20,52805,52806],{},"里边也可以写参数",[20,52808,52809],{},"具名函数调用位置可以随意调整；",[20,52811,52812],{},"匿名函数函数表达式形式只能在声明后才可以使用",[224,52814,52815],{"start":51},[227,52816,52817],{},"立即执行函数",[20,52819,52820],{},[1603,52821],{"alt":37,"src":52822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[20,52824,52825],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[20,52827,52828],{},"写法：两个小括号，然后在第一个小括号中写function",[20,52830,52831],{},"(function () {})();",[20,52833,52834],{},"不要落下最后的;",[20,52836,52837],{},"立即执行函数必须要加;",[20,52839,52840],{},"分号写前写后都没问题",[20,52842,52843],{},"写前：",[20,52845,52846],{},"(function() {})()",[20,52848,52849],{},";(function () {})();",[20,52851,52852],{},"写后:",[20,52854,52855],{},"(function() {})();",[20,52857,52831],{},[20,52859,52860],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[20,52862,52863],{},"还有一种写法：",[20,52865,52866],{},"(function(){}());",[20,52868,52869],{},"或者:",[20,52871,52872],{},"!function(){}();",[20,52874,52875],{},"立即执行函数有时候也是可以加名字的：",[20,52877,52878],{},"(function flexible(window,document) {}(window,document));",[20,52880,52881],{},"省一些调用方法",[241,52883,52885],{"id":52884},"_296-逻辑中断","2.9.6 逻辑中断!!!",[20,52887,52888],{},[1603,52889],{"alt":37,"src":52890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[20,52892,52893],{},"这样就不用非得给x,y初始化了",[20,52895,52896],{},[1603,52897],{"alt":37,"src":52898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[20,52900,52901],{},"代码执行时先看左边",[20,52903,52904],{},"例如：console.log(false && 3+5)",[20,52906,52907],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[20,52909,52910],{},"&&都是真时，就返回最后一个真值",[20,52912,52913],{},"console.log(11 && 22)",[20,52915,52916],{},"输出22",[20,52918,52919],{},"逻辑与：遇真则真",[20,52921,14771],{},[20,52923,52924],{},"let age=1",[20,52926,52927],{},"console.log(11 || age++)",[20,52929,52930],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[20,52932,52933],{},"console.log(11 || 22)",[20,52935,52936],{},"||逻辑或遇到真就直接输出，输出结果为11",[20,52938,52939],{},"||如果都是假的话，就取最后一个假的值了",[241,52941,52943],{"id":52942},"_297-转换为boolean型","2.9.7 转换为Boolean型",[20,52945,52946],{},"显示转换：",[20,52948,52949,52952,52953],{},[423,52950,52951],{},"记忆","： ",[423,52954,52955],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[20,52957,52958],{},"空字符串为假，其他字符串全为真",[20,52960,52961],{},[1603,52962],{"alt":37,"src":52963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[20,52965,52966],{},"隐式转换：",[20,52968,52969],{},[1603,52970],{"alt":37,"src":52971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[20,52973,52974],{},"隐式转换:",[20,52976,52977],{},"null+3=3",[20,52979,52980],{},"undefined+3=NaN",[20,52982,52983],{},"null==undefined 输出true,他两个都当0看",[20,52985,52986],{},"null===undefined 输出false",[20,52988,52989],{},"undefined做任何操作都是NaN",[20,52991,52992],{},"NaN不等于NaN，NaN表示计算错误",[15,52994,52996],{"id":52995},"_210-对象","2.10 对象",[241,52998,53000],{"id":52999},"_2101-对象的介绍","2.10.1 对象的介绍",[20,53002,53003],{},"对象也是一种数据类型，里边的数据是无序的",[20,53005,53006],{},"对象由属性和方法组成",[20,53008,53009],{},[1603,53010],{"alt":37,"src":53011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[20,53013,53014],{},[1603,53015],{"alt":37,"src":53016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[20,53018,53019],{},[1603,53020],{"alt":37,"src":53021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[241,53023,53025],{"id":53024},"_2102-对象属性","2.10.2 对象属性",[20,53027,53028],{},[1603,53029],{"alt":37,"src":53030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[224,53032,53033],{},[227,53034,53035],{},"查询对象",[20,53037,53038],{},"对象名.属性 goods.uname",[20,53040,53041],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[20,53043,53044],{},"不带字符串的属性名也可以使用 对象名['属性名']",[20,53046,53047],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[20,53049,53050],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[224,53052,53053],{"start":51},[227,53054,53055],{},"重新赋值",[20,53057,53058],{},"对象名.属性=新值",[224,53060,53061],{"start":62},[227,53062,53063],{},"增加新数据",[20,53065,53058],{},[224,53067,53068],{"start":70},[227,53069,53070],{},"删除对象中的属性",[20,53072,53073],{},"delete 对象名.属性",[241,53075,53077],{"id":53076},"_2103-对象方法","2.10.3 对象方法",[20,53079,53080],{},[1603,53081],{"alt":37,"src":53082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[20,53084,53085],{},"后边跟的是匿名函数",[20,53087,53088],{},"对象外面的叫函数；对象内部的叫方法",[20,53090,53091],{},[1603,53092],{"alt":37,"src":53093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[241,53095,53097],{"id":53096},"_2104-遍历对象","2.10.4 遍历对象",[20,53099,53100],{},"理解为加括号的python字典遍历",[20,53102,53103],{},[1603,53104],{"alt":37,"src":53105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[20,53107,53108],{},"k是字符串类型",[20,53110,53111],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[32,53113,53115],{"className":50736,"code":53114,"language":50738,"meta":37,"style":37},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[24,53116,53117,53122,53127,53132,53137],{"__ignoreMap":37},[41,53118,53119],{"class":43,"line":44},[41,53120,53121],{"class":275},"   let arr = [1, 2, 3]\n",[41,53123,53124],{"class":43,"line":51},[41,53125,53126],{"class":275},"    for (let k in arr) {\n",[41,53128,53129],{"class":43,"line":62},[41,53130,53131],{"class":275},"      console.log(k)\n",[41,53133,53134],{"class":43,"line":70},[41,53135,53136],{"class":275},"      console.log(arr[k])\n",[41,53138,53139],{"class":43,"line":76},[41,53140,2326],{"class":275},[20,53142,53143],{},[1603,53144],{"alt":37,"src":53145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[20,53147,53148],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[20,53150,53151],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[20,53153,53154],{},"for in 得到的k是属性名",[51916,53156,53157],{},"\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",[20,53159,53160],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[241,53162,53164],{"id":53163},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[20,53166,53167],{},"数组中放对象信息",[32,53169,53173],{"className":53170,"code":53171,"language":53172,"meta":37,"style":37},"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",[24,53174,53175,53183,53188,53193,53198,53203,53208,53213,53218,53223,53228,53233,53238,53242,53246],{"__ignoreMap":37},[41,53176,53177,53179,53181],{"class":43,"line":44},[41,53178,1183],{"class":275},[41,53180,51916],{"class":51403},[41,53182,51410],{"class":275},[41,53184,53185],{"class":43,"line":51},[41,53186,53187],{"class":275},"    let students = [\n",[41,53189,53190],{"class":43,"line":62},[41,53191,53192],{"class":275},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[41,53194,53195],{"class":43,"line":70},[41,53196,53197],{"class":275},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[41,53199,53200],{"class":43,"line":76},[41,53201,53202],{"class":275},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[41,53204,53205],{"class":43,"line":83},[41,53206,53207],{"class":275},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[41,53209,53210],{"class":43,"line":89},[41,53211,53212],{"class":275},"    ]\n",[41,53214,53215],{"class":43,"line":96},[41,53216,53217],{"class":275},"    for (let i = 0; i \u003C students.length; i++) {\n",[41,53219,53220],{"class":43,"line":104},[41,53221,53222],{"class":275},"      for (let k in students[i]) {\n",[41,53224,53225],{"class":43,"line":176},[41,53226,53227],{"class":275},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[41,53229,53230],{"class":43,"line":184},[41,53231,53232],{"class":275},"        \u002F\u002F输出每个人的名字：\n",[41,53234,53235],{"class":43,"line":1757},[41,53236,53237],{"class":275},"        \u002F\u002Fconsole.log(students[i].name)\n",[41,53239,53240],{"class":43,"line":1763},[41,53241,52501],{"class":275},[41,53243,53244],{"class":43,"line":1768},[41,53245,2326],{"class":275},[41,53247,53248,53250,53252],{"class":43,"line":1782},[41,53249,52520],{"class":275},[41,53251,51916],{"class":51403},[41,53253,51410],{"class":275},[241,53255,53257],{"id":53256},"_2106-内置对象","2.10.6 内置对象",[20,53259,53260],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[224,53262,53263],{},[227,53264,53265],{},"数学对象Math",[20,53267,53268],{},[1603,53269],{"alt":37,"src":53270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[20,53272,53273],{},[511,53274,53277],{"href":53275,"rel":53276},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24001],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[20,53279,53280],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[20,53282,53283],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[20,53285,53286],{},"数组不可以使用Math中的max,min来求最大值与最小值",[20,53288,53289],{},"null是一个空对象，可以认为：null类似于let obj={}",[20,53291,53292],{},"null属于对象数据类型",[224,53294,53295],{"start":51},[227,53296,53297],{},"生成任意范围随机数",[20,53299,53300],{},[1603,53301],{"alt":37,"src":53302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[20,53304,53305],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[20,53307,53308],{},"乘以几就取不到几",[20,53310,53311],{},"取数组中的随机元素：",[20,53313,53314],{},"let arr = ['red', 'green', 'blue']",[20,53316,53317],{},"let random = Math.floor(Math.random() * arr.length)",[20,53319,53320],{},"console.log(arr[random])",[20,53322,53323],{},"这个函数得到的是全闭区间",[20,53325,53326],{},"function getRandom(N, M) {",[20,53328,53329],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[20,53331,1219],{},[20,53333,53334],{},"console.log(getRandom(4, 8))",[241,53336,53338],{"id":53337},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[20,53340,53341],{},[1603,53342],{"alt":37,"src":53343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[20,53345,53346],{},[1603,53347],{"alt":37,"src":53348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[20,53350,53351],{},[1603,53352],{"alt":37,"src":53353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[20,53355,53356],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[20,53358,53359],{},[1603,53360],{"alt":37,"src":53361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[20,53363,53364],{},[1603,53365],{"alt":37,"src":53366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[20,53368,53369],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[20,53371,53372],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[20,53374,53375],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[189,53377,53378],{},"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":37,"searchDepth":51,"depth":51,"links":53380},[53381,53389,53390,53391,53392,53393,53400,53404,53410,53419],{"id":50571,"depth":51,"text":50572,"children":53382},[53383,53384,53385,53386,53387,53388],{"id":50575,"depth":62,"text":50576},{"id":50592,"depth":62,"text":50593},{"id":50632,"depth":62,"text":50633},{"id":50644,"depth":62,"text":50645},{"id":50653,"depth":62,"text":50654},{"id":50701,"depth":62,"text":50702},{"id":50711,"depth":51,"text":50712},{"id":50799,"depth":51,"text":50800},{"id":50822,"depth":51,"text":50823},{"id":50834,"depth":51,"text":50835},{"id":51021,"depth":51,"text":51022,"children":53394},[53395,53396,53397,53398,53399],{"id":51025,"depth":62,"text":51026},{"id":51034,"depth":62,"text":51035},{"id":51062,"depth":62,"text":51063},{"id":51098,"depth":62,"text":51099},{"id":51123,"depth":62,"text":51124},{"id":51135,"depth":51,"text":51136,"children":53401},[53402,53403],{"id":51156,"depth":62,"text":51157},{"id":51250,"depth":62,"text":51251},{"id":51308,"depth":51,"text":51309,"children":53405},[53406,53407,53408,53409],{"id":51312,"depth":62,"text":51313},{"id":51336,"depth":62,"text":51337},{"id":51389,"depth":62,"text":51390},{"id":52200,"depth":62,"text":52201},{"id":52586,"depth":51,"text":52587,"children":53411},[53412,53413,53414,53415,53416,53417,53418],{"id":52604,"depth":62,"text":52605},{"id":52641,"depth":62,"text":52642},{"id":52672,"depth":62,"text":52673},{"id":52705,"depth":62,"text":52706},{"id":52786,"depth":62,"text":52787},{"id":52884,"depth":62,"text":52885},{"id":52942,"depth":62,"text":52943},{"id":52995,"depth":51,"text":52996,"children":53420},[53421,53422,53423,53424,53425,53426,53427],{"id":52999,"depth":62,"text":53000},{"id":53024,"depth":62,"text":53025},{"id":53076,"depth":62,"text":53077},{"id":53096,"depth":62,"text":53097},{"id":53163,"depth":62,"text":53164},{"id":53256,"depth":62,"text":53257},{"id":53337,"depth":62,"text":53338},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50563,"description":196},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53434,"title":53435,"body":53436,"description":196,"extension":197,"meta":76776,"navigation":79,"path":76777,"seo":76778,"stem":76779,"__hash__":76780},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53437,"toc":76716},[53438,53441,53444,53447,53452,53455,53458,53461,53465,53469,53475,53480,53488,53495,53498,53502,53507,53512,53517,53520,53523,53534,53537,53541,53544,53547,53552,53557,53562,53565,53568,53660,53663,53668,53671,53676,53679,53682,53687,53690,53695,53699,53702,53716,53720,53725,53728,53731,53735,53740,53743,53747,53751,53756,53760,53765,53768,53771,53774,53777,53780,53783,53788,53793,53821,53824,53827,53830,53835,53838,53841,53844,53847,53851,53880,53884,53889,53894,53897,53900,53903,53908,54023,54028,54033,54194,54199,54202,54206,54211,54216,54219,54222,54225,54228,54231,54234,54237,54240,54243,54246,54249,54252,54255,54258,54260,54263,54266,54269,54274,54278,54675,54678,54684,54688,54693,55975,55980,55983,55986,55989,55994,57190,57194,57200,57205,57208,57213,57218,57222,57226,57231,57234,57239,57242,57245,57249,58157,58160,58164,58385,58388,58391,58394,58620,58623,58847,58850,58854,58859,58862,58865,59093,59096,59129,59132,59136,59141,59145,59148,59151,59154,59157,59160,59163,59166,59171,60451,60455,60458,61551,61555,61558,61561,61564,61567,61571,61574,61577,61579,61587,63068,63072,63075,63078,63081,63290,63293,63297,63301,63306,63311,63314,63317,63322,63326,63331,63334,63443,63447,63452,63457,63460,63463,63467,63472,63477,63482,63485,63488,63499,63502,63507,63512,63515,63518,63591,63595,63600,63603,63605,63616,63620,63625,64951,64954,64957,64960,64962,64965,64968,64971,64974,64977,64980,64983,64986,64989,64992,64995,64998,65000,65002,65005,65009,66103,66106,66109,66125,66139,66142,66147,66153,66158,66162,66166,66171,66175,66180,66622,66627,66630,66634,66639,66642,66645,66649,66654,66658,66663,66668,66672,66677,66682,66685,66690,66695,66699,66704,66709,66813,66816,66820,66825,67191,67194,67197,67200,67203,67206,67209,67212,67215,68511,68515,68520,68525,68528,68531,68534,68537,68539,68544,68549,68552,68556,68561,68566,68571,68574,68577,68580,68583,68586,68591,68594,68598,68603,68608,68612,68617,68620,68625,68628,68631,68634,68637,68640,68645,68648,68651,68654,68657,68661,68666,68669,68673,68678,68681,68684,68688,68717,68720,68724,68728,68733,68737,68742,68745,68748,68751,68754,68757,68760,68763,68766,68769,68772,68775,68778,68781,68784,68788,68793,68798,68801,68805,68809,68814,68817,68821,68824,68827,68832,68837,68842,68847,68852,68855,68858,68863,68868,68872,68877,68880,68885,68888,68891,68894,68897,68902,68905,68914,68918,68923,68926,68929,68933,68936,68941,68945,68948,68954,68960,68964,68990,68993,70554,70557,71053,71056,71061,71066,71071,71075,71080,71085,71090,71094,71099,71102,71105,71108,71111,71115,71118,71123,71126,71131,71135,71140,71143,71148,71153,71158,71161,71164,71169,71174,71177,71180,71184,71187,71192,71195,71200,71203,71208,71213,71218,71221,71226,71291,71294,71305,71309,71314,71486,71490,71495,71498,71501,71504,71508,71519,71523,71526,71531,71536,71539,71542,71545,71548,71551,71553,71556,71559,71562,71567,71570,71575,71578,71582,71585,71588,71602,71606,71609,71664,71669,71672,71675,71680,71683,71687,71692,71822,71826,71831,71836,71917,71922,71926,71929,71934,71939,71945,71948,71951,71954,71958,71963,71966,71977,71981,71998,75045,75049,75052,75055,75058,75079,75083,75086,75094,75097,75102,75105,75108,75113,75118,75122,75143,75147,75152,75155,75158,75161,75164,75168,75173,75176,75180,75185,75188,75193,75196,75201,75204,75209,76412,76416,76421,76424,76429,76713],[10,53439,53435],{"id":53440},"_3web-apis",[20,53442,53443],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[20,53445,53446],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[20,53448,53449],{},[1603,53450],{"alt":37,"src":53451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[20,53453,53454],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[20,53456,53457],{},"建议数组和对象使用 const 来声明",[20,53459,53460],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[15,53462,53464],{"id":53463},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[241,53466,53468],{"id":53467},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[20,53470,53471,53474],{},[24,53472,53473],{},"document"," = HTML 文件解析后的对象化表示；",[20,53476,53477,53479],{},[24,53478,53473],{}," ≠ HTML 文件本身",[20,53481,53482,53487],{},[423,53483,53484],{},[24,53485,53486],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[20,53489,53490,53494],{},[423,53491,53492],{},[24,53493,53473],{}," ：容器里的内容，代表当前加载的网页（DOM）",[20,53496,53497],{},"document实际上为window.document的简写",[241,53499,53501],{"id":53500},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[20,53503,53504],{},[1603,53505],{"alt":37,"src":53506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[20,53508,53509],{},[1603,53510],{"alt":37,"src":53511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[20,53513,53514],{},[1603,53515],{"alt":37,"src":53516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[20,53518,53519],{},"console.dir()",[20,53521,53522],{},"dir用来打印对象",[1280,53524,53525,53528,53531],{},[227,53526,53527],{},"任何一个标签，都是一个对象",[227,53529,53530],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[227,53532,53533],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[20,53535,53536],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[241,53538,53540],{"id":53539},"_312-获取dom对象","3.1.2 获取DoM对象",[20,53542,53543],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[20,53545,53546],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[20,53548,53549],{},[423,53550,53551],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[224,53553,53554],{},[227,53555,53556],{},"利用CSS选择器来获取标签元素",[20,53558,53559],{},[1603,53560],{"alt":37,"src":53561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[20,53563,53564],{},"里边的选择器必须必须加引号！！！",[20,53566,53567],{},"只选择第一个元素",[32,53569,53571],{"className":53170,"code":53570,"language":53172,"meta":37,"style":37},"\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",[24,53572,53573,53581,53602,53621,53629,53634,53639,53644,53652],{"__ignoreMap":37},[41,53574,53575,53577,53579],{"class":43,"line":44},[41,53576,1183],{"class":275},[41,53578,51903],{"class":51403},[41,53580,51410],{"class":275},[41,53582,53583,53585,53587,53590,53592,53595,53598,53600],{"class":43,"line":51},[41,53584,52247],{"class":275},[41,53586,51714],{"class":51403},[41,53588,53589],{"class":54}," class",[41,53591,321],{"class":275},[41,53593,53594],{"class":378},"\"box\"",[41,53596,53597],{"class":275},">123\u003C\u002F",[41,53599,51714],{"class":51403},[41,53601,51410],{"class":275},[41,53603,53604,53606,53608,53610,53612,53614,53617,53619],{"class":43,"line":62},[41,53605,52247],{"class":275},[41,53607,51714],{"class":51403},[41,53609,53589],{"class":54},[41,53611,321],{"class":275},[41,53613,53594],{"class":378},[41,53615,53616],{"class":275},">456\u003C\u002F",[41,53618,51714],{"class":51403},[41,53620,51410],{"class":275},[41,53622,53623,53625,53627],{"class":43,"line":70},[41,53624,52247],{"class":275},[41,53626,51916],{"class":51403},[41,53628,51410],{"class":275},[41,53630,53631],{"class":43,"line":76},[41,53632,53633],{"class":275},"    \u002F\u002F 1.获取匹配的第一个元素\n",[41,53635,53636],{"class":43,"line":83},[41,53637,53638],{"class":275},"    const box = document.querySelector('div')\n",[41,53640,53641],{"class":43,"line":89},[41,53642,53643],{"class":275},"    console.dir(box)\n",[41,53645,53646,53648,53650],{"class":43,"line":96},[41,53647,52520],{"class":275},[41,53649,51916],{"class":51403},[41,53651,51410],{"class":275},[41,53653,53654,53656,53658],{"class":43,"line":104},[41,53655,51888],{"class":275},[41,53657,51903],{"class":51403},[41,53659,51410],{"class":275},[20,53661,53662],{},"只选123，不选456",[20,53664,53665],{},[1603,53666],{"alt":37,"src":53667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[20,53669,53670],{},"返回的是一个数组的集合，不能对其进行直接修改",[20,53672,53673],{},[1603,53674],{"alt":37,"src":53675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[20,53677,53678],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[20,53680,53681],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[224,53683,53684],{"start":51},[227,53685,53686],{},"其他方法来获取标签元素",[20,53688,53689],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[20,53691,53692],{},[1603,53693],{"alt":37,"src":53694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[241,53696,53698],{"id":53697},"_313-操作元素的内容","3.1.3 操作元素的内容",[20,53700,53701],{},"设置修改DOM元素内容有两种方式：",[1280,53703,53704,53707,53710,53713],{},[227,53705,53706],{},"元素.innerText=''",[227,53708,53709],{},"元素.innerHTML=''",[227,53711,53712],{},"不写字符串输出数字也是可以的",[227,53714,53715],{},"元素.innerHtml=1",[22136,53717,53719],{"id":53718},"_3131-innertext","3.1.3.1 innerText",[20,53721,53722],{},[1603,53723],{"alt":37,"src":53724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[20,53726,53727],{},"思路：实现了修改盒子中的内容！",[20,53729,53730],{},"它只显示纯文本，不解析标签",[22136,53732,53734],{"id":53733},"_3132-innerhtml","3.1.3.2 innerHTML",[20,53736,53737],{},[1603,53738],{"alt":37,"src":53739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[20,53741,53742],{},"相比于innerText，他的强大之处在于可以解析标签",[241,53744,53746],{"id":53745},"_314-操作元素属性","3.1.4 操作元素属性",[22136,53748,53750],{"id":53749},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[20,53752,53753],{},[1603,53754],{"alt":37,"src":53755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22136,53757,53759],{"id":53758},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[20,53761,53762],{},[1603,53763],{"alt":37,"src":53764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[20,53766,53767],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[20,53769,53770],{},"div.style.backgroundColor = 'hotpink'",[20,53772,53773],{},"如果按照css的写法，-表示减，就会出错",[20,53775,53776],{},"body元素不需要再获取，直接用就行！！！！！！",[20,53778,53779],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[20,53781,53782],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[20,53784,53785],{},[1603,53786],{"alt":37,"src":53787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[20,53789,53790],{},[1603,53791],{"alt":37,"src":53792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[224,53794,53795,53798,53801,53804,53807,53810],{},[227,53796,53797],{},"className这个方式就是修改很多样式的时候来使用的！",[227,53799,53800],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[227,53802,53803],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[227,53805,53806],{},"className为属性名，如果还用class的话就导致与关键字冲突",[227,53808,53809],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[227,53811,53812,53813,53818],{},"解析标签的时候就变为了",[51714,53814],{"className":53815},[53816,53817],"nav","box",[53819,53820],"br",{},[20,53822,53823],{},"例子：",[51714,53825],{"className":53826},[53816],[51916,53828,53829],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[20,53831,53832],{},[1603,53833],{"alt":37,"src":53834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[20,53836,53837],{},"追加和删除类名用classList",[20,53839,53840],{},"常用于类似于开关的操作",[20,53842,53843],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[20,53845,53846],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22136,53848,53850],{"id":53849},"_3143-牢记点","3.1.4.3 牢记点",[224,53852,53853,53856,53859,53862,53865,53868,53871,53874,53877],{},[227,53854,53855],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[227,53857,53858],{},"使用style属性操作css时不要忘记引号",[227,53860,53861],{},"使用className或者classList时也不要忘记引号",[227,53863,53864],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[227,53866,53867],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[227,53869,53870],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[227,53872,53873],{},"若： let arr=['1','2',3] arr[0]=1",[227,53875,53876],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[227,53878,53879],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[241,53881,53883],{"id":53882},"_315-操作表单元素","3.1.5 操作表单元素",[224,53885,53886],{},[227,53887,53888],{},"天生的属性",[20,53890,53891],{},[1603,53892],{"alt":37,"src":53893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[20,53895,53896],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[20,53898,53899],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[20,53901,53902],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[20,53904,53905],{},[1603,53906],{"alt":37,"src":53907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[32,53909,53911],{"className":50736,"code":53910,"language":50738,"meta":37,"style":37},"在复选框中如果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",[24,53912,53913,53918,53950,53955,53960,53965,53970,53974,53979,53984,54001,54013,54018],{"__ignoreMap":37},[41,53914,53915],{"class":43,"line":44},[41,53916,53917],{"class":275},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[41,53919,53920,53922,53925,53928,53930,53933,53935,53937,53939,53941,53943,53945,53948],{"class":43,"line":51},[41,53921,1183],{"class":275},[41,53923,53924],{"class":51403},"input",[41,53926,53927],{"class":54}," type",[41,53929,321],{"class":275},[41,53931,53932],{"class":378},"\"checkbox\"",[41,53934,15058],{"class":54},[41,53936,321],{"class":275},[41,53938,7790],{"class":378},[41,53940,15097],{"class":54},[41,53942,321],{"class":275},[41,53944,7790],{"class":378},[41,53946,53947],{"class":54}," checked",[41,53949,51410],{"class":275},[41,53951,53952],{"class":43,"line":62},[41,53953,53954],{"class":275},"不选的话：\n",[41,53956,53957],{"class":43,"line":70},[41,53958,53959],{"class":275},"const input = document.querySelector('input')\n",[41,53961,53962],{"class":43,"line":76},[41,53963,53964],{"class":275},"input.checked=false\n",[41,53966,53967],{"class":43,"line":83},[41,53968,53969],{"class":275},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[41,53971,53972],{"class":43,"line":89},[41,53973,80],{"emptyLinePlaceholder":79},[41,53975,53976],{"class":43,"line":96},[41,53977,53978],{"class":275},"禁用按钮：\n",[41,53980,53981],{"class":43,"line":104},[41,53982,53983],{"class":275},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[41,53985,53986,53988,53991,53994,53997,53999],{"class":43,"line":176},[41,53987,1183],{"class":275},[41,53989,53990],{"class":51403},"button",[41,53992,53993],{"class":54}," disabled",[41,53995,53996],{"class":275},">点击\u003C\u002F",[41,53998,53990],{"class":51403},[41,54000,51410],{"class":275},[41,54002,54003,54005,54007,54009,54011],{"class":43,"line":184},[41,54004,1183],{"class":275},[41,54006,53990],{"class":51403},[41,54008,53996],{"class":275},[41,54010,53990],{"class":51403},[41,54012,51410],{"class":275},[41,54014,54015],{"class":43,"line":1757},[41,54016,54017],{"class":275},"const bt = document.querySelector('button')\n",[41,54019,54020],{"class":43,"line":1763},[41,54021,54022],{"class":275},"bt.disabled = false\n",[224,54024,54025],{"start":51},[227,54026,54027],{},"自定义属性",[20,54029,54030],{},[1603,54031],{"alt":37,"src":54032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[32,54034,54036],{"className":53170,"code":54035,"language":53172,"meta":37,"style":37},"\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",[24,54037,54038,54046,54074,54093,54112,54131,54150,54158,54163,54168,54173,54178,54186],{"__ignoreMap":37},[41,54039,54040,54042,54044],{"class":43,"line":44},[41,54041,1183],{"class":275},[41,54043,51903],{"class":51403},[41,54045,51410],{"class":275},[41,54047,54048,54050,54052,54055,54057,54059,54062,54064,54067,54070,54072],{"class":43,"line":51},[41,54049,52247],{"class":275},[41,54051,51714],{"class":51403},[41,54053,54054],{"class":54}," data-id",[41,54056,321],{"class":275},[41,54058,3816],{"class":378},[41,54060,54061],{"class":54}," data-spm",[41,54063,321],{"class":275},[41,54065,54066],{"class":378},"\"我不知道\"",[41,54068,54069],{"class":275},">1\u003C\u002F",[41,54071,51714],{"class":51403},[41,54073,51410],{"class":275},[41,54075,54076,54078,54080,54082,54084,54086,54089,54091],{"class":43,"line":62},[41,54077,52247],{"class":275},[41,54079,51714],{"class":51403},[41,54081,54054],{"class":54},[41,54083,321],{"class":275},[41,54085,3839],{"class":378},[41,54087,54088],{"class":275},">2\u003C\u002F",[41,54090,51714],{"class":51403},[41,54092,51410],{"class":275},[41,54094,54095,54097,54099,54101,54103,54105,54108,54110],{"class":43,"line":70},[41,54096,52247],{"class":275},[41,54098,51714],{"class":51403},[41,54100,54054],{"class":54},[41,54102,321],{"class":275},[41,54104,3852],{"class":378},[41,54106,54107],{"class":275},">3\u003C\u002F",[41,54109,51714],{"class":51403},[41,54111,51410],{"class":275},[41,54113,54114,54116,54118,54120,54122,54124,54127,54129],{"class":43,"line":76},[41,54115,52247],{"class":275},[41,54117,51714],{"class":51403},[41,54119,54054],{"class":54},[41,54121,321],{"class":275},[41,54123,3865],{"class":378},[41,54125,54126],{"class":275},">4\u003C\u002F",[41,54128,51714],{"class":51403},[41,54130,51410],{"class":275},[41,54132,54133,54135,54137,54139,54141,54143,54146,54148],{"class":43,"line":83},[41,54134,52247],{"class":275},[41,54136,51714],{"class":51403},[41,54138,54054],{"class":54},[41,54140,321],{"class":275},[41,54142,3886],{"class":378},[41,54144,54145],{"class":275},">5\u003C\u002F",[41,54147,51714],{"class":51403},[41,54149,51410],{"class":275},[41,54151,54152,54154,54156],{"class":43,"line":89},[41,54153,52247],{"class":275},[41,54155,51916],{"class":51403},[41,54157,51410],{"class":275},[41,54159,54160],{"class":43,"line":96},[41,54161,54162],{"class":275},"    const one = document.querySelector('div')\n",[41,54164,54165],{"class":43,"line":104},[41,54166,54167],{"class":275},"    console.log(one.dataset)\n",[41,54169,54170],{"class":43,"line":176},[41,54171,54172],{"class":275},"    console.log(one.dataset.id)\n",[41,54174,54175],{"class":43,"line":184},[41,54176,54177],{"class":275},"    console.log(one.dataset.spm)\n",[41,54179,54180,54182,54184],{"class":43,"line":1757},[41,54181,52520],{"class":275},[41,54183,51916],{"class":51403},[41,54185,51410],{"class":275},[41,54187,54188,54190,54192],{"class":43,"line":1763},[41,54189,51888],{"class":275},[41,54191,51903],{"class":51403},[41,54193,51410],{"class":275},[20,54195,54196],{},[1603,54197],{"alt":37,"src":54198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[20,54200,54201],{},"document.querySelector选择的是第一个对象（元素）",[241,54203,54205],{"id":54204},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[20,54207,54208],{},[1603,54209],{"alt":37,"src":54210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[20,54212,54213],{},[1603,54214],{"alt":37,"src":54215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[20,54217,54218],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51916,54220,54221],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[20,54223,54224],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51916,54226,54227],{},"\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",[20,54229,54230],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[20,54232,54233],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[20,54235,54236],{},"单位为毫秒！！！",[20,54238,54239],{},"可以搭配匿名函数来用！！！",[20,54241,54242],{},"setInterval(function () {",[20,54244,54245],{},"alert('两秒执行一次')",[20,54247,54248],{},"}, 2000)",[20,54250,54251],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[20,54253,54254],{},"function fn() {",[20,54256,54257],{},"document.write(1)",[20,54259,1219],{},[20,54261,54262],{},"setInterval(fn, 1000)",[20,54264,54265],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[20,54267,54268],{},"setInterval('fn()', 1000)",[20,54270,54271],{},[1603,54272],{"alt":37,"src":54273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22136,54275,54277],{"id":54276},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[32,54279,54281],{"className":50736,"code":54280,"language":50738,"meta":37,"style":37},"\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",[24,54282,54283,54293,54307,54311,54319,54333,54353,54365,54373,54377,54385,54422,54427,54432,54437,54445,54453,54475,54483,54488,54510,54515,54520,54531,54536,54556,54564,54579,54594,54605,54610,54620,54630,54634,54643,54647,54655,54663,54667],{"__ignoreMap":37},[41,54284,54285,54287,54289,54291],{"class":43,"line":44},[41,54286,51400],{"class":275},[41,54288,51404],{"class":51403},[41,54290,51407],{"class":54},[41,54292,51410],{"class":275},[41,54294,54295,54297,54299,54301,54303,54305],{"class":43,"line":51},[41,54296,1183],{"class":275},[41,54298,50738],{"class":51403},[41,54300,51419],{"class":54},[41,54302,321],{"class":275},[41,54304,51424],{"class":378},[41,54306,51410],{"class":275},[41,54308,54309],{"class":43,"line":62},[41,54310,80],{"emptyLinePlaceholder":79},[41,54312,54313,54315,54317],{"class":43,"line":70},[41,54314,1183],{"class":275},[41,54316,51437],{"class":51403},[41,54318,51410],{"class":275},[41,54320,54321,54323,54325,54327,54329,54331],{"class":43,"line":76},[41,54322,52247],{"class":275},[41,54324,51447],{"class":51403},[41,54326,51450],{"class":54},[41,54328,321],{"class":275},[41,54330,51455],{"class":378},[41,54332,51410],{"class":275},[41,54334,54335,54337,54339,54341,54343,54345,54347,54349,54351],{"class":43,"line":83},[41,54336,52247],{"class":275},[41,54338,51447],{"class":51403},[41,54340,15058],{"class":54},[41,54342,321],{"class":275},[41,54344,51494],{"class":378},[41,54346,51474],{"class":54},[41,54348,321],{"class":275},[41,54350,51501],{"class":378},[41,54352,51410],{"class":275},[41,54354,54355,54357,54359,54361,54363],{"class":43,"line":89},[41,54356,52247],{"class":275},[41,54358,51510],{"class":51403},[41,54360,51513],{"class":275},[41,54362,51510],{"class":51403},[41,54364,51410],{"class":275},[41,54366,54367,54369,54371],{"class":43,"line":96},[41,54368,51888],{"class":275},[41,54370,51437],{"class":51403},[41,54372,51410],{"class":275},[41,54374,54375],{"class":43,"line":104},[41,54376,80],{"emptyLinePlaceholder":79},[41,54378,54379,54381,54383],{"class":43,"line":176},[41,54380,1183],{"class":275},[41,54382,51903],{"class":51403},[41,54384,51410],{"class":275},[41,54386,54387,54389,54392,54394,54396,54398,54400,54402,54404,54407,54409,54412,54415,54417,54420],{"class":43,"line":184},[41,54388,52247],{"class":275},[41,54390,54391],{"class":51403},"textarea",[41,54393,15058],{"class":54},[41,54395,321],{"class":275},[41,54397,7790],{"class":378},[41,54399,15097],{"class":54},[41,54401,321],{"class":275},[41,54403,7790],{"class":378},[41,54405,54406],{"class":54}," cols",[41,54408,321],{"class":275},[41,54410,54411],{"class":378},"\"30\"",[41,54413,54414],{"class":54}," rows",[41,54416,321],{"class":275},[41,54418,54419],{"class":378},"\"10\"",[41,54421,51410],{"class":275},[41,54423,54424],{"class":43,"line":1757},[41,54425,54426],{"class":275},"        用户注册协议\n",[41,54428,54429],{"class":43,"line":1763},[41,54430,54431],{"class":275},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[41,54433,54434],{"class":43,"line":1768},[41,54435,54436],{"class":275},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[41,54438,54439,54441,54443],{"class":43,"line":1782},[41,54440,51879],{"class":275},[41,54442,54391],{"class":51403},[41,54444,51410],{"class":275},[41,54446,54447,54449,54451],{"class":43,"line":1787},[41,54448,52247],{"class":275},[41,54450,53819],{"class":51403},[41,54452,51410],{"class":275},[41,54454,54455,54457,54459,54461,54463,54466,54468,54471,54473],{"class":43,"line":1793},[41,54456,52247],{"class":275},[41,54458,53990],{"class":51403},[41,54460,53589],{"class":54},[41,54462,321],{"class":275},[41,54464,54465],{"class":378},"\"btn\"",[41,54467,53993],{"class":54},[41,54469,54470],{"class":275},">我已经阅读用户协议(5)\u003C\u002F",[41,54472,53990],{"class":51403},[41,54474,51410],{"class":275},[41,54476,54477,54479,54481],{"class":43,"line":1814},[41,54478,52247],{"class":275},[41,54480,51916],{"class":51403},[41,54482,51410],{"class":275},[41,54484,54485],{"class":43,"line":1819},[41,54486,54487],{"class":47},"    \u002F\u002F 1. 获取元素\n",[41,54489,54490,54492,54495,54497,54500,54503,54505,54508],{"class":43,"line":1833},[41,54491,11359],{"class":271},[41,54493,54494],{"class":58}," btn",[41,54496,13702],{"class":271},[41,54498,54499],{"class":275}," document.",[41,54501,54502],{"class":54},"querySelector",[41,54504,276],{"class":275},[41,54506,54507],{"class":378},"'.btn'",[41,54509,282],{"class":275},[41,54511,54512],{"class":43,"line":1838},[41,54513,54514],{"class":47},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[41,54516,54517],{"class":43,"line":1867},[41,54518,54519],{"class":47},"    \u002F\u002F 2. 倒计时\n",[41,54521,54522,54524,54526,54528],{"class":43,"line":1872},[41,54523,52322],{"class":271},[41,54525,9576],{"class":275},[41,54527,321],{"class":271},[41,54529,54530],{"class":58}," 5\n",[41,54532,54533],{"class":43,"line":1889},[41,54534,54535],{"class":47},"    \u002F\u002F 2.1 开启定时器\n",[41,54537,54538,54540,54543,54545,54548,54550,54553],{"class":43,"line":1894},[41,54539,52322],{"class":271},[41,54541,54542],{"class":275}," n ",[41,54544,321],{"class":271},[41,54546,54547],{"class":54}," setInterval",[41,54549,276],{"class":275},[41,54551,54552],{"class":271},"function",[41,54554,54555],{"class":275}," () {\n",[41,54557,54558,54561],{"class":43,"line":1899},[41,54559,54560],{"class":275},"      i",[41,54562,54563],{"class":271},"--\n",[41,54565,54566,54569,54571,54574,54576],{"class":43,"line":1904},[41,54567,54568],{"class":275},"      btn.innerHTML ",[41,54570,321],{"class":271},[41,54572,54573],{"class":378}," `我已经阅读用户协议(${",[41,54575,714],{"class":275},[41,54577,54578],{"class":378},"})`\n",[41,54580,54581,54584,54587,54590,54592],{"class":43,"line":1918},[41,54582,54583],{"class":271},"      if",[41,54585,54586],{"class":275}," (i ",[41,54588,54589],{"class":271},"===",[41,54591,4231],{"class":58},[41,54593,12580],{"class":275},[41,54595,54596,54599,54602],{"class":43,"line":1923},[41,54597,54598],{"class":54},"        clearInterval",[41,54600,54601],{"class":275},"(n)  ",[41,54603,54604],{"class":47},"\u002F\u002F 关闭定时器\n",[41,54606,54607],{"class":43,"line":2715},[41,54608,54609],{"class":47},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[41,54611,54612,54615,54617],{"class":43,"line":2729},[41,54613,54614],{"class":275},"        btn.disabled ",[41,54616,321],{"class":271},[41,54618,54619],{"class":58}," false\n",[41,54621,54622,54625,54627],{"class":43,"line":2737},[41,54623,54624],{"class":275},"        btn.innerHTML ",[41,54626,321],{"class":271},[41,54628,54629],{"class":378}," '同意'\n",[41,54631,54632],{"class":43,"line":2742},[41,54633,52501],{"class":275},[41,54635,54636,54639,54641],{"class":43,"line":2748},[41,54637,54638],{"class":275},"    }, ",[41,54640,6548],{"class":58},[41,54642,282],{"class":275},[41,54644,54645],{"class":43,"line":2754},[41,54646,80],{"emptyLinePlaceholder":79},[41,54648,54649,54651,54653],{"class":43,"line":2759},[41,54650,52520],{"class":275},[41,54652,51916],{"class":51403},[41,54654,51410],{"class":275},[41,54656,54657,54659,54661],{"class":43,"line":8086},[41,54658,51888],{"class":275},[41,54660,51903],{"class":51403},[41,54662,51410],{"class":275},[41,54664,54665],{"class":43,"line":8110},[41,54666,80],{"emptyLinePlaceholder":79},[41,54668,54669,54671,54673],{"class":43,"line":8115},[41,54670,51888],{"class":275},[41,54672,50738],{"class":51403},[41,54674,51410],{"class":275},[20,54676,54677],{},"不要一直想着用死循环,避免死循环",[20,54679,54680,54683],{},[24,54681,54682],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22136,54685,54687],{"id":54686},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[224,54689,54690],{},[227,54691,54692],{},"法1",[32,54694,54696],{"className":50736,"code":54695,"language":50738,"meta":37,"style":37},"\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",[24,54697,54698,54708,54722,54726,54734,54748,54768,54780,54788,54794,54805,54816,54820,54824,54831,54843,54847,54851,54858,54870,54884,54897,54911,54915,54919,54926,54937,54948,54959,54971,54983,54995,54999,55003,55011,55021,55034,55046,55059,55063,55067,55074,55084,55096,55108,55119,55130,55140,55152,55164,55168,55172,55181,55193,55205,55233,55246,55250,55254,55261,55272,55276,55284,55292,55296,55304,55318,55333,55357,55365,55380,55393,55401,55422,55434,55446,55458,55470,55482,55494,55506,55515,55523,55531,55539,55551,55574,55593,55612,55631,55650,55669,55688,55708,55712,55732,55751,55771,55792,55803,55820,55830,55840,55850,55855,55860,55865,55870,55895,55908,55912,55935,55939,55947,55955,55963,55967],{"__ignoreMap":37},[41,54699,54700,54702,54704,54706],{"class":43,"line":44},[41,54701,51400],{"class":275},[41,54703,51404],{"class":51403},[41,54705,51407],{"class":54},[41,54707,51410],{"class":275},[41,54709,54710,54712,54714,54716,54718,54720],{"class":43,"line":51},[41,54711,1183],{"class":275},[41,54713,50738],{"class":51403},[41,54715,51419],{"class":54},[41,54717,321],{"class":275},[41,54719,51424],{"class":378},[41,54721,51410],{"class":275},[41,54723,54724],{"class":43,"line":62},[41,54725,80],{"emptyLinePlaceholder":79},[41,54727,54728,54730,54732],{"class":43,"line":70},[41,54729,1183],{"class":275},[41,54731,51437],{"class":51403},[41,54733,51410],{"class":275},[41,54735,54736,54738,54740,54742,54744,54746],{"class":43,"line":76},[41,54737,52247],{"class":275},[41,54739,51447],{"class":51403},[41,54741,51450],{"class":54},[41,54743,321],{"class":275},[41,54745,51455],{"class":378},[41,54747,51410],{"class":275},[41,54749,54750,54752,54754,54756,54758,54760,54762,54764,54766],{"class":43,"line":83},[41,54751,52247],{"class":275},[41,54753,51447],{"class":51403},[41,54755,15058],{"class":54},[41,54757,321],{"class":275},[41,54759,51494],{"class":378},[41,54761,51474],{"class":54},[41,54763,321],{"class":275},[41,54765,51501],{"class":378},[41,54767,51410],{"class":275},[41,54769,54770,54772,54774,54776,54778],{"class":43,"line":89},[41,54771,52247],{"class":275},[41,54773,51510],{"class":51403},[41,54775,51513],{"class":275},[41,54777,51510],{"class":51403},[41,54779,51410],{"class":275},[41,54781,54782,54784,54786],{"class":43,"line":96},[41,54783,52247],{"class":275},[41,54785,189],{"class":51403},[41,54787,51410],{"class":275},[41,54789,54790,54792],{"class":43,"line":104},[41,54791,6541],{"class":51403},[41,54793,15710],{"class":275},[41,54795,54796,54799,54801,54803],{"class":43,"line":176},[41,54797,54798],{"class":58},"      padding",[41,54800,51540],{"class":275},[41,54802,465],{"class":58},[41,54804,1434],{"class":275},[41,54806,54807,54810,54812,54814],{"class":43,"line":184},[41,54808,54809],{"class":58},"      margin",[41,54811,51540],{"class":275},[41,54813,465],{"class":58},[41,54815,1434],{"class":275},[41,54817,54818],{"class":43,"line":1757},[41,54819,2326],{"class":275},[41,54821,54822],{"class":43,"line":1763},[41,54823,80],{"emptyLinePlaceholder":79},[41,54825,54826,54829],{"class":43,"line":1768},[41,54827,54828],{"class":51403},"    li",[41,54830,15710],{"class":275},[41,54832,54833,54836,54838,54841],{"class":43,"line":1782},[41,54834,54835],{"class":58},"      list-style",[41,54837,51540],{"class":275},[41,54839,54840],{"class":58},"none",[41,54842,1434],{"class":275},[41,54844,54845],{"class":43,"line":1787},[41,54846,2326],{"class":275},[41,54848,54849],{"class":43,"line":1793},[41,54850,80],{"emptyLinePlaceholder":79},[41,54852,54853,54856],{"class":43,"line":1814},[41,54854,54855],{"class":54},"    .box",[41,54857,15710],{"class":275},[41,54859,54860,54863,54865,54868],{"class":43,"line":1819},[41,54861,54862],{"class":58},"      position",[41,54864,51540],{"class":275},[41,54866,54867],{"class":58},"relative",[41,54869,1434],{"class":275},[41,54871,54872,54875,54877,54880,54882],{"class":43,"line":1833},[41,54873,54874],{"class":58},"      width",[41,54876,51540],{"class":275},[41,54878,54879],{"class":58},"976",[41,54881,51595],{"class":271},[41,54883,1434],{"class":275},[41,54885,54886,54889,54891,54893,54895],{"class":43,"line":1838},[41,54887,54888],{"class":58},"      height",[41,54890,51540],{"class":275},[41,54892,1680],{"class":58},[41,54894,51595],{"class":271},[41,54896,1434],{"class":275},[41,54898,54899,54901,54903,54905,54907,54909],{"class":43,"line":1867},[41,54900,54809],{"class":58},[41,54902,51540],{"class":275},[41,54904,584],{"class":58},[41,54906,51595],{"class":271},[41,54908,51659],{"class":58},[41,54910,1434],{"class":275},[41,54912,54913],{"class":43,"line":1872},[41,54914,2326],{"class":275},[41,54916,54917],{"class":43,"line":1889},[41,54918,80],{"emptyLinePlaceholder":79},[41,54920,54921,54924],{"class":43,"line":1894},[41,54922,54923],{"class":54},"    .slider-footer",[41,54925,15710],{"class":275},[41,54927,54928,54930,54932,54935],{"class":43,"line":1899},[41,54929,54862],{"class":58},[41,54931,51540],{"class":275},[41,54933,54934],{"class":58},"absolute",[41,54936,1434],{"class":275},[41,54938,54939,54942,54944,54946],{"class":43,"line":1904},[41,54940,54941],{"class":58},"      left",[41,54943,51540],{"class":275},[41,54945,465],{"class":58},[41,54947,1434],{"class":275},[41,54949,54950,54953,54955,54957],{"class":43,"line":1918},[41,54951,54952],{"class":58},"      bottom",[41,54954,51540],{"class":275},[41,54956,465],{"class":58},[41,54958,1434],{"class":275},[41,54960,54961,54963,54965,54967,54969],{"class":43,"line":1923},[41,54962,54874],{"class":58},[41,54964,51540],{"class":275},[41,54966,584],{"class":58},[41,54968,601],{"class":271},[41,54970,1434],{"class":275},[41,54972,54973,54975,54977,54979,54981],{"class":43,"line":2715},[41,54974,54888],{"class":58},[41,54976,51540],{"class":275},[41,54978,848],{"class":58},[41,54980,601],{"class":271},[41,54982,1434],{"class":275},[41,54984,54985,54988,54990,54993],{"class":43,"line":2729},[41,54986,54987],{"class":58},"      background-color",[41,54989,51540],{"class":275},[41,54991,54992],{"class":58},"skyblue",[41,54994,1434],{"class":275},[41,54996,54997],{"class":43,"line":2737},[41,54998,2326],{"class":275},[41,55000,55001],{"class":43,"line":2742},[41,55002,80],{"emptyLinePlaceholder":79},[41,55004,55005,55007,55009],{"class":43,"line":2748},[41,55006,54923],{"class":54},[41,55008,6963],{"class":51403},[41,55010,15710],{"class":275},[41,55012,55013,55015,55017,55019],{"class":43,"line":2754},[41,55014,54862],{"class":58},[41,55016,51540],{"class":275},[41,55018,54934],{"class":58},[41,55020,1434],{"class":275},[41,55022,55023,55026,55028,55030,55032],{"class":43,"line":2759},[41,55024,55025],{"class":58},"      font-size",[41,55027,51540],{"class":275},[41,55029,1174],{"class":58},[41,55031,51595],{"class":271},[41,55033,1434],{"class":275},[41,55035,55036,55038,55040,55042,55044],{"class":43,"line":8086},[41,55037,54941],{"class":58},[41,55039,51540],{"class":275},[41,55041,973],{"class":58},[41,55043,51595],{"class":271},[41,55045,1434],{"class":275},[41,55047,55048,55051,55053,55055,55057],{"class":43,"line":8110},[41,55049,55050],{"class":58},"      top",[41,55052,51540],{"class":275},[41,55054,592],{"class":58},[41,55056,51595],{"class":271},[41,55058,1434],{"class":275},[41,55060,55061],{"class":43,"line":8115},[41,55062,2326],{"class":275},[41,55064,55065],{"class":43,"line":8121},[41,55066,80],{"emptyLinePlaceholder":79},[41,55068,55069,55072],{"class":43,"line":8148},[41,55070,55071],{"class":51403},"    ul",[41,55073,15710],{"class":275},[41,55075,55076,55078,55080,55082],{"class":43,"line":8153},[41,55077,54862],{"class":58},[41,55079,51540],{"class":275},[41,55081,54934],{"class":58},[41,55083,1434],{"class":275},[41,55085,55086,55088,55090,55092,55094],{"class":43,"line":8159},[41,55087,55050],{"class":58},[41,55089,51540],{"class":275},[41,55091,1054],{"class":58},[41,55093,51595],{"class":271},[41,55095,1434],{"class":275},[41,55097,55098,55100,55102,55104,55106],{"class":43,"line":8171},[41,55099,54941],{"class":58},[41,55101,51540],{"class":275},[41,55103,973],{"class":58},[41,55105,51595],{"class":271},[41,55107,1434],{"class":275},[41,55109,55110,55113,55115,55117],{"class":43,"line":8183},[41,55111,55112],{"class":58},"      display",[41,55114,51540],{"class":275},[41,55116,51580],{"class":58},[41,55118,1434],{"class":275},[41,55120,55121,55124,55126,55128],{"class":43,"line":8195},[41,55122,55123],{"class":58},"      justify-content",[41,55125,51540],{"class":275},[41,55127,51771],{"class":58},[41,55129,1434],{"class":275},[41,55131,55132,55134,55136,55138],{"class":43,"line":9854},[41,55133,54862],{"class":58},[41,55135,51540],{"class":275},[41,55137,54934],{"class":58},[41,55139,1434],{"class":275},[41,55141,55142,55144,55146,55148,55150],{"class":43,"line":9879},[41,55143,54874],{"class":58},[41,55145,51540],{"class":275},[41,55147,4130],{"class":58},[41,55149,51595],{"class":271},[41,55151,1434],{"class":275},[41,55153,55154,55156,55158,55160,55162],{"class":43,"line":9902},[41,55155,54888],{"class":58},[41,55157,51540],{"class":275},[41,55159,973],{"class":58},[41,55161,51595],{"class":271},[41,55163,1434],{"class":275},[41,55165,55166],{"class":43,"line":9926},[41,55167,2326],{"class":275},[41,55169,55170],{"class":43,"line":9931},[41,55171,80],{"emptyLinePlaceholder":79},[41,55173,55174,55176,55179],{"class":43,"line":9936},[41,55175,55071],{"class":51403},[41,55177,55178],{"class":51403}," li",[41,55180,15710],{"class":275},[41,55182,55183,55185,55187,55189,55191],{"class":43,"line":9941},[41,55184,54874],{"class":58},[41,55186,51540],{"class":275},[41,55188,973],{"class":58},[41,55190,51595],{"class":271},[41,55192,1434],{"class":275},[41,55194,55195,55197,55199,55201,55203],{"class":43,"line":9950},[41,55196,54888],{"class":58},[41,55198,51540],{"class":275},[41,55200,973],{"class":58},[41,55202,51595],{"class":271},[41,55204,1434],{"class":275},[41,55206,55207,55209,55211,55214,55216,55218,55220,55222,55224,55226,55228,55231],{"class":43,"line":9955},[41,55208,54987],{"class":58},[41,55210,51540],{"class":275},[41,55212,55213],{"class":58},"rgba",[41,55215,276],{"class":275},[41,55217,465],{"class":58},[41,55219,12573],{"class":275},[41,55221,465],{"class":58},[41,55223,12573],{"class":275},[41,55225,465],{"class":58},[41,55227,12573],{"class":275},[41,55229,55230],{"class":58},".4",[41,55232,2857],{"class":275},[41,55234,55235,55238,55240,55242,55244],{"class":43,"line":9961},[41,55236,55237],{"class":58},"      border-radius",[41,55239,51540],{"class":275},[41,55241,719],{"class":58},[41,55243,51595],{"class":271},[41,55245,1434],{"class":275},[41,55247,55248],{"class":43,"line":9982},[41,55249,2326],{"class":275},[41,55251,55252],{"class":43,"line":9988},[41,55253,80],{"emptyLinePlaceholder":79},[41,55255,55256,55259],{"class":43,"line":10002},[41,55257,55258],{"class":54},"    .activate",[41,55260,15710],{"class":275},[41,55262,55263,55265,55267,55270],{"class":43,"line":10008},[41,55264,54987],{"class":58},[41,55266,51540],{"class":275},[41,55268,55269],{"class":58},"#f7f7f7",[41,55271,1434],{"class":275},[41,55273,55274],{"class":43,"line":10035},[41,55275,2326],{"class":275},[41,55277,55278,55280,55282],{"class":43,"line":10044},[41,55279,52520],{"class":275},[41,55281,189],{"class":51403},[41,55283,51410],{"class":275},[41,55285,55286,55288,55290],{"class":43,"line":10050},[41,55287,51888],{"class":275},[41,55289,51437],{"class":51403},[41,55291,51410],{"class":275},[41,55293,55294],{"class":43,"line":10058},[41,55295,80],{"emptyLinePlaceholder":79},[41,55297,55298,55300,55302],{"class":43,"line":10063},[41,55299,1183],{"class":275},[41,55301,51903],{"class":51403},[41,55303,51410],{"class":275},[41,55305,55306,55308,55310,55312,55314,55316],{"class":43,"line":16742},[41,55307,52247],{"class":275},[41,55309,51714],{"class":51403},[41,55311,53589],{"class":54},[41,55313,321],{"class":275},[41,55315,53594],{"class":378},[41,55317,51410],{"class":275},[41,55319,55320,55322,55324,55326,55328,55331],{"class":43,"line":16748},[41,55321,51444],{"class":275},[41,55323,51714],{"class":51403},[41,55325,53589],{"class":54},[41,55327,321],{"class":275},[41,55329,55330],{"class":378},"\"slider-wrapper\"",[41,55332,51410],{"class":275},[41,55334,55335,55338,55340,55343,55345,55348,55351,55353,55355],{"class":43,"line":16771},[41,55336,55337],{"class":275},"      \u003C",[41,55339,1603],{"class":51403},[41,55341,55342],{"class":54}," src",[41,55344,321],{"class":275},[41,55346,55347],{"class":378},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[41,55349,55350],{"class":54}," alt",[41,55352,321],{"class":275},[41,55354,7790],{"class":378},[41,55356,51410],{"class":275},[41,55358,55359,55361,55363],{"class":43,"line":16777},[41,55360,51879],{"class":275},[41,55362,51714],{"class":51403},[41,55364,51410],{"class":275},[41,55366,55367,55369,55371,55373,55375,55378],{"class":43,"line":16800},[41,55368,51444],{"class":275},[41,55370,51714],{"class":51403},[41,55372,53589],{"class":54},[41,55374,321],{"class":275},[41,55376,55377],{"class":378},"\"slider-footer\"",[41,55379,51410],{"class":275},[41,55381,55382,55384,55386,55389,55391],{"class":43,"line":16814},[41,55383,55337],{"class":275},[41,55385,20],{"class":51403},[41,55387,55388],{"class":275},">对人类来说会不会太超前了?\u003C\u002F",[41,55390,20],{"class":51403},[41,55392,51410],{"class":275},[41,55394,55395,55397,55399],{"class":43,"line":16834},[41,55396,55337],{"class":275},[41,55398,1280],{"class":51403},[41,55400,51410],{"class":275},[41,55402,55403,55406,55408,55410,55412,55415,55418,55420],{"class":43,"line":16840},[41,55404,55405],{"class":275},"        \u003C",[41,55407,227],{"class":51403},[41,55409,53589],{"class":54},[41,55411,321],{"class":275},[41,55413,55414],{"class":378},"\"activate\"",[41,55416,55417],{"class":275},">\u003C\u002F",[41,55419,227],{"class":51403},[41,55421,51410],{"class":275},[41,55423,55424,55426,55428,55430,55432],{"class":43,"line":16851},[41,55425,55405],{"class":275},[41,55427,227],{"class":51403},[41,55429,55417],{"class":275},[41,55431,227],{"class":51403},[41,55433,51410],{"class":275},[41,55435,55436,55438,55440,55442,55444],{"class":43,"line":16874},[41,55437,55405],{"class":275},[41,55439,227],{"class":51403},[41,55441,55417],{"class":275},[41,55443,227],{"class":51403},[41,55445,51410],{"class":275},[41,55447,55448,55450,55452,55454,55456],{"class":43,"line":16896},[41,55449,55405],{"class":275},[41,55451,227],{"class":51403},[41,55453,55417],{"class":275},[41,55455,227],{"class":51403},[41,55457,51410],{"class":275},[41,55459,55460,55462,55464,55466,55468],{"class":43,"line":16901},[41,55461,55405],{"class":275},[41,55463,227],{"class":51403},[41,55465,55417],{"class":275},[41,55467,227],{"class":51403},[41,55469,51410],{"class":275},[41,55471,55472,55474,55476,55478,55480],{"class":43,"line":16907},[41,55473,55405],{"class":275},[41,55475,227],{"class":51403},[41,55477,55417],{"class":275},[41,55479,227],{"class":51403},[41,55481,51410],{"class":275},[41,55483,55484,55486,55488,55490,55492],{"class":43,"line":16921},[41,55485,55405],{"class":275},[41,55487,227],{"class":51403},[41,55489,55417],{"class":275},[41,55491,227],{"class":51403},[41,55493,51410],{"class":275},[41,55495,55496,55498,55500,55502,55504],{"class":43,"line":16934},[41,55497,55405],{"class":275},[41,55499,227],{"class":51403},[41,55501,55417],{"class":275},[41,55503,227],{"class":51403},[41,55505,51410],{"class":275},[41,55507,55508,55511,55513],{"class":43,"line":16939},[41,55509,55510],{"class":275},"      \u003C\u002F",[41,55512,1280],{"class":51403},[41,55514,51410],{"class":275},[41,55516,55517,55519,55521],{"class":43,"line":16953},[41,55518,51879],{"class":275},[41,55520,51714],{"class":51403},[41,55522,51410],{"class":275},[41,55524,55525,55527,55529],{"class":43,"line":16958},[41,55526,52520],{"class":275},[41,55528,51714],{"class":51403},[41,55530,51410],{"class":275},[41,55532,55533,55535,55537],{"class":43,"line":16964},[41,55534,52247],{"class":275},[41,55536,51916],{"class":51403},[41,55538,51410],{"class":275},[41,55540,55541,55543,55546,55548],{"class":43,"line":16969},[41,55542,11359],{"class":271},[41,55544,55545],{"class":58}," arrImage",[41,55547,13702],{"class":271},[41,55549,55550],{"class":275}," [\n",[41,55552,55553,55556,55559,55562,55565,55568,55571],{"class":43,"line":16983},[41,55554,55555],{"class":275},"      { url: ",[41,55557,55558],{"class":378},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[41,55560,55561],{"class":275},", title: ",[41,55563,55564],{"class":378},"'对人类来说会不会太超前了?'",[41,55566,55567],{"class":275},", color: ",[41,55569,55570],{"class":378},"'rgba(100,67,68)'",[41,55572,55573],{"class":275}," },\n",[41,55575,55576,55578,55581,55583,55586,55588,55591],{"class":43,"line":16988},[41,55577,55555],{"class":275},[41,55579,55580],{"class":378},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[41,55582,55561],{"class":275},[41,55584,55585],{"class":378},"'开启剑与雪的黑暗传说!'",[41,55587,55567],{"class":275},[41,55589,55590],{"class":378},"'rgba(43,35,26)'",[41,55592,55573],{"class":275},[41,55594,55595,55597,55600,55602,55605,55607,55610],{"class":43,"line":16993},[41,55596,55555],{"class":275},[41,55598,55599],{"class":378},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[41,55601,55561],{"class":275},[41,55603,55604],{"class":378},"'真正的jo厨出现了!'",[41,55606,55567],{"class":275},[41,55608,55609],{"class":378},"'rgba(36,31,33)'",[41,55611,55573],{"class":275},[41,55613,55614,55616,55619,55621,55624,55626,55629],{"class":43,"line":17007},[41,55615,55555],{"class":275},[41,55617,55618],{"class":378},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[41,55620,55561],{"class":275},[41,55622,55623],{"class":378},"'李玉刚:让世界通过b站看到东方大国文化'",[41,55625,55567],{"class":275},[41,55627,55628],{"class":378},"'rgba(139,98,66)'",[41,55630,55573],{"class":275},[41,55632,55633,55635,55638,55640,55643,55645,55648],{"class":43,"line":17019},[41,55634,55555],{"class":275},[41,55636,55637],{"class":378},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[41,55639,55561],{"class":275},[41,55641,55642],{"class":378},"'快来分享你的寒假日常吧'",[41,55644,55567],{"class":275},[41,55646,55647],{"class":378},"'rgba(67,90,92)'",[41,55649,55573],{"class":275},[41,55651,55652,55654,55657,55659,55662,55664,55667],{"class":43,"line":17024},[41,55653,55555],{"class":275},[41,55655,55656],{"class":378},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[41,55658,55561],{"class":275},[41,55660,55661],{"class":378},"'哔哩哔哩小年YEAR'",[41,55663,55567],{"class":275},[41,55665,55666],{"class":378},"'rgba(166,131,143)'",[41,55668,55573],{"class":275},[41,55670,55671,55673,55676,55678,55681,55683,55686],{"class":43,"line":17037},[41,55672,55555],{"class":275},[41,55674,55675],{"class":378},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[41,55677,55561],{"class":275},[41,55679,55680],{"class":378},"'一站式解决你的电脑配置问题'",[41,55682,55567],{"class":275},[41,55684,55685],{"class":378},"'rgba(53,29,25)'",[41,55687,55573],{"class":275},[41,55689,55690,55692,55695,55697,55700,55702,55705],{"class":43,"line":17042},[41,55691,55555],{"class":275},[41,55693,55694],{"class":378},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[41,55696,55561],{"class":275},[41,55698,55699],{"class":378},"'谁不想和小猫咪贴贴呢?'",[41,55701,55567],{"class":275},[41,55703,55704],{"class":378},"'rgba(99,72,114)'",[41,55706,55707],{"class":275}," }\n",[41,55709,55710],{"class":43,"line":17047},[41,55711,53212],{"class":275},[41,55713,55714,55716,55719,55721,55723,55725,55727,55730],{"class":43,"line":17052},[41,55715,11359],{"class":271},[41,55717,55718],{"class":58}," img",[41,55720,13702],{"class":271},[41,55722,54499],{"class":275},[41,55724,54502],{"class":54},[41,55726,276],{"class":275},[41,55728,55729],{"class":378},"'.slider-wrapper img'",[41,55731,282],{"class":275},[41,55733,55734,55736,55738,55740,55742,55744,55746,55749],{"class":43,"line":17065},[41,55735,11359],{"class":271},[41,55737,6963],{"class":58},[41,55739,13702],{"class":271},[41,55741,54499],{"class":275},[41,55743,54502],{"class":54},[41,55745,276],{"class":275},[41,55747,55748],{"class":378},"'.slider-footer p'",[41,55750,282],{"class":275},[41,55752,55753,55755,55758,55760,55762,55764,55766,55769],{"class":43,"line":17070},[41,55754,11359],{"class":271},[41,55756,55757],{"class":58}," color",[41,55759,13702],{"class":271},[41,55761,54499],{"class":275},[41,55763,54502],{"class":54},[41,55765,276],{"class":275},[41,55767,55768],{"class":378},"'.slider-footer'",[41,55770,282],{"class":275},[41,55772,55773,55775,55778,55780,55782,55785,55787,55790],{"class":43,"line":32736},[41,55774,11359],{"class":271},[41,55776,55777],{"class":58}," lis",[41,55779,13702],{"class":271},[41,55781,54499],{"class":275},[41,55783,55784],{"class":54},"querySelectorAll",[41,55786,276],{"class":275},[41,55788,55789],{"class":378},"'.slider-footer ul li'",[41,55791,282],{"class":275},[41,55793,55794,55796,55798,55800],{"class":43,"line":32742},[41,55795,52322],{"class":271},[41,55797,9576],{"class":275},[41,55799,321],{"class":271},[41,55801,55802],{"class":58}," 1\n",[41,55804,55805,55807,55810,55812,55814,55816,55818],{"class":43,"line":32748},[41,55806,52322],{"class":271},[41,55808,55809],{"class":275}," timer ",[41,55811,321],{"class":271},[41,55813,54547],{"class":54},[41,55815,276],{"class":275},[41,55817,54552],{"class":271},[41,55819,54555],{"class":275},[41,55821,55822,55825,55827],{"class":43,"line":32754},[41,55823,55824],{"class":275},"      img.src ",[41,55826,321],{"class":271},[41,55828,55829],{"class":275}," arrImage[i].url\n",[41,55831,55832,55835,55837],{"class":43,"line":32760},[41,55833,55834],{"class":275},"      p.innerHTML ",[41,55836,321],{"class":271},[41,55838,55839],{"class":275}," arrImage[i].title\n",[41,55841,55842,55845,55847],{"class":43,"line":32771},[41,55843,55844],{"class":275},"      color.style.backgroundColor ",[41,55846,321],{"class":271},[41,55848,55849],{"class":275}," arrImage[i].color\n",[41,55851,55852],{"class":43,"line":32777},[41,55853,55854],{"class":47},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[41,55856,55857],{"class":43,"line":32797},[41,55858,55859],{"class":47},"      \u002F\u002F li.classList.add('activate')\n",[41,55861,55862],{"class":43,"line":32803},[41,55863,55864],{"class":47},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[41,55866,55867],{"class":43,"line":32814},[41,55868,55869],{"class":47},"      \u002F\u002F lis[i].classList.remove('activate')\n",[41,55871,55872,55875,55877,55879,55882,55885,55888,55890,55893],{"class":43,"line":32820},[41,55873,55874],{"class":275},"      document.",[41,55876,54502],{"class":54},[41,55878,276],{"class":275},[41,55880,55881],{"class":378},"'.activate'",[41,55883,55884],{"class":275},")?.classList.",[41,55886,55887],{"class":54},"toggle",[41,55889,276],{"class":275},[41,55891,55892],{"class":378},"'activate'",[41,55894,282],{"class":275},[41,55896,55897,55900,55902,55904,55906],{"class":43,"line":32826},[41,55898,55899],{"class":275},"      lis[i].classList.",[41,55901,5472],{"class":54},[41,55903,276],{"class":275},[41,55905,55892],{"class":378},[41,55907,282],{"class":275},[41,55909,55910],{"class":43,"line":32832},[41,55911,80],{"emptyLinePlaceholder":79},[41,55913,55914,55917,55919,55921,55923,55925,55927,55929,55932],{"class":43,"line":32838},[41,55915,55916],{"class":275},"      i ",[41,55918,321],{"class":271},[41,55920,54586],{"class":275},[41,55922,754],{"class":271},[41,55924,25221],{"class":58},[41,55926,13852],{"class":275},[41,55928,601],{"class":271},[41,55930,55931],{"class":275}," arrImage.",[41,55933,55934],{"class":58},"length\n",[41,55936,55937],{"class":43,"line":32844},[41,55938,80],{"emptyLinePlaceholder":79},[41,55940,55941,55943,55945],{"class":43,"line":32850},[41,55942,54638],{"class":275},[41,55944,6548],{"class":58},[41,55946,282],{"class":275},[41,55948,55949,55951,55953],{"class":43,"line":32856},[41,55950,52520],{"class":275},[41,55952,51916],{"class":51403},[41,55954,51410],{"class":275},[41,55956,55957,55959,55961],{"class":43,"line":32876},[41,55958,51888],{"class":275},[41,55960,51903],{"class":51403},[41,55962,51410],{"class":275},[41,55964,55965],{"class":43,"line":32882},[41,55966,80],{"emptyLinePlaceholder":79},[41,55968,55969,55971,55973],{"class":43,"line":32898},[41,55970,51888],{"class":275},[41,55972,50738],{"class":51403},[41,55974,51410],{"class":275},[20,55976,55977],{},[1603,55978],{"alt":37,"src":55979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[20,55981,55982],{},"?.就是短路保护,确保输出正常进行",[20,55984,55985],{},"不要忘记取余%,有时候可以用",[20,55987,55988],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[224,55990,55991],{"start":51},[227,55992,55993],{},"法2",[32,55995,55997],{"className":50736,"code":55996,"language":50738,"meta":37,"style":37},"\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",[24,55998,55999,56009,56023,56027,56035,56049,56069,56081,56089,56095,56105,56115,56119,56123,56129,56139,56143,56147,56153,56163,56175,56187,56201,56205,56209,56215,56225,56235,56245,56257,56269,56279,56283,56287,56295,56305,56317,56329,56341,56345,56349,56355,56365,56377,56389,56399,56409,56419,56431,56443,56447,56451,56459,56471,56483,56509,56521,56525,56529,56535,56545,56549,56557,56565,56569,56577,56591,56605,56625,56633,56647,56659,56667,56685,56697,56709,56721,56733,56745,56757,56769,56777,56785,56793,56801,56812,56828,56844,56860,56876,56892,56908,56924,56940,56944,56949,56967,56985,56995,57000,57005,57016,57022,57037,57046,57050,57055,57064,57069,57078,57083,57088,57093,57116,57146,57150,57158,57162,57170,57178,57182],{"__ignoreMap":37},[41,56000,56001,56003,56005,56007],{"class":43,"line":44},[41,56002,51400],{"class":275},[41,56004,51404],{"class":51403},[41,56006,51407],{"class":54},[41,56008,51410],{"class":275},[41,56010,56011,56013,56015,56017,56019,56021],{"class":43,"line":51},[41,56012,1183],{"class":275},[41,56014,50738],{"class":51403},[41,56016,51419],{"class":54},[41,56018,321],{"class":275},[41,56020,51424],{"class":378},[41,56022,51410],{"class":275},[41,56024,56025],{"class":43,"line":62},[41,56026,80],{"emptyLinePlaceholder":79},[41,56028,56029,56031,56033],{"class":43,"line":70},[41,56030,1183],{"class":275},[41,56032,51437],{"class":51403},[41,56034,51410],{"class":275},[41,56036,56037,56039,56041,56043,56045,56047],{"class":43,"line":76},[41,56038,52247],{"class":275},[41,56040,51447],{"class":51403},[41,56042,51450],{"class":54},[41,56044,321],{"class":275},[41,56046,51455],{"class":378},[41,56048,51410],{"class":275},[41,56050,56051,56053,56055,56057,56059,56061,56063,56065,56067],{"class":43,"line":83},[41,56052,52247],{"class":275},[41,56054,51447],{"class":51403},[41,56056,15058],{"class":54},[41,56058,321],{"class":275},[41,56060,51494],{"class":378},[41,56062,51474],{"class":54},[41,56064,321],{"class":275},[41,56066,51501],{"class":378},[41,56068,51410],{"class":275},[41,56070,56071,56073,56075,56077,56079],{"class":43,"line":89},[41,56072,52247],{"class":275},[41,56074,51510],{"class":51403},[41,56076,51513],{"class":275},[41,56078,51510],{"class":51403},[41,56080,51410],{"class":275},[41,56082,56083,56085,56087],{"class":43,"line":96},[41,56084,52247],{"class":275},[41,56086,189],{"class":51403},[41,56088,51410],{"class":275},[41,56090,56091,56093],{"class":43,"line":104},[41,56092,6541],{"class":51403},[41,56094,15710],{"class":275},[41,56096,56097,56099,56101,56103],{"class":43,"line":176},[41,56098,54798],{"class":58},[41,56100,51540],{"class":275},[41,56102,465],{"class":58},[41,56104,1434],{"class":275},[41,56106,56107,56109,56111,56113],{"class":43,"line":184},[41,56108,54809],{"class":58},[41,56110,51540],{"class":275},[41,56112,465],{"class":58},[41,56114,1434],{"class":275},[41,56116,56117],{"class":43,"line":1757},[41,56118,2326],{"class":275},[41,56120,56121],{"class":43,"line":1763},[41,56122,80],{"emptyLinePlaceholder":79},[41,56124,56125,56127],{"class":43,"line":1768},[41,56126,54828],{"class":51403},[41,56128,15710],{"class":275},[41,56130,56131,56133,56135,56137],{"class":43,"line":1782},[41,56132,54835],{"class":58},[41,56134,51540],{"class":275},[41,56136,54840],{"class":58},[41,56138,1434],{"class":275},[41,56140,56141],{"class":43,"line":1787},[41,56142,2326],{"class":275},[41,56144,56145],{"class":43,"line":1793},[41,56146,80],{"emptyLinePlaceholder":79},[41,56148,56149,56151],{"class":43,"line":1814},[41,56150,54855],{"class":54},[41,56152,15710],{"class":275},[41,56154,56155,56157,56159,56161],{"class":43,"line":1819},[41,56156,54862],{"class":58},[41,56158,51540],{"class":275},[41,56160,54867],{"class":58},[41,56162,1434],{"class":275},[41,56164,56165,56167,56169,56171,56173],{"class":43,"line":1833},[41,56166,54874],{"class":58},[41,56168,51540],{"class":275},[41,56170,54879],{"class":58},[41,56172,51595],{"class":271},[41,56174,1434],{"class":275},[41,56176,56177,56179,56181,56183,56185],{"class":43,"line":1838},[41,56178,54888],{"class":58},[41,56180,51540],{"class":275},[41,56182,1680],{"class":58},[41,56184,51595],{"class":271},[41,56186,1434],{"class":275},[41,56188,56189,56191,56193,56195,56197,56199],{"class":43,"line":1867},[41,56190,54809],{"class":58},[41,56192,51540],{"class":275},[41,56194,584],{"class":58},[41,56196,51595],{"class":271},[41,56198,51659],{"class":58},[41,56200,1434],{"class":275},[41,56202,56203],{"class":43,"line":1872},[41,56204,2326],{"class":275},[41,56206,56207],{"class":43,"line":1889},[41,56208,80],{"emptyLinePlaceholder":79},[41,56210,56211,56213],{"class":43,"line":1894},[41,56212,54923],{"class":54},[41,56214,15710],{"class":275},[41,56216,56217,56219,56221,56223],{"class":43,"line":1899},[41,56218,54862],{"class":58},[41,56220,51540],{"class":275},[41,56222,54934],{"class":58},[41,56224,1434],{"class":275},[41,56226,56227,56229,56231,56233],{"class":43,"line":1904},[41,56228,54941],{"class":58},[41,56230,51540],{"class":275},[41,56232,465],{"class":58},[41,56234,1434],{"class":275},[41,56236,56237,56239,56241,56243],{"class":43,"line":1918},[41,56238,54952],{"class":58},[41,56240,51540],{"class":275},[41,56242,465],{"class":58},[41,56244,1434],{"class":275},[41,56246,56247,56249,56251,56253,56255],{"class":43,"line":1923},[41,56248,54874],{"class":58},[41,56250,51540],{"class":275},[41,56252,584],{"class":58},[41,56254,601],{"class":271},[41,56256,1434],{"class":275},[41,56258,56259,56261,56263,56265,56267],{"class":43,"line":2715},[41,56260,54888],{"class":58},[41,56262,51540],{"class":275},[41,56264,848],{"class":58},[41,56266,601],{"class":271},[41,56268,1434],{"class":275},[41,56270,56271,56273,56275,56277],{"class":43,"line":2729},[41,56272,54987],{"class":58},[41,56274,51540],{"class":275},[41,56276,54992],{"class":58},[41,56278,1434],{"class":275},[41,56280,56281],{"class":43,"line":2737},[41,56282,2326],{"class":275},[41,56284,56285],{"class":43,"line":2742},[41,56286,80],{"emptyLinePlaceholder":79},[41,56288,56289,56291,56293],{"class":43,"line":2748},[41,56290,54923],{"class":54},[41,56292,6963],{"class":51403},[41,56294,15710],{"class":275},[41,56296,56297,56299,56301,56303],{"class":43,"line":2754},[41,56298,54862],{"class":58},[41,56300,51540],{"class":275},[41,56302,54934],{"class":58},[41,56304,1434],{"class":275},[41,56306,56307,56309,56311,56313,56315],{"class":43,"line":2759},[41,56308,55025],{"class":58},[41,56310,51540],{"class":275},[41,56312,1174],{"class":58},[41,56314,51595],{"class":271},[41,56316,1434],{"class":275},[41,56318,56319,56321,56323,56325,56327],{"class":43,"line":8086},[41,56320,54941],{"class":58},[41,56322,51540],{"class":275},[41,56324,973],{"class":58},[41,56326,51595],{"class":271},[41,56328,1434],{"class":275},[41,56330,56331,56333,56335,56337,56339],{"class":43,"line":8110},[41,56332,55050],{"class":58},[41,56334,51540],{"class":275},[41,56336,592],{"class":58},[41,56338,51595],{"class":271},[41,56340,1434],{"class":275},[41,56342,56343],{"class":43,"line":8115},[41,56344,2326],{"class":275},[41,56346,56347],{"class":43,"line":8121},[41,56348,80],{"emptyLinePlaceholder":79},[41,56350,56351,56353],{"class":43,"line":8148},[41,56352,55071],{"class":51403},[41,56354,15710],{"class":275},[41,56356,56357,56359,56361,56363],{"class":43,"line":8153},[41,56358,54862],{"class":58},[41,56360,51540],{"class":275},[41,56362,54934],{"class":58},[41,56364,1434],{"class":275},[41,56366,56367,56369,56371,56373,56375],{"class":43,"line":8159},[41,56368,55050],{"class":58},[41,56370,51540],{"class":275},[41,56372,1054],{"class":58},[41,56374,51595],{"class":271},[41,56376,1434],{"class":275},[41,56378,56379,56381,56383,56385,56387],{"class":43,"line":8171},[41,56380,54941],{"class":58},[41,56382,51540],{"class":275},[41,56384,973],{"class":58},[41,56386,51595],{"class":271},[41,56388,1434],{"class":275},[41,56390,56391,56393,56395,56397],{"class":43,"line":8183},[41,56392,55112],{"class":58},[41,56394,51540],{"class":275},[41,56396,51580],{"class":58},[41,56398,1434],{"class":275},[41,56400,56401,56403,56405,56407],{"class":43,"line":8195},[41,56402,55123],{"class":58},[41,56404,51540],{"class":275},[41,56406,51771],{"class":58},[41,56408,1434],{"class":275},[41,56410,56411,56413,56415,56417],{"class":43,"line":9854},[41,56412,54862],{"class":58},[41,56414,51540],{"class":275},[41,56416,54934],{"class":58},[41,56418,1434],{"class":275},[41,56420,56421,56423,56425,56427,56429],{"class":43,"line":9879},[41,56422,54874],{"class":58},[41,56424,51540],{"class":275},[41,56426,4130],{"class":58},[41,56428,51595],{"class":271},[41,56430,1434],{"class":275},[41,56432,56433,56435,56437,56439,56441],{"class":43,"line":9902},[41,56434,54888],{"class":58},[41,56436,51540],{"class":275},[41,56438,973],{"class":58},[41,56440,51595],{"class":271},[41,56442,1434],{"class":275},[41,56444,56445],{"class":43,"line":9926},[41,56446,2326],{"class":275},[41,56448,56449],{"class":43,"line":9931},[41,56450,80],{"emptyLinePlaceholder":79},[41,56452,56453,56455,56457],{"class":43,"line":9936},[41,56454,55071],{"class":51403},[41,56456,55178],{"class":51403},[41,56458,15710],{"class":275},[41,56460,56461,56463,56465,56467,56469],{"class":43,"line":9941},[41,56462,54874],{"class":58},[41,56464,51540],{"class":275},[41,56466,973],{"class":58},[41,56468,51595],{"class":271},[41,56470,1434],{"class":275},[41,56472,56473,56475,56477,56479,56481],{"class":43,"line":9950},[41,56474,54888],{"class":58},[41,56476,51540],{"class":275},[41,56478,973],{"class":58},[41,56480,51595],{"class":271},[41,56482,1434],{"class":275},[41,56484,56485,56487,56489,56491,56493,56495,56497,56499,56501,56503,56505,56507],{"class":43,"line":9955},[41,56486,54987],{"class":58},[41,56488,51540],{"class":275},[41,56490,55213],{"class":58},[41,56492,276],{"class":275},[41,56494,465],{"class":58},[41,56496,12573],{"class":275},[41,56498,465],{"class":58},[41,56500,12573],{"class":275},[41,56502,465],{"class":58},[41,56504,12573],{"class":275},[41,56506,55230],{"class":58},[41,56508,2857],{"class":275},[41,56510,56511,56513,56515,56517,56519],{"class":43,"line":9961},[41,56512,55237],{"class":58},[41,56514,51540],{"class":275},[41,56516,719],{"class":58},[41,56518,51595],{"class":271},[41,56520,1434],{"class":275},[41,56522,56523],{"class":43,"line":9982},[41,56524,2326],{"class":275},[41,56526,56527],{"class":43,"line":9988},[41,56528,80],{"emptyLinePlaceholder":79},[41,56530,56531,56533],{"class":43,"line":10002},[41,56532,55258],{"class":54},[41,56534,15710],{"class":275},[41,56536,56537,56539,56541,56543],{"class":43,"line":10008},[41,56538,54987],{"class":58},[41,56540,51540],{"class":275},[41,56542,55269],{"class":58},[41,56544,1434],{"class":275},[41,56546,56547],{"class":43,"line":10035},[41,56548,2326],{"class":275},[41,56550,56551,56553,56555],{"class":43,"line":10044},[41,56552,52520],{"class":275},[41,56554,189],{"class":51403},[41,56556,51410],{"class":275},[41,56558,56559,56561,56563],{"class":43,"line":10050},[41,56560,51888],{"class":275},[41,56562,51437],{"class":51403},[41,56564,51410],{"class":275},[41,56566,56567],{"class":43,"line":10058},[41,56568,80],{"emptyLinePlaceholder":79},[41,56570,56571,56573,56575],{"class":43,"line":10063},[41,56572,1183],{"class":275},[41,56574,51903],{"class":51403},[41,56576,51410],{"class":275},[41,56578,56579,56581,56583,56585,56587,56589],{"class":43,"line":16742},[41,56580,52247],{"class":275},[41,56582,51714],{"class":51403},[41,56584,53589],{"class":54},[41,56586,321],{"class":275},[41,56588,53594],{"class":378},[41,56590,51410],{"class":275},[41,56592,56593,56595,56597,56599,56601,56603],{"class":43,"line":16748},[41,56594,51444],{"class":275},[41,56596,51714],{"class":51403},[41,56598,53589],{"class":54},[41,56600,321],{"class":275},[41,56602,55330],{"class":378},[41,56604,51410],{"class":275},[41,56606,56607,56609,56611,56613,56615,56617,56619,56621,56623],{"class":43,"line":16771},[41,56608,55337],{"class":275},[41,56610,1603],{"class":51403},[41,56612,55342],{"class":54},[41,56614,321],{"class":275},[41,56616,55347],{"class":378},[41,56618,55350],{"class":54},[41,56620,321],{"class":275},[41,56622,7790],{"class":378},[41,56624,51410],{"class":275},[41,56626,56627,56629,56631],{"class":43,"line":16777},[41,56628,51879],{"class":275},[41,56630,51714],{"class":51403},[41,56632,51410],{"class":275},[41,56634,56635,56637,56639,56641,56643,56645],{"class":43,"line":16800},[41,56636,51444],{"class":275},[41,56638,51714],{"class":51403},[41,56640,53589],{"class":54},[41,56642,321],{"class":275},[41,56644,55377],{"class":378},[41,56646,51410],{"class":275},[41,56648,56649,56651,56653,56655,56657],{"class":43,"line":16814},[41,56650,55337],{"class":275},[41,56652,20],{"class":51403},[41,56654,55388],{"class":275},[41,56656,20],{"class":51403},[41,56658,51410],{"class":275},[41,56660,56661,56663,56665],{"class":43,"line":16834},[41,56662,55337],{"class":275},[41,56664,1280],{"class":51403},[41,56666,51410],{"class":275},[41,56668,56669,56671,56673,56675,56677,56679,56681,56683],{"class":43,"line":16840},[41,56670,55405],{"class":275},[41,56672,227],{"class":51403},[41,56674,53589],{"class":54},[41,56676,321],{"class":275},[41,56678,55414],{"class":378},[41,56680,55417],{"class":275},[41,56682,227],{"class":51403},[41,56684,51410],{"class":275},[41,56686,56687,56689,56691,56693,56695],{"class":43,"line":16851},[41,56688,55405],{"class":275},[41,56690,227],{"class":51403},[41,56692,55417],{"class":275},[41,56694,227],{"class":51403},[41,56696,51410],{"class":275},[41,56698,56699,56701,56703,56705,56707],{"class":43,"line":16874},[41,56700,55405],{"class":275},[41,56702,227],{"class":51403},[41,56704,55417],{"class":275},[41,56706,227],{"class":51403},[41,56708,51410],{"class":275},[41,56710,56711,56713,56715,56717,56719],{"class":43,"line":16896},[41,56712,55405],{"class":275},[41,56714,227],{"class":51403},[41,56716,55417],{"class":275},[41,56718,227],{"class":51403},[41,56720,51410],{"class":275},[41,56722,56723,56725,56727,56729,56731],{"class":43,"line":16901},[41,56724,55405],{"class":275},[41,56726,227],{"class":51403},[41,56728,55417],{"class":275},[41,56730,227],{"class":51403},[41,56732,51410],{"class":275},[41,56734,56735,56737,56739,56741,56743],{"class":43,"line":16907},[41,56736,55405],{"class":275},[41,56738,227],{"class":51403},[41,56740,55417],{"class":275},[41,56742,227],{"class":51403},[41,56744,51410],{"class":275},[41,56746,56747,56749,56751,56753,56755],{"class":43,"line":16921},[41,56748,55405],{"class":275},[41,56750,227],{"class":51403},[41,56752,55417],{"class":275},[41,56754,227],{"class":51403},[41,56756,51410],{"class":275},[41,56758,56759,56761,56763,56765,56767],{"class":43,"line":16934},[41,56760,55405],{"class":275},[41,56762,227],{"class":51403},[41,56764,55417],{"class":275},[41,56766,227],{"class":51403},[41,56768,51410],{"class":275},[41,56770,56771,56773,56775],{"class":43,"line":16939},[41,56772,55510],{"class":275},[41,56774,1280],{"class":51403},[41,56776,51410],{"class":275},[41,56778,56779,56781,56783],{"class":43,"line":16953},[41,56780,51879],{"class":275},[41,56782,51714],{"class":51403},[41,56784,51410],{"class":275},[41,56786,56787,56789,56791],{"class":43,"line":16958},[41,56788,52520],{"class":275},[41,56790,51714],{"class":51403},[41,56792,51410],{"class":275},[41,56794,56795,56797,56799],{"class":43,"line":16964},[41,56796,52247],{"class":275},[41,56798,51916],{"class":51403},[41,56800,51410],{"class":275},[41,56802,56803,56805,56808,56810],{"class":43,"line":16969},[41,56804,11359],{"class":271},[41,56806,56807],{"class":58}," sliderData",[41,56809,13702],{"class":271},[41,56811,55550],{"class":275},[41,56813,56814,56816,56818,56820,56822,56824,56826],{"class":43,"line":16983},[41,56815,55555],{"class":275},[41,56817,55558],{"class":378},[41,56819,55561],{"class":275},[41,56821,55564],{"class":378},[41,56823,55567],{"class":275},[41,56825,55570],{"class":378},[41,56827,55573],{"class":275},[41,56829,56830,56832,56834,56836,56838,56840,56842],{"class":43,"line":16988},[41,56831,55555],{"class":275},[41,56833,55580],{"class":378},[41,56835,55561],{"class":275},[41,56837,55585],{"class":378},[41,56839,55567],{"class":275},[41,56841,55590],{"class":378},[41,56843,55573],{"class":275},[41,56845,56846,56848,56850,56852,56854,56856,56858],{"class":43,"line":16993},[41,56847,55555],{"class":275},[41,56849,55599],{"class":378},[41,56851,55561],{"class":275},[41,56853,55604],{"class":378},[41,56855,55567],{"class":275},[41,56857,55609],{"class":378},[41,56859,55573],{"class":275},[41,56861,56862,56864,56866,56868,56870,56872,56874],{"class":43,"line":17007},[41,56863,55555],{"class":275},[41,56865,55618],{"class":378},[41,56867,55561],{"class":275},[41,56869,55623],{"class":378},[41,56871,55567],{"class":275},[41,56873,55628],{"class":378},[41,56875,55573],{"class":275},[41,56877,56878,56880,56882,56884,56886,56888,56890],{"class":43,"line":17019},[41,56879,55555],{"class":275},[41,56881,55637],{"class":378},[41,56883,55561],{"class":275},[41,56885,55642],{"class":378},[41,56887,55567],{"class":275},[41,56889,55647],{"class":378},[41,56891,55573],{"class":275},[41,56893,56894,56896,56898,56900,56902,56904,56906],{"class":43,"line":17024},[41,56895,55555],{"class":275},[41,56897,55656],{"class":378},[41,56899,55561],{"class":275},[41,56901,55661],{"class":378},[41,56903,55567],{"class":275},[41,56905,55666],{"class":378},[41,56907,55573],{"class":275},[41,56909,56910,56912,56914,56916,56918,56920,56922],{"class":43,"line":17037},[41,56911,55555],{"class":275},[41,56913,55675],{"class":378},[41,56915,55561],{"class":275},[41,56917,55680],{"class":378},[41,56919,55567],{"class":275},[41,56921,55685],{"class":378},[41,56923,55573],{"class":275},[41,56925,56926,56928,56930,56932,56934,56936,56938],{"class":43,"line":17042},[41,56927,55555],{"class":275},[41,56929,55694],{"class":378},[41,56931,55561],{"class":275},[41,56933,55699],{"class":378},[41,56935,55567],{"class":275},[41,56937,55704],{"class":378},[41,56939,55707],{"class":275},[41,56941,56942],{"class":43,"line":17047},[41,56943,53212],{"class":275},[41,56945,56946],{"class":43,"line":17052},[41,56947,56948],{"class":47},"    \u002F\u002F 1.获取元素\n",[41,56950,56951,56953,56955,56957,56959,56961,56963,56965],{"class":43,"line":17065},[41,56952,11359],{"class":271},[41,56954,55718],{"class":58},[41,56956,13702],{"class":271},[41,56958,54499],{"class":275},[41,56960,54502],{"class":54},[41,56962,276],{"class":275},[41,56964,55729],{"class":378},[41,56966,282],{"class":275},[41,56968,56969,56971,56973,56975,56977,56979,56981,56983],{"class":43,"line":17070},[41,56970,11359],{"class":271},[41,56972,6963],{"class":58},[41,56974,13702],{"class":271},[41,56976,54499],{"class":275},[41,56978,54502],{"class":54},[41,56980,276],{"class":275},[41,56982,55748],{"class":378},[41,56984,282],{"class":275},[41,56986,56987,56989,56991,56993],{"class":43,"line":32736},[41,56988,52322],{"class":271},[41,56990,9576],{"class":275},[41,56992,321],{"class":271},[41,56994,47436],{"class":58},[41,56996,56997],{"class":43,"line":32742},[41,56998,56999],{"class":47},"    \u002F\u002F 2.开启定时器\n",[41,57001,57002],{"class":43,"line":32748},[41,57003,57004],{"class":47},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[41,57006,57007,57010,57012,57014],{"class":43,"line":32754},[41,57008,57009],{"class":54},"    setInterval",[41,57011,276],{"class":275},[41,57013,54552],{"class":271},[41,57015,54555],{"class":275},[41,57017,57018,57020],{"class":43,"line":32760},[41,57019,54560],{"class":275},[41,57021,2840],{"class":271},[41,57023,57024,57026,57028,57030,57033,57035],{"class":43,"line":32771},[41,57025,54583],{"class":271},[41,57027,54586],{"class":275},[41,57029,1850],{"class":271},[41,57031,57032],{"class":275}," sliderData.",[41,57034,52071],{"class":58},[41,57036,12580],{"class":275},[41,57038,57039,57042,57044],{"class":43,"line":32777},[41,57040,57041],{"class":275},"        i ",[41,57043,321],{"class":271},[41,57045,47436],{"class":58},[41,57047,57048],{"class":43,"line":32797},[41,57049,52501],{"class":275},[41,57051,57052],{"class":43,"line":32803},[41,57053,57054],{"class":47},"      \u002F\u002F 更换图片路径\n",[41,57056,57057,57059,57061],{"class":43,"line":32814},[41,57058,55824],{"class":275},[41,57060,321],{"class":271},[41,57062,57063],{"class":275}," sliderData[i].url\n",[41,57065,57066],{"class":43,"line":32820},[41,57067,57068],{"class":47},"      \u002F\u002F 把文字写到p里面\n",[41,57070,57071,57073,57075],{"class":43,"line":32826},[41,57072,55834],{"class":275},[41,57074,321],{"class":271},[41,57076,57077],{"class":275}," sliderData[i].title\n",[41,57079,57080],{"class":43,"line":32832},[41,57081,57082],{"class":47},"      \u002F\u002F 小圆点\n",[41,57084,57085],{"class":43,"line":32838},[41,57086,57087],{"class":47},"      \u002F\u002F 先删除以前的active\n",[41,57089,57090],{"class":43,"line":32844},[41,57091,57092],{"class":47},"      \u002F\u002F 只让当前li添加active\n",[41,57094,57095,57097,57099,57101,57104,57107,57110,57112,57114],{"class":43,"line":32850},[41,57096,55874],{"class":275},[41,57098,54502],{"class":54},[41,57100,276],{"class":275},[41,57102,57103],{"class":378},"'.slider-footer .activate'",[41,57105,57106],{"class":275},").classList.",[41,57108,57109],{"class":54},"remove",[41,57111,276],{"class":275},[41,57113,55892],{"class":378},[41,57115,282],{"class":275},[41,57117,57118,57120,57122,57124,57127,57129,57131,57133,57136,57138,57140,57142,57144],{"class":43,"line":32856},[41,57119,55874],{"class":275},[41,57121,54502],{"class":54},[41,57123,276],{"class":275},[41,57125,57126],{"class":378},"`.slider-footer ul li:nth-child(${",[41,57128,714],{"class":275},[41,57130,45669],{"class":271},[41,57132,25221],{"class":58},[41,57134,57135],{"class":378},"})`",[41,57137,57106],{"class":275},[41,57139,5472],{"class":54},[41,57141,276],{"class":275},[41,57143,55892],{"class":378},[41,57145,282],{"class":275},[41,57147,57148],{"class":43,"line":32876},[41,57149,80],{"emptyLinePlaceholder":79},[41,57151,57152,57154,57156],{"class":43,"line":32882},[41,57153,54638],{"class":275},[41,57155,6548],{"class":58},[41,57157,282],{"class":275},[41,57159,57160],{"class":43,"line":32898},[41,57161,80],{"emptyLinePlaceholder":79},[41,57163,57164,57166,57168],{"class":43,"line":32904},[41,57165,52520],{"class":275},[41,57167,51916],{"class":51403},[41,57169,51410],{"class":275},[41,57171,57172,57174,57176],{"class":43,"line":32918},[41,57173,51888],{"class":275},[41,57175,51903],{"class":51403},[41,57177,51410],{"class":275},[41,57179,57180],{"class":43,"line":32924},[41,57181,80],{"emptyLinePlaceholder":79},[41,57183,57184,57186,57188],{"class":43,"line":32939},[41,57185,51888],{"class":275},[41,57187,50738],{"class":51403},[41,57189,51410],{"class":275},[241,57191,57193],{"id":57192},"_317-重要知识点","3.1.7 重要知识点",[20,57195,57196,57197],{},"浏览器在渲染文本时， ",[423,57198,57199],{},"没有空格或换行符就没有“断行点”",[20,57201,57202],{},[1603,57203],{"alt":37,"src":57204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[20,57206,57207],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[20,57209,57210],{},[1603,57211],{"alt":37,"src":57212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[20,57214,57215],{},[1603,57216],{"alt":37,"src":57217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[15,57219,57221],{"id":57220},"_32-dom事件基础","3.2 DOM事件基础",[241,57223,57225],{"id":57224},"_321-事件监听","3.2.1 事件监听",[20,57227,57228],{},[1603,57229],{"alt":37,"src":57230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[20,57232,57233],{},"事件监听有响应的发生",[20,57235,57236],{},[1603,57237],{"alt":37,"src":57238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[20,57240,57241],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[20,57243,57244],{},"对于有名函数,要执行的函数名后边不要加()",[241,57246,57248],{"id":57247},"_322-随机点名案例","3.2.2 随机点名案例",[32,57250,57252],{"className":50736,"code":57251,"language":50738,"meta":37,"style":37},"\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",[24,57253,57254,57264,57278,57282,57290,57304,57324,57336,57344,57350,57360,57370,57374,57378,57385,57396,57400,57404,57410,57422,57436,57446,57458,57471,57475,57479,57486,57490,57503,57515,57527,57531,57535,57539,57546,57556,57560,57564,57573,57585,57597,57612,57616,57624,57632,57636,57644,57657,57671,57684,57704,57712,57727,57747,57767,57775,57779,57787,57792,57828,57848,57853,57872,57877,57888,57893,57904,57909,57928,57943,57948,57974,57984,57993,57998,58014,58019,58024,58029,58044,58048,58052,58057,58076,58093,58101,58106,58121,58125,58129,58137,58145,58149],{"__ignoreMap":37},[41,57255,57256,57258,57260,57262],{"class":43,"line":44},[41,57257,51400],{"class":275},[41,57259,51404],{"class":51403},[41,57261,51407],{"class":54},[41,57263,51410],{"class":275},[41,57265,57266,57268,57270,57272,57274,57276],{"class":43,"line":51},[41,57267,1183],{"class":275},[41,57269,50738],{"class":51403},[41,57271,51419],{"class":54},[41,57273,321],{"class":275},[41,57275,51424],{"class":378},[41,57277,51410],{"class":275},[41,57279,57280],{"class":43,"line":62},[41,57281,80],{"emptyLinePlaceholder":79},[41,57283,57284,57286,57288],{"class":43,"line":70},[41,57285,1183],{"class":275},[41,57287,51437],{"class":51403},[41,57289,51410],{"class":275},[41,57291,57292,57294,57296,57298,57300,57302],{"class":43,"line":76},[41,57293,52247],{"class":275},[41,57295,51447],{"class":51403},[41,57297,51450],{"class":54},[41,57299,321],{"class":275},[41,57301,51455],{"class":378},[41,57303,51410],{"class":275},[41,57305,57306,57308,57310,57312,57314,57316,57318,57320,57322],{"class":43,"line":83},[41,57307,52247],{"class":275},[41,57309,51447],{"class":51403},[41,57311,15058],{"class":54},[41,57313,321],{"class":275},[41,57315,51494],{"class":378},[41,57317,51474],{"class":54},[41,57319,321],{"class":275},[41,57321,51501],{"class":378},[41,57323,51410],{"class":275},[41,57325,57326,57328,57330,57332,57334],{"class":43,"line":89},[41,57327,52247],{"class":275},[41,57329,51510],{"class":51403},[41,57331,51513],{"class":275},[41,57333,51510],{"class":51403},[41,57335,51410],{"class":275},[41,57337,57338,57340,57342],{"class":43,"line":96},[41,57339,52247],{"class":275},[41,57341,189],{"class":51403},[41,57343,51410],{"class":275},[41,57345,57346,57348],{"class":43,"line":104},[41,57347,6541],{"class":51403},[41,57349,15710],{"class":275},[41,57351,57352,57354,57356,57358],{"class":43,"line":176},[41,57353,54809],{"class":58},[41,57355,51540],{"class":275},[41,57357,465],{"class":58},[41,57359,1434],{"class":275},[41,57361,57362,57364,57366,57368],{"class":43,"line":184},[41,57363,54798],{"class":58},[41,57365,51540],{"class":275},[41,57367,465],{"class":58},[41,57369,1434],{"class":275},[41,57371,57372],{"class":43,"line":1757},[41,57373,2326],{"class":275},[41,57375,57376],{"class":43,"line":1763},[41,57377,80],{"emptyLinePlaceholder":79},[41,57379,57380,57383],{"class":43,"line":1768},[41,57381,57382],{"class":51403},"    h2",[41,57384,15710],{"class":275},[41,57386,57387,57390,57392,57394],{"class":43,"line":1782},[41,57388,57389],{"class":58},"      text-align",[41,57391,51540],{"class":275},[41,57393,51695],{"class":58},[41,57395,1434],{"class":275},[41,57397,57398],{"class":43,"line":1787},[41,57399,2326],{"class":275},[41,57401,57402],{"class":43,"line":1793},[41,57403,80],{"emptyLinePlaceholder":79},[41,57405,57406,57408],{"class":43,"line":1814},[41,57407,54855],{"class":54},[41,57409,15710],{"class":275},[41,57411,57412,57414,57416,57418,57420],{"class":43,"line":1819},[41,57413,54874],{"class":58},[41,57415,51540],{"class":275},[41,57417,1680],{"class":58},[41,57419,51595],{"class":271},[41,57421,1434],{"class":275},[41,57423,57424,57426,57428,57430,57432,57434],{"class":43,"line":1833},[41,57425,54809],{"class":58},[41,57427,51540],{"class":275},[41,57429,929],{"class":58},[41,57431,51595],{"class":271},[41,57433,51659],{"class":58},[41,57435,1434],{"class":275},[41,57437,57438,57440,57442,57444],{"class":43,"line":1838},[41,57439,55112],{"class":58},[41,57441,51540],{"class":275},[41,57443,51580],{"class":58},[41,57445,1434],{"class":275},[41,57447,57448,57450,57452,57454,57456],{"class":43,"line":1867},[41,57449,55025],{"class":58},[41,57451,51540],{"class":275},[41,57453,1098],{"class":58},[41,57455,51595],{"class":271},[41,57457,1434],{"class":275},[41,57459,57460,57463,57465,57467,57469],{"class":43,"line":1872},[41,57461,57462],{"class":58},"      line-height",[41,57464,51540],{"class":275},[41,57466,674],{"class":58},[41,57468,51595],{"class":271},[41,57470,1434],{"class":275},[41,57472,57473],{"class":43,"line":1889},[41,57474,2326],{"class":275},[41,57476,57477],{"class":43,"line":1894},[41,57478,80],{"emptyLinePlaceholder":79},[41,57480,57481,57484],{"class":43,"line":1899},[41,57482,57483],{"class":54},"    .qs",[41,57485,15710],{"class":275},[41,57487,57488],{"class":43,"line":1904},[41,57489,80],{"emptyLinePlaceholder":79},[41,57491,57492,57494,57496,57499,57501],{"class":43,"line":1918},[41,57493,54874],{"class":58},[41,57495,51540],{"class":275},[41,57497,57498],{"class":58},"450",[41,57500,51595],{"class":271},[41,57502,1434],{"class":275},[41,57504,57505,57507,57509,57511,57513],{"class":43,"line":1923},[41,57506,54888],{"class":58},[41,57508,51540],{"class":275},[41,57510,674],{"class":58},[41,57512,51595],{"class":271},[41,57514,1434],{"class":275},[41,57516,57517,57520,57522,57525],{"class":43,"line":2715},[41,57518,57519],{"class":58},"      color",[41,57521,51540],{"class":275},[41,57523,57524],{"class":58},"red",[41,57526,1434],{"class":275},[41,57528,57529],{"class":43,"line":2729},[41,57530,80],{"emptyLinePlaceholder":79},[41,57532,57533],{"class":43,"line":2737},[41,57534,2326],{"class":275},[41,57536,57537],{"class":43,"line":2742},[41,57538,80],{"emptyLinePlaceholder":79},[41,57540,57541,57544],{"class":43,"line":2748},[41,57542,57543],{"class":54},"    .btns",[41,57545,15710],{"class":275},[41,57547,57548,57550,57552,57554],{"class":43,"line":2754},[41,57549,57389],{"class":58},[41,57551,51540],{"class":275},[41,57553,51695],{"class":58},[41,57555,1434],{"class":275},[41,57557,57558],{"class":43,"line":2759},[41,57559,2326],{"class":275},[41,57561,57562],{"class":43,"line":8086},[41,57563,80],{"emptyLinePlaceholder":79},[41,57565,57566,57568,57571],{"class":43,"line":8110},[41,57567,57543],{"class":54},[41,57569,57570],{"class":51403}," button",[41,57572,15710],{"class":275},[41,57574,57575,57577,57579,57581,57583],{"class":43,"line":8115},[41,57576,54874],{"class":58},[41,57578,51540],{"class":275},[41,57580,1090],{"class":58},[41,57582,51595],{"class":271},[41,57584,1434],{"class":275},[41,57586,57587,57589,57591,57593,57595],{"class":43,"line":8121},[41,57588,54888],{"class":58},[41,57590,51540],{"class":275},[41,57592,546],{"class":58},[41,57594,51595],{"class":271},[41,57596,1434],{"class":275},[41,57598,57599,57601,57603,57605,57608,57610],{"class":43,"line":8148},[41,57600,54809],{"class":58},[41,57602,51540],{"class":275},[41,57604,465],{"class":58},[41,57606,57607],{"class":58}," 50",[41,57609,51595],{"class":271},[41,57611,1434],{"class":275},[41,57613,57614],{"class":43,"line":8153},[41,57615,2326],{"class":275},[41,57617,57618,57620,57622],{"class":43,"line":8159},[41,57619,52520],{"class":275},[41,57621,189],{"class":51403},[41,57623,51410],{"class":275},[41,57625,57626,57628,57630],{"class":43,"line":8171},[41,57627,51888],{"class":275},[41,57629,51437],{"class":51403},[41,57631,51410],{"class":275},[41,57633,57634],{"class":43,"line":8183},[41,57635,80],{"emptyLinePlaceholder":79},[41,57637,57638,57640,57642],{"class":43,"line":8195},[41,57639,1183],{"class":275},[41,57641,51903],{"class":51403},[41,57643,51410],{"class":275},[41,57645,57646,57648,57650,57653,57655],{"class":43,"line":9854},[41,57647,52247],{"class":275},[41,57649,15],{"class":51403},[41,57651,57652],{"class":275},">随机点名\u003C\u002F",[41,57654,15],{"class":51403},[41,57656,51410],{"class":275},[41,57658,57659,57661,57663,57665,57667,57669],{"class":43,"line":9879},[41,57660,52247],{"class":275},[41,57662,51714],{"class":51403},[41,57664,53589],{"class":54},[41,57666,321],{"class":275},[41,57668,53594],{"class":378},[41,57670,51410],{"class":275},[41,57672,57673,57675,57677,57680,57682],{"class":43,"line":9902},[41,57674,51444],{"class":275},[41,57676,41],{"class":51403},[41,57678,57679],{"class":275},">名字是：\u003C\u002F",[41,57681,41],{"class":51403},[41,57683,51410],{"class":275},[41,57685,57686,57688,57690,57692,57694,57697,57700,57702],{"class":43,"line":9926},[41,57687,51444],{"class":275},[41,57689,51714],{"class":51403},[41,57691,53589],{"class":54},[41,57693,321],{"class":275},[41,57695,57696],{"class":378},"\"qs\"",[41,57698,57699],{"class":275},">这里显示姓名\u003C\u002F",[41,57701,51714],{"class":51403},[41,57703,51410],{"class":275},[41,57705,57706,57708,57710],{"class":43,"line":9931},[41,57707,52520],{"class":275},[41,57709,51714],{"class":51403},[41,57711,51410],{"class":275},[41,57713,57714,57716,57718,57720,57722,57725],{"class":43,"line":9936},[41,57715,52247],{"class":275},[41,57717,51714],{"class":51403},[41,57719,53589],{"class":54},[41,57721,321],{"class":275},[41,57723,57724],{"class":378},"\"btns\"",[41,57726,51410],{"class":275},[41,57728,57729,57731,57733,57735,57737,57740,57743,57745],{"class":43,"line":9941},[41,57730,51444],{"class":275},[41,57732,53990],{"class":51403},[41,57734,53589],{"class":54},[41,57736,321],{"class":275},[41,57738,57739],{"class":378},"\"start\"",[41,57741,57742],{"class":275},">开始\u003C\u002F",[41,57744,53990],{"class":51403},[41,57746,51410],{"class":275},[41,57748,57749,57751,57753,57755,57757,57760,57763,57765],{"class":43,"line":9950},[41,57750,51444],{"class":275},[41,57752,53990],{"class":51403},[41,57754,53589],{"class":54},[41,57756,321],{"class":275},[41,57758,57759],{"class":378},"\"end\"",[41,57761,57762],{"class":275},">结束\u003C\u002F",[41,57764,53990],{"class":51403},[41,57766,51410],{"class":275},[41,57768,57769,57771,57773],{"class":43,"line":9955},[41,57770,52520],{"class":275},[41,57772,51714],{"class":51403},[41,57774,51410],{"class":275},[41,57776,57777],{"class":43,"line":9961},[41,57778,80],{"emptyLinePlaceholder":79},[41,57780,57781,57783,57785],{"class":43,"line":9982},[41,57782,52247],{"class":275},[41,57784,51916],{"class":51403},[41,57786,51410],{"class":275},[41,57788,57789],{"class":43,"line":9988},[41,57790,57791],{"class":47},"    \u002F\u002F 数据数组\n",[41,57793,57794,57796,57799,57801,57803,57806,57808,57811,57813,57816,57818,57821,57823,57826],{"class":43,"line":10002},[41,57795,11359],{"class":271},[41,57797,57798],{"class":58}," arr",[41,57800,13702],{"class":271},[41,57802,52329],{"class":275},[41,57804,57805],{"class":378},"'马超'",[41,57807,12573],{"class":275},[41,57809,57810],{"class":378},"'黄忠'",[41,57812,12573],{"class":275},[41,57814,57815],{"class":378},"'赵云'",[41,57817,12573],{"class":275},[41,57819,57820],{"class":378},"'关羽'",[41,57822,12573],{"class":275},[41,57824,57825],{"class":378},"'张飞'",[41,57827,33349],{"class":275},[41,57829,57830,57832,57835,57837,57839,57841,57843,57846],{"class":43,"line":10008},[41,57831,11359],{"class":271},[41,57833,57834],{"class":58}," qs",[41,57836,13702],{"class":271},[41,57838,54499],{"class":275},[41,57840,54502],{"class":54},[41,57842,276],{"class":275},[41,57844,57845],{"class":378},"'.qs'",[41,57847,282],{"class":275},[41,57849,57850],{"class":43,"line":10035},[41,57851,57852],{"class":47},"    \u002F\u002F 1.业务1.开始按钮模块\n",[41,57854,57855,57857,57859,57861,57863,57865,57867,57870],{"class":43,"line":10044},[41,57856,11359],{"class":271},[41,57858,4322],{"class":58},[41,57860,13702],{"class":271},[41,57862,54499],{"class":275},[41,57864,54502],{"class":54},[41,57866,276],{"class":275},[41,57868,57869],{"class":378},"'.start'",[41,57871,282],{"class":275},[41,57873,57874],{"class":43,"line":10050},[41,57875,57876],{"class":47},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[41,57878,57879,57881,57884,57886],{"class":43,"line":10058},[41,57880,52322],{"class":271},[41,57882,57883],{"class":275}," timerId ",[41,57885,321],{"class":271},[41,57887,47436],{"class":58},[41,57889,57890],{"class":43,"line":10063},[41,57891,57892],{"class":47},"    \u002F\u002F 随机号要全局变量\n",[41,57894,57895,57897,57900,57902],{"class":43,"line":16742},[41,57896,52322],{"class":271},[41,57898,57899],{"class":275}," random ",[41,57901,321],{"class":271},[41,57903,47436],{"class":58},[41,57905,57906],{"class":43,"line":16748},[41,57907,57908],{"class":47},"    \u002F\u002F 1.1 添加点击事件\n",[41,57910,57911,57914,57917,57919,57922,57924,57926],{"class":43,"line":16771},[41,57912,57913],{"class":275},"    start.",[41,57915,57916],{"class":54},"addEventListener",[41,57918,276],{"class":275},[41,57920,57921],{"class":378},"'click'",[41,57923,12573],{"class":275},[41,57925,54552],{"class":271},[41,57927,54555],{"class":275},[41,57929,57930,57933,57935,57937,57939,57941],{"class":43,"line":16777},[41,57931,57932],{"class":275},"      timerId ",[41,57934,321],{"class":271},[41,57936,54547],{"class":54},[41,57938,276],{"class":275},[41,57940,54552],{"class":271},[41,57942,54555],{"class":275},[41,57944,57945],{"class":43,"line":16800},[41,57946,57947],{"class":47},"        \u002F\u002F 随机数\n",[41,57949,57950,57953,57955,57958,57961,57964,57966,57968,57970,57972],{"class":43,"line":16814},[41,57951,57952],{"class":275},"        random ",[41,57954,321],{"class":271},[41,57956,57957],{"class":54}," parseInt",[41,57959,57960],{"class":275},"(Math.",[41,57962,57963],{"class":54},"random",[41,57965,13188],{"class":275},[41,57967,728],{"class":271},[41,57969,52068],{"class":275},[41,57971,52071],{"class":58},[41,57973,282],{"class":275},[41,57975,57976,57979,57981],{"class":43,"line":16834},[41,57977,57978],{"class":275},"        qs.innerHTML ",[41,57980,321],{"class":271},[41,57982,57983],{"class":275}," arr[random]\n",[41,57985,57986,57989,57991],{"class":43,"line":16840},[41,57987,57988],{"class":275},"      }, ",[41,57990,546],{"class":58},[41,57992,282],{"class":275},[41,57994,57995],{"class":43,"line":16851},[41,57996,57997],{"class":47},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[41,57999,58000,58002,58005,58007,58010,58012],{"class":43,"line":16874},[41,58001,54583],{"class":271},[41,58003,58004],{"class":275}," (arr.",[41,58006,52071],{"class":58},[41,58008,58009],{"class":271}," ===",[41,58011,25221],{"class":58},[41,58013,12580],{"class":275},[41,58015,58016],{"class":43,"line":16896},[41,58017,58018],{"class":47},"        \u002F\u002F start.disabled = true\n",[41,58020,58021],{"class":43,"line":16901},[41,58022,58023],{"class":47},"        \u002F\u002F end.disabled = true\n",[41,58025,58026],{"class":43,"line":16907},[41,58027,58028],{"class":47},"        \u002F\u002F 可以合起来写\n",[41,58030,58031,58034,58036,58039,58041],{"class":43,"line":16921},[41,58032,58033],{"class":275},"        start.disabled ",[41,58035,321],{"class":271},[41,58037,58038],{"class":275}," end.disabled ",[41,58040,321],{"class":271},[41,58042,58043],{"class":58}," true\n",[41,58045,58046],{"class":43,"line":16934},[41,58047,52501],{"class":275},[41,58049,58050],{"class":43,"line":16939},[41,58051,33564],{"class":275},[41,58053,58054],{"class":43,"line":16953},[41,58055,58056],{"class":47},"    \u002F\u002F 1.2 关闭按钮模块\n",[41,58058,58059,58061,58063,58065,58067,58069,58071,58074],{"class":43,"line":16958},[41,58060,11359],{"class":271},[41,58062,4338],{"class":58},[41,58064,13702],{"class":271},[41,58066,54499],{"class":275},[41,58068,54502],{"class":54},[41,58070,276],{"class":275},[41,58072,58073],{"class":378},"'.end'",[41,58075,282],{"class":275},[41,58077,58078,58081,58083,58085,58087,58089,58091],{"class":43,"line":16964},[41,58079,58080],{"class":275},"    end.",[41,58082,57916],{"class":54},[41,58084,276],{"class":275},[41,58086,57921],{"class":378},[41,58088,12573],{"class":275},[41,58090,54552],{"class":271},[41,58092,54555],{"class":275},[41,58094,58095,58098],{"class":43,"line":16969},[41,58096,58097],{"class":54},"      clearInterval",[41,58099,58100],{"class":275},"(timerId)\n",[41,58102,58103],{"class":43,"line":16983},[41,58104,58105],{"class":47},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[41,58107,58108,58111,58114,58117,58119],{"class":43,"line":16988},[41,58109,58110],{"class":275},"      arr.",[41,58112,58113],{"class":54},"splice",[41,58115,58116],{"class":275},"(random, ",[41,58118,26],{"class":58},[41,58120,282],{"class":275},[41,58122,58123],{"class":43,"line":16993},[41,58124,33564],{"class":275},[41,58126,58127],{"class":43,"line":17007},[41,58128,80],{"emptyLinePlaceholder":79},[41,58130,58131,58133,58135],{"class":43,"line":17019},[41,58132,52520],{"class":275},[41,58134,51916],{"class":51403},[41,58136,51410],{"class":275},[41,58138,58139,58141,58143],{"class":43,"line":17024},[41,58140,51888],{"class":275},[41,58142,51903],{"class":51403},[41,58144,51410],{"class":275},[41,58146,58147],{"class":43,"line":17037},[41,58148,80],{"emptyLinePlaceholder":79},[41,58150,58151,58153,58155],{"class":43,"line":17042},[41,58152,51888],{"class":275},[41,58154,50738],{"class":51403},[41,58156,51410],{"class":275},[20,58158,58159],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[241,58161,58163],{"id":58162},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[32,58165,58167],{"className":50736,"code":58166,"language":50738,"meta":37,"style":37},"\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",[24,58168,58169,58179,58193,58197,58205,58219,58239,58251,58259,58263,58271,58283,58291,58310,58327,58343,58353,58357,58365,58373,58377],{"__ignoreMap":37},[41,58170,58171,58173,58175,58177],{"class":43,"line":44},[41,58172,51400],{"class":275},[41,58174,51404],{"class":51403},[41,58176,51407],{"class":54},[41,58178,51410],{"class":275},[41,58180,58181,58183,58185,58187,58189,58191],{"class":43,"line":51},[41,58182,1183],{"class":275},[41,58184,50738],{"class":51403},[41,58186,51419],{"class":54},[41,58188,321],{"class":275},[41,58190,51424],{"class":378},[41,58192,51410],{"class":275},[41,58194,58195],{"class":43,"line":62},[41,58196,80],{"emptyLinePlaceholder":79},[41,58198,58199,58201,58203],{"class":43,"line":70},[41,58200,1183],{"class":275},[41,58202,51437],{"class":51403},[41,58204,51410],{"class":275},[41,58206,58207,58209,58211,58213,58215,58217],{"class":43,"line":76},[41,58208,52247],{"class":275},[41,58210,51447],{"class":51403},[41,58212,51450],{"class":54},[41,58214,321],{"class":275},[41,58216,51455],{"class":378},[41,58218,51410],{"class":275},[41,58220,58221,58223,58225,58227,58229,58231,58233,58235,58237],{"class":43,"line":83},[41,58222,52247],{"class":275},[41,58224,51447],{"class":51403},[41,58226,15058],{"class":54},[41,58228,321],{"class":275},[41,58230,51494],{"class":378},[41,58232,51474],{"class":54},[41,58234,321],{"class":275},[41,58236,51501],{"class":378},[41,58238,51410],{"class":275},[41,58240,58241,58243,58245,58247,58249],{"class":43,"line":89},[41,58242,52247],{"class":275},[41,58244,51510],{"class":51403},[41,58246,51513],{"class":275},[41,58248,51510],{"class":51403},[41,58250,51410],{"class":275},[41,58252,58253,58255,58257],{"class":43,"line":96},[41,58254,51888],{"class":275},[41,58256,51437],{"class":51403},[41,58258,51410],{"class":275},[41,58260,58261],{"class":43,"line":104},[41,58262,80],{"emptyLinePlaceholder":79},[41,58264,58265,58267,58269],{"class":43,"line":176},[41,58266,1183],{"class":275},[41,58268,51903],{"class":51403},[41,58270,51410],{"class":275},[41,58272,58273,58275,58277,58279,58281],{"class":43,"line":184},[41,58274,52247],{"class":275},[41,58276,53990],{"class":51403},[41,58278,53996],{"class":275},[41,58280,53990],{"class":51403},[41,58282,51410],{"class":275},[41,58284,58285,58287,58289],{"class":43,"line":1757},[41,58286,52247],{"class":275},[41,58288,51916],{"class":51403},[41,58290,51410],{"class":275},[41,58292,58293,58295,58297,58299,58301,58303,58305,58308],{"class":43,"line":1763},[41,58294,11359],{"class":271},[41,58296,54494],{"class":58},[41,58298,13702],{"class":271},[41,58300,54499],{"class":275},[41,58302,54502],{"class":54},[41,58304,276],{"class":275},[41,58306,58307],{"class":378},"'button'",[41,58309,282],{"class":275},[41,58311,58312,58315,58317,58319,58321,58323,58325],{"class":43,"line":1768},[41,58313,58314],{"class":275},"    btn.",[41,58316,57916],{"class":54},[41,58318,276],{"class":275},[41,58320,57921],{"class":378},[41,58322,12573],{"class":275},[41,58324,54552],{"class":271},[41,58326,54555],{"class":275},[41,58328,58329,58332,58334,58336,58339,58341],{"class":43,"line":1782},[41,58330,58331],{"class":271},"      const",[41,58333,2379],{"class":58},[41,58335,13702],{"class":271},[41,58337,58338],{"class":275}," Math.",[41,58340,57963],{"class":54},[41,58342,2115],{"class":275},[41,58344,58345,58348,58351],{"class":43,"line":1787},[41,58346,58347],{"class":275},"      console.",[41,58349,58350],{"class":54},"log",[41,58352,289],{"class":275},[41,58354,58355],{"class":43,"line":1793},[41,58356,33564],{"class":275},[41,58358,58359,58361,58363],{"class":43,"line":1814},[41,58360,52520],{"class":275},[41,58362,51916],{"class":51403},[41,58364,51410],{"class":275},[41,58366,58367,58369,58371],{"class":43,"line":1819},[41,58368,51888],{"class":275},[41,58370,51903],{"class":51403},[41,58372,51410],{"class":275},[41,58374,58375],{"class":43,"line":1833},[41,58376,80],{"emptyLinePlaceholder":79},[41,58378,58379,58381,58383],{"class":43,"line":1838},[41,58380,51888],{"class":275},[41,58382,50738],{"class":51403},[41,58384,51410],{"class":275},[20,58386,58387],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[20,58389,58390],{},"常量不可以重新赋值",[20,58392,58393],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[32,58395,58397],{"className":50736,"code":58396,"language":50738,"meta":37,"style":37},"\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",[24,58398,58399,58409,58423,58427,58435,58449,58469,58481,58489,58493,58501,58513,58521,58532,58550,58566,58580,58588,58592,58600,58608,58612],{"__ignoreMap":37},[41,58400,58401,58403,58405,58407],{"class":43,"line":44},[41,58402,51400],{"class":275},[41,58404,51404],{"class":51403},[41,58406,51407],{"class":54},[41,58408,51410],{"class":275},[41,58410,58411,58413,58415,58417,58419,58421],{"class":43,"line":51},[41,58412,1183],{"class":275},[41,58414,50738],{"class":51403},[41,58416,51419],{"class":54},[41,58418,321],{"class":275},[41,58420,51424],{"class":378},[41,58422,51410],{"class":275},[41,58424,58425],{"class":43,"line":62},[41,58426,80],{"emptyLinePlaceholder":79},[41,58428,58429,58431,58433],{"class":43,"line":70},[41,58430,1183],{"class":275},[41,58432,51437],{"class":51403},[41,58434,51410],{"class":275},[41,58436,58437,58439,58441,58443,58445,58447],{"class":43,"line":76},[41,58438,52247],{"class":275},[41,58440,51447],{"class":51403},[41,58442,51450],{"class":54},[41,58444,321],{"class":275},[41,58446,51455],{"class":378},[41,58448,51410],{"class":275},[41,58450,58451,58453,58455,58457,58459,58461,58463,58465,58467],{"class":43,"line":83},[41,58452,52247],{"class":275},[41,58454,51447],{"class":51403},[41,58456,15058],{"class":54},[41,58458,321],{"class":275},[41,58460,51494],{"class":378},[41,58462,51474],{"class":54},[41,58464,321],{"class":275},[41,58466,51501],{"class":378},[41,58468,51410],{"class":275},[41,58470,58471,58473,58475,58477,58479],{"class":43,"line":89},[41,58472,52247],{"class":275},[41,58474,51510],{"class":51403},[41,58476,51513],{"class":275},[41,58478,51510],{"class":51403},[41,58480,51410],{"class":275},[41,58482,58483,58485,58487],{"class":43,"line":96},[41,58484,51888],{"class":275},[41,58486,51437],{"class":51403},[41,58488,51410],{"class":275},[41,58490,58491],{"class":43,"line":104},[41,58492,80],{"emptyLinePlaceholder":79},[41,58494,58495,58497,58499],{"class":43,"line":176},[41,58496,1183],{"class":275},[41,58498,51903],{"class":51403},[41,58500,51410],{"class":275},[41,58502,58503,58505,58507,58509,58511],{"class":43,"line":184},[41,58504,52247],{"class":275},[41,58506,53990],{"class":51403},[41,58508,53996],{"class":275},[41,58510,53990],{"class":51403},[41,58512,51410],{"class":275},[41,58514,58515,58517,58519],{"class":43,"line":1757},[41,58516,52247],{"class":275},[41,58518,51916],{"class":51403},[41,58520,51410],{"class":275},[41,58522,58523,58525,58527,58529],{"class":43,"line":1763},[41,58524,11359],{"class":271},[41,58526,2379],{"class":58},[41,58528,13702],{"class":271},[41,58530,58531],{"class":58}," 10\n",[41,58533,58534,58536,58538,58540,58542,58544,58546,58548],{"class":43,"line":1768},[41,58535,11359],{"class":271},[41,58537,54494],{"class":58},[41,58539,13702],{"class":271},[41,58541,54499],{"class":275},[41,58543,54502],{"class":54},[41,58545,276],{"class":275},[41,58547,58307],{"class":378},[41,58549,282],{"class":275},[41,58551,58552,58554,58556,58558,58560,58562,58564],{"class":43,"line":1782},[41,58553,58314],{"class":275},[41,58555,57916],{"class":54},[41,58557,276],{"class":275},[41,58559,57921],{"class":378},[41,58561,12573],{"class":275},[41,58563,54552],{"class":271},[41,58565,54555],{"class":275},[41,58567,58568,58570,58572,58574,58576,58578],{"class":43,"line":1787},[41,58569,58331],{"class":271},[41,58571,2379],{"class":58},[41,58573,13702],{"class":271},[41,58575,58338],{"class":275},[41,58577,57963],{"class":54},[41,58579,2115],{"class":275},[41,58581,58582,58584,58586],{"class":43,"line":1793},[41,58583,58347],{"class":275},[41,58585,58350],{"class":54},[41,58587,289],{"class":275},[41,58589,58590],{"class":43,"line":1814},[41,58591,33564],{"class":275},[41,58593,58594,58596,58598],{"class":43,"line":1819},[41,58595,52520],{"class":275},[41,58597,51916],{"class":51403},[41,58599,51410],{"class":275},[41,58601,58602,58604,58606],{"class":43,"line":1833},[41,58603,51888],{"class":275},[41,58605,51903],{"class":51403},[41,58607,51410],{"class":275},[41,58609,58610],{"class":43,"line":1838},[41,58611,80],{"emptyLinePlaceholder":79},[41,58613,58614,58616,58618],{"class":43,"line":1867},[41,58615,51888],{"class":275},[41,58617,50738],{"class":51403},[41,58619,51410],{"class":275},[20,58621,58622],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[32,58624,58626],{"className":50736,"code":58625,"language":50738,"meta":37,"style":37},"\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",[24,58627,58628,58638,58652,58656,58664,58678,58698,58710,58718,58722,58730,58742,58750,58760,58778,58794,58807,58815,58819,58827,58835,58839],{"__ignoreMap":37},[41,58629,58630,58632,58634,58636],{"class":43,"line":44},[41,58631,51400],{"class":275},[41,58633,51404],{"class":51403},[41,58635,51407],{"class":54},[41,58637,51410],{"class":275},[41,58639,58640,58642,58644,58646,58648,58650],{"class":43,"line":51},[41,58641,1183],{"class":275},[41,58643,50738],{"class":51403},[41,58645,51419],{"class":54},[41,58647,321],{"class":275},[41,58649,51424],{"class":378},[41,58651,51410],{"class":275},[41,58653,58654],{"class":43,"line":62},[41,58655,80],{"emptyLinePlaceholder":79},[41,58657,58658,58660,58662],{"class":43,"line":70},[41,58659,1183],{"class":275},[41,58661,51437],{"class":51403},[41,58663,51410],{"class":275},[41,58665,58666,58668,58670,58672,58674,58676],{"class":43,"line":76},[41,58667,52247],{"class":275},[41,58669,51447],{"class":51403},[41,58671,51450],{"class":54},[41,58673,321],{"class":275},[41,58675,51455],{"class":378},[41,58677,51410],{"class":275},[41,58679,58680,58682,58684,58686,58688,58690,58692,58694,58696],{"class":43,"line":83},[41,58681,52247],{"class":275},[41,58683,51447],{"class":51403},[41,58685,15058],{"class":54},[41,58687,321],{"class":275},[41,58689,51494],{"class":378},[41,58691,51474],{"class":54},[41,58693,321],{"class":275},[41,58695,51501],{"class":378},[41,58697,51410],{"class":275},[41,58699,58700,58702,58704,58706,58708],{"class":43,"line":89},[41,58701,52247],{"class":275},[41,58703,51510],{"class":51403},[41,58705,51513],{"class":275},[41,58707,51510],{"class":51403},[41,58709,51410],{"class":275},[41,58711,58712,58714,58716],{"class":43,"line":96},[41,58713,51888],{"class":275},[41,58715,51437],{"class":51403},[41,58717,51410],{"class":275},[41,58719,58720],{"class":43,"line":104},[41,58721,80],{"emptyLinePlaceholder":79},[41,58723,58724,58726,58728],{"class":43,"line":176},[41,58725,1183],{"class":275},[41,58727,51903],{"class":51403},[41,58729,51410],{"class":275},[41,58731,58732,58734,58736,58738,58740],{"class":43,"line":184},[41,58733,52247],{"class":275},[41,58735,53990],{"class":51403},[41,58737,53996],{"class":275},[41,58739,53990],{"class":51403},[41,58741,51410],{"class":275},[41,58743,58744,58746,58748],{"class":43,"line":1757},[41,58745,52247],{"class":275},[41,58747,51916],{"class":51403},[41,58749,51410],{"class":275},[41,58751,58752,58754,58756,58758],{"class":43,"line":1763},[41,58753,11359],{"class":271},[41,58755,2379],{"class":58},[41,58757,13702],{"class":271},[41,58759,58531],{"class":58},[41,58761,58762,58764,58766,58768,58770,58772,58774,58776],{"class":43,"line":1768},[41,58763,11359],{"class":271},[41,58765,54494],{"class":58},[41,58767,13702],{"class":271},[41,58769,54499],{"class":275},[41,58771,54502],{"class":54},[41,58773,276],{"class":275},[41,58775,58307],{"class":378},[41,58777,282],{"class":275},[41,58779,58780,58782,58784,58786,58788,58790,58792],{"class":43,"line":1782},[41,58781,58314],{"class":275},[41,58783,57916],{"class":54},[41,58785,276],{"class":275},[41,58787,57921],{"class":378},[41,58789,12573],{"class":275},[41,58791,54552],{"class":271},[41,58793,54555],{"class":275},[41,58795,58796,58799,58801,58803,58805],{"class":43,"line":1787},[41,58797,58798],{"class":275},"      num ",[41,58800,321],{"class":271},[41,58802,58338],{"class":275},[41,58804,57963],{"class":54},[41,58806,2115],{"class":275},[41,58808,58809,58811,58813],{"class":43,"line":1793},[41,58810,58347],{"class":275},[41,58812,58350],{"class":54},[41,58814,289],{"class":275},[41,58816,58817],{"class":43,"line":1814},[41,58818,33564],{"class":275},[41,58820,58821,58823,58825],{"class":43,"line":1819},[41,58822,52520],{"class":275},[41,58824,51916],{"class":51403},[41,58826,51410],{"class":275},[41,58828,58829,58831,58833],{"class":43,"line":1833},[41,58830,51888],{"class":275},[41,58832,51903],{"class":51403},[41,58834,51410],{"class":275},[41,58836,58837],{"class":43,"line":1838},[41,58838,80],{"emptyLinePlaceholder":79},[41,58840,58841,58843,58845],{"class":43,"line":1867},[41,58842,51888],{"class":275},[41,58844,50738],{"class":51403},[41,58846,51410],{"class":275},[20,58848,58849],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[241,58851,58853],{"id":58852},"_324-事件监听版本","3.2.4 事件监听版本",[20,58855,58856],{},[1603,58857],{"alt":37,"src":58858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[20,58860,58861],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[20,58863,58864],{},"这种方式会覆盖前边的事件监听:",[32,58866,58868],{"className":50736,"code":58867,"language":50738,"meta":37,"style":37},"\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",[24,58869,58870,58880,58894,58898,58906,58920,58940,58952,58960,58964,58972,58984,58992,59010,59024,59035,59039,59051,59061,59065,59073,59081,59085],{"__ignoreMap":37},[41,58871,58872,58874,58876,58878],{"class":43,"line":44},[41,58873,51400],{"class":275},[41,58875,51404],{"class":51403},[41,58877,51407],{"class":54},[41,58879,51410],{"class":275},[41,58881,58882,58884,58886,58888,58890,58892],{"class":43,"line":51},[41,58883,1183],{"class":275},[41,58885,50738],{"class":51403},[41,58887,51419],{"class":54},[41,58889,321],{"class":275},[41,58891,51424],{"class":378},[41,58893,51410],{"class":275},[41,58895,58896],{"class":43,"line":62},[41,58897,80],{"emptyLinePlaceholder":79},[41,58899,58900,58902,58904],{"class":43,"line":70},[41,58901,1183],{"class":275},[41,58903,51437],{"class":51403},[41,58905,51410],{"class":275},[41,58907,58908,58910,58912,58914,58916,58918],{"class":43,"line":76},[41,58909,52247],{"class":275},[41,58911,51447],{"class":51403},[41,58913,51450],{"class":54},[41,58915,321],{"class":275},[41,58917,51455],{"class":378},[41,58919,51410],{"class":275},[41,58921,58922,58924,58926,58928,58930,58932,58934,58936,58938],{"class":43,"line":83},[41,58923,52247],{"class":275},[41,58925,51447],{"class":51403},[41,58927,15058],{"class":54},[41,58929,321],{"class":275},[41,58931,51494],{"class":378},[41,58933,51474],{"class":54},[41,58935,321],{"class":275},[41,58937,51501],{"class":378},[41,58939,51410],{"class":275},[41,58941,58942,58944,58946,58948,58950],{"class":43,"line":89},[41,58943,52247],{"class":275},[41,58945,51510],{"class":51403},[41,58947,51513],{"class":275},[41,58949,51510],{"class":51403},[41,58951,51410],{"class":275},[41,58953,58954,58956,58958],{"class":43,"line":96},[41,58955,51888],{"class":275},[41,58957,51437],{"class":51403},[41,58959,51410],{"class":275},[41,58961,58962],{"class":43,"line":104},[41,58963,80],{"emptyLinePlaceholder":79},[41,58965,58966,58968,58970],{"class":43,"line":176},[41,58967,1183],{"class":275},[41,58969,51903],{"class":51403},[41,58971,51410],{"class":275},[41,58973,58974,58976,58978,58980,58982],{"class":43,"line":184},[41,58975,52247],{"class":275},[41,58977,53990],{"class":51403},[41,58979,53996],{"class":275},[41,58981,53990],{"class":51403},[41,58983,51410],{"class":275},[41,58985,58986,58988,58990],{"class":43,"line":1757},[41,58987,52247],{"class":275},[41,58989,51916],{"class":51403},[41,58991,51410],{"class":275},[41,58993,58994,58996,58998,59000,59002,59004,59006,59008],{"class":43,"line":1763},[41,58995,11359],{"class":271},[41,58997,54494],{"class":58},[41,58999,13702],{"class":271},[41,59001,54499],{"class":275},[41,59003,54502],{"class":54},[41,59005,276],{"class":275},[41,59007,58307],{"class":378},[41,59009,282],{"class":275},[41,59011,59012,59014,59017,59019,59022],{"class":43,"line":1768},[41,59013,58314],{"class":275},[41,59015,59016],{"class":54},"onclick",[41,59018,13702],{"class":271},[41,59020,59021],{"class":271}," function",[41,59023,54555],{"class":275},[41,59025,59026,59029,59031,59033],{"class":43,"line":1782},[41,59027,59028],{"class":54},"      alert",[41,59030,276],{"class":275},[41,59032,745],{"class":58},[41,59034,282],{"class":275},[41,59036,59037],{"class":43,"line":1787},[41,59038,2326],{"class":275},[41,59040,59041,59043,59045,59047,59049],{"class":43,"line":1793},[41,59042,58314],{"class":275},[41,59044,59016],{"class":54},[41,59046,13702],{"class":271},[41,59048,59021],{"class":271},[41,59050,54555],{"class":275},[41,59052,59053,59055,59057,59059],{"class":43,"line":1814},[41,59054,59028],{"class":54},[41,59056,276],{"class":275},[41,59058,1023],{"class":58},[41,59060,282],{"class":275},[41,59062,59063],{"class":43,"line":1819},[41,59064,2326],{"class":275},[41,59066,59067,59069,59071],{"class":43,"line":1833},[41,59068,52520],{"class":275},[41,59070,51916],{"class":51403},[41,59072,51410],{"class":275},[41,59074,59075,59077,59079],{"class":43,"line":1838},[41,59076,51888],{"class":275},[41,59078,51903],{"class":51403},[41,59080,51410],{"class":275},[41,59082,59083],{"class":43,"line":1867},[41,59084,80],{"emptyLinePlaceholder":79},[41,59086,59087,59089,59091],{"class":43,"line":1872},[41,59088,51888],{"class":275},[41,59090,50738],{"class":51403},[41,59092,51410],{"class":275},[20,59094,59095],{},"只要点击就输出结果为22,前边11被覆盖了",[32,59097,59099],{"className":50736,"code":59098,"language":50738,"meta":37,"style":37},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[24,59100,59101,59106,59111,59115,59120,59125],{"__ignoreMap":37},[41,59102,59103],{"class":43,"line":44},[41,59104,59105],{"class":275},"  btn.addEventListener('click', function () {\n",[41,59107,59108],{"class":43,"line":51},[41,59109,59110],{"class":275},"      alert(11)\n",[41,59112,59113],{"class":43,"line":62},[41,59114,33564],{"class":275},[41,59116,59117],{"class":43,"line":70},[41,59118,59119],{"class":275},"    btn.addEventListener('click', function () {\n",[41,59121,59122],{"class":43,"line":76},[41,59123,59124],{"class":275},"      alert(22)\n",[41,59126,59127],{"class":43,"line":83},[41,59128,33564],{"class":275},[20,59130,59131],{},"点击第一次输出11,第二次点击为22",[241,59133,59135],{"id":59134},"_325-事件类型","3.2.5 事件类型",[20,59137,59138],{},[1603,59139],{"alt":37,"src":59140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22136,59142,59144],{"id":59143},"_3251-鼠标事件","3.2.5.1 鼠标事件",[20,59146,59147],{},"补充知识:",[20,59149,59150],{},"轮播图自动播放模块,可以使用",[20,59152,59153],{},"let timerId = setInterval(function () {",[20,59155,59156],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[20,59158,59159],{},"用js方法模拟进行点击事件,click必须加()",[20,59161,59162],{},"next.click()",[20,59164,59165],{},"}, 1000)",[20,59167,59168],{},[1603,59169],{"alt":37,"src":59170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[32,59172,59174],{"className":53170,"code":59173,"language":53172,"meta":37,"style":37},"\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",[24,59175,59176,59180,59190,59204,59208,59216,59231,59251,59271,59284,59292,59297,59302,59306,59310,59315,59320,59325,59330,59334,59338,59343,59348,59353,59357,59361,59366,59370,59375,59380,59384,59388,59393,59398,59403,59408,59413,59417,59421,59426,59431,59436,59441,59446,59450,59454,59459,59464,59469,59474,59479,59484,59489,59494,59499,59504,59508,59512,59517,59522,59526,59530,59535,59540,59544,59549,59554,59558,59562,59567,59571,59576,59581,59585,59590,59594,59598,59603,59608,59613,59618,59623,59628,59633,59637,59641,59645,59650,59655,59660,59665,59669,59677,59685,59689,59697,59712,59726,59747,59755,59769,59782,59797,59816,59828,59840,59852,59864,59876,59888,59900,59908,59923,59947,59971,59979,59987,59995,60003,60008,60013,60018,60023,60028,60033,60038,60043,60048,60053,60057,60062,60067,60072,60077,60082,60087,60092,60097,60102,60106,60111,60116,60121,60126,60131,60136,60141,60146,60151,60156,60161,60166,60170,60174,60179,60184,60189,60193,60198,60203,60208,60213,60218,60222,60227,60231,60235,60239,60243,60247,60251,60256,60261,60266,60271,60276,60281,60286,60291,60296,60300,60304,60309,60314,60319,60324,60329,60333,60338,60343,60348,60353,60358,60363,60367,60371,60376,60380,60385,60389,60394,60399,60404,60409,60414,60419,60423,60431,60439,60443],{"__ignoreMap":37},[41,59177,59178],{"class":43,"line":44},[41,59179,80],{"emptyLinePlaceholder":79},[41,59181,59182,59184,59186,59188],{"class":43,"line":51},[41,59183,51400],{"class":275},[41,59185,51404],{"class":271},[41,59187,51407],{"class":58},[41,59189,51410],{"class":275},[41,59191,59192,59194,59196,59198,59200,59202],{"class":43,"line":62},[41,59193,1183],{"class":275},[41,59195,50738],{"class":51403},[41,59197,51419],{"class":54},[41,59199,321],{"class":275},[41,59201,51424],{"class":378},[41,59203,51410],{"class":275},[41,59205,59206],{"class":43,"line":70},[41,59207,80],{"emptyLinePlaceholder":79},[41,59209,59210,59212,59214],{"class":43,"line":76},[41,59211,1183],{"class":275},[41,59213,51437],{"class":51403},[41,59215,51410],{"class":275},[41,59217,59218,59220,59222,59224,59226,59228],{"class":43,"line":83},[41,59219,52247],{"class":275},[41,59221,51447],{"class":51403},[41,59223,51450],{"class":54},[41,59225,321],{"class":275},[41,59227,51455],{"class":378},[41,59229,59230],{"class":275}," \u002F>\n",[41,59232,59233,59235,59237,59239,59241,59243,59245,59247,59249],{"class":43,"line":89},[41,59234,52247],{"class":275},[41,59236,51447],{"class":51403},[41,59238,51466],{"class":54},[41,59240,321],{"class":275},[41,59242,51471],{"class":378},[41,59244,51474],{"class":54},[41,59246,321],{"class":275},[41,59248,51479],{"class":378},[41,59250,59230],{"class":275},[41,59252,59253,59255,59257,59259,59261,59263,59265,59267,59269],{"class":43,"line":96},[41,59254,52247],{"class":275},[41,59256,51447],{"class":51403},[41,59258,15058],{"class":54},[41,59260,321],{"class":275},[41,59262,51494],{"class":378},[41,59264,51474],{"class":54},[41,59266,321],{"class":275},[41,59268,51501],{"class":378},[41,59270,59230],{"class":275},[41,59272,59273,59275,59277,59280,59282],{"class":43,"line":104},[41,59274,52247],{"class":275},[41,59276,51510],{"class":51403},[41,59278,59279],{"class":275},">轮播图点击切换\u003C\u002F",[41,59281,51510],{"class":51403},[41,59283,51410],{"class":275},[41,59285,59286,59288,59290],{"class":43,"line":176},[41,59287,52247],{"class":275},[41,59289,189],{"class":51403},[41,59291,51410],{"class":275},[41,59293,59294],{"class":43,"line":184},[41,59295,59296],{"class":275},"    * {\n",[41,59298,59299],{"class":43,"line":1757},[41,59300,59301],{"class":275},"      box-sizing: border-box;\n",[41,59303,59304],{"class":43,"line":1763},[41,59305,2326],{"class":275},[41,59307,59308],{"class":43,"line":1768},[41,59309,80],{"emptyLinePlaceholder":79},[41,59311,59312],{"class":43,"line":1782},[41,59313,59314],{"class":275},"    .slider {\n",[41,59316,59317],{"class":43,"line":1787},[41,59318,59319],{"class":275},"      width: 560px;\n",[41,59321,59322],{"class":43,"line":1793},[41,59323,59324],{"class":275},"      height: 400px;\n",[41,59326,59327],{"class":43,"line":1814},[41,59328,59329],{"class":275},"      overflow: hidden;\n",[41,59331,59332],{"class":43,"line":1819},[41,59333,2326],{"class":275},[41,59335,59336],{"class":43,"line":1833},[41,59337,80],{"emptyLinePlaceholder":79},[41,59339,59340],{"class":43,"line":1838},[41,59341,59342],{"class":275},"    .slider-wrapper {\n",[41,59344,59345],{"class":43,"line":1867},[41,59346,59347],{"class":275},"      width: 100%;\n",[41,59349,59350],{"class":43,"line":1872},[41,59351,59352],{"class":275},"      height: 320px;\n",[41,59354,59355],{"class":43,"line":1889},[41,59356,2326],{"class":275},[41,59358,59359],{"class":43,"line":1894},[41,59360,80],{"emptyLinePlaceholder":79},[41,59362,59363],{"class":43,"line":1899},[41,59364,59365],{"class":275},"    .slider-wrapper img {\n",[41,59367,59368],{"class":43,"line":1904},[41,59369,59347],{"class":275},[41,59371,59372],{"class":43,"line":1918},[41,59373,59374],{"class":275},"      height: 100%;\n",[41,59376,59377],{"class":43,"line":1923},[41,59378,59379],{"class":275},"      display: block;\n",[41,59381,59382],{"class":43,"line":2715},[41,59383,2326],{"class":275},[41,59385,59386],{"class":43,"line":2729},[41,59387,80],{"emptyLinePlaceholder":79},[41,59389,59390],{"class":43,"line":2737},[41,59391,59392],{"class":275},"    .slider-footer {\n",[41,59394,59395],{"class":43,"line":2742},[41,59396,59397],{"class":275},"      height: 80px;\n",[41,59399,59400],{"class":43,"line":2748},[41,59401,59402],{"class":275},"      background-color: rgb(100, 67, 68);\n",[41,59404,59405],{"class":43,"line":2754},[41,59406,59407],{"class":275},"      padding: 12px 12px 0 12px;\n",[41,59409,59410],{"class":43,"line":2759},[41,59411,59412],{"class":275},"      position: relative;\n",[41,59414,59415],{"class":43,"line":8086},[41,59416,2326],{"class":275},[41,59418,59419],{"class":43,"line":8110},[41,59420,80],{"emptyLinePlaceholder":79},[41,59422,59423],{"class":43,"line":8115},[41,59424,59425],{"class":275},"    .slider-footer .toggle {\n",[41,59427,59428],{"class":43,"line":8121},[41,59429,59430],{"class":275},"      position: absolute;\n",[41,59432,59433],{"class":43,"line":8148},[41,59434,59435],{"class":275},"      right: 0;\n",[41,59437,59438],{"class":43,"line":8153},[41,59439,59440],{"class":275},"      top: 12px;\n",[41,59442,59443],{"class":43,"line":8159},[41,59444,59445],{"class":275},"      display: flex;\n",[41,59447,59448],{"class":43,"line":8171},[41,59449,2326],{"class":275},[41,59451,59452],{"class":43,"line":8183},[41,59453,80],{"emptyLinePlaceholder":79},[41,59455,59456],{"class":43,"line":8195},[41,59457,59458],{"class":275},"    .slider-footer .toggle button {\n",[41,59460,59461],{"class":43,"line":9854},[41,59462,59463],{"class":275},"      margin-right: 12px;\n",[41,59465,59466],{"class":43,"line":9879},[41,59467,59468],{"class":275},"      width: 28px;\n",[41,59470,59471],{"class":43,"line":9902},[41,59472,59473],{"class":275},"      height: 28px;\n",[41,59475,59476],{"class":43,"line":9926},[41,59477,59478],{"class":275},"      appearance: none;\n",[41,59480,59481],{"class":43,"line":9931},[41,59482,59483],{"class":275},"      border: none;\n",[41,59485,59486],{"class":43,"line":9936},[41,59487,59488],{"class":275},"      background: rgba(255, 255, 255, 0.1);\n",[41,59490,59491],{"class":43,"line":9941},[41,59492,59493],{"class":275},"      color: #fff;\n",[41,59495,59496],{"class":43,"line":9950},[41,59497,59498],{"class":275},"      border-radius: 4px;\n",[41,59500,59501],{"class":43,"line":9955},[41,59502,59503],{"class":275},"      cursor: pointer;\n",[41,59505,59506],{"class":43,"line":9961},[41,59507,2326],{"class":275},[41,59509,59510],{"class":43,"line":9982},[41,59511,80],{"emptyLinePlaceholder":79},[41,59513,59514],{"class":43,"line":9988},[41,59515,59516],{"class":275},"    .slider-footer .toggle button:hover {\n",[41,59518,59519],{"class":43,"line":10002},[41,59520,59521],{"class":275},"      background: rgba(255, 255, 255, 0.2);\n",[41,59523,59524],{"class":43,"line":10008},[41,59525,2326],{"class":275},[41,59527,59528],{"class":43,"line":10035},[41,59529,80],{"emptyLinePlaceholder":79},[41,59531,59532],{"class":43,"line":10044},[41,59533,59534],{"class":275},"    .slider-footer p {\n",[41,59536,59537],{"class":43,"line":10050},[41,59538,59539],{"class":275},"      margin: 0;\n",[41,59541,59542],{"class":43,"line":10058},[41,59543,59493],{"class":275},[41,59545,59546],{"class":43,"line":10063},[41,59547,59548],{"class":275},"      font-size: 18px;\n",[41,59550,59551],{"class":43,"line":16742},[41,59552,59553],{"class":275},"      margin-bottom: 10px;\n",[41,59555,59556],{"class":43,"line":16748},[41,59557,2326],{"class":275},[41,59559,59560],{"class":43,"line":16771},[41,59561,80],{"emptyLinePlaceholder":79},[41,59563,59564],{"class":43,"line":16777},[41,59565,59566],{"class":275},"    .slider-indicator {\n",[41,59568,59569],{"class":43,"line":16800},[41,59570,59539],{"class":275},[41,59572,59573],{"class":43,"line":16814},[41,59574,59575],{"class":275},"      padding: 0;\n",[41,59577,59578],{"class":43,"line":16834},[41,59579,59580],{"class":275},"      list-style: none;\n",[41,59582,59583],{"class":43,"line":16840},[41,59584,59445],{"class":275},[41,59586,59587],{"class":43,"line":16851},[41,59588,59589],{"class":275},"      align-items: center;\n",[41,59591,59592],{"class":43,"line":16874},[41,59593,2326],{"class":275},[41,59595,59596],{"class":43,"line":16896},[41,59597,80],{"emptyLinePlaceholder":79},[41,59599,59600],{"class":43,"line":16901},[41,59601,59602],{"class":275},"    .slider-indicator li {\n",[41,59604,59605],{"class":43,"line":16907},[41,59606,59607],{"class":275},"      width: 8px;\n",[41,59609,59610],{"class":43,"line":16921},[41,59611,59612],{"class":275},"      height: 8px;\n",[41,59614,59615],{"class":43,"line":16934},[41,59616,59617],{"class":275},"      margin: 4px;\n",[41,59619,59620],{"class":43,"line":16939},[41,59621,59622],{"class":275},"      border-radius: 50%;\n",[41,59624,59625],{"class":43,"line":16953},[41,59626,59627],{"class":275},"      background: #fff;\n",[41,59629,59630],{"class":43,"line":16958},[41,59631,59632],{"class":275},"      opacity: 0.4;\n",[41,59634,59635],{"class":43,"line":16964},[41,59636,59503],{"class":275},[41,59638,59639],{"class":43,"line":16969},[41,59640,2326],{"class":275},[41,59642,59643],{"class":43,"line":16983},[41,59644,80],{"emptyLinePlaceholder":79},[41,59646,59647],{"class":43,"line":16988},[41,59648,59649],{"class":275},"    .slider-indicator li.active {\n",[41,59651,59652],{"class":43,"line":16993},[41,59653,59654],{"class":275},"      width: 12px;\n",[41,59656,59657],{"class":43,"line":17007},[41,59658,59659],{"class":275},"      height: 12px;\n",[41,59661,59662],{"class":43,"line":17019},[41,59663,59664],{"class":275},"      opacity: 1;\n",[41,59666,59667],{"class":43,"line":17024},[41,59668,2326],{"class":275},[41,59670,59671,59673,59675],{"class":43,"line":17037},[41,59672,52520],{"class":275},[41,59674,189],{"class":51403},[41,59676,51410],{"class":275},[41,59678,59679,59681,59683],{"class":43,"line":17042},[41,59680,51888],{"class":275},[41,59682,51437],{"class":51403},[41,59684,51410],{"class":275},[41,59686,59687],{"class":43,"line":17047},[41,59688,80],{"emptyLinePlaceholder":79},[41,59690,59691,59693,59695],{"class":43,"line":17052},[41,59692,1183],{"class":275},[41,59694,51903],{"class":51403},[41,59696,51410],{"class":275},[41,59698,59699,59701,59703,59705,59707,59710],{"class":43,"line":17065},[41,59700,52247],{"class":275},[41,59702,51714],{"class":51403},[41,59704,53589],{"class":54},[41,59706,321],{"class":275},[41,59708,59709],{"class":378},"\"slider\"",[41,59711,51410],{"class":275},[41,59713,59714,59716,59718,59720,59722,59724],{"class":43,"line":17070},[41,59715,51444],{"class":275},[41,59717,51714],{"class":51403},[41,59719,53589],{"class":54},[41,59721,321],{"class":275},[41,59723,55330],{"class":378},[41,59725,51410],{"class":275},[41,59727,59728,59730,59732,59734,59736,59739,59741,59743,59745],{"class":43,"line":32736},[41,59729,55337],{"class":275},[41,59731,1603],{"class":51403},[41,59733,55342],{"class":54},[41,59735,321],{"class":275},[41,59737,59738],{"class":378},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[41,59740,55350],{"class":54},[41,59742,321],{"class":275},[41,59744,7790],{"class":378},[41,59746,59230],{"class":275},[41,59748,59749,59751,59753],{"class":43,"line":32742},[41,59750,51879],{"class":275},[41,59752,51714],{"class":51403},[41,59754,51410],{"class":275},[41,59756,59757,59759,59761,59763,59765,59767],{"class":43,"line":32748},[41,59758,51444],{"class":275},[41,59760,51714],{"class":51403},[41,59762,53589],{"class":54},[41,59764,321],{"class":275},[41,59766,55377],{"class":378},[41,59768,51410],{"class":275},[41,59770,59771,59773,59775,59778,59780],{"class":43,"line":32754},[41,59772,55337],{"class":275},[41,59774,20],{"class":51403},[41,59776,59777],{"class":275},">对人类来说会不会太超前了？\u003C\u002F",[41,59779,20],{"class":51403},[41,59781,51410],{"class":275},[41,59783,59784,59786,59788,59790,59792,59795],{"class":43,"line":32760},[41,59785,55337],{"class":275},[41,59787,1280],{"class":51403},[41,59789,53589],{"class":54},[41,59791,321],{"class":275},[41,59793,59794],{"class":378},"\"slider-indicator\"",[41,59796,51410],{"class":275},[41,59798,59799,59801,59803,59805,59807,59810,59812,59814],{"class":43,"line":32771},[41,59800,55405],{"class":275},[41,59802,227],{"class":51403},[41,59804,53589],{"class":54},[41,59806,321],{"class":275},[41,59808,59809],{"class":378},"\"active\"",[41,59811,55417],{"class":275},[41,59813,227],{"class":51403},[41,59815,51410],{"class":275},[41,59817,59818,59820,59822,59824,59826],{"class":43,"line":32777},[41,59819,55405],{"class":275},[41,59821,227],{"class":51403},[41,59823,55417],{"class":275},[41,59825,227],{"class":51403},[41,59827,51410],{"class":275},[41,59829,59830,59832,59834,59836,59838],{"class":43,"line":32797},[41,59831,55405],{"class":275},[41,59833,227],{"class":51403},[41,59835,55417],{"class":275},[41,59837,227],{"class":51403},[41,59839,51410],{"class":275},[41,59841,59842,59844,59846,59848,59850],{"class":43,"line":32803},[41,59843,55405],{"class":275},[41,59845,227],{"class":51403},[41,59847,55417],{"class":275},[41,59849,227],{"class":51403},[41,59851,51410],{"class":275},[41,59853,59854,59856,59858,59860,59862],{"class":43,"line":32814},[41,59855,55405],{"class":275},[41,59857,227],{"class":51403},[41,59859,55417],{"class":275},[41,59861,227],{"class":51403},[41,59863,51410],{"class":275},[41,59865,59866,59868,59870,59872,59874],{"class":43,"line":32820},[41,59867,55405],{"class":275},[41,59869,227],{"class":51403},[41,59871,55417],{"class":275},[41,59873,227],{"class":51403},[41,59875,51410],{"class":275},[41,59877,59878,59880,59882,59884,59886],{"class":43,"line":32826},[41,59879,55405],{"class":275},[41,59881,227],{"class":51403},[41,59883,55417],{"class":275},[41,59885,227],{"class":51403},[41,59887,51410],{"class":275},[41,59889,59890,59892,59894,59896,59898],{"class":43,"line":32832},[41,59891,55405],{"class":275},[41,59893,227],{"class":51403},[41,59895,55417],{"class":275},[41,59897,227],{"class":51403},[41,59899,51410],{"class":275},[41,59901,59902,59904,59906],{"class":43,"line":32838},[41,59903,55510],{"class":275},[41,59905,1280],{"class":51403},[41,59907,51410],{"class":275},[41,59909,59910,59912,59914,59916,59918,59921],{"class":43,"line":32844},[41,59911,55337],{"class":275},[41,59913,51714],{"class":51403},[41,59915,53589],{"class":54},[41,59917,321],{"class":275},[41,59919,59920],{"class":378},"\"toggle\"",[41,59922,51410],{"class":275},[41,59924,59925,59927,59929,59931,59933,59936,59938,59941,59943,59945],{"class":43,"line":32850},[41,59926,55405],{"class":275},[41,59928,53990],{"class":51403},[41,59930,53589],{"class":54},[41,59932,321],{"class":275},[41,59934,59935],{"class":378},"\"prev\"",[41,59937,1233],{"class":275},[41,59939,59940],{"class":58},"&lt;",[41,59942,51888],{"class":275},[41,59944,53990],{"class":51403},[41,59946,51410],{"class":275},[41,59948,59949,59951,59953,59955,59957,59960,59962,59965,59967,59969],{"class":43,"line":32856},[41,59950,55405],{"class":275},[41,59952,53990],{"class":51403},[41,59954,53589],{"class":54},[41,59956,321],{"class":275},[41,59958,59959],{"class":378},"\"next\"",[41,59961,1233],{"class":275},[41,59963,59964],{"class":58},"&gt;",[41,59966,51888],{"class":275},[41,59968,53990],{"class":51403},[41,59970,51410],{"class":275},[41,59972,59973,59975,59977],{"class":43,"line":32876},[41,59974,55510],{"class":275},[41,59976,51714],{"class":51403},[41,59978,51410],{"class":275},[41,59980,59981,59983,59985],{"class":43,"line":32882},[41,59982,51879],{"class":275},[41,59984,51714],{"class":51403},[41,59986,51410],{"class":275},[41,59988,59989,59991,59993],{"class":43,"line":32898},[41,59990,52520],{"class":275},[41,59992,51714],{"class":51403},[41,59994,51410],{"class":275},[41,59996,59997,59999,60001],{"class":43,"line":32904},[41,59998,52247],{"class":275},[41,60000,51916],{"class":51403},[41,60002,51410],{"class":275},[41,60004,60005],{"class":43,"line":32918},[41,60006,60007],{"class":275},"    \u002F\u002F 1. 初始数据\n",[41,60009,60010],{"class":43,"line":32924},[41,60011,60012],{"class":275},"    const data = [\n",[41,60014,60015],{"class":43,"line":32939},[41,60016,60017],{"class":275},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[41,60019,60020],{"class":43,"line":32945},[41,60021,60022],{"class":275},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[41,60024,60025],{"class":43,"line":32954},[41,60026,60027],{"class":275},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[41,60029,60030],{"class":43,"line":32960},[41,60031,60032],{"class":275},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[41,60034,60035],{"class":43,"line":32969},[41,60036,60037],{"class":275},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[41,60039,60040],{"class":43,"line":32975},[41,60041,60042],{"class":275},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[41,60044,60045],{"class":43,"line":32981},[41,60046,60047],{"class":275},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[41,60049,60050],{"class":43,"line":32990},[41,60051,60052],{"class":275},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[41,60054,60055],{"class":43,"line":32996},[41,60056,53212],{"class":275},[41,60058,60059],{"class":43,"line":33007},[41,60060,60061],{"class":275},"    \u002F\u002F 获取元素\n",[41,60063,60064],{"class":43,"line":33013},[41,60065,60066],{"class":275},"    const img = document.querySelector('.slider-wrapper img')\n",[41,60068,60069],{"class":43,"line":33032},[41,60070,60071],{"class":275},"    const p = document.querySelector('.slider-footer p')\n",[41,60073,60074],{"class":43,"line":33038},[41,60075,60076],{"class":275},"    const footer = document.querySelector('.slider-footer')\n",[41,60078,60079],{"class":43,"line":33049},[41,60080,60081],{"class":275},"    \u002F\u002F 1. 右按钮业务\n",[41,60083,60084],{"class":43,"line":33055},[41,60085,60086],{"class":275},"    \u002F\u002F 1.1 获取右侧按钮 \n",[41,60088,60089],{"class":43,"line":33075},[41,60090,60091],{"class":275},"    const next = document.querySelector('.next')\n",[41,60093,60094],{"class":43,"line":33091},[41,60095,60096],{"class":275},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[41,60098,60099],{"class":43,"line":33097},[41,60100,60101],{"class":275},"    \u002F\u002F 1.2 注册点击事件\n",[41,60103,60104],{"class":43,"line":33111},[41,60105,80],{"emptyLinePlaceholder":79},[41,60107,60108],{"class":43,"line":33117},[41,60109,60110],{"class":275},"    next.addEventListener('click', function () {\n",[41,60112,60113],{"class":43,"line":33123},[41,60114,60115],{"class":275},"      \u002F\u002F console.log(11)\n",[41,60117,60118],{"class":43,"line":33134},[41,60119,60120],{"class":275},"      i++\n",[41,60122,60123],{"class":43,"line":33140},[41,60124,60125],{"class":275},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[41,60127,60128],{"class":43,"line":33146},[41,60129,60130],{"class":275},"      \u002F\u002F if (i >= 8) {\n",[41,60132,60133],{"class":43,"line":33156},[41,60134,60135],{"class":275},"      \u002F\u002F   i = 0\n",[41,60137,60138],{"class":43,"line":33162},[41,60139,60140],{"class":275},"      \u002F\u002F }\n",[41,60142,60143],{"class":43,"line":33173},[41,60144,60145],{"class":275},"      i = i >= data.length ? 0 : i\n",[41,60147,60148],{"class":43,"line":33179},[41,60149,60150],{"class":275},"      \u002F\u002F 1.3 得到对应的对象\n",[41,60152,60153],{"class":43,"line":33189},[41,60154,60155],{"class":275},"      \u002F\u002F console.log(data[i])\n",[41,60157,60158],{"class":43,"line":33194},[41,60159,60160],{"class":275},"      \u002F\u002F 调用函数\n",[41,60162,60163],{"class":43,"line":33200},[41,60164,60165],{"class":275},"      toggle()\n",[41,60167,60168],{"class":43,"line":33249},[41,60169,33564],{"class":275},[41,60171,60172],{"class":43,"line":33296},[41,60173,80],{"emptyLinePlaceholder":79},[41,60175,60176],{"class":43,"line":33301},[41,60177,60178],{"class":275},"    \u002F\u002F 2. 左侧按钮业务\n",[41,60180,60181],{"class":43,"line":33307},[41,60182,60183],{"class":275},"    \u002F\u002F 2.1 获取左侧按钮 \n",[41,60185,60186],{"class":43,"line":33326},[41,60187,60188],{"class":275},"    const prev = document.querySelector('.prev')\n",[41,60190,60191],{"class":43,"line":33332},[41,60192,60101],{"class":275},[41,60194,60195],{"class":43,"line":33352},[41,60196,60197],{"class":275},"    prev.addEventListener('click', function () {\n",[41,60199,60200],{"class":43,"line":33358},[41,60201,60202],{"class":275},"      i--\n",[41,60204,60205],{"class":43,"line":33364},[41,60206,60207],{"class":275},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[41,60209,60210],{"class":43,"line":33374},[41,60211,60212],{"class":275},"      \u002F\u002F if (i \u003C 0) {\n",[41,60214,60215],{"class":43,"line":33379},[41,60216,60217],{"class":275},"      \u002F\u002F   i = 7\n",[41,60219,60220],{"class":43,"line":33385},[41,60221,60140],{"class":275},[41,60223,60224],{"class":43,"line":33401},[41,60225,60226],{"class":275},"      i = i \u003C 0 ? data.length - 1 : i\n",[41,60228,60229],{"class":43,"line":33446},[41,60230,60150],{"class":275},[41,60232,60233],{"class":43,"line":33452},[41,60234,60155],{"class":275},[41,60236,60237],{"class":43,"line":33458},[41,60238,60160],{"class":275},[41,60240,60241],{"class":43,"line":33464},[41,60242,60165],{"class":275},[41,60244,60245],{"class":43,"line":33475},[41,60246,33564],{"class":275},[41,60248,60249],{"class":43,"line":33481},[41,60250,80],{"emptyLinePlaceholder":79},[41,60252,60253],{"class":43,"line":33487},[41,60254,60255],{"class":275},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[41,60257,60258],{"class":43,"line":33493},[41,60259,60260],{"class":275},"    function toggle() {\n",[41,60262,60263],{"class":43,"line":33511},[41,60264,60265],{"class":275},"      \u002F\u002F 1.4 渲染对应的数据\n",[41,60267,60268],{"class":43,"line":33525},[41,60269,60270],{"class":275},"      img.src = data[i].url\n",[41,60272,60273],{"class":43,"line":33534},[41,60274,60275],{"class":275},"      p.innerHTML = data[i].title\n",[41,60277,60278],{"class":43,"line":33543},[41,60279,60280],{"class":275},"      footer.style.backgroundColor = data[i].color\n",[41,60282,60283],{"class":43,"line":33552},[41,60284,60285],{"class":275},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[41,60287,60288],{"class":43,"line":33561},[41,60289,60290],{"class":275},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[41,60292,60293],{"class":43,"line":33567},[41,60294,60295],{"class":275},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[41,60297,60298],{"class":43,"line":33573},[41,60299,2326],{"class":275},[41,60301,60302],{"class":43,"line":33581},[41,60303,80],{"emptyLinePlaceholder":79},[41,60305,60306],{"class":43,"line":33586},[41,60307,60308],{"class":275},"    \u002F\u002F 3. 自动播放模块\n",[41,60310,60311],{"class":43,"line":33592},[41,60312,60313],{"class":275},"    let timerId = setInterval(function () {\n",[41,60315,60316],{"class":43,"line":33603},[41,60317,60318],{"class":275},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[41,60320,60321],{"class":43,"line":33609},[41,60322,60323],{"class":275},"      next.click()\n",[41,60325,60326],{"class":43,"line":33629},[41,60327,60328],{"class":275},"    }, 1000)\n",[41,60330,60331],{"class":43,"line":33635},[41,60332,80],{"emptyLinePlaceholder":79},[41,60334,60335],{"class":43,"line":33641},[41,60336,60337],{"class":275},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[41,60339,60340],{"class":43,"line":33647},[41,60341,60342],{"class":275},"    const slider = document.querySelector('.slider')\n",[41,60344,60345],{"class":43,"line":33664},[41,60346,60347],{"class":275},"    \u002F\u002F 注册事件\n",[41,60349,60350],{"class":43,"line":33670},[41,60351,60352],{"class":275},"    slider.addEventListener('mouseenter', function () {\n",[41,60354,60355],{"class":43,"line":33676},[41,60356,60357],{"class":275},"      \u002F\u002F 停止定时器\n",[41,60359,60360],{"class":43,"line":33682},[41,60361,60362],{"class":275},"      clearInterval(timerId)\n",[41,60364,60365],{"class":43,"line":33688},[41,60366,33564],{"class":275},[41,60368,60369],{"class":43,"line":33694},[41,60370,80],{"emptyLinePlaceholder":79},[41,60372,60373],{"class":43,"line":33721},[41,60374,60375],{"class":275},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[41,60377,60378],{"class":43,"line":33745},[41,60379,60347],{"class":275},[41,60381,60382],{"class":43,"line":33751},[41,60383,60384],{"class":275},"    slider.addEventListener('mouseleave', function () {\n",[41,60386,60387],{"class":43,"line":33757},[41,60388,60357],{"class":275},[41,60390,60391],{"class":43,"line":33763},[41,60392,60393],{"class":275},"      if (timerId) clearInterval(timerId)\n",[41,60395,60396],{"class":43,"line":33774},[41,60397,60398],{"class":275},"      \u002F\u002F 开启定时器\n",[41,60400,60401],{"class":43,"line":33785},[41,60402,60403],{"class":275},"      timerId = setInterval(function () {\n",[41,60405,60406],{"class":43,"line":33791},[41,60407,60408],{"class":275},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[41,60410,60411],{"class":43,"line":33808},[41,60412,60413],{"class":275},"        next.click()\n",[41,60415,60416],{"class":43,"line":33831},[41,60417,60418],{"class":275},"      }, 1000)\n",[41,60420,60421],{"class":43,"line":33854},[41,60422,33564],{"class":275},[41,60424,60425,60427,60429],{"class":43,"line":33860},[41,60426,52520],{"class":275},[41,60428,51916],{"class":51403},[41,60430,51410],{"class":275},[41,60432,60433,60435,60437],{"class":43,"line":33865},[41,60434,51888],{"class":275},[41,60436,51903],{"class":51403},[41,60438,51410],{"class":275},[41,60440,60441],{"class":43,"line":33874},[41,60442,80],{"emptyLinePlaceholder":79},[41,60444,60445,60447,60449],{"class":43,"line":33884},[41,60446,51888],{"class":275},[41,60448,50738],{"class":51403},[41,60450,51410],{"class":275},[22136,60452,60454],{"id":60453},"_3252-焦点事件","3.2.5.2 焦点事件",[20,60456,60457],{},"小米搜索框案例：",[32,60459,60461],{"className":50736,"code":60460,"language":50738,"meta":37,"style":37},"\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",[24,60462,60463,60473,60487,60491,60499,60513,60533,60553,60565,60573,60579,60589,60599,60611,60615,60619,60626,60630,60641,60645,60649,60656,60667,60680,60694,60698,60702,60711,60723,60735,60749,60762,60775,60793,60804,60808,60812,60821,60838,60842,60846,60853,60863,60873,60884,60897,60909,60925,60936,60948,60952,60956,60964,60975,60992,61004,61016,61027,61031,61035,61046,61057,61061,61069,61073,61081,61085,61093,61108,61131,61146,61177,61204,61231,61258,61285,61312,61339,61348,61356,61364,61369,61389,61409,61414,61419,61437,61442,61452,61457,61471,61476,61481,61498,61507,61519,61523,61531,61539,61543],{"__ignoreMap":37},[41,60464,60465,60467,60469,60471],{"class":43,"line":44},[41,60466,51400],{"class":275},[41,60468,51404],{"class":51403},[41,60470,51407],{"class":54},[41,60472,51410],{"class":275},[41,60474,60475,60477,60479,60481,60483,60485],{"class":43,"line":51},[41,60476,1183],{"class":275},[41,60478,50738],{"class":51403},[41,60480,51419],{"class":54},[41,60482,321],{"class":275},[41,60484,51424],{"class":378},[41,60486,51410],{"class":275},[41,60488,60489],{"class":43,"line":62},[41,60490,80],{"emptyLinePlaceholder":79},[41,60492,60493,60495,60497],{"class":43,"line":70},[41,60494,1183],{"class":275},[41,60496,51437],{"class":51403},[41,60498,51410],{"class":275},[41,60500,60501,60503,60505,60507,60509,60511],{"class":43,"line":76},[41,60502,51444],{"class":275},[41,60504,51447],{"class":51403},[41,60506,51450],{"class":54},[41,60508,321],{"class":275},[41,60510,51455],{"class":378},[41,60512,51410],{"class":275},[41,60514,60515,60517,60519,60521,60523,60525,60527,60529,60531],{"class":43,"line":83},[41,60516,51444],{"class":275},[41,60518,51447],{"class":51403},[41,60520,51466],{"class":54},[41,60522,321],{"class":275},[41,60524,51471],{"class":378},[41,60526,51474],{"class":54},[41,60528,321],{"class":275},[41,60530,51479],{"class":378},[41,60532,51410],{"class":275},[41,60534,60535,60537,60539,60541,60543,60545,60547,60549,60551],{"class":43,"line":89},[41,60536,51444],{"class":275},[41,60538,51447],{"class":51403},[41,60540,15058],{"class":54},[41,60542,321],{"class":275},[41,60544,51494],{"class":378},[41,60546,51474],{"class":54},[41,60548,321],{"class":275},[41,60550,51501],{"class":378},[41,60552,51410],{"class":275},[41,60554,60555,60557,60559,60561,60563],{"class":43,"line":96},[41,60556,51444],{"class":275},[41,60558,51510],{"class":51403},[41,60560,51513],{"class":275},[41,60562,51510],{"class":51403},[41,60564,51410],{"class":275},[41,60566,60567,60569,60571],{"class":43,"line":104},[41,60568,51444],{"class":275},[41,60570,189],{"class":51403},[41,60572,51410],{"class":275},[41,60574,60575,60577],{"class":43,"line":176},[41,60576,51530],{"class":51403},[41,60578,15710],{"class":275},[41,60580,60581,60583,60585,60587],{"class":43,"line":184},[41,60582,51537],{"class":58},[41,60584,51540],{"class":275},[41,60586,465],{"class":58},[41,60588,1434],{"class":275},[41,60590,60591,60593,60595,60597],{"class":43,"line":1757},[41,60592,51549],{"class":58},[41,60594,51540],{"class":275},[41,60596,465],{"class":58},[41,60598,1434],{"class":275},[41,60600,60601,60604,60606,60609],{"class":43,"line":1763},[41,60602,60603],{"class":58},"            box-sizing",[41,60605,51540],{"class":275},[41,60607,60608],{"class":58},"border-box",[41,60610,1434],{"class":275},[41,60612,60613],{"class":43,"line":1768},[41,60614,2667],{"class":275},[41,60616,60617],{"class":43,"line":1782},[41,60618,80],{"emptyLinePlaceholder":79},[41,60620,60621,60624],{"class":43,"line":1787},[41,60622,60623],{"class":51403},"        ul",[41,60625,15710],{"class":275},[41,60627,60628],{"class":43,"line":1793},[41,60629,80],{"emptyLinePlaceholder":79},[41,60631,60632,60635,60637,60639],{"class":43,"line":1814},[41,60633,60634],{"class":58},"            list-style",[41,60636,51540],{"class":275},[41,60638,54840],{"class":58},[41,60640,1434],{"class":275},[41,60642,60643],{"class":43,"line":1819},[41,60644,2667],{"class":275},[41,60646,60647],{"class":43,"line":1833},[41,60648,80],{"emptyLinePlaceholder":79},[41,60650,60651,60654],{"class":43,"line":1838},[41,60652,60653],{"class":54},"        .mi",[41,60655,15710],{"class":275},[41,60657,60658,60661,60663,60665],{"class":43,"line":1867},[41,60659,60660],{"class":58},"            position",[41,60662,51540],{"class":275},[41,60664,54867],{"class":58},[41,60666,1434],{"class":275},[41,60668,60669,60671,60673,60676,60678],{"class":43,"line":1872},[41,60670,51587],{"class":58},[41,60672,51540],{"class":275},[41,60674,60675],{"class":58},"223",[41,60677,51595],{"class":271},[41,60679,1434],{"class":275},[41,60681,60682,60684,60686,60688,60690,60692],{"class":43,"line":1889},[41,60683,51537],{"class":58},[41,60685,51540],{"class":275},[41,60687,584],{"class":58},[41,60689,51595],{"class":271},[41,60691,51659],{"class":58},[41,60693,1434],{"class":275},[41,60695,60696],{"class":43,"line":1894},[41,60697,2667],{"class":275},[41,60699,60700],{"class":43,"line":1899},[41,60701,80],{"emptyLinePlaceholder":79},[41,60703,60704,60706,60709],{"class":43,"line":1904},[41,60705,60653],{"class":54},[41,60707,60708],{"class":51403}," input",[41,60710,15710],{"class":275},[41,60712,60713,60715,60717,60719,60721],{"class":43,"line":1918},[41,60714,51587],{"class":58},[41,60716,51540],{"class":275},[41,60718,60675],{"class":58},[41,60720,51595],{"class":271},[41,60722,1434],{"class":275},[41,60724,60725,60727,60729,60731,60733],{"class":43,"line":1923},[41,60726,51602],{"class":58},[41,60728,51540],{"class":275},[41,60730,880],{"class":58},[41,60732,51595],{"class":271},[41,60734,1434],{"class":275},[41,60736,60737,60739,60741,60743,60745,60747],{"class":43,"line":2715},[41,60738,51549],{"class":58},[41,60740,51540],{"class":275},[41,60742,465],{"class":58},[41,60744,2177],{"class":58},[41,60746,51595],{"class":271},[41,60748,1434],{"class":275},[41,60750,60751,60754,60756,60758,60760],{"class":43,"line":2729},[41,60752,60753],{"class":58},"            font-size",[41,60755,51540],{"class":275},[41,60757,822],{"class":58},[41,60759,51595],{"class":271},[41,60761,1434],{"class":275},[41,60763,60764,60767,60769,60771,60773],{"class":43,"line":2737},[41,60765,60766],{"class":58},"            line-height",[41,60768,51540],{"class":275},[41,60770,880],{"class":58},[41,60772,51595],{"class":271},[41,60774,1434],{"class":275},[41,60776,60777,60780,60782,60784,60786,60788,60791],{"class":43,"line":2742},[41,60778,60779],{"class":58},"            border",[41,60781,51540],{"class":275},[41,60783,26],{"class":58},[41,60785,51595],{"class":271},[41,60787,51624],{"class":58},[41,60789,60790],{"class":58}," #e0e0e0",[41,60792,1434],{"class":275},[41,60794,60795,60798,60800,60802],{"class":43,"line":2748},[41,60796,60797],{"class":58},"            outline",[41,60799,51540],{"class":275},[41,60801,54840],{"class":58},[41,60803,1434],{"class":275},[41,60805,60806],{"class":43,"line":2754},[41,60807,2667],{"class":275},[41,60809,60810],{"class":43,"line":2759},[41,60811,80],{"emptyLinePlaceholder":79},[41,60813,60814,60816,60819],{"class":43,"line":8086},[41,60815,60653],{"class":54},[41,60817,60818],{"class":54}," .search",[41,60820,15710],{"class":275},[41,60822,60823,60825,60827,60829,60831,60833,60836],{"class":43,"line":8110},[41,60824,60779],{"class":58},[41,60826,51540],{"class":275},[41,60828,26],{"class":58},[41,60830,51595],{"class":271},[41,60832,51624],{"class":58},[41,60834,60835],{"class":58}," #ff6700",[41,60837,1434],{"class":275},[41,60839,60840],{"class":43,"line":8115},[41,60841,2667],{"class":275},[41,60843,60844],{"class":43,"line":8121},[41,60845,80],{"emptyLinePlaceholder":79},[41,60847,60848,60851],{"class":43,"line":8148},[41,60849,60850],{"class":54},"        .result-list",[41,60852,15710],{"class":275},[41,60854,60855,60857,60859,60861],{"class":43,"line":8153},[41,60856,51575],{"class":58},[41,60858,51540],{"class":275},[41,60860,54840],{"class":58},[41,60862,1434],{"class":275},[41,60864,60865,60867,60869,60871],{"class":43,"line":8159},[41,60866,60660],{"class":58},[41,60868,51540],{"class":275},[41,60870,54934],{"class":58},[41,60872,1434],{"class":275},[41,60874,60875,60878,60880,60882],{"class":43,"line":8171},[41,60876,60877],{"class":58},"            left",[41,60879,51540],{"class":275},[41,60881,465],{"class":58},[41,60883,1434],{"class":275},[41,60885,60886,60889,60891,60893,60895],{"class":43,"line":8183},[41,60887,60888],{"class":58},"            top",[41,60890,51540],{"class":275},[41,60892,880],{"class":58},[41,60894,51595],{"class":271},[41,60896,1434],{"class":275},[41,60898,60899,60901,60903,60905,60907],{"class":43,"line":8195},[41,60900,51587],{"class":58},[41,60902,51540],{"class":275},[41,60904,60675],{"class":58},[41,60906,51595],{"class":271},[41,60908,1434],{"class":275},[41,60910,60911,60913,60915,60917,60919,60921,60923],{"class":43,"line":9854},[41,60912,60779],{"class":58},[41,60914,51540],{"class":275},[41,60916,26],{"class":58},[41,60918,51595],{"class":271},[41,60920,51624],{"class":58},[41,60922,60835],{"class":58},[41,60924,1434],{"class":275},[41,60926,60927,60930,60932,60934],{"class":43,"line":9879},[41,60928,60929],{"class":58},"            border-top",[41,60931,51540],{"class":275},[41,60933,465],{"class":58},[41,60935,1434],{"class":275},[41,60937,60938,60941,60943,60946],{"class":43,"line":9902},[41,60939,60940],{"class":58},"            background",[41,60942,51540],{"class":275},[41,60944,60945],{"class":58},"#fff",[41,60947,1434],{"class":275},[41,60949,60950],{"class":43,"line":9926},[41,60951,2667],{"class":275},[41,60953,60954],{"class":43,"line":9931},[41,60955,80],{"emptyLinePlaceholder":79},[41,60957,60958,60960,60962],{"class":43,"line":9936},[41,60959,60850],{"class":54},[41,60961,1539],{"class":51403},[41,60963,15710],{"class":275},[41,60965,60966,60968,60970,60973],{"class":43,"line":9941},[41,60967,51575],{"class":58},[41,60969,51540],{"class":275},[41,60971,60972],{"class":58},"block",[41,60974,1434],{"class":275},[41,60976,60977,60979,60981,60983,60985,60988,60990],{"class":43,"line":9950},[41,60978,51549],{"class":58},[41,60980,51540],{"class":275},[41,60982,617],{"class":58},[41,60984,51595],{"class":271},[41,60986,60987],{"class":58}," 15",[41,60989,51595],{"class":271},[41,60991,1434],{"class":275},[41,60993,60994,60996,60998,61000,61002],{"class":43,"line":9955},[41,60995,60753],{"class":58},[41,60997,51540],{"class":275},[41,60999,771],{"class":58},[41,61001,51595],{"class":271},[41,61003,1434],{"class":275},[41,61005,61006,61009,61011,61014],{"class":43,"line":9961},[41,61007,61008],{"class":58},"            color",[41,61010,51540],{"class":275},[41,61012,61013],{"class":58},"#424242",[41,61015,1434],{"class":275},[41,61017,61018,61021,61023,61025],{"class":43,"line":9982},[41,61019,61020],{"class":58},"            text-decoration",[41,61022,51540],{"class":275},[41,61024,54840],{"class":58},[41,61026,1434],{"class":275},[41,61028,61029],{"class":43,"line":9988},[41,61030,2667],{"class":275},[41,61032,61033],{"class":43,"line":10002},[41,61034,80],{"emptyLinePlaceholder":79},[41,61036,61037,61039,61041,61044],{"class":43,"line":10008},[41,61038,60850],{"class":54},[41,61040,1539],{"class":51403},[41,61042,61043],{"class":54},":hover",[41,61045,15710],{"class":275},[41,61047,61048,61050,61052,61055],{"class":43,"line":10035},[41,61049,51743],{"class":58},[41,61051,51540],{"class":275},[41,61053,61054],{"class":58},"#eee",[41,61056,1434],{"class":275},[41,61058,61059],{"class":43,"line":10044},[41,61060,2667],{"class":275},[41,61062,61063,61065,61067],{"class":43,"line":10050},[41,61064,51879],{"class":275},[41,61066,189],{"class":51403},[41,61068,51410],{"class":275},[41,61070,61071],{"class":43,"line":10058},[41,61072,80],{"emptyLinePlaceholder":79},[41,61074,61075,61077,61079],{"class":43,"line":10063},[41,61076,51888],{"class":275},[41,61078,51437],{"class":51403},[41,61080,51410],{"class":275},[41,61082,61083],{"class":43,"line":16742},[41,61084,80],{"emptyLinePlaceholder":79},[41,61086,61087,61089,61091],{"class":43,"line":16748},[41,61088,1183],{"class":275},[41,61090,51903],{"class":51403},[41,61092,51410],{"class":275},[41,61094,61095,61097,61099,61101,61103,61106],{"class":43,"line":16771},[41,61096,51444],{"class":275},[41,61098,51714],{"class":51403},[41,61100,53589],{"class":54},[41,61102,321],{"class":275},[41,61104,61105],{"class":378},"\"mi\"",[41,61107,51410],{"class":275},[41,61109,61110,61112,61114,61116,61118,61121,61124,61126,61129],{"class":43,"line":16777},[41,61111,55405],{"class":275},[41,61113,53924],{"class":51403},[41,61115,53927],{"class":54},[41,61117,321],{"class":275},[41,61119,61120],{"class":378},"\"search\"",[41,61122,61123],{"class":54}," placeholder",[41,61125,321],{"class":275},[41,61127,61128],{"class":378},"\"小米笔记本\"",[41,61130,51410],{"class":275},[41,61132,61133,61135,61137,61139,61141,61144],{"class":43,"line":16800},[41,61134,55405],{"class":275},[41,61136,1280],{"class":51403},[41,61138,53589],{"class":54},[41,61140,321],{"class":275},[41,61142,61143],{"class":378},"\"result-list\"",[41,61145,51410],{"class":275},[41,61147,61148,61151,61153,61156,61158,61161,61163,61166,61169,61171,61173,61175],{"class":43,"line":16814},[41,61149,61150],{"class":275},"            \u003C",[41,61152,227],{"class":51403},[41,61154,61155],{"class":275},">\u003C",[41,61157,511],{"class":51403},[41,61159,61160],{"class":54}," href",[41,61162,321],{"class":275},[41,61164,61165],{"class":378},"\"#\"",[41,61167,61168],{"class":275},">全部商品\u003C\u002F",[41,61170,511],{"class":51403},[41,61172,55417],{"class":275},[41,61174,227],{"class":51403},[41,61176,51410],{"class":275},[41,61178,61179,61181,61183,61185,61187,61189,61191,61193,61196,61198,61200,61202],{"class":43,"line":16834},[41,61180,61150],{"class":275},[41,61182,227],{"class":51403},[41,61184,61155],{"class":275},[41,61186,511],{"class":51403},[41,61188,61160],{"class":54},[41,61190,321],{"class":275},[41,61192,61165],{"class":378},[41,61194,61195],{"class":275},">小米11\u003C\u002F",[41,61197,511],{"class":51403},[41,61199,55417],{"class":275},[41,61201,227],{"class":51403},[41,61203,51410],{"class":275},[41,61205,61206,61208,61210,61212,61214,61216,61218,61220,61223,61225,61227,61229],{"class":43,"line":16840},[41,61207,61150],{"class":275},[41,61209,227],{"class":51403},[41,61211,61155],{"class":275},[41,61213,511],{"class":51403},[41,61215,61160],{"class":54},[41,61217,321],{"class":275},[41,61219,61165],{"class":378},[41,61221,61222],{"class":275},">小米10S\u003C\u002F",[41,61224,511],{"class":51403},[41,61226,55417],{"class":275},[41,61228,227],{"class":51403},[41,61230,51410],{"class":275},[41,61232,61233,61235,61237,61239,61241,61243,61245,61247,61250,61252,61254,61256],{"class":43,"line":16851},[41,61234,61150],{"class":275},[41,61236,227],{"class":51403},[41,61238,61155],{"class":275},[41,61240,511],{"class":51403},[41,61242,61160],{"class":54},[41,61244,321],{"class":275},[41,61246,61165],{"class":378},[41,61248,61249],{"class":275},">小米笔记本\u003C\u002F",[41,61251,511],{"class":51403},[41,61253,55417],{"class":275},[41,61255,227],{"class":51403},[41,61257,51410],{"class":275},[41,61259,61260,61262,61264,61266,61268,61270,61272,61274,61277,61279,61281,61283],{"class":43,"line":16874},[41,61261,61150],{"class":275},[41,61263,227],{"class":51403},[41,61265,61155],{"class":275},[41,61267,511],{"class":51403},[41,61269,61160],{"class":54},[41,61271,321],{"class":275},[41,61273,61165],{"class":378},[41,61275,61276],{"class":275},">小米手机\u003C\u002F",[41,61278,511],{"class":51403},[41,61280,55417],{"class":275},[41,61282,227],{"class":51403},[41,61284,51410],{"class":275},[41,61286,61287,61289,61291,61293,61295,61297,61299,61301,61304,61306,61308,61310],{"class":43,"line":16896},[41,61288,61150],{"class":275},[41,61290,227],{"class":51403},[41,61292,61155],{"class":275},[41,61294,511],{"class":51403},[41,61296,61160],{"class":54},[41,61298,321],{"class":275},[41,61300,61165],{"class":378},[41,61302,61303],{"class":275},">黑鲨4\u003C\u002F",[41,61305,511],{"class":51403},[41,61307,55417],{"class":275},[41,61309,227],{"class":51403},[41,61311,51410],{"class":275},[41,61313,61314,61316,61318,61320,61322,61324,61326,61328,61331,61333,61335,61337],{"class":43,"line":16901},[41,61315,61150],{"class":275},[41,61317,227],{"class":51403},[41,61319,61155],{"class":275},[41,61321,511],{"class":51403},[41,61323,61160],{"class":54},[41,61325,321],{"class":275},[41,61327,61165],{"class":378},[41,61329,61330],{"class":275},">空调\u003C\u002F",[41,61332,511],{"class":51403},[41,61334,55417],{"class":275},[41,61336,227],{"class":51403},[41,61338,51410],{"class":275},[41,61340,61341,61344,61346],{"class":43,"line":16907},[41,61342,61343],{"class":275},"        \u003C\u002F",[41,61345,1280],{"class":51403},[41,61347,51410],{"class":275},[41,61349,61350,61352,61354],{"class":43,"line":16921},[41,61351,51879],{"class":275},[41,61353,51714],{"class":51403},[41,61355,51410],{"class":275},[41,61357,61358,61360,61362],{"class":43,"line":16934},[41,61359,51444],{"class":275},[41,61361,51916],{"class":51403},[41,61363,51410],{"class":275},[41,61365,61366],{"class":43,"line":16939},[41,61367,61368],{"class":47},"        \u002F\u002F 1. 获取元素\n",[41,61370,61371,61374,61376,61378,61380,61382,61384,61387],{"class":43,"line":16953},[41,61372,61373],{"class":271},"        const",[41,61375,60708],{"class":58},[41,61377,13702],{"class":271},[41,61379,54499],{"class":275},[41,61381,54502],{"class":54},[41,61383,276],{"class":275},[41,61385,61386],{"class":378},"'[type=search]'",[41,61388,282],{"class":275},[41,61390,61391,61393,61396,61398,61400,61402,61404,61407],{"class":43,"line":16958},[41,61392,61373],{"class":271},[41,61394,61395],{"class":58}," ul",[41,61397,13702],{"class":271},[41,61399,54499],{"class":275},[41,61401,54502],{"class":54},[41,61403,276],{"class":275},[41,61405,61406],{"class":378},"'.result-list'",[41,61408,282],{"class":275},[41,61410,61411],{"class":43,"line":16964},[41,61412,61413],{"class":47},"        \u002F\u002F console.log(input)\n",[41,61415,61416],{"class":43,"line":16969},[41,61417,61418],{"class":47},"        \u002F\u002F 2. 监听事件 获得焦点\n",[41,61420,61421,61424,61426,61428,61431,61433,61435],{"class":43,"line":16983},[41,61422,61423],{"class":275},"        input.",[41,61425,57916],{"class":54},[41,61427,276],{"class":275},[41,61429,61430],{"class":378},"'focus'",[41,61432,12573],{"class":275},[41,61434,54552],{"class":271},[41,61436,54555],{"class":275},[41,61438,61439],{"class":43,"line":16988},[41,61440,61441],{"class":47},"            \u002F\u002F ul显示\n",[41,61443,61444,61447,61449],{"class":43,"line":16993},[41,61445,61446],{"class":275},"            ul.style.display ",[41,61448,321],{"class":271},[41,61450,61451],{"class":378}," 'block'\n",[41,61453,61454],{"class":43,"line":17007},[41,61455,61456],{"class":47},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[41,61458,61459,61462,61464,61466,61469],{"class":43,"line":17019},[41,61460,61461],{"class":275},"            input.classList.",[41,61463,5472],{"class":54},[41,61465,276],{"class":275},[41,61467,61468],{"class":378},"'search'",[41,61470,282],{"class":275},[41,61472,61473],{"class":43,"line":17024},[41,61474,61475],{"class":275},"        })\n",[41,61477,61478],{"class":43,"line":17037},[41,61479,61480],{"class":47},"        \u002F\u002F 3. 监听事件 失去焦点\n",[41,61482,61483,61485,61487,61489,61492,61494,61496],{"class":43,"line":17042},[41,61484,61423],{"class":275},[41,61486,57916],{"class":54},[41,61488,276],{"class":275},[41,61490,61491],{"class":378},"'blur'",[41,61493,12573],{"class":275},[41,61495,54552],{"class":271},[41,61497,54555],{"class":275},[41,61499,61500,61502,61504],{"class":43,"line":17047},[41,61501,61446],{"class":275},[41,61503,321],{"class":271},[41,61505,61506],{"class":378}," 'none'\n",[41,61508,61509,61511,61513,61515,61517],{"class":43,"line":17052},[41,61510,61461],{"class":275},[41,61512,57109],{"class":54},[41,61514,276],{"class":275},[41,61516,61468],{"class":378},[41,61518,282],{"class":275},[41,61520,61521],{"class":43,"line":17065},[41,61522,61475],{"class":275},[41,61524,61525,61527,61529],{"class":43,"line":17070},[41,61526,51879],{"class":275},[41,61528,51916],{"class":51403},[41,61530,51410],{"class":275},[41,61532,61533,61535,61537],{"class":43,"line":32736},[41,61534,51888],{"class":275},[41,61536,51903],{"class":51403},[41,61538,51410],{"class":275},[41,61540,61541],{"class":43,"line":32742},[41,61542,80],{"emptyLinePlaceholder":79},[41,61544,61545,61547,61549],{"class":43,"line":32748},[41,61546,51888],{"class":275},[41,61548,50738],{"class":51403},[41,61550,51410],{"class":275},[22136,61552,61554],{"id":61553},"_3253-键盘事件","3.2.5.3 键盘事件",[20,61556,61557],{},"评论字数统计案例",[20,61559,61560],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[20,61562,61563],{},"牢记focus伪类选择器",[51447,61565],{"charSet":61566},"UTF-8",[51447,61568],{"name":61569,"content":61570},"viewport","width=device-width, initial-scale=1.0",[51510,61572,61573],{},"Document",[189,61575,61576],{},"\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",[53924,61578],{"type":5325},[1280,61580,61581,61584],{},[227,61582,61583],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[227,61585,61586],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[32,61588,61590],{"className":50736,"code":61589,"language":50738,"meta":37,"style":37},"\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",[24,61591,61592,61602,61616,61620,61628,61642,61662,61682,61695,61703,61710,61723,61737,61747,61757,61761,61765,61772,61784,61796,61808,61820,61849,61862,61866,61870,61879,61890,61902,61913,61924,61936,61947,61959,61975,61987,61991,61995,62006,62017,62027,62039,62043,62047,62055,62066,62076,62087,62099,62112,62124,62136,62140,62144,62153,62165,62176,62189,62200,62214,62218,62222,62229,62241,62253,62263,62267,62271,62280,62292,62302,62306,62310,62321,62331,62350,62363,62367,62371,62381,62391,62395,62399,62410,62421,62433,62445,62449,62453,62464,62475,62489,62493,62497,62508,62518,62530,62534,62542,62550,62554,62562,62577,62596,62636,62649,62657,62671,62691,62699,62714,62737,62755,62770,62790,62810,62830,62838,62846,62854,62862,62882,62902,62907,62924,62933,62937,62942,62958,62966,62970,62975,62992,62997,63022,63026,63030,63035,63040,63048,63056,63060],{"__ignoreMap":37},[41,61593,61594,61596,61598,61600],{"class":43,"line":44},[41,61595,51400],{"class":275},[41,61597,51404],{"class":51403},[41,61599,51407],{"class":54},[41,61601,51410],{"class":275},[41,61603,61604,61606,61608,61610,61612,61614],{"class":43,"line":51},[41,61605,1183],{"class":275},[41,61607,50738],{"class":51403},[41,61609,51419],{"class":54},[41,61611,321],{"class":275},[41,61613,51424],{"class":378},[41,61615,51410],{"class":275},[41,61617,61618],{"class":43,"line":62},[41,61619,80],{"emptyLinePlaceholder":79},[41,61621,61622,61624,61626],{"class":43,"line":70},[41,61623,1183],{"class":275},[41,61625,51437],{"class":51403},[41,61627,51410],{"class":275},[41,61629,61630,61632,61634,61636,61638,61640],{"class":43,"line":76},[41,61631,52247],{"class":275},[41,61633,51447],{"class":51403},[41,61635,51450],{"class":54},[41,61637,321],{"class":275},[41,61639,51455],{"class":378},[41,61641,51410],{"class":275},[41,61643,61644,61646,61648,61650,61652,61654,61656,61658,61660],{"class":43,"line":83},[41,61645,52247],{"class":275},[41,61647,51447],{"class":51403},[41,61649,51466],{"class":54},[41,61651,321],{"class":275},[41,61653,51471],{"class":378},[41,61655,51474],{"class":54},[41,61657,321],{"class":275},[41,61659,51479],{"class":378},[41,61661,51410],{"class":275},[41,61663,61664,61666,61668,61670,61672,61674,61676,61678,61680],{"class":43,"line":89},[41,61665,52247],{"class":275},[41,61667,51447],{"class":51403},[41,61669,15058],{"class":54},[41,61671,321],{"class":275},[41,61673,51494],{"class":378},[41,61675,51474],{"class":54},[41,61677,321],{"class":275},[41,61679,51501],{"class":378},[41,61681,51410],{"class":275},[41,61683,61684,61686,61688,61691,61693],{"class":43,"line":96},[41,61685,52247],{"class":275},[41,61687,51510],{"class":51403},[41,61689,61690],{"class":275},">评论回车发布\u003C\u002F",[41,61692,51510],{"class":51403},[41,61694,51410],{"class":275},[41,61696,61697,61699,61701],{"class":43,"line":104},[41,61698,52247],{"class":275},[41,61700,189],{"class":51403},[41,61702,51410],{"class":275},[41,61704,61705,61708],{"class":43,"line":176},[41,61706,61707],{"class":54},"    .wrapper",[41,61709,15710],{"class":275},[41,61711,61712,61715,61717,61719,61721],{"class":43,"line":184},[41,61713,61714],{"class":58},"      min-width",[41,61716,51540],{"class":275},[41,61718,4125],{"class":58},[41,61720,51595],{"class":271},[41,61722,1434],{"class":275},[41,61724,61725,61728,61730,61733,61735],{"class":43,"line":1757},[41,61726,61727],{"class":58},"      max-width",[41,61729,51540],{"class":275},[41,61731,61732],{"class":58},"800",[41,61734,51595],{"class":271},[41,61736,1434],{"class":275},[41,61738,61739,61741,61743,61745],{"class":43,"line":1763},[41,61740,55112],{"class":58},[41,61742,51540],{"class":275},[41,61744,51580],{"class":58},[41,61746,1434],{"class":275},[41,61748,61749,61751,61753,61755],{"class":43,"line":1768},[41,61750,55123],{"class":58},[41,61752,51540],{"class":275},[41,61754,51683],{"class":58},[41,61756,1434],{"class":275},[41,61758,61759],{"class":43,"line":1782},[41,61760,2326],{"class":275},[41,61762,61763],{"class":43,"line":1787},[41,61764,80],{"emptyLinePlaceholder":79},[41,61766,61767,61770],{"class":43,"line":1793},[41,61768,61769],{"class":54},"    .avatar",[41,61771,15710],{"class":275},[41,61773,61774,61776,61778,61780,61782],{"class":43,"line":1814},[41,61775,54874],{"class":58},[41,61777,51540],{"class":275},[41,61779,880],{"class":58},[41,61781,51595],{"class":271},[41,61783,1434],{"class":275},[41,61785,61786,61788,61790,61792,61794],{"class":43,"line":1819},[41,61787,54888],{"class":58},[41,61789,51540],{"class":275},[41,61791,880],{"class":58},[41,61793,51595],{"class":271},[41,61795,1434],{"class":275},[41,61797,61798,61800,61802,61804,61806],{"class":43,"line":1833},[41,61799,55237],{"class":58},[41,61801,51540],{"class":275},[41,61803,929],{"class":58},[41,61805,601],{"class":271},[41,61807,1434],{"class":275},[41,61809,61810,61813,61815,61818],{"class":43,"line":1838},[41,61811,61812],{"class":58},"      overflow",[41,61814,51540],{"class":275},[41,61816,61817],{"class":58},"hidden",[41,61819,1434],{"class":275},[41,61821,61822,61825,61827,61830,61832,61835,61837,61840,61842,61844,61847],{"class":43,"line":1867},[41,61823,61824],{"class":58},"      background",[41,61826,51540],{"class":275},[41,61828,61829],{"class":58},"url",[41,61831,276],{"class":275},[41,61833,61834],{"class":5354},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[41,61836,13852],{"class":275},[41,61838,61839],{"class":58},"no-repeat",[41,61841,17282],{"class":58},[41,61843,25081],{"class":275},[41,61845,61846],{"class":58},"cover",[41,61848,1434],{"class":275},[41,61850,61851,61854,61856,61858,61860],{"class":43,"line":1872},[41,61852,61853],{"class":58},"      margin-right",[41,61855,51540],{"class":275},[41,61857,973],{"class":58},[41,61859,51595],{"class":271},[41,61861,1434],{"class":275},[41,61863,61864],{"class":43,"line":1889},[41,61865,2326],{"class":275},[41,61867,61868],{"class":43,"line":1894},[41,61869,80],{"emptyLinePlaceholder":79},[41,61871,61872,61874,61877],{"class":43,"line":1899},[41,61873,61707],{"class":54},[41,61875,61876],{"class":51403}," textarea",[41,61878,15710],{"class":275},[41,61880,61881,61884,61886,61888],{"class":43,"line":1904},[41,61882,61883],{"class":58},"      outline",[41,61885,51540],{"class":275},[41,61887,54840],{"class":58},[41,61889,1434],{"class":275},[41,61891,61892,61895,61897,61900],{"class":43,"line":1918},[41,61893,61894],{"class":58},"      border-color",[41,61896,51540],{"class":275},[41,61898,61899],{"class":58},"transparent",[41,61901,1434],{"class":275},[41,61903,61904,61907,61909,61911],{"class":43,"line":1923},[41,61905,61906],{"class":58},"      resize",[41,61908,51540],{"class":275},[41,61910,54840],{"class":58},[41,61912,1434],{"class":275},[41,61914,61915,61917,61919,61922],{"class":43,"line":2715},[41,61916,61824],{"class":58},[41,61918,51540],{"class":275},[41,61920,61921],{"class":58},"#f5f5f5",[41,61923,1434],{"class":275},[41,61925,61926,61928,61930,61932,61934],{"class":43,"line":2729},[41,61927,55237],{"class":58},[41,61929,51540],{"class":275},[41,61931,566],{"class":58},[41,61933,51595],{"class":271},[41,61935,1434],{"class":275},[41,61937,61938,61941,61943,61945],{"class":43,"line":2737},[41,61939,61940],{"class":58},"      flex",[41,61942,51540],{"class":275},[41,61944,26],{"class":58},[41,61946,1434],{"class":275},[41,61948,61949,61951,61953,61955,61957],{"class":43,"line":2742},[41,61950,54798],{"class":58},[41,61952,51540],{"class":275},[41,61954,719],{"class":58},[41,61956,51595],{"class":271},[41,61958,1434],{"class":275},[41,61960,61961,61964,61966,61968,61971,61973],{"class":43,"line":2748},[41,61962,61963],{"class":58},"      transition",[41,61965,51540],{"class":275},[41,61967,28224],{"class":58},[41,61969,61970],{"class":58}," 0.5",[41,61972,968],{"class":271},[41,61974,1434],{"class":275},[41,61976,61977,61979,61981,61983,61985],{"class":43,"line":2754},[41,61978,54888],{"class":58},[41,61980,51540],{"class":275},[41,61982,1224],{"class":58},[41,61984,51595],{"class":271},[41,61986,1434],{"class":275},[41,61988,61989],{"class":43,"line":2759},[41,61990,2326],{"class":275},[41,61992,61993],{"class":43,"line":8086},[41,61994,80],{"emptyLinePlaceholder":79},[41,61996,61997,61999,62001,62004],{"class":43,"line":8110},[41,61998,61707],{"class":54},[41,62000,61876],{"class":51403},[41,62002,62003],{"class":54},":focus",[41,62005,15710],{"class":275},[41,62007,62008,62010,62012,62015],{"class":43,"line":8115},[41,62009,61894],{"class":58},[41,62011,51540],{"class":275},[41,62013,62014],{"class":58},"#e4e4e4",[41,62016,1434],{"class":275},[41,62018,62019,62021,62023,62025],{"class":43,"line":8121},[41,62020,61824],{"class":58},[41,62022,51540],{"class":275},[41,62024,60945],{"class":58},[41,62026,1434],{"class":275},[41,62028,62029,62031,62033,62035,62037],{"class":43,"line":8148},[41,62030,54888],{"class":58},[41,62032,51540],{"class":275},[41,62034,929],{"class":58},[41,62036,51595],{"class":271},[41,62038,1434],{"class":275},[41,62040,62041],{"class":43,"line":8153},[41,62042,2326],{"class":275},[41,62044,62045],{"class":43,"line":8159},[41,62046,80],{"emptyLinePlaceholder":79},[41,62048,62049,62051,62053],{"class":43,"line":8171},[41,62050,61707],{"class":54},[41,62052,57570],{"class":51403},[41,62054,15710],{"class":275},[41,62056,62057,62059,62061,62064],{"class":43,"line":8183},[41,62058,61824],{"class":58},[41,62060,51540],{"class":275},[41,62062,62063],{"class":58},"#00aeec",[41,62065,1434],{"class":275},[41,62067,62068,62070,62072,62074],{"class":43,"line":8195},[41,62069,57519],{"class":58},[41,62071,51540],{"class":275},[41,62073,60945],{"class":58},[41,62075,1434],{"class":275},[41,62077,62078,62081,62083,62085],{"class":43,"line":9854},[41,62079,62080],{"class":58},"      border",[41,62082,51540],{"class":275},[41,62084,54840],{"class":58},[41,62086,1434],{"class":275},[41,62088,62089,62091,62093,62095,62097],{"class":43,"line":9879},[41,62090,55237],{"class":58},[41,62092,51540],{"class":275},[41,62094,566],{"class":58},[41,62096,51595],{"class":271},[41,62098,1434],{"class":275},[41,62100,62101,62104,62106,62108,62110],{"class":43,"line":9902},[41,62102,62103],{"class":58},"      margin-left",[41,62105,51540],{"class":275},[41,62107,719],{"class":58},[41,62109,51595],{"class":271},[41,62111,1434],{"class":275},[41,62113,62114,62116,62118,62120,62122],{"class":43,"line":9926},[41,62115,54874],{"class":58},[41,62117,51540],{"class":275},[41,62119,629],{"class":58},[41,62121,51595],{"class":271},[41,62123,1434],{"class":275},[41,62125,62126,62129,62131,62134],{"class":43,"line":9931},[41,62127,62128],{"class":58},"      cursor",[41,62130,51540],{"class":275},[41,62132,62133],{"class":58},"pointer",[41,62135,1434],{"class":275},[41,62137,62138],{"class":43,"line":9936},[41,62139,2326],{"class":275},[41,62141,62142],{"class":43,"line":9941},[41,62143,80],{"emptyLinePlaceholder":79},[41,62145,62146,62148,62151],{"class":43,"line":9950},[41,62147,61707],{"class":54},[41,62149,62150],{"class":54}," .total",[41,62152,15710],{"class":275},[41,62154,62155,62157,62159,62161,62163],{"class":43,"line":9955},[41,62156,61853],{"class":58},[41,62158,51540],{"class":275},[41,62160,885],{"class":58},[41,62162,51595],{"class":271},[41,62164,1434],{"class":275},[41,62166,62167,62169,62171,62174],{"class":43,"line":9961},[41,62168,57519],{"class":58},[41,62170,51540],{"class":275},[41,62172,62173],{"class":58},"#999",[41,62175,1434],{"class":275},[41,62177,62178,62181,62183,62185,62187],{"class":43,"line":9982},[41,62179,62180],{"class":58},"      margin-top",[41,62182,51540],{"class":275},[41,62184,592],{"class":58},[41,62186,51595],{"class":271},[41,62188,1434],{"class":275},[41,62190,62191,62194,62196,62198],{"class":43,"line":9988},[41,62192,62193],{"class":58},"      opacity",[41,62195,51540],{"class":275},[41,62197,465],{"class":58},[41,62199,1434],{"class":275},[41,62201,62202,62204,62206,62208,62210,62212],{"class":43,"line":10002},[41,62203,61963],{"class":58},[41,62205,51540],{"class":275},[41,62207,28224],{"class":58},[41,62209,61970],{"class":58},[41,62211,968],{"class":271},[41,62213,1434],{"class":275},[41,62215,62216],{"class":43,"line":10008},[41,62217,2326],{"class":275},[41,62219,62220],{"class":43,"line":10035},[41,62221,80],{"emptyLinePlaceholder":79},[41,62223,62224,62227],{"class":43,"line":10044},[41,62225,62226],{"class":54},"    .list",[41,62228,15710],{"class":275},[41,62230,62231,62233,62235,62237,62239],{"class":43,"line":10050},[41,62232,61714],{"class":58},[41,62234,51540],{"class":275},[41,62236,4125],{"class":58},[41,62238,51595],{"class":271},[41,62240,1434],{"class":275},[41,62242,62243,62245,62247,62249,62251],{"class":43,"line":10058},[41,62244,61727],{"class":58},[41,62246,51540],{"class":275},[41,62248,61732],{"class":58},[41,62250,51595],{"class":271},[41,62252,1434],{"class":275},[41,62254,62255,62257,62259,62261],{"class":43,"line":10063},[41,62256,55112],{"class":58},[41,62258,51540],{"class":275},[41,62260,51580],{"class":58},[41,62262,1434],{"class":275},[41,62264,62265],{"class":43,"line":16742},[41,62266,2326],{"class":275},[41,62268,62269],{"class":43,"line":16748},[41,62270,80],{"emptyLinePlaceholder":79},[41,62272,62273,62275,62278],{"class":43,"line":16771},[41,62274,62226],{"class":54},[41,62276,62277],{"class":54}," .item",[41,62279,15710],{"class":275},[41,62281,62282,62284,62286,62288,62290],{"class":43,"line":16777},[41,62283,54874],{"class":58},[41,62285,51540],{"class":275},[41,62287,584],{"class":58},[41,62289,601],{"class":271},[41,62291,1434],{"class":275},[41,62293,62294,62296,62298,62300],{"class":43,"line":16800},[41,62295,55112],{"class":58},[41,62297,51540],{"class":275},[41,62299,51580],{"class":58},[41,62301,1434],{"class":275},[41,62303,62304],{"class":43,"line":16814},[41,62305,2326],{"class":275},[41,62307,62308],{"class":43,"line":16834},[41,62309,80],{"emptyLinePlaceholder":79},[41,62311,62312,62314,62316,62319],{"class":43,"line":16840},[41,62313,62226],{"class":54},[41,62315,62277],{"class":54},[41,62317,62318],{"class":54}," .info",[41,62320,15710],{"class":275},[41,62322,62323,62325,62327,62329],{"class":43,"line":16851},[41,62324,61940],{"class":58},[41,62326,51540],{"class":275},[41,62328,26],{"class":58},[41,62330,1434],{"class":275},[41,62332,62333,62336,62338,62340,62342,62345,62348],{"class":43,"line":16874},[41,62334,62335],{"class":58},"      border-bottom",[41,62337,51540],{"class":275},[41,62339,26],{"class":58},[41,62341,51595],{"class":271},[41,62343,62344],{"class":58}," dashed",[41,62346,62347],{"class":58}," #e4e4e4",[41,62349,1434],{"class":275},[41,62351,62352,62355,62357,62359,62361],{"class":43,"line":16896},[41,62353,62354],{"class":58},"      padding-bottom",[41,62356,51540],{"class":275},[41,62358,719],{"class":58},[41,62360,51595],{"class":271},[41,62362,1434],{"class":275},[41,62364,62365],{"class":43,"line":16901},[41,62366,2326],{"class":275},[41,62368,62369],{"class":43,"line":16907},[41,62370,80],{"emptyLinePlaceholder":79},[41,62372,62373,62375,62377,62379],{"class":43,"line":16921},[41,62374,62226],{"class":54},[41,62376,62277],{"class":54},[41,62378,6963],{"class":51403},[41,62380,15710],{"class":275},[41,62382,62383,62385,62387,62389],{"class":43,"line":16934},[41,62384,54809],{"class":58},[41,62386,51540],{"class":275},[41,62388,465],{"class":58},[41,62390,1434],{"class":275},[41,62392,62393],{"class":43,"line":16939},[41,62394,2326],{"class":275},[41,62396,62397],{"class":43,"line":16953},[41,62398,80],{"emptyLinePlaceholder":79},[41,62400,62401,62403,62405,62408],{"class":43,"line":16958},[41,62402,62226],{"class":54},[41,62404,62277],{"class":54},[41,62406,62407],{"class":54}," .name",[41,62409,15710],{"class":275},[41,62411,62412,62414,62416,62419],{"class":43,"line":16964},[41,62413,57519],{"class":58},[41,62415,51540],{"class":275},[41,62417,62418],{"class":58},"#FB7299",[41,62420,1434],{"class":275},[41,62422,62423,62425,62427,62429,62431],{"class":43,"line":16969},[41,62424,55025],{"class":58},[41,62426,51540],{"class":275},[41,62428,822],{"class":58},[41,62430,51595],{"class":271},[41,62432,1434],{"class":275},[41,62434,62435,62438,62440,62443],{"class":43,"line":16983},[41,62436,62437],{"class":58},"      font-weight",[41,62439,51540],{"class":275},[41,62441,62442],{"class":58},"bold",[41,62444,1434],{"class":275},[41,62446,62447],{"class":43,"line":16988},[41,62448,2326],{"class":275},[41,62450,62451],{"class":43,"line":16993},[41,62452,80],{"emptyLinePlaceholder":79},[41,62454,62455,62457,62459,62462],{"class":43,"line":17007},[41,62456,62226],{"class":54},[41,62458,62277],{"class":54},[41,62460,62461],{"class":54}," .text",[41,62463,15710],{"class":275},[41,62465,62466,62468,62470,62473],{"class":43,"line":17019},[41,62467,57519],{"class":58},[41,62469,51540],{"class":275},[41,62471,62472],{"class":58},"#333",[41,62474,1434],{"class":275},[41,62476,62477,62479,62481,62483,62485,62487],{"class":43,"line":17024},[41,62478,54798],{"class":58},[41,62480,51540],{"class":275},[41,62482,719],{"class":58},[41,62484,51595],{"class":271},[41,62486,4231],{"class":58},[41,62488,1434],{"class":275},[41,62490,62491],{"class":43,"line":17037},[41,62492,2326],{"class":275},[41,62494,62495],{"class":43,"line":17042},[41,62496,80],{"emptyLinePlaceholder":79},[41,62498,62499,62501,62503,62506],{"class":43,"line":17047},[41,62500,62226],{"class":54},[41,62502,62277],{"class":54},[41,62504,62505],{"class":54}," .time",[41,62507,15710],{"class":275},[41,62509,62510,62512,62514,62516],{"class":43,"line":17052},[41,62511,57519],{"class":58},[41,62513,51540],{"class":275},[41,62515,62173],{"class":58},[41,62517,1434],{"class":275},[41,62519,62520,62522,62524,62526,62528],{"class":43,"line":17065},[41,62521,55025],{"class":58},[41,62523,51540],{"class":275},[41,62525,771],{"class":58},[41,62527,51595],{"class":271},[41,62529,1434],{"class":275},[41,62531,62532],{"class":43,"line":17070},[41,62533,2326],{"class":275},[41,62535,62536,62538,62540],{"class":43,"line":32736},[41,62537,52520],{"class":275},[41,62539,189],{"class":51403},[41,62541,51410],{"class":275},[41,62543,62544,62546,62548],{"class":43,"line":32742},[41,62545,51888],{"class":275},[41,62547,51437],{"class":51403},[41,62549,51410],{"class":275},[41,62551,62552],{"class":43,"line":32748},[41,62553,80],{"emptyLinePlaceholder":79},[41,62555,62556,62558,62560],{"class":43,"line":32754},[41,62557,1183],{"class":275},[41,62559,51903],{"class":51403},[41,62561,51410],{"class":275},[41,62563,62564,62566,62568,62570,62572,62575],{"class":43,"line":32760},[41,62565,52247],{"class":275},[41,62567,51714],{"class":51403},[41,62569,53589],{"class":54},[41,62571,321],{"class":275},[41,62573,62574],{"class":378},"\"wrapper\"",[41,62576,51410],{"class":275},[41,62578,62579,62581,62583,62585,62587,62590,62592,62594],{"class":43,"line":32771},[41,62580,51444],{"class":275},[41,62582,714],{"class":51403},[41,62584,53589],{"class":54},[41,62586,321],{"class":275},[41,62588,62589],{"class":378},"\"avatar\"",[41,62591,55417],{"class":275},[41,62593,714],{"class":51403},[41,62595,51410],{"class":275},[41,62597,62598,62600,62602,62604,62606,62609,62611,62613,62616,62618,62620,62622,62625,62627,62630,62632,62634],{"class":43,"line":32777},[41,62599,51444],{"class":275},[41,62601,54391],{"class":51403},[41,62603,15097],{"class":54},[41,62605,321],{"class":275},[41,62607,62608],{"class":378},"\"tx\"",[41,62610,61123],{"class":54},[41,62612,321],{"class":275},[41,62614,62615],{"class":378},"\"发一条友善的评论\"",[41,62617,54414],{"class":54},[41,62619,321],{"class":275},[41,62621,3839],{"class":378},[41,62623,62624],{"class":54}," maxlength",[41,62626,321],{"class":275},[41,62628,62629],{"class":378},"\"200\"",[41,62631,55417],{"class":275},[41,62633,54391],{"class":51403},[41,62635,51410],{"class":275},[41,62637,62638,62640,62642,62645,62647],{"class":43,"line":32797},[41,62639,51444],{"class":275},[41,62641,53990],{"class":51403},[41,62643,62644],{"class":275},">发布\u003C\u002F",[41,62646,53990],{"class":51403},[41,62648,51410],{"class":275},[41,62650,62651,62653,62655],{"class":43,"line":32803},[41,62652,52520],{"class":275},[41,62654,51714],{"class":51403},[41,62656,51410],{"class":275},[41,62658,62659,62661,62663,62665,62667,62669],{"class":43,"line":32814},[41,62660,52247],{"class":275},[41,62662,51714],{"class":51403},[41,62664,53589],{"class":54},[41,62666,321],{"class":275},[41,62668,62574],{"class":378},[41,62670,51410],{"class":275},[41,62672,62673,62675,62677,62679,62681,62684,62687,62689],{"class":43,"line":32820},[41,62674,51444],{"class":275},[41,62676,41],{"class":51403},[41,62678,53589],{"class":54},[41,62680,321],{"class":275},[41,62682,62683],{"class":378},"\"total\"",[41,62685,62686],{"class":275},">0\u002F200字\u003C\u002F",[41,62688,41],{"class":51403},[41,62690,51410],{"class":275},[41,62692,62693,62695,62697],{"class":43,"line":32826},[41,62694,52520],{"class":275},[41,62696,51714],{"class":51403},[41,62698,51410],{"class":275},[41,62700,62701,62703,62705,62707,62709,62712],{"class":43,"line":32832},[41,62702,52247],{"class":275},[41,62704,51714],{"class":51403},[41,62706,53589],{"class":54},[41,62708,321],{"class":275},[41,62710,62711],{"class":378},"\"list\"",[41,62713,51410],{"class":275},[41,62715,62716,62718,62720,62722,62724,62727,62730,62732,62735],{"class":43,"line":32838},[41,62717,51444],{"class":275},[41,62719,51714],{"class":51403},[41,62721,53589],{"class":54},[41,62723,321],{"class":275},[41,62725,62726],{"class":378},"\"item\"",[41,62728,62729],{"class":54}," style",[41,62731,321],{"class":275},[41,62733,62734],{"class":378},"\"display: none;\"",[41,62736,51410],{"class":275},[41,62738,62739,62741,62743,62745,62747,62749,62751,62753],{"class":43,"line":32844},[41,62740,55337],{"class":275},[41,62742,714],{"class":51403},[41,62744,53589],{"class":54},[41,62746,321],{"class":275},[41,62748,62589],{"class":378},[41,62750,55417],{"class":275},[41,62752,714],{"class":51403},[41,62754,51410],{"class":275},[41,62756,62757,62759,62761,62763,62765,62768],{"class":43,"line":32850},[41,62758,55337],{"class":275},[41,62760,51714],{"class":51403},[41,62762,53589],{"class":54},[41,62764,321],{"class":275},[41,62766,62767],{"class":378},"\"info\"",[41,62769,51410],{"class":275},[41,62771,62772,62774,62776,62778,62780,62783,62786,62788],{"class":43,"line":32856},[41,62773,55405],{"class":275},[41,62775,20],{"class":51403},[41,62777,53589],{"class":54},[41,62779,321],{"class":275},[41,62781,62782],{"class":378},"\"name\"",[41,62784,62785],{"class":275},">清风徐来\u003C\u002F",[41,62787,20],{"class":51403},[41,62789,51410],{"class":275},[41,62791,62792,62794,62796,62798,62800,62803,62806,62808],{"class":43,"line":32876},[41,62793,55405],{"class":275},[41,62795,20],{"class":51403},[41,62797,53589],{"class":54},[41,62799,321],{"class":275},[41,62801,62802],{"class":378},"\"text\"",[41,62804,62805],{"class":275},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[41,62807,20],{"class":51403},[41,62809,51410],{"class":275},[41,62811,62812,62814,62816,62818,62820,62823,62826,62828],{"class":43,"line":32882},[41,62813,55405],{"class":275},[41,62815,20],{"class":51403},[41,62817,53589],{"class":54},[41,62819,321],{"class":275},[41,62821,62822],{"class":378},"\"time\"",[41,62824,62825],{"class":275},">2022-10-10 20:29:21\u003C\u002F",[41,62827,20],{"class":51403},[41,62829,51410],{"class":275},[41,62831,62832,62834,62836],{"class":43,"line":32898},[41,62833,55510],{"class":275},[41,62835,51714],{"class":51403},[41,62837,51410],{"class":275},[41,62839,62840,62842,62844],{"class":43,"line":32904},[41,62841,51879],{"class":275},[41,62843,51714],{"class":51403},[41,62845,51410],{"class":275},[41,62847,62848,62850,62852],{"class":43,"line":32918},[41,62849,52520],{"class":275},[41,62851,51714],{"class":51403},[41,62853,51410],{"class":275},[41,62855,62856,62858,62860],{"class":43,"line":32924},[41,62857,52247],{"class":275},[41,62859,51916],{"class":51403},[41,62861,51410],{"class":275},[41,62863,62864,62866,62869,62871,62873,62875,62877,62880],{"class":43,"line":32939},[41,62865,11359],{"class":271},[41,62867,62868],{"class":58}," tx",[41,62870,13702],{"class":271},[41,62872,54499],{"class":275},[41,62874,54502],{"class":54},[41,62876,276],{"class":275},[41,62878,62879],{"class":378},"'#tx'",[41,62881,282],{"class":275},[41,62883,62884,62886,62889,62891,62893,62895,62897,62900],{"class":43,"line":32945},[41,62885,11359],{"class":271},[41,62887,62888],{"class":58}," total",[41,62890,13702],{"class":271},[41,62892,54499],{"class":275},[41,62894,54502],{"class":54},[41,62896,276],{"class":275},[41,62898,62899],{"class":378},"'.total'",[41,62901,282],{"class":275},[41,62903,62904],{"class":43,"line":32954},[41,62905,62906],{"class":47},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[41,62908,62909,62912,62914,62916,62918,62920,62922],{"class":43,"line":32960},[41,62910,62911],{"class":275},"    tx.",[41,62913,57916],{"class":54},[41,62915,276],{"class":275},[41,62917,61430],{"class":378},[41,62919,12573],{"class":275},[41,62921,54552],{"class":271},[41,62923,54555],{"class":275},[41,62925,62926,62929,62931],{"class":43,"line":32969},[41,62927,62928],{"class":275},"      total.style.opacity ",[41,62930,321],{"class":271},[41,62932,55802],{"class":58},[41,62934,62935],{"class":43,"line":32975},[41,62936,33564],{"class":275},[41,62938,62939],{"class":43,"line":32981},[41,62940,62941],{"class":47},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[41,62943,62944,62946,62948,62950,62952,62954,62956],{"class":43,"line":32990},[41,62945,62911],{"class":275},[41,62947,57916],{"class":54},[41,62949,276],{"class":275},[41,62951,61491],{"class":378},[41,62953,12573],{"class":275},[41,62955,54552],{"class":271},[41,62957,54555],{"class":275},[41,62959,62960,62962,62964],{"class":43,"line":32996},[41,62961,62928],{"class":275},[41,62963,321],{"class":271},[41,62965,47436],{"class":58},[41,62967,62968],{"class":43,"line":33007},[41,62969,33564],{"class":275},[41,62971,62972],{"class":43,"line":33013},[41,62973,62974],{"class":47},"    \u002F\u002F 3. 检测用户输入\n",[41,62976,62977,62979,62981,62983,62986,62988,62990],{"class":43,"line":33032},[41,62978,62911],{"class":275},[41,62980,57916],{"class":54},[41,62982,276],{"class":275},[41,62984,62985],{"class":378},"'input'",[41,62987,12573],{"class":275},[41,62989,54552],{"class":271},[41,62991,54555],{"class":275},[41,62993,62994],{"class":43,"line":33038},[41,62995,62996],{"class":47},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[41,62998,62999,63002,63004,63007,63010,63012,63015,63017,63019],{"class":43,"line":33049},[41,63000,63001],{"class":275},"      total.innerHTML ",[41,63003,321],{"class":271},[41,63005,63006],{"class":378}," `${",[41,63008,63009],{"class":275},"tx",[41,63011,831],{"class":378},[41,63013,63014],{"class":275},"value",[41,63016,831],{"class":378},[41,63018,52071],{"class":58},[41,63020,63021],{"class":378},"}\u002F200字`\n",[41,63023,63024],{"class":43,"line":33055},[41,63025,33564],{"class":275},[41,63027,63028],{"class":43,"line":33075},[41,63029,80],{"emptyLinePlaceholder":79},[41,63031,63032],{"class":43,"line":33091},[41,63033,63034],{"class":47},"    \u002F\u002F const str = 'andy'\n",[41,63036,63037],{"class":43,"line":33097},[41,63038,63039],{"class":47},"    \u002F\u002F console.log(str.length)\n",[41,63041,63042,63044,63046],{"class":43,"line":33111},[41,63043,52520],{"class":275},[41,63045,51916],{"class":51403},[41,63047,51410],{"class":275},[41,63049,63050,63052,63054],{"class":43,"line":33117},[41,63051,51888],{"class":275},[41,63053,51903],{"class":51403},[41,63055,51410],{"class":275},[41,63057,63058],{"class":43,"line":33123},[41,63059,80],{"emptyLinePlaceholder":79},[41,63061,63062,63064,63066],{"class":43,"line":33134},[41,63063,51888],{"class":275},[41,63065,50738],{"class":51403},[41,63067,51410],{"class":275},[22136,63069,63071],{"id":63070},"_3254-change事件","3.2.5.4 change事件",[20,63073,63074],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[20,63076,63077],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[20,63079,63080],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[32,63082,63084],{"className":50736,"code":63083,"language":50738,"meta":37,"style":37},"\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",[24,63085,63086,63096,63110,63114,63122,63136,63156,63168,63176,63180,63188,63202,63210,63228,63246,63258,63262,63270,63278,63282],{"__ignoreMap":37},[41,63087,63088,63090,63092,63094],{"class":43,"line":44},[41,63089,51400],{"class":275},[41,63091,51404],{"class":51403},[41,63093,51407],{"class":54},[41,63095,51410],{"class":275},[41,63097,63098,63100,63102,63104,63106,63108],{"class":43,"line":51},[41,63099,1183],{"class":275},[41,63101,50738],{"class":51403},[41,63103,51419],{"class":54},[41,63105,321],{"class":275},[41,63107,51424],{"class":378},[41,63109,51410],{"class":275},[41,63111,63112],{"class":43,"line":62},[41,63113,80],{"emptyLinePlaceholder":79},[41,63115,63116,63118,63120],{"class":43,"line":70},[41,63117,1183],{"class":275},[41,63119,51437],{"class":51403},[41,63121,51410],{"class":275},[41,63123,63124,63126,63128,63130,63132,63134],{"class":43,"line":76},[41,63125,52247],{"class":275},[41,63127,51447],{"class":51403},[41,63129,51450],{"class":54},[41,63131,321],{"class":275},[41,63133,51455],{"class":378},[41,63135,51410],{"class":275},[41,63137,63138,63140,63142,63144,63146,63148,63150,63152,63154],{"class":43,"line":83},[41,63139,52247],{"class":275},[41,63141,51447],{"class":51403},[41,63143,15058],{"class":54},[41,63145,321],{"class":275},[41,63147,51494],{"class":378},[41,63149,51474],{"class":54},[41,63151,321],{"class":275},[41,63153,51501],{"class":378},[41,63155,51410],{"class":275},[41,63157,63158,63160,63162,63164,63166],{"class":43,"line":89},[41,63159,52247],{"class":275},[41,63161,51510],{"class":51403},[41,63163,51513],{"class":275},[41,63165,51510],{"class":51403},[41,63167,51410],{"class":275},[41,63169,63170,63172,63174],{"class":43,"line":96},[41,63171,51888],{"class":275},[41,63173,51437],{"class":51403},[41,63175,51410],{"class":275},[41,63177,63178],{"class":43,"line":104},[41,63179,80],{"emptyLinePlaceholder":79},[41,63181,63182,63184,63186],{"class":43,"line":176},[41,63183,1183],{"class":275},[41,63185,51903],{"class":51403},[41,63187,51410],{"class":275},[41,63189,63190,63192,63194,63196,63198,63200],{"class":43,"line":184},[41,63191,52247],{"class":275},[41,63193,53924],{"class":51403},[41,63195,53927],{"class":54},[41,63197,321],{"class":275},[41,63199,62802],{"class":378},[41,63201,51410],{"class":275},[41,63203,63204,63206,63208],{"class":43,"line":1757},[41,63205,52247],{"class":275},[41,63207,51916],{"class":51403},[41,63209,51410],{"class":275},[41,63211,63212,63214,63216,63218,63220,63222,63224,63226],{"class":43,"line":1763},[41,63213,11359],{"class":271},[41,63215,60708],{"class":58},[41,63217,13702],{"class":271},[41,63219,54499],{"class":275},[41,63221,54502],{"class":54},[41,63223,276],{"class":275},[41,63225,62985],{"class":378},[41,63227,282],{"class":275},[41,63229,63230,63233,63235,63237,63240,63242,63244],{"class":43,"line":1768},[41,63231,63232],{"class":275},"    input.",[41,63234,57916],{"class":54},[41,63236,276],{"class":275},[41,63238,63239],{"class":378},"'change'",[41,63241,12573],{"class":275},[41,63243,54552],{"class":271},[41,63245,54555],{"class":275},[41,63247,63248,63250,63252,63254,63256],{"class":43,"line":1782},[41,63249,58347],{"class":275},[41,63251,58350],{"class":54},[41,63253,276],{"class":275},[41,63255,866],{"class":58},[41,63257,282],{"class":275},[41,63259,63260],{"class":43,"line":1787},[41,63261,33564],{"class":275},[41,63263,63264,63266,63268],{"class":43,"line":1793},[41,63265,52520],{"class":275},[41,63267,51916],{"class":51403},[41,63269,51410],{"class":275},[41,63271,63272,63274,63276],{"class":43,"line":1814},[41,63273,51888],{"class":275},[41,63275,51903],{"class":51403},[41,63277,51410],{"class":275},[41,63279,63280],{"class":43,"line":1819},[41,63281,80],{"emptyLinePlaceholder":79},[41,63283,63284,63286,63288],{"class":43,"line":1833},[41,63285,51888],{"class":275},[41,63287,50738],{"class":51403},[41,63289,51410],{"class":275},[20,63291,63292],{},"总结：内容发生改变才回去触发",[241,63294,63296],{"id":63295},"_326-事件对象","3.2.6 事件对象",[22136,63298,63300],{"id":63299},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[20,63302,63303],{},[1603,63304],{"alt":37,"src":63305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[20,63307,63308],{},[1603,63309],{"alt":37,"src":63310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[20,63312,63313],{},"点击一次，就输出了事件对象，它是个对象",[20,63315,63316],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[20,63318,63319],{},[1603,63320],{"alt":37,"src":63321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22136,63323,63325],{"id":63324},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[20,63327,63328],{},[1603,63329],{"alt":37,"src":63330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[20,63332,63333],{},"实现按特殊字符才是实现打印输出效果：",[32,63335,63337],{"className":53170,"code":63336,"language":53172,"meta":37,"style":37},"\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",[24,63338,63339,63347,63352,63366,63374,63379,63384,63389,63394,63399,63404,63409,63414,63419,63423,63427,63435],{"__ignoreMap":37},[41,63340,63341,63343,63345],{"class":43,"line":44},[41,63342,1183],{"class":275},[41,63344,51903],{"class":51403},[41,63346,51410],{"class":275},[41,63348,63349],{"class":43,"line":51},[41,63350,63351],{"class":47},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[41,63353,63354,63356,63358,63360,63362,63364],{"class":43,"line":62},[41,63355,52247],{"class":275},[41,63357,53924],{"class":51403},[41,63359,53927],{"class":54},[41,63361,321],{"class":275},[41,63363,62802],{"class":378},[41,63365,51410],{"class":275},[41,63367,63368,63370,63372],{"class":43,"line":70},[41,63369,52247],{"class":275},[41,63371,51916],{"class":51403},[41,63373,51410],{"class":275},[41,63375,63376],{"class":43,"line":76},[41,63377,63378],{"class":275},"    \u002F\u002F const btn = document.querySelector('button')\n",[41,63380,63381],{"class":43,"line":83},[41,63382,63383],{"class":275},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[41,63385,63386],{"class":43,"line":89},[41,63387,63388],{"class":275},"    \u002F\u002F   console.log(e);\n",[41,63390,63391],{"class":43,"line":96},[41,63392,63393],{"class":275},"    \u002F\u002F })\n",[41,63395,63396],{"class":43,"line":104},[41,63397,63398],{"class":275},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[41,63400,63401],{"class":43,"line":176},[41,63402,63403],{"class":275},"    const input = document.querySelector('input')\n",[41,63405,63406],{"class":43,"line":184},[41,63407,63408],{"class":275},"    input.addEventListener('keyup', function (e) {\n",[41,63410,63411],{"class":43,"line":1757},[41,63412,63413],{"class":275},"      if (e.key === 'Enter') {\n",[41,63415,63416],{"class":43,"line":1763},[41,63417,63418],{"class":275},"        console.log('我按下了回车键')\n",[41,63420,63421],{"class":43,"line":1768},[41,63422,52501],{"class":275},[41,63424,63425],{"class":43,"line":1782},[41,63426,33564],{"class":275},[41,63428,63429,63431,63433],{"class":43,"line":1787},[41,63430,52520],{"class":275},[41,63432,51916],{"class":51403},[41,63434,51410],{"class":275},[41,63436,63437,63439,63441],{"class":43,"line":1793},[41,63438,51888],{"class":275},[41,63440,51903],{"class":51403},[41,63442,51410],{"class":275},[22136,63444,63446],{"id":63445},"_3263-trim方法","3.2.6.3 trim方法",[20,63448,63449],{},[1603,63450],{"alt":37,"src":63451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[20,63453,63454],{},[1603,63455],{"alt":37,"src":63456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[20,63458,63459],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[20,63461,63462],{},"str.trim()",[241,63464,63466],{"id":63465},"_327-环境对象","3.2.7 环境对象",[20,63468,63469],{},[1603,63470],{"alt":37,"src":63471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[20,63473,63474],{},[1603,63475],{"alt":37,"src":63476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[20,63478,63479],{},[1603,63480],{"alt":37,"src":63481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[20,63483,63484],{},"实际函数调用是window.fn()",[20,63486,63487],{},"普通函数里面this指向的是window",[1280,63489,63490,63493,63496],{},[227,63491,63492],{},"在普通函数下，this指向的是window",[227,63494,63495],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[227,63497,63498],{},"箭头函数没有this",[20,63500,63501],{},"粗略记法就是：谁调用，this就指向谁",[20,63503,63504],{},[1603,63505],{"alt":37,"src":63506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[20,63508,63509],{},[1603,63510],{"alt":37,"src":63511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[20,63513,63514],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[20,63516,63517],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[32,63519,63521],{"className":53170,"code":63520,"language":53172,"meta":37,"style":37},"\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",[24,63522,63523,63531,63543,63551,63556,63561,63566,63571,63575,63583],{"__ignoreMap":37},[41,63524,63525,63527,63529],{"class":43,"line":44},[41,63526,1183],{"class":275},[41,63528,51903],{"class":51403},[41,63530,51410],{"class":275},[41,63532,63533,63535,63537,63539,63541],{"class":43,"line":51},[41,63534,52247],{"class":275},[41,63536,53990],{"class":51403},[41,63538,53996],{"class":275},[41,63540,53990],{"class":51403},[41,63542,51410],{"class":275},[41,63544,63545,63547,63549],{"class":43,"line":62},[41,63546,52247],{"class":275},[41,63548,51916],{"class":51403},[41,63550,51410],{"class":275},[41,63552,63553],{"class":43,"line":70},[41,63554,63555],{"class":275},"    const button = document.querySelector('button')\n",[41,63557,63558],{"class":43,"line":76},[41,63559,63560],{"class":275},"    button.addEventListener('click', function () {\n",[41,63562,63563],{"class":43,"line":83},[41,63564,63565],{"class":275},"      \u002F\u002F console.log(this);\n",[41,63567,63568],{"class":43,"line":89},[41,63569,63570],{"class":275},"      this.style.color = 'pink'\n",[41,63572,63573],{"class":43,"line":96},[41,63574,33564],{"class":275},[41,63576,63577,63579,63581],{"class":43,"line":104},[41,63578,52520],{"class":275},[41,63580,51916],{"class":51403},[41,63582,51410],{"class":275},[41,63584,63585,63587,63589],{"class":43,"line":176},[41,63586,51888],{"class":275},[41,63588,51903],{"class":51403},[41,63590,51410],{"class":275},[241,63592,63594],{"id":63593},"_328-回调函数","3.2.8 回调函数",[20,63596,63597],{},[1603,63598],{"alt":37,"src":63599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[20,63601,63602],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[20,63604,11470],{},[1280,63606,63607,63610,63613],{},[227,63608,63609],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[227,63611,63612],{},"回调函数本质还是函数，只不过把它当成参数使用",[227,63614,63615],{},"使用匿名函数做为回调函数比较常见",[241,63617,63619],{"id":63618},"_329-tab栏切换","3.2.9 tab栏切换",[20,63621,63622],{},[1603,63623],{"alt":37,"src":63624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[32,63626,63628],{"className":50736,"code":63627,"language":50738,"meta":37,"style":37},"\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",[24,63629,63630,63640,63654,63658,63666,63680,63700,63720,63733,63741,63747,63757,63767,63771,63775,63782,63795,63808,63820,63836,63840,63844,63851,63863,63875,63887,63897,63907,63911,63915,63924,63936,63947,63959,63963,63967,63975,63985,63995,64005,64009,64013,64023,64037,64049,64053,64057,64069,64080,64097,64107,64111,64115,64130,64141,64151,64155,64159,64166,64181,64185,64189,64197,64207,64211,64215,64224,64234,64238,64246,64254,64258,64266,64281,64296,64309,64317,64351,64378,64405,64432,64459,64467,64475,64490,64527,64562,64597,64632,64667,64675,64683,64691,64696,64701,64721,64726,64755,64760,64765,64783,64788,64793,64798,64820,64825,64841,64845,64850,64855,64876,64881,64910,64914,64919,64923,64931,64939,64943],{"__ignoreMap":37},[41,63631,63632,63634,63636,63638],{"class":43,"line":44},[41,63633,51400],{"class":275},[41,63635,51404],{"class":51403},[41,63637,51407],{"class":54},[41,63639,51410],{"class":275},[41,63641,63642,63644,63646,63648,63650,63652],{"class":43,"line":51},[41,63643,1183],{"class":275},[41,63645,50738],{"class":51403},[41,63647,51419],{"class":54},[41,63649,321],{"class":275},[41,63651,51424],{"class":378},[41,63653,51410],{"class":275},[41,63655,63656],{"class":43,"line":62},[41,63657,80],{"emptyLinePlaceholder":79},[41,63659,63660,63662,63664],{"class":43,"line":70},[41,63661,1183],{"class":275},[41,63663,51437],{"class":51403},[41,63665,51410],{"class":275},[41,63667,63668,63670,63672,63674,63676,63678],{"class":43,"line":76},[41,63669,52247],{"class":275},[41,63671,51447],{"class":51403},[41,63673,51450],{"class":54},[41,63675,321],{"class":275},[41,63677,51455],{"class":378},[41,63679,59230],{"class":275},[41,63681,63682,63684,63686,63688,63690,63692,63694,63696,63698],{"class":43,"line":83},[41,63683,52247],{"class":275},[41,63685,51447],{"class":51403},[41,63687,51466],{"class":54},[41,63689,321],{"class":275},[41,63691,51471],{"class":378},[41,63693,51474],{"class":54},[41,63695,321],{"class":275},[41,63697,51479],{"class":378},[41,63699,59230],{"class":275},[41,63701,63702,63704,63706,63708,63710,63712,63714,63716,63718],{"class":43,"line":89},[41,63703,52247],{"class":275},[41,63705,51447],{"class":51403},[41,63707,15058],{"class":54},[41,63709,321],{"class":275},[41,63711,51494],{"class":378},[41,63713,51474],{"class":54},[41,63715,321],{"class":275},[41,63717,51501],{"class":378},[41,63719,59230],{"class":275},[41,63721,63722,63724,63726,63729,63731],{"class":43,"line":96},[41,63723,52247],{"class":275},[41,63725,51510],{"class":51403},[41,63727,63728],{"class":275},">tab栏切换\u003C\u002F",[41,63730,51510],{"class":51403},[41,63732,51410],{"class":275},[41,63734,63735,63737,63739],{"class":43,"line":104},[41,63736,52247],{"class":275},[41,63738,189],{"class":51403},[41,63740,51410],{"class":275},[41,63742,63743,63745],{"class":43,"line":176},[41,63744,6541],{"class":51403},[41,63746,15710],{"class":275},[41,63748,63749,63751,63753,63755],{"class":43,"line":184},[41,63750,54809],{"class":58},[41,63752,51540],{"class":275},[41,63754,465],{"class":58},[41,63756,1434],{"class":275},[41,63758,63759,63761,63763,63765],{"class":43,"line":1757},[41,63760,54798],{"class":58},[41,63762,51540],{"class":275},[41,63764,465],{"class":58},[41,63766,1434],{"class":275},[41,63768,63769],{"class":43,"line":1763},[41,63770,2326],{"class":275},[41,63772,63773],{"class":43,"line":1768},[41,63774,80],{"emptyLinePlaceholder":79},[41,63776,63777,63780],{"class":43,"line":1782},[41,63778,63779],{"class":54},"    .tab",[41,63781,15710],{"class":275},[41,63783,63784,63786,63788,63791,63793],{"class":43,"line":1787},[41,63785,54874],{"class":58},[41,63787,51540],{"class":275},[41,63789,63790],{"class":58},"590",[41,63792,51595],{"class":271},[41,63794,1434],{"class":275},[41,63796,63797,63799,63801,63804,63806],{"class":43,"line":1793},[41,63798,54888],{"class":58},[41,63800,51540],{"class":275},[41,63802,63803],{"class":58},"340",[41,63805,51595],{"class":271},[41,63807,1434],{"class":275},[41,63809,63810,63812,63814,63816,63818],{"class":43,"line":1814},[41,63811,54809],{"class":58},[41,63813,51540],{"class":275},[41,63815,973],{"class":58},[41,63817,51595],{"class":271},[41,63819,1434],{"class":275},[41,63821,63822,63824,63826,63828,63830,63832,63834],{"class":43,"line":1819},[41,63823,62080],{"class":58},[41,63825,51540],{"class":275},[41,63827,26],{"class":58},[41,63829,51595],{"class":271},[41,63831,51624],{"class":58},[41,63833,62347],{"class":58},[41,63835,1434],{"class":275},[41,63837,63838],{"class":43,"line":1833},[41,63839,2326],{"class":275},[41,63841,63842],{"class":43,"line":1838},[41,63843,80],{"emptyLinePlaceholder":79},[41,63845,63846,63849],{"class":43,"line":1867},[41,63847,63848],{"class":54},"    .tab-nav",[41,63850,15710],{"class":275},[41,63852,63853,63855,63857,63859,63861],{"class":43,"line":1872},[41,63854,54874],{"class":58},[41,63856,51540],{"class":275},[41,63858,584],{"class":58},[41,63860,601],{"class":271},[41,63862,1434],{"class":275},[41,63864,63865,63867,63869,63871,63873],{"class":43,"line":1889},[41,63866,54888],{"class":58},[41,63868,51540],{"class":275},[41,63870,1180],{"class":58},[41,63872,51595],{"class":271},[41,63874,1434],{"class":275},[41,63876,63877,63879,63881,63883,63885],{"class":43,"line":1894},[41,63878,57462],{"class":58},[41,63880,51540],{"class":275},[41,63882,1180],{"class":58},[41,63884,51595],{"class":271},[41,63886,1434],{"class":275},[41,63888,63889,63891,63893,63895],{"class":43,"line":1899},[41,63890,55112],{"class":58},[41,63892,51540],{"class":275},[41,63894,51580],{"class":58},[41,63896,1434],{"class":275},[41,63898,63899,63901,63903,63905],{"class":43,"line":1904},[41,63900,55123],{"class":58},[41,63902,51540],{"class":275},[41,63904,51771],{"class":58},[41,63906,1434],{"class":275},[41,63908,63909],{"class":43,"line":1918},[41,63910,2326],{"class":275},[41,63912,63913],{"class":43,"line":1923},[41,63914,80],{"emptyLinePlaceholder":79},[41,63916,63917,63919,63922],{"class":43,"line":2715},[41,63918,63848],{"class":54},[41,63920,63921],{"class":51403}," h3",[41,63923,15710],{"class":275},[41,63925,63926,63928,63930,63932,63934],{"class":43,"line":2729},[41,63927,55025],{"class":58},[41,63929,51540],{"class":275},[41,63931,1073],{"class":58},[41,63933,51595],{"class":271},[41,63935,1434],{"class":275},[41,63937,63938,63940,63942,63945],{"class":43,"line":2737},[41,63939,62437],{"class":58},[41,63941,51540],{"class":275},[41,63943,63944],{"class":58},"normal",[41,63946,1434],{"class":275},[41,63948,63949,63951,63953,63955,63957],{"class":43,"line":2742},[41,63950,62103],{"class":58},[41,63952,51540],{"class":275},[41,63954,973],{"class":58},[41,63956,51595],{"class":271},[41,63958,1434],{"class":275},[41,63960,63961],{"class":43,"line":2748},[41,63962,2326],{"class":275},[41,63964,63965],{"class":43,"line":2754},[41,63966,80],{"emptyLinePlaceholder":79},[41,63968,63969,63971,63973],{"class":43,"line":2759},[41,63970,63848],{"class":54},[41,63972,61395],{"class":51403},[41,63974,15710],{"class":275},[41,63976,63977,63979,63981,63983],{"class":43,"line":8086},[41,63978,54835],{"class":58},[41,63980,51540],{"class":275},[41,63982,54840],{"class":58},[41,63984,1434],{"class":275},[41,63986,63987,63989,63991,63993],{"class":43,"line":8110},[41,63988,55112],{"class":58},[41,63990,51540],{"class":275},[41,63992,51580],{"class":58},[41,63994,1434],{"class":275},[41,63996,63997,63999,64001,64003],{"class":43,"line":8115},[41,63998,55123],{"class":58},[41,64000,51540],{"class":275},[41,64002,51683],{"class":58},[41,64004,1434],{"class":275},[41,64006,64007],{"class":43,"line":8121},[41,64008,2326],{"class":275},[41,64010,64011],{"class":43,"line":8148},[41,64012,80],{"emptyLinePlaceholder":79},[41,64014,64015,64017,64019,64021],{"class":43,"line":8153},[41,64016,63848],{"class":54},[41,64018,61395],{"class":51403},[41,64020,55178],{"class":51403},[41,64022,15710],{"class":275},[41,64024,64025,64027,64029,64031,64033,64035],{"class":43,"line":8159},[41,64026,54809],{"class":58},[41,64028,51540],{"class":275},[41,64030,465],{"class":58},[41,64032,9088],{"class":58},[41,64034,51595],{"class":271},[41,64036,1434],{"class":275},[41,64038,64039,64041,64043,64045,64047],{"class":43,"line":8171},[41,64040,55025],{"class":58},[41,64042,51540],{"class":275},[41,64044,822],{"class":58},[41,64046,51595],{"class":271},[41,64048,1434],{"class":275},[41,64050,64051],{"class":43,"line":8183},[41,64052,2326],{"class":275},[41,64054,64055],{"class":43,"line":8195},[41,64056,80],{"emptyLinePlaceholder":79},[41,64058,64059,64061,64063,64065,64067],{"class":43,"line":9854},[41,64060,63848],{"class":54},[41,64062,61395],{"class":51403},[41,64064,55178],{"class":51403},[41,64066,1539],{"class":51403},[41,64068,15710],{"class":275},[41,64070,64071,64074,64076,64078],{"class":43,"line":9879},[41,64072,64073],{"class":58},"      text-decoration",[41,64075,51540],{"class":275},[41,64077,54840],{"class":58},[41,64079,1434],{"class":275},[41,64081,64082,64084,64086,64088,64090,64092,64095],{"class":43,"line":9902},[41,64083,62335],{"class":58},[41,64085,51540],{"class":275},[41,64087,351],{"class":58},[41,64089,51595],{"class":271},[41,64091,51624],{"class":58},[41,64093,64094],{"class":58}," transparent",[41,64096,1434],{"class":275},[41,64098,64099,64101,64103,64105],{"class":43,"line":9926},[41,64100,57519],{"class":58},[41,64102,51540],{"class":275},[41,64104,62472],{"class":58},[41,64106,1434],{"class":275},[41,64108,64109],{"class":43,"line":9931},[41,64110,2326],{"class":275},[41,64112,64113],{"class":43,"line":9936},[41,64114,80],{"emptyLinePlaceholder":79},[41,64116,64117,64119,64121,64123,64125,64128],{"class":43,"line":9941},[41,64118,63848],{"class":54},[41,64120,61395],{"class":51403},[41,64122,55178],{"class":51403},[41,64124,1539],{"class":51403},[41,64126,64127],{"class":54},".active",[41,64129,15710],{"class":275},[41,64131,64132,64134,64136,64139],{"class":43,"line":9950},[41,64133,61894],{"class":58},[41,64135,51540],{"class":275},[41,64137,64138],{"class":58},"#e1251b",[41,64140,1434],{"class":275},[41,64142,64143,64145,64147,64149],{"class":43,"line":9955},[41,64144,57519],{"class":58},[41,64146,51540],{"class":275},[41,64148,64138],{"class":58},[41,64150,1434],{"class":275},[41,64152,64153],{"class":43,"line":9961},[41,64154,2326],{"class":275},[41,64156,64157],{"class":43,"line":9982},[41,64158,80],{"emptyLinePlaceholder":79},[41,64160,64161,64164],{"class":43,"line":9988},[41,64162,64163],{"class":54},"    .tab-content",[41,64165,15710],{"class":275},[41,64167,64168,64170,64172,64174,64177,64179],{"class":43,"line":10002},[41,64169,54798],{"class":58},[41,64171,51540],{"class":275},[41,64173,465],{"class":58},[41,64175,64176],{"class":58}," 16",[41,64178,51595],{"class":271},[41,64180,1434],{"class":275},[41,64182,64183],{"class":43,"line":10008},[41,64184,2326],{"class":275},[41,64186,64187],{"class":43,"line":10035},[41,64188,80],{"emptyLinePlaceholder":79},[41,64190,64191,64193,64195],{"class":43,"line":10044},[41,64192,64163],{"class":54},[41,64194,62277],{"class":54},[41,64196,15710],{"class":275},[41,64198,64199,64201,64203,64205],{"class":43,"line":10050},[41,64200,55112],{"class":58},[41,64202,51540],{"class":275},[41,64204,54840],{"class":58},[41,64206,1434],{"class":275},[41,64208,64209],{"class":43,"line":10058},[41,64210,2326],{"class":275},[41,64212,64213],{"class":43,"line":10063},[41,64214,80],{"emptyLinePlaceholder":79},[41,64216,64217,64219,64222],{"class":43,"line":16742},[41,64218,64163],{"class":54},[41,64220,64221],{"class":54}," .item.active",[41,64223,15710],{"class":275},[41,64225,64226,64228,64230,64232],{"class":43,"line":16748},[41,64227,55112],{"class":58},[41,64229,51540],{"class":275},[41,64231,60972],{"class":58},[41,64233,1434],{"class":275},[41,64235,64236],{"class":43,"line":16771},[41,64237,2326],{"class":275},[41,64239,64240,64242,64244],{"class":43,"line":16777},[41,64241,52520],{"class":275},[41,64243,189],{"class":51403},[41,64245,51410],{"class":275},[41,64247,64248,64250,64252],{"class":43,"line":16800},[41,64249,51888],{"class":275},[41,64251,51437],{"class":51403},[41,64253,51410],{"class":275},[41,64255,64256],{"class":43,"line":16814},[41,64257,80],{"emptyLinePlaceholder":79},[41,64259,64260,64262,64264],{"class":43,"line":16834},[41,64261,1183],{"class":275},[41,64263,51903],{"class":51403},[41,64265,51410],{"class":275},[41,64267,64268,64270,64272,64274,64276,64279],{"class":43,"line":16840},[41,64269,52247],{"class":275},[41,64271,51714],{"class":51403},[41,64273,53589],{"class":54},[41,64275,321],{"class":275},[41,64277,64278],{"class":378},"\"tab\"",[41,64280,51410],{"class":275},[41,64282,64283,64285,64287,64289,64291,64294],{"class":43,"line":16851},[41,64284,51444],{"class":275},[41,64286,51714],{"class":51403},[41,64288,53589],{"class":54},[41,64290,321],{"class":275},[41,64292,64293],{"class":378},"\"tab-nav\"",[41,64295,51410],{"class":275},[41,64297,64298,64300,64302,64305,64307],{"class":43,"line":16874},[41,64299,55337],{"class":275},[41,64301,241],{"class":51403},[41,64303,64304],{"class":275},">每日特价\u003C\u002F",[41,64306,241],{"class":51403},[41,64308,51410],{"class":275},[41,64310,64311,64313,64315],{"class":43,"line":16896},[41,64312,55337],{"class":275},[41,64314,1280],{"class":51403},[41,64316,51410],{"class":275},[41,64318,64319,64321,64323,64325,64327,64329,64331,64333,64335,64337,64340,64343,64345,64347,64349],{"class":43,"line":16901},[41,64320,55405],{"class":275},[41,64322,227],{"class":51403},[41,64324,61155],{"class":275},[41,64326,511],{"class":51403},[41,64328,53589],{"class":54},[41,64330,321],{"class":275},[41,64332,59809],{"class":378},[41,64334,61160],{"class":54},[41,64336,321],{"class":275},[41,64338,64339],{"class":378},"\"javascript:;\"",[41,64341,64342],{"class":275},">精选\u003C\u002F",[41,64344,511],{"class":51403},[41,64346,55417],{"class":275},[41,64348,227],{"class":51403},[41,64350,51410],{"class":275},[41,64352,64353,64355,64357,64359,64361,64363,64365,64367,64370,64372,64374,64376],{"class":43,"line":16907},[41,64354,55405],{"class":275},[41,64356,227],{"class":51403},[41,64358,61155],{"class":275},[41,64360,511],{"class":51403},[41,64362,61160],{"class":54},[41,64364,321],{"class":275},[41,64366,64339],{"class":378},[41,64368,64369],{"class":275},">美食\u003C\u002F",[41,64371,511],{"class":51403},[41,64373,55417],{"class":275},[41,64375,227],{"class":51403},[41,64377,51410],{"class":275},[41,64379,64380,64382,64384,64386,64388,64390,64392,64394,64397,64399,64401,64403],{"class":43,"line":16921},[41,64381,55405],{"class":275},[41,64383,227],{"class":51403},[41,64385,61155],{"class":275},[41,64387,511],{"class":51403},[41,64389,61160],{"class":54},[41,64391,321],{"class":275},[41,64393,64339],{"class":378},[41,64395,64396],{"class":275},">百货\u003C\u002F",[41,64398,511],{"class":51403},[41,64400,55417],{"class":275},[41,64402,227],{"class":51403},[41,64404,51410],{"class":275},[41,64406,64407,64409,64411,64413,64415,64417,64419,64421,64424,64426,64428,64430],{"class":43,"line":16934},[41,64408,55405],{"class":275},[41,64410,227],{"class":51403},[41,64412,61155],{"class":275},[41,64414,511],{"class":51403},[41,64416,61160],{"class":54},[41,64418,321],{"class":275},[41,64420,64339],{"class":378},[41,64422,64423],{"class":275},">个护\u003C\u002F",[41,64425,511],{"class":51403},[41,64427,55417],{"class":275},[41,64429,227],{"class":51403},[41,64431,51410],{"class":275},[41,64433,64434,64436,64438,64440,64442,64444,64446,64448,64451,64453,64455,64457],{"class":43,"line":16939},[41,64435,55405],{"class":275},[41,64437,227],{"class":51403},[41,64439,61155],{"class":275},[41,64441,511],{"class":51403},[41,64443,61160],{"class":54},[41,64445,321],{"class":275},[41,64447,64339],{"class":378},[41,64449,64450],{"class":275},">预告\u003C\u002F",[41,64452,511],{"class":51403},[41,64454,55417],{"class":275},[41,64456,227],{"class":51403},[41,64458,51410],{"class":275},[41,64460,64461,64463,64465],{"class":43,"line":16953},[41,64462,55510],{"class":275},[41,64464,1280],{"class":51403},[41,64466,51410],{"class":275},[41,64468,64469,64471,64473],{"class":43,"line":16958},[41,64470,51879],{"class":275},[41,64472,51714],{"class":51403},[41,64474,51410],{"class":275},[41,64476,64477,64479,64481,64483,64485,64488],{"class":43,"line":16964},[41,64478,51444],{"class":275},[41,64480,51714],{"class":51403},[41,64482,53589],{"class":54},[41,64484,321],{"class":275},[41,64486,64487],{"class":378},"\"tab-content\"",[41,64489,51410],{"class":275},[41,64491,64492,64494,64496,64498,64500,64503,64505,64507,64509,64511,64514,64516,64518,64520,64523,64525],{"class":43,"line":16969},[41,64493,55337],{"class":275},[41,64495,51714],{"class":51403},[41,64497,53589],{"class":54},[41,64499,321],{"class":275},[41,64501,64502],{"class":378},"\"item active\"",[41,64504,61155],{"class":275},[41,64506,1603],{"class":51403},[41,64508,55342],{"class":54},[41,64510,321],{"class":275},[41,64512,64513],{"class":378},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[41,64515,55350],{"class":54},[41,64517,321],{"class":275},[41,64519,7790],{"class":378},[41,64521,64522],{"class":275}," \u002F>\u003C\u002F",[41,64524,51714],{"class":51403},[41,64526,51410],{"class":275},[41,64528,64529,64531,64533,64535,64537,64539,64541,64543,64545,64547,64550,64552,64554,64556,64558,64560],{"class":43,"line":16983},[41,64530,55337],{"class":275},[41,64532,51714],{"class":51403},[41,64534,53589],{"class":54},[41,64536,321],{"class":275},[41,64538,62726],{"class":378},[41,64540,61155],{"class":275},[41,64542,1603],{"class":51403},[41,64544,55342],{"class":54},[41,64546,321],{"class":275},[41,64548,64549],{"class":378},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[41,64551,55350],{"class":54},[41,64553,321],{"class":275},[41,64555,7790],{"class":378},[41,64557,64522],{"class":275},[41,64559,51714],{"class":51403},[41,64561,51410],{"class":275},[41,64563,64564,64566,64568,64570,64572,64574,64576,64578,64580,64582,64585,64587,64589,64591,64593,64595],{"class":43,"line":16988},[41,64565,55337],{"class":275},[41,64567,51714],{"class":51403},[41,64569,53589],{"class":54},[41,64571,321],{"class":275},[41,64573,62726],{"class":378},[41,64575,61155],{"class":275},[41,64577,1603],{"class":51403},[41,64579,55342],{"class":54},[41,64581,321],{"class":275},[41,64583,64584],{"class":378},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[41,64586,55350],{"class":54},[41,64588,321],{"class":275},[41,64590,7790],{"class":378},[41,64592,64522],{"class":275},[41,64594,51714],{"class":51403},[41,64596,51410],{"class":275},[41,64598,64599,64601,64603,64605,64607,64609,64611,64613,64615,64617,64620,64622,64624,64626,64628,64630],{"class":43,"line":16993},[41,64600,55337],{"class":275},[41,64602,51714],{"class":51403},[41,64604,53589],{"class":54},[41,64606,321],{"class":275},[41,64608,62726],{"class":378},[41,64610,61155],{"class":275},[41,64612,1603],{"class":51403},[41,64614,55342],{"class":54},[41,64616,321],{"class":275},[41,64618,64619],{"class":378},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[41,64621,55350],{"class":54},[41,64623,321],{"class":275},[41,64625,7790],{"class":378},[41,64627,64522],{"class":275},[41,64629,51714],{"class":51403},[41,64631,51410],{"class":275},[41,64633,64634,64636,64638,64640,64642,64644,64646,64648,64650,64652,64655,64657,64659,64661,64663,64665],{"class":43,"line":17007},[41,64635,55337],{"class":275},[41,64637,51714],{"class":51403},[41,64639,53589],{"class":54},[41,64641,321],{"class":275},[41,64643,62726],{"class":378},[41,64645,61155],{"class":275},[41,64647,1603],{"class":51403},[41,64649,55342],{"class":54},[41,64651,321],{"class":275},[41,64653,64654],{"class":378},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[41,64656,55350],{"class":54},[41,64658,321],{"class":275},[41,64660,7790],{"class":378},[41,64662,64522],{"class":275},[41,64664,51714],{"class":51403},[41,64666,51410],{"class":275},[41,64668,64669,64671,64673],{"class":43,"line":17019},[41,64670,51879],{"class":275},[41,64672,51714],{"class":51403},[41,64674,51410],{"class":275},[41,64676,64677,64679,64681],{"class":43,"line":17024},[41,64678,52520],{"class":275},[41,64680,51714],{"class":51403},[41,64682,51410],{"class":275},[41,64684,64685,64687,64689],{"class":43,"line":17037},[41,64686,52247],{"class":275},[41,64688,51916],{"class":51403},[41,64690,51410],{"class":275},[41,64692,64693],{"class":43,"line":17042},[41,64694,64695],{"class":47},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[41,64697,64698],{"class":43,"line":17047},[41,64699,64700],{"class":47},"    \u002F\u002F 1.1 获取 a 元素 \n",[41,64702,64703,64705,64708,64710,64712,64714,64716,64719],{"class":43,"line":17052},[41,64704,11359],{"class":271},[41,64706,64707],{"class":58}," as",[41,64709,13702],{"class":271},[41,64711,54499],{"class":275},[41,64713,55784],{"class":54},[41,64715,276],{"class":275},[41,64717,64718],{"class":378},"'.tab-nav a'",[41,64720,282],{"class":275},[41,64722,64723],{"class":43,"line":17065},[41,64724,64725],{"class":47},"    \u002F\u002F console.log(as) \n",[41,64727,64728,64730,64732,64734,64736,64738,64740,64742,64744,64747,64749,64751,64753],{"class":43,"line":17070},[41,64729,3339],{"class":271},[41,64731,1798],{"class":275},[41,64733,51950],{"class":271},[41,64735,9576],{"class":275},[41,64737,321],{"class":271},[41,64739,4231],{"class":58},[41,64741,9583],{"class":275},[41,64743,1183],{"class":271},[41,64745,64746],{"class":275}," as.",[41,64748,52071],{"class":58},[41,64750,3352],{"class":275},[41,64752,2431],{"class":271},[41,64754,12580],{"class":275},[41,64756,64757],{"class":43,"line":32736},[41,64758,64759],{"class":47},"      \u002F\u002F console.log(as[i])\n",[41,64761,64762],{"class":43,"line":32742},[41,64763,64764],{"class":47},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[41,64766,64767,64770,64772,64774,64777,64779,64781],{"class":43,"line":32748},[41,64768,64769],{"class":275},"      as[i].",[41,64771,57916],{"class":54},[41,64773,276],{"class":275},[41,64775,64776],{"class":378},"'mouseenter'",[41,64778,12573],{"class":275},[41,64780,54552],{"class":271},[41,64782,54555],{"class":275},[41,64784,64785],{"class":43,"line":32754},[41,64786,64787],{"class":47},"        \u002F\u002F console.log('鼠标经过')\n",[41,64789,64790],{"class":43,"line":32760},[41,64791,64792],{"class":47},"        \u002F\u002F 排他思想  \n",[41,64794,64795],{"class":43,"line":32771},[41,64796,64797],{"class":47},"        \u002F\u002F 干掉别人 移除类active\n",[41,64799,64800,64802,64804,64806,64809,64811,64813,64815,64818],{"class":43,"line":32777},[41,64801,52028],{"class":275},[41,64803,54502],{"class":54},[41,64805,276],{"class":275},[41,64807,64808],{"class":378},"'.tab-nav .active'",[41,64810,57106],{"class":275},[41,64812,57109],{"class":54},[41,64814,276],{"class":275},[41,64816,64817],{"class":378},"'active'",[41,64819,282],{"class":275},[41,64821,64822],{"class":43,"line":32797},[41,64823,64824],{"class":47},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[41,64826,64827,64830,64833,64835,64837,64839],{"class":43,"line":32803},[41,64828,64829],{"class":58},"        this",[41,64831,64832],{"class":275},".classList.",[41,64834,5472],{"class":54},[41,64836,276],{"class":275},[41,64838,64817],{"class":378},[41,64840,282],{"class":275},[41,64842,64843],{"class":43,"line":32814},[41,64844,80],{"emptyLinePlaceholder":79},[41,64846,64847],{"class":43,"line":32820},[41,64848,64849],{"class":47},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[41,64851,64852],{"class":43,"line":32826},[41,64853,64854],{"class":47},"        \u002F\u002F 干掉别人\n",[41,64856,64857,64859,64861,64863,64866,64868,64870,64872,64874],{"class":43,"line":32832},[41,64858,52028],{"class":275},[41,64860,54502],{"class":54},[41,64862,276],{"class":275},[41,64864,64865],{"class":378},"'.tab-content .active'",[41,64867,57106],{"class":275},[41,64869,57109],{"class":54},[41,64871,276],{"class":275},[41,64873,64817],{"class":378},[41,64875,282],{"class":275},[41,64877,64878],{"class":43,"line":32838},[41,64879,64880],{"class":47},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[41,64882,64883,64885,64887,64889,64892,64894,64896,64898,64900,64902,64904,64906,64908],{"class":43,"line":32844},[41,64884,52028],{"class":275},[41,64886,54502],{"class":54},[41,64888,276],{"class":275},[41,64890,64891],{"class":378},"`.tab-content .item:nth-child(${",[41,64893,714],{"class":275},[41,64895,45669],{"class":271},[41,64897,25221],{"class":58},[41,64899,57135],{"class":378},[41,64901,57106],{"class":275},[41,64903,5472],{"class":54},[41,64905,276],{"class":275},[41,64907,64817],{"class":378},[41,64909,282],{"class":275},[41,64911,64912],{"class":43,"line":32850},[41,64913,80],{"emptyLinePlaceholder":79},[41,64915,64916],{"class":43,"line":32856},[41,64917,64918],{"class":275},"      })\n",[41,64920,64921],{"class":43,"line":32876},[41,64922,2326],{"class":275},[41,64924,64925,64927,64929],{"class":43,"line":32882},[41,64926,52520],{"class":275},[41,64928,51916],{"class":51403},[41,64930,51410],{"class":275},[41,64932,64933,64935,64937],{"class":43,"line":32898},[41,64934,51888],{"class":275},[41,64936,51903],{"class":51403},[41,64938,51410],{"class":275},[41,64940,64941],{"class":43,"line":32904},[41,64942,80],{"emptyLinePlaceholder":79},[41,64944,64945,64947,64949],{"class":43,"line":32918},[41,64946,51888],{"class":275},[41,64948,50738],{"class":51403},[41,64950,51410],{"class":275},[20,64952,64953],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[20,64955,64956],{},"在监听事件中，this指向的就是他的调用者",[20,64958,64959],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[20,64961,53823],{},[20,64963,64964],{},"(function () {",[20,64966,64967],{},"const list = document.querySelector('.xtx-elevator-list')",[20,64969,64970],{},"list.addEventListener('click', function (e) {",[20,64972,64973],{},"if (e.target.tagName === 'A') {",[20,64975,64976],{},"\u002F\u002F 排他思想",[20,64978,64979],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[20,64981,64982],{},"const old = document.querySelector('.xtx-elevator-list .active')",[20,64984,64985],{},"\u002F\u002F console.log(old);",[20,64987,64988],{},"\u002F\u002F 判断",[20,64990,64991],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[20,64993,64994],{},"if (old) old.classList.remove('active')",[20,64996,64997],{},"e.target.classList.add('active')",[20,64999,1219],{},[20,65001,52567],{},[20,65003,65004],{},"})();",[241,65006,65008],{"id":65007},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[32,65010,65012],{"className":50736,"code":65011,"language":50738,"meta":37,"style":37},"\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",[24,65013,65014,65024,65028,65036,65040,65054,65068,65080,65088,65094,65104,65114,65118,65122,65129,65141,65152,65169,65182,65196,65206,65210,65214,65221,65232,65250,65260,65272,65276,65280,65287,65304,65315,65327,65331,65335,65342,65354,65358,65366,65374,65378,65386,65394,65402,65417,65461,65469,65482,65495,65508,65516,65524,65532,65560,65568,65580,65593,65606,65614,65622,65630,65656,65664,65677,65689,65702,65710,65718,65726,65752,65760,65773,65785,65798,65806,65814,65822,65827,65847,65852,65872,65877,65894,65899,65907,65912,65941,65954,65958,65962,65967,65971,65999,66004,66021,66026,66031,66036,66041,66067,66071,66075,66083,66091,66095],{"__ignoreMap":37},[41,65015,65016,65018,65020,65022],{"class":43,"line":44},[41,65017,51400],{"class":275},[41,65019,51404],{"class":51403},[41,65021,51407],{"class":54},[41,65023,51410],{"class":275},[41,65025,65026],{"class":43,"line":51},[41,65027,80],{"emptyLinePlaceholder":79},[41,65029,65030,65032,65034],{"class":43,"line":62},[41,65031,1183],{"class":275},[41,65033,50738],{"class":51403},[41,65035,51410],{"class":275},[41,65037,65038],{"class":43,"line":70},[41,65039,80],{"emptyLinePlaceholder":79},[41,65041,65042,65044,65046,65048,65050,65052],{"class":43,"line":76},[41,65043,1183],{"class":275},[41,65045,51437],{"class":51403},[41,65047,51419],{"class":54},[41,65049,321],{"class":275},[41,65051,51424],{"class":378},[41,65053,51410],{"class":275},[41,65055,65056,65058,65060,65062,65064,65066],{"class":43,"line":83},[41,65057,52247],{"class":275},[41,65059,51447],{"class":51403},[41,65061,51450],{"class":54},[41,65063,321],{"class":275},[41,65065,51455],{"class":378},[41,65067,51410],{"class":275},[41,65069,65070,65072,65074,65076,65078],{"class":43,"line":89},[41,65071,52247],{"class":275},[41,65073,51510],{"class":51403},[41,65075,55417],{"class":275},[41,65077,51510],{"class":51403},[41,65079,51410],{"class":275},[41,65081,65082,65084,65086],{"class":43,"line":96},[41,65083,52247],{"class":275},[41,65085,189],{"class":51403},[41,65087,51410],{"class":275},[41,65089,65090,65092],{"class":43,"line":104},[41,65091,6541],{"class":51403},[41,65093,15710],{"class":275},[41,65095,65096,65098,65100,65102],{"class":43,"line":176},[41,65097,54809],{"class":58},[41,65099,51540],{"class":275},[41,65101,465],{"class":58},[41,65103,1434],{"class":275},[41,65105,65106,65108,65110,65112],{"class":43,"line":184},[41,65107,54798],{"class":58},[41,65109,51540],{"class":275},[41,65111,465],{"class":58},[41,65113,1434],{"class":275},[41,65115,65116],{"class":43,"line":1757},[41,65117,2326],{"class":275},[41,65119,65120],{"class":43,"line":1763},[41,65121,80],{"emptyLinePlaceholder":79},[41,65123,65124,65127],{"class":43,"line":1768},[41,65125,65126],{"class":51403},"    table",[41,65128,15710],{"class":275},[41,65130,65131,65134,65136,65139],{"class":43,"line":1782},[41,65132,65133],{"class":58},"      border-collapse",[41,65135,51540],{"class":275},[41,65137,65138],{"class":58},"collapse",[41,65140,1434],{"class":275},[41,65142,65143,65146,65148,65150],{"class":43,"line":1787},[41,65144,65145],{"class":58},"      border-spacing",[41,65147,51540],{"class":275},[41,65149,465],{"class":58},[41,65151,1434],{"class":275},[41,65153,65154,65156,65158,65160,65162,65164,65167],{"class":43,"line":1793},[41,65155,62080],{"class":58},[41,65157,51540],{"class":275},[41,65159,26],{"class":58},[41,65161,51595],{"class":271},[41,65163,51624],{"class":58},[41,65165,65166],{"class":58}," #c0c0c0",[41,65168,1434],{"class":275},[41,65170,65171,65173,65175,65178,65180],{"class":43,"line":1814},[41,65172,54874],{"class":58},[41,65174,51540],{"class":275},[41,65176,65177],{"class":58},"500",[41,65179,51595],{"class":271},[41,65181,1434],{"class":275},[41,65183,65184,65186,65188,65190,65192,65194],{"class":43,"line":1819},[41,65185,54809],{"class":58},[41,65187,51540],{"class":275},[41,65189,584],{"class":58},[41,65191,51595],{"class":271},[41,65193,51659],{"class":58},[41,65195,1434],{"class":275},[41,65197,65198,65200,65202,65204],{"class":43,"line":1833},[41,65199,57389],{"class":58},[41,65201,51540],{"class":275},[41,65203,51695],{"class":58},[41,65205,1434],{"class":275},[41,65207,65208],{"class":43,"line":1838},[41,65209,2326],{"class":275},[41,65211,65212],{"class":43,"line":1867},[41,65213,80],{"emptyLinePlaceholder":79},[41,65215,65216,65219],{"class":43,"line":1872},[41,65217,65218],{"class":51403},"    th",[41,65220,15710],{"class":275},[41,65222,65223,65225,65227,65230],{"class":43,"line":1889},[41,65224,54987],{"class":58},[41,65226,51540],{"class":275},[41,65228,65229],{"class":58},"#09c",[41,65231,1434],{"class":275},[41,65233,65234,65237,65239,65241,65243,65245,65248],{"class":43,"line":1894},[41,65235,65236],{"class":58},"      font",[41,65238,51540],{"class":275},[41,65240,62442],{"class":58},[41,65242,64176],{"class":58},[41,65244,51595],{"class":271},[41,65246,65247],{"class":378}," \"微软雅黑\"",[41,65249,1434],{"class":275},[41,65251,65252,65254,65256,65258],{"class":43,"line":1899},[41,65253,57519],{"class":58},[41,65255,51540],{"class":275},[41,65257,60945],{"class":58},[41,65259,1434],{"class":275},[41,65261,65262,65264,65266,65268,65270],{"class":43,"line":1904},[41,65263,54888],{"class":58},[41,65265,51540],{"class":275},[41,65267,1073],{"class":58},[41,65269,51595],{"class":271},[41,65271,1434],{"class":275},[41,65273,65274],{"class":43,"line":1918},[41,65275,2326],{"class":275},[41,65277,65278],{"class":43,"line":1923},[41,65279,80],{"emptyLinePlaceholder":79},[41,65281,65282,65285],{"class":43,"line":2715},[41,65283,65284],{"class":51403},"    td",[41,65286,15710],{"class":275},[41,65288,65289,65291,65293,65295,65297,65299,65302],{"class":43,"line":2729},[41,65290,62080],{"class":58},[41,65292,51540],{"class":275},[41,65294,26],{"class":58},[41,65296,51595],{"class":271},[41,65298,51624],{"class":58},[41,65300,65301],{"class":58}," #d0d0d0",[41,65303,1434],{"class":275},[41,65305,65306,65308,65310,65313],{"class":43,"line":2737},[41,65307,57519],{"class":58},[41,65309,51540],{"class":275},[41,65311,65312],{"class":58},"#404060",[41,65314,1434],{"class":275},[41,65316,65317,65319,65321,65323,65325],{"class":43,"line":2742},[41,65318,54798],{"class":58},[41,65320,51540],{"class":275},[41,65322,719],{"class":58},[41,65324,51595],{"class":271},[41,65326,1434],{"class":275},[41,65328,65329],{"class":43,"line":2748},[41,65330,2326],{"class":275},[41,65332,65333],{"class":43,"line":2754},[41,65334,80],{"emptyLinePlaceholder":79},[41,65336,65337,65340],{"class":43,"line":2759},[41,65338,65339],{"class":54},"    .allCheck",[41,65341,15710],{"class":275},[41,65343,65344,65346,65348,65350,65352],{"class":43,"line":8086},[41,65345,54874],{"class":58},[41,65347,51540],{"class":275},[41,65349,885],{"class":58},[41,65351,51595],{"class":271},[41,65353,1434],{"class":275},[41,65355,65356],{"class":43,"line":8110},[41,65357,2326],{"class":275},[41,65359,65360,65362,65364],{"class":43,"line":8115},[41,65361,52520],{"class":275},[41,65363,189],{"class":51403},[41,65365,51410],{"class":275},[41,65367,65368,65370,65372],{"class":43,"line":8121},[41,65369,51888],{"class":275},[41,65371,51437],{"class":51403},[41,65373,51410],{"class":275},[41,65375,65376],{"class":43,"line":8148},[41,65377,80],{"emptyLinePlaceholder":79},[41,65379,65380,65382,65384],{"class":43,"line":8153},[41,65381,1183],{"class":275},[41,65383,51903],{"class":51403},[41,65385,51410],{"class":275},[41,65387,65388,65390,65392],{"class":43,"line":8159},[41,65389,52247],{"class":275},[41,65391,411],{"class":51403},[41,65393,51410],{"class":275},[41,65395,65396,65398,65400],{"class":43,"line":8171},[41,65397,51444],{"class":275},[41,65399,417],{"class":51403},[41,65401,51410],{"class":275},[41,65403,65404,65406,65408,65410,65412,65415],{"class":43,"line":8183},[41,65405,55337],{"class":275},[41,65407,420],{"class":51403},[41,65409,53589],{"class":54},[41,65411,321],{"class":275},[41,65413,65414],{"class":378},"\"allCheck\"",[41,65416,51410],{"class":275},[41,65418,65419,65421,65423,65425,65427,65429,65431,65433,65435,65437,65439,65442,65445,65447,65449,65451,65454,65457,65459],{"class":43,"line":8195},[41,65420,55405],{"class":275},[41,65422,53924],{"class":51403},[41,65424,53927],{"class":54},[41,65426,321],{"class":275},[41,65428,53932],{"class":378},[41,65430,15058],{"class":54},[41,65432,321],{"class":275},[41,65434,7790],{"class":378},[41,65436,15097],{"class":54},[41,65438,321],{"class":275},[41,65440,65441],{"class":378},"\"checkAll\"",[41,65443,65444],{"class":275},"> \u003C",[41,65446,41],{"class":51403},[41,65448,53589],{"class":54},[41,65450,321],{"class":275},[41,65452,65453],{"class":378},"\"all\"",[41,65455,65456],{"class":275},">全选\u003C\u002F",[41,65458,41],{"class":51403},[41,65460,51410],{"class":275},[41,65462,65463,65465,65467],{"class":43,"line":9854},[41,65464,55510],{"class":275},[41,65466,420],{"class":51403},[41,65468,51410],{"class":275},[41,65470,65471,65473,65475,65478,65480],{"class":43,"line":9879},[41,65472,55337],{"class":275},[41,65474,420],{"class":51403},[41,65476,65477],{"class":275},">商品\u003C\u002F",[41,65479,420],{"class":51403},[41,65481,51410],{"class":275},[41,65483,65484,65486,65488,65491,65493],{"class":43,"line":9902},[41,65485,55337],{"class":275},[41,65487,420],{"class":51403},[41,65489,65490],{"class":275},">商家\u003C\u002F",[41,65492,420],{"class":51403},[41,65494,51410],{"class":275},[41,65496,65497,65499,65501,65504,65506],{"class":43,"line":9926},[41,65498,55337],{"class":275},[41,65500,420],{"class":51403},[41,65502,65503],{"class":275},">价格\u003C\u002F",[41,65505,420],{"class":51403},[41,65507,51410],{"class":275},[41,65509,65510,65512,65514],{"class":43,"line":9931},[41,65511,51879],{"class":275},[41,65513,417],{"class":51403},[41,65515,51410],{"class":275},[41,65517,65518,65520,65522],{"class":43,"line":9936},[41,65519,51444],{"class":275},[41,65521,417],{"class":51403},[41,65523,51410],{"class":275},[41,65525,65526,65528,65530],{"class":43,"line":9941},[41,65527,55337],{"class":275},[41,65529,463],{"class":51403},[41,65531,51410],{"class":275},[41,65533,65534,65536,65538,65540,65542,65544,65546,65548,65551,65553,65555,65558],{"class":43,"line":9950},[41,65535,55405],{"class":275},[41,65537,53924],{"class":51403},[41,65539,53927],{"class":54},[41,65541,321],{"class":275},[41,65543,53932],{"class":378},[41,65545,15058],{"class":54},[41,65547,321],{"class":275},[41,65549,65550],{"class":378},"\"check\"",[41,65552,53589],{"class":54},[41,65554,321],{"class":275},[41,65556,65557],{"class":378},"\"ck\"",[41,65559,51410],{"class":275},[41,65561,65562,65564,65566],{"class":43,"line":9955},[41,65563,55510],{"class":275},[41,65565,463],{"class":51403},[41,65567,51410],{"class":275},[41,65569,65570,65572,65574,65576,65578],{"class":43,"line":9961},[41,65571,55337],{"class":275},[41,65573,463],{"class":51403},[41,65575,61276],{"class":275},[41,65577,463],{"class":51403},[41,65579,51410],{"class":275},[41,65581,65582,65584,65586,65589,65591],{"class":43,"line":9982},[41,65583,55337],{"class":275},[41,65585,463],{"class":51403},[41,65587,65588],{"class":275},">小米\u003C\u002F",[41,65590,463],{"class":51403},[41,65592,51410],{"class":275},[41,65594,65595,65597,65599,65602,65604],{"class":43,"line":9988},[41,65596,55337],{"class":275},[41,65598,463],{"class":51403},[41,65600,65601],{"class":275},">￥1999\u003C\u002F",[41,65603,463],{"class":51403},[41,65605,51410],{"class":275},[41,65607,65608,65610,65612],{"class":43,"line":10002},[41,65609,51879],{"class":275},[41,65611,417],{"class":51403},[41,65613,51410],{"class":275},[41,65615,65616,65618,65620],{"class":43,"line":10008},[41,65617,51444],{"class":275},[41,65619,417],{"class":51403},[41,65621,51410],{"class":275},[41,65623,65624,65626,65628],{"class":43,"line":10035},[41,65625,55337],{"class":275},[41,65627,463],{"class":51403},[41,65629,51410],{"class":275},[41,65631,65632,65634,65636,65638,65640,65642,65644,65646,65648,65650,65652,65654],{"class":43,"line":10044},[41,65633,55405],{"class":275},[41,65635,53924],{"class":51403},[41,65637,53927],{"class":54},[41,65639,321],{"class":275},[41,65641,53932],{"class":378},[41,65643,15058],{"class":54},[41,65645,321],{"class":275},[41,65647,65550],{"class":378},[41,65649,53589],{"class":54},[41,65651,321],{"class":275},[41,65653,65557],{"class":378},[41,65655,51410],{"class":275},[41,65657,65658,65660,65662],{"class":43,"line":10050},[41,65659,55510],{"class":275},[41,65661,463],{"class":51403},[41,65663,51410],{"class":275},[41,65665,65666,65668,65670,65673,65675],{"class":43,"line":10058},[41,65667,55337],{"class":275},[41,65669,463],{"class":51403},[41,65671,65672],{"class":275},">小米净水器\u003C\u002F",[41,65674,463],{"class":51403},[41,65676,51410],{"class":275},[41,65678,65679,65681,65683,65685,65687],{"class":43,"line":10063},[41,65680,55337],{"class":275},[41,65682,463],{"class":51403},[41,65684,65588],{"class":275},[41,65686,463],{"class":51403},[41,65688,51410],{"class":275},[41,65690,65691,65693,65695,65698,65700],{"class":43,"line":16742},[41,65692,55337],{"class":275},[41,65694,463],{"class":51403},[41,65696,65697],{"class":275},">￥4999\u003C\u002F",[41,65699,463],{"class":51403},[41,65701,51410],{"class":275},[41,65703,65704,65706,65708],{"class":43,"line":16748},[41,65705,51879],{"class":275},[41,65707,417],{"class":51403},[41,65709,51410],{"class":275},[41,65711,65712,65714,65716],{"class":43,"line":16771},[41,65713,51444],{"class":275},[41,65715,417],{"class":51403},[41,65717,51410],{"class":275},[41,65719,65720,65722,65724],{"class":43,"line":16777},[41,65721,55337],{"class":275},[41,65723,463],{"class":51403},[41,65725,51410],{"class":275},[41,65727,65728,65730,65732,65734,65736,65738,65740,65742,65744,65746,65748,65750],{"class":43,"line":16800},[41,65729,55405],{"class":275},[41,65731,53924],{"class":51403},[41,65733,53927],{"class":54},[41,65735,321],{"class":275},[41,65737,53932],{"class":378},[41,65739,15058],{"class":54},[41,65741,321],{"class":275},[41,65743,65550],{"class":378},[41,65745,53589],{"class":54},[41,65747,321],{"class":275},[41,65749,65557],{"class":378},[41,65751,51410],{"class":275},[41,65753,65754,65756,65758],{"class":43,"line":16814},[41,65755,55510],{"class":275},[41,65757,463],{"class":51403},[41,65759,51410],{"class":275},[41,65761,65762,65764,65766,65769,65771],{"class":43,"line":16834},[41,65763,55337],{"class":275},[41,65765,463],{"class":51403},[41,65767,65768],{"class":275},">小米电视\u003C\u002F",[41,65770,463],{"class":51403},[41,65772,51410],{"class":275},[41,65774,65775,65777,65779,65781,65783],{"class":43,"line":16840},[41,65776,55337],{"class":275},[41,65778,463],{"class":51403},[41,65780,65588],{"class":275},[41,65782,463],{"class":51403},[41,65784,51410],{"class":275},[41,65786,65787,65789,65791,65794,65796],{"class":43,"line":16851},[41,65788,55337],{"class":275},[41,65790,463],{"class":51403},[41,65792,65793],{"class":275},">￥5999\u003C\u002F",[41,65795,463],{"class":51403},[41,65797,51410],{"class":275},[41,65799,65800,65802,65804],{"class":43,"line":16874},[41,65801,51879],{"class":275},[41,65803,417],{"class":51403},[41,65805,51410],{"class":275},[41,65807,65808,65810,65812],{"class":43,"line":16896},[41,65809,52520],{"class":275},[41,65811,411],{"class":51403},[41,65813,51410],{"class":275},[41,65815,65816,65818,65820],{"class":43,"line":16901},[41,65817,52247],{"class":275},[41,65819,51916],{"class":51403},[41,65821,51410],{"class":275},[41,65823,65824],{"class":43,"line":16907},[41,65825,65826],{"class":47},"    \u002F\u002F 1. 获取大复选框\n",[41,65828,65829,65831,65834,65836,65838,65840,65842,65845],{"class":43,"line":16921},[41,65830,11359],{"class":271},[41,65832,65833],{"class":58}," checkAll",[41,65835,13702],{"class":271},[41,65837,54499],{"class":275},[41,65839,54502],{"class":54},[41,65841,276],{"class":275},[41,65843,65844],{"class":378},"'#checkAll'",[41,65846,282],{"class":275},[41,65848,65849],{"class":43,"line":16934},[41,65850,65851],{"class":47},"    \u002F\u002F 2. 获取所有的小复选框\n",[41,65853,65854,65856,65859,65861,65863,65865,65867,65870],{"class":43,"line":16939},[41,65855,11359],{"class":271},[41,65857,65858],{"class":58}," cks",[41,65860,13702],{"class":271},[41,65862,54499],{"class":275},[41,65864,55784],{"class":54},[41,65866,276],{"class":275},[41,65868,65869],{"class":378},"'.ck'",[41,65871,282],{"class":275},[41,65873,65874],{"class":43,"line":16953},[41,65875,65876],{"class":47},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[41,65878,65879,65882,65884,65886,65888,65890,65892],{"class":43,"line":16958},[41,65880,65881],{"class":275},"    checkAll.",[41,65883,57916],{"class":54},[41,65885,276],{"class":275},[41,65887,57921],{"class":378},[41,65889,12573],{"class":275},[41,65891,54552],{"class":271},[41,65893,54555],{"class":275},[41,65895,65896],{"class":43,"line":16964},[41,65897,65898],{"class":47},"      \u002F\u002F 得到当前大复选框的选中状态\n",[41,65900,65901,65904],{"class":43,"line":16969},[41,65902,65903],{"class":47},"      \u002F\u002F console.log(checkAll.checked)",[41,65905,65906],{"class":47},"  \u002F\u002F 得到 是 true 或者是 false\n",[41,65908,65909],{"class":43,"line":16983},[41,65910,65911],{"class":47},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[41,65913,65914,65916,65918,65920,65922,65924,65926,65928,65930,65933,65935,65937,65939],{"class":43,"line":16988},[41,65915,52387],{"class":271},[41,65917,1798],{"class":275},[41,65919,51950],{"class":271},[41,65921,9576],{"class":275},[41,65923,321],{"class":271},[41,65925,4231],{"class":58},[41,65927,9583],{"class":275},[41,65929,1183],{"class":271},[41,65931,65932],{"class":275}," cks.",[41,65934,52071],{"class":58},[41,65936,3352],{"class":275},[41,65938,2431],{"class":271},[41,65940,12580],{"class":275},[41,65942,65943,65946,65948,65951],{"class":43,"line":16993},[41,65944,65945],{"class":275},"        cks[i].checked ",[41,65947,321],{"class":271},[41,65949,65950],{"class":58}," this",[41,65952,65953],{"class":275},".checked\n",[41,65955,65956],{"class":43,"line":17007},[41,65957,52501],{"class":275},[41,65959,65960],{"class":43,"line":17019},[41,65961,33564],{"class":275},[41,65963,65964],{"class":43,"line":17024},[41,65965,65966],{"class":47},"    \u002F\u002F 5. 小复选框控制大复选框\n",[41,65968,65969],{"class":43,"line":17037},[41,65970,80],{"emptyLinePlaceholder":79},[41,65972,65973,65975,65977,65979,65981,65983,65985,65987,65989,65991,65993,65995,65997],{"class":43,"line":17042},[41,65974,3339],{"class":271},[41,65976,1798],{"class":275},[41,65978,51950],{"class":271},[41,65980,9576],{"class":275},[41,65982,321],{"class":271},[41,65984,4231],{"class":58},[41,65986,9583],{"class":275},[41,65988,1183],{"class":271},[41,65990,65932],{"class":275},[41,65992,52071],{"class":58},[41,65994,3352],{"class":275},[41,65996,2431],{"class":271},[41,65998,12580],{"class":275},[41,66000,66001],{"class":43,"line":17047},[41,66002,66003],{"class":47},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[41,66005,66006,66009,66011,66013,66015,66017,66019],{"class":43,"line":17052},[41,66007,66008],{"class":275},"      cks[i].",[41,66010,57916],{"class":54},[41,66012,276],{"class":275},[41,66014,57921],{"class":378},[41,66016,12573],{"class":275},[41,66018,54552],{"class":271},[41,66020,54555],{"class":275},[41,66022,66023],{"class":43,"line":17065},[41,66024,66025],{"class":47},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[41,66027,66028],{"class":43,"line":17070},[41,66029,66030],{"class":47},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[41,66032,66033],{"class":43,"line":32736},[41,66034,66035],{"class":47},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[41,66037,66038],{"class":43,"line":32742},[41,66039,66040],{"class":47},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[41,66042,66043,66046,66048,66050,66052,66054,66057,66059,66061,66063,66065],{"class":43,"line":32748},[41,66044,66045],{"class":275},"        checkAll.checked ",[41,66047,321],{"class":271},[41,66049,54499],{"class":275},[41,66051,55784],{"class":54},[41,66053,276],{"class":275},[41,66055,66056],{"class":378},"'.ck:checked'",[41,66058,30929],{"class":275},[41,66060,52071],{"class":58},[41,66062,58009],{"class":271},[41,66064,65932],{"class":275},[41,66066,55934],{"class":58},[41,66068,66069],{"class":43,"line":32754},[41,66070,64918],{"class":275},[41,66072,66073],{"class":43,"line":32760},[41,66074,2326],{"class":275},[41,66076,66077,66079,66081],{"class":43,"line":32771},[41,66078,52520],{"class":275},[41,66080,51916],{"class":51403},[41,66082,51410],{"class":275},[41,66084,66085,66087,66089],{"class":43,"line":32777},[41,66086,51888],{"class":275},[41,66088,51903],{"class":51403},[41,66090,51410],{"class":275},[41,66092,66093],{"class":43,"line":32797},[41,66094,80],{"emptyLinePlaceholder":79},[41,66096,66097,66099,66101],{"class":43,"line":32803},[41,66098,51888],{"class":275},[41,66100,50738],{"class":51403},[41,66102,51410],{"class":275},[20,66104,66105],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[20,66107,66108],{},"用好之间比较得到的布尔值！！！",[20,66110,66111,66112,66115,66116,1798,66119,857,66121,66124],{},"在 JS 里访问的时候，",[24,66113,66114],{},"checkbox.checked"," 是一个 ",[423,66117,66118],{},"布尔值",[24,66120,1503],{},[24,66122,66123],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[20,66126,66127,66128,66131,66132],{},"HTML 的 ",[24,66129,66130],{},"checked=\"checked\""," 只是 ",[423,66133,66134,66135,66138],{},"初始值；JS 的 ",[24,66136,66137],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[20,66140,66141],{},"：checked是一个伪类选择器",[20,66143,66144],{},[1603,66145],{"alt":37,"src":66146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[20,66148,66149,66152],{},[66150,66151],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[20,66154,66155],{},[1603,66156],{"alt":37,"src":66157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[15,66159,66161],{"id":66160},"_33-dom事件进阶","3.3 DOM事件进阶",[241,66163,66165],{"id":66164},"_331-事件流","3.3.1 事件流",[20,66167,66168],{},[1603,66169],{"alt":37,"src":66170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22136,66172,66174],{"id":66173},"_3311-事件捕获","3.3.1.1 事件捕获",[20,66176,66177],{},[1603,66178],{"alt":37,"src":66179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[32,66181,66183],{"className":50736,"code":66182,"language":50738,"meta":37,"style":37},"\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",[24,66184,66185,66195,66209,66213,66221,66235,66255,66267,66275,66282,66294,66306,66316,66320,66324,66331,66343,66355,66365,66369,66377,66385,66389,66397,66412,66431,66439,66447,66467,66487,66503,66514,66522,66539,66550,66558,66575,66586,66594,66602,66610,66614],{"__ignoreMap":37},[41,66186,66187,66189,66191,66193],{"class":43,"line":44},[41,66188,51400],{"class":275},[41,66190,51404],{"class":51403},[41,66192,51407],{"class":54},[41,66194,51410],{"class":275},[41,66196,66197,66199,66201,66203,66205,66207],{"class":43,"line":51},[41,66198,1183],{"class":275},[41,66200,50738],{"class":51403},[41,66202,51419],{"class":54},[41,66204,321],{"class":275},[41,66206,51424],{"class":378},[41,66208,51410],{"class":275},[41,66210,66211],{"class":43,"line":62},[41,66212,80],{"emptyLinePlaceholder":79},[41,66214,66215,66217,66219],{"class":43,"line":70},[41,66216,1183],{"class":275},[41,66218,51437],{"class":51403},[41,66220,51410],{"class":275},[41,66222,66223,66225,66227,66229,66231,66233],{"class":43,"line":76},[41,66224,52247],{"class":275},[41,66226,51447],{"class":51403},[41,66228,51450],{"class":54},[41,66230,321],{"class":275},[41,66232,51455],{"class":378},[41,66234,51410],{"class":275},[41,66236,66237,66239,66241,66243,66245,66247,66249,66251,66253],{"class":43,"line":83},[41,66238,52247],{"class":275},[41,66240,51447],{"class":51403},[41,66242,15058],{"class":54},[41,66244,321],{"class":275},[41,66246,51494],{"class":378},[41,66248,51474],{"class":54},[41,66250,321],{"class":275},[41,66252,51501],{"class":378},[41,66254,51410],{"class":275},[41,66256,66257,66259,66261,66263,66265],{"class":43,"line":89},[41,66258,52247],{"class":275},[41,66260,51510],{"class":51403},[41,66262,51513],{"class":275},[41,66264,51510],{"class":51403},[41,66266,51410],{"class":275},[41,66268,66269,66271,66273],{"class":43,"line":96},[41,66270,52247],{"class":275},[41,66272,189],{"class":51403},[41,66274,51410],{"class":275},[41,66276,66277,66280],{"class":43,"line":104},[41,66278,66279],{"class":54},"    .father",[41,66281,15710],{"class":275},[41,66283,66284,66286,66288,66290,66292],{"class":43,"line":176},[41,66285,54874],{"class":58},[41,66287,51540],{"class":275},[41,66289,65177],{"class":58},[41,66291,51595],{"class":271},[41,66293,1434],{"class":275},[41,66295,66296,66298,66300,66302,66304],{"class":43,"line":184},[41,66297,54888],{"class":58},[41,66299,51540],{"class":275},[41,66301,65177],{"class":58},[41,66303,51595],{"class":271},[41,66305,1434],{"class":275},[41,66307,66308,66310,66312,66314],{"class":43,"line":1757},[41,66309,54987],{"class":58},[41,66311,51540],{"class":275},[41,66313,51748],{"class":58},[41,66315,1434],{"class":275},[41,66317,66318],{"class":43,"line":1763},[41,66319,2326],{"class":275},[41,66321,66322],{"class":43,"line":1768},[41,66323,80],{"emptyLinePlaceholder":79},[41,66325,66326,66329],{"class":43,"line":1782},[41,66327,66328],{"class":54},"    .son",[41,66330,15710],{"class":275},[41,66332,66333,66335,66337,66339,66341],{"class":43,"line":1787},[41,66334,54874],{"class":58},[41,66336,51540],{"class":275},[41,66338,1862],{"class":58},[41,66340,51595],{"class":271},[41,66342,1434],{"class":275},[41,66344,66345,66347,66349,66351,66353],{"class":43,"line":1793},[41,66346,54888],{"class":58},[41,66348,51540],{"class":275},[41,66350,1862],{"class":58},[41,66352,51595],{"class":271},[41,66354,1434],{"class":275},[41,66356,66357,66359,66361,66363],{"class":43,"line":1814},[41,66358,54987],{"class":58},[41,66360,51540],{"class":275},[41,66362,54992],{"class":58},[41,66364,1434],{"class":275},[41,66366,66367],{"class":43,"line":1819},[41,66368,2326],{"class":275},[41,66370,66371,66373,66375],{"class":43,"line":1833},[41,66372,52520],{"class":275},[41,66374,189],{"class":51403},[41,66376,51410],{"class":275},[41,66378,66379,66381,66383],{"class":43,"line":1838},[41,66380,51888],{"class":275},[41,66382,51437],{"class":51403},[41,66384,51410],{"class":275},[41,66386,66387],{"class":43,"line":1867},[41,66388,80],{"emptyLinePlaceholder":79},[41,66390,66391,66393,66395],{"class":43,"line":1872},[41,66392,1183],{"class":275},[41,66394,51903],{"class":51403},[41,66396,51410],{"class":275},[41,66398,66399,66401,66403,66405,66407,66410],{"class":43,"line":1889},[41,66400,52247],{"class":275},[41,66402,51714],{"class":51403},[41,66404,53589],{"class":54},[41,66406,321],{"class":275},[41,66408,66409],{"class":378},"\"father\"",[41,66411,51410],{"class":275},[41,66413,66414,66416,66418,66420,66422,66425,66427,66429],{"class":43,"line":1894},[41,66415,51444],{"class":275},[41,66417,51714],{"class":51403},[41,66419,53589],{"class":54},[41,66421,321],{"class":275},[41,66423,66424],{"class":378},"\"son\"",[41,66426,55417],{"class":275},[41,66428,51714],{"class":51403},[41,66430,51410],{"class":275},[41,66432,66433,66435,66437],{"class":43,"line":1899},[41,66434,52520],{"class":275},[41,66436,51714],{"class":51403},[41,66438,51410],{"class":275},[41,66440,66441,66443,66445],{"class":43,"line":1904},[41,66442,52247],{"class":275},[41,66444,51916],{"class":51403},[41,66446,51410],{"class":275},[41,66448,66449,66451,66454,66456,66458,66460,66462,66465],{"class":43,"line":1918},[41,66450,11359],{"class":271},[41,66452,66453],{"class":58}," fa",[41,66455,13702],{"class":271},[41,66457,54499],{"class":275},[41,66459,54502],{"class":54},[41,66461,276],{"class":275},[41,66463,66464],{"class":378},"'.father'",[41,66466,282],{"class":275},[41,66468,66469,66471,66474,66476,66478,66480,66482,66485],{"class":43,"line":1923},[41,66470,11359],{"class":271},[41,66472,66473],{"class":58}," son",[41,66475,13702],{"class":271},[41,66477,54499],{"class":275},[41,66479,54502],{"class":54},[41,66481,276],{"class":275},[41,66483,66484],{"class":378},"'.son'",[41,66486,282],{"class":275},[41,66488,66489,66491,66493,66495,66497,66499,66501],{"class":43,"line":2715},[41,66490,52510],{"class":275},[41,66492,57916],{"class":54},[41,66494,276],{"class":275},[41,66496,57921],{"class":378},[41,66498,12573],{"class":275},[41,66500,54552],{"class":271},[41,66502,54555],{"class":275},[41,66504,66505,66507,66509,66512],{"class":43,"line":2729},[41,66506,59028],{"class":54},[41,66508,276],{"class":275},[41,66510,66511],{"class":378},"'woshiu1'",[41,66513,282],{"class":275},[41,66515,66516,66518,66520],{"class":43,"line":2737},[41,66517,54638],{"class":275},[41,66519,1503],{"class":58},[41,66521,282],{"class":275},[41,66523,66524,66527,66529,66531,66533,66535,66537],{"class":43,"line":2742},[41,66525,66526],{"class":275},"    fa.",[41,66528,57916],{"class":54},[41,66530,276],{"class":275},[41,66532,57921],{"class":378},[41,66534,12573],{"class":275},[41,66536,54552],{"class":271},[41,66538,54555],{"class":275},[41,66540,66541,66543,66545,66548],{"class":43,"line":2748},[41,66542,59028],{"class":54},[41,66544,276],{"class":275},[41,66546,66547],{"class":378},"'1'",[41,66549,282],{"class":275},[41,66551,66552,66554,66556],{"class":43,"line":2754},[41,66553,54638],{"class":275},[41,66555,1503],{"class":58},[41,66557,282],{"class":275},[41,66559,66560,66563,66565,66567,66569,66571,66573],{"class":43,"line":2759},[41,66561,66562],{"class":275},"    son.",[41,66564,57916],{"class":54},[41,66566,276],{"class":275},[41,66568,57921],{"class":378},[41,66570,12573],{"class":275},[41,66572,54552],{"class":271},[41,66574,54555],{"class":275},[41,66576,66577,66579,66581,66584],{"class":43,"line":8086},[41,66578,59028],{"class":54},[41,66580,276],{"class":275},[41,66582,66583],{"class":378},"'2'",[41,66585,282],{"class":275},[41,66587,66588,66590,66592],{"class":43,"line":8110},[41,66589,54638],{"class":275},[41,66591,1503],{"class":58},[41,66593,282],{"class":275},[41,66595,66596,66598,66600],{"class":43,"line":8115},[41,66597,52520],{"class":275},[41,66599,51916],{"class":51403},[41,66601,51410],{"class":275},[41,66603,66604,66606,66608],{"class":43,"line":8121},[41,66605,51888],{"class":275},[41,66607,51903],{"class":51403},[41,66609,51410],{"class":275},[41,66611,66612],{"class":43,"line":8148},[41,66613,80],{"emptyLinePlaceholder":79},[41,66615,66616,66618,66620],{"class":43,"line":8153},[41,66617,51888],{"class":275},[41,66619,50738],{"class":51403},[41,66621,51410],{"class":275},[20,66623,66624],{},[1603,66625],{"alt":37,"src":66626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[20,66628,66629],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22136,66631,66633],{"id":66632},"_3312-事件冒泡","3.3.1.2 事件冒泡",[20,66635,66636],{},[1603,66637],{"alt":37,"src":66638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[20,66640,66641],{},"反着来",[20,66643,66644],{},"注意是同名事件，比如都是‘click’",[22136,66646,66648],{"id":66647},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[20,66650,66651],{},[1603,66652],{"alt":37,"src":66653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22136,66655,66657],{"id":66656},"_3314-解绑事件","3.3.1.4 解绑事件",[20,66659,66660],{},[1603,66661],{"alt":37,"src":66662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[20,66664,66665],{},[1603,66666],{"alt":37,"src":66667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22136,66669,66671],{"id":66670},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[224,66673,66674],{},[227,66675,66676],{},"事件类型的区别",[20,66678,66679],{},[1603,66680],{"alt":37,"src":66681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[20,66683,66684],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[224,66686,66687],{"start":51},[227,66688,66689],{},"注册事件的区别",[20,66691,66692],{},[1603,66693],{"alt":37,"src":66694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22136,66696,66698],{"id":66697},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[20,66700,66701],{},[1603,66702],{"alt":37,"src":66703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[20,66705,66706],{},[1603,66707],{"alt":37,"src":66708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[32,66710,66712],{"className":53170,"code":66711,"language":53172,"meta":37,"style":37},"\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",[24,66713,66714,66722,66739,66762,66770,66775,66780,66785,66789,66797,66805],{"__ignoreMap":37},[41,66715,66716,66718,66720],{"class":43,"line":44},[41,66717,1183],{"class":275},[41,66719,51903],{"class":51403},[41,66721,51410],{"class":275},[41,66723,66724,66726,66729,66732,66734,66737],{"class":43,"line":51},[41,66725,52247],{"class":275},[41,66727,66728],{"class":51403},"form",[41,66730,66731],{"class":54}," action",[41,66733,321],{"class":275},[41,66735,66736],{"class":378},"\"http:\u002F\u002Fwww.itcast.cn\"",[41,66738,51410],{"class":275},[41,66740,66741,66743,66745,66747,66749,66752,66755,66757,66760],{"class":43,"line":62},[41,66742,51444],{"class":275},[41,66744,53924],{"class":51403},[41,66746,53927],{"class":54},[41,66748,321],{"class":275},[41,66750,66751],{"class":378},"\"submit\"",[41,66753,66754],{"class":54}," value",[41,66756,321],{"class":275},[41,66758,66759],{"class":378},"\"免费注册\"",[41,66761,51410],{"class":275},[41,66763,66764,66766,66768],{"class":43,"line":70},[41,66765,51444],{"class":275},[41,66767,51916],{"class":51403},[41,66769,51410],{"class":275},[41,66771,66772],{"class":43,"line":76},[41,66773,66774],{"class":275},"      const form = document.querySelector('form')\n",[41,66776,66777],{"class":43,"line":83},[41,66778,66779],{"class":275},"      form.addEventListener('submit', function (e) {\n",[41,66781,66782],{"class":43,"line":89},[41,66783,66784],{"class":275},"        e.preventDefault()\n",[41,66786,66787],{"class":43,"line":96},[41,66788,64918],{"class":275},[41,66790,66791,66793,66795],{"class":43,"line":104},[41,66792,51879],{"class":275},[41,66794,51916],{"class":51403},[41,66796,51410],{"class":275},[41,66798,66799,66801,66803],{"class":43,"line":176},[41,66800,52520],{"class":275},[41,66802,66728],{"class":51403},[41,66804,51410],{"class":275},[41,66806,66807,66809,66811],{"class":43,"line":184},[41,66808,51888],{"class":275},[41,66810,51903],{"class":51403},[41,66812,51410],{"class":275},[20,66814,66815],{},"点击不在跳转！！！",[241,66817,66819],{"id":66818},"_332-事件委托","3.3.2 事件委托",[20,66821,66822],{},[1603,66823],{"alt":37,"src":66824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[32,66826,66828],{"className":50736,"code":66827,"language":50738,"meta":37,"style":37},"\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",[24,66829,66830,66840,66854,66858,66866,66880,66900,66912,66920,66924,66932,66940,66952,66964,66976,66988,67000,67013,67021,67029,67034,67053,67074,67079,67084,67089,67094,67103,67107,67117,67121,67126,67131,67145,67155,67159,67163,67171,67179,67183],{"__ignoreMap":37},[41,66831,66832,66834,66836,66838],{"class":43,"line":44},[41,66833,51400],{"class":275},[41,66835,51404],{"class":51403},[41,66837,51407],{"class":54},[41,66839,51410],{"class":275},[41,66841,66842,66844,66846,66848,66850,66852],{"class":43,"line":51},[41,66843,1183],{"class":275},[41,66845,50738],{"class":51403},[41,66847,51419],{"class":54},[41,66849,321],{"class":275},[41,66851,51424],{"class":378},[41,66853,51410],{"class":275},[41,66855,66856],{"class":43,"line":62},[41,66857,80],{"emptyLinePlaceholder":79},[41,66859,66860,66862,66864],{"class":43,"line":70},[41,66861,1183],{"class":275},[41,66863,51437],{"class":51403},[41,66865,51410],{"class":275},[41,66867,66868,66870,66872,66874,66876,66878],{"class":43,"line":76},[41,66869,52247],{"class":275},[41,66871,51447],{"class":51403},[41,66873,51450],{"class":54},[41,66875,321],{"class":275},[41,66877,51455],{"class":378},[41,66879,51410],{"class":275},[41,66881,66882,66884,66886,66888,66890,66892,66894,66896,66898],{"class":43,"line":83},[41,66883,52247],{"class":275},[41,66885,51447],{"class":51403},[41,66887,15058],{"class":54},[41,66889,321],{"class":275},[41,66891,51494],{"class":378},[41,66893,51474],{"class":54},[41,66895,321],{"class":275},[41,66897,51501],{"class":378},[41,66899,51410],{"class":275},[41,66901,66902,66904,66906,66908,66910],{"class":43,"line":89},[41,66903,52247],{"class":275},[41,66905,51510],{"class":51403},[41,66907,51513],{"class":275},[41,66909,51510],{"class":51403},[41,66911,51410],{"class":275},[41,66913,66914,66916,66918],{"class":43,"line":96},[41,66915,51888],{"class":275},[41,66917,51437],{"class":51403},[41,66919,51410],{"class":275},[41,66921,66922],{"class":43,"line":104},[41,66923,80],{"emptyLinePlaceholder":79},[41,66925,66926,66928,66930],{"class":43,"line":176},[41,66927,1183],{"class":275},[41,66929,51903],{"class":51403},[41,66931,51410],{"class":275},[41,66933,66934,66936,66938],{"class":43,"line":184},[41,66935,52247],{"class":275},[41,66937,1280],{"class":51403},[41,66939,51410],{"class":275},[41,66941,66942,66944,66946,66948,66950],{"class":43,"line":1757},[41,66943,51444],{"class":275},[41,66945,227],{"class":51403},[41,66947,54069],{"class":275},[41,66949,227],{"class":51403},[41,66951,51410],{"class":275},[41,66953,66954,66956,66958,66960,66962],{"class":43,"line":1763},[41,66955,51444],{"class":275},[41,66957,227],{"class":51403},[41,66959,54088],{"class":275},[41,66961,227],{"class":51403},[41,66963,51410],{"class":275},[41,66965,66966,66968,66970,66972,66974],{"class":43,"line":1768},[41,66967,51444],{"class":275},[41,66969,227],{"class":51403},[41,66971,54107],{"class":275},[41,66973,227],{"class":51403},[41,66975,51410],{"class":275},[41,66977,66978,66980,66982,66984,66986],{"class":43,"line":1782},[41,66979,51444],{"class":275},[41,66981,227],{"class":51403},[41,66983,54126],{"class":275},[41,66985,227],{"class":51403},[41,66987,51410],{"class":275},[41,66989,66990,66992,66994,66996,66998],{"class":43,"line":1787},[41,66991,51444],{"class":275},[41,66993,227],{"class":51403},[41,66995,54145],{"class":275},[41,66997,227],{"class":51403},[41,66999,51410],{"class":275},[41,67001,67002,67004,67006,67009,67011],{"class":43,"line":1793},[41,67003,51444],{"class":275},[41,67005,20],{"class":51403},[41,67007,67008],{"class":275},">我不需要变色\u003C\u002F",[41,67010,20],{"class":51403},[41,67012,51410],{"class":275},[41,67014,67015,67017,67019],{"class":43,"line":1814},[41,67016,52520],{"class":275},[41,67018,1280],{"class":51403},[41,67020,51410],{"class":275},[41,67022,67023,67025,67027],{"class":43,"line":1819},[41,67024,52247],{"class":275},[41,67026,51916],{"class":51403},[41,67028,51410],{"class":275},[41,67030,67031],{"class":43,"line":1833},[41,67032,67033],{"class":47},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[41,67035,67036,67038,67040,67042,67044,67046,67048,67051],{"class":43,"line":1838},[41,67037,11359],{"class":271},[41,67039,61395],{"class":58},[41,67041,13702],{"class":271},[41,67043,54499],{"class":275},[41,67045,54502],{"class":54},[41,67047,276],{"class":275},[41,67049,67050],{"class":378},"'ul'",[41,67052,282],{"class":275},[41,67054,67055,67058,67060,67062,67064,67066,67068,67070,67072],{"class":43,"line":1867},[41,67056,67057],{"class":275},"    ul.",[41,67059,57916],{"class":54},[41,67061,276],{"class":275},[41,67063,57921],{"class":378},[41,67065,12573],{"class":275},[41,67067,54552],{"class":271},[41,67069,1798],{"class":275},[41,67071,348],{"class":5354},[41,67073,12580],{"class":275},[41,67075,67076],{"class":43,"line":1872},[41,67077,67078],{"class":47},"      \u002F\u002F alert(1)\n",[41,67080,67081],{"class":43,"line":1889},[41,67082,67083],{"class":47},"      \u002F\u002F e.target就是我们点击的对象\n",[41,67085,67086],{"class":43,"line":1894},[41,67087,67088],{"class":47},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[41,67090,67091],{"class":43,"line":1899},[41,67092,67093],{"class":47},"      \u002F\u002F e.target.style.color = 'red'\n",[41,67095,67096,67098,67100],{"class":43,"line":1904},[41,67097,58347],{"class":275},[41,67099,58350],{"class":54},[41,67101,67102],{"class":275},"(e)\n",[41,67104,67105],{"class":43,"line":1918},[41,67106,80],{"emptyLinePlaceholder":79},[41,67108,67109,67111,67114],{"class":43,"line":1923},[41,67110,58347],{"class":275},[41,67112,67113],{"class":54},"dir",[41,67115,67116],{"class":275},"(e.target)\n",[41,67118,67119],{"class":43,"line":2715},[41,67120,80],{"emptyLinePlaceholder":79},[41,67122,67123],{"class":43,"line":2729},[41,67124,67125],{"class":47},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[41,67127,67128],{"class":43,"line":2737},[41,67129,67130],{"class":47},"      \u002F\u002F 通过tagName来进行判断\n",[41,67132,67133,67135,67138,67140,67143],{"class":43,"line":2742},[41,67134,54583],{"class":271},[41,67136,67137],{"class":275}," (e.target.tagName ",[41,67139,54589],{"class":271},[41,67141,67142],{"class":378}," 'LI'",[41,67144,12580],{"class":275},[41,67146,67147,67150,67152],{"class":43,"line":2748},[41,67148,67149],{"class":275},"        e.target.style.color ",[41,67151,321],{"class":271},[41,67153,67154],{"class":378}," 'red'\n",[41,67156,67157],{"class":43,"line":2754},[41,67158,52501],{"class":275},[41,67160,67161],{"class":43,"line":2759},[41,67162,33564],{"class":275},[41,67164,67165,67167,67169],{"class":43,"line":8086},[41,67166,52520],{"class":275},[41,67168,51916],{"class":51403},[41,67170,51410],{"class":275},[41,67172,67173,67175,67177],{"class":43,"line":8110},[41,67174,51888],{"class":275},[41,67176,51903],{"class":51403},[41,67178,51410],{"class":275},[41,67180,67181],{"class":43,"line":8115},[41,67182,80],{"emptyLinePlaceholder":79},[41,67184,67185,67187,67189],{"class":43,"line":8121},[41,67186,51888],{"class":275},[41,67188,50738],{"class":51403},[41,67190,51410],{"class":275},[20,67192,67193],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[20,67195,67196],{},"if(e.target.ragName==='P') {}",[20,67198,67199],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[20,67201,67202],{},"通过事件委托的方式实现tab栏切换改造：",[20,67204,67205],{},"一定要记住自定义属性！！！！！！",[20,67207,67208],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[20,67210,67211],{},"id是自定义的属性名",[20,67213,67214],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[32,67216,67218],{"className":50736,"code":67217,"language":50738,"meta":37,"style":37},"\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",[24,67219,67220,67230,67244,67248,67256,67270,67290,67310,67322,67330,67336,67346,67356,67360,67364,67370,67382,67394,67406,67422,67426,67430,67436,67448,67460,67472,67482,67492,67496,67500,67508,67520,67530,67542,67546,67550,67558,67568,67578,67588,67592,67596,67606,67620,67632,67636,67640,67652,67662,67678,67688,67692,67696,67710,67720,67730,67734,67738,67744,67758,67762,67766,67774,67784,67788,67792,67801,67811,67815,67823,67831,67835,67843,67857,67871,67883,67891,67930,67962,67994,68026,68058,68066,68074,68088,68122,68156,68190,68224,68258,68266,68274,68282,68287,68292,68311,68316,68336,68344,68349,68362,68383,68396,68400,68405,68410,68423,68443,68471,68475,68479,68483,68491,68499,68503],{"__ignoreMap":37},[41,67221,67222,67224,67226,67228],{"class":43,"line":44},[41,67223,51400],{"class":275},[41,67225,51404],{"class":51403},[41,67227,51407],{"class":54},[41,67229,51410],{"class":275},[41,67231,67232,67234,67236,67238,67240,67242],{"class":43,"line":51},[41,67233,1183],{"class":275},[41,67235,50738],{"class":51403},[41,67237,51419],{"class":54},[41,67239,321],{"class":275},[41,67241,51424],{"class":378},[41,67243,51410],{"class":275},[41,67245,67246],{"class":43,"line":62},[41,67247,80],{"emptyLinePlaceholder":79},[41,67249,67250,67252,67254],{"class":43,"line":70},[41,67251,1183],{"class":275},[41,67253,51437],{"class":51403},[41,67255,51410],{"class":275},[41,67257,67258,67260,67262,67264,67266,67268],{"class":43,"line":76},[41,67259,52247],{"class":275},[41,67261,51447],{"class":51403},[41,67263,51450],{"class":54},[41,67265,321],{"class":275},[41,67267,51455],{"class":378},[41,67269,59230],{"class":275},[41,67271,67272,67274,67276,67278,67280,67282,67284,67286,67288],{"class":43,"line":83},[41,67273,52247],{"class":275},[41,67275,51447],{"class":51403},[41,67277,51466],{"class":54},[41,67279,321],{"class":275},[41,67281,51471],{"class":378},[41,67283,51474],{"class":54},[41,67285,321],{"class":275},[41,67287,51479],{"class":378},[41,67289,59230],{"class":275},[41,67291,67292,67294,67296,67298,67300,67302,67304,67306,67308],{"class":43,"line":89},[41,67293,52247],{"class":275},[41,67295,51447],{"class":51403},[41,67297,15058],{"class":54},[41,67299,321],{"class":275},[41,67301,51494],{"class":378},[41,67303,51474],{"class":54},[41,67305,321],{"class":275},[41,67307,51501],{"class":378},[41,67309,59230],{"class":275},[41,67311,67312,67314,67316,67318,67320],{"class":43,"line":96},[41,67313,52247],{"class":275},[41,67315,51510],{"class":51403},[41,67317,63728],{"class":275},[41,67319,51510],{"class":51403},[41,67321,51410],{"class":275},[41,67323,67324,67326,67328],{"class":43,"line":104},[41,67325,52247],{"class":275},[41,67327,189],{"class":51403},[41,67329,51410],{"class":275},[41,67331,67332,67334],{"class":43,"line":176},[41,67333,6541],{"class":51403},[41,67335,15710],{"class":275},[41,67337,67338,67340,67342,67344],{"class":43,"line":184},[41,67339,54809],{"class":58},[41,67341,51540],{"class":275},[41,67343,465],{"class":58},[41,67345,1434],{"class":275},[41,67347,67348,67350,67352,67354],{"class":43,"line":1757},[41,67349,54798],{"class":58},[41,67351,51540],{"class":275},[41,67353,465],{"class":58},[41,67355,1434],{"class":275},[41,67357,67358],{"class":43,"line":1763},[41,67359,2326],{"class":275},[41,67361,67362],{"class":43,"line":1768},[41,67363,80],{"emptyLinePlaceholder":79},[41,67365,67366,67368],{"class":43,"line":1782},[41,67367,63779],{"class":54},[41,67369,15710],{"class":275},[41,67371,67372,67374,67376,67378,67380],{"class":43,"line":1787},[41,67373,54874],{"class":58},[41,67375,51540],{"class":275},[41,67377,63790],{"class":58},[41,67379,51595],{"class":271},[41,67381,1434],{"class":275},[41,67383,67384,67386,67388,67390,67392],{"class":43,"line":1793},[41,67385,54888],{"class":58},[41,67387,51540],{"class":275},[41,67389,63803],{"class":58},[41,67391,51595],{"class":271},[41,67393,1434],{"class":275},[41,67395,67396,67398,67400,67402,67404],{"class":43,"line":1814},[41,67397,54809],{"class":58},[41,67399,51540],{"class":275},[41,67401,973],{"class":58},[41,67403,51595],{"class":271},[41,67405,1434],{"class":275},[41,67407,67408,67410,67412,67414,67416,67418,67420],{"class":43,"line":1819},[41,67409,62080],{"class":58},[41,67411,51540],{"class":275},[41,67413,26],{"class":58},[41,67415,51595],{"class":271},[41,67417,51624],{"class":58},[41,67419,62347],{"class":58},[41,67421,1434],{"class":275},[41,67423,67424],{"class":43,"line":1833},[41,67425,2326],{"class":275},[41,67427,67428],{"class":43,"line":1838},[41,67429,80],{"emptyLinePlaceholder":79},[41,67431,67432,67434],{"class":43,"line":1867},[41,67433,63848],{"class":54},[41,67435,15710],{"class":275},[41,67437,67438,67440,67442,67444,67446],{"class":43,"line":1872},[41,67439,54874],{"class":58},[41,67441,51540],{"class":275},[41,67443,584],{"class":58},[41,67445,601],{"class":271},[41,67447,1434],{"class":275},[41,67449,67450,67452,67454,67456,67458],{"class":43,"line":1889},[41,67451,54888],{"class":58},[41,67453,51540],{"class":275},[41,67455,1180],{"class":58},[41,67457,51595],{"class":271},[41,67459,1434],{"class":275},[41,67461,67462,67464,67466,67468,67470],{"class":43,"line":1894},[41,67463,57462],{"class":58},[41,67465,51540],{"class":275},[41,67467,1180],{"class":58},[41,67469,51595],{"class":271},[41,67471,1434],{"class":275},[41,67473,67474,67476,67478,67480],{"class":43,"line":1899},[41,67475,55112],{"class":58},[41,67477,51540],{"class":275},[41,67479,51580],{"class":58},[41,67481,1434],{"class":275},[41,67483,67484,67486,67488,67490],{"class":43,"line":1904},[41,67485,55123],{"class":58},[41,67487,51540],{"class":275},[41,67489,51771],{"class":58},[41,67491,1434],{"class":275},[41,67493,67494],{"class":43,"line":1918},[41,67495,2326],{"class":275},[41,67497,67498],{"class":43,"line":1923},[41,67499,80],{"emptyLinePlaceholder":79},[41,67501,67502,67504,67506],{"class":43,"line":2715},[41,67503,63848],{"class":54},[41,67505,63921],{"class":51403},[41,67507,15710],{"class":275},[41,67509,67510,67512,67514,67516,67518],{"class":43,"line":2729},[41,67511,55025],{"class":58},[41,67513,51540],{"class":275},[41,67515,1073],{"class":58},[41,67517,51595],{"class":271},[41,67519,1434],{"class":275},[41,67521,67522,67524,67526,67528],{"class":43,"line":2737},[41,67523,62437],{"class":58},[41,67525,51540],{"class":275},[41,67527,63944],{"class":58},[41,67529,1434],{"class":275},[41,67531,67532,67534,67536,67538,67540],{"class":43,"line":2742},[41,67533,62103],{"class":58},[41,67535,51540],{"class":275},[41,67537,973],{"class":58},[41,67539,51595],{"class":271},[41,67541,1434],{"class":275},[41,67543,67544],{"class":43,"line":2748},[41,67545,2326],{"class":275},[41,67547,67548],{"class":43,"line":2754},[41,67549,80],{"emptyLinePlaceholder":79},[41,67551,67552,67554,67556],{"class":43,"line":2759},[41,67553,63848],{"class":54},[41,67555,61395],{"class":51403},[41,67557,15710],{"class":275},[41,67559,67560,67562,67564,67566],{"class":43,"line":8086},[41,67561,54835],{"class":58},[41,67563,51540],{"class":275},[41,67565,54840],{"class":58},[41,67567,1434],{"class":275},[41,67569,67570,67572,67574,67576],{"class":43,"line":8110},[41,67571,55112],{"class":58},[41,67573,51540],{"class":275},[41,67575,51580],{"class":58},[41,67577,1434],{"class":275},[41,67579,67580,67582,67584,67586],{"class":43,"line":8115},[41,67581,55123],{"class":58},[41,67583,51540],{"class":275},[41,67585,51683],{"class":58},[41,67587,1434],{"class":275},[41,67589,67590],{"class":43,"line":8121},[41,67591,2326],{"class":275},[41,67593,67594],{"class":43,"line":8148},[41,67595,80],{"emptyLinePlaceholder":79},[41,67597,67598,67600,67602,67604],{"class":43,"line":8153},[41,67599,63848],{"class":54},[41,67601,61395],{"class":51403},[41,67603,55178],{"class":51403},[41,67605,15710],{"class":275},[41,67607,67608,67610,67612,67614,67616,67618],{"class":43,"line":8159},[41,67609,54809],{"class":58},[41,67611,51540],{"class":275},[41,67613,465],{"class":58},[41,67615,9088],{"class":58},[41,67617,51595],{"class":271},[41,67619,1434],{"class":275},[41,67621,67622,67624,67626,67628,67630],{"class":43,"line":8171},[41,67623,55025],{"class":58},[41,67625,51540],{"class":275},[41,67627,822],{"class":58},[41,67629,51595],{"class":271},[41,67631,1434],{"class":275},[41,67633,67634],{"class":43,"line":8183},[41,67635,2326],{"class":275},[41,67637,67638],{"class":43,"line":8195},[41,67639,80],{"emptyLinePlaceholder":79},[41,67641,67642,67644,67646,67648,67650],{"class":43,"line":9854},[41,67643,63848],{"class":54},[41,67645,61395],{"class":51403},[41,67647,55178],{"class":51403},[41,67649,1539],{"class":51403},[41,67651,15710],{"class":275},[41,67653,67654,67656,67658,67660],{"class":43,"line":9879},[41,67655,64073],{"class":58},[41,67657,51540],{"class":275},[41,67659,54840],{"class":58},[41,67661,1434],{"class":275},[41,67663,67664,67666,67668,67670,67672,67674,67676],{"class":43,"line":9902},[41,67665,62335],{"class":58},[41,67667,51540],{"class":275},[41,67669,351],{"class":58},[41,67671,51595],{"class":271},[41,67673,51624],{"class":58},[41,67675,64094],{"class":58},[41,67677,1434],{"class":275},[41,67679,67680,67682,67684,67686],{"class":43,"line":9926},[41,67681,57519],{"class":58},[41,67683,51540],{"class":275},[41,67685,62472],{"class":58},[41,67687,1434],{"class":275},[41,67689,67690],{"class":43,"line":9931},[41,67691,2326],{"class":275},[41,67693,67694],{"class":43,"line":9936},[41,67695,80],{"emptyLinePlaceholder":79},[41,67697,67698,67700,67702,67704,67706,67708],{"class":43,"line":9941},[41,67699,63848],{"class":54},[41,67701,61395],{"class":51403},[41,67703,55178],{"class":51403},[41,67705,1539],{"class":51403},[41,67707,64127],{"class":54},[41,67709,15710],{"class":275},[41,67711,67712,67714,67716,67718],{"class":43,"line":9950},[41,67713,61894],{"class":58},[41,67715,51540],{"class":275},[41,67717,64138],{"class":58},[41,67719,1434],{"class":275},[41,67721,67722,67724,67726,67728],{"class":43,"line":9955},[41,67723,57519],{"class":58},[41,67725,51540],{"class":275},[41,67727,64138],{"class":58},[41,67729,1434],{"class":275},[41,67731,67732],{"class":43,"line":9961},[41,67733,2326],{"class":275},[41,67735,67736],{"class":43,"line":9982},[41,67737,80],{"emptyLinePlaceholder":79},[41,67739,67740,67742],{"class":43,"line":9988},[41,67741,64163],{"class":54},[41,67743,15710],{"class":275},[41,67745,67746,67748,67750,67752,67754,67756],{"class":43,"line":10002},[41,67747,54798],{"class":58},[41,67749,51540],{"class":275},[41,67751,465],{"class":58},[41,67753,64176],{"class":58},[41,67755,51595],{"class":271},[41,67757,1434],{"class":275},[41,67759,67760],{"class":43,"line":10008},[41,67761,2326],{"class":275},[41,67763,67764],{"class":43,"line":10035},[41,67765,80],{"emptyLinePlaceholder":79},[41,67767,67768,67770,67772],{"class":43,"line":10044},[41,67769,64163],{"class":54},[41,67771,62277],{"class":54},[41,67773,15710],{"class":275},[41,67775,67776,67778,67780,67782],{"class":43,"line":10050},[41,67777,55112],{"class":58},[41,67779,51540],{"class":275},[41,67781,54840],{"class":58},[41,67783,1434],{"class":275},[41,67785,67786],{"class":43,"line":10058},[41,67787,2326],{"class":275},[41,67789,67790],{"class":43,"line":10063},[41,67791,80],{"emptyLinePlaceholder":79},[41,67793,67794,67796,67799],{"class":43,"line":16742},[41,67795,64163],{"class":54},[41,67797,67798],{"class":54}," .active",[41,67800,15710],{"class":275},[41,67802,67803,67805,67807,67809],{"class":43,"line":16748},[41,67804,55112],{"class":58},[41,67806,51540],{"class":275},[41,67808,60972],{"class":58},[41,67810,1434],{"class":275},[41,67812,67813],{"class":43,"line":16771},[41,67814,2326],{"class":275},[41,67816,67817,67819,67821],{"class":43,"line":16777},[41,67818,52520],{"class":275},[41,67820,189],{"class":51403},[41,67822,51410],{"class":275},[41,67824,67825,67827,67829],{"class":43,"line":16800},[41,67826,51888],{"class":275},[41,67828,51437],{"class":51403},[41,67830,51410],{"class":275},[41,67832,67833],{"class":43,"line":16814},[41,67834,80],{"emptyLinePlaceholder":79},[41,67836,67837,67839,67841],{"class":43,"line":16834},[41,67838,1183],{"class":275},[41,67840,51903],{"class":51403},[41,67842,51410],{"class":275},[41,67844,67845,67847,67849,67851,67853,67855],{"class":43,"line":16840},[41,67846,52247],{"class":275},[41,67848,51714],{"class":51403},[41,67850,53589],{"class":54},[41,67852,321],{"class":275},[41,67854,64278],{"class":378},[41,67856,51410],{"class":275},[41,67858,67859,67861,67863,67865,67867,67869],{"class":43,"line":16851},[41,67860,51444],{"class":275},[41,67862,51714],{"class":51403},[41,67864,53589],{"class":54},[41,67866,321],{"class":275},[41,67868,64293],{"class":378},[41,67870,51410],{"class":275},[41,67872,67873,67875,67877,67879,67881],{"class":43,"line":16874},[41,67874,55337],{"class":275},[41,67876,241],{"class":51403},[41,67878,64304],{"class":275},[41,67880,241],{"class":51403},[41,67882,51410],{"class":275},[41,67884,67885,67887,67889],{"class":43,"line":16896},[41,67886,55337],{"class":275},[41,67888,1280],{"class":51403},[41,67890,51410],{"class":275},[41,67892,67893,67895,67897,67899,67901,67903,67905,67907,67909,67911,67913,67915,67917,67920,67922,67924,67926,67928],{"class":43,"line":16901},[41,67894,55405],{"class":275},[41,67896,227],{"class":51403},[41,67898,61155],{"class":275},[41,67900,511],{"class":51403},[41,67902,53589],{"class":54},[41,67904,321],{"class":275},[41,67906,59809],{"class":378},[41,67908,61160],{"class":54},[41,67910,321],{"class":275},[41,67912,64339],{"class":378},[41,67914,54054],{"class":54},[41,67916,321],{"class":275},[41,67918,67919],{"class":378},"\"0\"",[41,67921,64342],{"class":275},[41,67923,511],{"class":51403},[41,67925,55417],{"class":275},[41,67927,227],{"class":51403},[41,67929,51410],{"class":275},[41,67931,67932,67934,67936,67938,67940,67942,67944,67946,67948,67950,67952,67954,67956,67958,67960],{"class":43,"line":16907},[41,67933,55405],{"class":275},[41,67935,227],{"class":51403},[41,67937,61155],{"class":275},[41,67939,511],{"class":51403},[41,67941,61160],{"class":54},[41,67943,321],{"class":275},[41,67945,64339],{"class":378},[41,67947,54054],{"class":54},[41,67949,321],{"class":275},[41,67951,3816],{"class":378},[41,67953,64369],{"class":275},[41,67955,511],{"class":51403},[41,67957,55417],{"class":275},[41,67959,227],{"class":51403},[41,67961,51410],{"class":275},[41,67963,67964,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992],{"class":43,"line":16921},[41,67965,55405],{"class":275},[41,67967,227],{"class":51403},[41,67969,61155],{"class":275},[41,67971,511],{"class":51403},[41,67973,61160],{"class":54},[41,67975,321],{"class":275},[41,67977,64339],{"class":378},[41,67979,54054],{"class":54},[41,67981,321],{"class":275},[41,67983,3839],{"class":378},[41,67985,64396],{"class":275},[41,67987,511],{"class":51403},[41,67989,55417],{"class":275},[41,67991,227],{"class":51403},[41,67993,51410],{"class":275},[41,67995,67996,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024],{"class":43,"line":16934},[41,67997,55405],{"class":275},[41,67999,227],{"class":51403},[41,68001,61155],{"class":275},[41,68003,511],{"class":51403},[41,68005,61160],{"class":54},[41,68007,321],{"class":275},[41,68009,64339],{"class":378},[41,68011,54054],{"class":54},[41,68013,321],{"class":275},[41,68015,3852],{"class":378},[41,68017,64423],{"class":275},[41,68019,511],{"class":51403},[41,68021,55417],{"class":275},[41,68023,227],{"class":51403},[41,68025,51410],{"class":275},[41,68027,68028,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056],{"class":43,"line":16939},[41,68029,55405],{"class":275},[41,68031,227],{"class":51403},[41,68033,61155],{"class":275},[41,68035,511],{"class":51403},[41,68037,61160],{"class":54},[41,68039,321],{"class":275},[41,68041,64339],{"class":378},[41,68043,54054],{"class":54},[41,68045,321],{"class":275},[41,68047,3865],{"class":378},[41,68049,64450],{"class":275},[41,68051,511],{"class":51403},[41,68053,55417],{"class":275},[41,68055,227],{"class":51403},[41,68057,51410],{"class":275},[41,68059,68060,68062,68064],{"class":43,"line":16953},[41,68061,55510],{"class":275},[41,68063,1280],{"class":51403},[41,68065,51410],{"class":275},[41,68067,68068,68070,68072],{"class":43,"line":16958},[41,68069,51879],{"class":275},[41,68071,51714],{"class":51403},[41,68073,51410],{"class":275},[41,68075,68076,68078,68080,68082,68084,68086],{"class":43,"line":16964},[41,68077,51444],{"class":275},[41,68079,51714],{"class":51403},[41,68081,53589],{"class":54},[41,68083,321],{"class":275},[41,68085,64487],{"class":378},[41,68087,51410],{"class":275},[41,68089,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120],{"class":43,"line":16969},[41,68091,55337],{"class":275},[41,68093,51714],{"class":51403},[41,68095,53589],{"class":54},[41,68097,321],{"class":275},[41,68099,64502],{"class":378},[41,68101,61155],{"class":275},[41,68103,1603],{"class":51403},[41,68105,55342],{"class":54},[41,68107,321],{"class":275},[41,68109,64513],{"class":378},[41,68111,55350],{"class":54},[41,68113,321],{"class":275},[41,68115,7790],{"class":378},[41,68117,64522],{"class":275},[41,68119,51714],{"class":51403},[41,68121,51410],{"class":275},[41,68123,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154],{"class":43,"line":16983},[41,68125,55337],{"class":275},[41,68127,51714],{"class":51403},[41,68129,53589],{"class":54},[41,68131,321],{"class":275},[41,68133,62726],{"class":378},[41,68135,61155],{"class":275},[41,68137,1603],{"class":51403},[41,68139,55342],{"class":54},[41,68141,321],{"class":275},[41,68143,64549],{"class":378},[41,68145,55350],{"class":54},[41,68147,321],{"class":275},[41,68149,7790],{"class":378},[41,68151,64522],{"class":275},[41,68153,51714],{"class":51403},[41,68155,51410],{"class":275},[41,68157,68158,68160,68162,68164,68166,68168,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188],{"class":43,"line":16988},[41,68159,55337],{"class":275},[41,68161,51714],{"class":51403},[41,68163,53589],{"class":54},[41,68165,321],{"class":275},[41,68167,62726],{"class":378},[41,68169,61155],{"class":275},[41,68171,1603],{"class":51403},[41,68173,55342],{"class":54},[41,68175,321],{"class":275},[41,68177,64584],{"class":378},[41,68179,55350],{"class":54},[41,68181,321],{"class":275},[41,68183,7790],{"class":378},[41,68185,64522],{"class":275},[41,68187,51714],{"class":51403},[41,68189,51410],{"class":275},[41,68191,68192,68194,68196,68198,68200,68202,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222],{"class":43,"line":16993},[41,68193,55337],{"class":275},[41,68195,51714],{"class":51403},[41,68197,53589],{"class":54},[41,68199,321],{"class":275},[41,68201,62726],{"class":378},[41,68203,61155],{"class":275},[41,68205,1603],{"class":51403},[41,68207,55342],{"class":54},[41,68209,321],{"class":275},[41,68211,64619],{"class":378},[41,68213,55350],{"class":54},[41,68215,321],{"class":275},[41,68217,7790],{"class":378},[41,68219,64522],{"class":275},[41,68221,51714],{"class":51403},[41,68223,51410],{"class":275},[41,68225,68226,68228,68230,68232,68234,68236,68238,68240,68242,68244,68246,68248,68250,68252,68254,68256],{"class":43,"line":17007},[41,68227,55337],{"class":275},[41,68229,51714],{"class":51403},[41,68231,53589],{"class":54},[41,68233,321],{"class":275},[41,68235,62726],{"class":378},[41,68237,61155],{"class":275},[41,68239,1603],{"class":51403},[41,68241,55342],{"class":54},[41,68243,321],{"class":275},[41,68245,64654],{"class":378},[41,68247,55350],{"class":54},[41,68249,321],{"class":275},[41,68251,7790],{"class":378},[41,68253,64522],{"class":275},[41,68255,51714],{"class":51403},[41,68257,51410],{"class":275},[41,68259,68260,68262,68264],{"class":43,"line":17019},[41,68261,51879],{"class":275},[41,68263,51714],{"class":51403},[41,68265,51410],{"class":275},[41,68267,68268,68270,68272],{"class":43,"line":17024},[41,68269,52520],{"class":275},[41,68271,51714],{"class":51403},[41,68273,51410],{"class":275},[41,68275,68276,68278,68280],{"class":43,"line":17037},[41,68277,52247],{"class":275},[41,68279,51916],{"class":51403},[41,68281,51410],{"class":275},[41,68283,68284],{"class":43,"line":17042},[41,68285,68286],{"class":47},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[41,68288,68289],{"class":43,"line":17047},[41,68290,68291],{"class":47},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[41,68293,68294,68296,68298,68300,68302,68304,68306,68309],{"class":43,"line":17052},[41,68295,11359],{"class":271},[41,68297,61395],{"class":58},[41,68299,13702],{"class":271},[41,68301,54499],{"class":275},[41,68303,54502],{"class":54},[41,68305,276],{"class":275},[41,68307,68308],{"class":378},"'.tab-nav ul'",[41,68310,282],{"class":275},[41,68312,68313],{"class":43,"line":17065},[41,68314,68315],{"class":47},"    \u002F\u002F 2.添加事件\n",[41,68317,68318,68320,68322,68324,68326,68328,68330,68332,68334],{"class":43,"line":17070},[41,68319,67057],{"class":275},[41,68321,57916],{"class":54},[41,68323,276],{"class":275},[41,68325,57921],{"class":378},[41,68327,12573],{"class":275},[41,68329,54552],{"class":271},[41,68331,1798],{"class":275},[41,68333,348],{"class":5354},[41,68335,12580],{"class":275},[41,68337,68338,68340,68342],{"class":43,"line":32736},[41,68339,58347],{"class":275},[41,68341,67113],{"class":54},[41,68343,67116],{"class":275},[41,68345,68346],{"class":43,"line":32742},[41,68347,68348],{"class":47},"      \u002F\u002Fe.targer是我们点击的对象\n",[41,68350,68351,68353,68355,68357,68360],{"class":43,"line":32748},[41,68352,54583],{"class":271},[41,68354,67137],{"class":275},[41,68356,54589],{"class":271},[41,68358,68359],{"class":378}," 'A'",[41,68361,12580],{"class":275},[41,68363,68364,68366,68368,68370,68373,68375,68377,68379,68381],{"class":43,"line":32754},[41,68365,52028],{"class":275},[41,68367,54502],{"class":54},[41,68369,276],{"class":275},[41,68371,68372],{"class":378},"'.active'",[41,68374,57106],{"class":275},[41,68376,57109],{"class":54},[41,68378,276],{"class":275},[41,68380,64817],{"class":378},[41,68382,282],{"class":275},[41,68384,68385,68388,68390,68392,68394],{"class":43,"line":32760},[41,68386,68387],{"class":275},"        e.target.classList.",[41,68389,5472],{"class":54},[41,68391,276],{"class":275},[41,68393,64817],{"class":378},[41,68395,282],{"class":275},[41,68397,68398],{"class":43,"line":32771},[41,68399,80],{"emptyLinePlaceholder":79},[41,68401,68402],{"class":43,"line":32777},[41,68403,68404],{"class":47},"        \u002F\u002F 下面大盒子模块\n",[41,68406,68407],{"class":43,"line":32797},[41,68408,68409],{"class":47},"        \u002F\u002F console.log(e.target.dataset.id)\n",[41,68411,68412,68414,68416,68418,68420],{"class":43,"line":32803},[41,68413,61373],{"class":271},[41,68415,3170],{"class":58},[41,68417,13702],{"class":271},[41,68419,45669],{"class":271},[41,68421,68422],{"class":275},"e.target.dataset.id\n",[41,68424,68425,68427,68429,68431,68433,68435,68437,68439,68441],{"class":43,"line":32814},[41,68426,52028],{"class":275},[41,68428,54502],{"class":54},[41,68430,276],{"class":275},[41,68432,64865],{"class":378},[41,68434,57106],{"class":275},[41,68436,57109],{"class":54},[41,68438,276],{"class":275},[41,68440,64817],{"class":378},[41,68442,282],{"class":275},[41,68444,68445,68447,68449,68451,68453,68455,68457,68459,68461,68463,68465,68467,68469],{"class":43,"line":32820},[41,68446,52028],{"class":275},[41,68448,54502],{"class":54},[41,68450,276],{"class":275},[41,68452,64891],{"class":378},[41,68454,714],{"class":275},[41,68456,45669],{"class":271},[41,68458,25221],{"class":58},[41,68460,57135],{"class":378},[41,68462,57106],{"class":275},[41,68464,5472],{"class":54},[41,68466,276],{"class":275},[41,68468,64817],{"class":378},[41,68470,282],{"class":275},[41,68472,68473],{"class":43,"line":32826},[41,68474,80],{"emptyLinePlaceholder":79},[41,68476,68477],{"class":43,"line":32832},[41,68478,52501],{"class":275},[41,68480,68481],{"class":43,"line":32838},[41,68482,33564],{"class":275},[41,68484,68485,68487,68489],{"class":43,"line":32844},[41,68486,52520],{"class":275},[41,68488,51916],{"class":51403},[41,68490,51410],{"class":275},[41,68492,68493,68495,68497],{"class":43,"line":32850},[41,68494,51888],{"class":275},[41,68496,51903],{"class":51403},[41,68498,51410],{"class":275},[41,68500,68501],{"class":43,"line":32856},[41,68502,80],{"emptyLinePlaceholder":79},[41,68504,68505,68507,68509],{"class":43,"line":32876},[41,68506,51888],{"class":275},[41,68508,50738],{"class":51403},[41,68510,51410],{"class":275},[241,68512,68514],{"id":68513},"_333-页面加载事件","3.3.3 页面加载事件",[224,68516,68517],{},[227,68518,68519],{},"load",[20,68521,68522],{},[1603,68523],{"alt":37,"src":68524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[20,68526,68527],{},"window代表整个窗口，比document还要大",[20,68529,68530],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[20,68532,68533],{},"img.addEventListener('load', function () {",[20,68535,68536],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[20,68538,52567],{},[224,68540,68541],{"start":51},[227,68542,68543],{},"DOMContentLoaded",[20,68545,68546],{},[1603,68547],{"alt":37,"src":68548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[20,68550,68551],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[241,68553,68555],{"id":68554},"_334-元素滚动事件","3.3.4 元素滚动事件",[20,68557,68558],{},[1603,68559],{"alt":37,"src":68560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[20,68562,68563],{},[1603,68564],{"alt":37,"src":68565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[20,68567,68568],{},[1603,68569],{"alt":37,"src":68570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[20,68572,68573],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[20,68575,68576],{},"获得的是数字型数据，不带单位",[20,68578,68579],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[20,68581,68582],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[20,68584,68585],{},"它是通过document.documentElement来获取",[20,68587,68588],{},[1603,68589],{"alt":37,"src":68590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[20,68592,68593],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[241,68595,68597],{"id":68596},"_335-页面缩放事件","3.3.5 页面缩放事件",[20,68599,68600],{},[1603,68601],{"alt":37,"src":68602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[20,68604,68605],{},[1603,68606],{"alt":37,"src":68607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[241,68609,68611],{"id":68610},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[20,68613,68614],{},[1603,68615],{"alt":37,"src":68616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[20,68618,68619],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[20,68621,68622],{},[1603,68623],{"alt":37,"src":68624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[20,68626,68627],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[20,68629,68630],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[20,68632,68633],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[20,68635,68636],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[20,68638,68639],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[20,68641,68642],{},[1603,68643],{"alt":37,"src":68644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[20,68646,68647],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[20,68649,68650],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[20,68652,68653],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[20,68655,68656],{},"e.pageX-box.getBoundingClientRect()",[241,68658,68660],{"id":68659},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[20,68662,68663],{},[1603,68664],{"alt":37,"src":68665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[20,68667,68668],{},"这个是相对于视口来说的，它是个方法，不是属性值",[241,68670,68672],{"id":68671},"_338-总结","3.3.8 总结",[20,68674,68675],{},[1603,68676],{"alt":37,"src":68677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[20,68679,68680],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[20,68682,68683],{},"修改盒子的宽高只能通过width和height来实现",[241,68685,68687],{"id":68686},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[32,68689,68691],{"className":50736,"code":68690,"language":50738,"meta":37,"style":37},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[24,68692,68693,68698,68703,68708,68713],{"__ignoreMap":37},[41,68694,68695],{"class":43,"line":44},[41,68696,68697],{"class":275},"\u002F* 页面滑动 *\u002F\n",[41,68699,68700],{"class":43,"line":51},[41,68701,68702],{"class":275},"html {\n",[41,68704,68705],{"class":43,"line":62},[41,68706,68707],{"class":275},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[41,68709,68710],{"class":43,"line":70},[41,68711,68712],{"class":275},"  scroll-behavior: smooth;\n",[41,68714,68715],{"class":43,"line":76},[41,68716,1706],{"class":275},[20,68718,68719],{},"默认是auto",[241,68721,68723],{"id":68722},"_3310-日期对象","3.3.10 日期对象",[22136,68725,68727],{"id":68726},"_33101-实例化","3.3.10.1 实例化",[20,68729,68730],{},[1603,68731],{"alt":37,"src":68732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22136,68734,68736],{"id":68735},"_33102-时期对象方法","3.3.10.2 时期对象方法",[20,68738,68739],{},[1603,68740],{"alt":37,"src":68741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[20,68743,68744],{},"月份+1",[20,68746,68747],{},"老外认为第一天为0，星期天",[20,68749,68750],{},"方法使用的时候必须要跟括号",[20,68752,68753],{},"快速获得日期",[20,68755,68756],{},"\u002F\u002F 得到年月日",[20,68758,68759],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[20,68761,68762],{},"\u002F\u002F 得到当地日期",[20,68764,68765],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[20,68767,68768],{},"\u002F\u002F 得到当地时间",[20,68770,68771],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[20,68773,68774],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[20,68776,68777],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51916,68779,68780],{},"\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",[20,68782,68783],{},"学会去封装函数！",[22136,68785,68787],{"id":68786},"_33103-时间戳","3.3.10.3 时间戳",[20,68789,68790],{},[1603,68791],{"alt":37,"src":68792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[20,68794,68795],{},[1603,68796],{"alt":37,"src":68797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[20,68799,68800],{},"三种方法记住一个就可以",[241,68802,68804],{"id":68803},"_3311-节点操作","3.3.11 节点操作",[22136,68806,68808],{"id":68807},"_33111-dom节点","3.3.11.1 DOM节点",[20,68810,68811],{},[1603,68812],{"alt":37,"src":68813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[20,68815,68816],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22136,68818,68820],{"id":68819},"_33112-查找节点","3.3.11.2 查找节点",[20,68822,68823],{},"前边的document.querySelector()是获取的元素",[20,68825,68826],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[20,68828,68829],{},[1603,68830],{"alt":37,"src":68831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[224,68833,68834],{},[227,68835,68836],{},"父节点",[20,68838,68839],{},[1603,68840],{"alt":37,"src":68841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[224,68843,68844],{"start":51},[227,68845,68846],{},"子节点",[20,68848,68849],{},[1603,68850],{"alt":37,"src":68851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[20,68853,68854],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[20,68856,68857],{},"children获得的是伪数组，是亲儿子",[224,68859,68860],{"start":62},[227,68861,68862],{},"兄弟节点",[20,68864,68865],{},[1603,68866],{"alt":37,"src":68867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22136,68869,68871],{"id":68870},"_33113-增加节点","3.3.11.3 增加节点",[20,68873,68874],{},[1603,68875],{"alt":37,"src":68876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[20,68878,68879],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[20,68881,68882],{},[1603,68883],{"alt":37,"src":68884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[20,68886,68887],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[20,68889,68890],{},"下面是写法的部分展示，就按照下边的格式来写",[20,68892,68893],{},"例：",[51916,68895,68896],{},"\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",[20,68898,68899],{},[1603,68900],{"alt":37,"src":68901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[20,68903,68904],{},"false只克隆标签，里边的内容不会克隆过来",[32,68906,68908],{"className":50736,"code":68907,"language":50738,"meta":37,"style":37},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[24,68909,68910],{"__ignoreMap":37},[41,68911,68912],{"class":43,"line":44},[41,68913,68907],{"class":275},[22136,68915,68917],{"id":68916},"_33114-删除节点","3.3.11.4 删除节点",[20,68919,68920],{},[1603,68921],{"alt":37,"src":68922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[20,68924,68925],{},"父亲删儿子",[20,68927,68928],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[241,68930,68932],{"id":68931},"_3312-m端事件","3.3.12 M端事件",[20,68934,68935],{},"M端就是移动端",[20,68937,68938],{},[1603,68939],{"alt":37,"src":68940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[241,68942,68944],{"id":68943},"_3313-插件","3.3.13 插件",[20,68946,68947],{},"要熟悉官网！！！",[20,68949,68950],{},[511,68951,68952],{"href":68952,"rel":68953},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24001],[20,68955,68956],{},[511,68957,68958],{"href":68958,"rel":68959},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24001],[241,68961,68963],{"id":68962},"_3314-学生信息表","3.3.14 学生信息表",[224,68965,68966,68969,68972,68975,68978,68981,68984,68987],{},[227,68967,68968],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[227,68970,68971],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[227,68973,68974],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[227,68976,68977],{},"用好表单元素自带的属性，value,name等",[227,68979,68980],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[227,68982,68983],{},"不要忘记事件对象",[227,68985,68986],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[227,68988,68989],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[20,68991,68992],{},"结构：",[32,68994,68996],{"className":50736,"code":68995,"language":50738,"meta":37,"style":37},"\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",[24,68997,68998,69008,69022,69026,69034,69048,69068,69089,69102,69126,69134,69138,69146,69159,69180,69208,69236,69241,69263,69283,69302,69310,69338,69360,69380,69400,69420,69440,69460,69468,69488,69496,69500,69513,69521,69529,69537,69550,69563,69576,69589,69602,69615,69628,69636,69644,69652,69657,69662,69667,69672,69677,69682,69687,69692,69697,69702,69707,69712,69717,69725,69733,69741,69745,69765,69784,69804,69824,69844,69864,69868,69873,69893,69898,69908,69913,69918,69938,69960,69965,69975,69979,69983,69988,69993,70022,70036,70051,70055,70059,70063,70068,70079,70092,70097,70102,70107,70112,70117,70121,70126,70131,70140,70145,70150,70162,70167,70174,70178,70183,70193,70198,70208,70213,70241,70262,70272,70292,70310,70327,70344,70361,70378,70382,70392,70397,70402,70407,70418,70422,70426,70430,70435,70440,70461,70473,70478,70483,70488,70502,70507,70514,70518,70522,70530,70534,70542,70546],{"__ignoreMap":37},[41,68999,69000,69002,69004,69006],{"class":43,"line":44},[41,69001,51400],{"class":275},[41,69003,51404],{"class":51403},[41,69005,51407],{"class":54},[41,69007,51410],{"class":275},[41,69009,69010,69012,69014,69016,69018,69020],{"class":43,"line":51},[41,69011,1183],{"class":275},[41,69013,50738],{"class":51403},[41,69015,51419],{"class":54},[41,69017,321],{"class":275},[41,69019,51424],{"class":378},[41,69021,51410],{"class":275},[41,69023,69024],{"class":43,"line":62},[41,69025,80],{"emptyLinePlaceholder":79},[41,69027,69028,69030,69032],{"class":43,"line":70},[41,69029,1183],{"class":275},[41,69031,51437],{"class":51403},[41,69033,51410],{"class":275},[41,69035,69036,69038,69040,69042,69044,69046],{"class":43,"line":76},[41,69037,52247],{"class":275},[41,69039,51447],{"class":51403},[41,69041,51450],{"class":54},[41,69043,321],{"class":275},[41,69045,51455],{"class":378},[41,69047,59230],{"class":275},[41,69049,69050,69052,69054,69056,69058,69060,69062,69064,69066],{"class":43,"line":83},[41,69051,52247],{"class":275},[41,69053,51447],{"class":51403},[41,69055,15058],{"class":54},[41,69057,321],{"class":275},[41,69059,51494],{"class":378},[41,69061,51474],{"class":54},[41,69063,321],{"class":275},[41,69065,51501],{"class":378},[41,69067,59230],{"class":275},[41,69069,69070,69072,69074,69076,69078,69080,69082,69084,69087],{"class":43,"line":89},[41,69071,52247],{"class":275},[41,69073,51447],{"class":51403},[41,69075,51466],{"class":54},[41,69077,321],{"class":275},[41,69079,51471],{"class":378},[41,69081,51474],{"class":54},[41,69083,321],{"class":275},[41,69085,69086],{"class":378},"\"ie=edge\"",[41,69088,59230],{"class":275},[41,69090,69091,69093,69095,69098,69100],{"class":43,"line":96},[41,69092,52247],{"class":275},[41,69094,51510],{"class":51403},[41,69096,69097],{"class":275},">学生信息管理\u003C\u002F",[41,69099,51510],{"class":51403},[41,69101,51410],{"class":275},[41,69103,69104,69106,69109,69112,69114,69117,69119,69121,69124],{"class":43,"line":104},[41,69105,52247],{"class":275},[41,69107,69108],{"class":51403},"link",[41,69110,69111],{"class":54}," rel",[41,69113,321],{"class":275},[41,69115,69116],{"class":378},"\"stylesheet\"",[41,69118,61160],{"class":54},[41,69120,321],{"class":275},[41,69122,69123],{"class":378},"\"css\u002Findex.css\"",[41,69125,59230],{"class":275},[41,69127,69128,69130,69132],{"class":43,"line":176},[41,69129,51888],{"class":275},[41,69131,51437],{"class":51403},[41,69133,51410],{"class":275},[41,69135,69136],{"class":43,"line":184},[41,69137,80],{"emptyLinePlaceholder":79},[41,69139,69140,69142,69144],{"class":43,"line":1757},[41,69141,1183],{"class":275},[41,69143,51903],{"class":51403},[41,69145,51410],{"class":275},[41,69147,69148,69150,69152,69155,69157],{"class":43,"line":1763},[41,69149,52247],{"class":275},[41,69151,10],{"class":51403},[41,69153,69154],{"class":275},">新增学员\u003C\u002F",[41,69156,10],{"class":51403},[41,69158,51410],{"class":275},[41,69160,69161,69163,69165,69167,69169,69171,69174,69176,69178],{"class":43,"line":1768},[41,69162,52247],{"class":275},[41,69164,66728],{"class":51403},[41,69166,53589],{"class":54},[41,69168,321],{"class":275},[41,69170,62767],{"class":378},[41,69172,69173],{"class":54}," autocomplete",[41,69175,321],{"class":275},[41,69177,31879],{"class":378},[41,69179,51410],{"class":275},[41,69181,69182,69185,69187,69189,69191,69193,69195,69197,69200,69202,69204,69206],{"class":43,"line":1782},[41,69183,69184],{"class":275},"    姓名：\u003C",[41,69186,53924],{"class":51403},[41,69188,53927],{"class":54},[41,69190,321],{"class":275},[41,69192,62802],{"class":378},[41,69194,53589],{"class":54},[41,69196,321],{"class":275},[41,69198,69199],{"class":378},"\"uname\"",[41,69201,15058],{"class":54},[41,69203,321],{"class":275},[41,69205,69199],{"class":378},[41,69207,59230],{"class":275},[41,69209,69210,69213,69215,69217,69219,69221,69223,69225,69228,69230,69232,69234],{"class":43,"line":1787},[41,69211,69212],{"class":275},"    年龄：\u003C",[41,69214,53924],{"class":51403},[41,69216,53927],{"class":54},[41,69218,321],{"class":275},[41,69220,62802],{"class":378},[41,69222,53589],{"class":54},[41,69224,321],{"class":275},[41,69226,69227],{"class":378},"\"age\"",[41,69229,15058],{"class":54},[41,69231,321],{"class":275},[41,69233,69227],{"class":378},[41,69235,59230],{"class":275},[41,69237,69238],{"class":43,"line":1793},[41,69239,69240],{"class":275},"    性别:\n",[41,69242,69243,69245,69248,69250,69252,69255,69257,69259,69261],{"class":43,"line":1814},[41,69244,51444],{"class":275},[41,69246,69247],{"class":51403},"select",[41,69249,15058],{"class":54},[41,69251,321],{"class":275},[41,69253,69254],{"class":378},"\"gender\"",[41,69256,53589],{"class":54},[41,69258,321],{"class":275},[41,69260,69254],{"class":378},[41,69262,51410],{"class":275},[41,69264,69265,69267,69270,69272,69274,69276,69279,69281],{"class":43,"line":1819},[41,69266,55337],{"class":275},[41,69268,69269],{"class":51403},"option",[41,69271,66754],{"class":54},[41,69273,321],{"class":275},[41,69275,10099],{"class":378},[41,69277,69278],{"class":275},">男\u003C\u002F",[41,69280,69269],{"class":51403},[41,69282,51410],{"class":275},[41,69284,69285,69287,69289,69291,69293,69295,69298,69300],{"class":43,"line":1833},[41,69286,55337],{"class":275},[41,69288,69269],{"class":51403},[41,69290,66754],{"class":54},[41,69292,321],{"class":275},[41,69294,10168],{"class":378},[41,69296,69297],{"class":275},">女\u003C\u002F",[41,69299,69269],{"class":51403},[41,69301,51410],{"class":275},[41,69303,69304,69306,69308],{"class":43,"line":1838},[41,69305,51879],{"class":275},[41,69307,69247],{"class":51403},[41,69309,51410],{"class":275},[41,69311,69312,69315,69317,69319,69321,69323,69325,69327,69330,69332,69334,69336],{"class":43,"line":1867},[41,69313,69314],{"class":275},"    薪资：\u003C",[41,69316,53924],{"class":51403},[41,69318,53927],{"class":54},[41,69320,321],{"class":275},[41,69322,62802],{"class":378},[41,69324,53589],{"class":54},[41,69326,321],{"class":275},[41,69328,69329],{"class":378},"\"salary\"",[41,69331,15058],{"class":54},[41,69333,321],{"class":275},[41,69335,69329],{"class":378},[41,69337,59230],{"class":275},[41,69339,69340,69343,69345,69347,69349,69352,69354,69356,69358],{"class":43,"line":1872},[41,69341,69342],{"class":275},"    就业城市：\u003C",[41,69344,69247],{"class":51403},[41,69346,15058],{"class":54},[41,69348,321],{"class":275},[41,69350,69351],{"class":378},"\"city\"",[41,69353,53589],{"class":54},[41,69355,321],{"class":275},[41,69357,69351],{"class":378},[41,69359,51410],{"class":275},[41,69361,69362,69364,69366,69368,69370,69373,69376,69378],{"class":43,"line":1889},[41,69363,55337],{"class":275},[41,69365,69269],{"class":51403},[41,69367,66754],{"class":54},[41,69369,321],{"class":275},[41,69371,69372],{"class":378},"\"北京\"",[41,69374,69375],{"class":275},">北京\u003C\u002F",[41,69377,69269],{"class":51403},[41,69379,51410],{"class":275},[41,69381,69382,69384,69386,69388,69390,69393,69396,69398],{"class":43,"line":1894},[41,69383,55337],{"class":275},[41,69385,69269],{"class":51403},[41,69387,66754],{"class":54},[41,69389,321],{"class":275},[41,69391,69392],{"class":378},"\"上海\"",[41,69394,69395],{"class":275},">上海\u003C\u002F",[41,69397,69269],{"class":51403},[41,69399,51410],{"class":275},[41,69401,69402,69404,69406,69408,69410,69413,69416,69418],{"class":43,"line":1899},[41,69403,55337],{"class":275},[41,69405,69269],{"class":51403},[41,69407,66754],{"class":54},[41,69409,321],{"class":275},[41,69411,69412],{"class":378},"\"广州\"",[41,69414,69415],{"class":275},">广州\u003C\u002F",[41,69417,69269],{"class":51403},[41,69419,51410],{"class":275},[41,69421,69422,69424,69426,69428,69430,69433,69436,69438],{"class":43,"line":1904},[41,69423,55337],{"class":275},[41,69425,69269],{"class":51403},[41,69427,66754],{"class":54},[41,69429,321],{"class":275},[41,69431,69432],{"class":378},"\"深圳\"",[41,69434,69435],{"class":275},">深圳\u003C\u002F",[41,69437,69269],{"class":51403},[41,69439,51410],{"class":275},[41,69441,69442,69444,69446,69448,69450,69453,69456,69458],{"class":43,"line":1918},[41,69443,55337],{"class":275},[41,69445,69269],{"class":51403},[41,69447,66754],{"class":54},[41,69449,321],{"class":275},[41,69451,69452],{"class":378},"\"曹县\"",[41,69454,69455],{"class":275},">曹县\u003C\u002F",[41,69457,69269],{"class":51403},[41,69459,51410],{"class":275},[41,69461,69462,69464,69466],{"class":43,"line":1923},[41,69463,51879],{"class":275},[41,69465,69247],{"class":51403},[41,69467,51410],{"class":275},[41,69469,69470,69472,69474,69476,69478,69481,69484,69486],{"class":43,"line":2715},[41,69471,51444],{"class":275},[41,69473,53990],{"class":51403},[41,69475,53589],{"class":54},[41,69477,321],{"class":275},[41,69479,69480],{"class":378},"\"add\"",[41,69482,69483],{"class":275},">录入\u003C\u002F",[41,69485,53990],{"class":51403},[41,69487,51410],{"class":275},[41,69489,69490,69492,69494],{"class":43,"line":2729},[41,69491,52520],{"class":275},[41,69493,66728],{"class":51403},[41,69495,51410],{"class":275},[41,69497,69498],{"class":43,"line":2737},[41,69499,80],{"emptyLinePlaceholder":79},[41,69501,69502,69504,69506,69509,69511],{"class":43,"line":2742},[41,69503,52247],{"class":275},[41,69505,10],{"class":51403},[41,69507,69508],{"class":275},">就业榜\u003C\u002F",[41,69510,10],{"class":51403},[41,69512,51410],{"class":275},[41,69514,69515,69517,69519],{"class":43,"line":2748},[41,69516,52247],{"class":275},[41,69518,411],{"class":51403},[41,69520,51410],{"class":275},[41,69522,69523,69525,69527],{"class":43,"line":2754},[41,69524,51444],{"class":275},[41,69526,414],{"class":51403},[41,69528,51410],{"class":275},[41,69530,69531,69533,69535],{"class":43,"line":2759},[41,69532,55337],{"class":275},[41,69534,417],{"class":51403},[41,69536,51410],{"class":275},[41,69538,69539,69541,69543,69546,69548],{"class":43,"line":8086},[41,69540,55405],{"class":275},[41,69542,420],{"class":51403},[41,69544,69545],{"class":275},">序号\u003C\u002F",[41,69547,420],{"class":51403},[41,69549,51410],{"class":275},[41,69551,69552,69554,69556,69559,69561],{"class":43,"line":8110},[41,69553,55405],{"class":275},[41,69555,420],{"class":51403},[41,69557,69558],{"class":275},">姓名\u003C\u002F",[41,69560,420],{"class":51403},[41,69562,51410],{"class":275},[41,69564,69565,69567,69569,69572,69574],{"class":43,"line":8115},[41,69566,55405],{"class":275},[41,69568,420],{"class":51403},[41,69570,69571],{"class":275},">年龄\u003C\u002F",[41,69573,420],{"class":51403},[41,69575,51410],{"class":275},[41,69577,69578,69580,69582,69585,69587],{"class":43,"line":8121},[41,69579,55405],{"class":275},[41,69581,420],{"class":51403},[41,69583,69584],{"class":275},">性别\u003C\u002F",[41,69586,420],{"class":51403},[41,69588,51410],{"class":275},[41,69590,69591,69593,69595,69598,69600],{"class":43,"line":8148},[41,69592,55405],{"class":275},[41,69594,420],{"class":51403},[41,69596,69597],{"class":275},">薪资\u003C\u002F",[41,69599,420],{"class":51403},[41,69601,51410],{"class":275},[41,69603,69604,69606,69608,69611,69613],{"class":43,"line":8153},[41,69605,55405],{"class":275},[41,69607,420],{"class":51403},[41,69609,69610],{"class":275},">就业城市\u003C\u002F",[41,69612,420],{"class":51403},[41,69614,51410],{"class":275},[41,69616,69617,69619,69621,69624,69626],{"class":43,"line":8159},[41,69618,55405],{"class":275},[41,69620,420],{"class":51403},[41,69622,69623],{"class":275},">操作\u003C\u002F",[41,69625,420],{"class":51403},[41,69627,51410],{"class":275},[41,69629,69630,69632,69634],{"class":43,"line":8171},[41,69631,55510],{"class":275},[41,69633,417],{"class":51403},[41,69635,51410],{"class":275},[41,69637,69638,69640,69642],{"class":43,"line":8183},[41,69639,51879],{"class":275},[41,69641,414],{"class":51403},[41,69643,51410],{"class":275},[41,69645,69646,69648,69650],{"class":43,"line":8195},[41,69647,51444],{"class":275},[41,69649,458],{"class":51403},[41,69651,51410],{"class":275},[41,69653,69654],{"class":43,"line":9854},[41,69655,69656],{"class":47},"      \u003C!-- \n",[41,69658,69659],{"class":43,"line":9879},[41,69660,69661],{"class":47},"        \u003Ctr>\n",[41,69663,69664],{"class":43,"line":9902},[41,69665,69666],{"class":47},"          \u003Ctd>1001\u003C\u002Ftd>\n",[41,69668,69669],{"class":43,"line":9926},[41,69670,69671],{"class":47},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[41,69673,69674],{"class":43,"line":9931},[41,69675,69676],{"class":47},"          \u003Ctd>19\u003C\u002Ftd>\n",[41,69678,69679],{"class":43,"line":9936},[41,69680,69681],{"class":47},"          \u003Ctd>男\u003C\u002Ftd>\n",[41,69683,69684],{"class":43,"line":9941},[41,69685,69686],{"class":47},"          \u003Ctd>15000\u003C\u002Ftd>\n",[41,69688,69689],{"class":43,"line":9950},[41,69690,69691],{"class":47},"          \u003Ctd>上海\u003C\u002Ftd>\n",[41,69693,69694],{"class":43,"line":9955},[41,69695,69696],{"class":47},"          \u003Ctd>\n",[41,69698,69699],{"class":43,"line":9961},[41,69700,69701],{"class":47},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[41,69703,69704],{"class":43,"line":9982},[41,69705,69706],{"class":47},"          \u003C\u002Ftd>\n",[41,69708,69709],{"class":43,"line":9988},[41,69710,69711],{"class":47},"        \u003C\u002Ftr> \n",[41,69713,69714],{"class":43,"line":10002},[41,69715,69716],{"class":47},"        -->\n",[41,69718,69719,69721,69723],{"class":43,"line":10008},[41,69720,51879],{"class":275},[41,69722,458],{"class":51403},[41,69724,51410],{"class":275},[41,69726,69727,69729,69731],{"class":43,"line":10035},[41,69728,52520],{"class":275},[41,69730,411],{"class":51403},[41,69732,51410],{"class":275},[41,69734,69735,69737,69739],{"class":43,"line":10044},[41,69736,52247],{"class":275},[41,69738,51916],{"class":51403},[41,69740,51410],{"class":275},[41,69742,69743],{"class":43,"line":10050},[41,69744,60061],{"class":47},[41,69746,69747,69749,69752,69754,69756,69758,69760,69763],{"class":43,"line":10058},[41,69748,11359],{"class":271},[41,69750,69751],{"class":58}," uname",[41,69753,13702],{"class":271},[41,69755,54499],{"class":275},[41,69757,54502],{"class":54},[41,69759,276],{"class":275},[41,69761,69762],{"class":378},"'.uname'",[41,69764,282],{"class":275},[41,69766,69767,69769,69771,69773,69775,69777,69779,69782],{"class":43,"line":10063},[41,69768,11359],{"class":271},[41,69770,15827],{"class":58},[41,69772,13702],{"class":271},[41,69774,54499],{"class":275},[41,69776,54502],{"class":54},[41,69778,276],{"class":275},[41,69780,69781],{"class":378},"'.age'",[41,69783,282],{"class":275},[41,69785,69786,69788,69791,69793,69795,69797,69799,69802],{"class":43,"line":16742},[41,69787,11359],{"class":271},[41,69789,69790],{"class":58}," gender",[41,69792,13702],{"class":271},[41,69794,54499],{"class":275},[41,69796,54502],{"class":54},[41,69798,276],{"class":275},[41,69800,69801],{"class":378},"'.gender'",[41,69803,282],{"class":275},[41,69805,69806,69808,69811,69813,69815,69817,69819,69822],{"class":43,"line":16748},[41,69807,11359],{"class":271},[41,69809,69810],{"class":58}," salary",[41,69812,13702],{"class":271},[41,69814,54499],{"class":275},[41,69816,54502],{"class":54},[41,69818,276],{"class":275},[41,69820,69821],{"class":378},"'.salary'",[41,69823,282],{"class":275},[41,69825,69826,69828,69831,69833,69835,69837,69839,69842],{"class":43,"line":16771},[41,69827,11359],{"class":271},[41,69829,69830],{"class":58}," city",[41,69832,13702],{"class":271},[41,69834,54499],{"class":275},[41,69836,54502],{"class":54},[41,69838,276],{"class":275},[41,69840,69841],{"class":378},"'.city'",[41,69843,282],{"class":275},[41,69845,69846,69848,69851,69853,69855,69857,69859,69862],{"class":43,"line":16777},[41,69847,11359],{"class":271},[41,69849,69850],{"class":58}," tbody",[41,69852,13702],{"class":271},[41,69854,54499],{"class":275},[41,69856,54502],{"class":54},[41,69858,276],{"class":275},[41,69860,69861],{"class":378},"'tbody'",[41,69863,282],{"class":275},[41,69865,69866],{"class":43,"line":16800},[41,69867,80],{"emptyLinePlaceholder":79},[41,69869,69870],{"class":43,"line":16814},[41,69871,69872],{"class":47},"    \u002F\u002F 获取所有带有name属性的元素\n",[41,69874,69875,69877,69880,69882,69884,69886,69888,69891],{"class":43,"line":16834},[41,69876,11359],{"class":271},[41,69878,69879],{"class":58}," items",[41,69881,13702],{"class":271},[41,69883,54499],{"class":275},[41,69885,55784],{"class":54},[41,69887,276],{"class":275},[41,69889,69890],{"class":378},"'[name]'",[41,69892,282],{"class":275},[41,69894,69895],{"class":43,"line":16840},[41,69896,69897],{"class":47},"    \u002F\u002F 声明一个空的数组\n",[41,69899,69900,69902,69904,69906],{"class":43,"line":16851},[41,69901,11359],{"class":271},[41,69903,57798],{"class":58},[41,69905,13702],{"class":271},[41,69907,51941],{"class":275},[41,69909,69910],{"class":43,"line":16874},[41,69911,69912],{"class":47},"    \u002F\u002F 1.录入模块\n",[41,69914,69915],{"class":43,"line":16896},[41,69916,69917],{"class":47},"    \u002F\u002F 1.1这是一个表单提交事件\n",[41,69919,69920,69922,69925,69927,69929,69931,69933,69936],{"class":43,"line":16901},[41,69921,11359],{"class":271},[41,69923,69924],{"class":58}," info",[41,69926,13702],{"class":271},[41,69928,54499],{"class":275},[41,69930,54502],{"class":54},[41,69932,276],{"class":275},[41,69934,69935],{"class":378},"'.info'",[41,69937,282],{"class":275},[41,69939,69940,69943,69945,69947,69950,69952,69954,69956,69958],{"class":43,"line":16907},[41,69941,69942],{"class":275},"    info.",[41,69944,57916],{"class":54},[41,69946,276],{"class":275},[41,69948,69949],{"class":378},"'submit'",[41,69951,12573],{"class":275},[41,69953,54552],{"class":271},[41,69955,1798],{"class":275},[41,69957,348],{"class":5354},[41,69959,12580],{"class":275},[41,69961,69962],{"class":43,"line":16921},[41,69963,69964],{"class":47},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[41,69966,69967,69970,69973],{"class":43,"line":16934},[41,69968,69969],{"class":275},"      e.",[41,69971,69972],{"class":54},"preventDefault",[41,69974,2115],{"class":275},[41,69976,69977],{"class":43,"line":16939},[41,69978,60115],{"class":47},[41,69980,69981],{"class":43,"line":16953},[41,69982,80],{"emptyLinePlaceholder":79},[41,69984,69985],{"class":43,"line":16958},[41,69986,69987],{"class":47},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[41,69989,69990],{"class":43,"line":16964},[41,69991,69992],{"class":47},"      \u002F\u002F 先遍历循环\n",[41,69994,69995,69997,69999,70001,70003,70005,70007,70009,70011,70014,70016,70018,70020],{"class":43,"line":16969},[41,69996,52387],{"class":271},[41,69998,1798],{"class":275},[41,70000,51950],{"class":271},[41,70002,9576],{"class":275},[41,70004,321],{"class":271},[41,70006,4231],{"class":58},[41,70008,9583],{"class":275},[41,70010,1183],{"class":271},[41,70012,70013],{"class":275}," items.",[41,70015,52071],{"class":58},[41,70017,3352],{"class":275},[41,70019,2431],{"class":271},[41,70021,12580],{"class":275},[41,70023,70024,70026,70029,70031,70034],{"class":43,"line":16983},[41,70025,2635],{"class":271},[41,70027,70028],{"class":275}," (items[i].value ",[41,70030,54589],{"class":271},[41,70032,70033],{"class":378}," ''",[41,70035,12580],{"class":275},[41,70037,70038,70041,70044,70046,70049],{"class":43,"line":16988},[41,70039,70040],{"class":271},"          return",[41,70042,70043],{"class":54}," alert",[41,70045,276],{"class":275},[41,70047,70048],{"class":378},"'输入内容不能为空'",[41,70050,282],{"class":275},[41,70052,70053],{"class":43,"line":16993},[41,70054,2667],{"class":275},[41,70056,70057],{"class":43,"line":17007},[41,70058,52501],{"class":275},[41,70060,70061],{"class":43,"line":17019},[41,70062,80],{"emptyLinePlaceholder":79},[41,70064,70065],{"class":43,"line":17024},[41,70066,70067],{"class":47},"      \u002F\u002F 创建新的对象\n",[41,70069,70070,70072,70075,70077],{"class":43,"line":17037},[41,70071,58331],{"class":271},[41,70073,70074],{"class":58}," obj",[41,70076,13702],{"class":271},[41,70078,15710],{"class":275},[41,70080,70081,70084,70086,70088,70090],{"class":43,"line":17042},[41,70082,70083],{"class":275},"        stuID: arr.",[41,70085,52071],{"class":58},[41,70087,45669],{"class":271},[41,70089,25221],{"class":58},[41,70091,31569],{"class":275},[41,70093,70094],{"class":43,"line":17047},[41,70095,70096],{"class":275},"        uname: uname.value,\n",[41,70098,70099],{"class":43,"line":17052},[41,70100,70101],{"class":275},"        age: age.value,\n",[41,70103,70104],{"class":43,"line":17065},[41,70105,70106],{"class":275},"        gender: gender.value,\n",[41,70108,70109],{"class":43,"line":17070},[41,70110,70111],{"class":275},"        salary: salary.value,\n",[41,70113,70114],{"class":43,"line":32736},[41,70115,70116],{"class":275},"        city: city.value\n",[41,70118,70119],{"class":43,"line":32742},[41,70120,52501],{"class":275},[41,70122,70123],{"class":43,"line":32748},[41,70124,70125],{"class":47},"      \u002F\u002F console.log(obj);\n",[41,70127,70128],{"class":43,"line":32754},[41,70129,70130],{"class":47},"      \u002F\u002F 追加到数组里面\n",[41,70132,70133,70135,70137],{"class":43,"line":32760},[41,70134,58110],{"class":275},[41,70136,51987],{"class":54},[41,70138,70139],{"class":275},"(obj)\n",[41,70141,70142],{"class":43,"line":32771},[41,70143,70144],{"class":47},"      \u002F\u002F console.log(arr);\n",[41,70146,70147],{"class":43,"line":32777},[41,70148,70149],{"class":47},"      \u002F\u002F 清空表单  reset重置表单\n",[41,70151,70152,70155,70157,70160],{"class":43,"line":32797},[41,70153,70154],{"class":58},"      this",[41,70156,831],{"class":275},[41,70158,70159],{"class":54},"reset",[41,70161,2115],{"class":275},[41,70163,70164],{"class":43,"line":32803},[41,70165,70166],{"class":47},"      \u002F\u002F 调用渲染函数\n",[41,70168,70169,70172],{"class":43,"line":32814},[41,70170,70171],{"class":54},"      render",[41,70173,2115],{"class":275},[41,70175,70176],{"class":43,"line":32820},[41,70177,33564],{"class":275},[41,70179,70180],{"class":43,"line":32826},[41,70181,70182],{"class":47},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[41,70184,70185,70188,70191],{"class":43,"line":32832},[41,70186,70187],{"class":271},"    function",[41,70189,70190],{"class":54}," render",[41,70192,10991],{"class":275},[41,70194,70195],{"class":43,"line":32838},[41,70196,70197],{"class":47},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[41,70199,70200,70203,70205],{"class":43,"line":32844},[41,70201,70202],{"class":275},"      tbody.innerHTML ",[41,70204,321],{"class":271},[41,70206,70207],{"class":378}," ''\n",[41,70209,70210],{"class":43,"line":32850},[41,70211,70212],{"class":47},"      \u002F\u002F 遍历数组\n",[41,70214,70215,70217,70219,70221,70223,70225,70227,70229,70231,70233,70235,70237,70239],{"class":43,"line":32856},[41,70216,52387],{"class":271},[41,70218,1798],{"class":275},[41,70220,51950],{"class":271},[41,70222,9576],{"class":275},[41,70224,321],{"class":271},[41,70226,4231],{"class":58},[41,70228,9583],{"class":275},[41,70230,1183],{"class":271},[41,70232,52068],{"class":275},[41,70234,52071],{"class":58},[41,70236,3352],{"class":275},[41,70238,2431],{"class":271},[41,70240,12580],{"class":275},[41,70242,70243,70245,70248,70250,70252,70255,70257,70260],{"class":43,"line":32876},[41,70244,61373],{"class":271},[41,70246,70247],{"class":58}," tr",[41,70249,13702],{"class":271},[41,70251,54499],{"class":275},[41,70253,70254],{"class":54},"createElement",[41,70256,276],{"class":275},[41,70258,70259],{"class":378},"'tr'",[41,70261,282],{"class":275},[41,70263,70264,70267,70269],{"class":43,"line":32882},[41,70265,70266],{"class":275},"        tr.innerHTML ",[41,70268,321],{"class":271},[41,70270,70271],{"class":378}," `\n",[41,70273,70274,70277,70279,70281,70283,70286,70289],{"class":43,"line":32898},[41,70275,70276],{"class":378},"        \u003Ctd>${",[41,70278,4018],{"class":275},[41,70280,1163],{"class":378},[41,70282,714],{"class":275},[41,70284,70285],{"class":378},"].",[41,70287,70288],{"class":275},"stuID",[41,70290,70291],{"class":378},"}\u003C\u002Ftd>\n",[41,70293,70294,70297,70299,70301,70303,70305,70308],{"class":43,"line":32904},[41,70295,70296],{"class":378},"          \u003Ctd>${",[41,70298,4018],{"class":275},[41,70300,1163],{"class":378},[41,70302,714],{"class":275},[41,70304,70285],{"class":378},[41,70306,70307],{"class":275},"uname",[41,70309,70291],{"class":378},[41,70311,70312,70314,70316,70318,70320,70322,70325],{"class":43,"line":32918},[41,70313,70296],{"class":378},[41,70315,4018],{"class":275},[41,70317,1163],{"class":378},[41,70319,714],{"class":275},[41,70321,70285],{"class":378},[41,70323,70324],{"class":275},"age",[41,70326,70291],{"class":378},[41,70328,70329,70331,70333,70335,70337,70339,70342],{"class":43,"line":32924},[41,70330,70296],{"class":378},[41,70332,4018],{"class":275},[41,70334,1163],{"class":378},[41,70336,714],{"class":275},[41,70338,70285],{"class":378},[41,70340,70341],{"class":275},"gender",[41,70343,70291],{"class":378},[41,70345,70346,70348,70350,70352,70354,70356,70359],{"class":43,"line":32939},[41,70347,70296],{"class":378},[41,70349,4018],{"class":275},[41,70351,1163],{"class":378},[41,70353,714],{"class":275},[41,70355,70285],{"class":378},[41,70357,70358],{"class":275},"salary",[41,70360,70291],{"class":378},[41,70362,70363,70365,70367,70369,70371,70373,70376],{"class":43,"line":32945},[41,70364,70296],{"class":378},[41,70366,4018],{"class":275},[41,70368,1163],{"class":378},[41,70370,714],{"class":275},[41,70372,70285],{"class":378},[41,70374,70375],{"class":275},"city",[41,70377,70291],{"class":378},[41,70379,70380],{"class":43,"line":32954},[41,70381,69696],{"class":378},[41,70383,70384,70387,70389],{"class":43,"line":32960},[41,70385,70386],{"class":378},"            \u003Ca href=\"javascript:\" data-id=${",[41,70388,714],{"class":275},[41,70390,70391],{"class":378},"}>删除\u003C\u002Fa>\n",[41,70393,70394],{"class":43,"line":32969},[41,70395,70396],{"class":378},"          \u003C\u002Ftd> \n",[41,70398,70399],{"class":43,"line":32975},[41,70400,70401],{"class":378},"          `\n",[41,70403,70404],{"class":43,"line":32981},[41,70405,70406],{"class":47},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[41,70408,70409,70412,70415],{"class":43,"line":32990},[41,70410,70411],{"class":275},"        tbody.",[41,70413,70414],{"class":54},"appendChild",[41,70416,70417],{"class":275},"(tr)\n",[41,70419,70420],{"class":43,"line":32996},[41,70421,52501],{"class":275},[41,70423,70424],{"class":43,"line":33007},[41,70425,2326],{"class":275},[41,70427,70428],{"class":43,"line":33013},[41,70429,80],{"emptyLinePlaceholder":79},[41,70431,70432],{"class":43,"line":33032},[41,70433,70434],{"class":47},"    \u002F\u002F 3.删除委托\n",[41,70436,70437],{"class":43,"line":33038},[41,70438,70439],{"class":47},"    \u002F\u002F 3.1 事件委托 tbody\n",[41,70441,70442,70445,70447,70449,70451,70453,70455,70457,70459],{"class":43,"line":33049},[41,70443,70444],{"class":275},"    tbody.",[41,70446,57916],{"class":54},[41,70448,276],{"class":275},[41,70450,57921],{"class":378},[41,70452,12573],{"class":275},[41,70454,54552],{"class":271},[41,70456,1798],{"class":275},[41,70458,348],{"class":5354},[41,70460,12580],{"class":275},[41,70462,70463,70465,70467,70469,70471],{"class":43,"line":33055},[41,70464,54583],{"class":271},[41,70466,67137],{"class":275},[41,70468,54589],{"class":271},[41,70470,68359],{"class":378},[41,70472,12580],{"class":275},[41,70474,70475],{"class":43,"line":33075},[41,70476,70477],{"class":47},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[41,70479,70480],{"class":43,"line":33091},[41,70481,70482],{"class":47},"        \u002F\u002F console.log(e.target.dataset.id);\n",[41,70484,70485],{"class":43,"line":33097},[41,70486,70487],{"class":47},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[41,70489,70490,70493,70495,70498,70500],{"class":43,"line":33111},[41,70491,70492],{"class":275},"        arr.",[41,70494,58113],{"class":54},[41,70496,70497],{"class":275},"(e.target.dataset.id, ",[41,70499,26],{"class":58},[41,70501,282],{"class":275},[41,70503,70504],{"class":43,"line":33117},[41,70505,70506],{"class":47},"        \u002F\u002F 重新渲染一次\n",[41,70508,70509,70512],{"class":43,"line":33123},[41,70510,70511],{"class":54},"        render",[41,70513,2115],{"class":275},[41,70515,70516],{"class":43,"line":33134},[41,70517,52501],{"class":275},[41,70519,70520],{"class":43,"line":33140},[41,70521,33564],{"class":275},[41,70523,70524,70526,70528],{"class":43,"line":33146},[41,70525,52520],{"class":275},[41,70527,51916],{"class":51403},[41,70529,51410],{"class":275},[41,70531,70532],{"class":43,"line":33156},[41,70533,80],{"emptyLinePlaceholder":79},[41,70535,70536,70538,70540],{"class":43,"line":33162},[41,70537,51888],{"class":275},[41,70539,51903],{"class":51403},[41,70541,51410],{"class":275},[41,70543,70544],{"class":43,"line":33173},[41,70545,80],{"emptyLinePlaceholder":79},[41,70547,70548,70550,70552],{"class":43,"line":33179},[41,70549,51888],{"class":275},[41,70551,50738],{"class":51403},[41,70553,51410],{"class":275},[20,70555,70556],{},"样式：",[32,70558,70562],{"className":70559,"code":70560,"language":70561,"meta":37,"style":37},"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",[24,70563,70564,70569,70579,70588,70592,70596,70601,70611,70616,70620,70625,70635,70640,70649,70653,70657,70662,70667,70677,70687,70692,70696,70701,70710,70720,70725,70735,70745,70749,70754,70762,70766,70771,70776,70781,70789,70798,70802,70807,70816,70820,70825,70834,70838,70843,70852,70861,70869,70873,70878,70887,70897,70906,70916,70922,70931,70941,70951,70955,70960,70969,70977,70987,70995,71004,71013,71023,71031,71035,71040,71049],{"__ignoreMap":37},[41,70565,70566],{"class":43,"line":44},[41,70567,70568],{"class":275},"* {\n",[41,70570,70571,70574,70576],{"class":43,"line":51},[41,70572,70573],{"class":51403},"  margin",[41,70575,51540],{"class":275},[41,70577,70578],{"class":378},"0;\n",[41,70580,70581,70584,70586],{"class":43,"line":62},[41,70582,70583],{"class":378},"  padding",[41,70585,51540],{"class":275},[41,70587,70578],{"class":378},[41,70589,70590],{"class":43,"line":70},[41,70591,1706],{"class":275},[41,70593,70594],{"class":43,"line":76},[41,70595,80],{"emptyLinePlaceholder":79},[41,70597,70598],{"class":43,"line":83},[41,70599,70600],{"class":378},"a {\n",[41,70602,70603,70606,70608],{"class":43,"line":89},[41,70604,70605],{"class":51403},"  text-decoration",[41,70607,51540],{"class":275},[41,70609,70610],{"class":378},"none;\n",[41,70612,70613],{"class":43,"line":96},[41,70614,70615],{"class":378},"  color:#721c24;\n",[41,70617,70618],{"class":43,"line":104},[41,70619,1706],{"class":275},[41,70621,70622],{"class":43,"line":176},[41,70623,70624],{"class":378},"h1 {\n",[41,70626,70627,70630,70632],{"class":43,"line":184},[41,70628,70629],{"class":51403},"  text-align",[41,70631,51540],{"class":275},[41,70633,70634],{"class":378},"center;\n",[41,70636,70637],{"class":43,"line":1757},[41,70638,70639],{"class":378},"  color:#333;\n",[41,70641,70642,70644,70646],{"class":43,"line":1763},[41,70643,70573],{"class":51403},[41,70645,51540],{"class":275},[41,70647,70648],{"class":378},"20px 0;\n",[41,70650,70651],{"class":43,"line":1768},[41,70652,2812],{"class":275},[41,70654,70655],{"class":43,"line":1782},[41,70656,1706],{"class":275},[41,70658,70659],{"class":43,"line":1787},[41,70660,70661],{"class":378},"table {\n",[41,70663,70664],{"class":43,"line":1793},[41,70665,70666],{"class":378},"  margin:0 auto;\n",[41,70668,70669,70672,70674],{"class":43,"line":1814},[41,70670,70671],{"class":51403},"  width",[41,70673,51540],{"class":275},[41,70675,70676],{"class":378},"800px;\n",[41,70678,70679,70682,70684],{"class":43,"line":1819},[41,70680,70681],{"class":51403},"  border-collapse",[41,70683,51540],{"class":275},[41,70685,70686],{"class":378},"collapse;\n",[41,70688,70689],{"class":43,"line":1833},[41,70690,70691],{"class":378},"  color:#004085;\n",[41,70693,70694],{"class":43,"line":1838},[41,70695,1706],{"class":275},[41,70697,70698],{"class":43,"line":1867},[41,70699,70700],{"class":378},"th {\n",[41,70702,70703,70705,70707],{"class":43,"line":1872},[41,70704,70583],{"class":51403},[41,70706,51540],{"class":275},[41,70708,70709],{"class":378},"10px;\n",[41,70711,70712,70715,70717],{"class":43,"line":1889},[41,70713,70714],{"class":51403},"  background",[41,70716,51540],{"class":275},[41,70718,70719],{"class":47},"#cfe5ff;\n",[41,70721,70722],{"class":43,"line":1894},[41,70723,70724],{"class":275},"  \n",[41,70726,70727,70730,70732],{"class":43,"line":1899},[41,70728,70729],{"class":51403},"  font-size",[41,70731,51540],{"class":275},[41,70733,70734],{"class":378},"20px;\n",[41,70736,70737,70740,70742],{"class":43,"line":1904},[41,70738,70739],{"class":51403},"  font-weight",[41,70741,51540],{"class":275},[41,70743,70744],{"class":378},"400;\n",[41,70746,70747],{"class":43,"line":1918},[41,70748,1706],{"class":275},[41,70750,70751],{"class":43,"line":1923},[41,70752,70753],{"class":378},"td,th {\n",[41,70755,70756,70759],{"class":43,"line":2715},[41,70757,70758],{"class":378},"  border:1px solid",[41,70760,70761],{"class":47}," #b8daff;\n",[41,70763,70764],{"class":43,"line":2729},[41,70765,1706],{"class":275},[41,70767,70768],{"class":43,"line":2737},[41,70769,70770],{"class":378},"td {\n",[41,70772,70773],{"class":43,"line":2742},[41,70774,70775],{"class":378},"  padding:10px;\n",[41,70777,70778],{"class":43,"line":2748},[41,70779,70780],{"class":378},"  color:#666;\n",[41,70782,70783,70785,70787],{"class":43,"line":2754},[41,70784,70629],{"class":51403},[41,70786,51540],{"class":275},[41,70788,70634],{"class":378},[41,70790,70791,70793,70795],{"class":43,"line":2759},[41,70792,70729],{"class":51403},[41,70794,51540],{"class":275},[41,70796,70797],{"class":378},"16px;\n",[41,70799,70800],{"class":43,"line":8086},[41,70801,1706],{"class":275},[41,70803,70804],{"class":43,"line":8110},[41,70805,70806],{"class":378},"tbody tr {\n",[41,70808,70809,70811,70813],{"class":43,"line":8115},[41,70810,70714],{"class":51403},[41,70812,51540],{"class":275},[41,70814,70815],{"class":47},"#fff;\n",[41,70817,70818],{"class":43,"line":8121},[41,70819,1706],{"class":275},[41,70821,70822],{"class":43,"line":8148},[41,70823,70824],{"class":378},"tbody tr:hover {\n",[41,70826,70827,70829,70831],{"class":43,"line":8153},[41,70828,70714],{"class":51403},[41,70830,51540],{"class":275},[41,70832,70833],{"class":47},"#e1ecf8;\n",[41,70835,70836],{"class":43,"line":8159},[41,70837,1706],{"class":275},[41,70839,70840],{"class":43,"line":8171},[41,70841,70842],{"class":378},".info {\n",[41,70844,70845,70847,70849],{"class":43,"line":8183},[41,70846,70671],{"class":51403},[41,70848,51540],{"class":275},[41,70850,70851],{"class":378},"900px;\n",[41,70853,70854,70856,70858],{"class":43,"line":8195},[41,70855,70573],{"class":51403},[41,70857,51540],{"class":275},[41,70859,70860],{"class":378},"50px auto;\n",[41,70862,70863,70865,70867],{"class":43,"line":9854},[41,70864,70629],{"class":51403},[41,70866,51540],{"class":275},[41,70868,70634],{"class":378},[41,70870,70871],{"class":43,"line":9879},[41,70872,1706],{"class":275},[41,70874,70875],{"class":43,"line":9902},[41,70876,70877],{"class":378},".info  input, .info select {\n",[41,70879,70880,70882,70884],{"class":43,"line":9926},[41,70881,70671],{"class":51403},[41,70883,51540],{"class":275},[41,70885,70886],{"class":378},"80px;\n",[41,70888,70889,70892,70894],{"class":43,"line":9931},[41,70890,70891],{"class":51403},"  height",[41,70893,51540],{"class":275},[41,70895,70896],{"class":378},"27px;\n",[41,70898,70899,70902,70904],{"class":43,"line":9936},[41,70900,70901],{"class":51403},"  outline",[41,70903,51540],{"class":275},[41,70905,70610],{"class":378},[41,70907,70908,70911,70913],{"class":43,"line":9941},[41,70909,70910],{"class":51403},"  border-radius",[41,70912,51540],{"class":275},[41,70914,70915],{"class":378},"5px;\n",[41,70917,70918,70920],{"class":43,"line":9950},[41,70919,70758],{"class":378},[41,70921,70761],{"class":47},[41,70923,70924,70927,70929],{"class":43,"line":9955},[41,70925,70926],{"class":51403},"  padding-left",[41,70928,51540],{"class":275},[41,70930,70915],{"class":378},[41,70932,70933,70936,70938],{"class":43,"line":9961},[41,70934,70935],{"class":51403},"  box-sizing",[41,70937,51540],{"class":275},[41,70939,70940],{"class":378},"border-box;\n",[41,70942,70943,70946,70948],{"class":43,"line":9982},[41,70944,70945],{"class":51403},"  margin-right",[41,70947,51540],{"class":275},[41,70949,70950],{"class":378},"15px;\n",[41,70952,70953],{"class":43,"line":9988},[41,70954,1706],{"class":275},[41,70956,70957],{"class":43,"line":10002},[41,70958,70959],{"class":378},".info button {\n",[41,70961,70962,70964,70966],{"class":43,"line":10008},[41,70963,70671],{"class":51403},[41,70965,51540],{"class":275},[41,70967,70968],{"class":378},"60px;\n",[41,70970,70971,70973,70975],{"class":43,"line":10035},[41,70972,70891],{"class":51403},[41,70974,51540],{"class":275},[41,70976,70896],{"class":378},[41,70978,70979,70982,70984],{"class":43,"line":10044},[41,70980,70981],{"class":51403},"  background-color",[41,70983,51540],{"class":275},[41,70985,70986],{"class":47},"#004085;\n",[41,70988,70989,70991,70993],{"class":43,"line":10050},[41,70990,70901],{"class":51403},[41,70992,51540],{"class":275},[41,70994,70610],{"class":378},[41,70996,70997,71000,71002],{"class":43,"line":10058},[41,70998,70999],{"class":51403},"  border",[41,71001,51540],{"class":275},[41,71003,70578],{"class":378},[41,71005,71006,71009,71011],{"class":43,"line":10063},[41,71007,71008],{"class":51403},"  color",[41,71010,51540],{"class":275},[41,71012,70815],{"class":47},[41,71014,71015,71018,71020],{"class":43,"line":16742},[41,71016,71017],{"class":51403},"  cursor",[41,71019,51540],{"class":275},[41,71021,71022],{"class":378},"pointer;\n",[41,71024,71025,71027,71029],{"class":43,"line":16748},[41,71026,70910],{"class":51403},[41,71028,51540],{"class":275},[41,71030,70915],{"class":378},[41,71032,71033],{"class":43,"line":16771},[41,71034,1706],{"class":275},[41,71036,71037],{"class":43,"line":16777},[41,71038,71039],{"class":378},".info .age {\n",[41,71041,71042,71044,71046],{"class":43,"line":16800},[41,71043,70671],{"class":51403},[41,71045,51540],{"class":275},[41,71047,71048],{"class":378},"50px;\n",[41,71050,71051],{"class":43,"line":16814},[41,71052,1706],{"class":275},[20,71054,71055],{},"思路：",[20,71057,71058],{},[1603,71059],{"alt":37,"src":71060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[20,71062,71063],{},[1603,71064],{"alt":37,"src":71065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[20,71067,71068],{},[1603,71069],{"alt":37,"src":71070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[241,71072,71074],{"id":71073},"_3315-重绘回流","3.3.15 重绘回流",[20,71076,71077],{},[1603,71078],{"alt":37,"src":71079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[20,71081,71082],{},[1603,71083],{"alt":37,"src":71084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[20,71086,71087],{},[1603,71088],{"alt":37,"src":71089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[15,71091,71093],{"id":71092},"_34-bom","3.4 BOM",[20,71095,71096],{},[1603,71097],{"alt":37,"src":71098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[20,71100,71101],{},"平时写的document省略了window而已，实际上是window.document",[20,71103,71104],{},"函数也是这样，调用的时候实际为window.fn()",[20,71106,71107],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[20,71109,71110],{},"window大部分情况下可以省略",[241,71112,71114],{"id":71113},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[20,71116,71117],{},"只执行一次",[20,71119,71120],{},[1603,71121],{"alt":37,"src":71122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[20,71124,71125],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[20,71127,71128],{},[1603,71129],{"alt":37,"src":71130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[241,71132,71134],{"id":71133},"_342-js执行机制","3.4.2 JS执行机制",[20,71136,71137],{},[1603,71138],{"alt":37,"src":71139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[20,71141,71142],{},"两个的结果都是1111 3333 2222",[20,71144,71145],{},[1603,71146],{"alt":37,"src":71147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[20,71149,71150],{},[1603,71151],{"alt":37,"src":71152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[20,71154,71155],{},[1603,71156],{"alt":37,"src":71157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[20,71159,71160],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[20,71162,71163],{},"工作流程：",[20,71165,71166],{},[1603,71167],{"alt":37,"src":71168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[20,71170,71171],{},[1603,71172],{"alt":37,"src":71173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[20,71175,71176],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[20,71178,71179],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[241,71181,71183],{"id":71182},"_343-location对象","3.4.3 location对象",[20,71185,71186],{},"location对象属于window这个全局对象下的，可以 省略window",[20,71188,71189],{},[1603,71190],{"alt":37,"src":71191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[20,71193,71194],{},"href可以跳转页面",[224,71196,71197],{},[227,71198,71199],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[20,71201,71202],{},"search得到提交信息之后网站后边的地址",[20,71204,71205],{},[1603,71206],{"alt":37,"src":71207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[20,71209,71210],{},[1603,71211],{"alt":37,"src":71212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[224,71214,71215],{"start":51},[227,71216,71217],{},"hash:这个获取单页面应用#后边的地址",[20,71219,71220],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[20,71222,71223],{},[1603,71224],{"alt":37,"src":71225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[32,71227,71229],{"className":53170,"code":71228,"language":53172,"meta":37,"style":37},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[24,71230,71231,71251,71271],{"__ignoreMap":37},[41,71232,71233,71235,71237,71239,71241,71244,71247,71249],{"class":43,"line":44},[41,71234,52247],{"class":275},[41,71236,511],{"class":51403},[41,71238,61160],{"class":54},[41,71240,321],{"class":275},[41,71242,71243],{"class":378},"\"#\u002Fmy\"",[41,71245,71246],{"class":275},">我的\u003C\u002F",[41,71248,511],{"class":51403},[41,71250,51410],{"class":275},[41,71252,71253,71255,71257,71259,71261,71264,71267,71269],{"class":43,"line":51},[41,71254,52247],{"class":275},[41,71256,511],{"class":51403},[41,71258,61160],{"class":54},[41,71260,321],{"class":275},[41,71262,71263],{"class":378},"\"#\u002Ffriend\"",[41,71265,71266],{"class":275},">关注\u003C\u002F",[41,71268,511],{"class":51403},[41,71270,51410],{"class":275},[41,71272,71273,71275,71277,71279,71281,71284,71287,71289],{"class":43,"line":62},[41,71274,52247],{"class":275},[41,71276,511],{"class":51403},[41,71278,61160],{"class":54},[41,71280,321],{"class":275},[41,71282,71283],{"class":378},"\"#\u002Fdownload\"",[41,71285,71286],{"class":275},">下载\u003C\u002F",[41,71288,511],{"class":51403},[41,71290,51410],{"class":275},[20,71292,71293],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[224,71295,71296],{"start":62},[227,71297,71298,71299,71301,71302,71304],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53819,71300],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53819,71303],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[241,71306,71308],{"id":71307},"_345-navigator对象","3.4.5 navigator对象",[20,71310,71311],{},[1603,71312],{"alt":37,"src":71313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[32,71315,71319],{"className":71316,"code":71317,"language":71318,"meta":37,"style":37},"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",[24,71320,71321,71326,71337,71349,71354,71405,71446,71451,71464,71476,71481],{"__ignoreMap":37},[41,71322,71323],{"class":43,"line":44},[41,71324,71325],{"class":47},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[41,71327,71328,71330,71332,71334],{"class":43,"line":51},[41,71329,499],{"class":271},[41,71331,276],{"class":275},[41,71333,54552],{"class":271},[41,71335,71336],{"class":275}," () { \n",[41,71338,71339,71341,71344,71346],{"class":43,"line":62},[41,71340,6930],{"class":271},[41,71342,71343],{"class":58}," userAgent",[41,71345,13702],{"class":271},[41,71347,71348],{"class":275}," navigator.userAgent \n",[41,71350,71351],{"class":43,"line":70},[41,71352,71353],{"class":47},"\u002F\u002F 验证是否为Android或iPhone \n",[41,71355,71356,71358,71361,71363,71366,71369,71371,71373,71376,71378,71381,71385,71387,71389,71391,71394,71396,71398,71400,71402],{"class":43,"line":76},[41,71357,6930],{"class":271},[41,71359,71360],{"class":58}," android",[41,71362,13702],{"class":271},[41,71364,71365],{"class":275}," userAgent.",[41,71367,71368],{"class":54},"match",[41,71370,276],{"class":275},[41,71372,857],{"class":378},[41,71374,71375],{"class":48080},"(Android);",[41,71377,1259],{"class":271},[41,71379,71380],{"class":58},"[\\s",[41,71382,71384],{"class":71383},"snhLl","\\\u002F",[41,71386,1213],{"class":58},[41,71388,754],{"class":271},[41,71390,276],{"class":48080},[41,71392,71393],{"class":58},"[\\d.]",[41,71395,754],{"class":271},[41,71397,702],{"class":48080},[41,71399,1259],{"class":271},[41,71401,857],{"class":378},[41,71403,71404],{"class":275},") \n",[41,71406,71407,71409,71412,71414,71416,71418,71420,71422,71425,71428,71431,71433,71435,71438,71440,71442,71444],{"class":43,"line":83},[41,71408,6930],{"class":271},[41,71410,71411],{"class":58}," iphone",[41,71413,13702],{"class":271},[41,71415,71365],{"class":275},[41,71417,71368],{"class":54},[41,71419,276],{"class":275},[41,71421,857],{"class":378},[41,71423,71424],{"class":48080},"(iPhone",[41,71426,71427],{"class":58},"\\s",[41,71429,71430],{"class":48080},"OS)",[41,71432,71427],{"class":58},[41,71434,276],{"class":48080},[41,71436,71437],{"class":58},"[\\d_]",[41,71439,754],{"class":271},[41,71441,702],{"class":48080},[41,71443,857],{"class":378},[41,71445,71404],{"class":275},[41,71447,71448],{"class":43,"line":89},[41,71449,71450],{"class":47},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[41,71452,71453,71455,71458,71461],{"class":43,"line":96},[41,71454,1672],{"class":271},[41,71456,71457],{"class":275}," (android ",[41,71459,71460],{"class":271},"||",[41,71462,71463],{"class":275}," iphone) { \n",[41,71465,71466,71469,71471,71474],{"class":43,"line":104},[41,71467,71468],{"class":275},"location.href ",[41,71470,321],{"class":271},[41,71472,71473],{"class":378}," 'http:\u002F\u002Fm.itcast.cn'",[41,71475,2812],{"class":275},[41,71477,71478],{"class":43,"line":176},[41,71479,71480],{"class":275},"} \n",[41,71482,71483],{"class":43,"line":184},[41,71484,71485],{"class":275},"})()\n",[241,71487,71489],{"id":71488},"_346-histroy对象","3.4.6 histroy对象",[20,71491,71492],{},[1603,71493],{"alt":37,"src":71494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[20,71496,71497],{},"浏览器地址的前进与后退!!!",[20,71499,71500],{},"history.back() 等效于 history.go(-1)",[20,71502,71503],{},"history.forward() 等效于 history.go(1)",[15,71505,71507],{"id":71506},"_35-本地存储","3.5 本地存储",[224,71509,71510,71513,71516],{},[227,71511,71512],{},"数据存储在用户浏览器中",[227,71514,71515],{},"设置、读取方便、甚至页面刷新不丢失数据",[227,71517,71518],{},"容量较大，sessionStorage和localStorage约 5M 左右",[241,71520,71522],{"id":71521},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[20,71524,71525],{},"只能存储字符串",[20,71527,71528],{},[1603,71529],{"alt":37,"src":71530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[20,71532,71533],{},[1603,71534],{"alt":37,"src":71535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[20,71537,71538],{},"键值对要加引号,不然就会当变量来看了",[20,71540,71541],{},"localStorage.setItem('uname', 'pink')",[20,71543,71544],{},"刷新之后信息不再丢失",[20,71546,71547],{},"操作key,value会跟着变",[20,71549,71550],{},"删除只删除键就可以,即名字",[20,71552,71541],{},[20,71554,71555],{},"改:",[20,71557,71558],{},"localStorage.setItem('uname','red')",[20,71560,71561],{},"有这个键就是改,没有这个键就是改",[20,71563,71564],{},[1603,71565],{"alt":37,"src":71566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[20,71568,71569],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[20,71571,71572],{},[1603,71573],{"alt":37,"src":71574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[20,71576,71577],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[241,71579,71581],{"id":71580},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[20,71583,71584],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[20,71586,71587],{},"特性:",[224,71589,71590,71593,71596,71599],{},[227,71591,71592],{},"生命周期为关闭浏览器窗口",[227,71594,71595],{},"在同一个窗口(页面)下数据可以共享",[227,71597,71598],{},"以键值对的形式存储使用",[227,71600,71601],{},"用法跟localStorage 基本相同",[241,71603,71605],{"id":71604},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[20,71607,71608],{},"本地只能存储字符串,无法直接存储复杂数据类型",[32,71610,71612],{"className":53170,"code":71611,"language":53172,"meta":37,"style":37},"\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",[24,71613,71614,71622,71627,71632,71637,71642,71646,71651,71656],{"__ignoreMap":37},[41,71615,71616,71618,71620],{"class":43,"line":44},[41,71617,1183],{"class":275},[41,71619,51916],{"class":51403},[41,71621,51410],{"class":275},[41,71623,71624],{"class":43,"line":51},[41,71625,71626],{"class":275},"    const obj = {\n",[41,71628,71629],{"class":43,"line":62},[41,71630,71631],{"class":275},"      uname: 'pink老师',\n",[41,71633,71634],{"class":43,"line":70},[41,71635,71636],{"class":275},"      age: 18,\n",[41,71638,71639],{"class":43,"line":76},[41,71640,71641],{"class":275},"      gender: '女'\n",[41,71643,71644],{"class":43,"line":83},[41,71645,2326],{"class":275},[41,71647,71648],{"class":43,"line":89},[41,71649,71650],{"class":275},"    \u002F\u002F 存储复杂数据类型\n",[41,71652,71653],{"class":43,"line":96},[41,71654,71655],{"class":275},"    localStorage.setItem('obj', obj)\n",[41,71657,71658,71660,71662],{"class":43,"line":104},[41,71659,52520],{"class":275},[41,71661,51916],{"class":51403},[41,71663,51410],{"class":275},[20,71665,71666],{},[1603,71667],{"alt":37,"src":71668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[20,71670,71671],{},"如果获取一下数据:",[20,71673,71674],{},"log(localStorage.getItem('obj'))",[20,71676,71677],{},[1603,71678],{"alt":37,"src":71679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[20,71681,71682],{},"发现直接存对象是使用不了的!!!",[22136,71684,71686],{"id":71685},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[20,71688,71689],{},[1603,71690],{"alt":37,"src":71691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[32,71693,71695],{"className":50736,"code":71694,"language":50738,"meta":37,"style":37},"\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",[24,71696,71697,71705,71715,71725,71734,71742,71746,71750,71776,71795,71803,71807,71812,71817],{"__ignoreMap":37},[41,71698,71699,71701,71703],{"class":43,"line":44},[41,71700,1183],{"class":275},[41,71702,51916],{"class":51403},[41,71704,51410],{"class":275},[41,71706,71707,71709,71711,71713],{"class":43,"line":51},[41,71708,11359],{"class":271},[41,71710,70074],{"class":58},[41,71712,13702],{"class":271},[41,71714,15710],{"class":275},[41,71716,71717,71720,71723],{"class":43,"line":62},[41,71718,71719],{"class":275},"      uname: ",[41,71721,71722],{"class":378},"'pink老师'",[41,71724,31569],{"class":275},[41,71726,71727,71730,71732],{"class":43,"line":70},[41,71728,71729],{"class":275},"      age: ",[41,71731,923],{"class":58},[41,71733,31569],{"class":275},[41,71735,71736,71739],{"class":43,"line":76},[41,71737,71738],{"class":275},"      gender: ",[41,71740,71741],{"class":378},"'女'\n",[41,71743,71744],{"class":43,"line":83},[41,71745,2326],{"class":275},[41,71747,71748],{"class":43,"line":89},[41,71749,71650],{"class":47},[41,71751,71752,71755,71758,71760,71763,71765,71768,71770,71773],{"class":43,"line":96},[41,71753,71754],{"class":275},"  localStorage.",[41,71756,71757],{"class":54},"setItem",[41,71759,276],{"class":275},[41,71761,71762],{"class":378},"'obj'",[41,71764,12573],{"class":275},[41,71766,71767],{"class":58},"JSON",[41,71769,831],{"class":275},[41,71771,71772],{"class":54},"stringify",[41,71774,71775],{"class":275},"(obj))\n",[41,71777,71778,71781,71783,71786,71789,71791,71793],{"class":43,"line":104},[41,71779,71780],{"class":275},"  console.",[41,71782,58350],{"class":54},[41,71784,71785],{"class":275},"(localStorage.",[41,71787,71788],{"class":54},"getItem",[41,71790,276],{"class":275},[41,71792,71762],{"class":378},[41,71794,30600],{"class":275},[41,71796,71797,71799,71801],{"class":43,"line":176},[41,71798,52520],{"class":275},[41,71800,51916],{"class":51403},[41,71802,51410],{"class":275},[41,71804,71805],{"class":43,"line":184},[41,71806,70724],{"class":275},[41,71808,71809],{"class":43,"line":1757},[41,71810,71811],{"class":275},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[41,71813,71814],{"class":43,"line":1763},[41,71815,71816],{"class":275},"  类型是字符串的\n",[41,71818,71819],{"class":43,"line":1768},[41,71820,71821],{"class":275},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22136,71823,71825],{"id":71824},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[20,71827,71828],{},[1603,71829],{"alt":37,"src":71830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[20,71832,71833],{},[1603,71834],{"alt":37,"src":71835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[32,71837,71839],{"className":53170,"code":71838,"language":53172,"meta":37,"style":37},"  \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",[24,71840,71841,71849,71853,71857,71861,71865,71869,71874,71879,71884,71889,71894,71899,71904,71909],{"__ignoreMap":37},[41,71842,71843,71845,71847],{"class":43,"line":44},[41,71844,52247],{"class":275},[41,71846,51916],{"class":51403},[41,71848,51410],{"class":275},[41,71850,71851],{"class":43,"line":51},[41,71852,71626],{"class":275},[41,71854,71855],{"class":43,"line":62},[41,71856,71631],{"class":275},[41,71858,71859],{"class":43,"line":70},[41,71860,71636],{"class":275},[41,71862,71863],{"class":43,"line":76},[41,71864,71641],{"class":275},[41,71866,71867],{"class":43,"line":83},[41,71868,2326],{"class":275},[41,71870,71871],{"class":43,"line":89},[41,71872,71873],{"class":275},"    \u002F\u002F 1.存储复杂数据类型\n",[41,71875,71876],{"class":43,"line":96},[41,71877,71878],{"class":275},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[41,71880,71881],{"class":43,"line":104},[41,71882,71883],{"class":275},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[41,71885,71886],{"class":43,"line":176},[41,71887,71888],{"class":275},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[41,71890,71891],{"class":43,"line":184},[41,71892,71893],{"class":275},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[41,71895,71896],{"class":43,"line":1757},[41,71897,71898],{"class":275},"    \u002F\u002F 取\n",[41,71900,71901],{"class":43,"line":1763},[41,71902,71903],{"class":275},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[41,71905,71906],{"class":43,"line":1768},[41,71907,71908],{"class":275},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[41,71910,71911,71913,71915],{"class":43,"line":1782},[41,71912,52520],{"class":275},[41,71914,51916],{"class":51403},[41,71916,51410],{"class":275},[20,71918,71919],{},[1603,71920],{"alt":37,"src":71921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[241,71923,71925],{"id":71924},"_356-数组map方法","3.5.6 数组map方法",[20,71927,71928],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[20,71930,71931],{},[1603,71932],{"alt":37,"src":71933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[20,71935,71936],{},[1603,71937],{"alt":37,"src":71938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[20,71940,71941,71944],{},[423,71942,71943],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[20,71946,71947],{},"map有返回值，但是forEach没有返回值",[20,71949,71950],{},"map是个方法。用的时候要加 ()",[20,71952,71953],{},"map返回的是一个数组",[241,71955,71957],{"id":71956},"_357-数组中join方法","3.5.7 数组中join方法",[20,71959,71960],{},[1603,71961],{"alt":37,"src":71962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[20,71964,71965],{},"类似于python中拼接字符串一样！",[224,71967,71968,71971,71974],{},[227,71969,71970],{},"小括号为空则逗号分开",[227,71972,71973],{},"小括号为空字符串 ''，则元素之间没有分隔符",[227,71975,71976],{},"小括号用啥符号就用进行分割",[241,71978,71980],{"id":71979},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[224,71982,71983,71986,71989,71992,71995],{},[227,71984,71985],{},"记住本地时间获取快速方式：new Date().toDateString()",[227,71987,71988],{},"尽量减少DOM操作，用好map+join的渲染方式",[227,71990,71991],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[227,71993,71994],{},"return可以实现函数的结束",[227,71996,71997],{},"禁止跳转是 preventDefault() 不要忘记",[32,71999,72001],{"className":50736,"code":72000,"language":50738,"meta":37,"style":37},"\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",[24,72002,72003,72013,72027,72031,72039,72053,72073,72085,72093,72099,72109,72119,72123,72127,72133,72143,72155,72159,72163,72170,72182,72196,72206,72210,72214,72221,72228,72235,72247,72259,72269,72281,72285,72289,72296,72303,72315,72327,72337,72349,72379,72383,72387,72394,72406,72418,72442,72452,72462,72466,72470,72478,72489,72501,72513,72525,72542,72554,72566,72570,72574,72581,72593,72605,72617,72628,72646,72659,72671,72695,72706,72710,72714,72722,72732,72736,72740,72746,72758,72769,72779,72783,72787,72793,72815,72819,72823,72829,72835,72847,72857,72869,72899,72912,72929,72933,72937,72948,72970,72980,72984,72988,73001,73011,73023,73035,73047,73059,73069,73079,73089,73100,73113,73117,73125,73133,73137,73145,73158,73178,73211,73244,73277,73303,73321,73339,73347,73373,73391,73409,73427,73445,73463,73471,73479,73497,73505,73534,73542,73550,73558,73571,73583,73595,73607,73619,73631,73644,73656,73664,73672,73680,73685,73690,73694,73698,73702,73706,73710,73714,73719,73724,73729,73734,73742,73750,73758,73763,73768,73773,73778,73783,73788,73793,73798,73803,73808,73813,73818,73823,73828,73832,73837,73842,73852,73861,73865,73870,73879,73895,73937,73977,74016,74081,74089,74093,74098,74116,74124,74129,74134,74164,74170,74175,74188,74200,74212,74224,74236,74248,74260,74264,74274,74278,74283,74288,74292,74301,74305,74310,74315,74334,74339,74359,74363,74368,74372,74377,74395,74413,74431,74450,74469,74488,74493,74499,74520,74526,74535,74541,74547,74553,74580,74593,74598,74608,74614,74620,74626,74632,74637,74643,74649,74655,74661,74694,74699,74704,74709,74714,74720,74726,74732,74743,74748,74754,74761,74775,74781,74805,74810,74815,74821,74827,74848,74854,74867,74873,74879,74885,74891,74896,74902,74908,74914,74932,74946,74952,74960,74966,74988,74993,74998,75003,75008,75013,75022,75031,75036],{"__ignoreMap":37},[41,72004,72005,72007,72009,72011],{"class":43,"line":44},[41,72006,51400],{"class":275},[41,72008,51404],{"class":51403},[41,72010,51407],{"class":54},[41,72012,51410],{"class":275},[41,72014,72015,72017,72019,72021,72023,72025],{"class":43,"line":51},[41,72016,1183],{"class":275},[41,72018,50738],{"class":51403},[41,72020,51419],{"class":54},[41,72022,321],{"class":275},[41,72024,51424],{"class":378},[41,72026,51410],{"class":275},[41,72028,72029],{"class":43,"line":62},[41,72030,80],{"emptyLinePlaceholder":79},[41,72032,72033,72035,72037],{"class":43,"line":70},[41,72034,1183],{"class":275},[41,72036,51437],{"class":51403},[41,72038,51410],{"class":275},[41,72040,72041,72043,72045,72047,72049,72051],{"class":43,"line":76},[41,72042,52247],{"class":275},[41,72044,51447],{"class":51403},[41,72046,51450],{"class":54},[41,72048,321],{"class":275},[41,72050,51455],{"class":378},[41,72052,51410],{"class":275},[41,72054,72055,72057,72059,72061,72063,72065,72067,72069,72071],{"class":43,"line":83},[41,72056,52247],{"class":275},[41,72058,51447],{"class":51403},[41,72060,15058],{"class":54},[41,72062,321],{"class":275},[41,72064,51494],{"class":378},[41,72066,51474],{"class":54},[41,72068,321],{"class":275},[41,72070,51501],{"class":378},[41,72072,51410],{"class":275},[41,72074,72075,72077,72079,72081,72083],{"class":43,"line":89},[41,72076,52247],{"class":275},[41,72078,51510],{"class":51403},[41,72080,51513],{"class":275},[41,72082,51510],{"class":51403},[41,72084,51410],{"class":275},[41,72086,72087,72089,72091],{"class":43,"line":96},[41,72088,52247],{"class":275},[41,72090,189],{"class":51403},[41,72092,51410],{"class":275},[41,72094,72095,72097],{"class":43,"line":104},[41,72096,6541],{"class":51403},[41,72098,15710],{"class":275},[41,72100,72101,72103,72105,72107],{"class":43,"line":176},[41,72102,54798],{"class":58},[41,72104,51540],{"class":275},[41,72106,465],{"class":58},[41,72108,1434],{"class":275},[41,72110,72111,72113,72115,72117],{"class":43,"line":184},[41,72112,54809],{"class":58},[41,72114,51540],{"class":275},[41,72116,465],{"class":58},[41,72118,1434],{"class":275},[41,72120,72121],{"class":43,"line":1757},[41,72122,2326],{"class":275},[41,72124,72125],{"class":43,"line":1763},[41,72126,80],{"emptyLinePlaceholder":79},[41,72128,72129,72131],{"class":43,"line":1768},[41,72130,57382],{"class":51403},[41,72132,15710],{"class":275},[41,72134,72135,72137,72139,72141],{"class":43,"line":1782},[41,72136,57389],{"class":58},[41,72138,51540],{"class":275},[41,72140,51695],{"class":58},[41,72142,1434],{"class":275},[41,72144,72145,72147,72149,72151,72153],{"class":43,"line":1787},[41,72146,62180],{"class":58},[41,72148,51540],{"class":275},[41,72150,973],{"class":58},[41,72152,51595],{"class":271},[41,72154,1434],{"class":275},[41,72156,72157],{"class":43,"line":1793},[41,72158,2326],{"class":275},[41,72160,72161],{"class":43,"line":1814},[41,72162,80],{"emptyLinePlaceholder":79},[41,72164,72165,72168],{"class":43,"line":1819},[41,72166,72167],{"class":54},"    .info",[41,72169,15710],{"class":275},[41,72171,72172,72174,72176,72178,72180],{"class":43,"line":1833},[41,72173,54874],{"class":58},[41,72175,51540],{"class":275},[41,72177,51592],{"class":58},[41,72179,51595],{"class":271},[41,72181,1434],{"class":275},[41,72183,72184,72186,72188,72190,72192,72194],{"class":43,"line":1838},[41,72185,54809],{"class":58},[41,72187,51540],{"class":275},[41,72189,719],{"class":58},[41,72191,51595],{"class":271},[41,72193,51659],{"class":58},[41,72195,1434],{"class":275},[41,72197,72198,72200,72202,72204],{"class":43,"line":1867},[41,72199,57389],{"class":58},[41,72201,51540],{"class":275},[41,72203,51695],{"class":58},[41,72205,1434],{"class":275},[41,72207,72208],{"class":43,"line":1872},[41,72209,2326],{"class":275},[41,72211,72212],{"class":43,"line":1889},[41,72213,80],{"emptyLinePlaceholder":79},[41,72215,72216,72219],{"class":43,"line":1894},[41,72217,72218],{"class":54},"    .uname",[41,72220,31569],{"class":275},[41,72222,72223,72226],{"class":43,"line":1899},[41,72224,72225],{"class":54},"    .age",[41,72227,31569],{"class":275},[41,72229,72230,72233],{"class":43,"line":1904},[41,72231,72232],{"class":54},"    .salary",[41,72234,15710],{"class":275},[41,72236,72237,72239,72241,72243,72245],{"class":43,"line":1918},[41,72238,54874],{"class":58},[41,72240,51540],{"class":275},[41,72242,584],{"class":58},[41,72244,51595],{"class":271},[41,72246,1434],{"class":275},[41,72248,72249,72251,72253,72255,72257],{"class":43,"line":1923},[41,72250,54888],{"class":58},[41,72252,51540],{"class":275},[41,72254,973],{"class":58},[41,72256,51595],{"class":271},[41,72258,1434],{"class":275},[41,72260,72261,72263,72265,72267],{"class":43,"line":2715},[41,72262,61883],{"class":58},[41,72264,51540],{"class":275},[41,72266,54840],{"class":58},[41,72268,1434],{"class":275},[41,72270,72271,72273,72275,72277,72279],{"class":43,"line":2729},[41,72272,61853],{"class":58},[41,72274,51540],{"class":275},[41,72276,848],{"class":58},[41,72278,51595],{"class":271},[41,72280,1434],{"class":275},[41,72282,72283],{"class":43,"line":2737},[41,72284,2326],{"class":275},[41,72286,72287],{"class":43,"line":2742},[41,72288,80],{"emptyLinePlaceholder":79},[41,72290,72291,72294],{"class":43,"line":2748},[41,72292,72293],{"class":54},"    .gender",[41,72295,31569],{"class":275},[41,72297,72298,72301],{"class":43,"line":2754},[41,72299,72300],{"class":54},"    .city",[41,72302,15710],{"class":275},[41,72304,72305,72307,72309,72311,72313],{"class":43,"line":2759},[41,72306,54874],{"class":58},[41,72308,51540],{"class":275},[41,72310,584],{"class":58},[41,72312,51595],{"class":271},[41,72314,1434],{"class":275},[41,72316,72317,72319,72321,72323,72325],{"class":43,"line":8086},[41,72318,54888],{"class":58},[41,72320,51540],{"class":275},[41,72322,1098],{"class":58},[41,72324,51595],{"class":271},[41,72326,1434],{"class":275},[41,72328,72329,72331,72333,72335],{"class":43,"line":8110},[41,72330,61883],{"class":58},[41,72332,51540],{"class":275},[41,72334,54840],{"class":58},[41,72336,1434],{"class":275},[41,72338,72339,72341,72343,72345,72347],{"class":43,"line":8115},[41,72340,61853],{"class":58},[41,72342,51540],{"class":275},[41,72344,848],{"class":58},[41,72346,51595],{"class":271},[41,72348,1434],{"class":275},[41,72350,72351,72353,72355,72357,72359,72361,72364,72366,72368,72370,72373,72375,72377],{"class":43,"line":8121},[41,72352,62080],{"class":58},[41,72354,51540],{"class":275},[41,72356,26],{"class":58},[41,72358,51595],{"class":271},[41,72360,51624],{"class":58},[41,72362,72363],{"class":58}," rgb",[41,72365,276],{"class":275},[41,72367,1862],{"class":58},[41,72369,12573],{"class":275},[41,72371,72372],{"class":58},"197",[41,72374,12573],{"class":275},[41,72376,72372],{"class":58},[41,72378,2857],{"class":275},[41,72380,72381],{"class":43,"line":8148},[41,72382,2326],{"class":275},[41,72384,72385],{"class":43,"line":8153},[41,72386,80],{"emptyLinePlaceholder":79},[41,72388,72389,72392],{"class":43,"line":8159},[41,72390,72391],{"class":51403},"    button",[41,72393,15710],{"class":275},[41,72395,72396,72398,72400,72402,72404],{"class":43,"line":8171},[41,72397,54888],{"class":58},[41,72399,51540],{"class":275},[41,72401,1098],{"class":58},[41,72403,51595],{"class":271},[41,72405,1434],{"class":275},[41,72407,72408,72410,72412,72414,72416],{"class":43,"line":8183},[41,72409,54874],{"class":58},[41,72411,51540],{"class":275},[41,72413,757],{"class":58},[41,72415,51595],{"class":271},[41,72417,1434],{"class":275},[41,72419,72420,72422,72424,72427,72429,72431,72433,72436,72438,72440],{"class":43,"line":8195},[41,72421,54987],{"class":58},[41,72423,51540],{"class":275},[41,72425,72426],{"class":58},"rgb",[41,72428,276],{"class":275},[41,72430,1242],{"class":58},[41,72432,12573],{"class":275},[41,72434,72435],{"class":58},"187",[41,72437,12573],{"class":275},[41,72439,572],{"class":58},[41,72441,2857],{"class":275},[41,72443,72444,72446,72448,72450],{"class":43,"line":9854},[41,72445,57519],{"class":58},[41,72447,51540],{"class":275},[41,72449,60945],{"class":58},[41,72451,1434],{"class":275},[41,72453,72454,72456,72458,72460],{"class":43,"line":9879},[41,72455,62080],{"class":58},[41,72457,51540],{"class":275},[41,72459,465],{"class":58},[41,72461,1434],{"class":275},[41,72463,72464],{"class":43,"line":9902},[41,72465,2326],{"class":275},[41,72467,72468],{"class":43,"line":9926},[41,72469,80],{"emptyLinePlaceholder":79},[41,72471,72472,72474,72476],{"class":43,"line":9931},[41,72473,72391],{"class":51403},[41,72475,51791],{"class":51403},[41,72477,15710],{"class":275},[41,72479,72480,72482,72484,72487],{"class":43,"line":9936},[41,72481,55112],{"class":58},[41,72483,51540],{"class":275},[41,72485,72486],{"class":58},"inline-block",[41,72488,1434],{"class":275},[41,72490,72491,72493,72495,72497,72499],{"class":43,"line":9941},[41,72492,54874],{"class":58},[41,72494,51540],{"class":275},[41,72496,719],{"class":58},[41,72498,51595],{"class":271},[41,72500,1434],{"class":275},[41,72502,72503,72505,72507,72509,72511],{"class":43,"line":9950},[41,72504,54888],{"class":58},[41,72506,51540],{"class":275},[41,72508,719],{"class":58},[41,72510,51595],{"class":271},[41,72512,1434],{"class":275},[41,72514,72515,72517,72519,72521,72523],{"class":43,"line":9955},[41,72516,57462],{"class":58},[41,72518,51540],{"class":275},[41,72520,745],{"class":58},[41,72522,51595],{"class":271},[41,72524,1434],{"class":275},[41,72526,72527,72529,72531,72533,72535,72537,72540],{"class":43,"line":9961},[41,72528,62080],{"class":58},[41,72530,51540],{"class":275},[41,72532,26],{"class":58},[41,72534,51595],{"class":271},[41,72536,51624],{"class":58},[41,72538,72539],{"class":58}," #fff",[41,72541,1434],{"class":275},[41,72543,72544,72546,72548,72550,72552],{"class":43,"line":9982},[41,72545,55237],{"class":58},[41,72547,51540],{"class":275},[41,72549,592],{"class":58},[41,72551,51595],{"class":271},[41,72553,1434],{"class":275},[41,72555,72556,72558,72560,72562,72564],{"class":43,"line":9988},[41,72557,61853],{"class":58},[41,72559,51540],{"class":275},[41,72561,26],{"class":58},[41,72563,51595],{"class":271},[41,72565,1434],{"class":275},[41,72567,72568],{"class":43,"line":10002},[41,72569,2326],{"class":275},[41,72571,72572],{"class":43,"line":10008},[41,72573,80],{"emptyLinePlaceholder":79},[41,72575,72576,72579],{"class":43,"line":10035},[41,72577,72578],{"class":54},"    .total",[41,72580,15710],{"class":275},[41,72582,72583,72585,72587,72589,72591],{"class":43,"line":10044},[41,72584,54874],{"class":58},[41,72586,51540],{"class":275},[41,72588,61732],{"class":58},[41,72590,51595],{"class":271},[41,72592,1434],{"class":275},[41,72594,72595,72597,72599,72601,72603],{"class":43,"line":10050},[41,72596,54888],{"class":58},[41,72598,51540],{"class":275},[41,72600,674],{"class":58},[41,72602,51595],{"class":271},[41,72604,1434],{"class":275},[41,72606,72607,72609,72611,72613,72615],{"class":43,"line":10058},[41,72608,57462],{"class":58},[41,72610,51540],{"class":275},[41,72612,674],{"class":58},[41,72614,51595],{"class":271},[41,72616,1434],{"class":275},[41,72618,72619,72621,72623,72626],{"class":43,"line":10063},[41,72620,57389],{"class":58},[41,72622,51540],{"class":275},[41,72624,72625],{"class":58},"right",[41,72627,1434],{"class":275},[41,72629,72630,72632,72634,72636,72638,72640,72642,72644],{"class":43,"line":16742},[41,72631,54809],{"class":58},[41,72633,51540],{"class":275},[41,72635,674],{"class":58},[41,72637,51595],{"class":271},[41,72639,51659],{"class":58},[41,72641,2177],{"class":58},[41,72643,51595],{"class":271},[41,72645,1434],{"class":275},[41,72647,72648,72651,72653,72655,72657],{"class":43,"line":16748},[41,72649,72650],{"class":58},"      padding-right",[41,72652,51540],{"class":275},[41,72654,719],{"class":58},[41,72656,51595],{"class":271},[41,72658,1434],{"class":275},[41,72660,72661,72663,72665,72667,72669],{"class":43,"line":16771},[41,72662,55025],{"class":58},[41,72664,51540],{"class":275},[41,72666,796],{"class":58},[41,72668,51595],{"class":271},[41,72670,1434],{"class":275},[41,72672,72673,72675,72677,72679,72681,72684,72686,72689,72691,72693],{"class":43,"line":16777},[41,72674,54987],{"class":58},[41,72676,51540],{"class":275},[41,72678,72426],{"class":58},[41,72680,276],{"class":275},[41,72682,72683],{"class":58},"237",[41,72685,12573],{"class":275},[41,72687,72688],{"class":58},"235",[41,72690,12573],{"class":275},[41,72692,72688],{"class":58},[41,72694,2857],{"class":275},[41,72696,72697,72700,72702,72704],{"class":43,"line":16800},[41,72698,72699],{"class":58},"      box-sizing",[41,72701,51540],{"class":275},[41,72703,60608],{"class":58},[41,72705,1434],{"class":275},[41,72707,72708],{"class":43,"line":16814},[41,72709,2326],{"class":275},[41,72711,72712],{"class":43,"line":16834},[41,72713,80],{"emptyLinePlaceholder":79},[41,72715,72716,72718,72720],{"class":43,"line":16840},[41,72717,72578],{"class":54},[41,72719,51791],{"class":51403},[41,72721,15710],{"class":275},[41,72723,72724,72726,72728,72730],{"class":43,"line":16851},[41,72725,57519],{"class":58},[41,72727,51540],{"class":275},[41,72729,57524],{"class":58},[41,72731,1434],{"class":275},[41,72733,72734],{"class":43,"line":16874},[41,72735,2326],{"class":275},[41,72737,72738],{"class":43,"line":16896},[41,72739,80],{"emptyLinePlaceholder":79},[41,72741,72742,72744],{"class":43,"line":16901},[41,72743,65126],{"class":51403},[41,72745,15710],{"class":275},[41,72747,72748,72750,72752,72754,72756],{"class":43,"line":16907},[41,72749,54874],{"class":58},[41,72751,51540],{"class":275},[41,72753,61732],{"class":58},[41,72755,51595],{"class":271},[41,72757,1434],{"class":275},[41,72759,72760,72762,72764,72767],{"class":43,"line":16921},[41,72761,54809],{"class":58},[41,72763,51540],{"class":275},[41,72765,72766],{"class":58},"auto",[41,72768,1434],{"class":275},[41,72770,72771,72773,72775,72777],{"class":43,"line":16934},[41,72772,65133],{"class":58},[41,72774,51540],{"class":275},[41,72776,65138],{"class":58},[41,72778,1434],{"class":275},[41,72780,72781],{"class":43,"line":16939},[41,72782,2326],{"class":275},[41,72784,72785],{"class":43,"line":16953},[41,72786,80],{"emptyLinePlaceholder":79},[41,72788,72789,72791],{"class":43,"line":16958},[41,72790,65218],{"class":51403},[41,72792,15710],{"class":275},[41,72794,72795,72797,72799,72801,72803,72805,72807,72809,72811,72813],{"class":43,"line":16964},[41,72796,54987],{"class":58},[41,72798,51540],{"class":275},[41,72800,72426],{"class":58},[41,72802,276],{"class":275},[41,72804,72683],{"class":58},[41,72806,12573],{"class":275},[41,72808,72688],{"class":58},[41,72810,12573],{"class":275},[41,72812,72688],{"class":58},[41,72814,2857],{"class":275},[41,72816,72817],{"class":43,"line":16969},[41,72818,2326],{"class":275},[41,72820,72821],{"class":43,"line":16983},[41,72822,80],{"emptyLinePlaceholder":79},[41,72824,72825,72827],{"class":43,"line":16988},[41,72826,65218],{"class":51403},[41,72828,31569],{"class":275},[41,72830,72831,72833],{"class":43,"line":16993},[41,72832,65284],{"class":51403},[41,72834,15710],{"class":275},[41,72836,72837,72839,72841,72843,72845],{"class":43,"line":17007},[41,72838,54888],{"class":58},[41,72840,51540],{"class":275},[41,72842,546],{"class":58},[41,72844,51595],{"class":271},[41,72846,1434],{"class":275},[41,72848,72849,72851,72853,72855],{"class":43,"line":17019},[41,72850,57389],{"class":58},[41,72852,51540],{"class":275},[41,72854,23874],{"class":58},[41,72856,1434],{"class":275},[41,72858,72859,72861,72863,72865,72867],{"class":43,"line":17024},[41,72860,55025],{"class":58},[41,72862,51540],{"class":275},[41,72864,822],{"class":58},[41,72866,51595],{"class":271},[41,72868,1434],{"class":275},[41,72870,72871,72873,72875,72877,72879,72881,72883,72885,72888,72890,72893,72895,72897],{"class":43,"line":17037},[41,72872,62080],{"class":58},[41,72874,51540],{"class":275},[41,72876,26],{"class":58},[41,72878,51595],{"class":271},[41,72880,51624],{"class":58},[41,72882,72363],{"class":58},[41,72884,276],{"class":275},[41,72886,72887],{"class":58},"228",[41,72889,12573],{"class":275},[41,72891,72892],{"class":58},"225",[41,72894,12573],{"class":275},[41,72896,72892],{"class":58},[41,72898,2857],{"class":275},[41,72900,72901,72904,72906,72908,72910],{"class":43,"line":17042},[41,72902,72903],{"class":58},"      padding-left",[41,72905,51540],{"class":275},[41,72907,592],{"class":58},[41,72909,51595],{"class":271},[41,72911,1434],{"class":275},[41,72913,72914,72916,72918,72920,72923,72925,72927],{"class":43,"line":17047},[41,72915,61963],{"class":58},[41,72917,51540],{"class":275},[41,72919,28224],{"class":58},[41,72921,72922],{"class":58}," linear",[41,72924,61970],{"class":58},[41,72926,968],{"class":271},[41,72928,1434],{"class":275},[41,72930,72931],{"class":43,"line":17052},[41,72932,2326],{"class":275},[41,72934,72935],{"class":43,"line":17065},[41,72936,80],{"emptyLinePlaceholder":79},[41,72938,72939,72942,72944,72946],{"class":43,"line":17070},[41,72940,72941],{"class":51403},"    tbody",[41,72943,70247],{"class":51403},[41,72945,61043],{"class":54},[41,72947,15710],{"class":275},[41,72949,72950,72952,72954,72956,72958,72960,72962,72964,72966,72968],{"class":43,"line":32736},[41,72951,54987],{"class":58},[41,72953,51540],{"class":275},[41,72955,72426],{"class":58},[41,72957,276],{"class":275},[41,72959,72683],{"class":58},[41,72961,12573],{"class":275},[41,72963,72688],{"class":58},[41,72965,12573],{"class":275},[41,72967,72688],{"class":58},[41,72969,2857],{"class":275},[41,72971,72972,72974,72976,72978],{"class":43,"line":32742},[41,72973,62128],{"class":58},[41,72975,51540],{"class":275},[41,72977,62133],{"class":58},[41,72979,1434],{"class":275},[41,72981,72982],{"class":43,"line":32748},[41,72983,2326],{"class":275},[41,72985,72986],{"class":43,"line":32754},[41,72987,80],{"emptyLinePlaceholder":79},[41,72989,72990,72992,72994,72997,72999],{"class":43,"line":32760},[41,72991,72941],{"class":51403},[41,72993,70247],{"class":51403},[41,72995,72996],{"class":51403}," td",[41,72998,1539],{"class":51403},[41,73000,15710],{"class":275},[41,73002,73003,73005,73007,73009],{"class":43,"line":32771},[41,73004,55112],{"class":58},[41,73006,51540],{"class":275},[41,73008,60972],{"class":58},[41,73010,1434],{"class":275},[41,73012,73013,73015,73017,73019,73021],{"class":43,"line":32777},[41,73014,54874],{"class":58},[41,73016,51540],{"class":275},[41,73018,1180],{"class":58},[41,73020,51595],{"class":271},[41,73022,1434],{"class":275},[41,73024,73025,73027,73029,73031,73033],{"class":43,"line":32797},[41,73026,54888],{"class":58},[41,73028,51540],{"class":275},[41,73030,1098],{"class":58},[41,73032,51595],{"class":271},[41,73034,1434],{"class":275},[41,73036,73037,73039,73041,73043,73045],{"class":43,"line":32803},[41,73038,57462],{"class":58},[41,73040,51540],{"class":275},[41,73042,1098],{"class":58},[41,73044,51595],{"class":271},[41,73046,1434],{"class":275},[41,73048,73049,73051,73053,73055,73057],{"class":43,"line":32814},[41,73050,62180],{"class":58},[41,73052,51540],{"class":275},[41,73054,351],{"class":58},[41,73056,51595],{"class":271},[41,73058,1434],{"class":275},[41,73060,73061,73063,73065,73067],{"class":43,"line":32820},[41,73062,57519],{"class":58},[41,73064,51540],{"class":275},[41,73066,60945],{"class":58},[41,73068,1434],{"class":275},[41,73070,73071,73073,73075,73077],{"class":43,"line":32826},[41,73072,57389],{"class":58},[41,73074,51540],{"class":275},[41,73076,51695],{"class":58},[41,73078,1434],{"class":275},[41,73080,73081,73083,73085,73087],{"class":43,"line":32832},[41,73082,64073],{"class":58},[41,73084,51540],{"class":275},[41,73086,54840],{"class":58},[41,73088,1434],{"class":275},[41,73090,73091,73093,73095,73098],{"class":43,"line":32838},[41,73092,54987],{"class":58},[41,73094,51540],{"class":275},[41,73096,73097],{"class":58},"orange",[41,73099,1434],{"class":275},[41,73101,73102,73104,73106,73109,73111],{"class":43,"line":32844},[41,73103,55237],{"class":58},[41,73105,51540],{"class":275},[41,73107,73108],{"class":58},"12.5",[41,73110,51595],{"class":271},[41,73112,1434],{"class":275},[41,73114,73115],{"class":43,"line":32850},[41,73116,2326],{"class":275},[41,73118,73119,73121,73123],{"class":43,"line":32856},[41,73120,52520],{"class":275},[41,73122,189],{"class":51403},[41,73124,51410],{"class":275},[41,73126,73127,73129,73131],{"class":43,"line":32876},[41,73128,51888],{"class":275},[41,73130,51437],{"class":51403},[41,73132,51410],{"class":275},[41,73134,73135],{"class":43,"line":32882},[41,73136,80],{"emptyLinePlaceholder":79},[41,73138,73139,73141,73143],{"class":43,"line":32898},[41,73140,1183],{"class":275},[41,73142,51903],{"class":51403},[41,73144,51410],{"class":275},[41,73146,73147,73149,73151,73154,73156],{"class":43,"line":32904},[41,73148,52247],{"class":275},[41,73150,15],{"class":51403},[41,73152,73153],{"class":275},">学生就业统计表\u003C\u002F",[41,73155,15],{"class":51403},[41,73157,51410],{"class":275},[41,73159,73160,73162,73164,73166,73168,73170,73172,73174,73176],{"class":43,"line":32918},[41,73161,52247],{"class":275},[41,73163,66728],{"class":51403},[41,73165,53589],{"class":54},[41,73167,321],{"class":275},[41,73169,62767],{"class":378},[41,73171,69173],{"class":54},[41,73173,321],{"class":275},[41,73175,31879],{"class":378},[41,73177,51410],{"class":275},[41,73179,73180,73182,73184,73186,73188,73190,73192,73194,73196,73198,73200,73203,73205,73207,73209],{"class":43,"line":32924},[41,73181,51444],{"class":275},[41,73183,53924],{"class":51403},[41,73185,53927],{"class":54},[41,73187,321],{"class":275},[41,73189,62802],{"class":378},[41,73191,15058],{"class":54},[41,73193,321],{"class":275},[41,73195,69199],{"class":378},[41,73197,61123],{"class":54},[41,73199,321],{"class":275},[41,73201,73202],{"class":378},"\"姓名\"",[41,73204,53589],{"class":54},[41,73206,321],{"class":275},[41,73208,69199],{"class":378},[41,73210,51410],{"class":275},[41,73212,73213,73215,73217,73219,73221,73223,73225,73227,73229,73231,73233,73236,73238,73240,73242],{"class":43,"line":32939},[41,73214,51444],{"class":275},[41,73216,53924],{"class":51403},[41,73218,53927],{"class":54},[41,73220,321],{"class":275},[41,73222,62802],{"class":378},[41,73224,15058],{"class":54},[41,73226,321],{"class":275},[41,73228,69227],{"class":378},[41,73230,61123],{"class":54},[41,73232,321],{"class":275},[41,73234,73235],{"class":378},"\"年龄\"",[41,73237,53589],{"class":54},[41,73239,321],{"class":275},[41,73241,69227],{"class":378},[41,73243,51410],{"class":275},[41,73245,73246,73248,73250,73252,73254,73256,73258,73260,73262,73264,73266,73269,73271,73273,73275],{"class":43,"line":32945},[41,73247,51444],{"class":275},[41,73249,53924],{"class":51403},[41,73251,53927],{"class":54},[41,73253,321],{"class":275},[41,73255,62802],{"class":378},[41,73257,15058],{"class":54},[41,73259,321],{"class":275},[41,73261,69329],{"class":378},[41,73263,61123],{"class":54},[41,73265,321],{"class":275},[41,73267,73268],{"class":378},"\"薪资\"",[41,73270,53589],{"class":54},[41,73272,321],{"class":275},[41,73274,69329],{"class":378},[41,73276,51410],{"class":275},[41,73278,73279,73281,73283,73285,73287,73289,73291,73293,73295,73297,73299,73301],{"class":43,"line":32954},[41,73280,51444],{"class":275},[41,73282,69247],{"class":51403},[41,73284,15058],{"class":54},[41,73286,321],{"class":275},[41,73288,69254],{"class":378},[41,73290,15097],{"class":54},[41,73292,321],{"class":275},[41,73294,7790],{"class":378},[41,73296,53589],{"class":54},[41,73298,321],{"class":275},[41,73300,69254],{"class":378},[41,73302,51410],{"class":275},[41,73304,73305,73307,73309,73311,73313,73315,73317,73319],{"class":43,"line":32960},[41,73306,55337],{"class":275},[41,73308,69269],{"class":51403},[41,73310,66754],{"class":54},[41,73312,321],{"class":275},[41,73314,10099],{"class":378},[41,73316,69278],{"class":275},[41,73318,69269],{"class":51403},[41,73320,51410],{"class":275},[41,73322,73323,73325,73327,73329,73331,73333,73335,73337],{"class":43,"line":32969},[41,73324,55337],{"class":275},[41,73326,69269],{"class":51403},[41,73328,66754],{"class":54},[41,73330,321],{"class":275},[41,73332,10168],{"class":378},[41,73334,69297],{"class":275},[41,73336,69269],{"class":51403},[41,73338,51410],{"class":275},[41,73340,73341,73343,73345],{"class":43,"line":32975},[41,73342,51879],{"class":275},[41,73344,69247],{"class":51403},[41,73346,51410],{"class":275},[41,73348,73349,73351,73353,73355,73357,73359,73361,73363,73365,73367,73369,73371],{"class":43,"line":32981},[41,73350,51444],{"class":275},[41,73352,69247],{"class":51403},[41,73354,15058],{"class":54},[41,73356,321],{"class":275},[41,73358,69351],{"class":378},[41,73360,15097],{"class":54},[41,73362,321],{"class":275},[41,73364,7790],{"class":378},[41,73366,53589],{"class":54},[41,73368,321],{"class":275},[41,73370,69351],{"class":378},[41,73372,51410],{"class":275},[41,73374,73375,73377,73379,73381,73383,73385,73387,73389],{"class":43,"line":32990},[41,73376,55337],{"class":275},[41,73378,69269],{"class":51403},[41,73380,66754],{"class":54},[41,73382,321],{"class":275},[41,73384,69372],{"class":378},[41,73386,69375],{"class":275},[41,73388,69269],{"class":51403},[41,73390,51410],{"class":275},[41,73392,73393,73395,73397,73399,73401,73403,73405,73407],{"class":43,"line":32996},[41,73394,55337],{"class":275},[41,73396,69269],{"class":51403},[41,73398,66754],{"class":54},[41,73400,321],{"class":275},[41,73402,69392],{"class":378},[41,73404,69395],{"class":275},[41,73406,69269],{"class":51403},[41,73408,51410],{"class":275},[41,73410,73411,73413,73415,73417,73419,73421,73423,73425],{"class":43,"line":33007},[41,73412,55337],{"class":275},[41,73414,69269],{"class":51403},[41,73416,66754],{"class":54},[41,73418,321],{"class":275},[41,73420,69412],{"class":378},[41,73422,69415],{"class":275},[41,73424,69269],{"class":51403},[41,73426,51410],{"class":275},[41,73428,73429,73431,73433,73435,73437,73439,73441,73443],{"class":43,"line":33013},[41,73430,55337],{"class":275},[41,73432,69269],{"class":51403},[41,73434,66754],{"class":54},[41,73436,321],{"class":275},[41,73438,69432],{"class":378},[41,73440,69435],{"class":275},[41,73442,69269],{"class":51403},[41,73444,51410],{"class":275},[41,73446,73447,73449,73451,73453,73455,73457,73459,73461],{"class":43,"line":33032},[41,73448,55337],{"class":275},[41,73450,69269],{"class":51403},[41,73452,66754],{"class":54},[41,73454,321],{"class":275},[41,73456,69452],{"class":378},[41,73458,69455],{"class":275},[41,73460,69269],{"class":51403},[41,73462,51410],{"class":275},[41,73464,73465,73467,73469],{"class":43,"line":33038},[41,73466,51879],{"class":275},[41,73468,69247],{"class":51403},[41,73470,51410],{"class":275},[41,73472,73473,73475,73477],{"class":43,"line":33049},[41,73474,51444],{"class":275},[41,73476,53990],{"class":51403},[41,73478,51410],{"class":275},[41,73480,73481,73483,73485,73488,73490,73493,73495],{"class":43,"line":33055},[41,73482,55337],{"class":275},[41,73484,41],{"class":51403},[41,73486,73487],{"class":275},">+\u003C\u002F",[41,73489,41],{"class":51403},[41,73491,73492],{"class":275},">添加\u003C\u002F",[41,73494,53990],{"class":51403},[41,73496,51410],{"class":275},[41,73498,73499,73501,73503],{"class":43,"line":33075},[41,73500,52520],{"class":275},[41,73502,66728],{"class":51403},[41,73504,51410],{"class":275},[41,73506,73507,73509,73511,73513,73515,73517,73520,73522,73525,73527,73530,73532],{"class":43,"line":33091},[41,73508,52247],{"class":275},[41,73510,51714],{"class":51403},[41,73512,53589],{"class":54},[41,73514,321],{"class":275},[41,73516,62683],{"class":378},[41,73518,73519],{"class":275},">共有数据 \u003C",[41,73521,41],{"class":51403},[41,73523,73524],{"class":275},">0\u003C\u002F",[41,73526,41],{"class":51403},[41,73528,73529],{"class":275},"> 条\u003C\u002F",[41,73531,51714],{"class":51403},[41,73533,51410],{"class":275},[41,73535,73536,73538,73540],{"class":43,"line":33097},[41,73537,52247],{"class":275},[41,73539,411],{"class":51403},[41,73541,51410],{"class":275},[41,73543,73544,73546,73548],{"class":43,"line":33111},[41,73545,51444],{"class":275},[41,73547,414],{"class":51403},[41,73549,51410],{"class":275},[41,73551,73552,73554,73556],{"class":43,"line":33117},[41,73553,55337],{"class":275},[41,73555,417],{"class":51403},[41,73557,51410],{"class":275},[41,73559,73560,73562,73564,73567,73569],{"class":43,"line":33123},[41,73561,55405],{"class":275},[41,73563,420],{"class":51403},[41,73565,73566],{"class":275},">ID\u003C\u002F",[41,73568,420],{"class":51403},[41,73570,51410],{"class":275},[41,73572,73573,73575,73577,73579,73581],{"class":43,"line":33134},[41,73574,55405],{"class":275},[41,73576,420],{"class":51403},[41,73578,69558],{"class":275},[41,73580,420],{"class":51403},[41,73582,51410],{"class":275},[41,73584,73585,73587,73589,73591,73593],{"class":43,"line":33140},[41,73586,55405],{"class":275},[41,73588,420],{"class":51403},[41,73590,69571],{"class":275},[41,73592,420],{"class":51403},[41,73594,51410],{"class":275},[41,73596,73597,73599,73601,73603,73605],{"class":43,"line":33146},[41,73598,55405],{"class":275},[41,73600,420],{"class":51403},[41,73602,69584],{"class":275},[41,73604,420],{"class":51403},[41,73606,51410],{"class":275},[41,73608,73609,73611,73613,73615,73617],{"class":43,"line":33156},[41,73610,55405],{"class":275},[41,73612,420],{"class":51403},[41,73614,69597],{"class":275},[41,73616,420],{"class":51403},[41,73618,51410],{"class":275},[41,73620,73621,73623,73625,73627,73629],{"class":43,"line":33162},[41,73622,55405],{"class":275},[41,73624,420],{"class":51403},[41,73626,69610],{"class":275},[41,73628,420],{"class":51403},[41,73630,51410],{"class":275},[41,73632,73633,73635,73637,73640,73642],{"class":43,"line":33173},[41,73634,55405],{"class":275},[41,73636,420],{"class":51403},[41,73638,73639],{"class":275},">录入时间\u003C\u002F",[41,73641,420],{"class":51403},[41,73643,51410],{"class":275},[41,73645,73646,73648,73650,73652,73654],{"class":43,"line":33179},[41,73647,55405],{"class":275},[41,73649,420],{"class":51403},[41,73651,69623],{"class":275},[41,73653,420],{"class":51403},[41,73655,51410],{"class":275},[41,73657,73658,73660,73662],{"class":43,"line":33189},[41,73659,55510],{"class":275},[41,73661,417],{"class":51403},[41,73663,51410],{"class":275},[41,73665,73666,73668,73670],{"class":43,"line":33194},[41,73667,51879],{"class":275},[41,73669,414],{"class":51403},[41,73671,51410],{"class":275},[41,73673,73674,73676,73678],{"class":43,"line":33200},[41,73675,51444],{"class":275},[41,73677,458],{"class":51403},[41,73679,51410],{"class":275},[41,73681,73682],{"class":43,"line":33249},[41,73683,73684],{"class":47},"      \u003C!-- \u003Ctr>\n",[41,73686,73687],{"class":43,"line":33296},[41,73688,73689],{"class":47},"        \u003Ctd>1\u003C\u002Ftd>\n",[41,73691,73692],{"class":43,"line":33301},[41,73693,73689],{"class":47},[41,73695,73696],{"class":43,"line":33307},[41,73697,73689],{"class":47},[41,73699,73700],{"class":43,"line":33326},[41,73701,73689],{"class":47},[41,73703,73704],{"class":43,"line":33332},[41,73705,73689],{"class":47},[41,73707,73708],{"class":43,"line":33352},[41,73709,73689],{"class":47},[41,73711,73712],{"class":43,"line":33358},[41,73713,73689],{"class":47},[41,73715,73716],{"class":43,"line":33364},[41,73717,73718],{"class":47},"        \u003Ctd>\n",[41,73720,73721],{"class":43,"line":33374},[41,73722,73723],{"class":47},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[41,73725,73726],{"class":43,"line":33379},[41,73727,73728],{"class":47},"        \u003C\u002Ftd>\n",[41,73730,73731],{"class":43,"line":33385},[41,73732,73733],{"class":47},"      \u003C\u002Ftr> -->\n",[41,73735,73736,73738,73740],{"class":43,"line":33401},[41,73737,51879],{"class":275},[41,73739,458],{"class":51403},[41,73741,51410],{"class":275},[41,73743,73744,73746,73748],{"class":43,"line":33446},[41,73745,52520],{"class":275},[41,73747,411],{"class":51403},[41,73749,51410],{"class":275},[41,73751,73752,73754,73756],{"class":43,"line":33452},[41,73753,52247],{"class":275},[41,73755,51916],{"class":51403},[41,73757,51410],{"class":275},[41,73759,73760],{"class":43,"line":33458},[41,73761,73762],{"class":47},"    \u002F\u002F const initData = [{\n",[41,73764,73765],{"class":43,"line":33464},[41,73766,73767],{"class":47},"    \u002F\u002F   unameId: 1,\n",[41,73769,73770],{"class":43,"line":33475},[41,73771,73772],{"class":47},"    \u002F\u002F   uname: '华晨宇',\n",[41,73774,73775],{"class":43,"line":33481},[41,73776,73777],{"class":47},"    \u002F\u002F   age: 22,\n",[41,73779,73780],{"class":43,"line":33487},[41,73781,73782],{"class":47},"    \u002F\u002F   salary: 12000,\n",[41,73784,73785],{"class":43,"line":33493},[41,73786,73787],{"class":47},"    \u002F\u002F   gender: '男',\n",[41,73789,73790],{"class":43,"line":33511},[41,73791,73792],{"class":47},"    \u002F\u002F   city: '北京',\n",[41,73794,73795],{"class":43,"line":33525},[41,73796,73797],{"class":47},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[41,73799,73800],{"class":43,"line":33534},[41,73801,73802],{"class":47},"    \u002F\u002F }]\n",[41,73804,73805],{"class":43,"line":33543},[41,73806,73807],{"class":47},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[41,73809,73810],{"class":43,"line":33552},[41,73811,73812],{"class":47},"    \u002F\u002F 1.渲染业务\n",[41,73814,73815],{"class":43,"line":33561},[41,73816,73817],{"class":47},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[41,73819,73820],{"class":43,"line":33567},[41,73821,73822],{"class":47},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[41,73824,73825],{"class":43,"line":33573},[41,73826,73827],{"class":47},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[41,73829,73830],{"class":43,"line":33581},[41,73831,80],{"emptyLinePlaceholder":79},[41,73833,73834],{"class":43,"line":33586},[41,73835,73836],{"class":47},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[41,73838,73839],{"class":43,"line":33592},[41,73840,73841],{"class":47},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[41,73843,73844,73846,73848,73850],{"class":43,"line":33603},[41,73845,11359],{"class":271},[41,73847,57798],{"class":58},[41,73849,13702],{"class":271},[41,73851,51941],{"class":275},[41,73853,73854,73857,73859],{"class":43,"line":33609},[41,73855,73856],{"class":275},"    console.",[41,73858,58350],{"class":54},[41,73860,52515],{"class":275},[41,73862,73863],{"class":43,"line":33629},[41,73864,80],{"emptyLinePlaceholder":79},[41,73866,73867],{"class":43,"line":33635},[41,73868,73869],{"class":47},"    \u002F\u002F 时间函数\n",[41,73871,73872,73874,73877],{"class":43,"line":33641},[41,73873,70187],{"class":271},[41,73875,73876],{"class":54}," getTime",[41,73878,10991],{"class":275},[41,73880,73881,73883,73886,73888,73890,73893],{"class":43,"line":33647},[41,73882,58331],{"class":271},[41,73884,73885],{"class":58}," date",[41,73887,13702],{"class":271},[41,73889,11716],{"class":271},[41,73891,73892],{"class":54}," Date",[41,73894,2115],{"class":275},[41,73896,73897,73899,73901,73903,73906,73909,73911,73913,73915,73918,73921,73923,73925,73927,73929,73931,73933,73935],{"class":43,"line":33664},[41,73898,58331],{"class":271},[41,73900,16229],{"class":58},[41,73902,13702],{"class":271},[41,73904,73905],{"class":275}," date.",[41,73907,73908],{"class":54},"getHours",[41,73910,13188],{"class":275},[41,73912,1183],{"class":271},[41,73914,2177],{"class":58},[41,73916,73917],{"class":271}," ?",[41,73919,73920],{"class":378}," '0'",[41,73922,45669],{"class":271},[41,73924,73905],{"class":275},[41,73926,73908],{"class":54},[41,73928,13188],{"class":275},[41,73930,1132],{"class":271},[41,73932,73905],{"class":275},[41,73934,73908],{"class":54},[41,73936,2115],{"class":275},[41,73938,73939,73941,73944,73946,73948,73951,73953,73955,73957,73959,73961,73963,73965,73967,73969,73971,73973,73975],{"class":43,"line":33670},[41,73940,58331],{"class":271},[41,73942,73943],{"class":58}," m",[41,73945,13702],{"class":271},[41,73947,73905],{"class":275},[41,73949,73950],{"class":54},"getMinutes",[41,73952,13188],{"class":275},[41,73954,1183],{"class":271},[41,73956,2177],{"class":58},[41,73958,73917],{"class":271},[41,73960,73920],{"class":378},[41,73962,45669],{"class":271},[41,73964,73905],{"class":275},[41,73966,73950],{"class":54},[41,73968,13188],{"class":275},[41,73970,1132],{"class":271},[41,73972,73905],{"class":275},[41,73974,73950],{"class":54},[41,73976,2115],{"class":275},[41,73978,73979,73981,73983,73985,73987,73990,73992,73994,73996,73998,74000,74002,74004,74006,74008,74010,74012,74014],{"class":43,"line":33676},[41,73980,58331],{"class":271},[41,73982,8566],{"class":58},[41,73984,13702],{"class":271},[41,73986,73905],{"class":275},[41,73988,73989],{"class":54},"getSeconds",[41,73991,13188],{"class":275},[41,73993,1183],{"class":271},[41,73995,2177],{"class":58},[41,73997,73917],{"class":271},[41,73999,73920],{"class":378},[41,74001,45669],{"class":271},[41,74003,73905],{"class":275},[41,74005,73989],{"class":54},[41,74007,13188],{"class":275},[41,74009,1132],{"class":271},[41,74011,73905],{"class":275},[41,74013,73989],{"class":54},[41,74015,2115],{"class":275},[41,74017,74018,74020,74023,74025,74027,74030,74032,74035,74037,74040,74042,74044,74047,74049,74051,74053,74055,74057,74059,74062,74064,74067,74069,74072,74074,74076,74078],{"class":43,"line":33682},[41,74019,58331],{"class":271},[41,74021,74022],{"class":58}," str",[41,74024,13702],{"class":271},[41,74026,63006],{"class":378},[41,74028,74029],{"class":275},"date",[41,74031,831],{"class":378},[41,74033,74034],{"class":54},"getFullYear",[41,74036,2565],{"class":378},[41,74038,74039],{"class":378},"}\u002F${",[41,74041,74029],{"class":275},[41,74043,831],{"class":378},[41,74045,74046],{"class":54},"getMonth",[41,74048,13188],{"class":378},[41,74050,754],{"class":271},[41,74052,25221],{"class":58},[41,74054,74039],{"class":378},[41,74056,74029],{"class":275},[41,74058,831],{"class":378},[41,74060,74061],{"class":54},"getDate",[41,74063,2565],{"class":378},[41,74065,74066],{"class":378},"} ${",[41,74068,688],{"class":275},[41,74070,74071],{"class":378},"}:${",[41,74073,817],{"class":275},[41,74075,74071],{"class":378},[41,74077,968],{"class":275},[41,74079,74080],{"class":378},"}`\n",[41,74082,74083,74086],{"class":43,"line":33688},[41,74084,74085],{"class":271},"      return",[41,74087,74088],{"class":275}," str\n",[41,74090,74091],{"class":43,"line":33694},[41,74092,2326],{"class":275},[41,74094,74095],{"class":43,"line":33721},[41,74096,74097],{"class":47},"    \u002F\u002F 渲染函数\n",[41,74099,74100,74102,74104,74106,74108,74110,74112,74114],{"class":43,"line":33745},[41,74101,11359],{"class":271},[41,74103,69850],{"class":58},[41,74105,13702],{"class":271},[41,74107,54499],{"class":275},[41,74109,54502],{"class":54},[41,74111,276],{"class":275},[41,74113,69861],{"class":378},[41,74115,282],{"class":275},[41,74117,74118,74120,74122],{"class":43,"line":33751},[41,74119,70187],{"class":271},[41,74121,70190],{"class":54},[41,74123,10991],{"class":275},[41,74125,74126],{"class":43,"line":33757},[41,74127,74128],{"class":47},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[41,74130,74131],{"class":43,"line":33763},[41,74132,74133],{"class":47},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[41,74135,74136,74138,74141,74143,74145,74148,74150,74152,74154,74157,74159,74162],{"class":43,"line":33774},[41,74137,58331],{"class":271},[41,74139,74140],{"class":58}," trArr",[41,74142,13702],{"class":271},[41,74144,52068],{"class":275},[41,74146,74147],{"class":54},"map",[41,74149,276],{"class":275},[41,74151,54552],{"class":271},[41,74153,1798],{"class":275},[41,74155,74156],{"class":5354},"ele",[41,74158,12573],{"class":275},[41,74160,74161],{"class":5354},"index",[41,74163,12580],{"class":275},[41,74165,74166,74168],{"class":43,"line":33785},[41,74167,14890],{"class":271},[41,74169,70271],{"class":378},[41,74171,74172],{"class":43,"line":33791},[41,74173,74174],{"class":378},"      \u003Ctr>\n",[41,74176,74177,74179,74181,74183,74186],{"class":43,"line":33808},[41,74178,70276],{"class":378},[41,74180,74156],{"class":275},[41,74182,831],{"class":378},[41,74184,74185],{"class":275},"unameId",[41,74187,70291],{"class":378},[41,74189,74190,74192,74194,74196,74198],{"class":43,"line":33831},[41,74191,70276],{"class":378},[41,74193,74156],{"class":275},[41,74195,831],{"class":378},[41,74197,70307],{"class":275},[41,74199,70291],{"class":378},[41,74201,74202,74204,74206,74208,74210],{"class":43,"line":33854},[41,74203,70276],{"class":378},[41,74205,74156],{"class":275},[41,74207,831],{"class":378},[41,74209,70324],{"class":275},[41,74211,70291],{"class":378},[41,74213,74214,74216,74218,74220,74222],{"class":43,"line":33860},[41,74215,70276],{"class":378},[41,74217,74156],{"class":275},[41,74219,831],{"class":378},[41,74221,70341],{"class":275},[41,74223,70291],{"class":378},[41,74225,74226,74228,74230,74232,74234],{"class":43,"line":33865},[41,74227,70276],{"class":378},[41,74229,74156],{"class":275},[41,74231,831],{"class":378},[41,74233,70358],{"class":275},[41,74235,70291],{"class":378},[41,74237,74238,74240,74242,74244,74246],{"class":43,"line":33874},[41,74239,70276],{"class":378},[41,74241,74156],{"class":275},[41,74243,831],{"class":378},[41,74245,70375],{"class":275},[41,74247,70291],{"class":378},[41,74249,74250,74252,74254,74256,74258],{"class":43,"line":33884},[41,74251,70276],{"class":378},[41,74253,74156],{"class":275},[41,74255,831],{"class":378},[41,74257,2526],{"class":275},[41,74259,70291],{"class":378},[41,74261,74262],{"class":43,"line":33890},[41,74263,73718],{"class":378},[41,74265,74266,74269,74271],{"class":43,"line":33895},[41,74267,74268],{"class":378},"          \u003Ca href=\"#\" data-id=\"${",[41,74270,74161],{"class":275},[41,74272,74273],{"class":378},"}\">删除\u003C\u002Fa>\n",[41,74275,74276],{"class":43,"line":33901},[41,74277,73728],{"class":378},[41,74279,74280],{"class":43,"line":33914},[41,74281,74282],{"class":378},"      \u003C\u002Ftr>\n",[41,74284,74285],{"class":43,"line":33920},[41,74286,74287],{"class":378},"  `\n",[41,74289,74290],{"class":43,"line":33931},[41,74291,64918],{"class":275},[41,74293,74294,74296,74298],{"class":43,"line":33942},[41,74295,58347],{"class":275},[41,74297,58350],{"class":54},[41,74299,74300],{"class":275},"(trArr)\n",[41,74302,74303],{"class":43,"line":33961},[41,74304,80],{"emptyLinePlaceholder":79},[41,74306,74307],{"class":43,"line":49621},[41,74308,74309],{"class":47},"      \u002F\u002F (2) 把数组转换为字符串join\n",[41,74311,74312],{"class":43,"line":49626},[41,74313,74314],{"class":47},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[41,74316,74317,74319,74321,74324,74327,74329,74332],{"class":43,"line":49635},[41,74318,70202],{"class":275},[41,74320,321],{"class":271},[41,74322,74323],{"class":275}," trArr.",[41,74325,74326],{"class":54},"join",[41,74328,276],{"class":275},[41,74330,74331],{"class":378},"''",[41,74333,282],{"class":275},[41,74335,74336],{"class":43,"line":49644},[41,74337,74338],{"class":47},"      \u002F\u002F 显示共有几条\n",[41,74340,74341,74343,74345,74347,74350,74353,74355,74357],{"class":43,"line":49649},[41,74342,55874],{"class":275},[41,74344,54502],{"class":54},[41,74346,276],{"class":275},[41,74348,74349],{"class":378},"'.total span'",[41,74351,74352],{"class":275},").innerHTML ",[41,74354,321],{"class":271},[41,74356,52068],{"class":275},[41,74358,55934],{"class":58},[41,74360,74361],{"class":43,"line":49654},[41,74362,2326],{"class":275},[41,74364,74365],{"class":43,"line":49659},[41,74366,74367],{"class":47},"    \u002F\u002F render()\n",[41,74369,74370],{"class":43,"line":49672},[41,74371,80],{"emptyLinePlaceholder":79},[41,74373,74374],{"class":43,"line":49677},[41,74375,74376],{"class":47},"    \u002F\u002F 获取DOM对象\n",[41,74378,74379,74381,74383,74385,74387,74389,74391,74393],{"class":43,"line":49686},[41,74380,11359],{"class":271},[41,74382,69924],{"class":58},[41,74384,13702],{"class":271},[41,74386,54499],{"class":275},[41,74388,54502],{"class":54},[41,74390,276],{"class":275},[41,74392,69935],{"class":378},[41,74394,282],{"class":275},[41,74396,74397,74399,74401,74403,74405,74407,74409,74411],{"class":43,"line":49695},[41,74398,11359],{"class":271},[41,74400,69751],{"class":58},[41,74402,13702],{"class":271},[41,74404,54499],{"class":275},[41,74406,54502],{"class":54},[41,74408,276],{"class":275},[41,74410,69762],{"class":378},[41,74412,282],{"class":275},[41,74414,74415,74417,74419,74421,74423,74425,74427,74429],{"class":43,"line":49712},[41,74416,11359],{"class":271},[41,74418,15827],{"class":58},[41,74420,13702],{"class":271},[41,74422,54499],{"class":275},[41,74424,54502],{"class":54},[41,74426,276],{"class":275},[41,74428,69781],{"class":378},[41,74430,282],{"class":275},[41,74432,74434,74436,74438,74440,74442,74444,74446,74448],{"class":43,"line":74433},231,[41,74435,11359],{"class":271},[41,74437,69810],{"class":58},[41,74439,13702],{"class":271},[41,74441,54499],{"class":275},[41,74443,54502],{"class":54},[41,74445,276],{"class":275},[41,74447,69821],{"class":378},[41,74449,282],{"class":275},[41,74451,74453,74455,74457,74459,74461,74463,74465,74467],{"class":43,"line":74452},232,[41,74454,11359],{"class":271},[41,74456,69790],{"class":58},[41,74458,13702],{"class":271},[41,74460,54499],{"class":275},[41,74462,54502],{"class":54},[41,74464,276],{"class":275},[41,74466,69801],{"class":378},[41,74468,282],{"class":275},[41,74470,74472,74474,74476,74478,74480,74482,74484,74486],{"class":43,"line":74471},233,[41,74473,11359],{"class":271},[41,74475,69830],{"class":58},[41,74477,13702],{"class":271},[41,74479,54499],{"class":275},[41,74481,54502],{"class":54},[41,74483,276],{"class":275},[41,74485,69841],{"class":378},[41,74487,282],{"class":275},[41,74489,74491],{"class":43,"line":74490},234,[41,74492,80],{"emptyLinePlaceholder":79},[41,74494,74496],{"class":43,"line":74495},235,[41,74497,74498],{"class":47},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[41,74500,74502,74504,74506,74508,74510,74512,74514,74516,74518],{"class":43,"line":74501},236,[41,74503,69942],{"class":275},[41,74505,57916],{"class":54},[41,74507,276],{"class":275},[41,74509,69949],{"class":378},[41,74511,12573],{"class":275},[41,74513,54552],{"class":271},[41,74515,1798],{"class":275},[41,74517,348],{"class":5354},[41,74519,12580],{"class":275},[41,74521,74523],{"class":43,"line":74522},237,[41,74524,74525],{"class":47},"      \u002F\u002F 禁止浏览器跳转\n",[41,74527,74529,74531,74533],{"class":43,"line":74528},238,[41,74530,69969],{"class":275},[41,74532,69972],{"class":54},[41,74534,2115],{"class":275},[41,74536,74538],{"class":43,"line":74537},239,[41,74539,74540],{"class":47},"      \u002F\u002F 非空判断\n",[41,74542,74544],{"class":43,"line":74543},240,[41,74545,74546],{"class":47},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[41,74548,74550],{"class":43,"line":74549},241,[41,74551,74552],{"class":47},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[41,74554,74556,74558,74560,74562,74565,74567,74570,74573,74575,74577],{"class":43,"line":74555},242,[41,74557,54583],{"class":271},[41,74559,1798],{"class":275},[41,74561,499],{"class":271},[41,74563,74564],{"class":275},"uname.value ",[41,74566,71460],{"class":271},[41,74568,74569],{"class":271}," !",[41,74571,74572],{"class":275},"age.value ",[41,74574,71460],{"class":271},[41,74576,74569],{"class":271},[41,74578,74579],{"class":275},"salary.value) {\n",[41,74581,74583,74585,74587,74589,74591],{"class":43,"line":74582},243,[41,74584,14890],{"class":271},[41,74586,70043],{"class":54},[41,74588,276],{"class":275},[41,74590,70048],{"class":378},[41,74592,282],{"class":275},[41,74594,74596],{"class":43,"line":74595},244,[41,74597,52501],{"class":275},[41,74599,74601,74603,74605],{"class":43,"line":74600},245,[41,74602,58110],{"class":275},[41,74604,51987],{"class":54},[41,74606,74607],{"class":275},"({\n",[41,74609,74611],{"class":43,"line":74610},246,[41,74612,74613],{"class":47},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[41,74615,74617],{"class":43,"line":74616},247,[41,74618,74619],{"class":47},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[41,74621,74623],{"class":43,"line":74622},248,[41,74624,74625],{"class":47},"        \u002F\u002F 对象的序号应为数组长度+1\n",[41,74627,74629],{"class":43,"line":74628},249,[41,74630,74631],{"class":47},"        \u002F\u002F unameId: arr.length + 1,\n",[41,74633,74635],{"class":43,"line":74634},250,[41,74636,80],{"emptyLinePlaceholder":79},[41,74638,74640],{"class":43,"line":74639},251,[41,74641,74642],{"class":47},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[41,74644,74646],{"class":43,"line":74645},252,[41,74647,74648],{"class":47},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[41,74650,74652],{"class":43,"line":74651},253,[41,74653,74654],{"class":47},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[41,74656,74658],{"class":43,"line":74657},254,[41,74659,74660],{"class":47},"        \u002F\u002F 0当假看\n",[41,74662,74664,74667,74669,74671,74674,74676,74678,74680,74683,74685,74687,74690,74692],{"class":43,"line":74663},255,[41,74665,74666],{"class":275},"        unameId: arr.",[41,74668,52071],{"class":58},[41,74670,73917],{"class":271},[41,74672,74673],{"class":275}," arr[arr.",[41,74675,52071],{"class":58},[41,74677,52374],{"class":271},[41,74679,25221],{"class":58},[41,74681,74682],{"class":275},"].unameId ",[41,74684,754],{"class":271},[41,74686,25221],{"class":58},[41,74688,74689],{"class":271}," :",[41,74691,25221],{"class":58},[41,74693,31569],{"class":275},[41,74695,74697],{"class":43,"line":74696},256,[41,74698,70096],{"class":275},[41,74700,74702],{"class":43,"line":74701},257,[41,74703,70101],{"class":275},[41,74705,74707],{"class":43,"line":74706},258,[41,74708,70111],{"class":275},[41,74710,74712],{"class":43,"line":74711},259,[41,74713,70106],{"class":275},[41,74715,74717],{"class":43,"line":74716},260,[41,74718,74719],{"class":275},"        city: city.value,\n",[41,74721,74723],{"class":43,"line":74722},261,[41,74724,74725],{"class":47},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[41,74727,74729],{"class":43,"line":74728},262,[41,74730,74731],{"class":47},"        \u002F\u002F time: new Date().toDateString()\n",[41,74733,74735,74738,74741],{"class":43,"line":74734},263,[41,74736,74737],{"class":275},"        time: ",[41,74739,74740],{"class":54},"getTime",[41,74742,2115],{"class":275},[41,74744,74746],{"class":43,"line":74745},264,[41,74747,64918],{"class":275},[41,74749,74751],{"class":43,"line":74750},265,[41,74752,74753],{"class":47},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[41,74755,74757,74759],{"class":43,"line":74756},266,[41,74758,70171],{"class":54},[41,74760,2115],{"class":275},[41,74762,74764,74766,74768,74770,74772],{"class":43,"line":74763},267,[41,74765,70154],{"class":58},[41,74767,831],{"class":275},[41,74769,70159],{"class":54},[41,74771,13188],{"class":275},[41,74773,74774],{"class":47},"\u002F\u002F重置表单\n",[41,74776,74778],{"class":43,"line":74777},268,[41,74779,74780],{"class":47},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[41,74782,74784,74787,74789,74791,74794,74796,74798,74800,74802],{"class":43,"line":74783},269,[41,74785,74786],{"class":275},"      localStorage.",[41,74788,71757],{"class":54},[41,74790,276],{"class":275},[41,74792,74793],{"class":378},"'data'",[41,74795,12573],{"class":275},[41,74797,71767],{"class":58},[41,74799,831],{"class":275},[41,74801,71772],{"class":54},[41,74803,74804],{"class":275},"(arr))\n",[41,74806,74808],{"class":43,"line":74807},270,[41,74809,33564],{"class":275},[41,74811,74813],{"class":43,"line":74812},271,[41,74814,80],{"emptyLinePlaceholder":79},[41,74816,74818],{"class":43,"line":74817},272,[41,74819,74820],{"class":47},"    \u002F\u002F 3.删除业务\n",[41,74822,74824],{"class":43,"line":74823},273,[41,74825,74826],{"class":47},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[41,74828,74830,74832,74834,74836,74838,74840,74842,74844,74846],{"class":43,"line":74829},274,[41,74831,70444],{"class":275},[41,74833,57916],{"class":54},[41,74835,276],{"class":275},[41,74837,57921],{"class":378},[41,74839,12573],{"class":275},[41,74841,54552],{"class":271},[41,74843,1798],{"class":275},[41,74845,348],{"class":5354},[41,74847,12580],{"class":275},[41,74849,74851],{"class":43,"line":74850},275,[41,74852,74853],{"class":47},"      \u002F\u002F 判断是否点击的是删除按钮\n",[41,74855,74857,74859,74861,74863,74865],{"class":43,"line":74856},276,[41,74858,54583],{"class":271},[41,74860,67137],{"class":275},[41,74862,54589],{"class":271},[41,74864,68359],{"class":378},[41,74866,12580],{"class":275},[41,74868,74870],{"class":43,"line":74869},277,[41,74871,74872],{"class":47},"        \u002F\u002F alert(1)\n",[41,74874,74876],{"class":43,"line":74875},278,[41,74877,74878],{"class":47},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[41,74880,74882],{"class":43,"line":74881},279,[41,74883,74884],{"class":47},"        \u002F\u002F console.log(e.target)\n",[41,74886,74888],{"class":43,"line":74887},280,[41,74889,74890],{"class":47},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[41,74892,74894],{"class":43,"line":74893},281,[41,74895,80],{"emptyLinePlaceholder":79},[41,74897,74899],{"class":43,"line":74898},282,[41,74900,74901],{"class":47},"        \u002F\u002F 确认框，确然是否真的要删除\n",[41,74903,74905],{"class":43,"line":74904},283,[41,74906,74907],{"class":47},"        \u002F\u002F confirm()为确认框\n",[41,74909,74911],{"class":43,"line":74910},284,[41,74912,74913],{"class":47},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[41,74915,74917,74919,74921,74924,74926,74929],{"class":43,"line":74916},285,[41,74918,2635],{"class":271},[41,74920,1798],{"class":275},[41,74922,74923],{"class":54},"confirm",[41,74925,276],{"class":275},[41,74927,74928],{"class":378},"'您确定要删除这条数据吗？'",[41,74930,74931],{"class":275},")) {\n",[41,74933,74935,74938,74940,74942,74944],{"class":43,"line":74934},286,[41,74936,74937],{"class":275},"          arr.",[41,74939,58113],{"class":54},[41,74941,70497],{"class":275},[41,74943,26],{"class":58},[41,74945,282],{"class":275},[41,74947,74949],{"class":43,"line":74948},287,[41,74950,74951],{"class":47},"          \u002F\u002F 3.4 重新渲染页面\n",[41,74953,74955,74958],{"class":43,"line":74954},288,[41,74956,74957],{"class":54},"          render",[41,74959,2115],{"class":275},[41,74961,74963],{"class":43,"line":74962},289,[41,74964,74965],{"class":47},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[41,74967,74969,74972,74974,74976,74978,74980,74982,74984,74986],{"class":43,"line":74968},290,[41,74970,74971],{"class":275},"          localStorage.",[41,74973,71757],{"class":54},[41,74975,276],{"class":275},[41,74977,74793],{"class":378},[41,74979,12573],{"class":275},[41,74981,71767],{"class":58},[41,74983,831],{"class":275},[41,74985,71772],{"class":54},[41,74987,74804],{"class":275},[41,74989,74991],{"class":43,"line":74990},291,[41,74992,2667],{"class":275},[41,74994,74996],{"class":43,"line":74995},292,[41,74997,52501],{"class":275},[41,74999,75001],{"class":43,"line":75000},293,[41,75002,80],{"emptyLinePlaceholder":79},[41,75004,75006],{"class":43,"line":75005},294,[41,75007,33564],{"class":275},[41,75009,75011],{"class":43,"line":75010},295,[41,75012,80],{"emptyLinePlaceholder":79},[41,75014,75016,75018,75020],{"class":43,"line":75015},296,[41,75017,52520],{"class":275},[41,75019,51916],{"class":51403},[41,75021,51410],{"class":275},[41,75023,75025,75027,75029],{"class":43,"line":75024},297,[41,75026,51888],{"class":275},[41,75028,51903],{"class":51403},[41,75030,51410],{"class":275},[41,75032,75034],{"class":43,"line":75033},298,[41,75035,80],{"emptyLinePlaceholder":79},[41,75037,75039,75041,75043],{"class":43,"line":75038},299,[41,75040,51888],{"class":275},[41,75042,50738],{"class":51403},[41,75044,51410],{"class":275},[15,75046,75048],{"id":75047},"_36-正则表达式","3.6 正则表达式",[20,75050,75051],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[20,75053,75054],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[20,75056,75057],{},"正则表达式的作用：",[1280,75059,75060,75067,75073],{},[227,75061,75062,75063,75066],{},"表单验证（ ",[423,75064,75065],{},"匹配"," ）",[227,75068,75069,75070,75066],{},"过滤敏感词（ ",[423,75071,75072],{},"替换",[227,75074,75075,75076,75066],{},"字符串中提取我们想要的部分（ ",[423,75077,75078],{},"提取",[241,75080,75082],{"id":75081},"_361-语法","3.6.1 语法",[20,75084,75085],{},"正则表达式使用步骤：",[224,75087,75088,75091],{},[227,75089,75090],{},"定义规则",[227,75092,75093],{},"查找是否匹配",[20,75095,75096],{},"正则表达式里边不需要写引号",[20,75098,75099],{},[1603,75100],{"alt":37,"src":75101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[20,75103,75104],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[20,75106,75107],{},"reg.test(str)",[20,75109,75110],{},[1603,75111],{"alt":37,"src":75112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[20,75114,75115],{},[1603,75116],{"alt":37,"src":75117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[241,75119,75121],{"id":75120},"_362-元字符","3.6.2 元字符",[224,75123,75124,75127,75130,75133,75140],{},[227,75125,75126],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[227,75128,75129],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[227,75131,75132],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[227,75134,75135,75136],{},"正则验证工具：",[511,75137,75138],{"href":75138,"rel":75139},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24001],[227,75141,75142],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22136,75144,75146],{"id":75145},"_3621-边界符","3.6.2.1 边界符",[20,75148,75149],{},[1603,75150],{"alt":37,"src":75151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[20,75153,75154],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[20,75156,75157],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[20,75159,75160],{},"只匹配一次",[20,75162,75163],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22136,75165,75167],{"id":75166},"_3622-量词","3.6.2.2 量词",[20,75169,75170],{},[1603,75171],{"alt":37,"src":75172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[20,75174,75175],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22136,75177,75179],{"id":75178},"_3623-元字符","3.6.2.3 元字符",[20,75181,75182],{},[1603,75183],{"alt":37,"src":75184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[20,75186,75187],{},"匹配的是a或b或c []只选一个",[20,75189,75190],{},[1603,75191],{"alt":37,"src":75192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[20,75194,75195],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[20,75197,75198],{},[1603,75199],{"alt":37,"src":75200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[20,75202,75203],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[20,75205,75206],{},[1603,75207],{"alt":37,"src":75208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[32,75210,75212],{"className":50736,"code":75211,"language":50738,"meta":37,"style":37},"\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",[24,75213,75214,75224,75238,75242,75250,75264,75284,75296,75304,75308,75316,75324,75329,75360,75387,75415,75419,75424,75452,75483,75488,75493,75524,75556,75588,75592,75597,75628,75658,75688,75692,75697,75728,75759,75789,75819,75823,75828,75861,75865,75870,75901,75932,75936,75941,75972,76002,76033,76037,76042,76074,76105,76136,76163,76194,76226,76259,76290,76321,76353,76384,76392,76400,76404],{"__ignoreMap":37},[41,75215,75216,75218,75220,75222],{"class":43,"line":44},[41,75217,51400],{"class":275},[41,75219,51404],{"class":51403},[41,75221,51407],{"class":54},[41,75223,51410],{"class":275},[41,75225,75226,75228,75230,75232,75234,75236],{"class":43,"line":51},[41,75227,1183],{"class":275},[41,75229,50738],{"class":51403},[41,75231,51419],{"class":54},[41,75233,321],{"class":275},[41,75235,51424],{"class":378},[41,75237,51410],{"class":275},[41,75239,75240],{"class":43,"line":62},[41,75241,80],{"emptyLinePlaceholder":79},[41,75243,75244,75246,75248],{"class":43,"line":70},[41,75245,1183],{"class":275},[41,75247,51437],{"class":51403},[41,75249,51410],{"class":275},[41,75251,75252,75254,75256,75258,75260,75262],{"class":43,"line":76},[41,75253,52247],{"class":275},[41,75255,51447],{"class":51403},[41,75257,51450],{"class":54},[41,75259,321],{"class":275},[41,75261,51455],{"class":378},[41,75263,51410],{"class":275},[41,75265,75266,75268,75270,75272,75274,75276,75278,75280,75282],{"class":43,"line":83},[41,75267,52247],{"class":275},[41,75269,51447],{"class":51403},[41,75271,15058],{"class":54},[41,75273,321],{"class":275},[41,75275,51494],{"class":378},[41,75277,51474],{"class":54},[41,75279,321],{"class":275},[41,75281,51501],{"class":378},[41,75283,51410],{"class":275},[41,75285,75286,75288,75290,75292,75294],{"class":43,"line":89},[41,75287,52247],{"class":275},[41,75289,51510],{"class":51403},[41,75291,51513],{"class":275},[41,75293,51510],{"class":51403},[41,75295,51410],{"class":275},[41,75297,75298,75300,75302],{"class":43,"line":96},[41,75299,51888],{"class":275},[41,75301,51437],{"class":51403},[41,75303,51410],{"class":275},[41,75305,75306],{"class":43,"line":104},[41,75307,80],{"emptyLinePlaceholder":79},[41,75309,75310,75312,75314],{"class":43,"line":176},[41,75311,1183],{"class":275},[41,75313,51903],{"class":51403},[41,75315,51410],{"class":275},[41,75317,75318,75320,75322],{"class":43,"line":184},[41,75319,52247],{"class":275},[41,75321,51916],{"class":51403},[41,75323,51410],{"class":275},[41,75325,75326],{"class":43,"line":1757},[41,75327,75328],{"class":47},"    \u002F\u002F 元字符中\n",[41,75330,75331,75333,75335,75337,75339,75342,75344,75346,75349,75351,75354,75357],{"class":43,"line":1763},[41,75332,73856],{"class":275},[41,75334,58350],{"class":54},[41,75336,276],{"class":275},[41,75338,857],{"class":378},[41,75340,75341],{"class":48080},"哈",[41,75343,857],{"class":378},[41,75345,831],{"class":275},[41,75347,75348],{"class":54},"test",[41,75350,276],{"class":275},[41,75352,75353],{"class":378},"'哈'",[41,75355,75356],{"class":275},"))  ",[41,75358,75359],{"class":47},"\u002F\u002Ftrue\n",[41,75361,75362,75364,75366,75368,75370,75372,75374,75376,75378,75380,75383,75385],{"class":43,"line":1768},[41,75363,73856],{"class":275},[41,75365,58350],{"class":54},[41,75367,276],{"class":275},[41,75369,857],{"class":378},[41,75371,75341],{"class":48080},[41,75373,857],{"class":378},[41,75375,831],{"class":275},[41,75377,75348],{"class":54},[41,75379,276],{"class":275},[41,75381,75382],{"class":378},"'哈哈'",[41,75384,75356],{"class":275},[41,75386,75359],{"class":47},[41,75388,75389,75391,75393,75395,75397,75399,75401,75403,75405,75407,75410,75413],{"class":43,"line":1782},[41,75390,73856],{"class":275},[41,75392,58350],{"class":54},[41,75394,276],{"class":275},[41,75396,857],{"class":378},[41,75398,75341],{"class":48080},[41,75400,857],{"class":378},[41,75402,831],{"class":275},[41,75404,75348],{"class":54},[41,75406,276],{"class":275},[41,75408,75409],{"class":378},"'二哈'",[41,75411,75412],{"class":275},"))   ",[41,75414,75359],{"class":47},[41,75416,75417],{"class":43,"line":1787},[41,75418,80],{"emptyLinePlaceholder":79},[41,75420,75421],{"class":43,"line":1793},[41,75422,75423],{"class":47},"    \u002F\u002F 1.边界符\n",[41,75425,75426,75428,75430,75432,75434,75436,75438,75440,75442,75444,75446,75448,75450],{"class":43,"line":1814},[41,75427,73856],{"class":275},[41,75429,58350],{"class":54},[41,75431,276],{"class":275},[41,75433,857],{"class":378},[41,75435,1239],{"class":271},[41,75437,75341],{"class":48080},[41,75439,857],{"class":378},[41,75441,831],{"class":275},[41,75443,75348],{"class":54},[41,75445,276],{"class":275},[41,75447,75353],{"class":378},[41,75449,75356],{"class":275},[41,75451,75359],{"class":47},[41,75453,75454,75456,75458,75460,75462,75464,75466,75468,75470,75472,75474,75476,75478,75480],{"class":43,"line":1819},[41,75455,73856],{"class":275},[41,75457,58350],{"class":54},[41,75459,276],{"class":275},[41,75461,857],{"class":378},[41,75463,1239],{"class":271},[41,75465,75341],{"class":48080},[41,75467,575],{"class":271},[41,75469,857],{"class":378},[41,75471,831],{"class":275},[41,75473,75348],{"class":54},[41,75475,276],{"class":275},[41,75477,75382],{"class":378},[41,75479,75356],{"class":275},[41,75481,75482],{"class":47},"\u002F\u002Ffalse\n",[41,75484,75485],{"class":43,"line":1833},[41,75486,75487],{"class":47},"    \u002F\u002F 2.量词\n",[41,75489,75490],{"class":43,"line":1838},[41,75491,75492],{"class":47},"    \u002F\u002F 量词 * 类似于 >= 0\n",[41,75494,75495,75497,75499,75501,75503,75505,75507,75510,75512,75514,75516,75518,75520,75522],{"class":43,"line":1867},[41,75496,73856],{"class":275},[41,75498,58350],{"class":54},[41,75500,276],{"class":275},[41,75502,857],{"class":378},[41,75504,1239],{"class":271},[41,75506,75341],{"class":48080},[41,75508,75509],{"class":271},"*$",[41,75511,857],{"class":378},[41,75513,831],{"class":275},[41,75515,75348],{"class":54},[41,75517,276],{"class":275},[41,75519,75382],{"class":378},[41,75521,75356],{"class":275},[41,75523,75359],{"class":47},[41,75525,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544,75546,75548,75551,75553],{"class":43,"line":1872},[41,75527,73856],{"class":275},[41,75529,58350],{"class":54},[41,75531,276],{"class":275},[41,75533,857],{"class":378},[41,75535,1239],{"class":271},[41,75537,75341],{"class":48080},[41,75539,75509],{"class":271},[41,75541,857],{"class":378},[41,75543,831],{"class":275},[41,75545,75348],{"class":54},[41,75547,276],{"class":275},[41,75549,75550],{"class":378},"'二哈好傻'",[41,75552,75356],{"class":275},[41,75554,75555],{"class":47},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[41,75557,75558,75560,75562,75564,75566,75568,75570,75572,75574,75576,75578,75580,75583,75585],{"class":43,"line":1889},[41,75559,73856],{"class":275},[41,75561,58350],{"class":54},[41,75563,276],{"class":275},[41,75565,857],{"class":378},[41,75567,1239],{"class":271},[41,75569,75341],{"class":48080},[41,75571,75509],{"class":271},[41,75573,857],{"class":378},[41,75575,831],{"class":275},[41,75577,75348],{"class":54},[41,75579,276],{"class":275},[41,75581,75582],{"class":378},"'哈好哈'",[41,75584,75412],{"class":275},[41,75586,75587],{"class":47},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[41,75589,75590],{"class":43,"line":1894},[41,75591,80],{"emptyLinePlaceholder":79},[41,75593,75594],{"class":43,"line":1899},[41,75595,75596],{"class":47},"    \u002F\u002F +类似于>=1\n",[41,75598,75599,75601,75603,75605,75607,75609,75611,75614,75616,75618,75620,75622,75624,75626],{"class":43,"line":1904},[41,75600,73856],{"class":275},[41,75602,58350],{"class":54},[41,75604,276],{"class":275},[41,75606,857],{"class":378},[41,75608,1239],{"class":271},[41,75610,75341],{"class":48080},[41,75612,75613],{"class":271},"+$",[41,75615,857],{"class":378},[41,75617,831],{"class":275},[41,75619,75348],{"class":54},[41,75621,276],{"class":275},[41,75623,75382],{"class":378},[41,75625,75356],{"class":275},[41,75627,75359],{"class":47},[41,75629,75630,75632,75634,75636,75638,75640,75642,75644,75646,75648,75650,75652,75654,75656],{"class":43,"line":1918},[41,75631,73856],{"class":275},[41,75633,58350],{"class":54},[41,75635,276],{"class":275},[41,75637,857],{"class":378},[41,75639,1239],{"class":271},[41,75641,75341],{"class":48080},[41,75643,75613],{"class":271},[41,75645,857],{"class":378},[41,75647,831],{"class":275},[41,75649,75348],{"class":54},[41,75651,276],{"class":275},[41,75653,75550],{"class":378},[41,75655,75356],{"class":275},[41,75657,75555],{"class":47},[41,75659,75660,75662,75664,75666,75668,75670,75672,75674,75676,75678,75680,75682,75684,75686],{"class":43,"line":1923},[41,75661,73856],{"class":275},[41,75663,58350],{"class":54},[41,75665,276],{"class":275},[41,75667,857],{"class":378},[41,75669,1239],{"class":271},[41,75671,75341],{"class":48080},[41,75673,75613],{"class":271},[41,75675,857],{"class":378},[41,75677,831],{"class":275},[41,75679,75348],{"class":54},[41,75681,276],{"class":275},[41,75683,75582],{"class":378},[41,75685,75412],{"class":275},[41,75687,75482],{"class":47},[41,75689,75690],{"class":43,"line":2715},[41,75691,80],{"emptyLinePlaceholder":79},[41,75693,75694],{"class":43,"line":2729},[41,75695,75696],{"class":47},"    \u002F\u002F ?类似于0次或一次\n",[41,75698,75699,75701,75703,75705,75707,75709,75712,75714,75716,75718,75720,75722,75724,75726],{"class":43,"line":2737},[41,75700,73856],{"class":275},[41,75702,58350],{"class":54},[41,75704,276],{"class":275},[41,75706,857],{"class":378},[41,75708,1239],{"class":271},[41,75710,75711],{"class":48080},"哈？",[41,75713,575],{"class":271},[41,75715,857],{"class":378},[41,75717,831],{"class":275},[41,75719,75348],{"class":54},[41,75721,276],{"class":275},[41,75723,74331],{"class":378},[41,75725,75412],{"class":275},[41,75727,75359],{"class":47},[41,75729,75730,75732,75734,75736,75738,75740,75742,75745,75747,75749,75751,75753,75755,75757],{"class":43,"line":2742},[41,75731,73856],{"class":275},[41,75733,58350],{"class":54},[41,75735,276],{"class":275},[41,75737,857],{"class":378},[41,75739,1239],{"class":271},[41,75741,75341],{"class":48080},[41,75743,75744],{"class":271},"?$",[41,75746,857],{"class":378},[41,75748,831],{"class":275},[41,75750,75348],{"class":54},[41,75752,276],{"class":275},[41,75754,75382],{"class":378},[41,75756,75356],{"class":275},[41,75758,75482],{"class":47},[41,75760,75761,75763,75765,75767,75769,75771,75773,75775,75777,75779,75781,75783,75785,75787],{"class":43,"line":2748},[41,75762,73856],{"class":275},[41,75764,58350],{"class":54},[41,75766,276],{"class":275},[41,75768,857],{"class":378},[41,75770,1239],{"class":271},[41,75772,75341],{"class":48080},[41,75774,75744],{"class":271},[41,75776,857],{"class":378},[41,75778,831],{"class":275},[41,75780,75348],{"class":54},[41,75782,276],{"class":275},[41,75784,75550],{"class":378},[41,75786,75356],{"class":275},[41,75788,75555],{"class":47},[41,75790,75791,75793,75795,75797,75799,75801,75803,75805,75807,75809,75811,75813,75815,75817],{"class":43,"line":2754},[41,75792,73856],{"class":275},[41,75794,58350],{"class":54},[41,75796,276],{"class":275},[41,75798,857],{"class":378},[41,75800,1239],{"class":271},[41,75802,75341],{"class":48080},[41,75804,75744],{"class":271},[41,75806,857],{"class":378},[41,75808,831],{"class":275},[41,75810,75348],{"class":54},[41,75812,276],{"class":275},[41,75814,75582],{"class":378},[41,75816,75356],{"class":275},[41,75818,75482],{"class":47},[41,75820,75821],{"class":43,"line":2759},[41,75822,80],{"emptyLinePlaceholder":79},[41,75824,75825],{"class":43,"line":8086},[41,75826,75827],{"class":47},"    \u002F\u002F {n}写几，就必须出现几次\n",[41,75829,75830,75832,75834,75836,75838,75840,75842,75845,75847,75849,75851,75853,75856,75859],{"class":43,"line":8110},[41,75831,73856],{"class":275},[41,75833,58350],{"class":54},[41,75835,276],{"class":275},[41,75837,857],{"class":378},[41,75839,1239],{"class":271},[41,75841,75341],{"class":48080},[41,75843,75844],{"class":271},"{4}$",[41,75846,857],{"class":378},[41,75848,831],{"class":275},[41,75850,75348],{"class":54},[41,75852,276],{"class":275},[41,75854,75855],{"class":378},"'哈哈哈哈'",[41,75857,75858],{"class":275},")) ",[41,75860,75359],{"class":47},[41,75862,75863],{"class":43,"line":8115},[41,75864,80],{"emptyLinePlaceholder":79},[41,75866,75867],{"class":43,"line":8121},[41,75868,75869],{"class":47},"    \u002F\u002F {n,}大于等于n次\n",[41,75871,75872,75874,75876,75878,75880,75882,75884,75887,75889,75891,75893,75895,75897,75899],{"class":43,"line":8148},[41,75873,73856],{"class":275},[41,75875,58350],{"class":54},[41,75877,276],{"class":275},[41,75879,857],{"class":378},[41,75881,1239],{"class":271},[41,75883,75341],{"class":48080},[41,75885,75886],{"class":271},"{4,}$",[41,75888,857],{"class":378},[41,75890,831],{"class":275},[41,75892,75348],{"class":54},[41,75894,276],{"class":275},[41,75896,75855],{"class":378},[41,75898,75858],{"class":275},[41,75900,75359],{"class":47},[41,75902,75903,75905,75907,75909,75911,75913,75915,75917,75919,75921,75923,75925,75928,75930],{"class":43,"line":8153},[41,75904,73856],{"class":275},[41,75906,58350],{"class":54},[41,75908,276],{"class":275},[41,75910,857],{"class":378},[41,75912,1239],{"class":271},[41,75914,75341],{"class":48080},[41,75916,75886],{"class":271},[41,75918,857],{"class":378},[41,75920,831],{"class":275},[41,75922,75348],{"class":54},[41,75924,276],{"class":275},[41,75926,75927],{"class":378},"'哈哈哈哈哈'",[41,75929,75858],{"class":275},[41,75931,75359],{"class":47},[41,75933,75934],{"class":43,"line":8159},[41,75935,80],{"emptyLinePlaceholder":79},[41,75937,75938],{"class":43,"line":8171},[41,75939,75940],{"class":47},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[41,75942,75943,75945,75947,75949,75951,75953,75955,75958,75960,75962,75964,75966,75968,75970],{"class":43,"line":8183},[41,75944,73856],{"class":275},[41,75946,58350],{"class":54},[41,75948,276],{"class":275},[41,75950,857],{"class":378},[41,75952,1239],{"class":271},[41,75954,75341],{"class":48080},[41,75956,75957],{"class":271},"{4,6}$",[41,75959,857],{"class":378},[41,75961,831],{"class":275},[41,75963,75348],{"class":54},[41,75965,276],{"class":275},[41,75967,75855],{"class":378},[41,75969,75858],{"class":275},[41,75971,75359],{"class":47},[41,75973,75974,75976,75978,75980,75982,75984,75986,75988,75990,75992,75994,75996,75998,76000],{"class":43,"line":8195},[41,75975,73856],{"class":275},[41,75977,58350],{"class":54},[41,75979,276],{"class":275},[41,75981,857],{"class":378},[41,75983,1239],{"class":271},[41,75985,75341],{"class":48080},[41,75987,75957],{"class":271},[41,75989,857],{"class":378},[41,75991,831],{"class":275},[41,75993,75348],{"class":54},[41,75995,276],{"class":275},[41,75997,75927],{"class":378},[41,75999,75858],{"class":275},[41,76001,75359],{"class":47},[41,76003,76004,76006,76008,76010,76012,76014,76016,76018,76020,76022,76024,76026,76029,76031],{"class":43,"line":9854},[41,76005,73856],{"class":275},[41,76007,58350],{"class":54},[41,76009,276],{"class":275},[41,76011,857],{"class":378},[41,76013,1239],{"class":271},[41,76015,75341],{"class":48080},[41,76017,75957],{"class":271},[41,76019,857],{"class":378},[41,76021,831],{"class":275},[41,76023,75348],{"class":54},[41,76025,276],{"class":275},[41,76027,76028],{"class":378},"'哈哈哈哈哈哈哈'",[41,76030,75858],{"class":275},[41,76032,75482],{"class":47},[41,76034,76035],{"class":43,"line":9879},[41,76036,80],{"emptyLinePlaceholder":79},[41,76038,76039],{"class":43,"line":9902},[41,76040,76041],{"class":47},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[41,76043,76044,76046,76048,76050,76052,76054,76057,76059,76061,76063,76065,76067,76070,76072],{"class":43,"line":9926},[41,76045,73856],{"class":275},[41,76047,58350],{"class":54},[41,76049,276],{"class":275},[41,76051,857],{"class":378},[41,76053,1239],{"class":271},[41,76055,76056],{"class":58},"[abc]",[41,76058,575],{"class":271},[41,76060,857],{"class":378},[41,76062,831],{"class":275},[41,76064,75348],{"class":54},[41,76066,276],{"class":275},[41,76068,76069],{"class":378},"'a'",[41,76071,75356],{"class":275},[41,76073,75359],{"class":47},[41,76075,76076,76078,76080,76082,76084,76086,76088,76090,76092,76094,76096,76098,76101,76103],{"class":43,"line":9931},[41,76077,73856],{"class":275},[41,76079,58350],{"class":54},[41,76081,276],{"class":275},[41,76083,857],{"class":378},[41,76085,1239],{"class":271},[41,76087,76056],{"class":58},[41,76089,575],{"class":271},[41,76091,857],{"class":378},[41,76093,831],{"class":275},[41,76095,75348],{"class":54},[41,76097,276],{"class":275},[41,76099,76100],{"class":378},"'b'",[41,76102,75356],{"class":275},[41,76104,75359],{"class":47},[41,76106,76107,76109,76111,76113,76115,76117,76119,76121,76123,76125,76127,76129,76132,76134],{"class":43,"line":9936},[41,76108,73856],{"class":275},[41,76110,58350],{"class":54},[41,76112,276],{"class":275},[41,76114,857],{"class":378},[41,76116,1239],{"class":271},[41,76118,76056],{"class":58},[41,76120,575],{"class":271},[41,76122,857],{"class":378},[41,76124,831],{"class":275},[41,76126,75348],{"class":54},[41,76128,276],{"class":275},[41,76130,76131],{"class":378},"'c'",[41,76133,75356],{"class":275},[41,76135,75359],{"class":47},[41,76137,76138,76140,76142,76144,76146,76148,76150,76152,76154,76156,76159,76161],{"class":43,"line":9941},[41,76139,73856],{"class":275},[41,76141,58350],{"class":54},[41,76143,276],{"class":275},[41,76145,857],{"class":378},[41,76147,76056],{"class":58},[41,76149,857],{"class":378},[41,76151,831],{"class":275},[41,76153,75348],{"class":54},[41,76155,276],{"class":275},[41,76157,76158],{"class":378},"'ab'",[41,76160,75356],{"class":275},[41,76162,75359],{"class":47},[41,76164,76165,76167,76169,76171,76173,76175,76177,76179,76181,76183,76185,76187,76189,76191],{"class":43,"line":9950},[41,76166,73856],{"class":275},[41,76168,58350],{"class":54},[41,76170,276],{"class":275},[41,76172,857],{"class":378},[41,76174,1239],{"class":271},[41,76176,76056],{"class":58},[41,76178,575],{"class":271},[41,76180,857],{"class":378},[41,76182,831],{"class":275},[41,76184,75348],{"class":54},[41,76186,276],{"class":275},[41,76188,76158],{"class":378},[41,76190,75356],{"class":275},[41,76192,76193],{"class":47},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[41,76195,76196,76198,76200,76202,76204,76206,76208,76211,76213,76215,76217,76219,76221,76223],{"class":43,"line":9955},[41,76197,73856],{"class":275},[41,76199,58350],{"class":54},[41,76201,276],{"class":275},[41,76203,857],{"class":378},[41,76205,1239],{"class":271},[41,76207,76056],{"class":58},[41,76209,76210],{"class":271},"{2}$",[41,76212,857],{"class":378},[41,76214,831],{"class":275},[41,76216,75348],{"class":54},[41,76218,276],{"class":275},[41,76220,76158],{"class":378},[41,76222,75356],{"class":275},[41,76224,76225],{"class":47},"\u002F\u002Ftrue   可以选两个\n",[41,76227,76228,76230,76232,76234,76236,76238,76241,76243,76245,76247,76249,76251,76254,76256],{"class":43,"line":9961},[41,76229,73856],{"class":275},[41,76231,58350],{"class":54},[41,76233,276],{"class":275},[41,76235,857],{"class":378},[41,76237,1239],{"class":271},[41,76239,76240],{"class":58},"[a-z]",[41,76242,575],{"class":271},[41,76244,857],{"class":378},[41,76246,831],{"class":275},[41,76248,75348],{"class":54},[41,76250,276],{"class":275},[41,76252,76253],{"class":378},"'p'",[41,76255,75412],{"class":275},[41,76257,76258],{"class":47},"\u002F\u002Ftrue   依然只能选一个\n",[41,76260,76261,76263,76265,76267,76269,76271,76274,76276,76278,76280,76282,76284,76286,76288],{"class":43,"line":9982},[41,76262,73856],{"class":275},[41,76264,58350],{"class":54},[41,76266,276],{"class":275},[41,76268,857],{"class":378},[41,76270,1239],{"class":271},[41,76272,76273],{"class":58},"[A-Z]",[41,76275,575],{"class":271},[41,76277,857],{"class":378},[41,76279,831],{"class":275},[41,76281,75348],{"class":54},[41,76283,276],{"class":275},[41,76285,76253],{"class":378},[41,76287,75412],{"class":275},[41,76289,75482],{"class":47},[41,76291,76292,76294,76296,76298,76300,76302,76304,76306,76308,76310,76312,76314,76317,76319],{"class":43,"line":9988},[41,76293,73856],{"class":275},[41,76295,58350],{"class":54},[41,76297,276],{"class":275},[41,76299,857],{"class":378},[41,76301,1239],{"class":271},[41,76303,76273],{"class":58},[41,76305,575],{"class":271},[41,76307,857],{"class":378},[41,76309,831],{"class":275},[41,76311,75348],{"class":54},[41,76313,276],{"class":275},[41,76315,76316],{"class":378},"'P'",[41,76318,75412],{"class":275},[41,76320,75359],{"class":47},[41,76322,76323,76325,76327,76329,76331,76333,76336,76338,76340,76342,76344,76346,76349,76351],{"class":43,"line":10002},[41,76324,73856],{"class":275},[41,76326,58350],{"class":54},[41,76328,276],{"class":275},[41,76330,857],{"class":378},[41,76332,1239],{"class":271},[41,76334,76335],{"class":58},"[0-9]",[41,76337,575],{"class":271},[41,76339,857],{"class":378},[41,76341,831],{"class":275},[41,76343,75348],{"class":54},[41,76345,276],{"class":275},[41,76347,76348],{"class":378},"'0'",[41,76350,75412],{"class":275},[41,76352,75359],{"class":47},[41,76354,76355,76357,76359,76361,76363,76365,76368,76370,76372,76374,76376,76378,76380,76382],{"class":43,"line":10008},[41,76356,73856],{"class":275},[41,76358,58350],{"class":54},[41,76360,276],{"class":275},[41,76362,857],{"class":378},[41,76364,1239],{"class":271},[41,76366,76367],{"class":58},"[a-zA-Z0-9]",[41,76369,575],{"class":271},[41,76371,857],{"class":378},[41,76373,831],{"class":275},[41,76375,75348],{"class":54},[41,76377,276],{"class":275},[41,76379,76253],{"class":378},[41,76381,75356],{"class":275},[41,76383,75359],{"class":47},[41,76385,76386,76388,76390],{"class":43,"line":10035},[41,76387,52520],{"class":275},[41,76389,51916],{"class":51403},[41,76391,51410],{"class":275},[41,76393,76394,76396,76398],{"class":43,"line":10044},[41,76395,51888],{"class":275},[41,76397,51903],{"class":51403},[41,76399,51410],{"class":275},[41,76401,76402],{"class":43,"line":10050},[41,76403,80],{"emptyLinePlaceholder":79},[41,76405,76406,76408,76410],{"class":43,"line":10058},[41,76407,51888],{"class":275},[41,76409,50738],{"class":51403},[41,76411,51410],{"class":275},[22136,76413,76415],{"id":76414},"_3624-修饰符","3.6.2.4 修饰符",[20,76417,76418],{},[1603,76419],{"alt":37,"src":76420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[20,76422,76423],{},"replace是个方法，使用的时候一定不要忘记括号()",[20,76425,76426],{},[1603,76427],{"alt":37,"src":76428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[32,76430,76432],{"className":50736,"code":76431,"language":50738,"meta":37,"style":37},"\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",[24,76433,76434,76444,76458,76466,76480,76500,76512,76520,76528,76536,76568,76599,76604,76636,76647,76680,76689,76697,76705],{"__ignoreMap":37},[41,76435,76436,76438,76440,76442],{"class":43,"line":44},[41,76437,51400],{"class":275},[41,76439,51404],{"class":51403},[41,76441,51407],{"class":54},[41,76443,51410],{"class":275},[41,76445,76446,76448,76450,76452,76454,76456],{"class":43,"line":51},[41,76447,1183],{"class":275},[41,76449,50738],{"class":51403},[41,76451,51419],{"class":54},[41,76453,321],{"class":275},[41,76455,51424],{"class":378},[41,76457,51410],{"class":275},[41,76459,76460,76462,76464],{"class":43,"line":62},[41,76461,1183],{"class":275},[41,76463,51437],{"class":51403},[41,76465,51410],{"class":275},[41,76467,76468,76470,76472,76474,76476,76478],{"class":43,"line":70},[41,76469,52247],{"class":275},[41,76471,51447],{"class":51403},[41,76473,51450],{"class":54},[41,76475,321],{"class":275},[41,76477,51455],{"class":378},[41,76479,51410],{"class":275},[41,76481,76482,76484,76486,76488,76490,76492,76494,76496,76498],{"class":43,"line":76},[41,76483,52247],{"class":275},[41,76485,51447],{"class":51403},[41,76487,15058],{"class":54},[41,76489,321],{"class":275},[41,76491,51494],{"class":378},[41,76493,51474],{"class":54},[41,76495,321],{"class":275},[41,76497,51501],{"class":378},[41,76499,51410],{"class":275},[41,76501,76502,76504,76506,76508,76510],{"class":43,"line":83},[41,76503,52247],{"class":275},[41,76505,51510],{"class":51403},[41,76507,51513],{"class":275},[41,76509,51510],{"class":51403},[41,76511,51410],{"class":275},[41,76513,76514,76516,76518],{"class":43,"line":89},[41,76515,51888],{"class":275},[41,76517,51437],{"class":51403},[41,76519,51410],{"class":275},[41,76521,76522,76524,76526],{"class":43,"line":96},[41,76523,1183],{"class":275},[41,76525,51903],{"class":51403},[41,76527,51410],{"class":275},[41,76529,76530,76532,76534],{"class":43,"line":104},[41,76531,52247],{"class":275},[41,76533,51916],{"class":51403},[41,76535,51410],{"class":275},[41,76537,76538,76540,76542,76544,76546,76548,76551,76553,76555,76557,76559,76561,76564,76566],{"class":43,"line":176},[41,76539,73856],{"class":275},[41,76541,58350],{"class":54},[41,76543,276],{"class":275},[41,76545,857],{"class":378},[41,76547,1239],{"class":271},[41,76549,76550],{"class":48080},"java",[41,76552,575],{"class":271},[41,76554,857],{"class":378},[41,76556,831],{"class":275},[41,76558,75348],{"class":54},[41,76560,276],{"class":275},[41,76562,76563],{"class":378},"'java'",[41,76565,75858],{"class":275},[41,76567,75359],{"class":47},[41,76569,76570,76572,76574,76576,76578,76580,76582,76584,76586,76588,76590,76592,76595,76597],{"class":43,"line":184},[41,76571,73856],{"class":275},[41,76573,58350],{"class":54},[41,76575,276],{"class":275},[41,76577,857],{"class":378},[41,76579,1239],{"class":271},[41,76581,76550],{"class":48080},[41,76583,575],{"class":271},[41,76585,857],{"class":378},[41,76587,831],{"class":275},[41,76589,75348],{"class":54},[41,76591,276],{"class":275},[41,76593,76594],{"class":378},"'Java'",[41,76596,75858],{"class":275},[41,76598,75482],{"class":47},[41,76600,76601],{"class":43,"line":1757},[41,76602,76603],{"class":47},"    \u002F\u002F 不区分大小写、\n",[41,76605,76606,76608,76610,76612,76614,76616,76618,76620,76622,76624,76626,76628,76630,76632,76634],{"class":43,"line":1763},[41,76607,73856],{"class":275},[41,76609,58350],{"class":54},[41,76611,276],{"class":275},[41,76613,857],{"class":378},[41,76615,1239],{"class":271},[41,76617,76550],{"class":48080},[41,76619,575],{"class":271},[41,76621,857],{"class":378},[41,76623,714],{"class":271},[41,76625,831],{"class":275},[41,76627,75348],{"class":54},[41,76629,276],{"class":275},[41,76631,76594],{"class":378},[41,76633,75858],{"class":275},[41,76635,75359],{"class":47},[41,76637,76638,76640,76642,76644],{"class":43,"line":1768},[41,76639,11359],{"class":271},[41,76641,74022],{"class":58},[41,76643,13702],{"class":271},[41,76645,76646],{"class":378}," 'java是一门编程语言，学完java工资很高'\n",[41,76648,76649,76651,76654,76656,76659,76662,76664,76666,76668,76670,76673,76675,76678],{"class":43,"line":1782},[41,76650,11359],{"class":271},[41,76652,76653],{"class":58}," result",[41,76655,13702],{"class":271},[41,76657,76658],{"class":275}," str.",[41,76660,76661],{"class":54},"replace",[41,76663,276],{"class":275},[41,76665,857],{"class":378},[41,76667,76550],{"class":48080},[41,76669,857],{"class":378},[41,76671,76672],{"class":271},"ig",[41,76674,12573],{"class":275},[41,76676,76677],{"class":378},"'前端'",[41,76679,282],{"class":275},[41,76681,76682,76684,76686],{"class":43,"line":1787},[41,76683,73856],{"class":275},[41,76685,58350],{"class":54},[41,76687,76688],{"class":275},"(result)\n",[41,76690,76691,76693,76695],{"class":43,"line":1793},[41,76692,52520],{"class":275},[41,76694,51916],{"class":51403},[41,76696,51410],{"class":275},[41,76698,76699,76701,76703],{"class":43,"line":1814},[41,76700,51888],{"class":275},[41,76702,51903],{"class":51403},[41,76704,51410],{"class":275},[41,76706,76707,76709,76711],{"class":43,"line":1819},[41,76708,51888],{"class":275},[41,76710,50738],{"class":51403},[41,76712,51410],{"class":275},[189,76714,76715],{},"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":37,"searchDepth":51,"depth":51,"links":76717},[76718,76728,76740,76757,76764,76772],{"id":53463,"depth":51,"text":53464,"children":76719},[76720,76721,76722,76723,76724,76725,76726,76727],{"id":53467,"depth":62,"text":53468},{"id":53500,"depth":62,"text":53501},{"id":53539,"depth":62,"text":53540},{"id":53697,"depth":62,"text":53698},{"id":53745,"depth":62,"text":53746},{"id":53882,"depth":62,"text":53883},{"id":54204,"depth":62,"text":54205},{"id":57192,"depth":62,"text":57193},{"id":57220,"depth":51,"text":57221,"children":76729},[76730,76731,76732,76733,76734,76735,76736,76737,76738,76739],{"id":57224,"depth":62,"text":57225},{"id":57247,"depth":62,"text":57248},{"id":58162,"depth":62,"text":58163},{"id":58852,"depth":62,"text":58853},{"id":59134,"depth":62,"text":59135},{"id":63295,"depth":62,"text":63296},{"id":63465,"depth":62,"text":63466},{"id":63593,"depth":62,"text":63594},{"id":63618,"depth":62,"text":63619},{"id":65007,"depth":62,"text":65008},{"id":66160,"depth":51,"text":66161,"children":76741},[76742,76743,76744,76745,76746,76747,76748,76749,76750,76751,76752,76753,76754,76755,76756],{"id":66164,"depth":62,"text":66165},{"id":66818,"depth":62,"text":66819},{"id":68513,"depth":62,"text":68514},{"id":68554,"depth":62,"text":68555},{"id":68596,"depth":62,"text":68597},{"id":68610,"depth":62,"text":68611},{"id":68659,"depth":62,"text":68660},{"id":68671,"depth":62,"text":68672},{"id":68686,"depth":62,"text":68687},{"id":68722,"depth":62,"text":68723},{"id":68803,"depth":62,"text":68804},{"id":68931,"depth":62,"text":68932},{"id":68943,"depth":62,"text":68944},{"id":68962,"depth":62,"text":68963},{"id":71073,"depth":62,"text":71074},{"id":71092,"depth":51,"text":71093,"children":76758},[76759,76760,76761,76762,76763],{"id":71113,"depth":62,"text":71114},{"id":71133,"depth":62,"text":71134},{"id":71182,"depth":62,"text":71183},{"id":71307,"depth":62,"text":71308},{"id":71488,"depth":62,"text":71489},{"id":71506,"depth":51,"text":71507,"children":76765},[76766,76767,76768,76769,76770,76771],{"id":71521,"depth":62,"text":71522},{"id":71580,"depth":62,"text":71581},{"id":71604,"depth":62,"text":71605},{"id":71924,"depth":62,"text":71925},{"id":71956,"depth":62,"text":71957},{"id":71979,"depth":62,"text":71980},{"id":75047,"depth":51,"text":75048,"children":76773},[76774,76775],{"id":75081,"depth":62,"text":75082},{"id":75120,"depth":62,"text":75121},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53435,"description":196},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76782,"title":76783,"body":76784,"description":196,"extension":197,"meta":92921,"navigation":79,"path":92922,"seo":92923,"stem":92924,"__hash__":92925},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76785,"toc":92857},[76786,76789,76792,76796,76800,76805,76810,76821,76825,76830,76833,76837,76840,76845,76849,76853,76856,76861,76864,76868,76871,76879,76882,76886,76891,76896,76899,76903,76908,76913,76916,76920,76925,76928,76933,76936,76941,76944,76949,76954,76957,76960,76964,76969,76974,76977,76981,76985,76988,76991,76994,76998,77002,77007,77012,77015,77019,77024,77029,77032,77035,77038,77041,77044,77047,77050,77053,77056,77061,77065,77070,77075,77078,77081,77084,77087,77090,77093,77096,77099,77103,77107,77110,77113,77116,77121,77123,77126,77129,77132,77135,77138,77141,77144,77147,77150,77153,77156,77159,77162,77167,77172,77177,77180,77184,77187,77192,77196,77198,77209,77214,77315,77318,77321,77324,77327,77330,77333,77336,77339,77341,77344,77347,77350,77353,77356,77358,77361,77364,77367,77370,77373,77376,77378,77381,77383,77385,77388,77392,77396,77399,77402,77405,77408,77411,77414,77417,77420,77423,77428,77548,77551,77554,77559,77562,77565,77568,77571,77576,77579,77582,77585,77588,77593,77596,77696,77761,77835,77839,77842,77845,77849,77852,77866,77895,77898,77901,77904,77907,77910,77913,77916,77918,77921,77924,77927,77930,77934,77939,77943,77948,78023,78026,78209,78212,78215,78218,78221,78224,78226,78229,78232,78235,78238,78241,78244,78246,78250,78253,78258,78261,78264,78267,78270,78272,78277,78280,78283,78286,78289,78291,78296,78299,78302,78304,78306,78309,78313,78316,78319,78324,78327,78330,78333,78383,78388,78392,78397,78400,78469,78472,78481,78485,78490,78493,78496,78504,78507,78524,80326,80330,80334,80339,80342,80346,80352,80358,80510,80515,80520,80523,80526,80529,80532,80535,80538,80541,80544,80547,80550,80553,80556,80561,80565,80568,80579,80583,80588,80591,80594,80597,80600,80603,80605,80608,80611,80614,80617,80619,80636,80639,80643,80646,80651,80656,80659,80662,80666,80669,80672,80681,80684,80688,80691,80696,80701,80768,80772,80775,80778,80783,80788,80874,80879,80883,80886,80889,80904,80907,80912,80916,80921,81030,81033,81044,81194,81198,81203,81312,81316,81321,81326,81331,81334,81341,81361,81397,81561,81566,81569,81574,81581,81584,81587,81590,81649,81705,81761,81765,81770,82085,82088,82092,82095,82100,82209,82214,82218,82223,82227,82298,82302,82304,82307,82310,82348,82624,82628,82645,82711,82745,82749,82752,82757,82786,82793,82802,82807,82822,82827,82836,82839,82976,82980,83042,83046,83051,83296,83300,83305,83308,83311,83314,83317,83321,83326,84907,84911,84915,84921,84924,84929,84933,84936,84941,84944,84955,84959,84964,84968,84973,84978,84981,84986,84990,84994,84997,85002,85007,85010,85013,85016,85138,85143,85245,85248,85251,85255,85260,85432,85437,85441,85444,85449,85515,85520,85523,85654,85657,85662,85665,85668,85759,85764,85767,85770,85773,85776,85781,85786,85789,85794,85799,85804,85808,85811,85814,85819,85824,85829,85834,85888,85891,85894,85899,85902,85905,85910,85915,85920,85924,85929,85943,85948,85951,85956,85960,85965,85970,85975,85980,85985,85990,85995,86000,86003,86007,86012,86015,86018,86021,86026,86031,86034,86037,86041,86044,86047,86052,86057,86062,86067,86070,86075,86080,86141,86146,86149,86154,87395,87400,87404,87408,87413,87416,87421,87426,87429,87434,87436,87441,87445,87448,87451,87462,87466,87471,87476,87531,87536,87541,87546,87757,87762,87766,87771,87774,87776,87779,87782,88229,88234,88241,88247,88250,88253,88517,88522,88526,88791,88796,88800,88805,88810,88815,88820,89151,89154,89159,89164,89167,89171,89175,89180,89185,89190,89195,89200,89205,89209,89212,89217,89222,89225,89299,89304,89309,89314,89316,89319,89689,89694,89699,89704,89707,89710,89812,89817,89822,89925,89929,89934,89938,89942,89947,89952,89955,89960,89963,89966,90359,90364,90367,90370,90373,90376,90896,90900,90905,90910,90915,90918,90923,90926,90929,91311,91316,91318,91320,91323,91326,91838,91842,91903,91906,91909,91912,91916,91919,91924,91929,92854],[10,76787,76783],{"id":76788},"_4js进阶",[20,76790,76791],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[15,76793,76795],{"id":76794},"_41-作用域","4.1 作用域",[241,76797,76799],{"id":76798},"_411-局部作用域","4.1.1 局部作用域",[20,76801,76802],{},[1603,76803],{"alt":37,"src":76804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[20,76806,76807],{},[1603,76808],{"alt":37,"src":76809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1280,76811,76812,76815,76818],{},[227,76813,76814],{},"函数作用域在函数内部",[227,76816,76817],{},"块级作用域在{}",[227,76819,76820],{},"对象的那个{}不是作用域，不是块作用域",[241,76822,76824],{"id":76823},"_412-全局作用域","4.1.2 全局作用域",[20,76826,76827],{},[1603,76828],{"alt":37,"src":76829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[20,76831,76832],{},"window.a=10不要这样写",[241,76834,76836],{"id":76835},"_413-作用域链","4.1.3 作用域链",[20,76838,76839],{},"变量查找机制",[20,76841,76842],{},[1603,76843],{"alt":37,"src":76844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[15,76846,76848],{"id":76847},"_42-垃圾回收机制","4.2 垃圾回收机制",[241,76850,76852],{"id":76851},"_421-大体介绍","4.2.1 大体介绍",[20,76854,76855],{},"垃圾回收机制(Garbage Collection) 简称 GC",[20,76857,76858],{},[1603,76859],{"alt":37,"src":76860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[20,76862,76863],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[241,76865,76867],{"id":76866},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[20,76869,76870],{},"堆栈空间分配区别：",[224,76872,76873,76876],{},[227,76874,76875],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[227,76877,76878],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[20,76880,76881],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22136,76883,76885],{"id":76884},"_4221-引用计数","4.2.2.1 引用计数",[20,76887,76888],{},[1603,76889],{"alt":37,"src":76890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[20,76892,76893],{},[1603,76894],{"alt":37,"src":76895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[20,76897,76898],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22136,76900,76902],{"id":76901},"_4222-标记清除法","4.2.2.2 标记清除法",[20,76904,76905],{},[1603,76906],{"alt":37,"src":76907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[20,76909,76910],{},[1603,76911],{"alt":37,"src":76912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[20,76914,76915],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[15,76917,76919],{"id":76918},"_43-闭包","4.3 闭包",[20,76921,76922],{},[1603,76923],{"alt":37,"src":76924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[20,76926,76927],{},"闭包：内层函数+外层函数的变量",[20,76929,76930],{},[1603,76931],{"alt":37,"src":76932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[20,76934,76935],{},"closure就是闭包",[20,76937,76938],{},[1603,76939],{"alt":37,"src":76940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[20,76942,76943],{},"内层函数必须包含外层函数的变量才是闭包",[20,76945,76946],{},[1603,76947],{"alt":37,"src":76948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[20,76950,76951],{},[1603,76952],{"alt":37,"src":76953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[20,76955,76956],{},"闭包可能会引起内存泄漏",[20,76958,76959],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[15,76961,76963],{"id":76962},"_44-变量提升","4.4 变量提升",[20,76965,76966],{},[1603,76967],{"alt":37,"src":76968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[20,76970,76971],{},[1603,76972],{"alt":37,"src":76973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[20,76975,76976],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[15,76978,76980],{"id":76979},"_45-函数进阶","4.5 函数进阶",[241,76982,76984],{"id":76983},"_451-函数提升","4.5.1 函数提升",[20,76986,76987],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[20,76989,76990],{},"只提升函数声明，不提升函数调用",[51916,76992,76993],{},"\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",[241,76995,76997],{"id":76996},"_452-函数参数","4.5.2 函数参数",[22136,76999,77001],{"id":77000},"_4521-动态参数","4.5.2.1 动态参数",[20,77003,77004],{},[1603,77005],{"alt":37,"src":77006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[20,77008,77009],{},[1603,77010],{"alt":37,"src":77011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[20,77013,77014],{},"箭头函数里边没有arguments",[22136,77016,77018],{"id":77017},"_4522-剩余参数","4.5.2.2 剩余参数",[20,77020,77021],{},[1603,77022],{"alt":37,"src":77023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[20,77025,77026],{},[1603,77027],{"alt":37,"src":77028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[20,77030,77031],{},"剩余参数使用的时候不需要写...",[20,77033,77034],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[20,77036,77037],{},"  function getSum(a,b,...arr) {",[20,77039,77040],{},"  console.log(11)",[20,77042,77043],{},"  }",[20,77045,77046],{},"  getSum(1,2,3,4)",[20,77048,77049],{},"  将1传给a，2传给b，剩下的传给剩余参数",[20,77051,77052],{},"  getSum(1,2)",[20,77054,77055],{},"  将1传给a，2传给b，剩余参数为一个空数组",[20,77057,77058],{},[1603,77059],{"alt":37,"src":77060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22136,77062,77064],{"id":77063},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[20,77066,77067],{},[1603,77068],{"alt":37,"src":77069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[20,77071,77072],{},[1603,77073],{"alt":37,"src":77074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[20,77076,77077],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[20,77079,77080],{},"展开运算符可以用于数组之间的合并：",[20,77082,77083],{},"const arr1 = [1, 2, 3]",[20,77085,77086],{},"const arr2 = [3, 4, 5]",[20,77088,77089],{},"const arr = [...arr1, ...arr2]",[20,77091,77092],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[20,77094,77095],{},"剩余参数：函数参数使用，得到真数组",[20,77097,77098],{},"展开运算符：数组中使用，数组展开",[241,77100,77102],{"id":77101},"_453-箭头函数","4.5.3 箭头函数",[22136,77104,77106],{"id":77105},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[20,77108,77109],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[20,77111,77112],{},"它不是万能的！！！",[20,77114,77115],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[20,77117,77118],{},[1603,77119],{"alt":37,"src":77120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[20,77122,305],{},[20,77124,77125],{},"① 只有一个形参的时候，可以省略小括号：",[20,77127,77128],{},"const fn=x=>{console.log(x)}",[20,77130,77131],{},"② 只有一行代码时可以省略大括号：",[20,77133,77134],{},"const fn=x=>console.log(11)",[20,77136,77137],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[20,77139,77140],{},"const fn=x=>x+x",[20,77142,77143],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[20,77145,77146],{},"⑤ 阻止表单默认提交：",[20,77148,77149],{},"const form = document.querySelector('form')",[20,77151,77152],{},"form.addEventListener('click', ev => ev.preventDefault())",[20,77154,77155],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[20,77157,77158],{},"const fn=uname=>({uname:uname})",[20,77160,77161],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[20,77163,77164],{},[1603,77165],{"alt":37,"src":77166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[20,77168,77169],{},[1603,77170],{"alt":37,"src":77171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[20,77173,77174],{},[1603,77175],{"alt":37,"src":77176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[20,77178,77179],{},"一定不要忘记用()，有()就理解为自带return",[22136,77181,77183],{"id":77182},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[20,77185,77186],{},"箭头函数是没有动态参数的arguments",[20,77188,77189],{},[1603,77190],{"alt":37,"src":77191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22136,77193,77195],{"id":77194},"_4533-箭头函数this","4.5.3.3 箭头函数this",[20,77197,11470],{},[224,77199,77200,77203,77206],{},[227,77201,77202],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[227,77204,77205],{},"事件回调函数使用箭头函数时，this 为全局的 window",[227,77207,77208],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[20,77210,77211],{},[1603,77212],{"alt":37,"src":77213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[32,77215,77217],{"className":53170,"code":77216,"language":53172,"meta":37,"style":37},"  \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",[24,77218,77219,77227,77232,77237,77242,77247,77252,77256,77261,77265,77269,77274,77279,77284,77288,77292,77297,77302,77307],{"__ignoreMap":37},[41,77220,77221,77223,77225],{"class":43,"line":44},[41,77222,52247],{"class":275},[41,77224,51916],{"class":51403},[41,77226,51410],{"class":275},[41,77228,77229],{"class":43,"line":51},[41,77230,77231],{"class":275},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[41,77233,77234],{"class":43,"line":62},[41,77235,77236],{"class":275},"    console.log(this) \u002F\u002F指向window\n",[41,77238,77239],{"class":43,"line":70},[41,77240,77241],{"class":275},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[41,77243,77244],{"class":43,"line":76},[41,77245,77246],{"class":275},"    function fn() {\n",[41,77248,77249],{"class":43,"line":83},[41,77250,77251],{"class":275},"      console.log(this)  \u002F\u002F指向window\n",[41,77253,77254],{"class":43,"line":89},[41,77255,2326],{"class":275},[41,77257,77258],{"class":43,"line":96},[41,77259,77260],{"class":275},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[41,77262,77263],{"class":43,"line":104},[41,77264,80],{"emptyLinePlaceholder":79},[41,77266,77267],{"class":43,"line":176},[41,77268,71626],{"class":275},[41,77270,77271],{"class":43,"line":184},[41,77272,77273],{"class":275},"      name: 'andy',\n",[41,77275,77276],{"class":43,"line":1757},[41,77277,77278],{"class":275},"      sayHai: function () {\n",[41,77280,77281],{"class":43,"line":1763},[41,77282,77283],{"class":275},"        console.log(this)\n",[41,77285,77286],{"class":43,"line":1768},[41,77287,52501],{"class":275},[41,77289,77290],{"class":43,"line":1782},[41,77291,2326],{"class":275},[41,77293,77294],{"class":43,"line":1787},[41,77295,77296],{"class":275},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[41,77298,77299],{"class":43,"line":1793},[41,77300,77301],{"class":275},"    \u002F\u002F 2.箭头函数的this\n",[41,77303,77304],{"class":43,"line":1814},[41,77305,77306],{"class":275},"    const fn = () => console.log(this)\n",[41,77308,77309,77311,77313],{"class":43,"line":1819},[41,77310,52520],{"class":275},[41,77312,51916],{"class":51403},[41,77314,51410],{"class":275},[20,77316,77317],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[20,77319,77320],{},"const fn = () => console.log(this)",[20,77322,77323],{},"fn() \u002F\u002F指向window",[20,77325,77326],{},"\u002F\u002F 3.对象方法箭头函数 this",[20,77328,77329],{},"①",[20,77331,77332],{},"const obj = {",[20,77334,77335],{},"uname: 'pink老师',",[20,77337,77338],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[20,77340,1219],{},[20,77342,77343],{},"调用对象里边的函数",[20,77345,77346],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[20,77348,77349],{},"obj.sayHai()",[20,77351,77352],{},"②",[20,77354,77355],{},"const obj1 = {",[20,77357,77335],{},[20,77359,77360],{},"sayHai: function () {",[20,77362,77363],{},"let i = 10",[20,77365,77366],{},"const count = () => {",[20,77368,77369],{},"console.log(this)",[20,77371,77372],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[20,77374,77375],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[20,77377,1219],{},[20,77379,77380],{},"count()",[20,77382,1219],{},[20,77384,1219],{},[20,77386,77387],{},"obj1.sayHai()",[15,77389,77391],{"id":77390},"_46-解构赋值","4.6 解构赋值",[241,77393,77395],{"id":77394},"_461-数组解构","4.6.1 数组解构",[20,77397,77398],{},"以前要是使用数组中的值的话：",[20,77400,77401],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[20,77403,77404],{},"const arr=[100,60,80]",[20,77406,77407],{},"const max=arr[0]",[20,77409,77410],{},"const min=arr[1]",[20,77412,77413],{},"const avg=arr[2]",[20,77415,77416],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[20,77418,77419],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[20,77421,77422],{},"这个写法就类似于上边的那种用很多const的方法",[20,77424,77425],{},[1603,77426],{"alt":37,"src":77427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[32,77429,77431],{"className":50736,"code":77430,"language":50738,"meta":37,"style":37},"①变量之间交换值:\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",[24,77432,77433,77438,77443,77448,77453,77458,77462,77466,77471,77475,77480,77485,77489,77494,77499,77510,77520,77525,77530,77535,77539,77543],{"__ignoreMap":37},[41,77434,77435],{"class":43,"line":44},[41,77436,77437],{"class":275},"①变量之间交换值:\n",[41,77439,77440],{"class":43,"line":51},[41,77441,77442],{"class":275},"let a=1\n",[41,77444,77445],{"class":43,"line":62},[41,77446,77447],{"class":275},"let b=2;\n",[41,77449,77450],{"class":43,"line":70},[41,77451,77452],{"class":275},"必须加这行代码，不然就会报错\n",[41,77454,77455],{"class":43,"line":76},[41,77456,77457],{"class":275},"[b,a]=[a,b]\n",[41,77459,77460],{"class":43,"line":83},[41,77461,80],{"emptyLinePlaceholder":79},[41,77463,77464],{"class":43,"line":89},[41,77465,80],{"emptyLinePlaceholder":79},[41,77467,77468],{"class":43,"line":96},[41,77469,77470],{"class":275},"可以写成下面的方式：\n",[41,77472,77473],{"class":43,"line":104},[41,77474,77442],{"class":275},[41,77476,77477],{"class":43,"line":176},[41,77478,77479],{"class":275},"let b=2\n",[41,77481,77482],{"class":43,"line":184},[41,77483,77484],{"class":275},";[b,a]=[a,b]\n",[41,77486,77487],{"class":43,"line":1757},[41,77488,80],{"emptyLinePlaceholder":79},[41,77490,77491],{"class":43,"line":1763},[41,77492,77493],{"class":275},"②排序\n",[41,77495,77496],{"class":43,"line":1768},[41,77497,77498],{"class":275},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[41,77500,77501,77504,77507],{"class":43,"line":1782},[41,77502,77503],{"class":275},"for (let i = 0; i ",[41,77505,1183],{"class":77506},"s7hpK",[41,77508,77509],{"class":275}," arr1.length; i++) {\n",[41,77511,77512,77515,77517],{"class":43,"line":1787},[41,77513,77514],{"class":275},"   for (let j = 0; j ",[41,77516,1183],{"class":77506},[41,77518,77519],{"class":275}," arr1.length - 1; j++) {\n",[41,77521,77522],{"class":43,"line":1793},[41,77523,77524],{"class":275},"      if (arr1[j] > arr1[j + 1]) {\n",[41,77526,77527],{"class":43,"line":1814},[41,77528,77529],{"class":275},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[41,77531,77532],{"class":43,"line":1819},[41,77533,77534],{"class":275},"       }\n",[41,77536,77537],{"class":43,"line":1833},[41,77538,4447],{"class":275},[41,77540,77541],{"class":43,"line":1838},[41,77542,1706],{"class":275},[41,77544,77545],{"class":43,"line":1867},[41,77546,77547],{"class":275},"console.log(arr1)\n",[20,77549,77550],{},"数组解构的细节：",[20,77552,77553],{},"①变量多，单元值少",[20,77555,77556],{},[1603,77557],{"alt":37,"src":77558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[20,77560,77561],{},"防止出现undefined的方法：",[20,77563,77564],{},"const [a=0,b=0] =[1]",[20,77566,77567],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[20,77569,77570],{},"②变量少，单元值多",[20,77572,77573],{},[1603,77574],{"alt":37,"src":77575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[20,77577,77578],{},"此时可以使用剩余参数来接收多余的值",[20,77580,77581],{},"const [a,b,...c]=[1,2,3,4]",[20,77583,77584],{},"console.log(c) 输出[3,4]",[20,77586,77587],{},"③可以按需导入，忽略某些返回值",[20,77589,77590],{},[1603,77591],{"alt":37,"src":77592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[20,77594,77595],{},"④支持多维数组的结构",[32,77597,77601],{"className":77598,"code":77599,"language":77600,"meta":37,"style":37},"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",[24,77602,77603,77631,77647,77662,77677],{"__ignoreMap":37},[41,77604,77605,77607,77609,77611,77613,77615,77617,77619,77622,77624,77626,77628],{"class":43,"line":44},[41,77606,6930],{"class":271},[41,77608,51936],{"class":275},[41,77610,321],{"class":271},[41,77612,52329],{"class":275},[41,77614,26],{"class":58},[41,77616,12573],{"class":275},[41,77618,351],{"class":58},[41,77620,77621],{"class":275},", [",[41,77623,345],{"class":58},[41,77625,12573],{"class":275},[41,77627,566],{"class":58},[41,77629,77630],{"class":275},"]]\n",[41,77632,77633,77636,77638,77640,77642,77644],{"class":43,"line":51},[41,77634,77635],{"class":275},"console.",[41,77637,58350],{"class":54},[41,77639,3989],{"class":275},[41,77641,465],{"class":58},[41,77643,4354],{"class":275},[41,77645,77646],{"class":47},"  \u002F\u002F1\n",[41,77648,77649,77651,77653,77655,77657,77659],{"class":43,"line":62},[41,77650,77635],{"class":275},[41,77652,58350],{"class":54},[41,77654,3989],{"class":275},[41,77656,26],{"class":58},[41,77658,4354],{"class":275},[41,77660,77661],{"class":47},"  \u002F\u002F2\n",[41,77663,77664,77666,77668,77670,77672,77674],{"class":43,"line":70},[41,77665,77635],{"class":275},[41,77667,58350],{"class":54},[41,77669,3989],{"class":275},[41,77671,351],{"class":58},[41,77673,4354],{"class":275},[41,77675,77676],{"class":47},"  \u002F\u002F[3,4]\n",[41,77678,77679,77681,77683,77685,77687,77689,77691,77693],{"class":43,"line":76},[41,77680,77635],{"class":275},[41,77682,58350],{"class":54},[41,77684,3989],{"class":275},[41,77686,351],{"class":58},[41,77688,5039],{"class":275},[41,77690,465],{"class":58},[41,77692,4354],{"class":275},[41,77694,77695],{"class":47},"  \u002F\u002F3\n",[32,77697,77699],{"className":77598,"code":77698,"language":77600,"meta":37,"style":37},"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",[24,77700,77701,77728,77739,77750],{"__ignoreMap":37},[41,77702,77703,77705,77708,77710,77712,77714,77716,77718,77720,77722,77724,77726],{"class":43,"line":44},[41,77704,6930],{"class":271},[41,77706,77707],{"class":275}," [a, b, c] ",[41,77709,321],{"class":271},[41,77711,52329],{"class":275},[41,77713,26],{"class":58},[41,77715,12573],{"class":275},[41,77717,351],{"class":58},[41,77719,77621],{"class":275},[41,77721,345],{"class":58},[41,77723,12573],{"class":275},[41,77725,566],{"class":58},[41,77727,77630],{"class":275},[41,77729,77730,77732,77734,77737],{"class":43,"line":51},[41,77731,77635],{"class":275},[41,77733,58350],{"class":54},[41,77735,77736],{"class":275},"(a)",[41,77738,77646],{"class":47},[41,77740,77741,77743,77745,77748],{"class":43,"line":62},[41,77742,77635],{"class":275},[41,77744,58350],{"class":54},[41,77746,77747],{"class":275},"(b)",[41,77749,77661],{"class":47},[41,77751,77752,77754,77756,77759],{"class":43,"line":70},[41,77753,77635],{"class":275},[41,77755,58350],{"class":54},[41,77757,77758],{"class":275},"(c)",[41,77760,77676],{"class":47},[32,77762,77764],{"className":77598,"code":77763,"language":77600,"meta":37,"style":37},"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",[24,77765,77766,77793,77803,77813,77823],{"__ignoreMap":37},[41,77767,77768,77770,77773,77775,77777,77779,77781,77783,77785,77787,77789,77791],{"class":43,"line":44},[41,77769,6930],{"class":271},[41,77771,77772],{"class":275}," [a, b, [c, d]] ",[41,77774,321],{"class":271},[41,77776,52329],{"class":275},[41,77778,26],{"class":58},[41,77780,12573],{"class":275},[41,77782,351],{"class":58},[41,77784,77621],{"class":275},[41,77786,345],{"class":58},[41,77788,12573],{"class":275},[41,77790,566],{"class":58},[41,77792,77630],{"class":275},[41,77794,77795,77797,77799,77801],{"class":43,"line":51},[41,77796,77635],{"class":275},[41,77798,58350],{"class":54},[41,77800,77736],{"class":275},[41,77802,77646],{"class":47},[41,77804,77805,77807,77809,77811],{"class":43,"line":62},[41,77806,77635],{"class":275},[41,77808,58350],{"class":54},[41,77810,77747],{"class":275},[41,77812,77661],{"class":47},[41,77814,77815,77817,77819,77821],{"class":43,"line":70},[41,77816,77635],{"class":275},[41,77818,58350],{"class":54},[41,77820,77758],{"class":275},[41,77822,77695],{"class":47},[41,77824,77825,77827,77829,77832],{"class":43,"line":76},[41,77826,77635],{"class":275},[41,77828,58350],{"class":54},[41,77830,77831],{"class":275},"(d)",[41,77833,77834],{"class":47},"  \u002F\u002F4\n",[241,77836,77838],{"id":77837},"_462-对象解构","4.6.2 对象解构",[20,77840,77841],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[20,77843,77844],{},"用的非常非常多！！！！！！",[22136,77846,77848],{"id":77847},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[20,77850,77851],{},"基本语法：",[224,77853,77854,77857,77860,77863],{},[227,77855,77856],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[227,77858,77859],{},"对象属性的值将被赋值给与属性名相同的变量",[227,77861,77862],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[227,77864,77865],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[32,77867,77869],{"className":50736,"code":77868,"language":50738,"meta":37,"style":37},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[24,77870,77871,77876,77881,77886,77890],{"__ignoreMap":37},[41,77872,77873],{"class":43,"line":44},[41,77874,77875],{"class":275},"const obj = {\n",[41,77877,77878],{"class":43,"line":51},[41,77879,77880],{"class":275},"   uname: 'pink老师',\n",[41,77882,77883],{"class":43,"line":62},[41,77884,77885],{"class":275},"   age: 18,\n",[41,77887,77888],{"class":43,"line":70},[41,77889,1706],{"class":275},[41,77891,77892],{"class":43,"line":76},[41,77893,77894],{"class":275},"const { uname, age } = obj\n",[20,77896,77897],{},"上方代码这样写等价于：",[20,77899,77900],{},"const uname等价于obj.uname",[20,77902,77903],{},"变量名可以重新改名：",[20,77905,77906],{},"const uname='red老师'",[20,77908,77909],{},"const user={",[20,77911,77912],{},"  uname:'pink老师',",[20,77914,77915],{},"  age:18",[20,77917,1219],{},[20,77919,77920],{},"const {uname,age}=user",[20,77922,77923],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[20,77925,77926],{},"const {旧变量名：新变量名}=对象",[20,77928,77929],{},"const {uname:username,age}=user",[22136,77931,77933],{"id":77932},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[20,77935,77936],{},[1603,77937],{"alt":37,"src":77938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22136,77940,77942],{"id":77941},"_4623-多级对象解构","4.6.2.3 多级对象解构",[20,77944,77945],{},[1603,77946],{"alt":37,"src":77947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[32,77949,77951],{"className":53170,"code":77950,"language":53172,"meta":37,"style":37},"  \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",[24,77952,77953,77961,77966,77971,77976,77981,77986,77991,77996,78001,78005,78010,78015],{"__ignoreMap":37},[41,77954,77955,77957,77959],{"class":43,"line":44},[41,77956,52247],{"class":275},[41,77958,51916],{"class":51403},[41,77960,51410],{"class":275},[41,77962,77963],{"class":43,"line":51},[41,77964,77965],{"class":275},"    const pig = {\n",[41,77967,77968],{"class":43,"line":62},[41,77969,77970],{"class":275},"      name: '佩奇',\n",[41,77972,77973],{"class":43,"line":70},[41,77974,77975],{"class":275},"      family: {\n",[41,77977,77978],{"class":43,"line":76},[41,77979,77980],{"class":275},"        mother: '猪妈妈',\n",[41,77982,77983],{"class":43,"line":83},[41,77984,77985],{"class":275},"        father: '猪爸爸',\n",[41,77987,77988],{"class":43,"line":89},[41,77989,77990],{"class":275},"        sister: '乔治'\n",[41,77992,77993],{"class":43,"line":96},[41,77994,77995],{"class":275},"      },\n",[41,77997,77998],{"class":43,"line":104},[41,77999,78000],{"class":275},"      age: 6\n",[41,78002,78003],{"class":43,"line":176},[41,78004,2326],{"class":275},[41,78006,78007],{"class":43,"line":184},[41,78008,78009],{"class":275},"    \u002F\u002F 多级对象解构\n",[41,78011,78012],{"class":43,"line":1757},[41,78013,78014],{"class":275},"    const { name, family: { mother, father, sister }, age } = pig\n",[41,78016,78017,78019,78021],{"class":43,"line":1763},[41,78018,52520],{"class":275},[41,78020,51916],{"class":51403},[41,78022,51410],{"class":275},[20,78024,78025],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[32,78027,78030],{"className":78028,"code":78029,"language":76550,"meta":37,"style":37},"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",[24,78031,78032,78037,78048,78060,78072,78081,78085,78096,78108,78118,78123,78127,78137,78148,78157,78161,78165,78176,78187,78196,78200,78205],{"__ignoreMap":37},[41,78033,78034],{"class":43,"line":44},[41,78035,78036],{"class":47},"    \u002F\u002F 这是后台传递过来的数据\n",[41,78038,78039,78041,78044,78046],{"class":43,"line":51},[41,78040,11359],{"class":271},[41,78042,78043],{"class":275}," msg ",[41,78045,321],{"class":271},[41,78047,15710],{"class":275},[41,78049,78050,78053,78055,78058],{"class":43,"line":62},[41,78051,78052],{"class":378},"      \"code\"",[41,78054,1132],{"class":271},[41,78056,78057],{"class":58}," 200",[41,78059,31569],{"class":275},[41,78061,78062,78065,78067,78070],{"class":43,"line":70},[41,78063,78064],{"class":378},"      \"msg\"",[41,78066,1132],{"class":271},[41,78068,78069],{"class":378}," \"获取新闻列表成功\"",[41,78071,31569],{"class":275},[41,78073,78074,78077,78079],{"class":43,"line":76},[41,78075,78076],{"class":378},"      \"data\"",[41,78078,1132],{"class":271},[41,78080,55550],{"class":275},[41,78082,78083],{"class":43,"line":83},[41,78084,2648],{"class":275},[41,78086,78087,78090,78092,78094],{"class":43,"line":89},[41,78088,78089],{"class":378},"          \"id\"",[41,78091,1132],{"class":271},[41,78093,25221],{"class":58},[41,78095,31569],{"class":275},[41,78097,78098,78101,78103,78106],{"class":43,"line":96},[41,78099,78100],{"class":378},"          \"title\"",[41,78102,1132],{"class":271},[41,78104,78105],{"class":378}," \"5G商用自己，三大运用商收入下降\"",[41,78107,31569],{"class":275},[41,78109,78110,78113,78115],{"class":43,"line":104},[41,78111,78112],{"class":378},"          \"count\"",[41,78114,1132],{"class":271},[41,78116,78117],{"class":58}," 58\n",[41,78119,78120],{"class":43,"line":176},[41,78121,78122],{"class":275},"        },\n",[41,78124,78125],{"class":43,"line":184},[41,78126,2648],{"class":275},[41,78128,78129,78131,78133,78135],{"class":43,"line":1757},[41,78130,78089],{"class":378},[41,78132,1132],{"class":271},[41,78134,14893],{"class":58},[41,78136,31569],{"class":275},[41,78138,78139,78141,78143,78146],{"class":43,"line":1763},[41,78140,78100],{"class":378},[41,78142,1132],{"class":271},[41,78144,78145],{"class":378}," \"国际媒体头条速览\"",[41,78147,31569],{"class":275},[41,78149,78150,78152,78154],{"class":43,"line":1768},[41,78151,78112],{"class":378},[41,78153,1132],{"class":271},[41,78155,78156],{"class":58}," 56\n",[41,78158,78159],{"class":43,"line":1782},[41,78160,78122],{"class":275},[41,78162,78163],{"class":43,"line":1787},[41,78164,2648],{"class":275},[41,78166,78167,78169,78171,78174],{"class":43,"line":1793},[41,78168,78089],{"class":378},[41,78170,1132],{"class":271},[41,78172,78173],{"class":58}," 3",[41,78175,31569],{"class":275},[41,78177,78178,78180,78182,78185],{"class":43,"line":1814},[41,78179,78100],{"class":378},[41,78181,1132],{"class":271},[41,78183,78184],{"class":378}," \"乌克兰和俄罗斯持续冲突\"",[41,78186,31569],{"class":275},[41,78188,78189,78191,78193],{"class":43,"line":1819},[41,78190,78112],{"class":378},[41,78192,1132],{"class":271},[41,78194,78195],{"class":58}," 1669\n",[41,78197,78198],{"class":43,"line":1833},[41,78199,78122],{"class":275},[41,78201,78202],{"class":43,"line":1838},[41,78203,78204],{"class":275},"      ]\n",[41,78206,78207],{"class":43,"line":1867},[41,78208,2326],{"class":275},[20,78210,78211],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[20,78213,78214],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[20,78216,78217],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[20,78219,78220],{},"function({data}) {",[20,78222,78223],{},"console.log(data)",[20,78225,1219],{},[20,78227,78228],{},"render(msg)",[20,78230,78231],{},"实参传递给形参的时候解构了",[20,78233,78234],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[20,78236,78237],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[20,78239,78240],{},"function render({data:mydata}) {",[20,78242,78243],{},"  console.log(data)",[20,78245,1219],{},[241,78247,78249],{"id":78248},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[20,78251,78252],{},"有两种情况：一个是数组结构，一个是立即执行函数",[224,78254,78255],{},[227,78256,78257],{},"如果对一个数组进行遍历，有两种方式：",[20,78259,78260],{},"①法1",[20,78262,78263],{},"const arr=[1,2,3]",[20,78265,78266],{},"arr.map(function(item,index) {",[20,78268,78269],{},"  console.log(item)",[20,78271,52567],{},[20,78273,78274],{},[1603,78275],{"alt":37,"src":78276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[20,78278,78279],{},"②法2",[20,78281,78282],{},"const str='pink'",[20,78284,78285],{},"[1,2,3].map(function(item,index) {",[20,78287,78288],{},"console.log(item)",[20,78290,52567],{},[20,78292,78293],{},[1603,78294],{"alt":37,"src":78295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[20,78297,78298],{},"此时会报错",[20,78300,78301],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[20,78303,78288],{},[20,78305,52567],{},[20,78307,78308],{},"内部会当成这样处理，所以我们用分号进行隔开",[15,78310,78312],{"id":78311},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[20,78314,78315],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[20,78317,78318],{},"可以理解为加强版的for循环",[20,78320,78321],{},[1603,78322],{"alt":37,"src":78323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[20,78325,78326],{},"里边不写return，不返回数组，只遍历不返回",[20,78328,78329],{},"map是返回数组",[20,78331,78332],{},"forEach主要用于遍历数组对象",[32,78334,78336],{"className":53170,"code":78335,"language":53172,"meta":37,"style":37},"  \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",[24,78337,78338,78346,78351,78356,78361,78366,78370,78375],{"__ignoreMap":37},[41,78339,78340,78342,78344],{"class":43,"line":44},[41,78341,52247],{"class":275},[41,78343,51916],{"class":51403},[41,78345,51410],{"class":275},[41,78347,78348],{"class":43,"line":51},[41,78349,78350],{"class":275},"    const arr = ['red', 'green', 'pink']\n",[41,78352,78353],{"class":43,"line":62},[41,78354,78355],{"class":275},"    const result = arr.forEach(function (item, index) {\n",[41,78357,78358],{"class":43,"line":70},[41,78359,78360],{"class":275},"      console.log(item)\n",[41,78362,78363],{"class":43,"line":76},[41,78364,78365],{"class":275},"      console.log(index)\n",[41,78367,78368],{"class":43,"line":83},[41,78369,33564],{"class":275},[41,78371,78372],{"class":43,"line":89},[41,78373,78374],{"class":275},"    console.log(result)\n",[41,78376,78377,78379,78381],{"class":43,"line":96},[41,78378,52520],{"class":275},[41,78380,51916],{"class":51403},[41,78382,51410],{"class":275},[20,78384,78385],{},[1603,78386],{"alt":37,"src":78387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[15,78389,78391],{"id":78390},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[20,78393,78394],{},[1603,78395],{"alt":37,"src":78396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[20,78398,78399],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[32,78401,78403],{"className":53170,"code":78402,"language":53172,"meta":37,"style":37},"\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",[24,78404,78405,78413,78421,78426,78431,78435,78439,78444,78448,78453,78461],{"__ignoreMap":37},[41,78406,78407,78409,78411],{"class":43,"line":44},[41,78408,1183],{"class":275},[41,78410,51903],{"class":51403},[41,78412,51410],{"class":275},[41,78414,78415,78417,78419],{"class":43,"line":51},[41,78416,52247],{"class":275},[41,78418,51916],{"class":51403},[41,78420,51410],{"class":275},[41,78422,78423],{"class":43,"line":62},[41,78424,78425],{"class":275},"    const arr = [10, 20, 30]\n",[41,78427,78428],{"class":43,"line":70},[41,78429,78430],{"class":275},"    const newArr = arr.filter(function (item, index) {\n",[41,78432,78433],{"class":43,"line":76},[41,78434,78360],{"class":275},[41,78436,78437],{"class":43,"line":83},[41,78438,78365],{"class":275},[41,78440,78441],{"class":43,"line":89},[41,78442,78443],{"class":275},"      return item >= 20\n",[41,78445,78446],{"class":43,"line":96},[41,78447,33564],{"class":275},[41,78449,78450],{"class":43,"line":104},[41,78451,78452],{"class":275},"    console.log(newArr)\n",[41,78454,78455,78457,78459],{"class":43,"line":176},[41,78456,52520],{"class":275},[41,78458,51916],{"class":51403},[41,78460,51410],{"class":275},[41,78462,78463,78465,78467],{"class":43,"line":184},[41,78464,51888],{"class":275},[41,78466,51903],{"class":51403},[41,78468,51410],{"class":275},[20,78470,78471],{},"这个也可以写成箭头函数：",[32,78473,78475],{"className":50736,"code":78474,"language":50738,"meta":37,"style":37},"const newArr = arr.filter(item => item >= 20)\n",[24,78476,78477],{"__ignoreMap":37},[41,78478,78479],{"class":43,"line":44},[41,78480,78474],{"class":275},[15,78482,78484],{"id":78483},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[20,78486,78487],{},[1603,78488],{"alt":37,"src":78489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[20,78491,78492],{},"步骤：",[20,78494,78495],{},"①：渲染页面模块",[1280,78497,78498,78501],{},[227,78499,78500],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[227,78502,78503],{},"用forEach+字符串的形式",[20,78505,78506],{},"②：点击不同需求，显示不同页面内容",[1280,78508,78509,78512,78515,78518,78521],{},[227,78510,78511],{},"点击采取事件委托方式 .filter",[227,78513,78514],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[227,78516,78517],{},"筛选条件是根据点击的 data-index 来判断",[227,78519,78520],{},"可以使用对象解构，把事件对象解构",[227,78522,78523],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[32,78525,78527],{"className":50736,"code":78526,"language":50738,"meta":37,"style":37},"\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",[24,78528,78529,78539,78553,78557,78565,78579,78599,78611,78619,78625,78635,78645,78655,78659,78663,78669,78682,78694,78704,78716,78720,78724,78731,78744,78756,78773,78791,78804,78808,78812,78824,78834,78838,78842,78849,78890,78917,78927,78931,78935,78943,78955,78959,78963,78971,78983,78995,79006,79010,79014,79023,79035,79046,79050,79054,79063,79075,79087,79091,79095,79102,79112,79124,79136,79151,79155,79159,79167,79183,79193,79203,79213,79225,79229,79233,79243,79254,79264,79268,79276,79284,79288,79296,79311,79337,79362,79387,79406,79414,79428,79433,79438,79443,79448,79453,79461,79469,79474,79485,79490,79500,79510,79520,79530,79534,79538,79547,79556,79565,79574,79578,79582,79591,79600,79609,79618,79622,79626,79635,79644,79653,79662,79666,79670,79679,79688,79697,79706,79710,79714,79723,79732,79741,79750,79754,79758,79767,79776,79785,79794,79798,79802,79811,79820,79828,79837,79841,79845,79849,79854,79866,79871,79883,79887,79904,79932,79941,79946,79956,79966,79975,79980,79985,79989,79994,80011,80015,80020,80028,80033,80060,80065,80085,80090,80102,80107,80112,80117,80128,80142,80179,80197,80230,80247,80271,80275,80280,80286,80290,80294,80298,80306,80314,80318],{"__ignoreMap":37},[41,78530,78531,78533,78535,78537],{"class":43,"line":44},[41,78532,51400],{"class":275},[41,78534,51404],{"class":51403},[41,78536,51407],{"class":54},[41,78538,51410],{"class":275},[41,78540,78541,78543,78545,78547,78549,78551],{"class":43,"line":51},[41,78542,1183],{"class":275},[41,78544,50738],{"class":51403},[41,78546,51419],{"class":54},[41,78548,321],{"class":275},[41,78550,51424],{"class":378},[41,78552,51410],{"class":275},[41,78554,78555],{"class":43,"line":62},[41,78556,80],{"emptyLinePlaceholder":79},[41,78558,78559,78561,78563],{"class":43,"line":70},[41,78560,1183],{"class":275},[41,78562,51437],{"class":51403},[41,78564,51410],{"class":275},[41,78566,78567,78569,78571,78573,78575,78577],{"class":43,"line":76},[41,78568,52247],{"class":275},[41,78570,51447],{"class":51403},[41,78572,51450],{"class":54},[41,78574,321],{"class":275},[41,78576,51455],{"class":378},[41,78578,51410],{"class":275},[41,78580,78581,78583,78585,78587,78589,78591,78593,78595,78597],{"class":43,"line":83},[41,78582,52247],{"class":275},[41,78584,51447],{"class":51403},[41,78586,15058],{"class":54},[41,78588,321],{"class":275},[41,78590,51494],{"class":378},[41,78592,51474],{"class":54},[41,78594,321],{"class":275},[41,78596,51501],{"class":378},[41,78598,51410],{"class":275},[41,78600,78601,78603,78605,78607,78609],{"class":43,"line":89},[41,78602,52247],{"class":275},[41,78604,51510],{"class":51403},[41,78606,51513],{"class":275},[41,78608,51510],{"class":51403},[41,78610,51410],{"class":275},[41,78612,78613,78615,78617],{"class":43,"line":96},[41,78614,52247],{"class":275},[41,78616,189],{"class":51403},[41,78618,51410],{"class":275},[41,78620,78621,78623],{"class":43,"line":104},[41,78622,6541],{"class":51403},[41,78624,15710],{"class":275},[41,78626,78627,78629,78631,78633],{"class":43,"line":176},[41,78628,54798],{"class":58},[41,78630,51540],{"class":275},[41,78632,465],{"class":58},[41,78634,1434],{"class":275},[41,78636,78637,78639,78641,78643],{"class":43,"line":184},[41,78638,54809],{"class":58},[41,78640,51540],{"class":275},[41,78642,465],{"class":58},[41,78644,1434],{"class":275},[41,78646,78647,78649,78651,78653],{"class":43,"line":1757},[41,78648,72699],{"class":58},[41,78650,51540],{"class":275},[41,78652,60608],{"class":58},[41,78654,1434],{"class":275},[41,78656,78657],{"class":43,"line":1763},[41,78658,2326],{"class":275},[41,78660,78661],{"class":43,"line":1768},[41,78662,80],{"emptyLinePlaceholder":79},[41,78664,78665,78667],{"class":43,"line":1782},[41,78666,62226],{"class":54},[41,78668,15710],{"class":275},[41,78670,78671,78673,78675,78678,78680],{"class":43,"line":1787},[41,78672,54874],{"class":58},[41,78674,51540],{"class":275},[41,78676,78677],{"class":58},"990",[41,78679,51595],{"class":271},[41,78681,1434],{"class":275},[41,78683,78684,78686,78688,78690,78692],{"class":43,"line":1793},[41,78685,54809],{"class":58},[41,78687,51540],{"class":275},[41,78689,465],{"class":58},[41,78691,51659],{"class":58},[41,78693,1434],{"class":275},[41,78695,78696,78698,78700,78702],{"class":43,"line":1814},[41,78697,55112],{"class":58},[41,78699,51540],{"class":275},[41,78701,51580],{"class":58},[41,78703,1434],{"class":275},[41,78705,78706,78709,78711,78714],{"class":43,"line":1819},[41,78707,78708],{"class":58},"      flex-wrap",[41,78710,51540],{"class":275},[41,78712,78713],{"class":58},"wrap",[41,78715,1434],{"class":275},[41,78717,78718],{"class":43,"line":1833},[41,78719,2326],{"class":275},[41,78721,78722],{"class":43,"line":1838},[41,78723,80],{"emptyLinePlaceholder":79},[41,78725,78726,78729],{"class":43,"line":1867},[41,78727,78728],{"class":54},"    .item",[41,78730,15710],{"class":275},[41,78732,78733,78735,78737,78740,78742],{"class":43,"line":1872},[41,78734,54874],{"class":58},[41,78736,51540],{"class":275},[41,78738,78739],{"class":58},"240",[41,78741,51595],{"class":271},[41,78743,1434],{"class":275},[41,78745,78746,78748,78750,78752,78754],{"class":43,"line":1889},[41,78747,62103],{"class":58},[41,78749,51540],{"class":275},[41,78751,719],{"class":58},[41,78753,51595],{"class":271},[41,78755,1434],{"class":275},[41,78757,78758,78760,78762,78764,78766,78769,78771],{"class":43,"line":1894},[41,78759,54798],{"class":58},[41,78761,51540],{"class":275},[41,78763,973],{"class":58},[41,78765,51595],{"class":271},[41,78767,78768],{"class":58}," 30",[41,78770,51595],{"class":271},[41,78772,1434],{"class":275},[41,78774,78775,78777,78779,78781,78784,78787,78789],{"class":43,"line":1899},[41,78776,61963],{"class":58},[41,78778,51540],{"class":275},[41,78780,28224],{"class":58},[41,78782,78783],{"class":58}," ease",[41,78785,78786],{"class":58}," .5",[41,78788,968],{"class":271},[41,78790,1434],{"class":275},[41,78792,78793,78796,78798,78800,78802],{"class":43,"line":1904},[41,78794,78795],{"class":58},"      margin-bottom",[41,78797,51540],{"class":275},[41,78799,973],{"class":58},[41,78801,51595],{"class":271},[41,78803,1434],{"class":275},[41,78805,78806],{"class":43,"line":1918},[41,78807,2326],{"class":275},[41,78809,78810],{"class":43,"line":1923},[41,78811,80],{"emptyLinePlaceholder":79},[41,78813,78814,78817,78819,78822],{"class":43,"line":2715},[41,78815,78816],{"class":54},"    .item:nth-child",[41,78818,276],{"class":275},[41,78820,78821],{"class":58},"4n",[41,78823,12580],{"class":275},[41,78825,78826,78828,78830,78832],{"class":43,"line":2729},[41,78827,62103],{"class":58},[41,78829,51540],{"class":275},[41,78831,465],{"class":58},[41,78833,1434],{"class":275},[41,78835,78836],{"class":43,"line":2737},[41,78837,2326],{"class":275},[41,78839,78840],{"class":43,"line":2742},[41,78841,80],{"emptyLinePlaceholder":79},[41,78843,78844,78847],{"class":43,"line":2748},[41,78845,78846],{"class":54},"    .item:hover",[41,78848,15710],{"class":275},[41,78850,78851,78854,78856,78858,78860,78862,78864,78866,78868,78871,78873,78875,78877,78879,78881,78883,78885,78888],{"class":43,"line":2754},[41,78852,78853],{"class":58},"      box-shadow",[41,78855,51540],{"class":275},[41,78857,465],{"class":58},[41,78859,51595],{"class":271},[41,78861,4231],{"class":58},[41,78863,51595],{"class":271},[41,78865,2287],{"class":58},[41,78867,51595],{"class":271},[41,78869,78870],{"class":58}," rgba",[41,78872,276],{"class":275},[41,78874,465],{"class":58},[41,78876,12573],{"class":275},[41,78878,465],{"class":58},[41,78880,12573],{"class":275},[41,78882,465],{"class":58},[41,78884,12573],{"class":275},[41,78886,78887],{"class":58},".2",[41,78889,2857],{"class":275},[41,78891,78892,78895,78897,78900,78902,78904,78906,78909,78911,78913,78915],{"class":43,"line":2759},[41,78893,78894],{"class":58},"      transform",[41,78896,51540],{"class":275},[41,78898,78899],{"class":58},"translate3d",[41,78901,276],{"class":275},[41,78903,465],{"class":58},[41,78905,12573],{"class":275},[41,78907,78908],{"class":58},"-4",[41,78910,51595],{"class":271},[41,78912,12573],{"class":275},[41,78914,465],{"class":58},[41,78916,2857],{"class":275},[41,78918,78919,78921,78923,78925],{"class":43,"line":8086},[41,78920,62128],{"class":58},[41,78922,51540],{"class":275},[41,78924,62133],{"class":58},[41,78926,1434],{"class":275},[41,78928,78929],{"class":43,"line":8110},[41,78930,2326],{"class":275},[41,78932,78933],{"class":43,"line":8115},[41,78934,80],{"emptyLinePlaceholder":79},[41,78936,78937,78939,78941],{"class":43,"line":8121},[41,78938,78728],{"class":54},[41,78940,55718],{"class":51403},[41,78942,15710],{"class":275},[41,78944,78945,78947,78949,78951,78953],{"class":43,"line":8148},[41,78946,54874],{"class":58},[41,78948,51540],{"class":275},[41,78950,584],{"class":58},[41,78952,601],{"class":271},[41,78954,1434],{"class":275},[41,78956,78957],{"class":43,"line":8153},[41,78958,2326],{"class":275},[41,78960,78961],{"class":43,"line":8159},[41,78962,80],{"emptyLinePlaceholder":79},[41,78964,78965,78967,78969],{"class":43,"line":8171},[41,78966,78728],{"class":54},[41,78968,62407],{"class":54},[41,78970,15710],{"class":275},[41,78972,78973,78975,78977,78979,78981],{"class":43,"line":8183},[41,78974,55025],{"class":58},[41,78976,51540],{"class":275},[41,78978,923],{"class":58},[41,78980,51595],{"class":271},[41,78982,1434],{"class":275},[41,78984,78985,78987,78989,78991,78993],{"class":43,"line":8195},[41,78986,78795],{"class":58},[41,78988,51540],{"class":275},[41,78990,719],{"class":58},[41,78992,51595],{"class":271},[41,78994,1434],{"class":275},[41,78996,78997,78999,79001,79004],{"class":43,"line":9854},[41,78998,57519],{"class":58},[41,79000,51540],{"class":275},[41,79002,79003],{"class":58},"#666",[41,79005,1434],{"class":275},[41,79007,79008],{"class":43,"line":9879},[41,79009,2326],{"class":275},[41,79011,79012],{"class":43,"line":9902},[41,79013,80],{"emptyLinePlaceholder":79},[41,79015,79016,79018,79021],{"class":43,"line":9926},[41,79017,78728],{"class":54},[41,79019,79020],{"class":54}," .price",[41,79022,15710],{"class":275},[41,79024,79025,79027,79029,79031,79033],{"class":43,"line":9931},[41,79026,55025],{"class":58},[41,79028,51540],{"class":275},[41,79030,1023],{"class":58},[41,79032,51595],{"class":271},[41,79034,1434],{"class":275},[41,79036,79037,79039,79041,79044],{"class":43,"line":9936},[41,79038,57519],{"class":58},[41,79040,51540],{"class":275},[41,79042,79043],{"class":58},"firebrick",[41,79045,1434],{"class":275},[41,79047,79048],{"class":43,"line":9941},[41,79049,2326],{"class":275},[41,79051,79052],{"class":43,"line":9950},[41,79053,80],{"emptyLinePlaceholder":79},[41,79055,79056,79058,79061],{"class":43,"line":9955},[41,79057,78728],{"class":54},[41,79059,79060],{"class":54}," .price::before",[41,79062,15710],{"class":275},[41,79064,79065,79068,79070,79073],{"class":43,"line":9961},[41,79066,79067],{"class":58},"      content",[41,79069,51540],{"class":275},[41,79071,79072],{"class":378},"'￥'",[41,79074,1434],{"class":275},[41,79076,79077,79079,79081,79083,79085],{"class":43,"line":9982},[41,79078,55025],{"class":58},[41,79080,51540],{"class":275},[41,79082,822],{"class":58},[41,79084,51595],{"class":271},[41,79086,1434],{"class":275},[41,79088,79089],{"class":43,"line":9988},[41,79090,2326],{"class":275},[41,79092,79093],{"class":43,"line":10002},[41,79094,80],{"emptyLinePlaceholder":79},[41,79096,79097,79100],{"class":43,"line":10008},[41,79098,79099],{"class":54},"    .filter",[41,79101,15710],{"class":275},[41,79103,79104,79106,79108,79110],{"class":43,"line":10035},[41,79105,55112],{"class":58},[41,79107,51540],{"class":275},[41,79109,51580],{"class":58},[41,79111,1434],{"class":275},[41,79113,79114,79116,79118,79120,79122],{"class":43,"line":10044},[41,79115,54874],{"class":58},[41,79117,51540],{"class":275},[41,79119,78677],{"class":58},[41,79121,51595],{"class":271},[41,79123,1434],{"class":275},[41,79125,79126,79128,79130,79132,79134],{"class":43,"line":10050},[41,79127,54809],{"class":58},[41,79129,51540],{"class":275},[41,79131,465],{"class":58},[41,79133,51659],{"class":58},[41,79135,1434],{"class":275},[41,79137,79138,79140,79142,79144,79146,79148],{"class":43,"line":10058},[41,79139,54798],{"class":58},[41,79141,51540],{"class":275},[41,79143,929],{"class":58},[41,79145,51595],{"class":271},[41,79147,78768],{"class":58},[41,79149,79150],{"class":271},"px\n",[41,79152,79153],{"class":43,"line":10063},[41,79154,2326],{"class":275},[41,79156,79157],{"class":43,"line":16742},[41,79158,80],{"emptyLinePlaceholder":79},[41,79160,79161,79163,79165],{"class":43,"line":16748},[41,79162,79099],{"class":54},[41,79164,1539],{"class":51403},[41,79166,15710],{"class":275},[41,79168,79169,79171,79173,79175,79177,79179,79181],{"class":43,"line":16771},[41,79170,54798],{"class":58},[41,79172,51540],{"class":275},[41,79174,719],{"class":58},[41,79176,51595],{"class":271},[41,79178,9088],{"class":58},[41,79180,51595],{"class":271},[41,79182,1434],{"class":275},[41,79184,79185,79187,79189,79191],{"class":43,"line":16777},[41,79186,61824],{"class":58},[41,79188,51540],{"class":275},[41,79190,61921],{"class":58},[41,79192,1434],{"class":275},[41,79194,79195,79197,79199,79201],{"class":43,"line":16800},[41,79196,57519],{"class":58},[41,79198,51540],{"class":275},[41,79200,79003],{"class":58},[41,79202,1434],{"class":275},[41,79204,79205,79207,79209,79211],{"class":43,"line":16814},[41,79206,64073],{"class":58},[41,79208,51540],{"class":275},[41,79210,54840],{"class":58},[41,79212,1434],{"class":275},[41,79214,79215,79217,79219,79221,79223],{"class":43,"line":16834},[41,79216,61853],{"class":58},[41,79218,51540],{"class":275},[41,79220,973],{"class":58},[41,79222,51595],{"class":271},[41,79224,1434],{"class":275},[41,79226,79227],{"class":43,"line":16840},[41,79228,2326],{"class":275},[41,79230,79231],{"class":43,"line":16851},[41,79232,80],{"emptyLinePlaceholder":79},[41,79234,79235,79237,79239,79241],{"class":43,"line":16874},[41,79236,79099],{"class":54},[41,79238,1539],{"class":51403},[41,79240,62003],{"class":54},[41,79242,15710],{"class":275},[41,79244,79245,79247,79249,79252],{"class":43,"line":16896},[41,79246,54987],{"class":58},[41,79248,51540],{"class":275},[41,79250,79251],{"class":58},"#05943c",[41,79253,1434],{"class":275},[41,79255,79256,79258,79260,79262],{"class":43,"line":16901},[41,79257,57519],{"class":58},[41,79259,51540],{"class":275},[41,79261,60945],{"class":58},[41,79263,1434],{"class":275},[41,79265,79266],{"class":43,"line":16907},[41,79267,2326],{"class":275},[41,79269,79270,79272,79274],{"class":43,"line":16921},[41,79271,52520],{"class":275},[41,79273,189],{"class":51403},[41,79275,51410],{"class":275},[41,79277,79278,79280,79282],{"class":43,"line":16934},[41,79279,51888],{"class":275},[41,79281,51437],{"class":51403},[41,79283,51410],{"class":275},[41,79285,79286],{"class":43,"line":16939},[41,79287,80],{"emptyLinePlaceholder":79},[41,79289,79290,79292,79294],{"class":43,"line":16953},[41,79291,1183],{"class":275},[41,79293,51903],{"class":51403},[41,79295,51410],{"class":275},[41,79297,79298,79300,79302,79304,79306,79309],{"class":43,"line":16958},[41,79299,52247],{"class":275},[41,79301,51714],{"class":51403},[41,79303,53589],{"class":54},[41,79305,321],{"class":275},[41,79307,79308],{"class":378},"\"filter\"",[41,79310,51410],{"class":275},[41,79312,79313,79315,79317,79319,79321,79323,79326,79328,79330,79333,79335],{"class":43,"line":16964},[41,79314,51444],{"class":275},[41,79316,511],{"class":51403},[41,79318,61160],{"class":54},[41,79320,321],{"class":275},[41,79322,61165],{"class":378},[41,79324,79325],{"class":54}," data-index",[41,79327,321],{"class":275},[41,79329,3816],{"class":378},[41,79331,79332],{"class":275},">0-100元\u003C\u002F",[41,79334,511],{"class":51403},[41,79336,51410],{"class":275},[41,79338,79339,79341,79343,79345,79347,79349,79351,79353,79355,79358,79360],{"class":43,"line":16969},[41,79340,51444],{"class":275},[41,79342,511],{"class":51403},[41,79344,61160],{"class":54},[41,79346,321],{"class":275},[41,79348,61165],{"class":378},[41,79350,79325],{"class":54},[41,79352,321],{"class":275},[41,79354,3839],{"class":378},[41,79356,79357],{"class":275},">100-300元\u003C\u002F",[41,79359,511],{"class":51403},[41,79361,51410],{"class":275},[41,79363,79364,79366,79368,79370,79372,79374,79376,79378,79380,79383,79385],{"class":43,"line":16983},[41,79365,51444],{"class":275},[41,79367,511],{"class":51403},[41,79369,61160],{"class":54},[41,79371,321],{"class":275},[41,79373,61165],{"class":378},[41,79375,79325],{"class":54},[41,79377,321],{"class":275},[41,79379,3852],{"class":378},[41,79381,79382],{"class":275},">300元以上\u003C\u002F",[41,79384,511],{"class":51403},[41,79386,51410],{"class":275},[41,79388,79389,79391,79393,79395,79397,79399,79402,79404],{"class":43,"line":16988},[41,79390,51444],{"class":275},[41,79392,511],{"class":51403},[41,79394,61160],{"class":54},[41,79396,321],{"class":275},[41,79398,61165],{"class":378},[41,79400,79401],{"class":275},">全部区间\u003C\u002F",[41,79403,511],{"class":51403},[41,79405,51410],{"class":275},[41,79407,79408,79410,79412],{"class":43,"line":16993},[41,79409,52520],{"class":275},[41,79411,51714],{"class":51403},[41,79413,51410],{"class":275},[41,79415,79416,79418,79420,79422,79424,79426],{"class":43,"line":17007},[41,79417,52247],{"class":275},[41,79419,51714],{"class":51403},[41,79421,53589],{"class":54},[41,79423,321],{"class":275},[41,79425,62711],{"class":378},[41,79427,51410],{"class":275},[41,79429,79430],{"class":43,"line":17019},[41,79431,79432],{"class":47},"    \u003C!-- \u003Cdiv class=\"item\">\n",[41,79434,79435],{"class":43,"line":17024},[41,79436,79437],{"class":47},"      \u003Cimg src=\"\" alt=\"\">\n",[41,79439,79440],{"class":43,"line":17037},[41,79441,79442],{"class":47},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[41,79444,79445],{"class":43,"line":17042},[41,79446,79447],{"class":47},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[41,79449,79450],{"class":43,"line":17047},[41,79451,79452],{"class":47},"    \u003C\u002Fdiv> -->\n",[41,79454,79455,79457,79459],{"class":43,"line":17052},[41,79456,52520],{"class":275},[41,79458,51714],{"class":51403},[41,79460,51410],{"class":275},[41,79462,79463,79465,79467],{"class":43,"line":17065},[41,79464,52247],{"class":275},[41,79466,51916],{"class":51403},[41,79468,51410],{"class":275},[41,79470,79471],{"class":43,"line":17070},[41,79472,79473],{"class":47},"    \u002F\u002F 2. 初始化数据\n",[41,79475,79476,79478,79481,79483],{"class":43,"line":32736},[41,79477,11359],{"class":271},[41,79479,79480],{"class":58}," goodsList",[41,79482,13702],{"class":271},[41,79484,55550],{"class":275},[41,79486,79487],{"class":43,"line":32742},[41,79488,79489],{"class":275},"      {\n",[41,79491,79492,79495,79498],{"class":43,"line":32748},[41,79493,79494],{"class":275},"        id: ",[41,79496,79497],{"class":378},"'4001172'",[41,79499,31569],{"class":275},[41,79501,79502,79505,79508],{"class":43,"line":32754},[41,79503,79504],{"class":275},"        name: ",[41,79506,79507],{"class":378},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[41,79509,31569],{"class":275},[41,79511,79512,79515,79518],{"class":43,"line":32760},[41,79513,79514],{"class":275},"        price: ",[41,79516,79517],{"class":378},"'289.00'",[41,79519,31569],{"class":275},[41,79521,79522,79525,79528],{"class":43,"line":32771},[41,79523,79524],{"class":275},"        picture: ",[41,79526,79527],{"class":378},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[41,79529,31569],{"class":275},[41,79531,79532],{"class":43,"line":32777},[41,79533,77995],{"class":275},[41,79535,79536],{"class":43,"line":32797},[41,79537,79489],{"class":275},[41,79539,79540,79542,79545],{"class":43,"line":32803},[41,79541,79494],{"class":275},[41,79543,79544],{"class":378},"'4001594'",[41,79546,31569],{"class":275},[41,79548,79549,79551,79554],{"class":43,"line":32814},[41,79550,79504],{"class":275},[41,79552,79553],{"class":378},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[41,79555,31569],{"class":275},[41,79557,79558,79560,79563],{"class":43,"line":32820},[41,79559,79514],{"class":275},[41,79561,79562],{"class":378},"'288.00'",[41,79564,31569],{"class":275},[41,79566,79567,79569,79572],{"class":43,"line":32826},[41,79568,79524],{"class":275},[41,79570,79571],{"class":378},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[41,79573,31569],{"class":275},[41,79575,79576],{"class":43,"line":32832},[41,79577,77995],{"class":275},[41,79579,79580],{"class":43,"line":32838},[41,79581,79489],{"class":275},[41,79583,79584,79586,79589],{"class":43,"line":32844},[41,79585,79494],{"class":275},[41,79587,79588],{"class":378},"'4001009'",[41,79590,31569],{"class":275},[41,79592,79593,79595,79598],{"class":43,"line":32850},[41,79594,79504],{"class":275},[41,79596,79597],{"class":378},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[41,79599,31569],{"class":275},[41,79601,79602,79604,79607],{"class":43,"line":32856},[41,79603,79514],{"class":275},[41,79605,79606],{"class":378},"'109.00'",[41,79608,31569],{"class":275},[41,79610,79611,79613,79616],{"class":43,"line":32876},[41,79612,79524],{"class":275},[41,79614,79615],{"class":378},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[41,79617,31569],{"class":275},[41,79619,79620],{"class":43,"line":32882},[41,79621,77995],{"class":275},[41,79623,79624],{"class":43,"line":32898},[41,79625,79489],{"class":275},[41,79627,79628,79630,79633],{"class":43,"line":32904},[41,79629,79494],{"class":275},[41,79631,79632],{"class":378},"'4001874'",[41,79634,31569],{"class":275},[41,79636,79637,79639,79642],{"class":43,"line":32918},[41,79638,79504],{"class":275},[41,79640,79641],{"class":378},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[41,79643,31569],{"class":275},[41,79645,79646,79648,79651],{"class":43,"line":32924},[41,79647,79514],{"class":275},[41,79649,79650],{"class":378},"'488.00'",[41,79652,31569],{"class":275},[41,79654,79655,79657,79660],{"class":43,"line":32939},[41,79656,79524],{"class":275},[41,79658,79659],{"class":378},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[41,79661,31569],{"class":275},[41,79663,79664],{"class":43,"line":32945},[41,79665,77995],{"class":275},[41,79667,79668],{"class":43,"line":32954},[41,79669,79489],{"class":275},[41,79671,79672,79674,79677],{"class":43,"line":32960},[41,79673,79494],{"class":275},[41,79675,79676],{"class":378},"'4001649'",[41,79678,31569],{"class":275},[41,79680,79681,79683,79686],{"class":43,"line":32969},[41,79682,79504],{"class":275},[41,79684,79685],{"class":378},"'大师监制龙泉青瓷茶叶罐'",[41,79687,31569],{"class":275},[41,79689,79690,79692,79695],{"class":43,"line":32975},[41,79691,79514],{"class":275},[41,79693,79694],{"class":378},"'139.00'",[41,79696,31569],{"class":275},[41,79698,79699,79701,79704],{"class":43,"line":32981},[41,79700,79524],{"class":275},[41,79702,79703],{"class":378},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[41,79705,31569],{"class":275},[41,79707,79708],{"class":43,"line":32990},[41,79709,77995],{"class":275},[41,79711,79712],{"class":43,"line":32996},[41,79713,79489],{"class":275},[41,79715,79716,79718,79721],{"class":43,"line":33007},[41,79717,79494],{"class":275},[41,79719,79720],{"class":378},"'3997185'",[41,79722,31569],{"class":275},[41,79724,79725,79727,79730],{"class":43,"line":33013},[41,79726,79504],{"class":275},[41,79728,79729],{"class":378},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[41,79731,31569],{"class":275},[41,79733,79734,79736,79739],{"class":43,"line":33032},[41,79735,79514],{"class":275},[41,79737,79738],{"class":378},"'108.00'",[41,79740,31569],{"class":275},[41,79742,79743,79745,79748],{"class":43,"line":33038},[41,79744,79524],{"class":275},[41,79746,79747],{"class":378},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[41,79749,31569],{"class":275},[41,79751,79752],{"class":43,"line":33049},[41,79753,77995],{"class":275},[41,79755,79756],{"class":43,"line":33055},[41,79757,79489],{"class":275},[41,79759,79760,79762,79765],{"class":43,"line":33075},[41,79761,79494],{"class":275},[41,79763,79764],{"class":378},"'3997403'",[41,79766,31569],{"class":275},[41,79768,79769,79771,79774],{"class":43,"line":33091},[41,79770,79504],{"class":275},[41,79772,79773],{"class":378},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[41,79775,31569],{"class":275},[41,79777,79778,79780,79783],{"class":43,"line":33097},[41,79779,79514],{"class":275},[41,79781,79782],{"class":378},"'100.00'",[41,79784,31569],{"class":275},[41,79786,79787,79789,79792],{"class":43,"line":33111},[41,79788,79524],{"class":275},[41,79790,79791],{"class":378},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[41,79793,31569],{"class":275},[41,79795,79796],{"class":43,"line":33117},[41,79797,77995],{"class":275},[41,79799,79800],{"class":43,"line":33123},[41,79801,79489],{"class":275},[41,79803,79804,79806,79809],{"class":43,"line":33134},[41,79805,79494],{"class":275},[41,79807,79808],{"class":378},"'3998274'",[41,79810,31569],{"class":275},[41,79812,79813,79815,79818],{"class":43,"line":33140},[41,79814,79504],{"class":275},[41,79816,79817],{"class":378},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[41,79819,31569],{"class":275},[41,79821,79822,79824,79826],{"class":43,"line":33146},[41,79823,79514],{"class":275},[41,79825,79694],{"class":378},[41,79827,31569],{"class":275},[41,79829,79830,79832,79835],{"class":43,"line":33156},[41,79831,79524],{"class":275},[41,79833,79834],{"class":378},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[41,79836,31569],{"class":275},[41,79838,79839],{"class":43,"line":33162},[41,79840,77995],{"class":275},[41,79842,79843],{"class":43,"line":33173},[41,79844,53212],{"class":275},[41,79846,79847],{"class":43,"line":33179},[41,79848,80],{"emptyLinePlaceholder":79},[41,79850,79851],{"class":43,"line":33189},[41,79852,79853],{"class":47},"    \u002F\u002F 1.渲染函数\n",[41,79855,79856,79858,79860,79862,79864],{"class":43,"line":33194},[41,79857,70187],{"class":271},[41,79859,70190],{"class":54},[41,79861,276],{"class":275},[41,79863,4018],{"class":5354},[41,79865,12580],{"class":275},[41,79867,79868],{"class":43,"line":33200},[41,79869,79870],{"class":47},"      \u002F\u002F 声明空字符串\n",[41,79872,79873,79876,79879,79881],{"class":43,"line":33249},[41,79874,79875],{"class":271},"      let",[41,79877,79878],{"class":275}," str ",[41,79880,321],{"class":271},[41,79882,70207],{"class":378},[41,79884,79885],{"class":43,"line":33296},[41,79886,70212],{"class":47},[41,79888,79889,79891,79894,79896,79899,79902],{"class":43,"line":33301},[41,79890,58110],{"class":275},[41,79892,79893],{"class":54},"forEach",[41,79895,276],{"class":275},[41,79897,79898],{"class":5354},"item",[41,79900,79901],{"class":271}," =>",[41,79903,15710],{"class":275},[41,79905,79906,79908,79911,79914,79916,79919,79921,79924,79927,79929],{"class":43,"line":33307},[41,79907,61373],{"class":271},[41,79909,79910],{"class":275}," { ",[41,79912,79913],{"class":58},"name",[41,79915,12573],{"class":275},[41,79917,79918],{"class":58},"price",[41,79920,12573],{"class":275},[41,79922,79923],{"class":58},"picture",[41,79925,79926],{"class":275}," } ",[41,79928,321],{"class":271},[41,79930,79931],{"class":275}," item\n",[41,79933,79934,79937,79939],{"class":43,"line":33326},[41,79935,79936],{"class":275},"        str ",[41,79938,9615],{"class":271},[41,79940,70271],{"class":378},[41,79942,79943],{"class":43,"line":33332},[41,79944,79945],{"class":378},"          \u003Cdiv class=\"item\">\n",[41,79947,79948,79951,79953],{"class":43,"line":33352},[41,79949,79950],{"class":378},"            \u003Cimg src=\"${",[41,79952,79923],{"class":275},[41,79954,79955],{"class":378},"}\" alt=\"\">\n",[41,79957,79958,79961,79963],{"class":43,"line":33358},[41,79959,79960],{"class":378},"            \u003Cp class=\"name\">${",[41,79962,79913],{"class":275},[41,79964,79965],{"class":378},"}\u003C\u002Fp>\n",[41,79967,79968,79971,79973],{"class":43,"line":33364},[41,79969,79970],{"class":378},"            \u003Cp class=\"price\">${",[41,79972,79918],{"class":275},[41,79974,79965],{"class":378},[41,79976,79977],{"class":43,"line":33374},[41,79978,79979],{"class":378},"          \u003C\u002Fdiv>\n",[41,79981,79982],{"class":43,"line":33379},[41,79983,79984],{"class":378},"        `\n",[41,79986,79987],{"class":43,"line":33385},[41,79988,64918],{"class":275},[41,79990,79991],{"class":43,"line":33401},[41,79992,79993],{"class":47},"      \u002F\u002F 追加给List\n",[41,79995,79996,79998,80000,80002,80005,80007,80009],{"class":43,"line":33446},[41,79997,55874],{"class":275},[41,79999,54502],{"class":54},[41,80001,276],{"class":275},[41,80003,80004],{"class":378},"'.list'",[41,80006,74352],{"class":275},[41,80008,321],{"class":271},[41,80010,74088],{"class":275},[41,80012,80013],{"class":43,"line":33452},[41,80014,2326],{"class":275},[41,80016,80017],{"class":43,"line":33458},[41,80018,80019],{"class":47},"    \u002F\u002F 页面一打开就需要渲染\n",[41,80021,80022,80025],{"class":43,"line":33464},[41,80023,80024],{"class":54},"    render",[41,80026,80027],{"class":275},"(goodsList)\n",[41,80029,80030],{"class":43,"line":33475},[41,80031,80032],{"class":47},"    \u002F\u002F 2.过滤筛选\n",[41,80034,80035,80037,80039,80041,80044,80046,80048,80050,80052,80054,80056,80058],{"class":43,"line":33481},[41,80036,52510],{"class":275},[41,80038,54502],{"class":54},[41,80040,276],{"class":275},[41,80042,80043],{"class":378},"'.filter'",[41,80045,30929],{"class":275},[41,80047,57916],{"class":54},[41,80049,276],{"class":275},[41,80051,57921],{"class":378},[41,80053,12573],{"class":275},[41,80055,348],{"class":5354},[41,80057,79901],{"class":271},[41,80059,15710],{"class":275},[41,80061,80062],{"class":43,"line":33487},[41,80063,80064],{"class":47},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[41,80066,80067,80069,80071,80074,80076,80078,80080,80082],{"class":43,"line":33493},[41,80068,58331],{"class":271},[41,80070,79910],{"class":275},[41,80072,80073],{"class":58},"tagName",[41,80075,12573],{"class":275},[41,80077,31640],{"class":58},[41,80079,79926],{"class":275},[41,80081,321],{"class":271},[41,80083,80084],{"class":275}," e.target\n",[41,80086,80087],{"class":43,"line":33511},[41,80088,80089],{"class":47},"      \u002F\u002F 判断\n",[41,80091,80092,80094,80096,80098,80100],{"class":43,"line":33525},[41,80093,54583],{"class":271},[41,80095,67137],{"class":275},[41,80097,54589],{"class":271},[41,80099,68359],{"class":378},[41,80101,12580],{"class":275},[41,80103,80104],{"class":43,"line":33534},[41,80105,80106],{"class":47},"        \u002F\u002F console.log(11)\n",[41,80108,80109],{"class":43,"line":33543},[41,80110,80111],{"class":47},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[41,80113,80114],{"class":43,"line":33552},[41,80115,80116],{"class":47},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[41,80118,80119,80121,80123,80125],{"class":43,"line":33561},[41,80120,51933],{"class":271},[41,80122,51936],{"class":275},[41,80124,321],{"class":271},[41,80126,80127],{"class":275}," goodsList\n",[41,80129,80130,80132,80135,80137,80140],{"class":43,"line":33567},[41,80131,2635],{"class":271},[41,80133,80134],{"class":275}," (dataset.index ",[41,80136,54589],{"class":271},[41,80138,80139],{"class":378}," '1'",[41,80141,12580],{"class":275},[41,80143,80144,80147,80149,80152,80155,80157,80159,80161,80164,80166,80168,80171,80173,80175,80177],{"class":43,"line":33573},[41,80145,80146],{"class":275},"          arr ",[41,80148,321],{"class":271},[41,80150,80151],{"class":275}," goodsList.",[41,80153,80154],{"class":54},"filter",[41,80156,276],{"class":275},[41,80158,79898],{"class":5354},[41,80160,79901],{"class":271},[41,80162,80163],{"class":275}," item.price ",[41,80165,1850],{"class":271},[41,80167,4231],{"class":58},[41,80169,80170],{"class":271}," &&",[41,80172,80163],{"class":275},[41,80174,1729],{"class":271},[41,80176,5892],{"class":58},[41,80178,282],{"class":275},[41,80180,80181,80184,80186,80188,80190,80192,80195],{"class":43,"line":33581},[41,80182,80183],{"class":275},"        } ",[41,80185,1841],{"class":271},[41,80187,1844],{"class":271},[41,80189,80134],{"class":275},[41,80191,54589],{"class":271},[41,80193,80194],{"class":378}," '2'",[41,80196,12580],{"class":275},[41,80198,80199,80201,80203,80205,80207,80209,80211,80213,80215,80217,80219,80221,80223,80225,80228],{"class":43,"line":33586},[41,80200,80146],{"class":275},[41,80202,321],{"class":271},[41,80204,80151],{"class":275},[41,80206,80154],{"class":54},[41,80208,276],{"class":275},[41,80210,79898],{"class":5354},[41,80212,79901],{"class":271},[41,80214,80163],{"class":275},[41,80216,1850],{"class":271},[41,80218,5892],{"class":58},[41,80220,80170],{"class":271},[41,80222,80163],{"class":275},[41,80224,1729],{"class":271},[41,80226,80227],{"class":58}," 300",[41,80229,282],{"class":275},[41,80231,80232,80234,80236,80238,80240,80242,80245],{"class":43,"line":33592},[41,80233,80183],{"class":275},[41,80235,1841],{"class":271},[41,80237,1844],{"class":271},[41,80239,80134],{"class":275},[41,80241,54589],{"class":271},[41,80243,80244],{"class":378}," '3'",[41,80246,12580],{"class":275},[41,80248,80249,80251,80253,80255,80257,80259,80261,80263,80265,80267,80269],{"class":43,"line":33603},[41,80250,80146],{"class":275},[41,80252,321],{"class":271},[41,80254,80151],{"class":275},[41,80256,80154],{"class":54},[41,80258,276],{"class":275},[41,80260,79898],{"class":5354},[41,80262,79901],{"class":271},[41,80264,80163],{"class":275},[41,80266,1850],{"class":271},[41,80268,80227],{"class":58},[41,80270,282],{"class":275},[41,80272,80273],{"class":43,"line":33609},[41,80274,2667],{"class":275},[41,80276,80277],{"class":43,"line":33629},[41,80278,80279],{"class":47},"        \u002F\u002F 渲染函数\n",[41,80281,80282,80284],{"class":43,"line":33635},[41,80283,70511],{"class":54},[41,80285,52515],{"class":275},[41,80287,80288],{"class":43,"line":33641},[41,80289,52501],{"class":275},[41,80291,80292],{"class":43,"line":33647},[41,80293,80],{"emptyLinePlaceholder":79},[41,80295,80296],{"class":43,"line":33664},[41,80297,33564],{"class":275},[41,80299,80300,80302,80304],{"class":43,"line":33670},[41,80301,52520],{"class":275},[41,80303,51916],{"class":51403},[41,80305,51410],{"class":275},[41,80307,80308,80310,80312],{"class":43,"line":33676},[41,80309,51888],{"class":275},[41,80311,51903],{"class":51403},[41,80313,51410],{"class":275},[41,80315,80316],{"class":43,"line":33682},[41,80317,80],{"emptyLinePlaceholder":79},[41,80319,80320,80322,80324],{"class":43,"line":33688},[41,80321,51888],{"class":275},[41,80323,50738],{"class":51403},[41,80325,51410],{"class":275},[15,80327,80329],{"id":80328},"_410-深入了解对象","4.10 深入了解对象",[241,80331,80333],{"id":80332},"_4101-创建对象","4.10.1 创建对象",[20,80335,80336],{},[1603,80337],{"alt":37,"src":80338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[20,80340,80341],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[241,80343,80345],{"id":80344},"_4102-构造函数","4.10.2 构造函数",[20,80347,80348,80351],{},[423,80349,80350],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[20,80353,80354,80357],{},[423,80355,80356],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[32,80359,80361],{"className":50736,"code":80360,"language":50738,"meta":37,"style":37},"\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",[24,80362,80363,80371,80376,80397,80410,80422,80434,80438,80443,80470,80475,80502],{"__ignoreMap":37},[41,80364,80365,80367,80369],{"class":43,"line":44},[41,80366,1183],{"class":275},[41,80368,51916],{"class":51403},[41,80370,51410],{"class":275},[41,80372,80373],{"class":43,"line":51},[41,80374,80375],{"class":47},"\u002F\u002F例：\n",[41,80377,80378,80380,80383,80385,80387,80389,80391,80393,80395],{"class":43,"line":62},[41,80379,54552],{"class":271},[41,80381,80382],{"class":54}," Pig",[41,80384,276],{"class":275},[41,80386,79913],{"class":5354},[41,80388,651],{"class":275},[41,80390,70324],{"class":5354},[41,80392,651],{"class":275},[41,80394,70341],{"class":5354},[41,80396,12580],{"class":275},[41,80398,80399,80402,80405,80407],{"class":43,"line":70},[41,80400,80401],{"class":58},"    this",[41,80403,80404],{"class":275},".name",[41,80406,321],{"class":271},[41,80408,80409],{"class":275},"name\n",[41,80411,80412,80414,80417,80419],{"class":43,"line":76},[41,80413,80401],{"class":58},[41,80415,80416],{"class":275},".age",[41,80418,321],{"class":271},[41,80420,80421],{"class":275},"age\n",[41,80423,80424,80426,80429,80431],{"class":43,"line":83},[41,80425,80401],{"class":58},[41,80427,80428],{"class":275},".gender",[41,80430,321],{"class":271},[41,80432,80433],{"class":275},"gender    \n",[41,80435,80436],{"class":43,"line":89},[41,80437,1706],{"class":275},[41,80439,80440],{"class":43,"line":96},[41,80441,80442],{"class":47},"\u002F\u002F创建佩奇对象\n",[41,80444,80445,80447,80450,80452,80454,80456,80459,80461,80463,80465,80468],{"class":43,"line":104},[41,80446,6930],{"class":271},[41,80448,80449],{"class":58}," Peppa",[41,80451,11855],{"class":271},[41,80453,80382],{"class":54},[41,80455,276],{"class":275},[41,80457,80458],{"class":378},"'佩奇'",[41,80460,651],{"class":275},[41,80462,617],{"class":58},[41,80464,651],{"class":275},[41,80466,80467],{"class":378},"'女'",[41,80469,282],{"class":275},[41,80471,80472],{"class":43,"line":176},[41,80473,80474],{"class":47},"\u002F\u002F创建乔治对象\n",[41,80476,80477,80479,80482,80484,80486,80488,80491,80493,80495,80497,80500],{"class":43,"line":184},[41,80478,6930],{"class":271},[41,80480,80481],{"class":58}," George",[41,80483,11855],{"class":271},[41,80485,80382],{"class":54},[41,80487,276],{"class":275},[41,80489,80490],{"class":378},"'乔治'",[41,80492,651],{"class":275},[41,80494,345],{"class":58},[41,80496,651],{"class":275},[41,80498,80499],{"class":378},"'男'",[41,80501,282],{"class":275},[41,80503,80504,80506,80508],{"class":43,"line":1757},[41,80505,51888],{"class":275},[41,80507,51916],{"class":51403},[41,80509,51410],{"class":275},[20,80511,80512],{},[1603,80513],{"alt":37,"src":80514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[20,80516,80517],{},[1603,80518],{"alt":37,"src":80519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[20,80521,80522],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[20,80524,80525],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[20,80527,80528],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[20,80530,80531],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[20,80533,80534],{},"这里用等号是因为：对象.属性=值",[20,80536,80537],{},"①利用对象字面量创建对象",[20,80539,80540],{},"const o={",[20,80542,80543],{},"name:'pink'",[20,80545,80546],{},"} ②利用new Object创建对象",[20,80548,80549],{},"const o=new Object({name:'pink'})",[20,80551,80552],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[20,80554,80555],{},"构造函数创建对象的执行过程：",[20,80557,80558],{},[1603,80559],{"alt":37,"src":80560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[241,80562,80564],{"id":80563},"_4103-实例成员","4.10.3 实例成员",[20,80566,80567],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[224,80569,80570,80573,80576],{},[227,80571,80572],{},"实例对象的属性和方法即为实例成员",[227,80574,80575],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[227,80577,80578],{},"构造函数创建的实例对象彼此独立互不影响",[241,80580,80582],{"id":80581},"_4104-静态成员","4.10.4 静态成员",[20,80584,80585],{},[1603,80586],{"alt":37,"src":80587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[20,80589,80590],{},"静态成员有Date.now() Math.PI Math.random()",[20,80592,80593],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[20,80595,80596],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[20,80598,80599],{},"function Pig(name) n {",[20,80601,80602],{},"this.name=name",[20,80604,1219],{},[20,80606,80607],{},"Pig.eyes=2",[20,80609,80610],{},"Pig.sayHai=function () { console.log(this) }",[20,80612,80613],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[20,80615,80616],{},"console.log(Pig.eyes) \u002F\u002F2",[20,80618,11470],{},[224,80620,80621,80624,80627,80630,80633],{},[227,80622,80623],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[227,80625,80626],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[227,80628,80629],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[227,80631,80632],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[227,80634,80635],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[20,80637,80638],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[241,80640,80642],{"id":80641},"_4105-内置构造函数","4.10.5 内置构造函数",[20,80644,80645],{},"内置构造函数包含：",[20,80647,80648],{},[1603,80649],{"alt":37,"src":80650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[20,80652,80653],{},[1603,80654],{"alt":37,"src":80655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[20,80657,80658],{},"这些基本数据类型，js对他们进行了包装",[51916,80660,80661],{},"\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",[22136,80663,80665],{"id":80664},"_41051-object","4.10.5.1 Object",[20,80667,80668],{},"Object 是内置的构造函数，用于创建普通对象",[20,80670,80671],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[32,80673,80675],{"className":50736,"code":80674,"language":50738,"meta":37,"style":37},"const user=new Object({name:'小明',age:15})\n",[24,80676,80677],{"__ignoreMap":37},[41,80678,80679],{"class":43,"line":44},[41,80680,80674],{"class":275},[20,80682,80683],{},"三个常用的静态方法：",[23048,80685,80687],{"id":80686},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[20,80689,80690],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[20,80692,80693],{},[1603,80694],{"alt":37,"src":80695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[20,80697,80698],{},[1603,80699],{"alt":37,"src":80700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[32,80702,80704],{"className":53170,"code":80703,"language":53172,"meta":37,"style":37},"\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",[24,80705,80706,80714,80722,80727,80732,80737,80742,80747,80752,80760],{"__ignoreMap":37},[41,80707,80708,80710,80712],{"class":43,"line":44},[41,80709,1183],{"class":275},[41,80711,51903],{"class":51403},[41,80713,51410],{"class":275},[41,80715,80716,80718,80720],{"class":43,"line":51},[41,80717,52247],{"class":275},[41,80719,51916],{"class":51403},[41,80721,51410],{"class":275},[41,80723,80724],{"class":43,"line":62},[41,80725,80726],{"class":275},"    const o = { name: 'pink', age: 6 }\n",[41,80728,80729],{"class":43,"line":70},[41,80730,80731],{"class":275},"    \u002F\u002F 获得所有属性名\n",[41,80733,80734],{"class":43,"line":76},[41,80735,80736],{"class":275},"    const arr = Object.keys(o)\n",[41,80738,80739],{"class":43,"line":83},[41,80740,80741],{"class":275},"    console.log(arr)\n",[41,80743,80744],{"class":43,"line":89},[41,80745,80746],{"class":275},"    \u002F\u002F 获得所有属性值\n",[41,80748,80749],{"class":43,"line":96},[41,80750,80751],{"class":275},"    console.log(Object.values(o))\n",[41,80753,80754,80756,80758],{"class":43,"line":104},[41,80755,52520],{"class":275},[41,80757,51916],{"class":51403},[41,80759,51410],{"class":275},[41,80761,80762,80764,80766],{"class":43,"line":176},[41,80763,51888],{"class":275},[41,80765,51903],{"class":51403},[41,80767,51410],{"class":275},[23048,80769,80771],{"id":80770},"_410512-object-assign","4.10.5.1.2 Object. assign",[20,80773,80774],{},"Object.assign(oo,o)",[20,80776,80777],{},"后的东西添加给前 是追加",[20,80779,80780],{},[1603,80781],{"alt":37,"src":80782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[20,80784,80785],{},[1603,80786],{"alt":37,"src":80787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[32,80789,80791],{"className":53170,"code":80790,"language":53172,"meta":37,"style":37},"\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",[24,80792,80793,80801,80809,80813,80817,80821,80825,80829,80833,80838,80843,80848,80853,80858,80866],{"__ignoreMap":37},[41,80794,80795,80797,80799],{"class":43,"line":44},[41,80796,1183],{"class":275},[41,80798,51903],{"class":51403},[41,80800,51410],{"class":275},[41,80802,80803,80805,80807],{"class":43,"line":51},[41,80804,52247],{"class":275},[41,80806,51916],{"class":51403},[41,80808,51410],{"class":275},[41,80810,80811],{"class":43,"line":62},[41,80812,80726],{"class":275},[41,80814,80815],{"class":43,"line":70},[41,80816,80731],{"class":275},[41,80818,80819],{"class":43,"line":76},[41,80820,80736],{"class":275},[41,80822,80823],{"class":43,"line":83},[41,80824,80741],{"class":275},[41,80826,80827],{"class":43,"line":89},[41,80828,80746],{"class":275},[41,80830,80831],{"class":43,"line":96},[41,80832,80751],{"class":275},[41,80834,80835],{"class":43,"line":104},[41,80836,80837],{"class":275},"    const oo = {}\n",[41,80839,80840],{"class":43,"line":176},[41,80841,80842],{"class":275},"    Object.assign(oo, o)\n",[41,80844,80845],{"class":43,"line":184},[41,80846,80847],{"class":275},"    console.log(oo)\n",[41,80849,80850],{"class":43,"line":1757},[41,80851,80852],{"class":275},"    Object.assign(o, { gender: '女' })\n",[41,80854,80855],{"class":43,"line":1763},[41,80856,80857],{"class":275},"    console.log(o)\n",[41,80859,80860,80862,80864],{"class":43,"line":1768},[41,80861,52520],{"class":275},[41,80863,51916],{"class":51403},[41,80865,51410],{"class":275},[41,80867,80868,80870,80872],{"class":43,"line":1782},[41,80869,51888],{"class":275},[41,80871,51903],{"class":51403},[41,80873,51410],{"class":275},[20,80875,80876],{},[1603,80877],{"alt":37,"src":80878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22136,80880,80882],{"id":80881},"_41052-array","4.10.5.2 Array",[20,80884,80885],{},"Array 是内置的构造函数，用于创建数组",[20,80887,80888],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[32,80890,80892],{"className":50736,"code":80891,"language":50738,"meta":37,"style":37},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[24,80893,80894,80899],{"__ignoreMap":37},[41,80895,80896],{"class":43,"line":44},[41,80897,80898],{"class":275},"const arr=new Array(3,5)\n",[41,80900,80901],{"class":43,"line":51},[41,80902,80903],{"class":275},"console.log(arr)  \u002F\u002F[3,5]\n",[20,80905,80906],{},"Array的实例方法，这个方法是实例成员",[20,80908,80909],{},[1603,80910],{"alt":37,"src":80911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23048,80913,80915],{"id":80914},"_410521-reduce","4.10.5.2.1 reduce",[20,80917,80918],{},[1603,80919],{"alt":37,"src":80920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[32,80922,80924],{"className":53170,"code":80923,"language":53172,"meta":37,"style":37},"\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",[24,80925,80926,80934,80942,80947,80952,80957,80962,80966,80971,80976,80981,80985,80990,80995,80999,81004,81009,81014,81022],{"__ignoreMap":37},[41,80927,80928,80930,80932],{"class":43,"line":44},[41,80929,1183],{"class":275},[41,80931,51903],{"class":51403},[41,80933,51410],{"class":275},[41,80935,80936,80938,80940],{"class":43,"line":51},[41,80937,52247],{"class":275},[41,80939,51916],{"class":51403},[41,80941,51410],{"class":275},[41,80943,80944],{"class":43,"line":62},[41,80945,80946],{"class":275},"    const arr = [1, 5, 8]\n",[41,80948,80949],{"class":43,"line":70},[41,80950,80951],{"class":275},"    \u002F\u002F 1.没有初始值\n",[41,80953,80954],{"class":43,"line":76},[41,80955,80956],{"class":275},"    const total = arr.reduce(function (prev, current) {\n",[41,80958,80959],{"class":43,"line":83},[41,80960,80961],{"class":275},"      return prev + current\n",[41,80963,80964],{"class":43,"line":89},[41,80965,33564],{"class":275},[41,80967,80968],{"class":43,"line":96},[41,80969,80970],{"class":275},"    console.log(total)   \u002F\u002F14\n",[41,80972,80973],{"class":43,"line":104},[41,80974,80975],{"class":275},"    \u002F\u002F 2.有初始值\n",[41,80977,80978],{"class":43,"line":176},[41,80979,80980],{"class":275},"    const total1 = arr.reduce(function (prev, current) {\n",[41,80982,80983],{"class":43,"line":184},[41,80984,80961],{"class":275},[41,80986,80987],{"class":43,"line":1757},[41,80988,80989],{"class":275},"    }, 10)\n",[41,80991,80992],{"class":43,"line":1763},[41,80993,80994],{"class":275},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[41,80996,80997],{"class":43,"line":1768},[41,80998,80],{"emptyLinePlaceholder":79},[41,81000,81001],{"class":43,"line":1782},[41,81002,81003],{"class":275},"    \u002F\u002F 3.箭头函数写法\n",[41,81005,81006],{"class":43,"line":1787},[41,81007,81008],{"class":275},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[41,81010,81011],{"class":43,"line":1793},[41,81012,81013],{"class":275},"    console.log(total2)   \u002F\u002F24\n",[41,81015,81016,81018,81020],{"class":43,"line":1814},[41,81017,52520],{"class":275},[41,81019,51916],{"class":51403},[41,81021,51410],{"class":275},[41,81023,81024,81026,81028],{"class":43,"line":1819},[41,81025,51888],{"class":275},[41,81027,51903],{"class":51403},[41,81029,51410],{"class":275},[20,81031,81032],{},"执行过程：",[224,81034,81035,81038,81041],{},[227,81036,81037],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[227,81039,81040],{},"每一次循环，把返回值给作为下一次循环的上一次值",[227,81042,81043],{},"如果有起始值，则起始值作为上一次值",[32,81045,81047],{"className":53170,"code":81046,"language":53172,"meta":37,"style":37},"\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",[24,81048,81049,81057,81065,81069,81073,81077,81081,81085,81089,81094,81099,81104,81109,81114,81118,81122,81126,81130,81134,81138,81143,81147,81152,81156,81161,81166,81170,81174,81178,81186],{"__ignoreMap":37},[41,81050,81051,81053,81055],{"class":43,"line":44},[41,81052,1183],{"class":275},[41,81054,51903],{"class":51403},[41,81056,51410],{"class":275},[41,81058,81059,81061,81063],{"class":43,"line":51},[41,81060,52247],{"class":275},[41,81062,51916],{"class":51403},[41,81064,51410],{"class":275},[41,81066,81067],{"class":43,"line":62},[41,81068,80946],{"class":275},[41,81070,81071],{"class":43,"line":70},[41,81072,80951],{"class":275},[41,81074,81075],{"class":43,"line":76},[41,81076,80956],{"class":275},[41,81078,81079],{"class":43,"line":83},[41,81080,80961],{"class":275},[41,81082,81083],{"class":43,"line":89},[41,81084,33564],{"class":275},[41,81086,81087],{"class":43,"line":96},[41,81088,80970],{"class":275},[41,81090,81091],{"class":43,"line":104},[41,81092,81093],{"class":275},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[41,81095,81096],{"class":43,"line":176},[41,81097,81098],{"class":275},"    \u002F\u002F     1              5                    6\n",[41,81100,81101],{"class":43,"line":184},[41,81102,81103],{"class":275},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[41,81105,81106],{"class":43,"line":1757},[41,81107,81108],{"class":275},"    \u002F\u002F     6              8                    14\n",[41,81110,81111],{"class":43,"line":1763},[41,81112,81113],{"class":275},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[41,81115,81116],{"class":43,"line":1768},[41,81117,80975],{"class":275},[41,81119,81120],{"class":43,"line":1782},[41,81121,80980],{"class":275},[41,81123,81124],{"class":43,"line":1787},[41,81125,80961],{"class":275},[41,81127,81128],{"class":43,"line":1793},[41,81129,80989],{"class":275},[41,81131,81132],{"class":43,"line":1814},[41,81133,80994],{"class":275},[41,81135,81136],{"class":43,"line":1819},[41,81137,81093],{"class":275},[41,81139,81140],{"class":43,"line":1833},[41,81141,81142],{"class":275},"    \u002F\u002F     10             1                     11\n",[41,81144,81145],{"class":43,"line":1838},[41,81146,81103],{"class":275},[41,81148,81149],{"class":43,"line":1867},[41,81150,81151],{"class":275},"    \u002F\u002F     11             5                    16\n",[41,81153,81154],{"class":43,"line":1872},[41,81155,81103],{"class":275},[41,81157,81158],{"class":43,"line":1889},[41,81159,81160],{"class":275},"    \u002F\u002F     16             8                    24\n",[41,81162,81163],{"class":43,"line":1894},[41,81164,81165],{"class":275},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[41,81167,81168],{"class":43,"line":1899},[41,81169,81003],{"class":275},[41,81171,81172],{"class":43,"line":1904},[41,81173,81008],{"class":275},[41,81175,81176],{"class":43,"line":1918},[41,81177,81013],{"class":275},[41,81179,81180,81182,81184],{"class":43,"line":1923},[41,81181,52520],{"class":275},[41,81183,51916],{"class":51403},[41,81185,51410],{"class":275},[41,81187,81188,81190,81192],{"class":43,"line":2715},[41,81189,51888],{"class":275},[41,81191,51903],{"class":51403},[41,81193,51410],{"class":275},[23048,81195,81197],{"id":81196},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[20,81199,81200],{},[1603,81201],{"alt":37,"src":81202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[32,81204,81206],{"className":53170,"code":81205,"language":53172,"meta":37,"style":37},"\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",[24,81207,81208,81216,81224,81229,81234,81239,81244,81248,81253,81258,81263,81268,81273,81278,81282,81287,81291,81296,81304],{"__ignoreMap":37},[41,81209,81210,81212,81214],{"class":43,"line":44},[41,81211,1183],{"class":275},[41,81213,51903],{"class":51403},[41,81215,51410],{"class":275},[41,81217,81218,81220,81222],{"class":43,"line":51},[41,81219,52247],{"class":275},[41,81221,51916],{"class":51403},[41,81223,51410],{"class":275},[41,81225,81226],{"class":43,"line":62},[41,81227,81228],{"class":275},"    const arr = [\n",[41,81230,81231],{"class":43,"line":70},[41,81232,81233],{"class":275},"      { name: '张三', salary: 10000 },\n",[41,81235,81236],{"class":43,"line":76},[41,81237,81238],{"class":275},"      { name: '李四', salary: 10000 },\n",[41,81240,81241],{"class":43,"line":83},[41,81242,81243],{"class":275},"      { name: '王五', salary: 10000 }\n",[41,81245,81246],{"class":43,"line":89},[41,81247,53212],{"class":275},[41,81249,81250],{"class":43,"line":96},[41,81251,81252],{"class":275},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[41,81254,81255],{"class":43,"line":104},[41,81256,81257],{"class":275},"    \u002F\u002F prev是累计值\n",[41,81259,81260],{"class":43,"line":176},[41,81261,81262],{"class":275},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[41,81264,81265],{"class":43,"line":184},[41,81266,81267],{"class":275},"    console.log(total)\n",[41,81269,81270],{"class":43,"line":1757},[41,81271,81272],{"class":275},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[41,81274,81275],{"class":43,"line":1763},[41,81276,81277],{"class":275},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[41,81279,81280],{"class":43,"line":1768},[41,81281,81272],{"class":275},[41,81283,81284],{"class":43,"line":1782},[41,81285,81286],{"class":275},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[41,81288,81289],{"class":43,"line":1787},[41,81290,81272],{"class":275},[41,81292,81293],{"class":43,"line":1793},[41,81294,81295],{"class":275},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[41,81297,81298,81300,81302],{"class":43,"line":1814},[41,81299,52520],{"class":275},[41,81301,51916],{"class":51403},[41,81303,51410],{"class":275},[41,81305,81306,81308,81310],{"class":43,"line":1819},[41,81307,51888],{"class":275},[41,81309,51903],{"class":51403},[41,81311,51410],{"class":275},[23048,81313,81315],{"id":81314},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[20,81317,81318],{},[1603,81319],{"alt":37,"src":81320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[20,81322,81323],{},[1603,81324],{"alt":37,"src":81325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[224,81327,81328],{},[227,81329,81330],{},"find()",[20,81332,81333],{},"循环查找，找到第一个就ok",[20,81335,81336],{},[511,81337,81340],{"href":81338,"rel":81339},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24001],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[32,81342,81344],{"className":50736,"code":81343,"language":50738,"meta":37,"style":37},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[24,81345,81346,81351,81356],{"__ignoreMap":37},[41,81347,81348],{"class":43,"line":44},[41,81349,81350],{"class":275},"const array1 = [5, 12, 8, 130, 44]\n",[41,81352,81353],{"class":43,"line":51},[41,81354,81355],{"class":275},"const found = array1.find((element) => element > 10)\n",[41,81357,81358],{"class":43,"line":62},[41,81359,81360],{"class":275},"console.log(found)  \u002F\u002F12\n",[20,81362,81363,81365,81366,81371,81372,81375,81376,81378,81379,81384,81385,81387,81388,81390,81391,81393,81394],{},[24,81364,81330],{}," 方法是一个",[511,81367,81370],{"href":81368,"rel":81369},"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",[24001],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[24,81373,81374],{},"callbackFn"," 函数，直到 ",[24,81377,81374],{}," 返回一个",[511,81380,81383],{"href":81381,"rel":81382},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24001],"真值","。然后 ",[24,81386,81330],{}," 返回该元素并停止迭代数组。如果 ",[24,81389,81374],{}," 从未返回真值，则 ",[24,81392,81330],{}," 返回 ",[24,81395,81396],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[32,81398,81400],{"className":53170,"code":81399,"language":53172,"meta":37,"style":37},"\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",[24,81401,81402,81410,81418,81423,81428,81433,81437,81442,81447,81451,81456,81461,81465,81469,81474,81479,81483,81487,81492,81497,81502,81507,81512,81516,81521,81526,81531,81536,81540,81545,81553],{"__ignoreMap":37},[41,81403,81404,81406,81408],{"class":43,"line":44},[41,81405,1183],{"class":275},[41,81407,51903],{"class":51403},[41,81409,51410],{"class":275},[41,81411,81412,81414,81416],{"class":43,"line":51},[41,81413,52247],{"class":275},[41,81415,51916],{"class":51403},[41,81417,51410],{"class":275},[41,81419,81420],{"class":43,"line":62},[41,81421,81422],{"class":275},"    const arr = ['red', 'blue', 'green']\n",[41,81424,81425],{"class":43,"line":70},[41,81426,81427],{"class":275},"    const found = arr.find(item => item === 'pink')\n",[41,81429,81430],{"class":43,"line":76},[41,81431,81432],{"class":275},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[41,81434,81435],{"class":43,"line":83},[41,81436,80],{"emptyLinePlaceholder":79},[41,81438,81439],{"class":43,"line":89},[41,81440,81441],{"class":275},"    \u002F\u002F 使用场景，用于查找数据\n",[41,81443,81444],{"class":43,"line":96},[41,81445,81446],{"class":275},"    const arr1 = [\n",[41,81448,81449],{"class":43,"line":104},[41,81450,79489],{"class":275},[41,81452,81453],{"class":43,"line":176},[41,81454,81455],{"class":275},"        name: '小米',\n",[41,81457,81458],{"class":43,"line":184},[41,81459,81460],{"class":275},"        price: 1999\n",[41,81462,81463],{"class":43,"line":1757},[41,81464,77995],{"class":275},[41,81466,81467],{"class":43,"line":1763},[41,81468,79489],{"class":275},[41,81470,81471],{"class":43,"line":1768},[41,81472,81473],{"class":275},"        name: '华为',\n",[41,81475,81476],{"class":43,"line":1782},[41,81477,81478],{"class":275},"        price: 3999\n",[41,81480,81481],{"class":43,"line":1787},[41,81482,52501],{"class":275},[41,81484,81485],{"class":43,"line":1793},[41,81486,53212],{"class":275},[41,81488,81489],{"class":43,"line":1814},[41,81490,81491],{"class":275},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[41,81493,81494],{"class":43,"line":1819},[41,81495,81496],{"class":275},"    \u002F\u002F const found1 = arr1.find(item => {\n",[41,81498,81499],{"class":43,"line":1833},[41,81500,81501],{"class":275},"    \u002F\u002F   if (item.name === '小米') {\n",[41,81503,81504],{"class":43,"line":1838},[41,81505,81506],{"class":275},"    \u002F\u002F     return item\n",[41,81508,81509],{"class":43,"line":1867},[41,81510,81511],{"class":275},"    \u002F\u002F   }\n",[41,81513,81514],{"class":43,"line":1872},[41,81515,63393],{"class":275},[41,81517,81518],{"class":43,"line":1889},[41,81519,81520],{"class":275},"    \u002F\u002F 另一种写法\n",[41,81522,81523],{"class":43,"line":1894},[41,81524,81525],{"class":275},"    const found1 = arr1.find(item => {\n",[41,81527,81528],{"class":43,"line":1899},[41,81529,81530],{"class":275},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[41,81532,81533],{"class":43,"line":1904},[41,81534,81535],{"class":275},"      return item.name = '小米'\n",[41,81537,81538],{"class":43,"line":1918},[41,81539,33564],{"class":275},[41,81541,81542],{"class":43,"line":1923},[41,81543,81544],{"class":275},"    console.log(found1)\n",[41,81546,81547,81549,81551],{"class":43,"line":2715},[41,81548,52520],{"class":275},[41,81550,51916],{"class":51403},[41,81552,51410],{"class":275},[41,81554,81555,81557,81559],{"class":43,"line":2729},[41,81556,51888],{"class":275},[41,81558,51903],{"class":51403},[41,81560,51410],{"class":275},[20,81562,81563],{},[1603,81564],{"alt":37,"src":81565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[20,81567,81568],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[224,81570,81571],{"start":51},[227,81572,81573],{},"every()返回的是布尔值",[20,81575,81576],{},[511,81577,81580],{"href":81578,"rel":81579},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24001],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[20,81582,81583],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[20,81585,81586],{},"some是只有有一个就没问题",[20,81588,81589],{},"every是必须全是才行",[32,81591,81595],{"className":81592,"code":81593,"language":81594,"meta":37,"style":37},"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",[24,81596,81597,81613,81627,81631,81640],{"__ignoreMap":37},[41,81598,81599,81601,81604,81606,81608,81611],{"class":43,"line":44},[41,81600,54552],{"class":271},[41,81602,81603],{"class":275}," isBigEnough(element, ",[41,81605,74161],{"class":271},[41,81607,12573],{"class":275},[41,81609,81610],{"class":271},"array",[41,81612,12580],{"class":275},[41,81614,81615,81618,81621,81623,81625],{"class":43,"line":51},[41,81616,81617],{"class":271},"  return",[41,81619,81620],{"class":275}," element ",[41,81622,1850],{"class":271},[41,81624,2177],{"class":58},[41,81626,1434],{"class":275},[41,81628,81629],{"class":43,"line":62},[41,81630,1706],{"class":275},[41,81632,81633,81636,81638],{"class":43,"line":70},[41,81634,81635],{"class":275},"[12, 5, 8, 130, 44].every(isBigEnough); ",[41,81637,33432],{"class":271},[41,81639,54619],{"class":275},[41,81641,81642,81645,81647],{"class":43,"line":76},[41,81643,81644],{"class":275},"[12, 54, 18, 130, 44].every(isBigEnough); ",[41,81646,33432],{"class":271},[41,81648,58043],{"class":275},[32,81650,81652],{"className":53170,"code":81651,"language":53172,"meta":37,"style":37},"\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",[24,81653,81654,81662,81670,81675,81679,81684,81689,81697],{"__ignoreMap":37},[41,81655,81656,81658,81660],{"class":43,"line":44},[41,81657,1183],{"class":275},[41,81659,51903],{"class":51403},[41,81661,51410],{"class":275},[41,81663,81664,81666,81668],{"class":43,"line":51},[41,81665,52247],{"class":275},[41,81667,51916],{"class":51403},[41,81669,51410],{"class":275},[41,81671,81672],{"class":43,"line":62},[41,81673,81674],{"class":275},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[41,81676,81677],{"class":43,"line":70},[41,81678,78425],{"class":275},[41,81680,81681],{"class":43,"line":76},[41,81682,81683],{"class":275},"    const flag = arr.every(item => item >= 10)\n",[41,81685,81686],{"class":43,"line":83},[41,81687,81688],{"class":275},"    console.log(flag)    \u002F\u002Ftrue\n",[41,81690,81691,81693,81695],{"class":43,"line":89},[41,81692,52520],{"class":275},[41,81694,51916],{"class":51403},[41,81696,51410],{"class":275},[41,81698,81699,81701,81703],{"class":43,"line":96},[41,81700,51888],{"class":275},[41,81702,51903],{"class":51403},[41,81704,51410],{"class":275},[32,81706,81708],{"className":53170,"code":81707,"language":53172,"meta":37,"style":37},"\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",[24,81709,81710,81718,81726,81730,81735,81740,81745,81753],{"__ignoreMap":37},[41,81711,81712,81714,81716],{"class":43,"line":44},[41,81713,1183],{"class":275},[41,81715,51903],{"class":51403},[41,81717,51410],{"class":275},[41,81719,81720,81722,81724],{"class":43,"line":51},[41,81721,52247],{"class":275},[41,81723,51916],{"class":51403},[41,81725,51410],{"class":275},[41,81727,81728],{"class":43,"line":62},[41,81729,81674],{"class":275},[41,81731,81732],{"class":43,"line":70},[41,81733,81734],{"class":275},"    const arr = [10, 0, 5]\n",[41,81736,81737],{"class":43,"line":76},[41,81738,81739],{"class":275},"    const flag = arr.some(item => item >= 10)\n",[41,81741,81742],{"class":43,"line":83},[41,81743,81744],{"class":275},"    console.log(flag)   \u002F\u002Ftrue\n",[41,81746,81747,81749,81751],{"class":43,"line":89},[41,81748,52520],{"class":275},[41,81750,51916],{"class":51403},[41,81752,51410],{"class":275},[41,81754,81755,81757,81759],{"class":43,"line":96},[41,81756,51888],{"class":275},[41,81758,51903],{"class":51403},[41,81760,51410],{"class":275},[23048,81762,81764],{"id":81763},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[20,81766,81767],{},[1603,81768],{"alt":37,"src":81769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[32,81771,81773],{"className":50736,"code":81772,"language":50738,"meta":37,"style":37},"\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",[24,81774,81775,81785,81799,81803,81811,81825,81845,81857,81865,81872,81884,81896,81908,81920,81930,81940,81944,81952,81960,81964,81972,81984,81992,82014,82019,82024,82057,82065,82073,82077],{"__ignoreMap":37},[41,81776,81777,81779,81781,81783],{"class":43,"line":44},[41,81778,51400],{"class":275},[41,81780,51404],{"class":51403},[41,81782,51407],{"class":54},[41,81784,51410],{"class":275},[41,81786,81787,81789,81791,81793,81795,81797],{"class":43,"line":51},[41,81788,1183],{"class":275},[41,81790,50738],{"class":51403},[41,81792,51419],{"class":54},[41,81794,321],{"class":275},[41,81796,51424],{"class":378},[41,81798,51410],{"class":275},[41,81800,81801],{"class":43,"line":62},[41,81802,80],{"emptyLinePlaceholder":79},[41,81804,81805,81807,81809],{"class":43,"line":70},[41,81806,1183],{"class":275},[41,81808,51437],{"class":51403},[41,81810,51410],{"class":275},[41,81812,81813,81815,81817,81819,81821,81823],{"class":43,"line":76},[41,81814,52247],{"class":275},[41,81816,51447],{"class":51403},[41,81818,51450],{"class":54},[41,81820,321],{"class":275},[41,81822,51455],{"class":378},[41,81824,51410],{"class":275},[41,81826,81827,81829,81831,81833,81835,81837,81839,81841,81843],{"class":43,"line":83},[41,81828,52247],{"class":275},[41,81830,51447],{"class":51403},[41,81832,15058],{"class":54},[41,81834,321],{"class":275},[41,81836,51494],{"class":378},[41,81838,51474],{"class":54},[41,81840,321],{"class":275},[41,81842,51501],{"class":378},[41,81844,51410],{"class":275},[41,81846,81847,81849,81851,81853,81855],{"class":43,"line":89},[41,81848,52247],{"class":275},[41,81850,51510],{"class":51403},[41,81852,51513],{"class":275},[41,81854,51510],{"class":51403},[41,81856,51410],{"class":275},[41,81858,81859,81861,81863],{"class":43,"line":96},[41,81860,52247],{"class":275},[41,81862,189],{"class":51403},[41,81864,51410],{"class":275},[41,81866,81867,81870],{"class":43,"line":104},[41,81868,81869],{"class":51403},"    div",[41,81871,15710],{"class":275},[41,81873,81874,81876,81878,81880,81882],{"class":43,"line":176},[41,81875,54874],{"class":58},[41,81877,51540],{"class":275},[41,81879,1862],{"class":58},[41,81881,51595],{"class":271},[41,81883,1434],{"class":275},[41,81885,81886,81888,81890,81892,81894],{"class":43,"line":184},[41,81887,54888],{"class":58},[41,81889,51540],{"class":275},[41,81891,674],{"class":58},[41,81893,51595],{"class":271},[41,81895,1434],{"class":275},[41,81897,81898,81900,81902,81904,81906],{"class":43,"line":1757},[41,81899,57462],{"class":58},[41,81901,51540],{"class":275},[41,81903,674],{"class":58},[41,81905,51595],{"class":271},[41,81907,1434],{"class":275},[41,81909,81910,81912,81914,81916,81918],{"class":43,"line":1763},[41,81911,65236],{"class":58},[41,81913,51540],{"class":275},[41,81915,771],{"class":58},[41,81917,51595],{"class":271},[41,81919,1434],{"class":275},[41,81921,81922,81924,81926,81928],{"class":43,"line":1768},[41,81923,57389],{"class":58},[41,81925,51540],{"class":275},[41,81927,51695],{"class":58},[41,81929,1434],{"class":275},[41,81931,81932,81934,81936,81938],{"class":43,"line":1782},[41,81933,54987],{"class":58},[41,81935,51540],{"class":275},[41,81937,51748],{"class":58},[41,81939,1434],{"class":275},[41,81941,81942],{"class":43,"line":1787},[41,81943,2326],{"class":275},[41,81945,81946,81948,81950],{"class":43,"line":1793},[41,81947,52520],{"class":275},[41,81949,189],{"class":51403},[41,81951,51410],{"class":275},[41,81953,81954,81956,81958],{"class":43,"line":1814},[41,81955,51888],{"class":275},[41,81957,51437],{"class":51403},[41,81959,51410],{"class":275},[41,81961,81962],{"class":43,"line":1819},[41,81963,80],{"emptyLinePlaceholder":79},[41,81965,81966,81968,81970],{"class":43,"line":1833},[41,81967,1183],{"class":275},[41,81969,51903],{"class":51403},[41,81971,51410],{"class":275},[41,81973,81974,81976,81978,81980,81982],{"class":43,"line":1838},[41,81975,52247],{"class":275},[41,81977,51714],{"class":51403},[41,81979,55417],{"class":275},[41,81981,51714],{"class":51403},[41,81983,51410],{"class":275},[41,81985,81986,81988,81990],{"class":43,"line":1867},[41,81987,52247],{"class":275},[41,81989,51916],{"class":51403},[41,81991,51410],{"class":275},[41,81993,81994,81996,81999,82001,82004,82007,82009,82012],{"class":43,"line":1872},[41,81995,11359],{"class":271},[41,81997,81998],{"class":58}," spec",[41,82000,13702],{"class":271},[41,82002,82003],{"class":275}," { size: ",[41,82005,82006],{"class":378},"'40cm*40cm'",[41,82008,55567],{"class":275},[41,82010,82011],{"class":378},"'黑色'",[41,82013,55707],{"class":275},[41,82015,82016],{"class":43,"line":1889},[41,82017,82018],{"class":47},"    \u002F\u002F const arr = Object.values(spec)\n",[41,82020,82021],{"class":43,"line":1894},[41,82022,82023],{"class":47},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[41,82025,82026,82028,82030,82032,82035,82037,82039,82042,82045,82048,82050,82052,82055],{"class":43,"line":1899},[41,82027,52510],{"class":275},[41,82029,54502],{"class":54},[41,82031,276],{"class":275},[41,82033,82034],{"class":378},"'div'",[41,82036,74352],{"class":275},[41,82038,321],{"class":271},[41,82040,82041],{"class":275}," Object.",[41,82043,82044],{"class":54},"values",[41,82046,82047],{"class":275},"(spec).",[41,82049,74326],{"class":54},[41,82051,276],{"class":275},[41,82053,82054],{"class":378},"'\u002F'",[41,82056,282],{"class":275},[41,82058,82059,82061,82063],{"class":43,"line":1904},[41,82060,52520],{"class":275},[41,82062,51916],{"class":51403},[41,82064,51410],{"class":275},[41,82066,82067,82069,82071],{"class":43,"line":1918},[41,82068,51888],{"class":275},[41,82070,51903],{"class":51403},[41,82072,51410],{"class":275},[41,82074,82075],{"class":43,"line":1923},[41,82076,80],{"emptyLinePlaceholder":79},[41,82078,82079,82081,82083],{"class":43,"line":2715},[41,82080,51888],{"class":275},[41,82082,50738],{"class":51403},[41,82084,51410],{"class":275},[20,82086,82087],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23048,82089,82091],{"id":82090},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[20,82093,82094],{},"静态方法，将伪数组转换为真数组",[20,82096,82097],{},[1603,82098],{"alt":37,"src":82099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[32,82101,82103],{"className":53170,"code":82102,"language":53172,"meta":37,"style":37},"\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",[24,82104,82105,82113,82121,82133,82145,82157,82165,82173,82178,82183,82188,82193,82201],{"__ignoreMap":37},[41,82106,82107,82109,82111],{"class":43,"line":44},[41,82108,1183],{"class":275},[41,82110,51903],{"class":51403},[41,82112,51410],{"class":275},[41,82114,82115,82117,82119],{"class":43,"line":51},[41,82116,52247],{"class":275},[41,82118,1280],{"class":51403},[41,82120,51410],{"class":275},[41,82122,82123,82125,82127,82129,82131],{"class":43,"line":62},[41,82124,51444],{"class":275},[41,82126,227],{"class":51403},[41,82128,55417],{"class":275},[41,82130,227],{"class":51403},[41,82132,51410],{"class":275},[41,82134,82135,82137,82139,82141,82143],{"class":43,"line":70},[41,82136,51444],{"class":275},[41,82138,227],{"class":51403},[41,82140,55417],{"class":275},[41,82142,227],{"class":51403},[41,82144,51410],{"class":275},[41,82146,82147,82149,82151,82153,82155],{"class":43,"line":76},[41,82148,51444],{"class":275},[41,82150,227],{"class":51403},[41,82152,55417],{"class":275},[41,82154,227],{"class":51403},[41,82156,51410],{"class":275},[41,82158,82159,82161,82163],{"class":43,"line":83},[41,82160,52520],{"class":275},[41,82162,1280],{"class":51403},[41,82164,51410],{"class":275},[41,82166,82167,82169,82171],{"class":43,"line":89},[41,82168,52247],{"class":275},[41,82170,51916],{"class":51403},[41,82172,51410],{"class":275},[41,82174,82175],{"class":43,"line":96},[41,82176,82177],{"class":275},"    const lis = document.querySelectorAll('li')\n",[41,82179,82180],{"class":43,"line":104},[41,82181,82182],{"class":275},"    const liss = Array.from(lis)\n",[41,82184,82185],{"class":43,"line":176},[41,82186,82187],{"class":275},"    liss.pop()\n",[41,82189,82190],{"class":43,"line":184},[41,82191,82192],{"class":275},"    console.log(liss)\n",[41,82194,82195,82197,82199],{"class":43,"line":1757},[41,82196,52520],{"class":275},[41,82198,51916],{"class":51403},[41,82200,51410],{"class":275},[41,82202,82203,82205,82207],{"class":43,"line":1763},[41,82204,51888],{"class":275},[41,82206,51903],{"class":51403},[41,82208,51410],{"class":275},[20,82210,82211],{},[1603,82212],{"alt":37,"src":82213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22136,82215,82217],{"id":82216},"_41053-string","4.10.5.3 String",[20,82219,82220],{},[1603,82221],{"alt":37,"src":82222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23048,82224,82226],{"id":82225},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[32,82228,82230],{"className":53170,"code":82229,"language":53172,"meta":37,"style":37},"\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",[24,82231,82232,82240,82248,82253,82258,82263,82267,82272,82277,82282,82290],{"__ignoreMap":37},[41,82233,82234,82236,82238],{"class":43,"line":44},[41,82235,1183],{"class":275},[41,82237,51903],{"class":51403},[41,82239,51410],{"class":275},[41,82241,82242,82244,82246],{"class":43,"line":51},[41,82243,52247],{"class":275},[41,82245,51916],{"class":51403},[41,82247,51410],{"class":275},[41,82249,82250],{"class":43,"line":62},[41,82251,82252],{"class":275},"    \u002F\u002F 把字符串转化为数组\n",[41,82254,82255],{"class":43,"line":70},[41,82256,82257],{"class":275},"    const str = 'pink,red'\n",[41,82259,82260],{"class":43,"line":76},[41,82261,82262],{"class":275},"    const arr = str.split(',')\n",[41,82264,82265],{"class":43,"line":83},[41,82266,80741],{"class":275},[41,82268,82269],{"class":43,"line":89},[41,82270,82271],{"class":275},"    const str1 = '2025-8-25'\n",[41,82273,82274],{"class":43,"line":96},[41,82275,82276],{"class":275},"    const arr1 = str1.split('-')\n",[41,82278,82279],{"class":43,"line":104},[41,82280,82281],{"class":275},"    console.log(arr1)\n",[41,82283,82284,82286,82288],{"class":43,"line":176},[41,82285,52520],{"class":275},[41,82287,51916],{"class":51403},[41,82289,51410],{"class":275},[41,82291,82292,82294,82296],{"class":43,"line":184},[41,82293,51888],{"class":275},[41,82295,51903],{"class":51403},[41,82297,51410],{"class":275},[23048,82299,82301],{"id":82300},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[20,82303,5319],{},[20,82305,82306],{},"substring(indexStart)",[20,82308,82309],{},"substring(indexStart, indexEnd)",[1280,82311,82312,82323,82335,82345],{},[227,82313,82314,82315,82318,82319,82322],{},"如果省略了 ",[24,82316,82317],{},"indexEnd","，则 ",[24,82320,82321],{},"substring()"," 提取字符直到字符串的末尾",[227,82324,82325,82326,82329,82330,82318,82332,82334],{},"如果 ",[24,82327,82328],{},"indexStart"," 等于 ",[24,82331,82317],{},[24,82333,82321],{}," 返回一个空字符串",[227,82336,82325,82337,82339,82340,82318,82342,82344],{},[24,82338,82328],{}," 大于 ",[24,82341,82317],{},[24,82343,82321],{}," 的效果就像交换了这两个参数一样",[227,82346,82347],{},"结束的索引号不包含想要截取的部分",[32,82349,82351],{"className":81592,"code":82350,"language":81594,"meta":37,"style":37},"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",[24,82352,82353,82365,82369,82403,82433,82437,82468,82472,82499,82529,82559,82563,82594],{"__ignoreMap":37},[41,82354,82355,82358,82360,82363],{"class":43,"line":44},[41,82356,82357],{"class":275},"const anyString ",[41,82359,321],{"class":271},[41,82361,82362],{"class":378}," \"Mozilla\"",[41,82364,1434],{"class":275},[41,82366,82367],{"class":43,"line":51},[41,82368,80],{"emptyLinePlaceholder":79},[41,82370,82371,82374,82376,82378,82380,82383,82385,82388,82390,82392,82394,82396,82398,82400],{"class":43,"line":62},[41,82372,82373],{"class":58},"console",[41,82375,831],{"class":275},[41,82377,58350],{"class":58},[41,82379,276],{"class":275},[41,82381,82382],{"class":58},"anyString",[41,82384,831],{"class":275},[41,82386,82387],{"class":58},"substring",[41,82389,276],{"class":275},[41,82391,465],{"class":58},[41,82393,12573],{"class":275},[41,82395,26],{"class":58},[41,82397,75356],{"class":275},[41,82399,33432],{"class":271},[41,82401,82402],{"class":378}," 'M'\n",[41,82404,82405,82407,82409,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431],{"class":43,"line":70},[41,82406,82373],{"class":58},[41,82408,831],{"class":275},[41,82410,58350],{"class":58},[41,82412,276],{"class":275},[41,82414,82382],{"class":58},[41,82416,831],{"class":275},[41,82418,82387],{"class":58},[41,82420,276],{"class":275},[41,82422,26],{"class":58},[41,82424,12573],{"class":275},[41,82426,465],{"class":58},[41,82428,75356],{"class":275},[41,82430,33432],{"class":271},[41,82432,82402],{"class":378},[41,82434,82435],{"class":43,"line":76},[41,82436,80],{"emptyLinePlaceholder":79},[41,82438,82439,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465],{"class":43,"line":83},[41,82440,82373],{"class":58},[41,82442,831],{"class":275},[41,82444,58350],{"class":58},[41,82446,276],{"class":275},[41,82448,82382],{"class":58},[41,82450,831],{"class":275},[41,82452,82387],{"class":58},[41,82454,276],{"class":275},[41,82456,465],{"class":58},[41,82458,12573],{"class":275},[41,82460,617],{"class":58},[41,82462,75356],{"class":275},[41,82464,33432],{"class":271},[41,82466,82467],{"class":378}," 'Mozill'\n",[41,82469,82470],{"class":43,"line":89},[41,82471,80],{"emptyLinePlaceholder":79},[41,82473,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492,82494,82496],{"class":43,"line":96},[41,82475,82373],{"class":58},[41,82477,831],{"class":275},[41,82479,58350],{"class":58},[41,82481,276],{"class":275},[41,82483,82382],{"class":58},[41,82485,831],{"class":275},[41,82487,82387],{"class":58},[41,82489,276],{"class":275},[41,82491,566],{"class":58},[41,82493,75356],{"class":275},[41,82495,33432],{"class":271},[41,82497,82498],{"class":378}," 'lla'\n",[41,82500,82501,82503,82505,82507,82509,82511,82513,82515,82517,82519,82521,82523,82525,82527],{"class":43,"line":104},[41,82502,82373],{"class":58},[41,82504,831],{"class":275},[41,82506,58350],{"class":58},[41,82508,276],{"class":275},[41,82510,82382],{"class":58},[41,82512,831],{"class":275},[41,82514,82387],{"class":58},[41,82516,276],{"class":275},[41,82518,566],{"class":58},[41,82520,12573],{"class":275},[41,82522,642],{"class":58},[41,82524,75412],{"class":275},[41,82526,33432],{"class":271},[41,82528,82498],{"class":378},[41,82530,82531,82533,82535,82537,82539,82541,82543,82545,82547,82549,82551,82553,82555,82557],{"class":43,"line":176},[41,82532,82373],{"class":58},[41,82534,831],{"class":275},[41,82536,58350],{"class":58},[41,82538,276],{"class":275},[41,82540,82382],{"class":58},[41,82542,831],{"class":275},[41,82544,82387],{"class":58},[41,82546,276],{"class":275},[41,82548,642],{"class":58},[41,82550,12573],{"class":275},[41,82552,566],{"class":58},[41,82554,75356],{"class":275},[41,82556,33432],{"class":271},[41,82558,82498],{"class":378},[41,82560,82561],{"class":43,"line":184},[41,82562,80],{"emptyLinePlaceholder":79},[41,82564,82565,82567,82569,82571,82573,82575,82577,82579,82581,82583,82585,82587,82589,82591],{"class":43,"line":1757},[41,82566,82373],{"class":58},[41,82568,831],{"class":275},[41,82570,58350],{"class":58},[41,82572,276],{"class":275},[41,82574,82382],{"class":58},[41,82576,831],{"class":275},[41,82578,82387],{"class":58},[41,82580,276],{"class":275},[41,82582,465],{"class":58},[41,82584,12573],{"class":275},[41,82586,642],{"class":58},[41,82588,75356],{"class":275},[41,82590,33432],{"class":271},[41,82592,82593],{"class":378}," 'Mozilla'\n",[41,82595,82596,82598,82600,82602,82604,82606,82608,82610,82612,82614,82616,82618,82620,82622],{"class":43,"line":1763},[41,82597,82373],{"class":58},[41,82599,831],{"class":275},[41,82601,58350],{"class":58},[41,82603,276],{"class":275},[41,82605,82382],{"class":58},[41,82607,831],{"class":275},[41,82609,82387],{"class":58},[41,82611,276],{"class":275},[41,82613,465],{"class":58},[41,82615,12573],{"class":275},[41,82617,719],{"class":58},[41,82619,75356],{"class":275},[41,82621,33432],{"class":271},[41,82623,82593],{"class":378},[23048,82625,82627],{"id":82626},"_410533-startswith","4.10.5.3.3 startsWith",[20,82629,82630,82633,82634,82639,82640,82642,82643],{},[24,82631,82632],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[423,82635,82636],{},[24,82637,82638],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[24,82641,1503],{}," 或 ",[24,82644,66123],{},[32,82646,82648],{"className":77598,"code":82647,"language":77600,"meta":37,"style":37},"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",[24,82649,82650,82662,82681,82686,82706],{"__ignoreMap":37},[41,82651,82652,82654,82657,82659],{"class":43,"line":44},[41,82653,6930],{"class":271},[41,82655,82656],{"class":275}," str1 ",[41,82658,321],{"class":271},[41,82660,82661],{"class":378}," \"Saturday night plans\"\n",[41,82663,82664,82666,82668,82671,82674,82676,82679],{"class":43,"line":51},[41,82665,77635],{"class":275},[41,82667,58350],{"class":54},[41,82669,82670],{"class":275},"(str1.",[41,82672,82673],{"class":54},"startsWith",[41,82675,276],{"class":275},[41,82677,82678],{"class":378},"\"Sat\"",[41,82680,30600],{"class":275},[41,82682,82683],{"class":43,"line":62},[41,82684,82685],{"class":47},"\u002F\u002F Expected output: true\n",[41,82687,82688,82690,82692,82694,82696,82698,82700,82702,82704],{"class":43,"line":70},[41,82689,77635],{"class":275},[41,82691,58350],{"class":54},[41,82693,82670],{"class":275},[41,82695,82673],{"class":54},[41,82697,276],{"class":275},[41,82699,82678],{"class":378},[41,82701,12573],{"class":275},[41,82703,345],{"class":58},[41,82705,30600],{"class":275},[41,82707,82708],{"class":43,"line":76},[41,82709,82710],{"class":47},"\u002F\u002F Expected output: false\n",[32,82712,82714],{"className":50736,"code":82713,"language":50738,"meta":37,"style":37},"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",[24,82715,82716,82721,82726,82730,82735,82740],{"__ignoreMap":37},[41,82717,82718],{"class":43,"line":44},[41,82719,82720],{"class":275},"startsWith(searchString)\n",[41,82722,82723],{"class":43,"line":51},[41,82724,82725],{"class":275},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[41,82727,82728],{"class":43,"line":62},[41,82729,80],{"emptyLinePlaceholder":79},[41,82731,82732],{"class":43,"line":70},[41,82733,82734],{"class":275},"const str3 = 'pink老师上课中'\n",[41,82736,82737],{"class":43,"line":76},[41,82738,82739],{"class":275},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[41,82741,82742],{"class":43,"line":83},[41,82743,82744],{"class":275},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23048,82746,82748],{"id":82747},"_410534-includes","4.10.5.3.4 includes",[20,82750,82751],{},"includes(searchString) includes(searchString, position)",[224,82753,82754],{},[227,82755,82756],{},"searchString:",[20,82758,82759,82760,82762,82763,82768,82769,82774,82775,21638,82778,82781,82782,82785],{},"一个要在 ",[24,82761,1443],{}," 中查找的字符串。",[511,82764,82767],{"href":82765,"rel":82766},"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",[24001],"不能是正则表达式","。所有非正则表达式的值都会被",[511,82770,82773],{"href":82771,"rel":82772},"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",[24001],"强制转换为字符串","，因此如果该参数被省略或传入 ",[24,82776,82777],{},"undefined",[24,82779,82780],{},"includes()"," 方法会在字符串中搜索 ",[24,82783,82784],{},"\"undefined\"","，这通常不是你想要的",[224,82787,82788],{"start":51},[227,82789,82790,1132],{},[24,82791,82792],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[20,82794,82795,82796,82799,82800],{},"在字符串中开始搜索 ",[24,82797,82798],{},"searchString"," 的位置。默认值为 ",[24,82801,465],{},[224,82803,82804],{"start":62},[227,82805,82806],{},"返回值：",[20,82808,82809,82810,82812,82813,82817,82818],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[24,82811,82798],{}," 为空字符串的情况），则返回 ",[423,82814,82815],{},[24,82816,1503],{}," ，否则返回 ",[423,82819,82820],{},[24,82821,66123],{},[224,82823,82824],{"start":70},[227,82825,82826],{},"异常：",[20,82828,82325,82829,13933,82831,82835],{},[24,82830,82798],{},[511,82832,82834],{"href":82765,"rel":82833},[24001],"是一个正则表达式","，则会抛出",[20,82837,82838],{},"只要是有就是true，不需要非得以谁开头结尾",[32,82840,82842],{"className":77598,"code":82841,"language":77600,"meta":37,"style":37},"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",[24,82843,82844,82855,82878,82897,82917,82939,82958],{"__ignoreMap":37},[41,82845,82846,82848,82850,82852],{"class":43,"line":44},[41,82847,6930],{"class":271},[41,82849,79878],{"class":275},[41,82851,321],{"class":271},[41,82853,82854],{"class":378}," \"To be, or not to be, that is the question.\"\n",[41,82856,82857,82859,82861,82864,82867,82869,82872,82875],{"class":43,"line":51},[41,82858,77635],{"class":275},[41,82860,58350],{"class":54},[41,82862,82863],{"class":275},"(str.",[41,82865,82866],{"class":54},"includes",[41,82868,276],{"class":275},[41,82870,82871],{"class":378},"\"To be\"",[41,82873,82874],{"class":275},"))",[41,82876,82877],{"class":47},"  \u002F\u002F true\n",[41,82879,82880,82882,82884,82886,82888,82890,82893,82895],{"class":43,"line":62},[41,82881,77635],{"class":275},[41,82883,58350],{"class":54},[41,82885,82863],{"class":275},[41,82887,82866],{"class":54},[41,82889,276],{"class":275},[41,82891,82892],{"class":378},"\"question\"",[41,82894,82874],{"class":275},[41,82896,82877],{"class":47},[41,82898,82899,82901,82903,82905,82907,82909,82912,82914],{"class":43,"line":70},[41,82900,77635],{"class":275},[41,82902,58350],{"class":54},[41,82904,82863],{"class":275},[41,82906,82866],{"class":54},[41,82908,276],{"class":275},[41,82910,82911],{"class":378},"\"nonexistent\"",[41,82913,82874],{"class":275},[41,82915,82916],{"class":47},"  \u002F\u002F false\n",[41,82918,82919,82921,82923,82925,82927,82929,82931,82933,82935,82937],{"class":43,"line":76},[41,82920,77635],{"class":275},[41,82922,58350],{"class":54},[41,82924,82863],{"class":275},[41,82926,82866],{"class":54},[41,82928,276],{"class":275},[41,82930,82871],{"class":378},[41,82932,12573],{"class":275},[41,82934,26],{"class":58},[41,82936,82874],{"class":275},[41,82938,82916],{"class":47},[41,82940,82941,82943,82945,82947,82949,82951,82954,82956],{"class":43,"line":83},[41,82942,77635],{"class":275},[41,82944,58350],{"class":54},[41,82946,82863],{"class":275},[41,82948,82866],{"class":54},[41,82950,276],{"class":275},[41,82952,82953],{"class":378},"\"TO BE\"",[41,82955,82874],{"class":275},[41,82957,82916],{"class":47},[41,82959,82960,82962,82964,82966,82968,82970,82972,82974],{"class":43,"line":89},[41,82961,77635],{"class":275},[41,82963,58350],{"class":54},[41,82965,82863],{"class":275},[41,82967,82866],{"class":54},[41,82969,276],{"class":275},[41,82971,7790],{"class":378},[41,82973,82874],{"class":275},[41,82975,82877],{"class":47},[23048,82977,82979],{"id":82978},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[32,82981,82983],{"className":53170,"code":82982,"language":53172,"meta":37,"style":37},"\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",[24,82984,82985,82993,83001,83006,83011,83016,83021,83026,83034],{"__ignoreMap":37},[41,82986,82987,82989,82991],{"class":43,"line":44},[41,82988,1183],{"class":275},[41,82990,51903],{"class":51403},[41,82992,51410],{"class":275},[41,82994,82995,82997,82999],{"class":43,"line":51},[41,82996,52247],{"class":275},[41,82998,51916],{"class":51403},[41,83000,51410],{"class":275},[41,83002,83003],{"class":43,"line":62},[41,83004,83005],{"class":275},"    const num = 10\n",[41,83007,83008],{"class":43,"line":70},[41,83009,83010],{"class":275},"    \u002F\u002F 强制转换\n",[41,83012,83013],{"class":43,"line":76},[41,83014,83015],{"class":275},"    console.log(String(num))\n",[41,83017,83018],{"class":43,"line":83},[41,83019,83020],{"class":275},"    \u002F\u002F toString()方法转换\n",[41,83022,83023],{"class":43,"line":89},[41,83024,83025],{"class":275},"    console.log(num.toString())\n",[41,83027,83028,83030,83032],{"class":43,"line":96},[41,83029,52520],{"class":275},[41,83031,51916],{"class":51403},[41,83033,51410],{"class":275},[41,83035,83036,83038,83040],{"class":43,"line":104},[41,83037,51888],{"class":275},[41,83039,51903],{"class":51403},[41,83041,51410],{"class":275},[23048,83043,83045],{"id":83044},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[20,83047,83048],{},[1603,83049],{"alt":37,"src":83050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[32,83052,83054],{"className":50736,"code":83053,"language":50738,"meta":37,"style":37},"\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",[24,83055,83056,83066,83080,83084,83092,83106,83126,83138,83146,83150,83158,83170,83178,83190,83195,83200,83205,83252,83268,83276,83284,83288],{"__ignoreMap":37},[41,83057,83058,83060,83062,83064],{"class":43,"line":44},[41,83059,51400],{"class":275},[41,83061,51404],{"class":51403},[41,83063,51407],{"class":54},[41,83065,51410],{"class":275},[41,83067,83068,83070,83072,83074,83076,83078],{"class":43,"line":51},[41,83069,1183],{"class":275},[41,83071,50738],{"class":51403},[41,83073,51419],{"class":54},[41,83075,321],{"class":275},[41,83077,51424],{"class":378},[41,83079,51410],{"class":275},[41,83081,83082],{"class":43,"line":62},[41,83083,80],{"emptyLinePlaceholder":79},[41,83085,83086,83088,83090],{"class":43,"line":70},[41,83087,1183],{"class":275},[41,83089,51437],{"class":51403},[41,83091,51410],{"class":275},[41,83093,83094,83096,83098,83100,83102,83104],{"class":43,"line":76},[41,83095,52247],{"class":275},[41,83097,51447],{"class":51403},[41,83099,51450],{"class":54},[41,83101,321],{"class":275},[41,83103,51455],{"class":378},[41,83105,51410],{"class":275},[41,83107,83108,83110,83112,83114,83116,83118,83120,83122,83124],{"class":43,"line":83},[41,83109,52247],{"class":275},[41,83111,51447],{"class":51403},[41,83113,15058],{"class":54},[41,83115,321],{"class":275},[41,83117,51494],{"class":378},[41,83119,51474],{"class":54},[41,83121,321],{"class":275},[41,83123,51501],{"class":378},[41,83125,51410],{"class":275},[41,83127,83128,83130,83132,83134,83136],{"class":43,"line":89},[41,83129,52247],{"class":275},[41,83131,51510],{"class":51403},[41,83133,51513],{"class":275},[41,83135,51510],{"class":51403},[41,83137,51410],{"class":275},[41,83139,83140,83142,83144],{"class":43,"line":96},[41,83141,51888],{"class":275},[41,83143,51437],{"class":51403},[41,83145,51410],{"class":275},[41,83147,83148],{"class":43,"line":104},[41,83149,80],{"emptyLinePlaceholder":79},[41,83151,83152,83154,83156],{"class":43,"line":176},[41,83153,1183],{"class":275},[41,83155,51903],{"class":51403},[41,83157,51410],{"class":275},[41,83159,83160,83162,83164,83166,83168],{"class":43,"line":184},[41,83161,52247],{"class":275},[41,83163,51714],{"class":51403},[41,83165,55417],{"class":275},[41,83167,51714],{"class":51403},[41,83169,51410],{"class":275},[41,83171,83172,83174,83176],{"class":43,"line":1757},[41,83173,52247],{"class":275},[41,83175,51916],{"class":51403},[41,83177,51410],{"class":275},[41,83179,83180,83182,83185,83187],{"class":43,"line":1763},[41,83181,11359],{"class":271},[41,83183,83184],{"class":58}," gift",[41,83186,13702],{"class":271},[41,83188,83189],{"class":378}," '50g的茶叶，清洗球'\n",[41,83191,83192],{"class":43,"line":1768},[41,83193,83194],{"class":47},"    \u002F\u002F 1.把字符串拆分为数组\n",[41,83196,83197],{"class":43,"line":1782},[41,83198,83199],{"class":47},"    \u002F\u002F console.log(gift.split(','))\n",[41,83201,83202],{"class":43,"line":1787},[41,83203,83204],{"class":47},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[41,83206,83207,83209,83211,83213,83216,83219,83221,83224,83226,83228,83230,83232,83234,83237,83239,83242,83244,83246,83248,83250],{"class":43,"line":1793},[41,83208,11359],{"class":271},[41,83210,74022],{"class":58},[41,83212,13702],{"class":271},[41,83214,83215],{"class":275}," gift.",[41,83217,83218],{"class":54},"split",[41,83220,276],{"class":275},[41,83222,83223],{"class":378},"'，'",[41,83225,30929],{"class":275},[41,83227,74147],{"class":54},[41,83229,276],{"class":275},[41,83231,79898],{"class":5354},[41,83233,79901],{"class":271},[41,83235,83236],{"class":378}," `\u003Cspan>【赠品】${",[41,83238,79898],{"class":275},[41,83240,83241],{"class":378},"}\u003C\u002Fspan>\u003Cbr>`",[41,83243,30929],{"class":275},[41,83245,74326],{"class":54},[41,83247,276],{"class":275},[41,83249,74331],{"class":378},[41,83251,282],{"class":275},[41,83253,83254,83256,83258,83260,83262,83264,83266],{"class":43,"line":1814},[41,83255,52510],{"class":275},[41,83257,54502],{"class":54},[41,83259,276],{"class":275},[41,83261,82034],{"class":378},[41,83263,74352],{"class":275},[41,83265,321],{"class":271},[41,83267,74088],{"class":275},[41,83269,83270,83272,83274],{"class":43,"line":1819},[41,83271,52520],{"class":275},[41,83273,51916],{"class":51403},[41,83275,51410],{"class":275},[41,83277,83278,83280,83282],{"class":43,"line":1833},[41,83279,51888],{"class":275},[41,83281,51903],{"class":51403},[41,83283,51410],{"class":275},[41,83285,83286],{"class":43,"line":1838},[41,83287,80],{"emptyLinePlaceholder":79},[41,83289,83290,83292,83294],{"class":43,"line":1867},[41,83291,51888],{"class":275},[41,83293,50738],{"class":51403},[41,83295,51410],{"class":275},[22136,83297,83299],{"id":83298},"_41054-number","4.10.5.4 Number",[20,83301,83302],{},[1603,83303],{"alt":37,"src":83304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[20,83306,83307],{},"整数也可以进行toFixed来保留小数",[20,83309,83310],{},"比如：",[20,83312,83313],{},"const price=10",[20,83315,83316],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22136,83318,83320],{"id":83319},"_41055-购物车展示","4.10.5.5 购物车展示",[20,83322,83323],{},[1603,83324],{"alt":37,"src":83325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[32,83327,83329],{"className":50736,"code":83328,"language":50738,"meta":37,"style":37},"\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",[24,83330,83331,83341,83355,83359,83367,83381,83401,83413,83421,83427,83437,83447,83457,83461,83465,83471,83483,83497,83501,83505,83511,83523,83539,83549,83565,83569,83573,83579,83589,83599,83603,83607,83615,83627,83639,83651,83655,83659,83667,83679,83683,83687,83698,83708,83720,83732,83742,83746,83750,83758,83767,83779,83789,83799,83803,83807,83815,83824,83831,83841,83853,83857,83861,83870,83880,83891,83903,83915,83919,83923,83932,83942,83953,83957,83961,83967,83979,83991,84001,84011,84029,84041,84045,84049,84058,84070,84080,84090,84102,84106,84114,84122,84126,84134,84148,84156,84170,84198,84206,84214,84224,84228,84236,84244,84253,84261,84270,84280,84284,84288,84296,84304,84313,84321,84329,84342,84346,84350,84358,84366,84375,84383,84391,84406,84410,84414,84422,84430,84439,84447,84455,84469,84477,84481,84485,84490,84516,84521,84558,84563,84586,84591,84645,84650,84686,84690,84696,84701,84710,84724,84733,84752,84761,84771,84776,84781,84794,84799,84853,84879,84887,84895,84899],{"__ignoreMap":37},[41,83332,83333,83335,83337,83339],{"class":43,"line":44},[41,83334,51400],{"class":275},[41,83336,51404],{"class":51403},[41,83338,51407],{"class":54},[41,83340,51410],{"class":275},[41,83342,83343,83345,83347,83349,83351,83353],{"class":43,"line":51},[41,83344,1183],{"class":275},[41,83346,50738],{"class":51403},[41,83348,51419],{"class":54},[41,83350,321],{"class":275},[41,83352,51424],{"class":378},[41,83354,51410],{"class":275},[41,83356,83357],{"class":43,"line":62},[41,83358,80],{"emptyLinePlaceholder":79},[41,83360,83361,83363,83365],{"class":43,"line":70},[41,83362,1183],{"class":275},[41,83364,51437],{"class":51403},[41,83366,51410],{"class":275},[41,83368,83369,83371,83373,83375,83377,83379],{"class":43,"line":76},[41,83370,52247],{"class":275},[41,83372,51447],{"class":51403},[41,83374,51450],{"class":54},[41,83376,321],{"class":275},[41,83378,51455],{"class":378},[41,83380,51410],{"class":275},[41,83382,83383,83385,83387,83389,83391,83393,83395,83397,83399],{"class":43,"line":83},[41,83384,52247],{"class":275},[41,83386,51447],{"class":51403},[41,83388,15058],{"class":54},[41,83390,321],{"class":275},[41,83392,51494],{"class":378},[41,83394,51474],{"class":54},[41,83396,321],{"class":275},[41,83398,51501],{"class":378},[41,83400,51410],{"class":275},[41,83402,83403,83405,83407,83409,83411],{"class":43,"line":89},[41,83404,52247],{"class":275},[41,83406,51510],{"class":51403},[41,83408,51513],{"class":275},[41,83410,51510],{"class":51403},[41,83412,51410],{"class":275},[41,83414,83415,83417,83419],{"class":43,"line":96},[41,83416,52247],{"class":275},[41,83418,189],{"class":51403},[41,83420,51410],{"class":275},[41,83422,83423,83425],{"class":43,"line":104},[41,83424,6541],{"class":51403},[41,83426,15710],{"class":275},[41,83428,83429,83431,83433,83435],{"class":43,"line":176},[41,83430,54798],{"class":58},[41,83432,51540],{"class":275},[41,83434,465],{"class":58},[41,83436,1434],{"class":275},[41,83438,83439,83441,83443,83445],{"class":43,"line":184},[41,83440,54809],{"class":58},[41,83442,51540],{"class":275},[41,83444,465],{"class":58},[41,83446,1434],{"class":275},[41,83448,83449,83451,83453,83455],{"class":43,"line":1757},[41,83450,72699],{"class":58},[41,83452,51540],{"class":275},[41,83454,60608],{"class":58},[41,83456,1434],{"class":275},[41,83458,83459],{"class":43,"line":1763},[41,83460,2326],{"class":275},[41,83462,83463],{"class":43,"line":1768},[41,83464,80],{"emptyLinePlaceholder":79},[41,83466,83467,83469],{"class":43,"line":1782},[41,83468,62226],{"class":54},[41,83470,15710],{"class":275},[41,83472,83473,83475,83477,83479,83481],{"class":43,"line":1787},[41,83474,54874],{"class":58},[41,83476,51540],{"class":275},[41,83478,78677],{"class":58},[41,83480,51595],{"class":271},[41,83482,1434],{"class":275},[41,83484,83485,83487,83489,83491,83493,83495],{"class":43,"line":1793},[41,83486,54809],{"class":58},[41,83488,51540],{"class":275},[41,83490,584],{"class":58},[41,83492,51595],{"class":271},[41,83494,51659],{"class":58},[41,83496,1434],{"class":275},[41,83498,83499],{"class":43,"line":1814},[41,83500,2326],{"class":275},[41,83502,83503],{"class":43,"line":1819},[41,83504,80],{"emptyLinePlaceholder":79},[41,83506,83507,83509],{"class":43,"line":1833},[41,83508,78728],{"class":54},[41,83510,15710],{"class":275},[41,83512,83513,83515,83517,83519,83521],{"class":43,"line":1838},[41,83514,54798],{"class":58},[41,83516,51540],{"class":275},[41,83518,848],{"class":58},[41,83520,51595],{"class":271},[41,83522,1434],{"class":275},[41,83524,83525,83527,83529,83531,83533,83535,83537],{"class":43,"line":1867},[41,83526,61963],{"class":58},[41,83528,51540],{"class":275},[41,83530,28224],{"class":58},[41,83532,78783],{"class":58},[41,83534,78786],{"class":58},[41,83536,968],{"class":271},[41,83538,1434],{"class":275},[41,83540,83541,83543,83545,83547],{"class":43,"line":1872},[41,83542,55112],{"class":58},[41,83544,51540],{"class":275},[41,83546,51580],{"class":58},[41,83548,1434],{"class":275},[41,83550,83551,83553,83555,83557,83559,83561,83563],{"class":43,"line":1889},[41,83552,62080],{"class":58},[41,83554,51540],{"class":275},[41,83556,26],{"class":58},[41,83558,51595],{"class":271},[41,83560,51624],{"class":58},[41,83562,62347],{"class":58},[41,83564,1434],{"class":275},[41,83566,83567],{"class":43,"line":1894},[41,83568,2326],{"class":275},[41,83570,83571],{"class":43,"line":1899},[41,83572,80],{"emptyLinePlaceholder":79},[41,83574,83575,83577],{"class":43,"line":1904},[41,83576,78846],{"class":54},[41,83578,15710],{"class":275},[41,83580,83581,83583,83585,83587],{"class":43,"line":1918},[41,83582,62128],{"class":58},[41,83584,51540],{"class":275},[41,83586,62133],{"class":58},[41,83588,1434],{"class":275},[41,83590,83591,83593,83595,83597],{"class":43,"line":1923},[41,83592,54987],{"class":58},[41,83594,51540],{"class":275},[41,83596,61921],{"class":58},[41,83598,1434],{"class":275},[41,83600,83601],{"class":43,"line":2715},[41,83602,2326],{"class":275},[41,83604,83605],{"class":43,"line":2729},[41,83606,80],{"emptyLinePlaceholder":79},[41,83608,83609,83611,83613],{"class":43,"line":2737},[41,83610,78728],{"class":54},[41,83612,55718],{"class":51403},[41,83614,15710],{"class":275},[41,83616,83617,83619,83621,83623,83625],{"class":43,"line":2742},[41,83618,54874],{"class":58},[41,83620,51540],{"class":275},[41,83622,885],{"class":58},[41,83624,51595],{"class":271},[41,83626,1434],{"class":275},[41,83628,83629,83631,83633,83635,83637],{"class":43,"line":2748},[41,83630,54888],{"class":58},[41,83632,51540],{"class":275},[41,83634,885],{"class":58},[41,83636,51595],{"class":271},[41,83638,1434],{"class":275},[41,83640,83641,83643,83645,83647,83649],{"class":43,"line":2754},[41,83642,61853],{"class":58},[41,83644,51540],{"class":275},[41,83646,592],{"class":58},[41,83648,51595],{"class":271},[41,83650,1434],{"class":275},[41,83652,83653],{"class":43,"line":2759},[41,83654,2326],{"class":275},[41,83656,83657],{"class":43,"line":8086},[41,83658,80],{"emptyLinePlaceholder":79},[41,83660,83661,83663,83665],{"class":43,"line":8110},[41,83662,78728],{"class":54},[41,83664,62407],{"class":54},[41,83666,15710],{"class":275},[41,83668,83669,83671,83673,83675,83677],{"class":43,"line":8115},[41,83670,54874],{"class":58},[41,83672,51540],{"class":275},[41,83674,1862],{"class":58},[41,83676,51595],{"class":271},[41,83678,1434],{"class":275},[41,83680,83681],{"class":43,"line":8121},[41,83682,2326],{"class":275},[41,83684,83685],{"class":43,"line":8148},[41,83686,80],{"emptyLinePlaceholder":79},[41,83688,83689,83691,83693,83696],{"class":43,"line":8153},[41,83690,78728],{"class":54},[41,83692,62407],{"class":54},[41,83694,83695],{"class":54}," .tag",[41,83697,15710],{"class":275},[41,83699,83700,83702,83704,83706],{"class":43,"line":8159},[41,83701,55112],{"class":58},[41,83703,51540],{"class":275},[41,83705,60972],{"class":58},[41,83707,1434],{"class":275},[41,83709,83710,83712,83714,83716,83718],{"class":43,"line":8171},[41,83711,54798],{"class":58},[41,83713,51540],{"class":275},[41,83715,351],{"class":58},[41,83717,51595],{"class":271},[41,83719,1434],{"class":275},[41,83721,83722,83724,83726,83728,83730],{"class":43,"line":8183},[41,83723,55025],{"class":58},[41,83725,51540],{"class":275},[41,83727,771],{"class":58},[41,83729,51595],{"class":271},[41,83731,1434],{"class":275},[41,83733,83734,83736,83738,83740],{"class":43,"line":8195},[41,83735,57519],{"class":58},[41,83737,51540],{"class":275},[41,83739,62173],{"class":58},[41,83741,1434],{"class":275},[41,83743,83744],{"class":43,"line":9854},[41,83745,2326],{"class":275},[41,83747,83748],{"class":43,"line":9879},[41,83749,80],{"emptyLinePlaceholder":79},[41,83751,83752,83754,83756],{"class":43,"line":9902},[41,83753,78728],{"class":54},[41,83755,79020],{"class":54},[41,83757,31569],{"class":275},[41,83759,83760,83762,83765],{"class":43,"line":9926},[41,83761,78728],{"class":54},[41,83763,83764],{"class":54}," .sub-total",[41,83766,15710],{"class":275},[41,83768,83769,83771,83773,83775,83777],{"class":43,"line":9931},[41,83770,55025],{"class":58},[41,83772,51540],{"class":275},[41,83774,923],{"class":58},[41,83776,51595],{"class":271},[41,83778,1434],{"class":275},[41,83780,83781,83783,83785,83787],{"class":43,"line":9936},[41,83782,57519],{"class":58},[41,83784,51540],{"class":275},[41,83786,79043],{"class":58},[41,83788,1434],{"class":275},[41,83790,83791,83793,83795,83797],{"class":43,"line":9941},[41,83792,61940],{"class":58},[41,83794,51540],{"class":275},[41,83796,26],{"class":58},[41,83798,1434],{"class":275},[41,83800,83801],{"class":43,"line":9950},[41,83802,2326],{"class":275},[41,83804,83805],{"class":43,"line":9955},[41,83806,80],{"emptyLinePlaceholder":79},[41,83808,83809,83811,83813],{"class":43,"line":9961},[41,83810,78728],{"class":54},[41,83812,79060],{"class":54},[41,83814,31569],{"class":275},[41,83816,83817,83819,83822],{"class":43,"line":9982},[41,83818,78728],{"class":54},[41,83820,83821],{"class":54}," .sub-total::before",[41,83823,31569],{"class":275},[41,83825,83826,83829],{"class":43,"line":9988},[41,83827,83828],{"class":54},"    .amount::before",[41,83830,15710],{"class":275},[41,83832,83833,83835,83837,83839],{"class":43,"line":10002},[41,83834,79067],{"class":58},[41,83836,51540],{"class":275},[41,83838,79072],{"class":378},[41,83840,1434],{"class":275},[41,83842,83843,83845,83847,83849,83851],{"class":43,"line":10008},[41,83844,55025],{"class":58},[41,83846,51540],{"class":275},[41,83848,771],{"class":58},[41,83850,51595],{"class":271},[41,83852,1434],{"class":275},[41,83854,83855],{"class":43,"line":10035},[41,83856,2326],{"class":275},[41,83858,83859],{"class":43,"line":10044},[41,83860,80],{"emptyLinePlaceholder":79},[41,83862,83863,83865,83868],{"class":43,"line":10050},[41,83864,78728],{"class":54},[41,83866,83867],{"class":54}," .spec",[41,83869,15710],{"class":275},[41,83871,83872,83874,83876,83878],{"class":43,"line":10058},[41,83873,61940],{"class":58},[41,83875,51540],{"class":275},[41,83877,351],{"class":58},[41,83879,1434],{"class":275},[41,83881,83882,83884,83886,83889],{"class":43,"line":10063},[41,83883,57519],{"class":58},[41,83885,51540],{"class":275},[41,83887,83888],{"class":58},"#888",[41,83890,1434],{"class":275},[41,83892,83893,83895,83897,83899,83901],{"class":43,"line":16742},[41,83894,55025],{"class":58},[41,83896,51540],{"class":275},[41,83898,822],{"class":58},[41,83900,51595],{"class":271},[41,83902,1434],{"class":275},[41,83904,83905,83907,83909,83911,83913],{"class":43,"line":16748},[41,83906,62103],{"class":58},[41,83908,51540],{"class":275},[41,83910,973],{"class":58},[41,83912,51595],{"class":271},[41,83914,1434],{"class":275},[41,83916,83917],{"class":43,"line":16771},[41,83918,2326],{"class":275},[41,83920,83921],{"class":43,"line":16777},[41,83922,80],{"emptyLinePlaceholder":79},[41,83924,83925,83927,83930],{"class":43,"line":16800},[41,83926,78728],{"class":54},[41,83928,83929],{"class":54}," .count",[41,83931,15710],{"class":275},[41,83933,83934,83936,83938,83940],{"class":43,"line":16814},[41,83935,61940],{"class":58},[41,83937,51540],{"class":275},[41,83939,26],{"class":58},[41,83941,1434],{"class":275},[41,83943,83944,83946,83948,83951],{"class":43,"line":16834},[41,83945,57519],{"class":58},[41,83947,51540],{"class":275},[41,83949,83950],{"class":58},"#aaa",[41,83952,1434],{"class":275},[41,83954,83955],{"class":43,"line":16840},[41,83956,2326],{"class":275},[41,83958,83959],{"class":43,"line":16851},[41,83960,80],{"emptyLinePlaceholder":79},[41,83962,83963,83965],{"class":43,"line":16874},[41,83964,72578],{"class":54},[41,83966,15710],{"class":275},[41,83968,83969,83971,83973,83975,83977],{"class":43,"line":16896},[41,83970,54874],{"class":58},[41,83972,51540],{"class":275},[41,83974,78677],{"class":58},[41,83976,51595],{"class":271},[41,83978,1434],{"class":275},[41,83980,83981,83983,83985,83987,83989],{"class":43,"line":16901},[41,83982,54809],{"class":58},[41,83984,51540],{"class":275},[41,83986,465],{"class":58},[41,83988,51659],{"class":58},[41,83990,1434],{"class":275},[41,83992,83993,83995,83997,83999],{"class":43,"line":16907},[41,83994,55112],{"class":58},[41,83996,51540],{"class":275},[41,83998,51580],{"class":58},[41,84000,1434],{"class":275},[41,84002,84003,84005,84007,84009],{"class":43,"line":16921},[41,84004,55123],{"class":58},[41,84006,51540],{"class":275},[41,84008,51683],{"class":58},[41,84010,1434],{"class":275},[41,84012,84013,84016,84018,84020,84022,84024,84027],{"class":43,"line":16934},[41,84014,84015],{"class":58},"      border-top",[41,84017,51540],{"class":275},[41,84019,26],{"class":58},[41,84021,51595],{"class":271},[41,84023,51624],{"class":58},[41,84025,84026],{"class":58}," #4e4e4e",[41,84028,1434],{"class":275},[41,84030,84031,84033,84035,84037,84039],{"class":43,"line":16939},[41,84032,54798],{"class":58},[41,84034,51540],{"class":275},[41,84036,973],{"class":58},[41,84038,51595],{"class":271},[41,84040,1434],{"class":275},[41,84042,84043],{"class":43,"line":16953},[41,84044,2326],{"class":275},[41,84046,84047],{"class":43,"line":16958},[41,84048,80],{"emptyLinePlaceholder":79},[41,84050,84051,84053,84056],{"class":43,"line":16964},[41,84052,72578],{"class":54},[41,84054,84055],{"class":54}," .amount",[41,84057,15710],{"class":275},[41,84059,84060,84062,84064,84066,84068],{"class":43,"line":16969},[41,84061,55025],{"class":58},[41,84063,51540],{"class":275},[41,84065,923],{"class":58},[41,84067,51595],{"class":271},[41,84069,1434],{"class":275},[41,84071,84072,84074,84076,84078],{"class":43,"line":16983},[41,84073,57519],{"class":58},[41,84075,51540],{"class":275},[41,84077,79043],{"class":58},[41,84079,1434],{"class":275},[41,84081,84082,84084,84086,84088],{"class":43,"line":16988},[41,84083,62437],{"class":58},[41,84085,51540],{"class":275},[41,84087,51592],{"class":58},[41,84089,1434],{"class":275},[41,84091,84092,84094,84096,84098,84100],{"class":43,"line":16993},[41,84093,61853],{"class":58},[41,84095,51540],{"class":275},[41,84097,929],{"class":58},[41,84099,51595],{"class":271},[41,84101,1434],{"class":275},[41,84103,84104],{"class":43,"line":17007},[41,84105,2326],{"class":275},[41,84107,84108,84110,84112],{"class":43,"line":17019},[41,84109,52520],{"class":275},[41,84111,189],{"class":51403},[41,84113,51410],{"class":275},[41,84115,84116,84118,84120],{"class":43,"line":17024},[41,84117,51888],{"class":275},[41,84119,51437],{"class":51403},[41,84121,51410],{"class":275},[41,84123,84124],{"class":43,"line":17037},[41,84125,80],{"emptyLinePlaceholder":79},[41,84127,84128,84130,84132],{"class":43,"line":17042},[41,84129,1183],{"class":275},[41,84131,51903],{"class":51403},[41,84133,51410],{"class":275},[41,84135,84136,84138,84140,84142,84144,84146],{"class":43,"line":17047},[41,84137,52247],{"class":275},[41,84139,51714],{"class":51403},[41,84141,53589],{"class":54},[41,84143,321],{"class":275},[41,84145,62711],{"class":378},[41,84147,51410],{"class":275},[41,84149,84150,84152,84154],{"class":43,"line":17052},[41,84151,52520],{"class":275},[41,84153,51714],{"class":51403},[41,84155,51410],{"class":275},[41,84157,84158,84160,84162,84164,84166,84168],{"class":43,"line":17065},[41,84159,52247],{"class":275},[41,84161,51714],{"class":51403},[41,84163,53589],{"class":54},[41,84165,321],{"class":275},[41,84167,62683],{"class":378},[41,84169,51410],{"class":275},[41,84171,84172,84174,84176,84179,84181,84183,84185,84188,84190,84192,84194,84196],{"class":43,"line":17070},[41,84173,51444],{"class":275},[41,84175,51714],{"class":51403},[41,84177,84178],{"class":275},">合计：\u003C",[41,84180,41],{"class":51403},[41,84182,53589],{"class":54},[41,84184,321],{"class":275},[41,84186,84187],{"class":378},"\"amount\"",[41,84189,55417],{"class":275},[41,84191,41],{"class":51403},[41,84193,55417],{"class":275},[41,84195,51714],{"class":51403},[41,84197,51410],{"class":275},[41,84199,84200,84202,84204],{"class":43,"line":32736},[41,84201,52520],{"class":275},[41,84203,51714],{"class":51403},[41,84205,51410],{"class":275},[41,84207,84208,84210,84212],{"class":43,"line":32742},[41,84209,52247],{"class":275},[41,84211,51916],{"class":51403},[41,84213,51410],{"class":275},[41,84215,84216,84218,84220,84222],{"class":43,"line":32748},[41,84217,11359],{"class":271},[41,84219,79480],{"class":58},[41,84221,13702],{"class":271},[41,84223,55550],{"class":275},[41,84225,84226],{"class":43,"line":32754},[41,84227,79489],{"class":275},[41,84229,84230,84232,84234],{"class":43,"line":32760},[41,84231,79494],{"class":275},[41,84233,79497],{"class":378},[41,84235,31569],{"class":275},[41,84237,84238,84240,84242],{"class":43,"line":32771},[41,84239,79504],{"class":275},[41,84241,79507],{"class":378},[41,84243,31569],{"class":275},[41,84245,84246,84248,84251],{"class":43,"line":32777},[41,84247,79514],{"class":275},[41,84249,84250],{"class":58},"289.9",[41,84252,31569],{"class":275},[41,84254,84255,84257,84259],{"class":43,"line":32797},[41,84256,79524],{"class":275},[41,84258,79527],{"class":378},[41,84260,31569],{"class":275},[41,84262,84263,84266,84268],{"class":43,"line":32803},[41,84264,84265],{"class":275},"        count: ",[41,84267,351],{"class":58},[41,84269,31569],{"class":275},[41,84271,84272,84275,84278],{"class":43,"line":32814},[41,84273,84274],{"class":275},"        spec: { color: ",[41,84276,84277],{"class":378},"'白色'",[41,84279,55707],{"class":275},[41,84281,84282],{"class":43,"line":32820},[41,84283,77995],{"class":275},[41,84285,84286],{"class":43,"line":32826},[41,84287,79489],{"class":275},[41,84289,84290,84292,84294],{"class":43,"line":32832},[41,84291,79494],{"class":275},[41,84293,79588],{"class":378},[41,84295,31569],{"class":275},[41,84297,84298,84300,84302],{"class":43,"line":32838},[41,84299,79504],{"class":275},[41,84301,79597],{"class":378},[41,84303,31569],{"class":275},[41,84305,84306,84308,84311],{"class":43,"line":32844},[41,84307,79514],{"class":275},[41,84309,84310],{"class":58},"109.8",[41,84312,31569],{"class":275},[41,84314,84315,84317,84319],{"class":43,"line":32850},[41,84316,79524],{"class":275},[41,84318,79615],{"class":378},[41,84320,31569],{"class":275},[41,84322,84323,84325,84327],{"class":43,"line":32856},[41,84324,84265],{"class":275},[41,84326,345],{"class":58},[41,84328,31569],{"class":275},[41,84330,84331,84334,84336,84338,84340],{"class":43,"line":32876},[41,84332,84333],{"class":275},"        spec: { size: ",[41,84335,82006],{"class":378},[41,84337,55567],{"class":275},[41,84339,82011],{"class":378},[41,84341,55707],{"class":275},[41,84343,84344],{"class":43,"line":32882},[41,84345,77995],{"class":275},[41,84347,84348],{"class":43,"line":32898},[41,84349,79489],{"class":275},[41,84351,84352,84354,84356],{"class":43,"line":32904},[41,84353,79494],{"class":275},[41,84355,79632],{"class":378},[41,84357,31569],{"class":275},[41,84359,84360,84362,84364],{"class":43,"line":32918},[41,84361,79504],{"class":275},[41,84363,79641],{"class":378},[41,84365,31569],{"class":275},[41,84367,84368,84370,84373],{"class":43,"line":32924},[41,84369,79514],{"class":275},[41,84371,84372],{"class":58},"488",[41,84374,31569],{"class":275},[41,84376,84377,84379,84381],{"class":43,"line":32939},[41,84378,79524],{"class":275},[41,84380,79659],{"class":378},[41,84382,31569],{"class":275},[41,84384,84385,84387,84389],{"class":43,"line":32945},[41,84386,84265],{"class":275},[41,84388,26],{"class":58},[41,84390,31569],{"class":275},[41,84392,84393,84395,84398,84401,84404],{"class":43,"line":32954},[41,84394,84274],{"class":275},[41,84396,84397],{"class":378},"'青色'",[41,84399,84400],{"class":275},", sum: ",[41,84402,84403],{"class":378},"'一大四小'",[41,84405,55707],{"class":275},[41,84407,84408],{"class":43,"line":32960},[41,84409,77995],{"class":275},[41,84411,84412],{"class":43,"line":32969},[41,84413,79489],{"class":275},[41,84415,84416,84418,84420],{"class":43,"line":32975},[41,84417,79494],{"class":275},[41,84419,79676],{"class":378},[41,84421,31569],{"class":275},[41,84423,84424,84426,84428],{"class":43,"line":32981},[41,84425,79504],{"class":275},[41,84427,79685],{"class":378},[41,84429,31569],{"class":275},[41,84431,84432,84434,84437],{"class":43,"line":32990},[41,84433,79514],{"class":275},[41,84435,84436],{"class":58},"139",[41,84438,31569],{"class":275},[41,84440,84441,84443,84445],{"class":43,"line":32996},[41,84442,79524],{"class":275},[41,84444,79703],{"class":378},[41,84446,31569],{"class":275},[41,84448,84449,84451,84453],{"class":43,"line":33007},[41,84450,84265],{"class":275},[41,84452,26],{"class":58},[41,84454,31569],{"class":275},[41,84456,84457,84459,84462,84464,84467],{"class":43,"line":33013},[41,84458,84333],{"class":275},[41,84460,84461],{"class":378},"'小号'",[41,84463,55567],{"class":275},[41,84465,84466],{"class":378},"'紫色'",[41,84468,55573],{"class":275},[41,84470,84471,84474],{"class":43,"line":33032},[41,84472,84473],{"class":275},"        gift: ",[41,84475,84476],{"class":378},"'50g茶叶,清洗球'\n",[41,84478,84479],{"class":43,"line":33038},[41,84480,52501],{"class":275},[41,84482,84483],{"class":43,"line":33049},[41,84484,53212],{"class":275},[41,84486,84487],{"class":43,"line":33055},[41,84488,84489],{"class":47},"    \u002F\u002F  1.根据数据渲染页面\n",[41,84491,84492,84494,84496,84498,84500,84502,84504,84506,84508,84510,84512,84514],{"class":43,"line":33075},[41,84493,52510],{"class":275},[41,84495,54502],{"class":54},[41,84497,276],{"class":275},[41,84499,80004],{"class":378},[41,84501,74352],{"class":275},[41,84503,321],{"class":271},[41,84505,80151],{"class":275},[41,84507,74147],{"class":54},[41,84509,276],{"class":275},[41,84511,79898],{"class":5354},[41,84513,79901],{"class":271},[41,84515,15710],{"class":275},[41,84517,84518],{"class":43,"line":33091},[41,84519,84520],{"class":47},"      \u002F\u002F 对象解构\n",[41,84522,84523,84525,84527,84529,84531,84533,84535,84538,84540,84542,84544,84547,84549,84552,84554,84556],{"class":43,"line":33097},[41,84524,58331],{"class":271},[41,84526,79910],{"class":275},[41,84528,79923],{"class":58},[41,84530,12573],{"class":275},[41,84532,79913],{"class":58},[41,84534,12573],{"class":275},[41,84536,84537],{"class":58},"count",[41,84539,12573],{"class":275},[41,84541,79918],{"class":58},[41,84543,12573],{"class":275},[41,84545,84546],{"class":58},"spec",[41,84548,12573],{"class":275},[41,84550,84551],{"class":58},"gift",[41,84553,79926],{"class":275},[41,84555,321],{"class":271},[41,84557,79931],{"class":275},[41,84559,84560],{"class":43,"line":33111},[41,84561,84562],{"class":47},"      \u002F\u002F 规格文字模块处理\n",[41,84564,84565,84567,84570,84572,84574,84576,84578,84580,84582,84584],{"class":43,"line":33117},[41,84566,58331],{"class":271},[41,84568,84569],{"class":58}," text",[41,84571,13702],{"class":271},[41,84573,82041],{"class":275},[41,84575,82044],{"class":54},[41,84577,82047],{"class":275},[41,84579,74326],{"class":54},[41,84581,276],{"class":275},[41,84583,82054],{"class":378},[41,84585,282],{"class":275},[41,84587,84588],{"class":43,"line":33123},[41,84589,84590],{"class":47},"      \u002F\u002F 处理赠品模块\n",[41,84592,84593,84595,84597,84599,84602,84604,84606,84608,84610,84613,84615,84617,84619,84621,84623,84626,84628,84631,84633,84635,84637,84639,84641,84643],{"class":43,"line":33134},[41,84594,58331],{"class":271},[41,84596,74022],{"class":58},[41,84598,13702],{"class":271},[41,84600,84601],{"class":275}," gift ",[41,84603,1259],{"class":271},[41,84605,83215],{"class":275},[41,84607,83218],{"class":54},[41,84609,276],{"class":275},[41,84611,84612],{"class":378},"','",[41,84614,30929],{"class":275},[41,84616,74147],{"class":54},[41,84618,276],{"class":275},[41,84620,79898],{"class":5354},[41,84622,79901],{"class":271},[41,84624,84625],{"class":378}," `\u003Cspan class=\"tag\">【赠品】${",[41,84627,79898],{"class":275},[41,84629,84630],{"class":378},"}\u003C\u002Fspan>`",[41,84632,30929],{"class":275},[41,84634,74326],{"class":54},[41,84636,276],{"class":275},[41,84638,74331],{"class":378},[41,84640,13852],{"class":275},[41,84642,1132],{"class":271},[41,84644,70207],{"class":378},[41,84646,84647],{"class":43,"line":33140},[41,84648,84649],{"class":47},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[41,84651,84652,84654,84657,84659,84662,84664,84666,84668,84671,84673,84675,84677,84680,84682,84684],{"class":43,"line":33146},[41,84653,58331],{"class":271},[41,84655,84656],{"class":58}," subtotal",[41,84658,13702],{"class":271},[41,84660,84661],{"class":275}," ((price ",[41,84663,728],{"class":271},[41,84665,5892],{"class":58},[41,84667,6656],{"class":271},[41,84669,84670],{"class":275}," count) ",[41,84672,857],{"class":271},[41,84674,5892],{"class":58},[41,84676,30929],{"class":275},[41,84678,84679],{"class":54},"toFixed",[41,84681,276],{"class":275},[41,84683,351],{"class":58},[41,84685,282],{"class":275},[41,84687,84688],{"class":43,"line":33156},[41,84689,80],{"emptyLinePlaceholder":79},[41,84691,84692,84694],{"class":43,"line":33162},[41,84693,74085],{"class":271},[41,84695,70271],{"class":378},[41,84697,84698],{"class":43,"line":33173},[41,84699,84700],{"class":378},"        \u003Cdiv class=\"item\">\n",[41,84702,84703,84706,84708],{"class":43,"line":33179},[41,84704,84705],{"class":378},"          \u003Cimg src=\"${",[41,84707,79923],{"class":275},[41,84709,79955],{"class":378},[41,84711,84712,84715,84717,84720,84722],{"class":43,"line":33189},[41,84713,84714],{"class":378},"          \u003Cp class=\"name\">${",[41,84716,79913],{"class":275},[41,84718,84719],{"class":378},"}${",[41,84721,1443],{"class":275},[41,84723,79965],{"class":378},[41,84725,84726,84729,84731],{"class":43,"line":33194},[41,84727,84728],{"class":378},"          \u003Cp class=\"spec\">${",[41,84730,5325],{"class":275},[41,84732,79965],{"class":378},[41,84734,84735,84738,84740,84742,84744,84746,84748,84750],{"class":43,"line":33200},[41,84736,84737],{"class":378},"          \u003Cp class=\"price\">${",[41,84739,79918],{"class":275},[41,84741,831],{"class":378},[41,84743,84679],{"class":54},[41,84745,276],{"class":378},[41,84747,351],{"class":58},[41,84749,702],{"class":378},[41,84751,79965],{"class":378},[41,84753,84754,84757,84759],{"class":43,"line":33249},[41,84755,84756],{"class":378},"          \u003Cp class=\"count\">x${",[41,84758,84537],{"class":275},[41,84760,79965],{"class":378},[41,84762,84763,84766,84769],{"class":43,"line":33296},[41,84764,84765],{"class":378},"          \u003Cp class=\"sub-total\">${",[41,84767,84768],{"class":275},"subtotal",[41,84770,79965],{"class":378},[41,84772,84773],{"class":43,"line":33301},[41,84774,84775],{"class":378},"        \u003C\u002Fdiv> \n",[41,84777,84778],{"class":43,"line":33307},[41,84779,84780],{"class":378},"             `\n",[41,84782,84783,84786,84788,84790,84792],{"class":43,"line":33326},[41,84784,84785],{"class":275},"    }).",[41,84787,74326],{"class":54},[41,84789,276],{"class":275},[41,84791,74331],{"class":378},[41,84793,282],{"class":275},[41,84795,84796],{"class":43,"line":33332},[41,84797,84798],{"class":47},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[41,84800,84801,84803,84805,84807,84809,84812,84814,84817,84819,84821,84823,84826,84829,84831,84834,84836,84838,84840,84843,84845,84847,84849,84851],{"class":43,"line":33352},[41,84802,11359],{"class":271},[41,84804,62888],{"class":58},[41,84806,13702],{"class":271},[41,84808,80151],{"class":275},[41,84810,84811],{"class":54},"reduce",[41,84813,2515],{"class":275},[41,84815,84816],{"class":5354},"prev",[41,84818,12573],{"class":275},[41,84820,79898],{"class":5354},[41,84822,13852],{"class":275},[41,84824,84825],{"class":271},"=>",[41,84827,84828],{"class":275}," prev ",[41,84830,754],{"class":271},[41,84832,84833],{"class":275}," (item.price ",[41,84835,728],{"class":271},[41,84837,5892],{"class":58},[41,84839,6656],{"class":271},[41,84841,84842],{"class":275}," item.count) ",[41,84844,857],{"class":271},[41,84846,5892],{"class":58},[41,84848,12573],{"class":275},[41,84850,465],{"class":58},[41,84852,282],{"class":275},[41,84854,84855,84857,84859,84861,84864,84866,84868,84871,84873,84875,84877],{"class":43,"line":33358},[41,84856,52510],{"class":275},[41,84858,54502],{"class":54},[41,84860,276],{"class":275},[41,84862,84863],{"class":378},"'.amount'",[41,84865,74352],{"class":275},[41,84867,321],{"class":271},[41,84869,84870],{"class":275}," total.",[41,84872,84679],{"class":54},[41,84874,276],{"class":275},[41,84876,351],{"class":58},[41,84878,282],{"class":275},[41,84880,84881,84883,84885],{"class":43,"line":33364},[41,84882,52520],{"class":275},[41,84884,51916],{"class":51403},[41,84886,51410],{"class":275},[41,84888,84889,84891,84893],{"class":43,"line":33374},[41,84890,51888],{"class":275},[41,84892,51903],{"class":51403},[41,84894,51410],{"class":275},[41,84896,84897],{"class":43,"line":33379},[41,84898,80],{"emptyLinePlaceholder":79},[41,84900,84901,84903,84905],{"class":43,"line":33385},[41,84902,51888],{"class":275},[41,84904,50738],{"class":51403},[41,84906,51410],{"class":275},[15,84908,84910],{"id":84909},"_411-编程思想","4.11 编程思想",[241,84912,84914],{"id":84913},"_4111-面向过程介绍","4.11.1 面向过程介绍",[20,84916,84917,84920],{},[423,84918,84919],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[20,84922,84923],{},"调用就可以了",[20,84925,84926],{},[1603,84927],{"alt":37,"src":84928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[241,84930,84932],{"id":84931},"_4112-面向对象","4.11.2 面向对象",[20,84934,84935],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[20,84937,84938],{},[1603,84939],{"alt":37,"src":84940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[20,84942,84943],{},"面向对象的特性：",[1280,84945,84946,84949,84952],{},[227,84947,84948],{},"封装性",[227,84950,84951],{},"继承性",[227,84953,84954],{},"多态性",[241,84956,84958],{"id":84957},"_4113-两者比较","4.11.3 两者比较",[20,84960,84961],{},[1603,84962],{"alt":37,"src":84963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[15,84965,84967],{"id":84966},"_412-构造函数回顾","4.12 构造函数回顾",[20,84969,84970],{},[1603,84971],{"alt":37,"src":84972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[20,84974,84975],{},[1603,84976],{"alt":37,"src":84977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[20,84979,84980],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[20,84982,84983],{},[1603,84984],{"alt":37,"src":84985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[15,84987,84989],{"id":84988},"_413-原型","4.13 原型",[241,84991,84993],{"id":84992},"_4131-原型对象的认识","4.13.1 原型对象的认识",[20,84995,84996],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[20,84998,84999],{},[1603,85000],{"alt":37,"src":85001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[20,85003,85004],{},[1603,85005],{"alt":37,"src":85006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[20,85008,85009],{},"原型是构造函数的属性，它也是一个对象",[20,85011,85012],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[20,85014,85015],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[32,85017,85019],{"className":53170,"code":85018,"language":53172,"meta":37,"style":37},"\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",[24,85020,85021,85029,85034,85042,85047,85052,85057,85062,85067,85071,85075,85079,85084,85089,85093,85098,85103,85108,85113,85118,85122,85130],{"__ignoreMap":37},[41,85022,85023,85025,85027],{"class":43,"line":44},[41,85024,1183],{"class":275},[41,85026,51903],{"class":51403},[41,85028,51410],{"class":275},[41,85030,85031],{"class":43,"line":51},[41,85032,85033],{"class":47},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[41,85035,85036,85038,85040],{"class":43,"line":62},[41,85037,52247],{"class":275},[41,85039,51916],{"class":51403},[41,85041,51410],{"class":275},[41,85043,85044],{"class":43,"line":70},[41,85045,85046],{"class":275},"    function Star(uname, age) {\n",[41,85048,85049],{"class":43,"line":76},[41,85050,85051],{"class":275},"      this.uname = uname,\n",[41,85053,85054],{"class":43,"line":83},[41,85055,85056],{"class":275},"        this.age = age\n",[41,85058,85059],{"class":43,"line":89},[41,85060,85061],{"class":275},"      \u002F\u002F this.sing = function () {\n",[41,85063,85064],{"class":43,"line":96},[41,85065,85066],{"class":275},"      \u002F\u002F   console.log('唱歌')\n",[41,85068,85069],{"class":43,"line":104},[41,85070,80],{"emptyLinePlaceholder":79},[41,85072,85073],{"class":43,"line":176},[41,85074,60140],{"class":275},[41,85076,85077],{"class":43,"line":184},[41,85078,2326],{"class":275},[41,85080,85081],{"class":43,"line":1757},[41,85082,85083],{"class":275},"    Star.prototype.sing = function () {\n",[41,85085,85086],{"class":43,"line":1763},[41,85087,85088],{"class":275},"      console.log('唱歌')\n",[41,85090,85091],{"class":43,"line":1768},[41,85092,2326],{"class":275},[41,85094,85095],{"class":43,"line":1782},[41,85096,85097],{"class":275},"    \u002F\u002F console.dir(Star.prototype)\n",[41,85099,85100],{"class":43,"line":1787},[41,85101,85102],{"class":275},"    const pink = new Star('pink', 18)\n",[41,85104,85105],{"class":43,"line":1793},[41,85106,85107],{"class":275},"    const red = new Star('red', 20)\n",[41,85109,85110],{"class":43,"line":1814},[41,85111,85112],{"class":275},"    pink.sing()\n",[41,85114,85115],{"class":43,"line":1819},[41,85116,85117],{"class":275},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[41,85119,85120],{"class":43,"line":1833},[41,85121,80],{"emptyLinePlaceholder":79},[41,85123,85124,85126,85128],{"class":43,"line":1838},[41,85125,52520],{"class":275},[41,85127,51916],{"class":51403},[41,85129,51410],{"class":275},[41,85131,85132,85134,85136],{"class":43,"line":1867},[41,85133,51888],{"class":275},[41,85135,51903],{"class":51403},[41,85137,51410],{"class":275},[20,85139,85140],{},[1603,85141],{"alt":37,"src":85142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[32,85144,85146],{"className":53170,"code":85145,"language":53172,"meta":37,"style":37},"\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",[24,85147,85148,85156,85164,85169,85174,85179,85184,85188,85193,85198,85203,85207,85212,85216,85220,85225,85229,85237],{"__ignoreMap":37},[41,85149,85150,85152,85154],{"class":43,"line":44},[41,85151,1183],{"class":275},[41,85153,51903],{"class":51403},[41,85155,51410],{"class":275},[41,85157,85158,85160,85162],{"class":43,"line":51},[41,85159,52247],{"class":275},[41,85161,51916],{"class":51403},[41,85163,51410],{"class":275},[41,85165,85166],{"class":43,"line":62},[41,85167,85168],{"class":275},"    let that\n",[41,85170,85171],{"class":43,"line":70},[41,85172,85173],{"class":275},"    function Star(uname) {\n",[41,85175,85176],{"class":43,"line":76},[41,85177,85178],{"class":275},"      this.uname = uname\n",[41,85180,85181],{"class":43,"line":83},[41,85182,85183],{"class":275},"      that = this\n",[41,85185,85186],{"class":43,"line":89},[41,85187,2326],{"class":275},[41,85189,85190],{"class":43,"line":96},[41,85191,85192],{"class":275},"    \u002F\u002F 实例对象是 ldh\n",[41,85194,85195],{"class":43,"line":104},[41,85196,85197],{"class":275},"    const ldh = new Star('刘德华')\n",[41,85199,85200],{"class":43,"line":176},[41,85201,85202],{"class":275},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[41,85204,85205],{"class":43,"line":184},[41,85206,80],{"emptyLinePlaceholder":79},[41,85208,85209],{"class":43,"line":1757},[41,85210,85211],{"class":275},"    Star.sing = function () {\n",[41,85213,85214],{"class":43,"line":1763},[41,85215,85088],{"class":275},[41,85217,85218],{"class":43,"line":1768},[41,85219,2326],{"class":275},[41,85221,85222],{"class":43,"line":1782},[41,85223,85224],{"class":275},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[41,85226,85227],{"class":43,"line":1787},[41,85228,80],{"emptyLinePlaceholder":79},[41,85230,85231,85233,85235],{"class":43,"line":1793},[41,85232,52520],{"class":275},[41,85234,51916],{"class":51403},[41,85236,51410],{"class":275},[41,85238,85239,85241,85243],{"class":43,"line":1814},[41,85240,51888],{"class":275},[41,85242,51903],{"class":51403},[41,85244,51410],{"class":275},[20,85246,85247],{},"构造函数的this指向的是实例对象；",[20,85249,85250],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[241,85252,85254],{"id":85253},"_4132-数组扩展方法","4.13.2 数组扩展方法",[20,85256,85257],{},[1603,85258],{"alt":37,"src":85259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[32,85261,85263],{"className":53170,"code":85262,"language":53172,"meta":37,"style":37},"\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",[24,85264,85265,85273,85281,85286,85291,85296,85301,85306,85311,85316,85321,85326,85331,85335,85340,85345,85350,85355,85359,85364,85369,85374,85379,85383,85388,85393,85398,85403,85407,85412,85416,85424],{"__ignoreMap":37},[41,85266,85267,85269,85271],{"class":43,"line":44},[41,85268,1183],{"class":275},[41,85270,51903],{"class":51403},[41,85272,51410],{"class":275},[41,85274,85275,85277,85279],{"class":43,"line":51},[41,85276,52247],{"class":275},[41,85278,51916],{"class":51403},[41,85280,51410],{"class":275},[41,85282,85283],{"class":43,"line":62},[41,85284,85285],{"class":275},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[41,85287,85288],{"class":43,"line":70},[41,85289,85290],{"class":275},"    const arr = [1, 2, 3]\n",[41,85292,85293],{"class":43,"line":76},[41,85294,85295],{"class":275},"    \u002F\u002F 自己定义数组的扩展方法\n",[41,85297,85298],{"class":43,"line":83},[41,85299,85300],{"class":275},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[41,85302,85303],{"class":43,"line":89},[41,85304,85305],{"class":275},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[41,85307,85308],{"class":43,"line":96},[41,85309,85310],{"class":275},"    \u002F\u002F ①.最大值\n",[41,85312,85313],{"class":43,"line":104},[41,85314,85315],{"class":275},"    Array.prototype.max = function () {\n",[41,85317,85318],{"class":43,"line":176},[41,85319,85320],{"class":275},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[41,85322,85323],{"class":43,"line":184},[41,85324,85325],{"class":275},"      return Math.max(...this)\n",[41,85327,85328],{"class":43,"line":1757},[41,85329,85330],{"class":275},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[41,85332,85333],{"class":43,"line":1763},[41,85334,2326],{"class":275},[41,85336,85337],{"class":43,"line":1768},[41,85338,85339],{"class":275},"    console.log(arr.max())\n",[41,85341,85342],{"class":43,"line":1782},[41,85343,85344],{"class":275},"    \u002F\u002F ②最小值\n",[41,85346,85347],{"class":43,"line":1787},[41,85348,85349],{"class":275},"    Array.prototype.min = function () {\n",[41,85351,85352],{"class":43,"line":1793},[41,85353,85354],{"class":275},"      return Math.min(...this)\n",[41,85356,85357],{"class":43,"line":1814},[41,85358,2326],{"class":275},[41,85360,85361],{"class":43,"line":1819},[41,85362,85363],{"class":275},"    console.log(arr.min())\n",[41,85365,85366],{"class":43,"line":1833},[41,85367,85368],{"class":275},"    \u002F\u002F③求和\n",[41,85370,85371],{"class":43,"line":1838},[41,85372,85373],{"class":275},"    Array.prototype.sum = function () {\n",[41,85375,85376],{"class":43,"line":1867},[41,85377,85378],{"class":275},"      return this.reduce((prev, current) => prev + current, 0)\n",[41,85380,85381],{"class":43,"line":1872},[41,85382,2326],{"class":275},[41,85384,85385],{"class":43,"line":1889},[41,85386,85387],{"class":275},"    console.log(arr.sum())\n",[41,85389,85390],{"class":43,"line":1894},[41,85391,85392],{"class":275},"    \u002F\u002F ③排序\n",[41,85394,85395],{"class":43,"line":1899},[41,85396,85397],{"class":275},"    Array.prototype.rever = function () {\n",[41,85399,85400],{"class":43,"line":1904},[41,85401,85402],{"class":275},"      return this.reverse()\n",[41,85404,85405],{"class":43,"line":1918},[41,85406,2326],{"class":275},[41,85408,85409],{"class":43,"line":1923},[41,85410,85411],{"class":275},"    console.log(arr.rever())\n",[41,85413,85414],{"class":43,"line":2715},[41,85415,80],{"emptyLinePlaceholder":79},[41,85417,85418,85420,85422],{"class":43,"line":2729},[41,85419,52520],{"class":275},[41,85421,51916],{"class":51403},[41,85423,51410],{"class":275},[41,85425,85426,85428,85430],{"class":43,"line":2737},[41,85427,51888],{"class":275},[41,85429,51903],{"class":51403},[41,85431,51410],{"class":275},[20,85433,85434],{},[1603,85435],{"alt":37,"src":85436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[241,85438,85440],{"id":85439},"_4133-constructor-属性","4.13.3 constructor 属性",[20,85442,85443],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[20,85445,85446],{},[1603,85447],{"alt":37,"src":85448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[32,85450,85452],{"className":53170,"code":85451,"language":53172,"meta":37,"style":37},"\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",[24,85453,85454,85462,85470,85475,85480,85484,85489,85494,85499,85507],{"__ignoreMap":37},[41,85455,85456,85458,85460],{"class":43,"line":44},[41,85457,1183],{"class":275},[41,85459,51903],{"class":51403},[41,85461,51410],{"class":275},[41,85463,85464,85466,85468],{"class":43,"line":51},[41,85465,52247],{"class":275},[41,85467,51916],{"class":51403},[41,85469,51410],{"class":275},[41,85471,85472],{"class":43,"line":62},[41,85473,85474],{"class":275},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[41,85476,85477],{"class":43,"line":70},[41,85478,85479],{"class":275},"    function Star() {\n",[41,85481,85482],{"class":43,"line":76},[41,85483,2326],{"class":275},[41,85485,85486],{"class":43,"line":83},[41,85487,85488],{"class":275},"    const ldh = new Star()\n",[41,85490,85491],{"class":43,"line":89},[41,85492,85493],{"class":275},"    console.log(Star.prototype)\n",[41,85495,85496],{"class":43,"line":96},[41,85497,85498],{"class":275},"    console.log(Star.prototype.constructor === Star)\n",[41,85500,85501,85503,85505],{"class":43,"line":104},[41,85502,52520],{"class":275},[41,85504,51916],{"class":51403},[41,85506,51410],{"class":275},[41,85508,85509,85511,85513],{"class":43,"line":176},[41,85510,51888],{"class":275},[41,85512,51903],{"class":51403},[41,85514,51410],{"class":275},[20,85516,85517],{},[1603,85518],{"alt":37,"src":85519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[20,85521,85522],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[32,85524,85526],{"className":53170,"code":85525,"language":53172,"meta":37,"style":37},"  \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",[24,85527,85528,85536,85540,85544,85548,85553,85558,85563,85567,85572,85577,85582,85587,85592,85597,85601,85605,85610,85615,85620,85624,85629,85634,85638,85642,85646],{"__ignoreMap":37},[41,85529,85530,85532,85534],{"class":43,"line":44},[41,85531,52247],{"class":275},[41,85533,51916],{"class":51403},[41,85535,51410],{"class":275},[41,85537,85538],{"class":43,"line":51},[41,85539,85474],{"class":275},[41,85541,85542],{"class":43,"line":62},[41,85543,85479],{"class":275},[41,85545,85546],{"class":43,"line":70},[41,85547,2326],{"class":275},[41,85549,85550],{"class":43,"line":76},[41,85551,85552],{"class":275},"    \u002F\u002F const ldh = new Star()\n",[41,85554,85555],{"class":43,"line":83},[41,85556,85557],{"class":275},"    \u002F\u002F console.log(Star.prototype)\n",[41,85559,85560],{"class":43,"line":89},[41,85561,85562],{"class":275},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[41,85564,85565],{"class":43,"line":96},[41,85566,80],{"emptyLinePlaceholder":79},[41,85568,85569],{"class":43,"line":104},[41,85570,85571],{"class":275},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[41,85573,85574],{"class":43,"line":176},[41,85575,85576],{"class":275},"    \u002F\u002F Star.prototype.sing = function () {\n",[41,85578,85579],{"class":43,"line":184},[41,85580,85581],{"class":275},"    \u002F\u002F   console.log('唱歌')\n",[41,85583,85584],{"class":43,"line":1757},[41,85585,85586],{"class":275},"    \u002F\u002F }\n",[41,85588,85589],{"class":43,"line":1763},[41,85590,85591],{"class":275},"    \u002F\u002F Star.prototype.dance = function () {\n",[41,85593,85594],{"class":43,"line":1768},[41,85595,85596],{"class":275},"    \u002F\u002F   console.log('跳舞')\n",[41,85598,85599],{"class":43,"line":1782},[41,85600,85586],{"class":275},[41,85602,85603],{"class":43,"line":1787},[41,85604,85493],{"class":275},[41,85606,85607],{"class":43,"line":1793},[41,85608,85609],{"class":275},"    Star.prototype = {\n",[41,85611,85612],{"class":43,"line":1814},[41,85613,85614],{"class":275},"      sing: function () {\n",[41,85616,85617],{"class":43,"line":1819},[41,85618,85619],{"class":275},"        console.log('唱歌')\n",[41,85621,85622],{"class":43,"line":1833},[41,85623,77995],{"class":275},[41,85625,85626],{"class":43,"line":1838},[41,85627,85628],{"class":275},"      dance: function () {\n",[41,85630,85631],{"class":43,"line":1867},[41,85632,85633],{"class":275},"        console.log('跳舞')\n",[41,85635,85636],{"class":43,"line":1872},[41,85637,52501],{"class":275},[41,85639,85640],{"class":43,"line":1889},[41,85641,2326],{"class":275},[41,85643,85644],{"class":43,"line":1894},[41,85645,85493],{"class":275},[41,85647,85648,85650,85652],{"class":43,"line":1899},[41,85649,52520],{"class":275},[41,85651,51916],{"class":51403},[41,85653,51410],{"class":275},[20,85655,85656],{},"进行输出结果后会发现：",[20,85658,85659],{},[1603,85660],{"alt":37,"src":85661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[20,85663,85664],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[20,85666,85667],{},"所以，要重新指回创造这个原型对象的构造函数",[32,85669,85671],{"className":71316,"code":85670,"language":71318,"meta":37,"style":37},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[24,85672,85673,85687,85692,85697,85708,85721,85726,85737,85751,85755],{"__ignoreMap":37},[41,85674,85675,85678,85680,85683,85685],{"class":43,"line":44},[41,85676,85677],{"class":58},"Star",[41,85679,831],{"class":275},[41,85681,85682],{"class":58},"prototype",[41,85684,13702],{"class":271},[41,85686,15710],{"class":275},[41,85688,85689],{"class":43,"line":51},[41,85690,85691],{"class":47},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[41,85693,85694],{"class":43,"line":62},[41,85695,85696],{"class":275},"  constructor: Star,\n",[41,85698,85699,85702,85704,85706],{"class":43,"line":70},[41,85700,85701],{"class":54},"  sing",[41,85703,51540],{"class":275},[41,85705,54552],{"class":271},[41,85707,54555],{"class":275},[41,85709,85710,85712,85714,85716,85719],{"class":43,"line":76},[41,85711,73856],{"class":275},[41,85713,58350],{"class":54},[41,85715,276],{"class":275},[41,85717,85718],{"class":378},"'唱歌'",[41,85720,282],{"class":275},[41,85722,85723],{"class":43,"line":83},[41,85724,85725],{"class":275},"   },\n",[41,85727,85728,85731,85733,85735],{"class":43,"line":89},[41,85729,85730],{"class":54},"   dance",[41,85732,51540],{"class":275},[41,85734,54552],{"class":271},[41,85736,54555],{"class":275},[41,85738,85739,85742,85744,85746,85749],{"class":43,"line":96},[41,85740,85741],{"class":275},"     console.",[41,85743,58350],{"class":54},[41,85745,276],{"class":275},[41,85747,85748],{"class":378},"'跳舞'",[41,85750,282],{"class":275},[41,85752,85753],{"class":43,"line":104},[41,85754,4447],{"class":275},[41,85756,85757],{"class":43,"line":176},[41,85758,1706],{"class":275},[20,85760,85761],{},[1603,85762],{"alt":37,"src":85763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[20,85765,85766],{},"总结1：",[20,85768,85769],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[20,85771,85772],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[20,85774,85775],{},"constructor指的是他的来源",[20,85777,85778],{},[1603,85779],{"alt":37,"src":85780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[20,85782,85783],{},[1603,85784],{"alt":37,"src":85785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[20,85787,85788],{},"总结2：",[20,85790,85791],{},[1603,85792],{"alt":37,"src":85793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[20,85795,85796],{},[1603,85797],{"alt":37,"src":85798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[20,85800,85801],{},[1603,85802],{"alt":37,"src":85803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[241,85805,85807],{"id":85806},"_4134-对象原型","4.13.4 对象原型",[20,85809,85810],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[20,85812,85813],{},"对象原型就是__proto__这个属性",[20,85815,85816],{},[1603,85817],{"alt":37,"src":85818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[20,85820,85821],{},[1603,85822],{"alt":37,"src":85823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[20,85825,85826],{},[1603,85827],{"alt":37,"src":85828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[20,85830,85831],{},[1603,85832],{"alt":37,"src":85833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[32,85835,85837],{"className":53170,"code":85836,"language":53172,"meta":37,"style":37},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[24,85838,85839,85847,85855,85859,85863,85867,85872,85880],{"__ignoreMap":37},[41,85840,85841,85843,85845],{"class":43,"line":44},[41,85842,1183],{"class":275},[41,85844,51903],{"class":51403},[41,85846,51410],{"class":275},[41,85848,85849,85851,85853],{"class":43,"line":51},[41,85850,52247],{"class":275},[41,85852,51916],{"class":51403},[41,85854,51410],{"class":275},[41,85856,85857],{"class":43,"line":62},[41,85858,85479],{"class":275},[41,85860,85861],{"class":43,"line":70},[41,85862,2326],{"class":275},[41,85864,85865],{"class":43,"line":76},[41,85866,85488],{"class":275},[41,85868,85869],{"class":43,"line":83},[41,85870,85871],{"class":275},"    console.log(ldh)\n",[41,85873,85874,85876,85878],{"class":43,"line":89},[41,85875,52520],{"class":275},[41,85877,51916],{"class":51403},[41,85879,51410],{"class":275},[41,85881,85882,85884,85886],{"class":43,"line":96},[41,85883,51888],{"class":275},[41,85885,51903],{"class":51403},[41,85887,51410],{"class":275},[20,85889,85890],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[20,85892,85893],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[20,85895,85896],{},[1603,85897],{"alt":37,"src":85898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[20,85900,85901],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[20,85903,85904],{},"对象原型指向原型对象",[20,85906,85907],{},[1603,85908],{"alt":37,"src":85909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[20,85911,85912],{},[1603,85913],{"alt":37,"src":85914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[20,85916,85917],{},[1603,85918],{"alt":37,"src":85919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[241,85921,85923],{"id":85922},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[20,85925,85926],{},[1603,85927],{"alt":37,"src":85928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[224,85930,85931,85934,85937,85940],{},[227,85932,85933],{},"构造函数通过new的形式实例化得到实例对象",[227,85935,85936],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[227,85938,85939],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[227,85941,85942],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[20,85944,85945],{},[1603,85946],{"alt":37,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[20,85949,85950],{},"题目梳理：",[20,85952,85953],{},[1603,85954],{"alt":37,"src":85955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[241,85957,85959],{"id":85958},"_4136-原型继承","4.13.6 原型继承",[20,85961,85962],{},[1603,85963],{"alt":37,"src":85964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[20,85966,85967],{},[1603,85968],{"alt":37,"src":85969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[20,85971,85972],{},[1603,85973],{"alt":37,"src":85974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[20,85976,85977],{},[1603,85978],{"alt":37,"src":85979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[20,85981,85982],{},[1603,85983],{"alt":37,"src":85984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[20,85986,85987],{},[1603,85988],{"alt":37,"src":85989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[20,85991,85992],{},[1603,85993],{"alt":37,"src":85994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[20,85996,85997],{},[1603,85998],{"alt":37,"src":85999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[20,86001,86002],{},"回顾：构造函数每次new得到对象都是不同的",[241,86004,86006],{"id":86005},"_4137-原型链","4.13.7 原型链",[20,86008,86009],{},[1603,86010],{"alt":37,"src":86011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[20,86013,86014],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[20,86016,86017],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[20,86019,86020],{},"大哥是Object",[20,86022,86023],{},[1603,86024],{"alt":37,"src":86025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[20,86027,86028],{},[1603,86029],{"alt":37,"src":86030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[20,86032,86033],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[20,86035,86036],{},"万物皆对象",[241,86038,86040],{"id":86039},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[20,86042,86043],{},"模态框",[20,86045,86046],{},"以后遇见这个效果直接使用这个就行",[20,86048,86049],{},[1603,86050],{"alt":37,"src":86051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[20,86053,86054],{},[1603,86055],{"alt":37,"src":86056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[20,86058,86059],{},[1603,86060],{"alt":37,"src":86061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[20,86063,86064],{},[1603,86065],{"alt":37,"src":86066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[20,86068,86069],{},"补充知识点：",[224,86071,86072],{},[227,86073,86074],{},"append()",[20,86076,86077],{},[1603,86078],{"alt":37,"src":86079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[32,86081,86083],{"className":50736,"code":86082,"language":50738,"meta":37,"style":37},"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",[24,86084,86085,86090,86095,86100,86104,86108,86112,86117,86122,86127,86131],{"__ignoreMap":37},[41,86086,86087],{"class":43,"line":44},[41,86088,86089],{"class":275},"append(param1)\n",[41,86091,86092],{"class":43,"line":51},[41,86093,86094],{"class":275},"append(param1, param2)\n",[41,86096,86097],{"class":43,"line":62},[41,86098,86099],{"class":275},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[41,86101,86102],{"class":43,"line":70},[41,86103,80],{"emptyLinePlaceholder":79},[41,86105,86106],{"class":43,"line":76},[41,86107,80],{"emptyLinePlaceholder":79},[41,86109,86110],{"class":43,"line":83},[41,86111,80],{"emptyLinePlaceholder":79},[41,86113,86114],{"class":43,"line":89},[41,86115,86116],{"class":275},"let div = document.createElement(\"div\");\n",[41,86118,86119],{"class":43,"line":96},[41,86120,86121],{"class":275},"let p = document.createElement(\"p\");\n",[41,86123,86124],{"class":43,"line":104},[41,86125,86126],{"class":275},"div.append(p);\n",[41,86128,86129],{"class":43,"line":176},[41,86130,80],{"emptyLinePlaceholder":79},[41,86132,86133,86136,86138],{"class":43,"line":184},[41,86134,86135],{"class":275},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[41,86137,20],{"class":51403},[41,86139,86140],{"class":275},"> ]\n",[224,86142,86143],{"start":51},[227,86144,86145],{},"remove()",[20,86147,86148],{},"自己删自己",[20,86150,86151],{},[1603,86152],{"alt":37,"src":86153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[32,86155,86157],{"className":50736,"code":86156,"language":50738,"meta":37,"style":37},"\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",[24,86158,86159,86169,86183,86187,86195,86209,86229,86241,86249,86256,86268,86281,86316,86328,86339,86351,86363,86375,86402,86412,86416,86420,86429,86441,86455,86465,86477,86481,86485,86495,86506,86516,86526,86539,86552,86562,86566,86570,86579,86589,86601,86605,86609,86618,86628,86638,86650,86654,86658,86668,86684,86695,86705,86715,86727,86739,86751,86755,86759,86772,86783,86787,86795,86803,86807,86815,86835,86855,86863,86868,86894,86899,86904,86923,86928,86940,86945,86956,86966,86976,86981,86986,86990,86995,87000,87005,87025,87030,87050,87055,87069,87074,87079,87084,87100,87104,87109,87138,87143,87148,87153,87164,87168,87172,87176,87181,87206,87211,87236,87241,87250,87254,87259,87284,87288,87313,87317,87326,87330,87335,87353,87363,87367,87375,87383,87387],{"__ignoreMap":37},[41,86160,86161,86163,86165,86167],{"class":43,"line":44},[41,86162,51400],{"class":275},[41,86164,51404],{"class":51403},[41,86166,51407],{"class":54},[41,86168,51410],{"class":275},[41,86170,86171,86173,86175,86177,86179,86181],{"class":43,"line":51},[41,86172,1183],{"class":275},[41,86174,50738],{"class":51403},[41,86176,51419],{"class":54},[41,86178,321],{"class":275},[41,86180,51424],{"class":378},[41,86182,51410],{"class":275},[41,86184,86185],{"class":43,"line":62},[41,86186,80],{"emptyLinePlaceholder":79},[41,86188,86189,86191,86193],{"class":43,"line":70},[41,86190,1183],{"class":275},[41,86192,51437],{"class":51403},[41,86194,51410],{"class":275},[41,86196,86197,86199,86201,86203,86205,86207],{"class":43,"line":76},[41,86198,52247],{"class":275},[41,86200,51447],{"class":51403},[41,86202,51450],{"class":54},[41,86204,321],{"class":275},[41,86206,51455],{"class":378},[41,86208,51410],{"class":275},[41,86210,86211,86213,86215,86217,86219,86221,86223,86225,86227],{"class":43,"line":83},[41,86212,52247],{"class":275},[41,86214,51447],{"class":51403},[41,86216,15058],{"class":54},[41,86218,321],{"class":275},[41,86220,51494],{"class":378},[41,86222,51474],{"class":54},[41,86224,321],{"class":275},[41,86226,51501],{"class":378},[41,86228,51410],{"class":275},[41,86230,86231,86233,86235,86237,86239],{"class":43,"line":89},[41,86232,52247],{"class":275},[41,86234,51510],{"class":51403},[41,86236,51513],{"class":275},[41,86238,51510],{"class":51403},[41,86240,51410],{"class":275},[41,86242,86243,86245,86247],{"class":43,"line":96},[41,86244,52247],{"class":275},[41,86246,189],{"class":51403},[41,86248,51410],{"class":275},[41,86250,86251,86254],{"class":43,"line":104},[41,86252,86253],{"class":54},"    .modal",[41,86255,15710],{"class":275},[41,86257,86258,86260,86262,86264,86266],{"class":43,"line":176},[41,86259,54874],{"class":58},[41,86261,51540],{"class":275},[41,86263,4111],{"class":58},[41,86265,51595],{"class":271},[41,86267,1434],{"class":275},[41,86269,86270,86273,86275,86277,86279],{"class":43,"line":184},[41,86271,86272],{"class":58},"      min-height",[41,86274,51540],{"class":275},[41,86276,584],{"class":58},[41,86278,51595],{"class":271},[41,86280,1434],{"class":275},[41,86282,86283,86285,86287,86289,86291,86293,86295,86297,86299,86301,86303,86305,86307,86309,86311,86314],{"class":43,"line":1757},[41,86284,78853],{"class":58},[41,86286,51540],{"class":275},[41,86288,465],{"class":58},[41,86290,4231],{"class":58},[41,86292,2177],{"class":58},[41,86294,51595],{"class":271},[41,86296,78870],{"class":58},[41,86298,276],{"class":275},[41,86300,465],{"class":58},[41,86302,12573],{"class":275},[41,86304,465],{"class":58},[41,86306,12573],{"class":275},[41,86308,465],{"class":58},[41,86310,12573],{"class":275},[41,86312,86313],{"class":58},"0.1",[41,86315,2857],{"class":275},[41,86317,86318,86320,86322,86324,86326],{"class":43,"line":1763},[41,86319,55237],{"class":58},[41,86321,51540],{"class":275},[41,86323,566],{"class":58},[41,86325,51595],{"class":271},[41,86327,1434],{"class":275},[41,86329,86330,86332,86334,86337],{"class":43,"line":1768},[41,86331,54862],{"class":58},[41,86333,51540],{"class":275},[41,86335,86336],{"class":58},"fixed",[41,86338,1434],{"class":275},[41,86340,86341,86344,86346,86349],{"class":43,"line":1782},[41,86342,86343],{"class":58},"      z-index",[41,86345,51540],{"class":275},[41,86347,86348],{"class":58},"999",[41,86350,1434],{"class":275},[41,86352,86353,86355,86357,86359,86361],{"class":43,"line":1787},[41,86354,54941],{"class":58},[41,86356,51540],{"class":275},[41,86358,929],{"class":58},[41,86360,601],{"class":271},[41,86362,1434],{"class":275},[41,86364,86365,86367,86369,86371,86373],{"class":43,"line":1793},[41,86366,55050],{"class":58},[41,86368,51540],{"class":275},[41,86370,929],{"class":58},[41,86372,601],{"class":271},[41,86374,1434],{"class":275},[41,86376,86377,86379,86381,86383,86385,86388,86390,86392,86394,86396,86398,86400],{"class":43,"line":1814},[41,86378,78894],{"class":58},[41,86380,51540],{"class":275},[41,86382,78899],{"class":58},[41,86384,276],{"class":275},[41,86386,86387],{"class":58},"-50",[41,86389,601],{"class":271},[41,86391,12573],{"class":275},[41,86393,86387],{"class":58},[41,86395,601],{"class":271},[41,86397,12573],{"class":275},[41,86399,465],{"class":58},[41,86401,2857],{"class":275},[41,86403,86404,86406,86408,86410],{"class":43,"line":1819},[41,86405,54987],{"class":58},[41,86407,51540],{"class":275},[41,86409,60945],{"class":58},[41,86411,1434],{"class":275},[41,86413,86414],{"class":43,"line":1833},[41,86415,2326],{"class":275},[41,86417,86418],{"class":43,"line":1838},[41,86419,80],{"emptyLinePlaceholder":79},[41,86421,86422,86424,86427],{"class":43,"line":1867},[41,86423,86253],{"class":54},[41,86425,86426],{"class":54}," .header",[41,86428,15710],{"class":275},[41,86430,86431,86433,86435,86437,86439],{"class":43,"line":1872},[41,86432,57462],{"class":58},[41,86434,51540],{"class":275},[41,86436,674],{"class":58},[41,86438,51595],{"class":271},[41,86440,1434],{"class":275},[41,86442,86443,86445,86447,86449,86451,86453],{"class":43,"line":1889},[41,86444,54798],{"class":58},[41,86446,51540],{"class":275},[41,86448,465],{"class":58},[41,86450,2177],{"class":58},[41,86452,51595],{"class":271},[41,86454,1434],{"class":275},[41,86456,86457,86459,86461,86463],{"class":43,"line":1894},[41,86458,54862],{"class":58},[41,86460,51540],{"class":275},[41,86462,54867],{"class":58},[41,86464,1434],{"class":275},[41,86466,86467,86469,86471,86473,86475],{"class":43,"line":1899},[41,86468,55025],{"class":58},[41,86470,51540],{"class":275},[41,86472,973],{"class":58},[41,86474,51595],{"class":271},[41,86476,1434],{"class":275},[41,86478,86479],{"class":43,"line":1904},[41,86480,2326],{"class":275},[41,86482,86483],{"class":43,"line":1918},[41,86484,80],{"emptyLinePlaceholder":79},[41,86486,86487,86489,86491,86493],{"class":43,"line":1923},[41,86488,86253],{"class":54},[41,86490,86426],{"class":54},[41,86492,3170],{"class":51403},[41,86494,15710],{"class":275},[41,86496,86497,86500,86502,86504],{"class":43,"line":2715},[41,86498,86499],{"class":58},"      font-style",[41,86501,51540],{"class":275},[41,86503,63944],{"class":58},[41,86505,1434],{"class":275},[41,86507,86508,86510,86512,86514],{"class":43,"line":2729},[41,86509,57519],{"class":58},[41,86511,51540],{"class":275},[41,86513,62173],{"class":58},[41,86515,1434],{"class":275},[41,86517,86518,86520,86522,86524],{"class":43,"line":2737},[41,86519,54862],{"class":58},[41,86521,51540],{"class":275},[41,86523,54934],{"class":58},[41,86525,1434],{"class":275},[41,86527,86528,86531,86533,86535,86537],{"class":43,"line":2742},[41,86529,86530],{"class":58},"      right",[41,86532,51540],{"class":275},[41,86534,848],{"class":58},[41,86536,51595],{"class":271},[41,86538,1434],{"class":275},[41,86540,86541,86543,86545,86548,86550],{"class":43,"line":2748},[41,86542,55050],{"class":58},[41,86544,51540],{"class":275},[41,86546,86547],{"class":58},"-2",[41,86549,51595],{"class":271},[41,86551,1434],{"class":275},[41,86553,86554,86556,86558,86560],{"class":43,"line":2754},[41,86555,62128],{"class":58},[41,86557,51540],{"class":275},[41,86559,62133],{"class":58},[41,86561,1434],{"class":275},[41,86563,86564],{"class":43,"line":2759},[41,86565,2326],{"class":275},[41,86567,86568],{"class":43,"line":8086},[41,86569,80],{"emptyLinePlaceholder":79},[41,86571,86572,86574,86577],{"class":43,"line":8110},[41,86573,86253],{"class":54},[41,86575,86576],{"class":54}," .body",[41,86578,15710],{"class":275},[41,86580,86581,86583,86585,86587],{"class":43,"line":8115},[41,86582,57389],{"class":58},[41,86584,51540],{"class":275},[41,86586,51695],{"class":58},[41,86588,1434],{"class":275},[41,86590,86591,86593,86595,86597,86599],{"class":43,"line":8121},[41,86592,54798],{"class":58},[41,86594,51540],{"class":275},[41,86596,719],{"class":58},[41,86598,51595],{"class":271},[41,86600,1434],{"class":275},[41,86602,86603],{"class":43,"line":8148},[41,86604,2326],{"class":275},[41,86606,86607],{"class":43,"line":8153},[41,86608,80],{"emptyLinePlaceholder":79},[41,86610,86611,86613,86616],{"class":43,"line":8159},[41,86612,86253],{"class":54},[41,86614,86615],{"class":54}," .footer",[41,86617,15710],{"class":275},[41,86619,86620,86622,86624,86626],{"class":43,"line":8171},[41,86621,55112],{"class":58},[41,86623,51540],{"class":275},[41,86625,51580],{"class":58},[41,86627,1434],{"class":275},[41,86629,86630,86632,86634,86636],{"class":43,"line":8183},[41,86631,55123],{"class":58},[41,86633,51540],{"class":275},[41,86635,51683],{"class":58},[41,86637,1434],{"class":275},[41,86639,86640,86642,86644,86646,86648],{"class":43,"line":8195},[41,86641,54798],{"class":58},[41,86643,51540],{"class":275},[41,86645,719],{"class":58},[41,86647,51595],{"class":271},[41,86649,1434],{"class":275},[41,86651,86652],{"class":43,"line":9854},[41,86653,2326],{"class":275},[41,86655,86656],{"class":43,"line":9879},[41,86657,80],{"emptyLinePlaceholder":79},[41,86659,86660,86662,86664,86666],{"class":43,"line":9902},[41,86661,86253],{"class":54},[41,86663,86615],{"class":54},[41,86665,1539],{"class":51403},[41,86667,15710],{"class":275},[41,86669,86670,86672,86674,86676,86678,86680,86682],{"class":43,"line":9926},[41,86671,54798],{"class":58},[41,86673,51540],{"class":275},[41,86675,345],{"class":58},[41,86677,51595],{"class":271},[41,86679,2222],{"class":58},[41,86681,51595],{"class":271},[41,86683,1434],{"class":275},[41,86685,86686,86688,86690,86693],{"class":43,"line":9931},[41,86687,61824],{"class":58},[41,86689,51540],{"class":275},[41,86691,86692],{"class":58},"#ccc",[41,86694,1434],{"class":275},[41,86696,86697,86699,86701,86703],{"class":43,"line":9936},[41,86698,64073],{"class":58},[41,86700,51540],{"class":275},[41,86702,54840],{"class":58},[41,86704,1434],{"class":275},[41,86706,86707,86709,86711,86713],{"class":43,"line":9941},[41,86708,57519],{"class":58},[41,86710,51540],{"class":275},[41,86712,60945],{"class":58},[41,86714,1434],{"class":275},[41,86716,86717,86719,86721,86723,86725],{"class":43,"line":9950},[41,86718,55237],{"class":58},[41,86720,51540],{"class":275},[41,86722,351],{"class":58},[41,86724,51595],{"class":271},[41,86726,1434],{"class":275},[41,86728,86729,86731,86733,86735,86737],{"class":43,"line":9955},[41,86730,61853],{"class":58},[41,86732,51540],{"class":275},[41,86734,719],{"class":58},[41,86736,51595],{"class":271},[41,86738,1434],{"class":275},[41,86740,86741,86743,86745,86747,86749],{"class":43,"line":9961},[41,86742,55025],{"class":58},[41,86744,51540],{"class":275},[41,86746,822],{"class":58},[41,86748,51595],{"class":271},[41,86750,1434],{"class":275},[41,86752,86753],{"class":43,"line":9982},[41,86754,2326],{"class":275},[41,86756,86757],{"class":43,"line":9988},[41,86758,80],{"emptyLinePlaceholder":79},[41,86760,86761,86763,86765,86767,86770],{"class":43,"line":10002},[41,86762,86253],{"class":54},[41,86764,86615],{"class":54},[41,86766,1539],{"class":51403},[41,86768,86769],{"class":54},".submit",[41,86771,15710],{"class":275},[41,86773,86774,86776,86778,86781],{"class":43,"line":10008},[41,86775,54987],{"class":58},[41,86777,51540],{"class":275},[41,86779,86780],{"class":58},"#369",[41,86782,1434],{"class":275},[41,86784,86785],{"class":43,"line":10035},[41,86786,2326],{"class":275},[41,86788,86789,86791,86793],{"class":43,"line":10044},[41,86790,52520],{"class":275},[41,86792,189],{"class":51403},[41,86794,51410],{"class":275},[41,86796,86797,86799,86801],{"class":43,"line":10050},[41,86798,51888],{"class":275},[41,86800,51437],{"class":51403},[41,86802,51410],{"class":275},[41,86804,86805],{"class":43,"line":10058},[41,86806,80],{"emptyLinePlaceholder":79},[41,86808,86809,86811,86813],{"class":43,"line":10063},[41,86810,1183],{"class":275},[41,86812,51903],{"class":51403},[41,86814,51410],{"class":275},[41,86816,86817,86819,86821,86823,86825,86828,86831,86833],{"class":43,"line":16742},[41,86818,52247],{"class":275},[41,86820,53990],{"class":51403},[41,86822,15097],{"class":54},[41,86824,321],{"class":275},[41,86826,86827],{"class":378},"\"delete\"",[41,86829,86830],{"class":275},">删除\u003C\u002F",[41,86832,53990],{"class":51403},[41,86834,51410],{"class":275},[41,86836,86837,86839,86841,86843,86845,86848,86851,86853],{"class":43,"line":16748},[41,86838,52247],{"class":275},[41,86840,53990],{"class":51403},[41,86842,15097],{"class":54},[41,86844,321],{"class":275},[41,86846,86847],{"class":378},"\"login\"",[41,86849,86850],{"class":275},">登录\u003C\u002F",[41,86852,53990],{"class":51403},[41,86854,51410],{"class":275},[41,86856,86857,86859,86861],{"class":43,"line":16771},[41,86858,52247],{"class":275},[41,86860,51916],{"class":51403},[41,86862,51410],{"class":275},[41,86864,86865],{"class":43,"line":16777},[41,86866,86867],{"class":47},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[41,86869,86870,86872,86875,86877,86879,86881,86883,86885,86888,86890,86892],{"class":43,"line":16800},[41,86871,70187],{"class":271},[41,86873,86874],{"class":54}," Modal",[41,86876,276],{"class":275},[41,86878,51510],{"class":5354},[41,86880,13702],{"class":271},[41,86882,70033],{"class":378},[41,86884,12573],{"class":275},[41,86886,86887],{"class":5354},"message",[41,86889,13702],{"class":271},[41,86891,70033],{"class":378},[41,86893,12580],{"class":275},[41,86895,86896],{"class":43,"line":16814},[41,86897,86898],{"class":47},"      \u002F\u002F 创建Model 模态框盒子\n",[41,86900,86901],{"class":43,"line":16834},[41,86902,86903],{"class":47},"      \u002F\u002F 1.1 创建div标签\n",[41,86905,86906,86908,86911,86913,86915,86917,86919,86921],{"class":43,"line":16840},[41,86907,70154],{"class":58},[41,86909,86910],{"class":275},".modalBox ",[41,86912,321],{"class":271},[41,86914,54499],{"class":275},[41,86916,70254],{"class":54},[41,86918,276],{"class":275},[41,86920,82034],{"class":378},[41,86922,282],{"class":275},[41,86924,86925],{"class":43,"line":16851},[41,86926,86927],{"class":47},"      \u002F\u002F 1.2 给div 添加类名为model\n",[41,86929,86930,86932,86935,86937],{"class":43,"line":16874},[41,86931,70154],{"class":58},[41,86933,86934],{"class":275},".modalBox.className ",[41,86936,321],{"class":271},[41,86938,86939],{"class":378}," 'modal'\n",[41,86941,86942],{"class":43,"line":16896},[41,86943,86944],{"class":47},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[41,86946,86947,86949,86952,86954],{"class":43,"line":16901},[41,86948,70154],{"class":58},[41,86950,86951],{"class":275},".modalBox.innerHTML ",[41,86953,321],{"class":271},[41,86955,70271],{"class":378},[41,86957,86958,86961,86963],{"class":43,"line":16907},[41,86959,86960],{"class":378},"        \u003Cdiv class=\"header\">${",[41,86962,51510],{"class":275},[41,86964,86965],{"class":378},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[41,86967,86968,86971,86973],{"class":43,"line":16921},[41,86969,86970],{"class":378},"        \u003Cdiv class=\"body\">${",[41,86972,86887],{"class":275},[41,86974,86975],{"class":378},"}\u003C\u002Fdiv>\n",[41,86977,86978],{"class":43,"line":16934},[41,86979,86980],{"class":378},"      `\n",[41,86982,86983],{"class":43,"line":16939},[41,86984,86985],{"class":47},"      \u002F\u002F console.log(this.modalBox)\n",[41,86987,86988],{"class":43,"line":16953},[41,86989,2326],{"class":275},[41,86991,86992],{"class":43,"line":16958},[41,86993,86994],{"class":47},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[41,86996,86997],{"class":43,"line":16964},[41,86998,86999],{"class":47},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[41,87001,87002],{"class":43,"line":16969},[41,87003,87004],{"class":47},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[41,87006,87007,87010,87012,87014,87016,87019,87021,87023],{"class":43,"line":16983},[41,87008,87009],{"class":58},"    Modal",[41,87011,831],{"class":275},[41,87013,85682],{"class":58},[41,87015,831],{"class":275},[41,87017,87018],{"class":54},"open",[41,87020,13702],{"class":271},[41,87022,59021],{"class":271},[41,87024,54555],{"class":275},[41,87026,87027],{"class":43,"line":16988},[41,87028,87029],{"class":47},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[41,87031,87032,87034,87037,87039,87041,87043,87045,87048],{"class":43,"line":16993},[41,87033,58331],{"class":271},[41,87035,87036],{"class":58}," box",[41,87038,13702],{"class":271},[41,87040,54499],{"class":275},[41,87042,54502],{"class":54},[41,87044,276],{"class":275},[41,87046,87047],{"class":378},"'.modal'",[41,87049,282],{"class":275},[41,87051,87052],{"class":43,"line":17007},[41,87053,87054],{"class":47},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[41,87056,87057,87060,87062,87065,87067],{"class":43,"line":17019},[41,87058,87059],{"class":275},"      box ",[41,87061,1855],{"class":271},[41,87063,87064],{"class":275}," box.",[41,87066,57109],{"class":54},[41,87068,2115],{"class":275},[41,87070,87071],{"class":43,"line":17024},[41,87072,87073],{"class":47},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[41,87075,87076],{"class":43,"line":17037},[41,87077,87078],{"class":47},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[41,87080,87081],{"class":43,"line":17042},[41,87082,87083],{"class":47},"      \u002F\u002F append可以增加对象\n",[41,87085,87086,87089,87092,87094,87097],{"class":43,"line":17047},[41,87087,87088],{"class":275},"      document.body.",[41,87090,87091],{"class":54},"append",[41,87093,276],{"class":275},[41,87095,87096],{"class":58},"this",[41,87098,87099],{"class":275},".modalBox)\n",[41,87101,87102],{"class":43,"line":17052},[41,87103,80],{"emptyLinePlaceholder":79},[41,87105,87106],{"class":43,"line":17065},[41,87107,87108],{"class":47},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[41,87110,87111,87113,87116,87118,87120,87123,87125,87127,87129,87131,87134,87136],{"class":43,"line":17070},[41,87112,70154],{"class":58},[41,87114,87115],{"class":275},".modalBox.",[41,87117,54502],{"class":54},[41,87119,276],{"class":275},[41,87121,87122],{"class":378},"'i'",[41,87124,30929],{"class":275},[41,87126,57916],{"class":54},[41,87128,276],{"class":275},[41,87130,57921],{"class":378},[41,87132,87133],{"class":275},", () ",[41,87135,84825],{"class":271},[41,87137,15710],{"class":275},[41,87139,87140],{"class":43,"line":32736},[41,87141,87142],{"class":47},"        \u002F\u002F 这个地方需要用到箭头函数\n",[41,87144,87145],{"class":43,"line":32742},[41,87146,87147],{"class":47},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[41,87149,87150],{"class":43,"line":32748},[41,87151,87152],{"class":47},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[41,87154,87155,87157,87159,87162],{"class":43,"line":32754},[41,87156,64829],{"class":58},[41,87158,831],{"class":275},[41,87160,87161],{"class":54},"close",[41,87163,2115],{"class":275},[41,87165,87166],{"class":43,"line":32760},[41,87167,64918],{"class":275},[41,87169,87170],{"class":43,"line":32771},[41,87171,2326],{"class":275},[41,87173,87174],{"class":43,"line":32777},[41,87175,80],{"emptyLinePlaceholder":79},[41,87177,87178],{"class":43,"line":32797},[41,87179,87180],{"class":47},"    \u002F\u002F 测试一下 点击 删除按钮\n",[41,87182,87183,87185,87187,87189,87192,87194,87196,87198,87200,87202,87204],{"class":43,"line":32803},[41,87184,52510],{"class":275},[41,87186,54502],{"class":54},[41,87188,276],{"class":275},[41,87190,87191],{"class":378},"'#delete'",[41,87193,30929],{"class":275},[41,87195,57916],{"class":54},[41,87197,276],{"class":275},[41,87199,57921],{"class":378},[41,87201,87133],{"class":275},[41,87203,84825],{"class":271},[41,87205,15710],{"class":275},[41,87207,87208],{"class":43,"line":32814},[41,87209,87210],{"class":47},"      \u002F\u002F 先调用Model构造函数\n",[41,87212,87213,87215,87218,87220,87222,87224,87226,87229,87231,87234],{"class":43,"line":32820},[41,87214,58331],{"class":271},[41,87216,87217],{"class":58}," del",[41,87219,13702],{"class":271},[41,87221,11716],{"class":271},[41,87223,86874],{"class":54},[41,87225,276],{"class":275},[41,87227,87228],{"class":378},"'温馨的提示'",[41,87230,12573],{"class":275},[41,87232,87233],{"class":378},"'您没有删除权限操作'",[41,87235,282],{"class":275},[41,87237,87238],{"class":43,"line":32826},[41,87239,87240],{"class":47},"      \u002F\u002F 实例对象调用open方法\n",[41,87242,87243,87246,87248],{"class":43,"line":32832},[41,87244,87245],{"class":275},"      del.",[41,87247,87018],{"class":54},[41,87249,2115],{"class":275},[41,87251,87252],{"class":43,"line":32838},[41,87253,33564],{"class":275},[41,87255,87256],{"class":43,"line":32844},[41,87257,87258],{"class":47},"    \u002F\u002F 测试一下 点击 登录按钮\n",[41,87260,87261,87263,87265,87267,87270,87272,87274,87276,87278,87280,87282],{"class":43,"line":32850},[41,87262,52510],{"class":275},[41,87264,54502],{"class":54},[41,87266,276],{"class":275},[41,87268,87269],{"class":378},"'#login'",[41,87271,30929],{"class":275},[41,87273,57916],{"class":54},[41,87275,276],{"class":275},[41,87277,57921],{"class":378},[41,87279,87133],{"class":275},[41,87281,84825],{"class":271},[41,87283,15710],{"class":275},[41,87285,87286],{"class":43,"line":32856},[41,87287,87210],{"class":47},[41,87289,87290,87292,87295,87297,87299,87301,87303,87306,87308,87311],{"class":43,"line":32876},[41,87291,58331],{"class":271},[41,87293,87294],{"class":58}," log",[41,87296,13702],{"class":271},[41,87298,11716],{"class":271},[41,87300,86874],{"class":54},[41,87302,276],{"class":275},[41,87304,87305],{"class":378},"'友情提示'",[41,87307,12573],{"class":275},[41,87309,87310],{"class":378},"'您还没有登录呢'",[41,87312,282],{"class":275},[41,87314,87315],{"class":43,"line":32882},[41,87316,87240],{"class":47},[41,87318,87319,87322,87324],{"class":43,"line":32898},[41,87320,87321],{"class":275},"      log.",[41,87323,87018],{"class":54},[41,87325,2115],{"class":275},[41,87327,87328],{"class":43,"line":32904},[41,87329,33564],{"class":275},[41,87331,87332],{"class":43,"line":32918},[41,87333,87334],{"class":47},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[41,87336,87337,87339,87341,87343,87345,87347,87349,87351],{"class":43,"line":32924},[41,87338,87009],{"class":58},[41,87340,831],{"class":275},[41,87342,85682],{"class":58},[41,87344,831],{"class":275},[41,87346,87161],{"class":54},[41,87348,13702],{"class":271},[41,87350,59021],{"class":271},[41,87352,54555],{"class":275},[41,87354,87355,87357,87359,87361],{"class":43,"line":32939},[41,87356,70154],{"class":58},[41,87358,87115],{"class":275},[41,87360,57109],{"class":54},[41,87362,2115],{"class":275},[41,87364,87365],{"class":43,"line":32945},[41,87366,2326],{"class":275},[41,87368,87369,87371,87373],{"class":43,"line":32954},[41,87370,52520],{"class":275},[41,87372,51916],{"class":51403},[41,87374,51410],{"class":275},[41,87376,87377,87379,87381],{"class":43,"line":32960},[41,87378,51888],{"class":275},[41,87380,51903],{"class":51403},[41,87382,51410],{"class":275},[41,87384,87385],{"class":43,"line":32969},[41,87386,80],{"emptyLinePlaceholder":79},[41,87388,87389,87391,87393],{"class":43,"line":32975},[41,87390,51888],{"class":275},[41,87392,50738],{"class":51403},[41,87394,51410],{"class":275},[20,87396,87397],{},[1603,87398],{"alt":37,"src":87399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[15,87401,87403],{"id":87402},"_414-深浅拷贝","4.14 深浅拷贝",[241,87405,87407],{"id":87406},"_4141-浅拷贝","4.14.1 浅拷贝",[20,87409,87410],{},[1603,87411],{"alt":37,"src":87412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[20,87414,87415],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[20,87417,87418],{},[1603,87419],{"alt":37,"src":87420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[20,87422,87423],{},[1603,87424],{"alt":37,"src":87425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[20,87427,87428],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[20,87430,87431],{},[1603,87432],{"alt":37,"src":87433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[20,87435,11470],{},[20,87437,87438],{},[1603,87439],{"alt":37,"src":87440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[241,87442,87444],{"id":87443},"_4142-深拷贝","4.14.2 深拷贝",[20,87446,87447],{},"深拷贝：拷贝的是对象，不是地址",[20,87449,87450],{},"常用的三种方法：",[224,87452,87453,87456,87459],{},[227,87454,87455],{},"通过递归实现深拷贝",[227,87457,87458],{},"lodash\u002FcloneDeep",[227,87460,87461],{},"通过JSON.stringify()实现",[22136,87463,87465],{"id":87464},"_41421-递归函数","4.14.2.1 递归函数",[20,87467,87468],{},[1603,87469],{"alt":37,"src":87470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[224,87472,87473],{},[227,87474,87475],{},"死递归占溢出：",[32,87477,87479],{"className":53170,"code":87478,"language":53172,"meta":37,"style":37},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[24,87480,87481,87489,87497,87501,87506,87510,87515,87523],{"__ignoreMap":37},[41,87482,87483,87485,87487],{"class":43,"line":44},[41,87484,1183],{"class":275},[41,87486,51903],{"class":51403},[41,87488,51410],{"class":275},[41,87490,87491,87493,87495],{"class":43,"line":51},[41,87492,52247],{"class":275},[41,87494,51916],{"class":51403},[41,87496,51410],{"class":275},[41,87498,87499],{"class":43,"line":62},[41,87500,77246],{"class":275},[41,87502,87503],{"class":43,"line":70},[41,87504,87505],{"class":275},"      fn()\n",[41,87507,87508],{"class":43,"line":76},[41,87509,2326],{"class":275},[41,87511,87512],{"class":43,"line":83},[41,87513,87514],{"class":275},"    fn()\n",[41,87516,87517,87519,87521],{"class":43,"line":89},[41,87518,52520],{"class":275},[41,87520,51916],{"class":51403},[41,87522,51410],{"class":275},[41,87524,87525,87527,87529],{"class":43,"line":96},[41,87526,51888],{"class":275},[41,87528,51903],{"class":51403},[41,87530,51410],{"class":275},[224,87532,87533],{"start":51},[227,87534,87535],{},"递归函数要加判断条件：",[20,87537,87538],{},[1603,87539],{"alt":37,"src":87540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[224,87542,87543],{"start":62},[227,87544,87545],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[32,87547,87549],{"className":50736,"code":87548,"language":50738,"meta":37,"style":37},"\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",[24,87550,87551,87561,87575,87579,87587,87601,87621,87633,87641,87645,87653,87665,87673,87681,87706,87718,87722,87729,87737,87745,87749],{"__ignoreMap":37},[41,87552,87553,87555,87557,87559],{"class":43,"line":44},[41,87554,51400],{"class":275},[41,87556,51404],{"class":51403},[41,87558,51407],{"class":54},[41,87560,51410],{"class":275},[41,87562,87563,87565,87567,87569,87571,87573],{"class":43,"line":51},[41,87564,1183],{"class":275},[41,87566,50738],{"class":51403},[41,87568,51419],{"class":54},[41,87570,321],{"class":275},[41,87572,51424],{"class":378},[41,87574,51410],{"class":275},[41,87576,87577],{"class":43,"line":62},[41,87578,80],{"emptyLinePlaceholder":79},[41,87580,87581,87583,87585],{"class":43,"line":70},[41,87582,1183],{"class":275},[41,87584,51437],{"class":51403},[41,87586,51410],{"class":275},[41,87588,87589,87591,87593,87595,87597,87599],{"class":43,"line":76},[41,87590,52247],{"class":275},[41,87592,51447],{"class":51403},[41,87594,51450],{"class":54},[41,87596,321],{"class":275},[41,87598,51455],{"class":378},[41,87600,51410],{"class":275},[41,87602,87603,87605,87607,87609,87611,87613,87615,87617,87619],{"class":43,"line":83},[41,87604,52247],{"class":275},[41,87606,51447],{"class":51403},[41,87608,15058],{"class":54},[41,87610,321],{"class":275},[41,87612,51494],{"class":378},[41,87614,51474],{"class":54},[41,87616,321],{"class":275},[41,87618,51501],{"class":378},[41,87620,51410],{"class":275},[41,87622,87623,87625,87627,87629,87631],{"class":43,"line":89},[41,87624,52247],{"class":275},[41,87626,51510],{"class":51403},[41,87628,51513],{"class":275},[41,87630,51510],{"class":51403},[41,87632,51410],{"class":275},[41,87634,87635,87637,87639],{"class":43,"line":96},[41,87636,51888],{"class":275},[41,87638,51437],{"class":51403},[41,87640,51410],{"class":275},[41,87642,87643],{"class":43,"line":104},[41,87644,80],{"emptyLinePlaceholder":79},[41,87646,87647,87649,87651],{"class":43,"line":176},[41,87648,1183],{"class":275},[41,87650,51903],{"class":51403},[41,87652,51410],{"class":275},[41,87654,87655,87657,87659,87661,87663],{"class":43,"line":184},[41,87656,52247],{"class":275},[41,87658,51714],{"class":51403},[41,87660,55417],{"class":275},[41,87662,51714],{"class":51403},[41,87664,51410],{"class":275},[41,87666,87667,87669,87671],{"class":43,"line":1757},[41,87668,52247],{"class":275},[41,87670,51916],{"class":51403},[41,87672,51410],{"class":275},[41,87674,87675,87677,87679],{"class":43,"line":1763},[41,87676,70187],{"class":271},[41,87678,73876],{"class":54},[41,87680,10991],{"class":275},[41,87682,87683,87685,87687,87689,87691,87693,87695,87697,87699,87701,87704],{"class":43,"line":1768},[41,87684,55874],{"class":275},[41,87686,54502],{"class":54},[41,87688,276],{"class":275},[41,87690,82034],{"class":378},[41,87692,74352],{"class":275},[41,87694,321],{"class":271},[41,87696,11716],{"class":271},[41,87698,73892],{"class":54},[41,87700,17399],{"class":275},[41,87702,87703],{"class":54},"toLocaleString",[41,87705,2115],{"class":275},[41,87707,87708,87711,87714,87716],{"class":43,"line":1782},[41,87709,87710],{"class":54},"      setTimeout",[41,87712,87713],{"class":275},"(getTime, ",[41,87715,6548],{"class":58},[41,87717,282],{"class":275},[41,87719,87720],{"class":43,"line":1787},[41,87721,2326],{"class":275},[41,87723,87724,87727],{"class":43,"line":1793},[41,87725,87726],{"class":54},"    getTime",[41,87728,2115],{"class":275},[41,87730,87731,87733,87735],{"class":43,"line":1814},[41,87732,52520],{"class":275},[41,87734,51916],{"class":51403},[41,87736,51410],{"class":275},[41,87738,87739,87741,87743],{"class":43,"line":1819},[41,87740,51888],{"class":275},[41,87742,51903],{"class":51403},[41,87744,51410],{"class":275},[41,87746,87747],{"class":43,"line":1833},[41,87748,80],{"emptyLinePlaceholder":79},[41,87750,87751,87753,87755],{"class":43,"line":1838},[41,87752,51888],{"class":275},[41,87754,50738],{"class":51403},[41,87756,51410],{"class":275},[20,87758,87759],{},[1603,87760],{"alt":37,"src":87761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[224,87763,87764],{"start":70},[227,87765,87455],{},[20,87767,87768],{},[1603,87769],{"alt":37,"src":87770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[20,87772,87773],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[20,87775,39292],{},[20,87777,87778],{},"这个是简易版的递归函数深拷贝",[20,87780,87781],{},"一定要注意先数组再对象，因为万物皆可对象",[32,87783,87785],{"className":50736,"code":87784,"language":50738,"meta":37,"style":37},"\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",[24,87786,87787,87797,87811,87815,87823,87837,87857,87869,87877,87881,87889,87897,87907,87916,87924,87940,87944,87952,87956,87960,87972,87977,87996,88012,88017,88022,88027,88042,88047,88052,88061,88069,88086,88094,88100,88108,88113,88118,88127,88131,88135,88139,88150,88159,88169,88183,88193,88201,88209,88217,88221],{"__ignoreMap":37},[41,87788,87789,87791,87793,87795],{"class":43,"line":44},[41,87790,51400],{"class":275},[41,87792,51404],{"class":51403},[41,87794,51407],{"class":54},[41,87796,51410],{"class":275},[41,87798,87799,87801,87803,87805,87807,87809],{"class":43,"line":51},[41,87800,1183],{"class":275},[41,87802,50738],{"class":51403},[41,87804,51419],{"class":54},[41,87806,321],{"class":275},[41,87808,51424],{"class":378},[41,87810,51410],{"class":275},[41,87812,87813],{"class":43,"line":62},[41,87814,80],{"emptyLinePlaceholder":79},[41,87816,87817,87819,87821],{"class":43,"line":70},[41,87818,1183],{"class":275},[41,87820,51437],{"class":51403},[41,87822,51410],{"class":275},[41,87824,87825,87827,87829,87831,87833,87835],{"class":43,"line":76},[41,87826,52247],{"class":275},[41,87828,51447],{"class":51403},[41,87830,51450],{"class":54},[41,87832,321],{"class":275},[41,87834,51455],{"class":378},[41,87836,51410],{"class":275},[41,87838,87839,87841,87843,87845,87847,87849,87851,87853,87855],{"class":43,"line":83},[41,87840,52247],{"class":275},[41,87842,51447],{"class":51403},[41,87844,15058],{"class":54},[41,87846,321],{"class":275},[41,87848,51494],{"class":378},[41,87850,51474],{"class":54},[41,87852,321],{"class":275},[41,87854,51501],{"class":378},[41,87856,51410],{"class":275},[41,87858,87859,87861,87863,87865,87867],{"class":43,"line":89},[41,87860,52247],{"class":275},[41,87862,51510],{"class":51403},[41,87864,51513],{"class":275},[41,87866,51510],{"class":51403},[41,87868,51410],{"class":275},[41,87870,87871,87873,87875],{"class":43,"line":96},[41,87872,51888],{"class":275},[41,87874,51437],{"class":51403},[41,87876,51410],{"class":275},[41,87878,87879],{"class":43,"line":104},[41,87880,80],{"emptyLinePlaceholder":79},[41,87882,87883,87885,87887],{"class":43,"line":176},[41,87884,1183],{"class":275},[41,87886,51903],{"class":51403},[41,87888,51410],{"class":275},[41,87890,87891,87893,87895],{"class":43,"line":184},[41,87892,52247],{"class":275},[41,87894,51916],{"class":51403},[41,87896,51410],{"class":275},[41,87898,87899,87901,87903,87905],{"class":43,"line":1757},[41,87900,11359],{"class":271},[41,87902,70074],{"class":58},[41,87904,13702],{"class":271},[41,87906,15710],{"class":275},[41,87908,87909,87911,87914],{"class":43,"line":1763},[41,87910,71719],{"class":275},[41,87912,87913],{"class":378},"'pink'",[41,87915,31569],{"class":275},[41,87917,87918,87920,87922],{"class":43,"line":1768},[41,87919,71729],{"class":275},[41,87921,923],{"class":58},[41,87923,31569],{"class":275},[41,87925,87926,87929,87932,87934,87937],{"class":43,"line":1782},[41,87927,87928],{"class":275},"      hobby: [",[41,87930,87931],{"class":378},"'乒乓球'",[41,87933,12573],{"class":275},[41,87935,87936],{"class":378},"'足球'",[41,87938,87939],{"class":275},"],\n",[41,87941,87942],{"class":43,"line":1787},[41,87943,77975],{"class":275},[41,87945,87946,87949],{"class":43,"line":1793},[41,87947,87948],{"class":275},"        baby: ",[41,87950,87951],{"class":378},"'小pink'\n",[41,87953,87954],{"class":43,"line":1814},[41,87955,52501],{"class":275},[41,87957,87958],{"class":43,"line":1819},[41,87959,2326],{"class":275},[41,87961,87962,87964,87967,87969],{"class":43,"line":1833},[41,87963,11359],{"class":271},[41,87965,87966],{"class":58}," o",[41,87968,13702],{"class":271},[41,87970,87971],{"class":275}," {}\n",[41,87973,87974],{"class":43,"line":1838},[41,87975,87976],{"class":47},"    \u002F\u002F 拷贝函数\n",[41,87978,87979,87981,87984,87986,87989,87991,87994],{"class":43,"line":1867},[41,87980,70187],{"class":271},[41,87982,87983],{"class":54}," deepCopy",[41,87985,276],{"class":275},[41,87987,87988],{"class":5354},"newObj",[41,87990,12573],{"class":275},[41,87992,87993],{"class":5354},"oldObj",[41,87995,12580],{"class":275},[41,87997,87998,88000,88002,88004,88007,88009],{"class":43,"line":1872},[41,87999,52387],{"class":271},[41,88001,1798],{"class":275},[41,88003,51950],{"class":271},[41,88005,88006],{"class":275}," k ",[41,88008,26146],{"class":271},[41,88010,88011],{"class":275}," oldObj) {\n",[41,88013,88014],{"class":43,"line":1889},[41,88015,88016],{"class":47},"        \u002F\u002F 处理数组的问题\n",[41,88018,88019],{"class":43,"line":1894},[41,88020,88021],{"class":47},"        \u002F\u002F 判断是否属于数组\n",[41,88023,88024],{"class":43,"line":1899},[41,88025,88026],{"class":47},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[41,88028,88029,88031,88034,88037,88040],{"class":43,"line":1904},[41,88030,2635],{"class":271},[41,88032,88033],{"class":275}," (oldObj[k] ",[41,88035,88036],{"class":271},"instanceof",[41,88038,88039],{"class":54}," Array",[41,88041,12580],{"class":275},[41,88043,88044],{"class":43,"line":1918},[41,88045,88046],{"class":47},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[41,88048,88049],{"class":43,"line":1923},[41,88050,88051],{"class":47},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[41,88053,88054,88057,88059],{"class":43,"line":2715},[41,88055,88056],{"class":275},"          newObj[k] ",[41,88058,321],{"class":271},[41,88060,51941],{"class":275},[41,88062,88063,88066],{"class":43,"line":2729},[41,88064,88065],{"class":54},"          deepCopy",[41,88067,88068],{"class":275},"(newObj[k], oldObj[k])\n",[41,88070,88071,88073,88075,88077,88079,88081,88084],{"class":43,"line":2737},[41,88072,80183],{"class":275},[41,88074,1841],{"class":271},[41,88076,1844],{"class":271},[41,88078,88033],{"class":275},[41,88080,88036],{"class":271},[41,88082,88083],{"class":54}," Object",[41,88085,12580],{"class":275},[41,88087,88088,88090,88092],{"class":43,"line":2742},[41,88089,88056],{"class":275},[41,88091,321],{"class":271},[41,88093,87971],{"class":275},[41,88095,88096,88098],{"class":43,"line":2748},[41,88097,88065],{"class":54},[41,88099,88068],{"class":275},[41,88101,88102,88104,88106],{"class":43,"line":2754},[41,88103,80183],{"class":275},[41,88105,1841],{"class":271},[41,88107,15710],{"class":275},[41,88109,88110],{"class":43,"line":2759},[41,88111,88112],{"class":47},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[41,88114,88115],{"class":43,"line":8086},[41,88116,88117],{"class":47},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[41,88119,88120,88122,88124],{"class":43,"line":8110},[41,88121,88056],{"class":275},[41,88123,321],{"class":271},[41,88125,88126],{"class":275}," oldObj[k]\n",[41,88128,88129],{"class":43,"line":8115},[41,88130,2667],{"class":275},[41,88132,88133],{"class":43,"line":8121},[41,88134,52501],{"class":275},[41,88136,88137],{"class":43,"line":8148},[41,88138,2326],{"class":275},[41,88140,88141,88144,88147],{"class":43,"line":8153},[41,88142,88143],{"class":54},"    deepCopy",[41,88145,88146],{"class":275},"(o, obj) ",[41,88148,88149],{"class":47},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[41,88151,88152,88154,88156],{"class":43,"line":8159},[41,88153,73856],{"class":275},[41,88155,58350],{"class":54},[41,88157,88158],{"class":275},"(o)\n",[41,88160,88161,88164,88166],{"class":43,"line":8171},[41,88162,88163],{"class":275},"    o.age ",[41,88165,321],{"class":271},[41,88167,88168],{"class":58}," 20\n",[41,88170,88171,88174,88176,88178,88180],{"class":43,"line":8183},[41,88172,88173],{"class":275},"    o.hobby[",[41,88175,465],{"class":58},[41,88177,4581],{"class":275},[41,88179,321],{"class":271},[41,88181,88182],{"class":378}," '篮球'\n",[41,88184,88185,88188,88190],{"class":43,"line":8195},[41,88186,88187],{"class":275},"    o.family ",[41,88189,321],{"class":271},[41,88191,88192],{"class":378}," '老pink'\n",[41,88194,88195,88197,88199],{"class":43,"line":9854},[41,88196,73856],{"class":275},[41,88198,58350],{"class":54},[41,88200,70139],{"class":275},[41,88202,88203,88205,88207],{"class":43,"line":9879},[41,88204,52520],{"class":275},[41,88206,51916],{"class":51403},[41,88208,51410],{"class":275},[41,88210,88211,88213,88215],{"class":43,"line":9902},[41,88212,51888],{"class":275},[41,88214,51903],{"class":51403},[41,88216,51410],{"class":275},[41,88218,88219],{"class":43,"line":9926},[41,88220,80],{"emptyLinePlaceholder":79},[41,88222,88223,88225,88227],{"class":43,"line":9931},[41,88224,51888],{"class":275},[41,88226,50738],{"class":51403},[41,88228,51410],{"class":275},[20,88230,88231],{},[1603,88232],{"alt":37,"src":88233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22136,88235,88237,88238],{"id":88236},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[423,88239,88240],{},"js库lodash里面cloneDeep内部实现了深拷贝",[20,88242,88243],{},[511,88244,88245],{"href":88245,"rel":88246},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24001],[20,88248,88249],{},"lodash里边的方法都要加上一个下划线_",[20,88251,88252],{},"_.cloneDeep()",[32,88254,88256],{"className":50736,"code":88255,"language":50738,"meta":37,"style":37},"\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",[24,88257,88258,88268,88282,88286,88294,88308,88328,88340,88348,88352,88360,88365,88384,88392,88402,88410,88418,88430,88434,88440,88444,88448,88464,88472,88481,88489,88497,88505,88509],{"__ignoreMap":37},[41,88259,88260,88262,88264,88266],{"class":43,"line":44},[41,88261,51400],{"class":275},[41,88263,51404],{"class":51403},[41,88265,51407],{"class":54},[41,88267,51410],{"class":275},[41,88269,88270,88272,88274,88276,88278,88280],{"class":43,"line":51},[41,88271,1183],{"class":275},[41,88273,50738],{"class":51403},[41,88275,51419],{"class":54},[41,88277,321],{"class":275},[41,88279,51424],{"class":378},[41,88281,51410],{"class":275},[41,88283,88284],{"class":43,"line":62},[41,88285,80],{"emptyLinePlaceholder":79},[41,88287,88288,88290,88292],{"class":43,"line":70},[41,88289,1183],{"class":275},[41,88291,51437],{"class":51403},[41,88293,51410],{"class":275},[41,88295,88296,88298,88300,88302,88304,88306],{"class":43,"line":76},[41,88297,52247],{"class":275},[41,88299,51447],{"class":51403},[41,88301,51450],{"class":54},[41,88303,321],{"class":275},[41,88305,51455],{"class":378},[41,88307,51410],{"class":275},[41,88309,88310,88312,88314,88316,88318,88320,88322,88324,88326],{"class":43,"line":83},[41,88311,52247],{"class":275},[41,88313,51447],{"class":51403},[41,88315,15058],{"class":54},[41,88317,321],{"class":275},[41,88319,51494],{"class":378},[41,88321,51474],{"class":54},[41,88323,321],{"class":275},[41,88325,51501],{"class":378},[41,88327,51410],{"class":275},[41,88329,88330,88332,88334,88336,88338],{"class":43,"line":89},[41,88331,52247],{"class":275},[41,88333,51510],{"class":51403},[41,88335,51513],{"class":275},[41,88337,51510],{"class":51403},[41,88339,51410],{"class":275},[41,88341,88342,88344,88346],{"class":43,"line":96},[41,88343,51888],{"class":275},[41,88345,51437],{"class":51403},[41,88347,51410],{"class":275},[41,88349,88350],{"class":43,"line":104},[41,88351,80],{"emptyLinePlaceholder":79},[41,88353,88354,88356,88358],{"class":43,"line":176},[41,88355,1183],{"class":275},[41,88357,51903],{"class":51403},[41,88359,51410],{"class":275},[41,88361,88362],{"class":43,"line":184},[41,88363,88364],{"class":47},"  \u003C!-- 先引用这个库 -->\n",[41,88366,88367,88369,88371,88373,88375,88378,88380,88382],{"class":43,"line":1757},[41,88368,52247],{"class":275},[41,88370,51916],{"class":51403},[41,88372,55342],{"class":54},[41,88374,321],{"class":275},[41,88376,88377],{"class":378},"\"lodash.min.js\"",[41,88379,55417],{"class":275},[41,88381,51916],{"class":51403},[41,88383,51410],{"class":275},[41,88385,88386,88388,88390],{"class":43,"line":1763},[41,88387,52247],{"class":275},[41,88389,51916],{"class":51403},[41,88391,51410],{"class":275},[41,88393,88394,88396,88398,88400],{"class":43,"line":1768},[41,88395,11359],{"class":271},[41,88397,70074],{"class":58},[41,88399,13702],{"class":271},[41,88401,15710],{"class":275},[41,88403,88404,88406,88408],{"class":43,"line":1782},[41,88405,71719],{"class":275},[41,88407,87913],{"class":378},[41,88409,31569],{"class":275},[41,88411,88412,88414,88416],{"class":43,"line":1787},[41,88413,71729],{"class":275},[41,88415,923],{"class":58},[41,88417,31569],{"class":275},[41,88419,88420,88422,88424,88426,88428],{"class":43,"line":1793},[41,88421,87928],{"class":275},[41,88423,87931],{"class":378},[41,88425,12573],{"class":275},[41,88427,87936],{"class":378},[41,88429,87939],{"class":275},[41,88431,88432],{"class":43,"line":1814},[41,88433,77975],{"class":275},[41,88435,88436,88438],{"class":43,"line":1819},[41,88437,87948],{"class":275},[41,88439,87951],{"class":378},[41,88441,88442],{"class":43,"line":1833},[41,88443,52501],{"class":275},[41,88445,88446],{"class":43,"line":1838},[41,88447,2326],{"class":275},[41,88449,88450,88452,88454,88456,88459,88462],{"class":43,"line":1867},[41,88451,11359],{"class":271},[41,88453,87966],{"class":58},[41,88455,13702],{"class":271},[41,88457,88458],{"class":275}," _.",[41,88460,88461],{"class":54},"cloneDeep",[41,88463,70139],{"class":275},[41,88465,88466,88468,88470],{"class":43,"line":1872},[41,88467,73856],{"class":275},[41,88469,58350],{"class":54},[41,88471,88158],{"class":275},[41,88473,88474,88477,88479],{"class":43,"line":1889},[41,88475,88476],{"class":275},"    o.family.baby ",[41,88478,321],{"class":271},[41,88480,88192],{"class":378},[41,88482,88483,88485,88487],{"class":43,"line":1894},[41,88484,73856],{"class":275},[41,88486,58350],{"class":54},[41,88488,70139],{"class":275},[41,88490,88491,88493,88495],{"class":43,"line":1899},[41,88492,52520],{"class":275},[41,88494,51916],{"class":51403},[41,88496,51410],{"class":275},[41,88498,88499,88501,88503],{"class":43,"line":1904},[41,88500,51888],{"class":275},[41,88502,51903],{"class":51403},[41,88504,51410],{"class":275},[41,88506,88507],{"class":43,"line":1918},[41,88508,80],{"emptyLinePlaceholder":79},[41,88510,88511,88513,88515],{"class":43,"line":1923},[41,88512,51888],{"class":275},[41,88514,50738],{"class":51403},[41,88516,51410],{"class":275},[20,88518,88519],{},[1603,88520],{"alt":37,"src":88521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22136,88523,88525],{"id":88524},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[32,88527,88529],{"className":50736,"code":88528,"language":50738,"meta":37,"style":37},"\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",[24,88530,88531,88541,88555,88559,88567,88581,88601,88613,88621,88625,88633,88641,88651,88659,88667,88679,88683,88689,88693,88697,88702,88707,88712,88738,88746,88755,88763,88771,88779,88783],{"__ignoreMap":37},[41,88532,88533,88535,88537,88539],{"class":43,"line":44},[41,88534,51400],{"class":275},[41,88536,51404],{"class":51403},[41,88538,51407],{"class":54},[41,88540,51410],{"class":275},[41,88542,88543,88545,88547,88549,88551,88553],{"class":43,"line":51},[41,88544,1183],{"class":275},[41,88546,50738],{"class":51403},[41,88548,51419],{"class":54},[41,88550,321],{"class":275},[41,88552,51424],{"class":378},[41,88554,51410],{"class":275},[41,88556,88557],{"class":43,"line":62},[41,88558,80],{"emptyLinePlaceholder":79},[41,88560,88561,88563,88565],{"class":43,"line":70},[41,88562,1183],{"class":275},[41,88564,51437],{"class":51403},[41,88566,51410],{"class":275},[41,88568,88569,88571,88573,88575,88577,88579],{"class":43,"line":76},[41,88570,52247],{"class":275},[41,88572,51447],{"class":51403},[41,88574,51450],{"class":54},[41,88576,321],{"class":275},[41,88578,51455],{"class":378},[41,88580,51410],{"class":275},[41,88582,88583,88585,88587,88589,88591,88593,88595,88597,88599],{"class":43,"line":83},[41,88584,52247],{"class":275},[41,88586,51447],{"class":51403},[41,88588,15058],{"class":54},[41,88590,321],{"class":275},[41,88592,51494],{"class":378},[41,88594,51474],{"class":54},[41,88596,321],{"class":275},[41,88598,51501],{"class":378},[41,88600,51410],{"class":275},[41,88602,88603,88605,88607,88609,88611],{"class":43,"line":89},[41,88604,52247],{"class":275},[41,88606,51510],{"class":51403},[41,88608,51513],{"class":275},[41,88610,51510],{"class":51403},[41,88612,51410],{"class":275},[41,88614,88615,88617,88619],{"class":43,"line":96},[41,88616,51888],{"class":275},[41,88618,51437],{"class":51403},[41,88620,51410],{"class":275},[41,88622,88623],{"class":43,"line":104},[41,88624,80],{"emptyLinePlaceholder":79},[41,88626,88627,88629,88631],{"class":43,"line":176},[41,88628,1183],{"class":275},[41,88630,51903],{"class":51403},[41,88632,51410],{"class":275},[41,88634,88635,88637,88639],{"class":43,"line":184},[41,88636,52247],{"class":275},[41,88638,51916],{"class":51403},[41,88640,51410],{"class":275},[41,88642,88643,88645,88647,88649],{"class":43,"line":1757},[41,88644,11359],{"class":271},[41,88646,70074],{"class":58},[41,88648,13702],{"class":271},[41,88650,15710],{"class":275},[41,88652,88653,88655,88657],{"class":43,"line":1763},[41,88654,71719],{"class":275},[41,88656,87913],{"class":378},[41,88658,31569],{"class":275},[41,88660,88661,88663,88665],{"class":43,"line":1768},[41,88662,71729],{"class":275},[41,88664,923],{"class":58},[41,88666,31569],{"class":275},[41,88668,88669,88671,88673,88675,88677],{"class":43,"line":1782},[41,88670,87928],{"class":275},[41,88672,87931],{"class":378},[41,88674,12573],{"class":275},[41,88676,87936],{"class":378},[41,88678,87939],{"class":275},[41,88680,88681],{"class":43,"line":1787},[41,88682,77975],{"class":275},[41,88684,88685,88687],{"class":43,"line":1793},[41,88686,87948],{"class":275},[41,88688,87951],{"class":378},[41,88690,88691],{"class":43,"line":1814},[41,88692,52501],{"class":275},[41,88694,88695],{"class":43,"line":1819},[41,88696,2326],{"class":275},[41,88698,88699],{"class":43,"line":1833},[41,88700,88701],{"class":47},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[41,88703,88704],{"class":43,"line":1838},[41,88705,88706],{"class":47},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[41,88708,88709],{"class":43,"line":1867},[41,88710,88711],{"class":47},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[41,88713,88714,88716,88718,88720,88723,88725,88728,88730,88732,88734,88736],{"class":43,"line":1872},[41,88715,11359],{"class":271},[41,88717,87966],{"class":58},[41,88719,13702],{"class":271},[41,88721,88722],{"class":58}," JSON",[41,88724,831],{"class":275},[41,88726,88727],{"class":54},"parse",[41,88729,276],{"class":275},[41,88731,71767],{"class":58},[41,88733,831],{"class":275},[41,88735,71772],{"class":54},[41,88737,71775],{"class":275},[41,88739,88740,88742,88744],{"class":43,"line":1889},[41,88741,73856],{"class":275},[41,88743,58350],{"class":54},[41,88745,88158],{"class":275},[41,88747,88748,88750,88752],{"class":43,"line":1894},[41,88749,88476],{"class":275},[41,88751,321],{"class":271},[41,88753,88754],{"class":378}," '123'\n",[41,88756,88757,88759,88761],{"class":43,"line":1899},[41,88758,73856],{"class":275},[41,88760,58350],{"class":54},[41,88762,70139],{"class":275},[41,88764,88765,88767,88769],{"class":43,"line":1904},[41,88766,52520],{"class":275},[41,88768,51916],{"class":51403},[41,88770,51410],{"class":275},[41,88772,88773,88775,88777],{"class":43,"line":1918},[41,88774,51888],{"class":275},[41,88776,51903],{"class":51403},[41,88778,51410],{"class":275},[41,88780,88781],{"class":43,"line":1923},[41,88782,80],{"emptyLinePlaceholder":79},[41,88784,88785,88787,88789],{"class":43,"line":2715},[41,88786,51888],{"class":275},[41,88788,50738],{"class":51403},[41,88790,51410],{"class":275},[20,88792,88793],{},[1603,88794],{"alt":37,"src":88795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[15,88797,88799],{"id":88798},"_415-异常处理","4.15 异常处理",[224,88801,88802],{},[227,88803,88804],{},"throw抛异常",[20,88806,88807],{},[1603,88808],{"alt":37,"src":88809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[224,88811,88812],{"start":51},[227,88813,88814],{},"try\u002Fcatch 捕获错误信息",[20,88816,88817],{},[1603,88818],{"alt":37,"src":88819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[32,88821,88823],{"className":50736,"code":88822,"language":50738,"meta":37,"style":37},"\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",[24,88824,88825,88835,88849,88853,88861,88875,88895,88907,88915,88919,88927,88939,88947,88956,88963,88968,88987,88996,89007,89012,89022,89027,89032,89037,89054,89058,89063,89070,89082,89086,89098,89102,89106,89111,89116,89123,89131,89139,89143],{"__ignoreMap":37},[41,88826,88827,88829,88831,88833],{"class":43,"line":44},[41,88828,51400],{"class":275},[41,88830,51404],{"class":51403},[41,88832,51407],{"class":54},[41,88834,51410],{"class":275},[41,88836,88837,88839,88841,88843,88845,88847],{"class":43,"line":51},[41,88838,1183],{"class":275},[41,88840,50738],{"class":51403},[41,88842,51419],{"class":54},[41,88844,321],{"class":275},[41,88846,51424],{"class":378},[41,88848,51410],{"class":275},[41,88850,88851],{"class":43,"line":62},[41,88852,80],{"emptyLinePlaceholder":79},[41,88854,88855,88857,88859],{"class":43,"line":70},[41,88856,1183],{"class":275},[41,88858,51437],{"class":51403},[41,88860,51410],{"class":275},[41,88862,88863,88865,88867,88869,88871,88873],{"class":43,"line":76},[41,88864,52247],{"class":275},[41,88866,51447],{"class":51403},[41,88868,51450],{"class":54},[41,88870,321],{"class":275},[41,88872,51455],{"class":378},[41,88874,51410],{"class":275},[41,88876,88877,88879,88881,88883,88885,88887,88889,88891,88893],{"class":43,"line":83},[41,88878,52247],{"class":275},[41,88880,51447],{"class":51403},[41,88882,15058],{"class":54},[41,88884,321],{"class":275},[41,88886,51494],{"class":378},[41,88888,51474],{"class":54},[41,88890,321],{"class":275},[41,88892,51501],{"class":378},[41,88894,51410],{"class":275},[41,88896,88897,88899,88901,88903,88905],{"class":43,"line":89},[41,88898,52247],{"class":275},[41,88900,51510],{"class":51403},[41,88902,51513],{"class":275},[41,88904,51510],{"class":51403},[41,88906,51410],{"class":275},[41,88908,88909,88911,88913],{"class":43,"line":96},[41,88910,51888],{"class":275},[41,88912,51437],{"class":51403},[41,88914,51410],{"class":275},[41,88916,88917],{"class":43,"line":104},[41,88918,80],{"emptyLinePlaceholder":79},[41,88920,88921,88923,88925],{"class":43,"line":176},[41,88922,1183],{"class":275},[41,88924,51903],{"class":51403},[41,88926,51410],{"class":275},[41,88928,88929,88931,88933,88935,88937],{"class":43,"line":184},[41,88930,52247],{"class":275},[41,88932,20],{"class":51403},[41,88934,53597],{"class":275},[41,88936,20],{"class":51403},[41,88938,51410],{"class":275},[41,88940,88941,88943,88945],{"class":43,"line":1757},[41,88942,52247],{"class":275},[41,88944,51916],{"class":51403},[41,88946,51410],{"class":275},[41,88948,88949,88951,88954],{"class":43,"line":1763},[41,88950,70187],{"class":271},[41,88952,88953],{"class":54}," fn",[41,88955,10991],{"class":275},[41,88957,88958,88961],{"class":43,"line":1768},[41,88959,88960],{"class":271},"      try",[41,88962,15710],{"class":275},[41,88964,88965],{"class":43,"line":1782},[41,88966,88967],{"class":47},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[41,88969,88970,88972,88974,88976,88978,88980,88982,88985],{"class":43,"line":1787},[41,88971,61373],{"class":271},[41,88973,6963],{"class":58},[41,88975,13702],{"class":271},[41,88977,54499],{"class":275},[41,88979,54502],{"class":54},[41,88981,276],{"class":275},[41,88983,88984],{"class":378},"'.p'",[41,88986,282],{"class":275},[41,88988,88989,88992,88994],{"class":43,"line":1793},[41,88990,88991],{"class":275},"        p.style.color ",[41,88993,321],{"class":271},[41,88995,67154],{"class":378},[41,88997,88998,89001,89004],{"class":43,"line":1814},[41,88999,89000],{"class":275},"      } ",[41,89002,89003],{"class":271},"catch",[41,89005,89006],{"class":275}," (err) {\n",[41,89008,89009],{"class":43,"line":1819},[41,89010,89011],{"class":47},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[41,89013,89014,89017,89019],{"class":43,"line":1833},[41,89015,89016],{"class":275},"        console.",[41,89018,58350],{"class":54},[41,89020,89021],{"class":275},"(err.message)\n",[41,89023,89024],{"class":43,"line":1838},[41,89025,89026],{"class":47},"        \u002F\u002F 想要中断程序，需要加return\n",[41,89028,89029],{"class":43,"line":1867},[41,89030,89031],{"class":47},"        \u002F\u002F return\n",[41,89033,89034],{"class":43,"line":1872},[41,89035,89036],{"class":47},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[41,89038,89039,89042,89044,89047,89049,89052],{"class":43,"line":1889},[41,89040,89041],{"class":271},"        throw",[41,89043,11716],{"class":271},[41,89045,89046],{"class":54}," Error",[41,89048,276],{"class":275},[41,89050,89051],{"class":378},"'你看看，选择器错误了吧'",[41,89053,282],{"class":275},[41,89055,89056],{"class":43,"line":1894},[41,89057,52501],{"class":275},[41,89059,89060],{"class":43,"line":1899},[41,89061,89062],{"class":47},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[41,89064,89065,89068],{"class":43,"line":1904},[41,89066,89067],{"class":271},"      finally",[41,89069,15710],{"class":275},[41,89071,89072,89075,89077,89080],{"class":43,"line":1918},[41,89073,89074],{"class":54},"        alert",[41,89076,276],{"class":275},[41,89078,89079],{"class":378},"'弹出对话框'",[41,89081,282],{"class":275},[41,89083,89084],{"class":43,"line":1923},[41,89085,52501],{"class":275},[41,89087,89088,89090,89092,89094,89096],{"class":43,"line":2715},[41,89089,58347],{"class":275},[41,89091,58350],{"class":54},[41,89093,276],{"class":275},[41,89095,745],{"class":58},[41,89097,282],{"class":275},[41,89099,89100],{"class":43,"line":2729},[41,89101,80],{"emptyLinePlaceholder":79},[41,89103,89104],{"class":43,"line":2737},[41,89105,2326],{"class":275},[41,89107,89108],{"class":43,"line":2742},[41,89109,89110],{"class":47},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[41,89112,89113],{"class":43,"line":2748},[41,89114,89115],{"class":47},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[41,89117,89118,89121],{"class":43,"line":2754},[41,89119,89120],{"class":54},"    fn",[41,89122,2115],{"class":275},[41,89124,89125,89127,89129],{"class":43,"line":2759},[41,89126,52520],{"class":275},[41,89128,51916],{"class":51403},[41,89130,51410],{"class":275},[41,89132,89133,89135,89137],{"class":43,"line":8086},[41,89134,51888],{"class":275},[41,89136,51903],{"class":51403},[41,89138,51410],{"class":275},[41,89140,89141],{"class":43,"line":8110},[41,89142,80],{"emptyLinePlaceholder":79},[41,89144,89145,89147,89149],{"class":43,"line":8115},[41,89146,51888],{"class":275},[41,89148,50738],{"class":51403},[41,89150,51410],{"class":275},[20,89152,89153],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[224,89155,89156],{"start":62},[227,89157,89158],{},"debugger",[20,89160,89161],{},[1603,89162],{"alt":37,"src":89163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[20,89165,89166],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[15,89168,89170],{"id":89169},"_416-处理this","4.16 处理this",[241,89172,89174],{"id":89173},"_4161-this的指向","4.16.1 this的指向",[224,89176,89177],{},[227,89178,89179],{},"普通函数的this",[20,89181,89182],{},[1603,89183],{"alt":37,"src":89184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[224,89186,89187],{"start":51},[227,89188,89189],{},"箭头函数的this",[20,89191,89192],{},[1603,89193],{"alt":37,"src":89194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[20,89196,89197],{},[1603,89198],{"alt":37,"src":89199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[20,89201,89202],{},[1603,89203],{"alt":37,"src":89204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[241,89206,89208],{"id":89207},"_4162-this的改变","4.16.2 this的改变",[20,89210,89211],{},"call() apply() bind()",[224,89213,89214],{},[227,89215,89216],{},"call()",[20,89218,89219],{},[1603,89220],{"alt":37,"src":89221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[20,89223,89224],{},"两个作用：①调用函数；②改变this指向",[32,89226,89228],{"className":53170,"code":89227,"language":53172,"meta":37,"style":37},"\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",[24,89229,89230,89238,89246,89250,89255,89259,89264,89269,89274,89278,89283,89291],{"__ignoreMap":37},[41,89231,89232,89234,89236],{"class":43,"line":44},[41,89233,1183],{"class":275},[41,89235,51903],{"class":51403},[41,89237,51410],{"class":275},[41,89239,89240,89242,89244],{"class":43,"line":51},[41,89241,52247],{"class":275},[41,89243,51916],{"class":51403},[41,89245,51410],{"class":275},[41,89247,89248],{"class":43,"line":62},[41,89249,71626],{"class":275},[41,89251,89252],{"class":43,"line":70},[41,89253,89254],{"class":275},"      uname: 'pink'\n",[41,89256,89257],{"class":43,"line":76},[41,89258,2326],{"class":275},[41,89260,89261],{"class":43,"line":83},[41,89262,89263],{"class":275},"    function fn(x, y) {\n",[41,89265,89266],{"class":43,"line":89},[41,89267,89268],{"class":275},"      console.log(this)  \u002F\u002Fwindow\n",[41,89270,89271],{"class":43,"line":96},[41,89272,89273],{"class":275},"      console.log(x + y)\n",[41,89275,89276],{"class":43,"line":104},[41,89277,2326],{"class":275},[41,89279,89280],{"class":43,"line":176},[41,89281,89282],{"class":275},"    fn.call(obj, 1, 2)\n",[41,89284,89285,89287,89289],{"class":43,"line":184},[41,89286,52520],{"class":275},[41,89288,51916],{"class":51403},[41,89290,51410],{"class":275},[41,89292,89293,89295,89297],{"class":43,"line":1757},[41,89294,51888],{"class":275},[41,89296,51903],{"class":51403},[41,89298,51410],{"class":275},[20,89300,89301],{},[1603,89302],{"alt":37,"src":89303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[224,89305,89306],{"start":51},[227,89307,89308],{},"apply()",[20,89310,89311],{},[1603,89312],{"alt":37,"src":89313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[20,89315,89224],{},[20,89317,89318],{},"call传递的是普通参数，而apply必须传递的是数组",[32,89320,89322],{"className":50736,"code":89321,"language":50738,"meta":37,"style":37},"\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",[24,89323,89324,89334,89348,89352,89360,89374,89394,89406,89414,89418,89426,89434,89444,89451,89455,89460,89476,89488,89502,89506,89511,89530,89535,89539,89544,89549,89557,89562,89584,89589,89605,89621,89633,89637,89642,89661,89669,89677,89681],{"__ignoreMap":37},[41,89325,89326,89328,89330,89332],{"class":43,"line":44},[41,89327,51400],{"class":275},[41,89329,51404],{"class":51403},[41,89331,51407],{"class":54},[41,89333,51410],{"class":275},[41,89335,89336,89338,89340,89342,89344,89346],{"class":43,"line":51},[41,89337,1183],{"class":275},[41,89339,50738],{"class":51403},[41,89341,51419],{"class":54},[41,89343,321],{"class":275},[41,89345,51424],{"class":378},[41,89347,51410],{"class":275},[41,89349,89350],{"class":43,"line":62},[41,89351,80],{"emptyLinePlaceholder":79},[41,89353,89354,89356,89358],{"class":43,"line":70},[41,89355,1183],{"class":275},[41,89357,51437],{"class":51403},[41,89359,51410],{"class":275},[41,89361,89362,89364,89366,89368,89370,89372],{"class":43,"line":76},[41,89363,52247],{"class":275},[41,89365,51447],{"class":51403},[41,89367,51450],{"class":54},[41,89369,321],{"class":275},[41,89371,51455],{"class":378},[41,89373,51410],{"class":275},[41,89375,89376,89378,89380,89382,89384,89386,89388,89390,89392],{"class":43,"line":83},[41,89377,52247],{"class":275},[41,89379,51447],{"class":51403},[41,89381,15058],{"class":54},[41,89383,321],{"class":275},[41,89385,51494],{"class":378},[41,89387,51474],{"class":54},[41,89389,321],{"class":275},[41,89391,51501],{"class":378},[41,89393,51410],{"class":275},[41,89395,89396,89398,89400,89402,89404],{"class":43,"line":89},[41,89397,52247],{"class":275},[41,89399,51510],{"class":51403},[41,89401,51513],{"class":275},[41,89403,51510],{"class":51403},[41,89405,51410],{"class":275},[41,89407,89408,89410,89412],{"class":43,"line":96},[41,89409,51888],{"class":275},[41,89411,51437],{"class":51403},[41,89413,51410],{"class":275},[41,89415,89416],{"class":43,"line":104},[41,89417,80],{"emptyLinePlaceholder":79},[41,89419,89420,89422,89424],{"class":43,"line":176},[41,89421,1183],{"class":275},[41,89423,51903],{"class":51403},[41,89425,51410],{"class":275},[41,89427,89428,89430,89432],{"class":43,"line":184},[41,89429,52247],{"class":275},[41,89431,51916],{"class":51403},[41,89433,51410],{"class":275},[41,89435,89436,89438,89440,89442],{"class":43,"line":1757},[41,89437,11359],{"class":271},[41,89439,70074],{"class":58},[41,89441,13702],{"class":271},[41,89443,15710],{"class":275},[41,89445,89446,89448],{"class":43,"line":1763},[41,89447,71729],{"class":275},[41,89449,89450],{"class":58},"18\n",[41,89452,89453],{"class":43,"line":1768},[41,89454,2326],{"class":275},[41,89456,89457],{"class":43,"line":1782},[41,89458,89459],{"class":47},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[41,89461,89462,89464,89466,89468,89470,89472,89474],{"class":43,"line":1787},[41,89463,70187],{"class":271},[41,89465,88953],{"class":54},[41,89467,276],{"class":275},[41,89469,1093],{"class":5354},[41,89471,12573],{"class":275},[41,89473,1118],{"class":5354},[41,89475,12580],{"class":275},[41,89477,89478,89480,89482,89484,89486],{"class":43,"line":1793},[41,89479,58347],{"class":275},[41,89481,58350],{"class":54},[41,89483,276],{"class":275},[41,89485,87096],{"class":58},[41,89487,282],{"class":275},[41,89489,89490,89492,89494,89497,89499],{"class":43,"line":1814},[41,89491,58347],{"class":275},[41,89493,58350],{"class":54},[41,89495,89496],{"class":275},"(x ",[41,89498,754],{"class":271},[41,89500,89501],{"class":275}," y)\n",[41,89503,89504],{"class":43,"line":1819},[41,89505,2326],{"class":275},[41,89507,89508],{"class":43,"line":1833},[41,89509,89510],{"class":47},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[41,89512,89513,89516,89519,89522,89524,89526,89528],{"class":43,"line":1838},[41,89514,89515],{"class":275},"    fn.",[41,89517,89518],{"class":54},"apply",[41,89520,89521],{"class":275},"(obj, [",[41,89523,26],{"class":58},[41,89525,12573],{"class":275},[41,89527,351],{"class":58},[41,89529,4795],{"class":275},[41,89531,89532],{"class":43,"line":1867},[41,89533,89534],{"class":47},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[41,89536,89537],{"class":43,"line":1872},[41,89538,80],{"emptyLinePlaceholder":79},[41,89540,89541],{"class":43,"line":1889},[41,89542,89543],{"class":47},"    \u002F\u002F 使用场景：求数组最大值\n",[41,89545,89546],{"class":43,"line":1894},[41,89547,89548],{"class":47},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[41,89550,89551,89554],{"class":43,"line":1899},[41,89552,89553],{"class":47},"    \u002F\u002F console.log(max)",[41,89555,89556],{"class":47},"   \u002F\u002F3\n",[41,89558,89559],{"class":43,"line":1904},[41,89560,89561],{"class":47},"    \u002F\u002F 指向空或者Math都是可以的\n",[41,89563,89564,89566,89568,89570,89572,89574,89576,89578,89580,89582],{"class":43,"line":1918},[41,89565,11359],{"class":271},[41,89567,57798],{"class":58},[41,89569,13702],{"class":271},[41,89571,52329],{"class":275},[41,89573,584],{"class":58},[41,89575,12573],{"class":275},[41,89577,777],{"class":58},[41,89579,12573],{"class":275},[41,89581,808],{"class":58},[41,89583,33349],{"class":275},[41,89585,89586],{"class":43,"line":1923},[41,89587,89588],{"class":47},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[41,89590,89591,89593,89595,89597,89600,89602],{"class":43,"line":2715},[41,89592,11359],{"class":271},[41,89594,6089],{"class":58},[41,89596,13702],{"class":271},[41,89598,89599],{"class":275}," Math.max.",[41,89601,89518],{"class":54},[41,89603,89604],{"class":275},"(Math, arr)\n",[41,89606,89607,89609,89612,89614,89617,89619],{"class":43,"line":2729},[41,89608,11359],{"class":271},[41,89610,89611],{"class":58}," min",[41,89613,13702],{"class":271},[41,89615,89616],{"class":275}," Math.min.",[41,89618,89518],{"class":54},[41,89620,89604],{"class":275},[41,89622,89623,89625,89627,89630],{"class":43,"line":2737},[41,89624,73856],{"class":275},[41,89626,58350],{"class":54},[41,89628,89629],{"class":275},"(max, min)     ",[41,89631,89632],{"class":47},"\u002F\u002F100,4\n",[41,89634,89635],{"class":43,"line":2742},[41,89636,80],{"emptyLinePlaceholder":79},[41,89638,89639],{"class":43,"line":2748},[41,89640,89641],{"class":47},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[41,89643,89644,89646,89648,89651,89653,89655,89658],{"class":43,"line":2754},[41,89645,73856],{"class":275},[41,89647,58350],{"class":54},[41,89649,89650],{"class":275},"(Max.",[41,89652,6153],{"class":54},[41,89654,276],{"class":275},[41,89656,89657],{"class":271},"...",[41,89659,89660],{"class":275},"arr))\n",[41,89662,89663,89665,89667],{"class":43,"line":2759},[41,89664,52520],{"class":275},[41,89666,51916],{"class":51403},[41,89668,51410],{"class":275},[41,89670,89671,89673,89675],{"class":43,"line":8086},[41,89672,51888],{"class":275},[41,89674,51903],{"class":51403},[41,89676,51410],{"class":275},[41,89678,89679],{"class":43,"line":8110},[41,89680,80],{"emptyLinePlaceholder":79},[41,89682,89683,89685,89687],{"class":43,"line":8115},[41,89684,51888],{"class":275},[41,89686,50738],{"class":51403},[41,89688,51410],{"class":275},[20,89690,89691],{},[1603,89692],{"alt":37,"src":89693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[224,89695,89696],{"start":62},[227,89697,89698],{},"bind()",[20,89700,89701],{},[1603,89702],{"alt":37,"src":89703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[20,89705,89706],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[20,89708,89709],{},"bind的语法跟call很相似",[32,89711,89713],{"className":53170,"code":89712,"language":53172,"meta":37,"style":37},"\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",[24,89714,89715,89723,89731,89735,89740,89744,89748,89753,89757,89762,89767,89772,89777,89782,89787,89792,89796,89804],{"__ignoreMap":37},[41,89716,89717,89719,89721],{"class":43,"line":44},[41,89718,1183],{"class":275},[41,89720,51903],{"class":51403},[41,89722,51410],{"class":275},[41,89724,89725,89727,89729],{"class":43,"line":51},[41,89726,52247],{"class":275},[41,89728,51916],{"class":51403},[41,89730,51410],{"class":275},[41,89732,89733],{"class":43,"line":62},[41,89734,71626],{"class":275},[41,89736,89737],{"class":43,"line":70},[41,89738,89739],{"class":275},"      age: 18\n",[41,89741,89742],{"class":43,"line":76},[41,89743,2326],{"class":275},[41,89745,89746],{"class":43,"line":83},[41,89747,77246],{"class":275},[41,89749,89750],{"class":43,"line":89},[41,89751,89752],{"class":275},"      console.log(this)\n",[41,89754,89755],{"class":43,"line":96},[41,89756,2326],{"class":275},[41,89758,89759],{"class":43,"line":104},[41,89760,89761],{"class":275},"    \u002F\u002F 1.bind 不会调用函数\n",[41,89763,89764],{"class":43,"line":176},[41,89765,89766],{"class":275},"    \u002F\u002F 2.bind能改变this的指向\n",[41,89768,89769],{"class":43,"line":184},[41,89770,89771],{"class":275},"    fn.bind()\n",[41,89773,89774],{"class":43,"line":1757},[41,89775,89776],{"class":275},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[41,89778,89779],{"class":43,"line":1763},[41,89780,89781],{"class":275},"    const fun = fn.bind(obj)\n",[41,89783,89784],{"class":43,"line":1768},[41,89785,89786],{"class":275},"    \u002F\u002F console.log(fun)\n",[41,89788,89789],{"class":43,"line":1782},[41,89790,89791],{"class":275},"    \u002F\u002F 调用,查看this的指向\n",[41,89793,89794],{"class":43,"line":1787},[41,89795,52754],{"class":275},[41,89797,89798,89800,89802],{"class":43,"line":1793},[41,89799,52520],{"class":275},[41,89801,51916],{"class":51403},[41,89803,51410],{"class":275},[41,89805,89806,89808,89810],{"class":43,"line":1814},[41,89807,51888],{"class":275},[41,89809,51903],{"class":51403},[41,89811,51410],{"class":275},[20,89813,89814],{},[1603,89815],{"alt":37,"src":89816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[224,89818,89819],{"start":70},[227,89820,89821],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[32,89823,89825],{"className":53170,"code":89824,"language":53172,"meta":37,"style":37},"\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",[24,89826,89827,89835,89848,89856,89861,89865,89870,89875,89880,89885,89890,89895,89900,89905,89909,89917],{"__ignoreMap":37},[41,89828,89829,89831,89833],{"class":43,"line":44},[41,89830,1183],{"class":275},[41,89832,51903],{"class":51403},[41,89834,51410],{"class":275},[41,89836,89837,89839,89841,89844,89846],{"class":43,"line":51},[41,89838,52247],{"class":275},[41,89840,53990],{"class":51403},[41,89842,89843],{"class":275},">禁用\u003C\u002F",[41,89845,53990],{"class":51403},[41,89847,51410],{"class":275},[41,89849,89850,89852,89854],{"class":43,"line":62},[41,89851,52247],{"class":275},[41,89853,51916],{"class":51403},[41,89855,51410],{"class":275},[41,89857,89858],{"class":43,"line":70},[41,89859,89860],{"class":275},"    const btn = document.querySelector('button')\n",[41,89862,89863],{"class":43,"line":76},[41,89864,59119],{"class":275},[41,89866,89867],{"class":43,"line":83},[41,89868,89869],{"class":275},"      this.disabled = true\n",[41,89871,89872],{"class":43,"line":89},[41,89873,89874],{"class":275},"      \u002F\u002F 定时器是window进行调用的\n",[41,89876,89877],{"class":43,"line":96},[41,89878,89879],{"class":275},"      setTimeout(function () {\n",[41,89881,89882],{"class":43,"line":104},[41,89883,89884],{"class":275},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[41,89886,89887],{"class":43,"line":176},[41,89888,89889],{"class":275},"        this.disabled = false\n",[41,89891,89892],{"class":43,"line":184},[41,89893,89894],{"class":275},"      }.bind(this), 2000)\n",[41,89896,89897],{"class":43,"line":1757},[41,89898,89899],{"class":275},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[41,89901,89902],{"class":43,"line":1763},[41,89903,89904],{"class":275},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[41,89906,89907],{"class":43,"line":1768},[41,89908,33564],{"class":275},[41,89910,89911,89913,89915],{"class":43,"line":1782},[41,89912,52520],{"class":275},[41,89914,51916],{"class":51403},[41,89916,51410],{"class":275},[41,89918,89919,89921,89923],{"class":43,"line":1787},[41,89920,51888],{"class":275},[41,89922,51903],{"class":51403},[41,89924,51410],{"class":275},[224,89926,89927],{"start":76},[227,89928,22091],{},[20,89930,89931],{},[1603,89932],{"alt":37,"src":89933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[15,89935,89937],{"id":89936},"_417-性能优化","4.17 性能优化",[241,89939,89941],{"id":89940},"_4171-防抖","4.17.1 防抖",[20,89943,89944],{},[1603,89945],{"alt":37,"src":89946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[20,89948,89949],{},[423,89950,89951],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[20,89953,89954],{},"防抖实现方式：",[1280,89956,89957],{},[227,89958,89959],{},"lodash 提供了防抖处理",[20,89961,89962],{},"_.debounce(func,[wait=0],[options={}])",[20,89964,89965],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[32,89967,89969],{"className":50736,"code":89968,"language":50738,"meta":37,"style":37},"\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",[24,89970,89971,89981,89995,89999,90007,90021,90041,90053,90061,90067,90077,90089,90101,90112,90124,90134,90144,90157,90161,90169,90177,90181,90189,90207,90225,90233,90252,90262,90271,90282,90287,90291,90296,90301,90306,90331,90339,90347,90351],{"__ignoreMap":37},[41,89972,89973,89975,89977,89979],{"class":43,"line":44},[41,89974,51400],{"class":275},[41,89976,51404],{"class":51403},[41,89978,51407],{"class":54},[41,89980,51410],{"class":275},[41,89982,89983,89985,89987,89989,89991,89993],{"class":43,"line":51},[41,89984,1183],{"class":275},[41,89986,50738],{"class":51403},[41,89988,51419],{"class":54},[41,89990,321],{"class":275},[41,89992,51424],{"class":378},[41,89994,51410],{"class":275},[41,89996,89997],{"class":43,"line":62},[41,89998,80],{"emptyLinePlaceholder":79},[41,90000,90001,90003,90005],{"class":43,"line":70},[41,90002,1183],{"class":275},[41,90004,51437],{"class":51403},[41,90006,51410],{"class":275},[41,90008,90009,90011,90013,90015,90017,90019],{"class":43,"line":76},[41,90010,52247],{"class":275},[41,90012,51447],{"class":51403},[41,90014,51450],{"class":54},[41,90016,321],{"class":275},[41,90018,51455],{"class":378},[41,90020,51410],{"class":275},[41,90022,90023,90025,90027,90029,90031,90033,90035,90037,90039],{"class":43,"line":83},[41,90024,52247],{"class":275},[41,90026,51447],{"class":51403},[41,90028,15058],{"class":54},[41,90030,321],{"class":275},[41,90032,51494],{"class":378},[41,90034,51474],{"class":54},[41,90036,321],{"class":275},[41,90038,51501],{"class":378},[41,90040,51410],{"class":275},[41,90042,90043,90045,90047,90049,90051],{"class":43,"line":89},[41,90044,52247],{"class":275},[41,90046,51510],{"class":51403},[41,90048,51513],{"class":275},[41,90050,51510],{"class":51403},[41,90052,51410],{"class":275},[41,90054,90055,90057,90059],{"class":43,"line":96},[41,90056,52247],{"class":275},[41,90058,189],{"class":51403},[41,90060,51410],{"class":275},[41,90062,90063,90065],{"class":43,"line":104},[41,90064,54855],{"class":54},[41,90066,15710],{"class":275},[41,90068,90069,90071,90073,90075],{"class":43,"line":176},[41,90070,72699],{"class":58},[41,90072,51540],{"class":275},[41,90074,60608],{"class":58},[41,90076,1434],{"class":275},[41,90078,90079,90081,90083,90085,90087],{"class":43,"line":184},[41,90080,54874],{"class":58},[41,90082,51540],{"class":275},[41,90084,1862],{"class":58},[41,90086,51595],{"class":271},[41,90088,1434],{"class":275},[41,90090,90091,90093,90095,90097,90099],{"class":43,"line":1757},[41,90092,54888],{"class":58},[41,90094,51540],{"class":275},[41,90096,1862],{"class":58},[41,90098,51595],{"class":271},[41,90100,1434],{"class":275},[41,90102,90103,90105,90107,90110],{"class":43,"line":1763},[41,90104,54987],{"class":58},[41,90106,51540],{"class":275},[41,90108,90109],{"class":58},"gray",[41,90111,1434],{"class":275},[41,90113,90114,90116,90118,90120,90122],{"class":43,"line":1768},[41,90115,55025],{"class":58},[41,90117,51540],{"class":275},[41,90119,1098],{"class":58},[41,90121,51595],{"class":271},[41,90123,1434],{"class":275},[41,90125,90126,90128,90130,90132],{"class":43,"line":1782},[41,90127,57519],{"class":58},[41,90129,51540],{"class":275},[41,90131,60945],{"class":58},[41,90133,1434],{"class":275},[41,90135,90136,90138,90140,90142],{"class":43,"line":1787},[41,90137,57389],{"class":58},[41,90139,51540],{"class":275},[41,90141,51695],{"class":58},[41,90143,1434],{"class":275},[41,90145,90146,90149,90151,90153,90155],{"class":43,"line":1793},[41,90147,90148],{"class":58},"      padding-top",[41,90150,51540],{"class":275},[41,90152,592],{"class":58},[41,90154,51595],{"class":271},[41,90156,1434],{"class":275},[41,90158,90159],{"class":43,"line":1814},[41,90160,2326],{"class":275},[41,90162,90163,90165,90167],{"class":43,"line":1819},[41,90164,52520],{"class":275},[41,90166,189],{"class":51403},[41,90168,51410],{"class":275},[41,90170,90171,90173,90175],{"class":43,"line":1833},[41,90172,51888],{"class":275},[41,90174,51437],{"class":51403},[41,90176,51410],{"class":275},[41,90178,90179],{"class":43,"line":1838},[41,90180,80],{"emptyLinePlaceholder":79},[41,90182,90183,90185,90187],{"class":43,"line":1867},[41,90184,1183],{"class":275},[41,90186,51903],{"class":51403},[41,90188,51410],{"class":275},[41,90190,90191,90193,90195,90197,90199,90201,90203,90205],{"class":43,"line":1872},[41,90192,52247],{"class":275},[41,90194,51714],{"class":51403},[41,90196,53589],{"class":54},[41,90198,321],{"class":275},[41,90200,53594],{"class":378},[41,90202,55417],{"class":275},[41,90204,51714],{"class":51403},[41,90206,51410],{"class":275},[41,90208,90209,90211,90213,90215,90217,90219,90221,90223],{"class":43,"line":1889},[41,90210,52247],{"class":275},[41,90212,51916],{"class":51403},[41,90214,55342],{"class":54},[41,90216,321],{"class":275},[41,90218,88377],{"class":378},[41,90220,55417],{"class":275},[41,90222,51916],{"class":51403},[41,90224,51410],{"class":275},[41,90226,90227,90229,90231],{"class":43,"line":1894},[41,90228,52247],{"class":275},[41,90230,51916],{"class":51403},[41,90232,51410],{"class":275},[41,90234,90235,90237,90239,90241,90243,90245,90247,90250],{"class":43,"line":1899},[41,90236,11359],{"class":271},[41,90238,87036],{"class":58},[41,90240,13702],{"class":271},[41,90242,54499],{"class":275},[41,90244,54502],{"class":54},[41,90246,276],{"class":275},[41,90248,90249],{"class":378},"'.box'",[41,90251,282],{"class":275},[41,90253,90254,90256,90258,90260],{"class":43,"line":1904},[41,90255,52322],{"class":271},[41,90257,9576],{"class":275},[41,90259,321],{"class":271},[41,90261,47436],{"class":58},[41,90263,90264,90266,90269],{"class":43,"line":1918},[41,90265,70187],{"class":271},[41,90267,90268],{"class":54}," mouseMove",[41,90270,10991],{"class":275},[41,90272,90273,90276,90278,90280],{"class":43,"line":1923},[41,90274,90275],{"class":275},"      box.innerHTML ",[41,90277,321],{"class":271},[41,90279,3170],{"class":275},[41,90281,2840],{"class":271},[41,90283,90284],{"class":43,"line":2715},[41,90285,90286],{"class":47},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[41,90288,90289],{"class":43,"line":2729},[41,90290,2326],{"class":275},[41,90292,90293],{"class":43,"line":2737},[41,90294,90295],{"class":47},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[41,90297,90298],{"class":43,"line":2742},[41,90299,90300],{"class":47},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[41,90302,90303],{"class":43,"line":2748},[41,90304,90305],{"class":47},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[41,90307,90308,90311,90313,90315,90318,90321,90324,90327,90329],{"class":43,"line":2754},[41,90309,90310],{"class":275},"    box.",[41,90312,57916],{"class":54},[41,90314,276],{"class":275},[41,90316,90317],{"class":378},"'mousemove'",[41,90319,90320],{"class":275},", _.",[41,90322,90323],{"class":54},"debounce",[41,90325,90326],{"class":275},"(mouseMove, ",[41,90328,65177],{"class":58},[41,90330,30600],{"class":275},[41,90332,90333,90335,90337],{"class":43,"line":2759},[41,90334,52520],{"class":275},[41,90336,51916],{"class":51403},[41,90338,51410],{"class":275},[41,90340,90341,90343,90345],{"class":43,"line":8086},[41,90342,51888],{"class":275},[41,90344,51903],{"class":51403},[41,90346,51410],{"class":275},[41,90348,90349],{"class":43,"line":8110},[41,90350,80],{"emptyLinePlaceholder":79},[41,90352,90353,90355,90357],{"class":43,"line":8115},[41,90354,51888],{"class":275},[41,90356,50738],{"class":51403},[41,90358,51410],{"class":275},[1280,90360,90361],{},[227,90362,90363],{},"手写一个防抖函数来处理",[20,90365,90366],{},"防抖的核心就是利用定时器来实现的：",[20,90368,90369],{},"①声明一个定时器变量",[20,90371,90372],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[20,90374,90375],{},"③如果没有定时器则开启定时器，记得存到变量里面",[32,90377,90379],{"className":50736,"code":90378,"language":50738,"meta":37,"style":37},"\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",[24,90380,90381,90391,90405,90409,90417,90431,90451,90463,90471,90477,90487,90499,90511,90521,90533,90543,90553,90565,90569,90577,90585,90589,90597,90615,90633,90641,90659,90669,90677,90687,90691,90695,90699,90704,90709,90714,90719,90724,90729,90747,90754,90759,90767,90772,90785,90801,90811,90816,90820,90824,90844,90848,90853,90858,90863,90868,90876,90884,90888],{"__ignoreMap":37},[41,90382,90383,90385,90387,90389],{"class":43,"line":44},[41,90384,51400],{"class":275},[41,90386,51404],{"class":51403},[41,90388,51407],{"class":54},[41,90390,51410],{"class":275},[41,90392,90393,90395,90397,90399,90401,90403],{"class":43,"line":51},[41,90394,1183],{"class":275},[41,90396,50738],{"class":51403},[41,90398,51419],{"class":54},[41,90400,321],{"class":275},[41,90402,51424],{"class":378},[41,90404,51410],{"class":275},[41,90406,90407],{"class":43,"line":62},[41,90408,80],{"emptyLinePlaceholder":79},[41,90410,90411,90413,90415],{"class":43,"line":70},[41,90412,1183],{"class":275},[41,90414,51437],{"class":51403},[41,90416,51410],{"class":275},[41,90418,90419,90421,90423,90425,90427,90429],{"class":43,"line":76},[41,90420,52247],{"class":275},[41,90422,51447],{"class":51403},[41,90424,51450],{"class":54},[41,90426,321],{"class":275},[41,90428,51455],{"class":378},[41,90430,51410],{"class":275},[41,90432,90433,90435,90437,90439,90441,90443,90445,90447,90449],{"class":43,"line":83},[41,90434,52247],{"class":275},[41,90436,51447],{"class":51403},[41,90438,15058],{"class":54},[41,90440,321],{"class":275},[41,90442,51494],{"class":378},[41,90444,51474],{"class":54},[41,90446,321],{"class":275},[41,90448,51501],{"class":378},[41,90450,51410],{"class":275},[41,90452,90453,90455,90457,90459,90461],{"class":43,"line":89},[41,90454,52247],{"class":275},[41,90456,51510],{"class":51403},[41,90458,51513],{"class":275},[41,90460,51510],{"class":51403},[41,90462,51410],{"class":275},[41,90464,90465,90467,90469],{"class":43,"line":96},[41,90466,52247],{"class":275},[41,90468,189],{"class":51403},[41,90470,51410],{"class":275},[41,90472,90473,90475],{"class":43,"line":104},[41,90474,54855],{"class":54},[41,90476,15710],{"class":275},[41,90478,90479,90481,90483,90485],{"class":43,"line":176},[41,90480,72699],{"class":58},[41,90482,51540],{"class":275},[41,90484,60608],{"class":58},[41,90486,1434],{"class":275},[41,90488,90489,90491,90493,90495,90497],{"class":43,"line":184},[41,90490,54874],{"class":58},[41,90492,51540],{"class":275},[41,90494,1862],{"class":58},[41,90496,51595],{"class":271},[41,90498,1434],{"class":275},[41,90500,90501,90503,90505,90507,90509],{"class":43,"line":1757},[41,90502,54888],{"class":58},[41,90504,51540],{"class":275},[41,90506,1862],{"class":58},[41,90508,51595],{"class":271},[41,90510,1434],{"class":275},[41,90512,90513,90515,90517,90519],{"class":43,"line":1763},[41,90514,54987],{"class":58},[41,90516,51540],{"class":275},[41,90518,90109],{"class":58},[41,90520,1434],{"class":275},[41,90522,90523,90525,90527,90529,90531],{"class":43,"line":1768},[41,90524,55025],{"class":58},[41,90526,51540],{"class":275},[41,90528,1098],{"class":58},[41,90530,51595],{"class":271},[41,90532,1434],{"class":275},[41,90534,90535,90537,90539,90541],{"class":43,"line":1782},[41,90536,57519],{"class":58},[41,90538,51540],{"class":275},[41,90540,60945],{"class":58},[41,90542,1434],{"class":275},[41,90544,90545,90547,90549,90551],{"class":43,"line":1787},[41,90546,57389],{"class":58},[41,90548,51540],{"class":275},[41,90550,51695],{"class":58},[41,90552,1434],{"class":275},[41,90554,90555,90557,90559,90561,90563],{"class":43,"line":1793},[41,90556,90148],{"class":58},[41,90558,51540],{"class":275},[41,90560,592],{"class":58},[41,90562,51595],{"class":271},[41,90564,1434],{"class":275},[41,90566,90567],{"class":43,"line":1814},[41,90568,2326],{"class":275},[41,90570,90571,90573,90575],{"class":43,"line":1819},[41,90572,52520],{"class":275},[41,90574,189],{"class":51403},[41,90576,51410],{"class":275},[41,90578,90579,90581,90583],{"class":43,"line":1833},[41,90580,51888],{"class":275},[41,90582,51437],{"class":51403},[41,90584,51410],{"class":275},[41,90586,90587],{"class":43,"line":1838},[41,90588,80],{"emptyLinePlaceholder":79},[41,90590,90591,90593,90595],{"class":43,"line":1867},[41,90592,1183],{"class":275},[41,90594,51903],{"class":51403},[41,90596,51410],{"class":275},[41,90598,90599,90601,90603,90605,90607,90609,90611,90613],{"class":43,"line":1872},[41,90600,52247],{"class":275},[41,90602,51714],{"class":51403},[41,90604,53589],{"class":54},[41,90606,321],{"class":275},[41,90608,53594],{"class":378},[41,90610,55417],{"class":275},[41,90612,51714],{"class":51403},[41,90614,51410],{"class":275},[41,90616,90617,90619,90621,90623,90625,90627,90629,90631],{"class":43,"line":1889},[41,90618,52247],{"class":275},[41,90620,51916],{"class":51403},[41,90622,55342],{"class":54},[41,90624,321],{"class":275},[41,90626,88377],{"class":378},[41,90628,55417],{"class":275},[41,90630,51916],{"class":51403},[41,90632,51410],{"class":275},[41,90634,90635,90637,90639],{"class":43,"line":1894},[41,90636,52247],{"class":275},[41,90638,51916],{"class":51403},[41,90640,51410],{"class":275},[41,90642,90643,90645,90647,90649,90651,90653,90655,90657],{"class":43,"line":1899},[41,90644,11359],{"class":271},[41,90646,87036],{"class":58},[41,90648,13702],{"class":271},[41,90650,54499],{"class":275},[41,90652,54502],{"class":54},[41,90654,276],{"class":275},[41,90656,90249],{"class":378},[41,90658,282],{"class":275},[41,90660,90661,90663,90665,90667],{"class":43,"line":1904},[41,90662,52322],{"class":271},[41,90664,9576],{"class":275},[41,90666,321],{"class":271},[41,90668,47436],{"class":58},[41,90670,90671,90673,90675],{"class":43,"line":1918},[41,90672,70187],{"class":271},[41,90674,90268],{"class":54},[41,90676,10991],{"class":275},[41,90678,90679,90681,90683,90685],{"class":43,"line":1923},[41,90680,90275],{"class":275},[41,90682,321],{"class":271},[41,90684,3170],{"class":275},[41,90686,2840],{"class":271},[41,90688,90689],{"class":43,"line":2715},[41,90690,90286],{"class":47},[41,90692,90693],{"class":43,"line":2729},[41,90694,2326],{"class":275},[41,90696,90697],{"class":43,"line":2737},[41,90698,90295],{"class":47},[41,90700,90701],{"class":43,"line":2742},[41,90702,90703],{"class":47},"    \u002F\u002F 手写防抖函数\n",[41,90705,90706],{"class":43,"line":2748},[41,90707,90708],{"class":47},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[41,90710,90711],{"class":43,"line":2754},[41,90712,90713],{"class":47},"    \u002F\u002F 1.声明定时器变量\n",[41,90715,90716],{"class":43,"line":2759},[41,90717,90718],{"class":47},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[41,90720,90721],{"class":43,"line":8086},[41,90722,90723],{"class":47},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[41,90725,90726],{"class":43,"line":8110},[41,90727,90728],{"class":47},"    \u002F\u002F 4.定时器里面写函数调用\n",[41,90730,90731,90733,90736,90738,90741,90743,90745],{"class":43,"line":8115},[41,90732,70187],{"class":271},[41,90734,90735],{"class":54}," debounce",[41,90737,276],{"class":275},[41,90739,90740],{"class":5354},"fn",[41,90742,12573],{"class":275},[41,90744,993],{"class":5354},[41,90746,12580],{"class":275},[41,90748,90749,90751],{"class":43,"line":8121},[41,90750,79875],{"class":271},[41,90752,90753],{"class":275}," timer\n",[41,90755,90756],{"class":43,"line":8148},[41,90757,90758],{"class":47},"      \u002F\u002F return 返回一个匿名函数\n",[41,90760,90761,90763,90765],{"class":43,"line":8153},[41,90762,74085],{"class":271},[41,90764,59021],{"class":271},[41,90766,54555],{"class":275},[41,90768,90769],{"class":43,"line":8159},[41,90770,90771],{"class":47},"        \u002F\u002F 这里边写第二三四步\n",[41,90773,90774,90776,90779,90782],{"class":43,"line":8171},[41,90775,2635],{"class":271},[41,90777,90778],{"class":275}," (timer) ",[41,90780,90781],{"class":54},"clearTimeout",[41,90783,90784],{"class":275},"(timer)\n",[41,90786,90787,90790,90792,90795,90797,90799],{"class":43,"line":8183},[41,90788,90789],{"class":275},"        timer ",[41,90791,321],{"class":271},[41,90793,90794],{"class":54}," setTimeout",[41,90796,276],{"class":275},[41,90798,54552],{"class":271},[41,90800,54555],{"class":275},[41,90802,90803,90806,90808],{"class":43,"line":8195},[41,90804,90805],{"class":54},"          fn",[41,90807,13188],{"class":275},[41,90809,90810],{"class":47},"\u002F\u002F加小括号调用fn }, t)\n",[41,90812,90813],{"class":43,"line":9854},[41,90814,90815],{"class":275},"        }, t)\n",[41,90817,90818],{"class":43,"line":9879},[41,90819,52501],{"class":275},[41,90821,90822],{"class":43,"line":9902},[41,90823,2326],{"class":275},[41,90825,90826,90828,90830,90832,90834,90836,90838,90840,90842],{"class":43,"line":9926},[41,90827,90310],{"class":275},[41,90829,57916],{"class":54},[41,90831,276],{"class":275},[41,90833,90317],{"class":378},[41,90835,12573],{"class":275},[41,90837,90323],{"class":54},[41,90839,90326],{"class":275},[41,90841,65177],{"class":58},[41,90843,30600],{"class":275},[41,90845,90846],{"class":43,"line":9931},[41,90847,80],{"emptyLinePlaceholder":79},[41,90849,90850],{"class":43,"line":9936},[41,90851,90852],{"class":47},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[41,90854,90855],{"class":43,"line":9941},[41,90856,90857],{"class":47},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[41,90859,90860],{"class":43,"line":9950},[41,90861,90862],{"class":47},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[41,90864,90865],{"class":43,"line":9955},[41,90866,90867],{"class":47},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[41,90869,90870,90872,90874],{"class":43,"line":9961},[41,90871,52520],{"class":275},[41,90873,51916],{"class":51403},[41,90875,51410],{"class":275},[41,90877,90878,90880,90882],{"class":43,"line":9982},[41,90879,51888],{"class":275},[41,90881,51903],{"class":51403},[41,90883,51410],{"class":275},[41,90885,90886],{"class":43,"line":9988},[41,90887,80],{"emptyLinePlaceholder":79},[41,90889,90890,90892,90894],{"class":43,"line":10002},[41,90891,51888],{"class":275},[41,90893,50738],{"class":51403},[41,90895,51410],{"class":275},[241,90897,90899],{"id":90898},"_4172-节流","4.17.2 节流",[20,90901,90902],{},[1603,90903],{"alt":37,"src":90904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[20,90906,90907],{},[1603,90908],{"alt":37,"src":90909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[20,90911,90912],{},[423,90913,90914],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[20,90916,90917],{},"实现方式：",[1280,90919,90920],{},[227,90921,90922],{},"lodash 提供的节流函数来处理",[20,90924,90925],{},"_.throttle(func,[wait=0],[options=])",[20,90927,90928],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[32,90930,90932],{"className":50736,"code":90931,"language":50738,"meta":37,"style":37},"\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",[24,90933,90934,90944,90958,90962,90970,90984,91004,91016,91024,91030,91040,91052,91064,91074,91086,91096,91106,91118,91122,91130,91138,91142,91150,91168,91186,91194,91212,91222,91230,91240,91244,91248,91252,91257,91262,91283,91291,91299,91303],{"__ignoreMap":37},[41,90935,90936,90938,90940,90942],{"class":43,"line":44},[41,90937,51400],{"class":275},[41,90939,51404],{"class":51403},[41,90941,51407],{"class":54},[41,90943,51410],{"class":275},[41,90945,90946,90948,90950,90952,90954,90956],{"class":43,"line":51},[41,90947,1183],{"class":275},[41,90949,50738],{"class":51403},[41,90951,51419],{"class":54},[41,90953,321],{"class":275},[41,90955,51424],{"class":378},[41,90957,51410],{"class":275},[41,90959,90960],{"class":43,"line":62},[41,90961,80],{"emptyLinePlaceholder":79},[41,90963,90964,90966,90968],{"class":43,"line":70},[41,90965,1183],{"class":275},[41,90967,51437],{"class":51403},[41,90969,51410],{"class":275},[41,90971,90972,90974,90976,90978,90980,90982],{"class":43,"line":76},[41,90973,52247],{"class":275},[41,90975,51447],{"class":51403},[41,90977,51450],{"class":54},[41,90979,321],{"class":275},[41,90981,51455],{"class":378},[41,90983,51410],{"class":275},[41,90985,90986,90988,90990,90992,90994,90996,90998,91000,91002],{"class":43,"line":83},[41,90987,52247],{"class":275},[41,90989,51447],{"class":51403},[41,90991,15058],{"class":54},[41,90993,321],{"class":275},[41,90995,51494],{"class":378},[41,90997,51474],{"class":54},[41,90999,321],{"class":275},[41,91001,51501],{"class":378},[41,91003,51410],{"class":275},[41,91005,91006,91008,91010,91012,91014],{"class":43,"line":89},[41,91007,52247],{"class":275},[41,91009,51510],{"class":51403},[41,91011,51513],{"class":275},[41,91013,51510],{"class":51403},[41,91015,51410],{"class":275},[41,91017,91018,91020,91022],{"class":43,"line":96},[41,91019,52247],{"class":275},[41,91021,189],{"class":51403},[41,91023,51410],{"class":275},[41,91025,91026,91028],{"class":43,"line":104},[41,91027,54855],{"class":54},[41,91029,15710],{"class":275},[41,91031,91032,91034,91036,91038],{"class":43,"line":176},[41,91033,72699],{"class":58},[41,91035,51540],{"class":275},[41,91037,60608],{"class":58},[41,91039,1434],{"class":275},[41,91041,91042,91044,91046,91048,91050],{"class":43,"line":184},[41,91043,54874],{"class":58},[41,91045,51540],{"class":275},[41,91047,1862],{"class":58},[41,91049,51595],{"class":271},[41,91051,1434],{"class":275},[41,91053,91054,91056,91058,91060,91062],{"class":43,"line":1757},[41,91055,54888],{"class":58},[41,91057,51540],{"class":275},[41,91059,1862],{"class":58},[41,91061,51595],{"class":271},[41,91063,1434],{"class":275},[41,91065,91066,91068,91070,91072],{"class":43,"line":1763},[41,91067,54987],{"class":58},[41,91069,51540],{"class":275},[41,91071,90109],{"class":58},[41,91073,1434],{"class":275},[41,91075,91076,91078,91080,91082,91084],{"class":43,"line":1768},[41,91077,55025],{"class":58},[41,91079,51540],{"class":275},[41,91081,1098],{"class":58},[41,91083,51595],{"class":271},[41,91085,1434],{"class":275},[41,91087,91088,91090,91092,91094],{"class":43,"line":1782},[41,91089,57519],{"class":58},[41,91091,51540],{"class":275},[41,91093,60945],{"class":58},[41,91095,1434],{"class":275},[41,91097,91098,91100,91102,91104],{"class":43,"line":1787},[41,91099,57389],{"class":58},[41,91101,51540],{"class":275},[41,91103,51695],{"class":58},[41,91105,1434],{"class":275},[41,91107,91108,91110,91112,91114,91116],{"class":43,"line":1793},[41,91109,90148],{"class":58},[41,91111,51540],{"class":275},[41,91113,592],{"class":58},[41,91115,51595],{"class":271},[41,91117,1434],{"class":275},[41,91119,91120],{"class":43,"line":1814},[41,91121,2326],{"class":275},[41,91123,91124,91126,91128],{"class":43,"line":1819},[41,91125,52520],{"class":275},[41,91127,189],{"class":51403},[41,91129,51410],{"class":275},[41,91131,91132,91134,91136],{"class":43,"line":1833},[41,91133,51888],{"class":275},[41,91135,51437],{"class":51403},[41,91137,51410],{"class":275},[41,91139,91140],{"class":43,"line":1838},[41,91141,80],{"emptyLinePlaceholder":79},[41,91143,91144,91146,91148],{"class":43,"line":1867},[41,91145,1183],{"class":275},[41,91147,51903],{"class":51403},[41,91149,51410],{"class":275},[41,91151,91152,91154,91156,91158,91160,91162,91164,91166],{"class":43,"line":1872},[41,91153,52247],{"class":275},[41,91155,51714],{"class":51403},[41,91157,53589],{"class":54},[41,91159,321],{"class":275},[41,91161,53594],{"class":378},[41,91163,55417],{"class":275},[41,91165,51714],{"class":51403},[41,91167,51410],{"class":275},[41,91169,91170,91172,91174,91176,91178,91180,91182,91184],{"class":43,"line":1889},[41,91171,52247],{"class":275},[41,91173,51916],{"class":51403},[41,91175,55342],{"class":54},[41,91177,321],{"class":275},[41,91179,88377],{"class":378},[41,91181,55417],{"class":275},[41,91183,51916],{"class":51403},[41,91185,51410],{"class":275},[41,91187,91188,91190,91192],{"class":43,"line":1894},[41,91189,52247],{"class":275},[41,91191,51916],{"class":51403},[41,91193,51410],{"class":275},[41,91195,91196,91198,91200,91202,91204,91206,91208,91210],{"class":43,"line":1899},[41,91197,11359],{"class":271},[41,91199,87036],{"class":58},[41,91201,13702],{"class":271},[41,91203,54499],{"class":275},[41,91205,54502],{"class":54},[41,91207,276],{"class":275},[41,91209,90249],{"class":378},[41,91211,282],{"class":275},[41,91213,91214,91216,91218,91220],{"class":43,"line":1904},[41,91215,52322],{"class":271},[41,91217,9576],{"class":275},[41,91219,321],{"class":271},[41,91221,47436],{"class":58},[41,91223,91224,91226,91228],{"class":43,"line":1918},[41,91225,70187],{"class":271},[41,91227,90268],{"class":54},[41,91229,10991],{"class":275},[41,91231,91232,91234,91236,91238],{"class":43,"line":1923},[41,91233,90275],{"class":275},[41,91235,321],{"class":271},[41,91237,3170],{"class":275},[41,91239,2840],{"class":271},[41,91241,91242],{"class":43,"line":2715},[41,91243,90286],{"class":47},[41,91245,91246],{"class":43,"line":2729},[41,91247,2326],{"class":275},[41,91249,91250],{"class":43,"line":2737},[41,91251,90295],{"class":47},[41,91253,91254],{"class":43,"line":2742},[41,91255,91256],{"class":47},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[41,91258,91259],{"class":43,"line":2748},[41,91260,91261],{"class":47},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[41,91263,91264,91266,91268,91270,91272,91274,91277,91279,91281],{"class":43,"line":2754},[41,91265,90310],{"class":275},[41,91267,57916],{"class":54},[41,91269,276],{"class":275},[41,91271,90317],{"class":378},[41,91273,90320],{"class":275},[41,91275,91276],{"class":54},"throttle",[41,91278,90326],{"class":275},[41,91280,65177],{"class":58},[41,91282,30600],{"class":275},[41,91284,91285,91287,91289],{"class":43,"line":2759},[41,91286,52520],{"class":275},[41,91288,51916],{"class":51403},[41,91290,51410],{"class":275},[41,91292,91293,91295,91297],{"class":43,"line":8086},[41,91294,51888],{"class":275},[41,91296,51903],{"class":51403},[41,91298,51410],{"class":275},[41,91300,91301],{"class":43,"line":8110},[41,91302,80],{"emptyLinePlaceholder":79},[41,91304,91305,91307,91309],{"class":43,"line":8115},[41,91306,51888],{"class":275},[41,91308,50738],{"class":51403},[41,91310,51410],{"class":275},[1280,91312,91313],{},[227,91314,91315],{},"手写一个节流函数来处理",[20,91317,71055],{},[20,91319,90369],{},[20,91321,91322],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[20,91324,91325],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[32,91327,91329],{"className":50736,"code":91328,"language":50738,"meta":37,"style":37},"\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",[24,91330,91331,91341,91355,91359,91367,91381,91401,91413,91421,91427,91437,91449,91461,91471,91483,91493,91503,91515,91519,91527,91535,91539,91547,91565,91583,91591,91609,91619,91627,91637,91641,91645,91649,91654,91659,91664,91669,91674,91679,91696,91702,91710,91721,91736,91743,91748,91753,91763,91768,91773,91778,91782,91786,91790,91810,91818,91826,91830],{"__ignoreMap":37},[41,91332,91333,91335,91337,91339],{"class":43,"line":44},[41,91334,51400],{"class":275},[41,91336,51404],{"class":51403},[41,91338,51407],{"class":54},[41,91340,51410],{"class":275},[41,91342,91343,91345,91347,91349,91351,91353],{"class":43,"line":51},[41,91344,1183],{"class":275},[41,91346,50738],{"class":51403},[41,91348,51419],{"class":54},[41,91350,321],{"class":275},[41,91352,51424],{"class":378},[41,91354,51410],{"class":275},[41,91356,91357],{"class":43,"line":62},[41,91358,80],{"emptyLinePlaceholder":79},[41,91360,91361,91363,91365],{"class":43,"line":70},[41,91362,1183],{"class":275},[41,91364,51437],{"class":51403},[41,91366,51410],{"class":275},[41,91368,91369,91371,91373,91375,91377,91379],{"class":43,"line":76},[41,91370,52247],{"class":275},[41,91372,51447],{"class":51403},[41,91374,51450],{"class":54},[41,91376,321],{"class":275},[41,91378,51455],{"class":378},[41,91380,51410],{"class":275},[41,91382,91383,91385,91387,91389,91391,91393,91395,91397,91399],{"class":43,"line":83},[41,91384,52247],{"class":275},[41,91386,51447],{"class":51403},[41,91388,15058],{"class":54},[41,91390,321],{"class":275},[41,91392,51494],{"class":378},[41,91394,51474],{"class":54},[41,91396,321],{"class":275},[41,91398,51501],{"class":378},[41,91400,51410],{"class":275},[41,91402,91403,91405,91407,91409,91411],{"class":43,"line":89},[41,91404,52247],{"class":275},[41,91406,51510],{"class":51403},[41,91408,51513],{"class":275},[41,91410,51510],{"class":51403},[41,91412,51410],{"class":275},[41,91414,91415,91417,91419],{"class":43,"line":96},[41,91416,52247],{"class":275},[41,91418,189],{"class":51403},[41,91420,51410],{"class":275},[41,91422,91423,91425],{"class":43,"line":104},[41,91424,54855],{"class":54},[41,91426,15710],{"class":275},[41,91428,91429,91431,91433,91435],{"class":43,"line":176},[41,91430,72699],{"class":58},[41,91432,51540],{"class":275},[41,91434,60608],{"class":58},[41,91436,1434],{"class":275},[41,91438,91439,91441,91443,91445,91447],{"class":43,"line":184},[41,91440,54874],{"class":58},[41,91442,51540],{"class":275},[41,91444,1862],{"class":58},[41,91446,51595],{"class":271},[41,91448,1434],{"class":275},[41,91450,91451,91453,91455,91457,91459],{"class":43,"line":1757},[41,91452,54888],{"class":58},[41,91454,51540],{"class":275},[41,91456,1862],{"class":58},[41,91458,51595],{"class":271},[41,91460,1434],{"class":275},[41,91462,91463,91465,91467,91469],{"class":43,"line":1763},[41,91464,54987],{"class":58},[41,91466,51540],{"class":275},[41,91468,90109],{"class":58},[41,91470,1434],{"class":275},[41,91472,91473,91475,91477,91479,91481],{"class":43,"line":1768},[41,91474,55025],{"class":58},[41,91476,51540],{"class":275},[41,91478,1098],{"class":58},[41,91480,51595],{"class":271},[41,91482,1434],{"class":275},[41,91484,91485,91487,91489,91491],{"class":43,"line":1782},[41,91486,57519],{"class":58},[41,91488,51540],{"class":275},[41,91490,60945],{"class":58},[41,91492,1434],{"class":275},[41,91494,91495,91497,91499,91501],{"class":43,"line":1787},[41,91496,57389],{"class":58},[41,91498,51540],{"class":275},[41,91500,51695],{"class":58},[41,91502,1434],{"class":275},[41,91504,91505,91507,91509,91511,91513],{"class":43,"line":1793},[41,91506,90148],{"class":58},[41,91508,51540],{"class":275},[41,91510,592],{"class":58},[41,91512,51595],{"class":271},[41,91514,1434],{"class":275},[41,91516,91517],{"class":43,"line":1814},[41,91518,2326],{"class":275},[41,91520,91521,91523,91525],{"class":43,"line":1819},[41,91522,52520],{"class":275},[41,91524,189],{"class":51403},[41,91526,51410],{"class":275},[41,91528,91529,91531,91533],{"class":43,"line":1833},[41,91530,51888],{"class":275},[41,91532,51437],{"class":51403},[41,91534,51410],{"class":275},[41,91536,91537],{"class":43,"line":1838},[41,91538,80],{"emptyLinePlaceholder":79},[41,91540,91541,91543,91545],{"class":43,"line":1867},[41,91542,1183],{"class":275},[41,91544,51903],{"class":51403},[41,91546,51410],{"class":275},[41,91548,91549,91551,91553,91555,91557,91559,91561,91563],{"class":43,"line":1872},[41,91550,52247],{"class":275},[41,91552,51714],{"class":51403},[41,91554,53589],{"class":54},[41,91556,321],{"class":275},[41,91558,53594],{"class":378},[41,91560,55417],{"class":275},[41,91562,51714],{"class":51403},[41,91564,51410],{"class":275},[41,91566,91567,91569,91571,91573,91575,91577,91579,91581],{"class":43,"line":1889},[41,91568,52247],{"class":275},[41,91570,51916],{"class":51403},[41,91572,55342],{"class":54},[41,91574,321],{"class":275},[41,91576,88377],{"class":378},[41,91578,55417],{"class":275},[41,91580,51916],{"class":51403},[41,91582,51410],{"class":275},[41,91584,91585,91587,91589],{"class":43,"line":1894},[41,91586,52247],{"class":275},[41,91588,51916],{"class":51403},[41,91590,51410],{"class":275},[41,91592,91593,91595,91597,91599,91601,91603,91605,91607],{"class":43,"line":1899},[41,91594,11359],{"class":271},[41,91596,87036],{"class":58},[41,91598,13702],{"class":271},[41,91600,54499],{"class":275},[41,91602,54502],{"class":54},[41,91604,276],{"class":275},[41,91606,90249],{"class":378},[41,91608,282],{"class":275},[41,91610,91611,91613,91615,91617],{"class":43,"line":1904},[41,91612,52322],{"class":271},[41,91614,9576],{"class":275},[41,91616,321],{"class":271},[41,91618,47436],{"class":58},[41,91620,91621,91623,91625],{"class":43,"line":1918},[41,91622,70187],{"class":271},[41,91624,90268],{"class":54},[41,91626,10991],{"class":275},[41,91628,91629,91631,91633,91635],{"class":43,"line":1923},[41,91630,90275],{"class":275},[41,91632,321],{"class":271},[41,91634,3170],{"class":275},[41,91636,2840],{"class":271},[41,91638,91639],{"class":43,"line":2715},[41,91640,90286],{"class":47},[41,91642,91643],{"class":43,"line":2729},[41,91644,2326],{"class":275},[41,91646,91647],{"class":43,"line":2737},[41,91648,90295],{"class":47},[41,91650,91651],{"class":43,"line":2742},[41,91652,91653],{"class":47},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[41,91655,91656],{"class":43,"line":2748},[41,91657,91658],{"class":47},"    \u002F\u002F 1.声明一个定时器变量\n",[41,91660,91661],{"class":43,"line":2754},[41,91662,91663],{"class":47},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[41,91665,91666],{"class":43,"line":2759},[41,91667,91668],{"class":47},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[41,91670,91671],{"class":43,"line":8086},[41,91672,91673],{"class":47},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[41,91675,91676],{"class":43,"line":8110},[41,91677,91678],{"class":47},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[41,91680,91681,91683,91686,91688,91690,91692,91694],{"class":43,"line":8115},[41,91682,70187],{"class":271},[41,91684,91685],{"class":54}," throttle",[41,91687,276],{"class":275},[41,91689,90740],{"class":5354},[41,91691,12573],{"class":275},[41,91693,993],{"class":5354},[41,91695,12580],{"class":275},[41,91697,91698,91700],{"class":43,"line":8121},[41,91699,79875],{"class":271},[41,91701,90753],{"class":275},[41,91703,91704,91706,91708],{"class":43,"line":8148},[41,91705,74085],{"class":271},[41,91707,59021],{"class":271},[41,91709,54555],{"class":275},[41,91711,91712,91714,91716,91718],{"class":43,"line":8153},[41,91713,2635],{"class":271},[41,91715,1798],{"class":275},[41,91717,499],{"class":271},[41,91719,91720],{"class":275},"timer) {\n",[41,91722,91723,91726,91728,91730,91732,91734],{"class":43,"line":8159},[41,91724,91725],{"class":275},"          timer ",[41,91727,321],{"class":271},[41,91729,90794],{"class":54},[41,91731,276],{"class":275},[41,91733,54552],{"class":271},[41,91735,54555],{"class":275},[41,91737,91738,91741],{"class":43,"line":8171},[41,91739,91740],{"class":54},"            fn",[41,91742,2115],{"class":275},[41,91744,91745],{"class":43,"line":8183},[41,91746,91747],{"class":47},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[41,91749,91750],{"class":43,"line":8195},[41,91751,91752],{"class":47},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[41,91754,91755,91758,91760],{"class":43,"line":9854},[41,91756,91757],{"class":275},"            timer ",[41,91759,321],{"class":271},[41,91761,91762],{"class":58}," null\n",[41,91764,91765],{"class":43,"line":9879},[41,91766,91767],{"class":47},"            \u002F\u002F 不能用clearTimeout(timer)\n",[41,91769,91770],{"class":43,"line":9902},[41,91771,91772],{"class":47},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[41,91774,91775],{"class":43,"line":9926},[41,91776,91777],{"class":275},"          }, t)\n",[41,91779,91780],{"class":43,"line":9931},[41,91781,2667],{"class":275},[41,91783,91784],{"class":43,"line":9936},[41,91785,52501],{"class":275},[41,91787,91788],{"class":43,"line":9941},[41,91789,2326],{"class":275},[41,91791,91792,91794,91796,91798,91800,91802,91804,91806,91808],{"class":43,"line":9950},[41,91793,90310],{"class":275},[41,91795,57916],{"class":54},[41,91797,276],{"class":275},[41,91799,90317],{"class":378},[41,91801,12573],{"class":275},[41,91803,91276],{"class":54},[41,91805,90326],{"class":275},[41,91807,65177],{"class":58},[41,91809,30600],{"class":275},[41,91811,91812,91814,91816],{"class":43,"line":9955},[41,91813,52520],{"class":275},[41,91815,51916],{"class":51403},[41,91817,51410],{"class":275},[41,91819,91820,91822,91824],{"class":43,"line":9961},[41,91821,51888],{"class":275},[41,91823,51903],{"class":51403},[41,91825,51410],{"class":275},[41,91827,91828],{"class":43,"line":9982},[41,91829,80],{"emptyLinePlaceholder":79},[41,91831,91832,91834,91836],{"class":43,"line":9988},[41,91833,51888],{"class":275},[41,91835,50738],{"class":51403},[41,91837,51410],{"class":275},[241,91839,91841],{"id":91840},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[32,91843,91845],{"className":53170,"code":91844,"language":53172,"meta":37,"style":37},"\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",[24,91846,91847,91855,91863,91868,91873,91878,91883,91887,91895],{"__ignoreMap":37},[41,91848,91849,91851,91853],{"class":43,"line":44},[41,91850,1183],{"class":275},[41,91852,51903],{"class":51403},[41,91854,51410],{"class":275},[41,91856,91857,91859,91861],{"class":43,"line":51},[41,91858,52247],{"class":275},[41,91860,51916],{"class":51403},[41,91862,51410],{"class":275},[41,91864,91865],{"class":43,"line":62},[41,91866,91867],{"class":275},"    let timer = null\n",[41,91869,91870],{"class":43,"line":70},[41,91871,91872],{"class":275},"    timer = setTimeout(() => {\n",[41,91874,91875],{"class":43,"line":76},[41,91876,91877],{"class":275},"      clearTimeout(timer)\n",[41,91879,91880],{"class":43,"line":83},[41,91881,91882],{"class":275},"      console.log(timer)\n",[41,91884,91885],{"class":43,"line":89},[41,91886,60328],{"class":275},[41,91888,91889,91891,91893],{"class":43,"line":96},[41,91890,52520],{"class":275},[41,91892,51916],{"class":51403},[41,91894,51410],{"class":275},[41,91896,91897,91899,91901],{"class":43,"line":104},[41,91898,51888],{"class":275},[41,91900,51903],{"class":51403},[41,91902,51410],{"class":275},[20,91904,91905],{},"输出为1",[20,91907,91908],{},"在开启的定时器里边写清除定时器",[20,91910,91911],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[241,91913,91915],{"id":91914},"_4174-节流综合案例","4.17.4 节流综合案例",[20,91917,91918],{},"页面打开，可以记录上一次的视频播放位置",[20,91920,91921],{},[1603,91922],{"alt":37,"src":91923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[20,91925,91926],{},[1603,91927],{"alt":37,"src":91928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[32,91930,91932],{"className":50736,"code":91931,"language":50738,"meta":37,"style":37},"\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",[24,91933,91934,91944,91958,91962,91970,91984,92004,92024,92046,92059,92067,92073,92083,92093,92103,92107,92111,92118,92131,92143,92147,92151,92161,92173,92187,92191,92195,92202,92212,92225,92237,92247,92257,92273,92285,92289,92293,92301,92311,92323,92333,92343,92353,92357,92361,92371,92382,92386,92394,92402,92406,92414,92429,92444,92459,92480,92488,92496,92511,92533,92541,92556,92582,92608,92634,92642,92650,92669,92677,92682,92701,92706,92724,92729,92734,92742,92747,92761,92769,92774,92791,92795,92800,92822,92826,92834,92842,92846],{"__ignoreMap":37},[41,91935,91936,91938,91940,91942],{"class":43,"line":44},[41,91937,51400],{"class":275},[41,91939,51404],{"class":51403},[41,91941,51407],{"class":54},[41,91943,51410],{"class":275},[41,91945,91946,91948,91950,91952,91954,91956],{"class":43,"line":51},[41,91947,1183],{"class":275},[41,91949,50738],{"class":51403},[41,91951,51419],{"class":54},[41,91953,321],{"class":275},[41,91955,51424],{"class":378},[41,91957,51410],{"class":275},[41,91959,91960],{"class":43,"line":62},[41,91961,80],{"emptyLinePlaceholder":79},[41,91963,91964,91966,91968],{"class":43,"line":70},[41,91965,1183],{"class":275},[41,91967,51437],{"class":51403},[41,91969,51410],{"class":275},[41,91971,91972,91974,91976,91978,91980,91982],{"class":43,"line":76},[41,91973,52247],{"class":275},[41,91975,51447],{"class":51403},[41,91977,51450],{"class":54},[41,91979,321],{"class":275},[41,91981,51455],{"class":378},[41,91983,59230],{"class":275},[41,91985,91986,91988,91990,91992,91994,91996,91998,92000,92002],{"class":43,"line":83},[41,91987,52247],{"class":275},[41,91989,51447],{"class":51403},[41,91991,51466],{"class":54},[41,91993,321],{"class":275},[41,91995,51471],{"class":378},[41,91997,51474],{"class":54},[41,91999,321],{"class":275},[41,92001,51479],{"class":378},[41,92003,59230],{"class":275},[41,92005,92006,92008,92010,92012,92014,92016,92018,92020,92022],{"class":43,"line":89},[41,92007,52247],{"class":275},[41,92009,51447],{"class":51403},[41,92011,15058],{"class":54},[41,92013,321],{"class":275},[41,92015,51494],{"class":378},[41,92017,51474],{"class":54},[41,92019,321],{"class":275},[41,92021,51501],{"class":378},[41,92023,59230],{"class":275},[41,92025,92026,92028,92030,92032,92034,92037,92039,92041,92044],{"class":43,"line":96},[41,92027,52247],{"class":275},[41,92029,51447],{"class":51403},[41,92031,15058],{"class":54},[41,92033,321],{"class":275},[41,92035,92036],{"class":378},"\"referrer\"",[41,92038,51474],{"class":54},[41,92040,321],{"class":275},[41,92042,92043],{"class":378},"\"never\"",[41,92045,59230],{"class":275},[41,92047,92048,92050,92052,92055,92057],{"class":43,"line":104},[41,92049,52247],{"class":275},[41,92051,51510],{"class":51403},[41,92053,92054],{"class":275},">综合案例\u003C\u002F",[41,92056,51510],{"class":51403},[41,92058,51410],{"class":275},[41,92060,92061,92063,92065],{"class":43,"line":176},[41,92062,52247],{"class":275},[41,92064,189],{"class":51403},[41,92066,51410],{"class":275},[41,92068,92069,92071],{"class":43,"line":184},[41,92070,6541],{"class":51403},[41,92072,15710],{"class":275},[41,92074,92075,92077,92079,92081],{"class":43,"line":1757},[41,92076,54798],{"class":58},[41,92078,51540],{"class":275},[41,92080,465],{"class":58},[41,92082,1434],{"class":275},[41,92084,92085,92087,92089,92091],{"class":43,"line":1763},[41,92086,54809],{"class":58},[41,92088,51540],{"class":275},[41,92090,465],{"class":58},[41,92092,1434],{"class":275},[41,92094,92095,92097,92099,92101],{"class":43,"line":1768},[41,92096,72699],{"class":58},[41,92098,51540],{"class":275},[41,92100,60608],{"class":58},[41,92102,1434],{"class":275},[41,92104,92105],{"class":43,"line":1782},[41,92106,2326],{"class":275},[41,92108,92109],{"class":43,"line":1787},[41,92110,80],{"emptyLinePlaceholder":79},[41,92112,92113,92116],{"class":43,"line":1793},[41,92114,92115],{"class":54},"    .container",[41,92117,15710],{"class":275},[41,92119,92120,92122,92124,92127,92129],{"class":43,"line":1814},[41,92121,54874],{"class":58},[41,92123,51540],{"class":275},[41,92125,92126],{"class":58},"1200",[41,92128,51595],{"class":271},[41,92130,1434],{"class":275},[41,92132,92133,92135,92137,92139,92141],{"class":43,"line":1819},[41,92134,54809],{"class":58},[41,92136,51540],{"class":275},[41,92138,465],{"class":58},[41,92140,51659],{"class":58},[41,92142,1434],{"class":275},[41,92144,92145],{"class":43,"line":1833},[41,92146,2326],{"class":275},[41,92148,92149],{"class":43,"line":1838},[41,92150,80],{"emptyLinePlaceholder":79},[41,92152,92153,92156,92159],{"class":43,"line":1867},[41,92154,92155],{"class":54},"    .video",[41,92157,92158],{"class":51403}," video",[41,92160,15710],{"class":275},[41,92162,92163,92165,92167,92169,92171],{"class":43,"line":1872},[41,92164,54874],{"class":58},[41,92166,51540],{"class":275},[41,92168,584],{"class":58},[41,92170,601],{"class":271},[41,92172,1434],{"class":275},[41,92174,92175,92177,92179,92181,92183,92185],{"class":43,"line":1889},[41,92176,54798],{"class":58},[41,92178,51540],{"class":275},[41,92180,973],{"class":58},[41,92182,51595],{"class":271},[41,92184,4231],{"class":58},[41,92186,1434],{"class":275},[41,92188,92189],{"class":43,"line":1894},[41,92190,2326],{"class":275},[41,92192,92193],{"class":43,"line":1899},[41,92194,80],{"emptyLinePlaceholder":79},[41,92196,92197,92200],{"class":43,"line":1904},[41,92198,92199],{"class":54},"    .elevator",[41,92201,15710],{"class":275},[41,92203,92204,92206,92208,92210],{"class":43,"line":1918},[41,92205,54862],{"class":58},[41,92207,51540],{"class":275},[41,92209,86336],{"class":58},[41,92211,1434],{"class":275},[41,92213,92214,92216,92218,92221,92223],{"class":43,"line":1923},[41,92215,55050],{"class":58},[41,92217,51540],{"class":275},[41,92219,92220],{"class":58},"280",[41,92222,51595],{"class":271},[41,92224,1434],{"class":275},[41,92226,92227,92229,92231,92233,92235],{"class":43,"line":2715},[41,92228,86530],{"class":58},[41,92230,51540],{"class":275},[41,92232,973],{"class":58},[41,92234,51595],{"class":271},[41,92236,1434],{"class":275},[41,92238,92239,92241,92243,92245],{"class":43,"line":2729},[41,92240,86343],{"class":58},[41,92242,51540],{"class":275},[41,92244,86348],{"class":58},[41,92246,1434],{"class":275},[41,92248,92249,92251,92253,92255],{"class":43,"line":2737},[41,92250,61824],{"class":58},[41,92252,51540],{"class":275},[41,92254,60945],{"class":58},[41,92256,1434],{"class":275},[41,92258,92259,92261,92263,92265,92267,92269,92271],{"class":43,"line":2742},[41,92260,62080],{"class":58},[41,92262,51540],{"class":275},[41,92264,26],{"class":58},[41,92266,51595],{"class":271},[41,92268,51624],{"class":58},[41,92270,62347],{"class":58},[41,92272,1434],{"class":275},[41,92274,92275,92277,92279,92281,92283],{"class":43,"line":2748},[41,92276,54874],{"class":58},[41,92278,51540],{"class":275},[41,92280,1180],{"class":58},[41,92282,51595],{"class":271},[41,92284,1434],{"class":275},[41,92286,92287],{"class":43,"line":2754},[41,92288,2326],{"class":275},[41,92290,92291],{"class":43,"line":2759},[41,92292,80],{"emptyLinePlaceholder":79},[41,92294,92295,92297,92299],{"class":43,"line":8086},[41,92296,92199],{"class":54},[41,92298,1539],{"class":51403},[41,92300,15710],{"class":275},[41,92302,92303,92305,92307,92309],{"class":43,"line":8110},[41,92304,55112],{"class":58},[41,92306,51540],{"class":275},[41,92308,60972],{"class":58},[41,92310,1434],{"class":275},[41,92312,92313,92315,92317,92319,92321],{"class":43,"line":8115},[41,92314,54798],{"class":58},[41,92316,51540],{"class":275},[41,92318,719],{"class":58},[41,92320,51595],{"class":271},[41,92322,1434],{"class":275},[41,92324,92325,92327,92329,92331],{"class":43,"line":8121},[41,92326,64073],{"class":58},[41,92328,51540],{"class":275},[41,92330,54840],{"class":58},[41,92332,1434],{"class":275},[41,92334,92335,92337,92339,92341],{"class":43,"line":8148},[41,92336,57389],{"class":58},[41,92338,51540],{"class":275},[41,92340,51695],{"class":58},[41,92342,1434],{"class":275},[41,92344,92345,92347,92349,92351],{"class":43,"line":8153},[41,92346,57519],{"class":58},[41,92348,51540],{"class":275},[41,92350,62173],{"class":58},[41,92352,1434],{"class":275},[41,92354,92355],{"class":43,"line":8159},[41,92356,2326],{"class":275},[41,92358,92359],{"class":43,"line":8171},[41,92360,80],{"emptyLinePlaceholder":79},[41,92362,92363,92365,92367,92369],{"class":43,"line":8183},[41,92364,92199],{"class":54},[41,92366,1539],{"class":51403},[41,92368,64127],{"class":54},[41,92370,15710],{"class":275},[41,92372,92373,92375,92377,92380],{"class":43,"line":8195},[41,92374,57519],{"class":58},[41,92376,51540],{"class":275},[41,92378,92379],{"class":58},"#1286ff",[41,92381,1434],{"class":275},[41,92383,92384],{"class":43,"line":9854},[41,92385,2326],{"class":275},[41,92387,92388,92390,92392],{"class":43,"line":9879},[41,92389,52520],{"class":275},[41,92391,189],{"class":51403},[41,92393,51410],{"class":275},[41,92395,92396,92398,92400],{"class":43,"line":9902},[41,92397,51888],{"class":275},[41,92399,51437],{"class":51403},[41,92401,51410],{"class":275},[41,92403,92404],{"class":43,"line":9926},[41,92405,80],{"emptyLinePlaceholder":79},[41,92407,92408,92410,92412],{"class":43,"line":9931},[41,92409,1183],{"class":275},[41,92411,51903],{"class":51403},[41,92413,51410],{"class":275},[41,92415,92416,92418,92420,92422,92424,92427],{"class":43,"line":9936},[41,92417,52247],{"class":275},[41,92419,51714],{"class":51403},[41,92421,53589],{"class":54},[41,92423,321],{"class":275},[41,92425,92426],{"class":378},"\"container\"",[41,92428,51410],{"class":275},[41,92430,92431,92433,92435,92437,92439,92442],{"class":43,"line":9941},[41,92432,51444],{"class":275},[41,92434,51714],{"class":51403},[41,92436,53589],{"class":54},[41,92438,321],{"class":275},[41,92440,92441],{"class":378},"\"header\"",[41,92443,51410],{"class":275},[41,92445,92446,92448,92450,92452,92454,92457],{"class":43,"line":9950},[41,92447,55337],{"class":275},[41,92449,511],{"class":51403},[41,92451,61160],{"class":54},[41,92453,321],{"class":275},[41,92455,92456],{"class":378},"\"http:\u002F\u002Fpip.itcast.cn\"",[41,92458,51410],{"class":275},[41,92460,92461,92463,92465,92467,92469,92472,92474,92476,92478],{"class":43,"line":9955},[41,92462,55405],{"class":275},[41,92464,1603],{"class":51403},[41,92466,55342],{"class":54},[41,92468,321],{"class":275},[41,92470,92471],{"class":378},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[41,92473,55350],{"class":54},[41,92475,321],{"class":275},[41,92477,7790],{"class":378},[41,92479,59230],{"class":275},[41,92481,92482,92484,92486],{"class":43,"line":9961},[41,92483,55510],{"class":275},[41,92485,511],{"class":51403},[41,92487,51410],{"class":275},[41,92489,92490,92492,92494],{"class":43,"line":9982},[41,92491,51879],{"class":275},[41,92493,51714],{"class":51403},[41,92495,51410],{"class":275},[41,92497,92498,92500,92502,92504,92506,92509],{"class":43,"line":9988},[41,92499,51444],{"class":275},[41,92501,51714],{"class":51403},[41,92503,53589],{"class":54},[41,92505,321],{"class":275},[41,92507,92508],{"class":378},"\"video\"",[41,92510,51410],{"class":275},[41,92512,92513,92515,92517,92519,92521,92524,92527,92529,92531],{"class":43,"line":10002},[41,92514,55337],{"class":275},[41,92516,28286],{"class":51403},[41,92518,55342],{"class":54},[41,92520,321],{"class":275},[41,92522,92523],{"class":378},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[41,92525,92526],{"class":54}," controls",[41,92528,55417],{"class":275},[41,92530,28286],{"class":51403},[41,92532,51410],{"class":275},[41,92534,92535,92537,92539],{"class":43,"line":10008},[41,92536,51879],{"class":275},[41,92538,51714],{"class":51403},[41,92540,51410],{"class":275},[41,92542,92543,92545,92547,92549,92551,92554],{"class":43,"line":10035},[41,92544,51444],{"class":275},[41,92546,51714],{"class":51403},[41,92548,53589],{"class":54},[41,92550,321],{"class":275},[41,92552,92553],{"class":378},"\"elevator\"",[41,92555,51410],{"class":275},[41,92557,92558,92560,92562,92564,92566,92568,92571,92573,92575,92578,92580],{"class":43,"line":10044},[41,92559,55337],{"class":275},[41,92561,511],{"class":51403},[41,92563,61160],{"class":54},[41,92565,321],{"class":275},[41,92567,64339],{"class":378},[41,92569,92570],{"class":54}," data-ref",[41,92572,321],{"class":275},[41,92574,92508],{"class":378},[41,92576,92577],{"class":275},">视频介绍\u003C\u002F",[41,92579,511],{"class":51403},[41,92581,51410],{"class":275},[41,92583,92584,92586,92588,92590,92592,92594,92596,92598,92601,92604,92606],{"class":43,"line":10050},[41,92585,55337],{"class":275},[41,92587,511],{"class":51403},[41,92589,61160],{"class":54},[41,92591,321],{"class":275},[41,92593,64339],{"class":378},[41,92595,92570],{"class":54},[41,92597,321],{"class":275},[41,92599,92600],{"class":378},"\"intro\"",[41,92602,92603],{"class":275},">课程简介\u003C\u002F",[41,92605,511],{"class":51403},[41,92607,51410],{"class":275},[41,92609,92610,92612,92614,92616,92618,92620,92622,92624,92627,92630,92632],{"class":43,"line":10058},[41,92611,55337],{"class":275},[41,92613,511],{"class":51403},[41,92615,61160],{"class":54},[41,92617,321],{"class":275},[41,92619,64339],{"class":378},[41,92621,92570],{"class":54},[41,92623,321],{"class":275},[41,92625,92626],{"class":378},"\"outline\"",[41,92628,92629],{"class":275},">评论列表\u003C\u002F",[41,92631,511],{"class":51403},[41,92633,51410],{"class":275},[41,92635,92636,92638,92640],{"class":43,"line":10063},[41,92637,51879],{"class":275},[41,92639,51714],{"class":51403},[41,92641,51410],{"class":275},[41,92643,92644,92646,92648],{"class":43,"line":16742},[41,92645,52520],{"class":275},[41,92647,51714],{"class":51403},[41,92649,51410],{"class":275},[41,92651,92652,92654,92656,92658,92660,92663,92665,92667],{"class":43,"line":16748},[41,92653,52247],{"class":275},[41,92655,51916],{"class":51403},[41,92657,55342],{"class":54},[41,92659,321],{"class":275},[41,92661,92662],{"class":378},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[41,92664,55417],{"class":275},[41,92666,51916],{"class":51403},[41,92668,51410],{"class":275},[41,92670,92671,92673,92675],{"class":43,"line":16771},[41,92672,52247],{"class":275},[41,92674,51916],{"class":51403},[41,92676,51410],{"class":275},[41,92678,92679],{"class":43,"line":16777},[41,92680,92681],{"class":47},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[41,92683,92684,92686,92688,92690,92692,92694,92696,92699],{"class":43,"line":16800},[41,92685,11359],{"class":271},[41,92687,92158],{"class":58},[41,92689,13702],{"class":271},[41,92691,54499],{"class":275},[41,92693,54502],{"class":54},[41,92695,276],{"class":275},[41,92697,92698],{"class":378},"'video'",[41,92700,282],{"class":275},[41,92702,92703],{"class":43,"line":16814},[41,92704,92705],{"class":47},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[41,92707,92708,92711,92713,92715,92717,92720,92722],{"class":43,"line":16834},[41,92709,92710],{"class":275},"    video.ontimeupdate ",[41,92712,321],{"class":271},[41,92714,88458],{"class":275},[41,92716,91276],{"class":54},[41,92718,92719],{"class":275},"(() ",[41,92721,84825],{"class":271},[41,92723,15710],{"class":275},[41,92725,92726],{"class":43,"line":16840},[41,92727,92728],{"class":47},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[41,92730,92731],{"class":43,"line":16851},[41,92732,92733],{"class":47},"      \u002F\u002F 控制台输出当前的时间\n",[41,92735,92736,92739],{"class":43,"line":16874},[41,92737,92738],{"class":47},"      \u002F\u002F console.log(video.currentTime)",[41,92740,92741],{"class":47},"  \u002F\u002F获得当前的视频时间\n",[41,92743,92744],{"class":43,"line":16896},[41,92745,92746],{"class":47},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[41,92748,92749,92751,92753,92755,92758],{"class":43,"line":16901},[41,92750,74786],{"class":275},[41,92752,71757],{"class":54},[41,92754,276],{"class":275},[41,92756,92757],{"class":378},"'currentTime'",[41,92759,92760],{"class":275},", video.currentTime)\n",[41,92762,92763,92765,92767],{"class":43,"line":16907},[41,92764,54638],{"class":275},[41,92766,6548],{"class":58},[41,92768,282],{"class":275},[41,92770,92771],{"class":43,"line":16921},[41,92772,92773],{"class":47},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[41,92775,92776,92779,92782,92784,92787,92789],{"class":43,"line":16934},[41,92777,92778],{"class":275},"    video.",[41,92780,92781],{"class":54},"onloadeddata",[41,92783,13702],{"class":271},[41,92785,92786],{"class":275}," () ",[41,92788,84825],{"class":271},[41,92790,15710],{"class":275},[41,92792,92793],{"class":43,"line":16939},[41,92794,60115],{"class":47},[41,92796,92797],{"class":43,"line":16953},[41,92798,92799],{"class":47},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[41,92801,92802,92805,92807,92810,92812,92814,92816,92818,92820],{"class":43,"line":16958},[41,92803,92804],{"class":275},"      video.currentTime ",[41,92806,321],{"class":271},[41,92808,92809],{"class":275}," localStorage.",[41,92811,71788],{"class":54},[41,92813,276],{"class":275},[41,92815,92757],{"class":378},[41,92817,13852],{"class":275},[41,92819,71460],{"class":271},[41,92821,47436],{"class":58},[41,92823,92824],{"class":43,"line":16964},[41,92825,2326],{"class":275},[41,92827,92828,92830,92832],{"class":43,"line":16969},[41,92829,52520],{"class":275},[41,92831,51916],{"class":51403},[41,92833,51410],{"class":275},[41,92835,92836,92838,92840],{"class":43,"line":16983},[41,92837,51888],{"class":275},[41,92839,51903],{"class":51403},[41,92841,51410],{"class":275},[41,92843,92844],{"class":43,"line":16988},[41,92845,80],{"emptyLinePlaceholder":79},[41,92847,92848,92850,92852],{"class":43,"line":16993},[41,92849,51888],{"class":275},[41,92851,50738],{"class":51403},[41,92853,51410],{"class":275},[189,92855,92856],{},"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":37,"searchDepth":51,"depth":51,"links":92858},[92859,92864,92868,92869,92870,92875,92880,92881,92882,92883,92890,92895,92896,92906,92910,92911,92915],{"id":76794,"depth":51,"text":76795,"children":92860},[92861,92862,92863],{"id":76798,"depth":62,"text":76799},{"id":76823,"depth":62,"text":76824},{"id":76835,"depth":62,"text":76836},{"id":76847,"depth":51,"text":76848,"children":92865},[92866,92867],{"id":76851,"depth":62,"text":76852},{"id":76866,"depth":62,"text":76867},{"id":76918,"depth":51,"text":76919},{"id":76962,"depth":51,"text":76963},{"id":76979,"depth":51,"text":76980,"children":92871},[92872,92873,92874],{"id":76983,"depth":62,"text":76984},{"id":76996,"depth":62,"text":76997},{"id":77101,"depth":62,"text":77102},{"id":77390,"depth":51,"text":77391,"children":92876},[92877,92878,92879],{"id":77394,"depth":62,"text":77395},{"id":77837,"depth":62,"text":77838},{"id":78248,"depth":62,"text":78249},{"id":78311,"depth":51,"text":78312},{"id":78390,"depth":51,"text":78391},{"id":78483,"depth":51,"text":78484},{"id":80328,"depth":51,"text":80329,"children":92884},[92885,92886,92887,92888,92889],{"id":80332,"depth":62,"text":80333},{"id":80344,"depth":62,"text":80345},{"id":80563,"depth":62,"text":80564},{"id":80581,"depth":62,"text":80582},{"id":80641,"depth":62,"text":80642},{"id":84909,"depth":51,"text":84910,"children":92891},[92892,92893,92894],{"id":84913,"depth":62,"text":84914},{"id":84931,"depth":62,"text":84932},{"id":84957,"depth":62,"text":84958},{"id":84966,"depth":51,"text":84967},{"id":84988,"depth":51,"text":84989,"children":92897},[92898,92899,92900,92901,92902,92903,92904,92905],{"id":84992,"depth":62,"text":84993},{"id":85253,"depth":62,"text":85254},{"id":85439,"depth":62,"text":85440},{"id":85806,"depth":62,"text":85807},{"id":85922,"depth":62,"text":85923},{"id":85958,"depth":62,"text":85959},{"id":86005,"depth":62,"text":86006},{"id":86039,"depth":62,"text":86040},{"id":87402,"depth":51,"text":87403,"children":92907},[92908,92909],{"id":87406,"depth":62,"text":87407},{"id":87443,"depth":62,"text":87444},{"id":88798,"depth":51,"text":88799},{"id":89169,"depth":51,"text":89170,"children":92912},[92913,92914],{"id":89173,"depth":62,"text":89174},{"id":89207,"depth":62,"text":89208},{"id":89936,"depth":51,"text":89937,"children":92916},[92917,92918,92919,92920],{"id":89940,"depth":62,"text":89941},{"id":90898,"depth":62,"text":90899},{"id":91840,"depth":62,"text":91841},{"id":91914,"depth":62,"text":91915},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76783,"description":196},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92927,"title":92928,"body":92929,"description":92940,"extension":197,"meta":92941,"navigation":79,"path":92943,"seo":92944,"stem":92945,"__hash__":92946},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92930,"toc":92938},[92931],[20,92932,92933,92934],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[511,92935,92936],{"href":92936,"rel":92937},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24001],{"title":37,"searchDepth":51,"depth":51,"links":92939},[],"三件套第三套学习",{"category":92942},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92928,"description":92940},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92948,"title":92949,"body":92950,"description":196,"extension":197,"meta":93055,"navigation":79,"path":93056,"seo":93057,"stem":93058,"__hash__":93059},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92951,"toc":93050},[92952,92959,92962,92965,92968,92972,92981,92984,92987,92991,93000,93003,93007,93010,93030,93033,93047],[20,92953,92954],{},[511,92955,92958],{"href":92956,"rel":92957},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24001],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92960,92949],{"id":92961},"_1安装",[20,92963,92964],{},"numpy是科学计算基础库,底层是C语言",[20,92966,92967],{},"三种方式：",[15,92969,92971],{"id":92970},"_11-通过pip安装","1.1 通过pip安装",[32,92973,92975],{"className":30481,"code":92974,"language":30483,"meta":37,"style":37},"pip install numpy\n",[24,92976,92977],{"__ignoreMap":37},[41,92978,92979],{"class":43,"line":44},[41,92980,92974],{"class":275},[20,92982,92983],{},"首选方式，自动处理依赖项",[20,92985,92986],{},"在提示系统命令符中使用cmd",[15,92988,92990],{"id":92989},"_12-通过anaconda安装","1.2 通过Anaconda安装",[32,92992,92994],{"className":30481,"code":92993,"language":30483,"meta":37,"style":37},"conda install numpy\n",[24,92995,92996],{"__ignoreMap":37},[41,92997,92998],{"class":43,"line":44},[41,92999,92993],{"class":275},[20,93001,93002],{},"自动解决环境依赖",[15,93004,93006],{"id":93005},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[20,93008,93009],{},"对于Debian\u002FUbuntu",[32,93011,93013],{"className":30481,"code":93012,"language":30483,"meta":37,"style":37},"sudo apt-get install python3-numpy\n",[24,93014,93015],{"__ignoreMap":37},[41,93016,93017,93020,93022,93025,93027],{"class":43,"line":44},[41,93018,93019],{"class":275},"sudo apt",[41,93021,805],{"class":271},[41,93023,93024],{"class":275},"get install python3",[41,93026,805],{"class":271},[41,93028,93029],{"class":275},"numpy\n",[20,93031,93032],{},"对于Fedora:",[32,93034,93036],{"className":30481,"code":93035,"language":30483,"meta":37,"style":37},"sudo dnf install python3-numpy\n",[24,93037,93038],{"__ignoreMap":37},[41,93039,93040,93043,93045],{"class":43,"line":44},[41,93041,93042],{"class":275},"sudo dnf install python3",[41,93044,805],{"class":271},[41,93046,93029],{"class":275},[189,93048,93049],{},"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":37,"searchDepth":51,"depth":51,"links":93051},[93052,93053,93054],{"id":92970,"depth":51,"text":92971},{"id":92989,"depth":51,"text":92990},{"id":93005,"depth":51,"text":93006},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92949,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93061,"title":93062,"body":93063,"description":196,"extension":197,"meta":93176,"navigation":79,"path":93177,"seo":93178,"stem":93179,"__hash__":93180},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93064,"toc":93174},[93065,93068,93071,93074,93077,93080,93083,93086,93089,93092,93168,93171],[10,93066,93062],{"id":93067},"_10算数函数",[20,93069,93070],{},"加减乘除运算跟python基础语法没区别",[20,93072,93073],{},"除了python那种方法外还可以使用函数",[20,93075,93076],{},"加：np.add(a,b)",[20,93078,93079],{},"减：np.subtract(a,b)",[20,93081,93082],{},"乘：np.multiply(a,b)",[20,93084,93085],{},"除：np.divide(a,b) == a\u002Fb",[20,93087,93088],{},"取余：np.mod(a,b) == a%b",[20,93090,93091],{},"必须会的用法：",[32,93093,93095],{"className":30481,"code":93094,"language":30483,"meta":37,"style":37},"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",[24,93096,93097,93119,93140,93150,93163],{"__ignoreMap":37},[41,93098,93099,93101,93103,93106,93108,93111,93113,93115,93117],{"class":43,"line":44},[41,93100,511],{"class":275},[41,93102,321],{"class":271},[41,93104,93105],{"class":275},"np.arange(",[41,93107,693],{"class":58},[41,93109,93110],{"class":275},").reshape(",[41,93112,345],{"class":58},[41,93114,651],{"class":275},[41,93116,345],{"class":58},[41,93118,282],{"class":275},[41,93120,93121,93123,93125,93128,93130,93132,93134,93136,93138],{"class":43,"line":51},[41,93122,536],{"class":275},[41,93124,321],{"class":271},[41,93126,93127],{"class":275},"np.array([",[41,93129,719],{"class":58},[41,93131,651],{"class":275},[41,93133,719],{"class":58},[41,93135,651],{"class":275},[41,93137,719],{"class":58},[41,93139,4795],{"class":275},[41,93141,93142,93145,93147],{"class":43,"line":62},[41,93143,93144],{"class":275},"result",[41,93146,321],{"class":271},[41,93148,93149],{"class":275},"np.empty_like(a)\n",[41,93151,93152,93155,93158,93160],{"class":43,"line":70},[41,93153,93154],{"class":275},"np.add(a,b,",[41,93156,93157],{"class":5354},"out",[41,93159,321],{"class":271},[41,93161,93162],{"class":275},"result)\n",[41,93164,93165],{"class":43,"line":76},[41,93166,93167],{"class":275},"result\n",[20,93169,93170],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[189,93172,93173],{},"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":37,"searchDepth":51,"depth":51,"links":93175},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93062,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93182,"title":93183,"body":93184,"description":196,"extension":197,"meta":93946,"navigation":79,"path":93947,"seo":93948,"stem":93949,"__hash__":93950},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93185,"toc":93933},[93186,93189,93192,93195,93199,93238,93242,93286,93346,93350,93353,93392,93395,93440,93444,93480,93484,93553,93557,93621,93625,93628,93631,93634,93637,93673,93677,93717,93721,93793,93796,93800,93863,93867,93930],[10,93187,93183],{"id":93188},"_11统计函数",[20,93190,93191],{},"sum max min mean",[20,93193,93194],{},"这些有axis参数，可以指定方向",[15,93196,93198],{"id":93197},"_111-sum求和函数","11.1 sum()求和函数",[32,93200,93202],{"className":30481,"code":93201,"language":30483,"meta":37,"style":37},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[24,93203,93204,93209,93230],{"__ignoreMap":37},[41,93205,93206],{"class":43,"line":44},[41,93207,93208],{"class":47},"#创建一维数组\n",[41,93210,93211,93213,93215,93218,93220,93222,93224,93226,93228],{"class":43,"line":51},[41,93212,511],{"class":275},[41,93214,321],{"class":271},[41,93216,93217],{"class":275},"np.random.randint(",[41,93219,26],{"class":58},[41,93221,651],{"class":275},[41,93223,584],{"class":58},[41,93225,651],{"class":275},[41,93227,973],{"class":58},[41,93229,282],{"class":275},[41,93231,93232,93235],{"class":43,"line":62},[41,93233,93234],{"class":275},"np.sum(a)",[41,93236,93237],{"class":47},"#求和\n",[15,93239,93241],{"id":93240},"_112-max求最大值函数","11.2 max()求最大值函数",[32,93243,93245],{"className":30481,"code":93244,"language":30483,"meta":37,"style":37},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[24,93246,93247,93251,93271,93276,93281],{"__ignoreMap":37},[41,93248,93249],{"class":43,"line":44},[41,93250,93208],{"class":47},[41,93252,93253,93255,93257,93259,93261,93263,93265,93267,93269],{"class":43,"line":51},[41,93254,511],{"class":275},[41,93256,321],{"class":271},[41,93258,93217],{"class":275},[41,93260,26],{"class":58},[41,93262,651],{"class":275},[41,93264,584],{"class":58},[41,93266,651],{"class":275},[41,93268,973],{"class":58},[41,93270,282],{"class":275},[41,93272,93273],{"class":43,"line":62},[41,93274,93275],{"class":275},"np.max(a)\n",[41,93277,93278],{"class":43,"line":70},[41,93279,93280],{"class":47},"#最大索引(求最大元素的索引)arg\n",[41,93282,93283],{"class":43,"line":76},[41,93284,93285],{"class":275},"np.argmax(a)\n",[32,93287,93289],{"className":30481,"code":93288,"language":30483,"meta":37,"style":37},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[24,93290,93291,93312,93332,93336],{"__ignoreMap":37},[41,93292,93293,93295,93297,93300,93302,93304,93306,93308,93310],{"class":43,"line":44},[41,93294,11057],{"class":275},[41,93296,321],{"class":271},[41,93298,93299],{"class":275}," np.array([",[41,93301,26],{"class":58},[41,93303,12573],{"class":275},[41,93305,592],{"class":58},[41,93307,12573],{"class":275},[41,93309,345],{"class":58},[41,93311,4795],{"class":275},[41,93313,93314,93316,93318,93320,93322,93324,93326,93328,93330],{"class":43,"line":51},[41,93315,11083],{"class":275},[41,93317,321],{"class":271},[41,93319,93299],{"class":275},[41,93321,345],{"class":58},[41,93323,12573],{"class":275},[41,93325,351],{"class":58},[41,93327,12573],{"class":275},[41,93329,566],{"class":58},[41,93331,4795],{"class":275},[41,93333,93334],{"class":43,"line":62},[41,93335,80],{"emptyLinePlaceholder":79},[41,93337,93338,93340,93343],{"class":43,"line":70},[41,93339,30518],{"class":58},[41,93341,93342],{"class":275},"(np.maximum(a, b))   ",[41,93344,93345],{"class":47},"# [3 5 4]，每个位置上取较大值\n",[15,93347,93349],{"id":93348},"_113-mean求平均值函数","11.3 mean()求平均值函数",[20,93351,93352],{},"①一维数组：",[32,93354,93356],{"className":30481,"code":93355,"language":30483,"meta":37,"style":37},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[24,93357,93358,93362,93382,93387],{"__ignoreMap":37},[41,93359,93360],{"class":43,"line":44},[41,93361,93208],{"class":47},[41,93363,93364,93366,93368,93370,93372,93374,93376,93378,93380],{"class":43,"line":51},[41,93365,511],{"class":275},[41,93367,321],{"class":271},[41,93369,93217],{"class":275},[41,93371,26],{"class":58},[41,93373,651],{"class":275},[41,93375,584],{"class":58},[41,93377,651],{"class":275},[41,93379,973],{"class":58},[41,93381,282],{"class":275},[41,93383,93384],{"class":43,"line":62},[41,93385,93386],{"class":47},"#求平均值\n",[41,93388,93389],{"class":43,"line":70},[41,93390,93391],{"class":275},"np.mean(a)\n",[20,93393,93394],{},"②二维数组",[32,93396,93398],{"className":30481,"code":93397,"language":30483,"meta":37,"style":37},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[24,93399,93400,93405,93430,93435],{"__ignoreMap":37},[41,93401,93402],{"class":43,"line":44},[41,93403,93404],{"class":47},"#二维数组\n",[41,93406,93407,93410,93412,93414,93416,93418,93420,93422,93424,93426,93428],{"class":43,"line":51},[41,93408,93409],{"class":275},"aa",[41,93411,321],{"class":271},[41,93413,93105],{"class":275},[41,93415,26],{"class":58},[41,93417,651],{"class":275},[41,93419,796],{"class":58},[41,93421,93110],{"class":275},[41,93423,345],{"class":58},[41,93425,651],{"class":275},[41,93427,566],{"class":58},[41,93429,282],{"class":275},[41,93431,93432],{"class":43,"line":62},[41,93433,93434],{"class":47},"#对数组中的所有数求平均\n",[41,93436,93437],{"class":43,"line":70},[41,93438,93439],{"class":275},"np.mean(aa)\n",[15,93441,93443],{"id":93442},"_114-median求中位数函数","11.4 median()求中位数函数",[32,93445,93447],{"className":30481,"code":93446,"language":30483,"meta":37,"style":37},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[24,93448,93449,93454,93470,93475],{"__ignoreMap":37},[41,93450,93451],{"class":43,"line":44},[41,93452,93453],{"class":47},"#求中位数\n",[41,93455,93456,93458,93460,93462,93464,93466,93468],{"class":43,"line":51},[41,93457,536],{"class":275},[41,93459,321],{"class":271},[41,93461,93105],{"class":275},[41,93463,26],{"class":58},[41,93465,651],{"class":275},[41,93467,719],{"class":58},[41,93469,282],{"class":275},[41,93471,93472],{"class":43,"line":62},[41,93473,93474],{"class":275},"np.median(b)\n",[41,93476,93477],{"class":43,"line":70},[41,93478,93479],{"class":47},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[15,93481,93483],{"id":93482},"_115-power求幂运算函数","11.5 power()求幂运算函数",[32,93485,93487],{"className":30481,"code":93486,"language":30483,"meta":37,"style":37},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[24,93488,93489,93505,93510,93515,93524,93529,93538],{"__ignoreMap":37},[41,93490,93491,93493,93495,93497,93499,93501,93503],{"class":43,"line":44},[41,93492,536],{"class":275},[41,93494,321],{"class":271},[41,93496,93105],{"class":275},[41,93498,26],{"class":58},[41,93500,651],{"class":275},[41,93502,719],{"class":58},[41,93504,282],{"class":275},[41,93506,93507],{"class":43,"line":51},[41,93508,93509],{"class":47},"#幂运算\n",[41,93511,93512],{"class":43,"line":62},[41,93513,93514],{"class":47},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[41,93516,93517,93520,93522],{"class":43,"line":70},[41,93518,93519],{"class":275},"np.power(b,",[41,93521,351],{"class":58},[41,93523,282],{"class":275},[41,93525,93526],{"class":43,"line":76},[41,93527,93528],{"class":47},"#或者以下代码，将数据存储起来\n",[41,93530,93531,93533,93535],{"class":43,"line":83},[41,93532,1118],{"class":275},[41,93534,321],{"class":271},[41,93536,93537],{"class":275},"np.empty_like(b)\n",[41,93539,93540,93542,93544,93546,93548,93550],{"class":43,"line":89},[41,93541,93519],{"class":275},[41,93543,351],{"class":58},[41,93545,651],{"class":275},[41,93547,93157],{"class":5354},[41,93549,321],{"class":271},[41,93551,93552],{"class":275},"y)\n",[15,93554,93556],{"id":93555},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[32,93558,93560],{"className":30481,"code":93559,"language":30483,"meta":37,"style":37},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[24,93561,93562,93578,93583,93588,93592,93610],{"__ignoreMap":37},[41,93563,93564,93566,93568,93570,93572,93574,93576],{"class":43,"line":44},[41,93565,536],{"class":275},[41,93567,321],{"class":271},[41,93569,93105],{"class":275},[41,93571,26],{"class":58},[41,93573,651],{"class":275},[41,93575,719],{"class":58},[41,93577,282],{"class":275},[41,93579,93580],{"class":43,"line":51},[41,93581,93582],{"class":47},"#开方\n",[41,93584,93585],{"class":43,"line":62},[41,93586,93587],{"class":275},"np.sqrt(b)\n",[41,93589,93590],{"class":43,"line":70},[41,93591,93528],{"class":47},[41,93593,93594,93596,93598,93601,93604,93606,93608],{"class":43,"line":76},[41,93595,1118],{"class":275},[41,93597,321],{"class":271},[41,93599,93600],{"class":275},"np.empty_like(b,",[41,93602,93603],{"class":5354},"dtype",[41,93605,321],{"class":271},[41,93607,315],{"class":58},[41,93609,282],{"class":275},[41,93611,93612,93615,93617,93619],{"class":43,"line":83},[41,93613,93614],{"class":275},"np.sqrt(b,",[41,93616,93157],{"class":5354},[41,93618,321],{"class":271},[41,93620,93552],{"class":275},[15,93622,93624],{"id":93623},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[20,93626,93627],{},"对数组中的元素累计求和，可指定轴",[20,93629,93630],{},"#累计求和的意思是：",[20,93632,93633],{},"a = np.array([1, 2, 3, 4])",[20,93635,93636],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[32,93638,93640],{"className":30481,"code":93639,"language":30483,"meta":37,"style":37},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[24,93641,93642,93658,93663,93668],{"__ignoreMap":37},[41,93643,93644,93646,93648,93650,93652,93654,93656],{"class":43,"line":44},[41,93645,536],{"class":275},[41,93647,321],{"class":271},[41,93649,93105],{"class":275},[41,93651,26],{"class":58},[41,93653,651],{"class":275},[41,93655,719],{"class":58},[41,93657,282],{"class":275},[41,93659,93660],{"class":43,"line":51},[41,93661,93662],{"class":275},"np.cumsum(b)\n",[41,93664,93665],{"class":43,"line":62},[41,93666,93667],{"class":47},"#结果：\n",[41,93669,93670],{"class":43,"line":70},[41,93671,93672],{"class":47},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[15,93674,93676],{"id":93675},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[32,93678,93680],{"className":30481,"code":93679,"language":30483,"meta":37,"style":37},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[24,93681,93682,93698,93703,93708,93712],{"__ignoreMap":37},[41,93683,93684,93686,93688,93690,93692,93694,93696],{"class":43,"line":44},[41,93685,536],{"class":275},[41,93687,321],{"class":271},[41,93689,93105],{"class":275},[41,93691,26],{"class":58},[41,93693,651],{"class":275},[41,93695,719],{"class":58},[41,93697,282],{"class":275},[41,93699,93700],{"class":43,"line":51},[41,93701,93702],{"class":47},"#对数组中的元素累计求积，可指定轴\n",[41,93704,93705],{"class":43,"line":62},[41,93706,93707],{"class":275},"np.cumprod(b)\n",[41,93709,93710],{"class":43,"line":70},[41,93711,93667],{"class":47},[41,93713,93714],{"class":43,"line":76},[41,93715,93716],{"class":47},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[15,93718,93720],{"id":93719},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[32,93722,93724],{"className":30481,"code":93723,"language":30483,"meta":37,"style":37},"#删除数组中的重复数据，并对数据进行排序\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",[24,93725,93726,93731,93779,93784,93788],{"__ignoreMap":37},[41,93727,93728],{"class":43,"line":44},[41,93729,93730],{"class":47},"#删除数组中的重复数据，并对数据进行排序\n",[41,93732,93733,93735,93737,93739,93741,93743,93745,93747,93749,93751,93753,93755,93757,93759,93761,93763,93765,93767,93769,93771,93773,93775,93777],{"class":43,"line":51},[41,93734,511],{"class":275},[41,93736,321],{"class":271},[41,93738,93127],{"class":275},[41,93740,26],{"class":58},[41,93742,651],{"class":275},[41,93744,351],{"class":58},[41,93746,651],{"class":275},[41,93748,345],{"class":58},[41,93750,651],{"class":275},[41,93752,771],{"class":58},[41,93754,651],{"class":275},[41,93756,345],{"class":58},[41,93758,651],{"class":275},[41,93760,719],{"class":58},[41,93762,651],{"class":275},[41,93764,471],{"class":58},[41,93766,651],{"class":275},[41,93768,465],{"class":58},[41,93770,651],{"class":275},[41,93772,1048],{"class":58},[41,93774,651],{"class":275},[41,93776,566],{"class":58},[41,93778,4795],{"class":275},[41,93780,93781],{"class":43,"line":62},[41,93782,93783],{"class":275},"np.unique(a)\n",[41,93785,93786],{"class":43,"line":70},[41,93787,93667],{"class":47},[41,93789,93790],{"class":43,"line":76},[41,93791,93792],{"class":47},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[20,93794,93795],{},"升序形式排序",[15,93797,93799],{"id":93798},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[32,93801,93803],{"className":30481,"code":93802,"language":30483,"meta":37,"style":37},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[24,93804,93805,93853,93858],{"__ignoreMap":37},[41,93806,93807,93809,93811,93813,93815,93817,93819,93821,93823,93825,93827,93829,93831,93833,93835,93837,93839,93841,93843,93845,93847,93849,93851],{"class":43,"line":44},[41,93808,511],{"class":275},[41,93810,321],{"class":271},[41,93812,93127],{"class":275},[41,93814,26],{"class":58},[41,93816,651],{"class":275},[41,93818,351],{"class":58},[41,93820,651],{"class":275},[41,93822,345],{"class":58},[41,93824,651],{"class":275},[41,93826,771],{"class":58},[41,93828,651],{"class":275},[41,93830,345],{"class":58},[41,93832,651],{"class":275},[41,93834,719],{"class":58},[41,93836,651],{"class":275},[41,93838,471],{"class":58},[41,93840,651],{"class":275},[41,93842,465],{"class":58},[41,93844,651],{"class":275},[41,93846,1048],{"class":58},[41,93848,651],{"class":275},[41,93850,566],{"class":58},[41,93852,4795],{"class":275},[41,93854,93855],{"class":43,"line":51},[41,93856,93857],{"class":47},"#返回数组中非零元素的索引\n",[41,93859,93860],{"class":43,"line":62},[41,93861,93862],{"class":275},"np.nonzero(a)\n",[15,93864,93866],{"id":93865},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[32,93868,93870],{"className":30481,"code":93869,"language":30483,"meta":37,"style":37},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[24,93871,93872,93920,93925],{"__ignoreMap":37},[41,93873,93874,93876,93878,93880,93882,93884,93886,93888,93890,93892,93894,93896,93898,93900,93902,93904,93906,93908,93910,93912,93914,93916,93918],{"class":43,"line":44},[41,93875,511],{"class":275},[41,93877,321],{"class":271},[41,93879,93127],{"class":275},[41,93881,26],{"class":58},[41,93883,651],{"class":275},[41,93885,351],{"class":58},[41,93887,651],{"class":275},[41,93889,345],{"class":58},[41,93891,651],{"class":275},[41,93893,771],{"class":58},[41,93895,651],{"class":275},[41,93897,345],{"class":58},[41,93899,651],{"class":275},[41,93901,719],{"class":58},[41,93903,651],{"class":275},[41,93905,471],{"class":58},[41,93907,651],{"class":275},[41,93909,465],{"class":58},[41,93911,651],{"class":275},[41,93913,1048],{"class":58},[41,93915,651],{"class":275},[41,93917,566],{"class":58},[41,93919,4795],{"class":275},[41,93921,93922],{"class":43,"line":51},[41,93923,93924],{"class":47},"#计算一组数中最大值与最小值的差，可指定轴\n",[41,93926,93927],{"class":43,"line":62},[41,93928,93929],{"class":275},"np.ptp(a)\n",[189,93931,93932],{},"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":37,"searchDepth":51,"depth":51,"links":93934},[93935,93936,93937,93938,93939,93940,93941,93942,93943,93944,93945],{"id":93197,"depth":51,"text":93198},{"id":93240,"depth":51,"text":93241},{"id":93348,"depth":51,"text":93349},{"id":93442,"depth":51,"text":93443},{"id":93482,"depth":51,"text":93483},{"id":93555,"depth":51,"text":93556},{"id":93623,"depth":51,"text":93624},{"id":93675,"depth":51,"text":93676},{"id":93719,"depth":51,"text":93720},{"id":93798,"depth":51,"text":93799},{"id":93865,"depth":51,"text":93866},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93183,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93952,"title":93953,"body":93954,"description":196,"extension":197,"meta":94609,"navigation":79,"path":94610,"seo":94611,"stem":94612,"__hash__":94613},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93955,"toc":94597},[93956,93959,93963,93966,94182,94186,94189,94398,94402,94468,94473,94477,94480,94483,94521,94525,94528,94533,94537,94540,94543,94548,94552,94555,94559,94562,94565,94570,94574,94577,94580,94585,94589,94594],[10,93957,93953],{"id":93958},"_12其他常用函数",[15,93960,93962],{"id":93961},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[20,93964,93965],{},"将数组的数据按照行列复制扩展",[32,93967,93969],{"className":30481,"code":93968,"language":30483,"meta":37,"style":37},"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",[24,93970,93971,93987,93996,94000,94005,94010,94023,94027,94032,94037,94042,94046,94051,94075,94087,94091,94095,94100,94105,94110,94115,94119,94132,94136,94140,94145,94150,94155,94160,94165,94169,94173,94178],{"__ignoreMap":37},[41,93972,93973,93975,93977,93979,93981,93983,93985],{"class":43,"line":44},[41,93974,511],{"class":275},[41,93976,321],{"class":271},[41,93978,93105],{"class":275},[41,93980,26],{"class":58},[41,93982,651],{"class":275},[41,93984,592],{"class":58},[41,93986,282],{"class":275},[41,93988,93989,93992,93994],{"class":43,"line":51},[41,93990,93991],{"class":275},"np.tile(a,",[41,93993,351],{"class":58},[41,93995,282],{"class":275},[41,93997,93998],{"class":43,"line":62},[41,93999,93667],{"class":47},[41,94001,94002],{"class":43,"line":70},[41,94003,94004],{"class":47},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[41,94006,94007],{"class":43,"line":76},[41,94008,94009],{"class":47},"#行复制两次，列复制三次\n",[41,94011,94012,94015,94017,94019,94021],{"class":43,"line":83},[41,94013,94014],{"class":275},"np.tile(a,(",[41,94016,351],{"class":58},[41,94018,651],{"class":275},[41,94020,345],{"class":58},[41,94022,30600],{"class":275},[41,94024,94025],{"class":43,"line":89},[41,94026,93667],{"class":47},[41,94028,94029],{"class":43,"line":96},[41,94030,94031],{"class":378},"'''\n",[41,94033,94034],{"class":43,"line":104},[41,94035,94036],{"class":378},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[41,94038,94039],{"class":43,"line":176},[41,94040,94041],{"class":378},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[41,94043,94044],{"class":43,"line":184},[41,94045,94031],{"class":378},[41,94047,94048],{"class":43,"line":1757},[41,94049,94050],{"class":47},"#创建二维数组\n",[41,94052,94053,94055,94057,94059,94061,94063,94065,94067,94069,94071,94073],{"class":43,"line":1763},[41,94054,93409],{"class":275},[41,94056,321],{"class":271},[41,94058,93105],{"class":275},[41,94060,26],{"class":58},[41,94062,651],{"class":275},[41,94064,796],{"class":58},[41,94066,93110],{"class":275},[41,94068,566],{"class":58},[41,94070,651],{"class":275},[41,94072,345],{"class":58},[41,94074,282],{"class":275},[41,94076,94077,94080,94082,94084],{"class":43,"line":1768},[41,94078,94079],{"class":275},"np.tile(aa,",[41,94081,351],{"class":58},[41,94083,702],{"class":275},[41,94085,94086],{"class":47},"#一个数的时候就是行\n",[41,94088,94089],{"class":43,"line":1782},[41,94090,93667],{"class":47},[41,94092,94093],{"class":43,"line":1787},[41,94094,94031],{"class":378},[41,94096,94097],{"class":43,"line":1793},[41,94098,94099],{"class":378},"array([[ 1,  2,  3,  1,  2,  3],\n",[41,94101,94102],{"class":43,"line":1814},[41,94103,94104],{"class":378},"       [ 4,  5,  6,  4,  5,  6],\n",[41,94106,94107],{"class":43,"line":1819},[41,94108,94109],{"class":378},"       [ 7,  8,  9,  7,  8,  9],\n",[41,94111,94112],{"class":43,"line":1833},[41,94113,94114],{"class":378},"       [10, 11, 12, 10, 11, 12]])\n",[41,94116,94117],{"class":43,"line":1838},[41,94118,94031],{"class":378},[41,94120,94121,94124,94126,94128,94130],{"class":43,"line":1867},[41,94122,94123],{"class":275},"np.tile(aa,(",[41,94125,351],{"class":58},[41,94127,651],{"class":275},[41,94129,345],{"class":58},[41,94131,30600],{"class":275},[41,94133,94134],{"class":43,"line":1872},[41,94135,93667],{"class":47},[41,94137,94138],{"class":43,"line":1889},[41,94139,94031],{"class":378},[41,94141,94142],{"class":43,"line":1894},[41,94143,94144],{"class":378},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[41,94146,94147],{"class":43,"line":1899},[41,94148,94149],{"class":378},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[41,94151,94152],{"class":43,"line":1904},[41,94153,94154],{"class":378},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[41,94156,94157],{"class":43,"line":1918},[41,94158,94159],{"class":378},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[41,94161,94162],{"class":43,"line":1923},[41,94163,94164],{"class":378},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[41,94166,94167],{"class":43,"line":2715},[41,94168,94149],{"class":378},[41,94170,94171],{"class":43,"line":2729},[41,94172,94154],{"class":378},[41,94174,94175],{"class":43,"line":2737},[41,94176,94177],{"class":378},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[41,94179,94180],{"class":43,"line":2742},[41,94181,94031],{"class":378},[15,94183,94185],{"id":94184},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[20,94187,94188],{},"repeat()将数组中的每个元素重复若干次",[32,94190,94192],{"className":30481,"code":94191,"language":30483,"meta":37,"style":37},"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",[24,94193,94194,94210,94219,94223,94228,94252,94257,94266,94270,94275,94279,94284,94300,94304,94308,94313,94318,94323,94327,94332,94336,94341,94346,94350,94366,94370,94374,94379,94384,94389,94394],{"__ignoreMap":37},[41,94195,94196,94198,94200,94202,94204,94206,94208],{"class":43,"line":44},[41,94197,511],{"class":275},[41,94199,321],{"class":271},[41,94201,93105],{"class":275},[41,94203,26],{"class":58},[41,94205,651],{"class":275},[41,94207,592],{"class":58},[41,94209,282],{"class":275},[41,94211,94212,94215,94217],{"class":43,"line":51},[41,94213,94214],{"class":275},"np.repeat(a,",[41,94216,345],{"class":58},[41,94218,282],{"class":275},[41,94220,94221],{"class":43,"line":62},[41,94222,93667],{"class":47},[41,94224,94225],{"class":43,"line":70},[41,94226,94227],{"class":47},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[41,94229,94230,94232,94234,94236,94238,94240,94242,94244,94246,94248,94250],{"class":43,"line":76},[41,94231,93409],{"class":275},[41,94233,321],{"class":271},[41,94235,93105],{"class":275},[41,94237,26],{"class":58},[41,94239,651],{"class":275},[41,94241,796],{"class":58},[41,94243,93110],{"class":275},[41,94245,566],{"class":58},[41,94247,651],{"class":275},[41,94249,345],{"class":58},[41,94251,282],{"class":275},[41,94253,94254],{"class":43,"line":83},[41,94255,94256],{"class":47},"#这个重复之后二维变成一维\n",[41,94258,94259,94262,94264],{"class":43,"line":89},[41,94260,94261],{"class":275},"np.repeat(aa,",[41,94263,351],{"class":58},[41,94265,282],{"class":275},[41,94267,94268],{"class":43,"line":96},[41,94269,94031],{"class":378},[41,94271,94272],{"class":43,"line":104},[41,94273,94274],{"class":378},"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",[41,94276,94277],{"class":43,"line":176},[41,94278,94031],{"class":378},[41,94280,94281],{"class":43,"line":184},[41,94282,94283],{"class":47},"#指定axis\n",[41,94285,94286,94288,94290,94292,94294,94296,94298],{"class":43,"line":1757},[41,94287,94261],{"class":275},[41,94289,351],{"class":58},[41,94291,651],{"class":275},[41,94293,47617],{"class":5354},[41,94295,321],{"class":271},[41,94297,465],{"class":58},[41,94299,282],{"class":275},[41,94301,94302],{"class":43,"line":1763},[41,94303,93667],{"class":47},[41,94305,94306],{"class":43,"line":1768},[41,94307,94031],{"class":378},[41,94309,94310],{"class":43,"line":1782},[41,94311,94312],{"class":378},"array([[ 1,  2,  3],\n",[41,94314,94315],{"class":43,"line":1787},[41,94316,94317],{"class":378},"       [ 1,  2,  3],\n",[41,94319,94320],{"class":43,"line":1793},[41,94321,94322],{"class":378},"       [ 4,  5,  6],\n",[41,94324,94325],{"class":43,"line":1814},[41,94326,94322],{"class":378},[41,94328,94329],{"class":43,"line":1819},[41,94330,94331],{"class":378},"       [ 7,  8,  9],\n",[41,94333,94334],{"class":43,"line":1833},[41,94335,94331],{"class":378},[41,94337,94338],{"class":43,"line":1838},[41,94339,94340],{"class":378},"       [10, 11, 12],\n",[41,94342,94343],{"class":43,"line":1867},[41,94344,94345],{"class":378},"       [10, 11, 12]])\n",[41,94347,94348],{"class":43,"line":1872},[41,94349,94031],{"class":378},[41,94351,94352,94354,94356,94358,94360,94362,94364],{"class":43,"line":1889},[41,94353,94261],{"class":275},[41,94355,351],{"class":58},[41,94357,651],{"class":275},[41,94359,47617],{"class":5354},[41,94361,321],{"class":271},[41,94363,26],{"class":58},[41,94365,282],{"class":275},[41,94367,94368],{"class":43,"line":1894},[41,94369,93667],{"class":47},[41,94371,94372],{"class":43,"line":1899},[41,94373,94031],{"class":378},[41,94375,94376],{"class":43,"line":1904},[41,94377,94378],{"class":378},"array([[ 1,  1,  2,  2,  3,  3],\n",[41,94380,94381],{"class":43,"line":1918},[41,94382,94383],{"class":378},"       [ 4,  4,  5,  5,  6,  6],\n",[41,94385,94386],{"class":43,"line":1923},[41,94387,94388],{"class":378},"       [ 7,  7,  8,  8,  9,  9],\n",[41,94390,94391],{"class":43,"line":2715},[41,94392,94393],{"class":378},"       [10, 10, 11, 11, 12, 12]])\n",[41,94395,94396],{"class":43,"line":2729},[41,94397,94031],{"class":378},[15,94399,94401],{"id":94400},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[32,94403,94405],{"className":30481,"code":94404,"language":30483,"meta":37,"style":37},"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",[24,94406,94407,94423,94428,94440,94444,94449,94459,94463],{"__ignoreMap":37},[41,94408,94409,94411,94413,94415,94417,94419,94421],{"class":43,"line":44},[41,94410,511],{"class":275},[41,94412,321],{"class":271},[41,94414,93105],{"class":275},[41,94416,26],{"class":58},[41,94418,651],{"class":275},[41,94420,592],{"class":58},[41,94422,282],{"class":275},[41,94424,94425],{"class":43,"line":51},[41,94426,94427],{"class":47},"#array([，2，3，4])\n",[41,94429,94430,94433,94435,94437],{"class":43,"line":62},[41,94431,94432],{"class":275},"np.roll(a,",[41,94434,351],{"class":58},[41,94436,702],{"class":275},[41,94438,94439],{"class":47},"#传正数向后调多少位，传负数向前调多少位\n",[41,94441,94442],{"class":43,"line":70},[41,94443,93667],{"class":47},[41,94445,94446],{"class":43,"line":76},[41,94447,94448],{"class":47},"#array([3, 4, 1, 2])\n",[41,94450,94451,94453,94455,94457],{"class":43,"line":83},[41,94452,94432],{"class":275},[41,94454,805],{"class":271},[41,94456,26],{"class":58},[41,94458,282],{"class":275},[41,94460,94461],{"class":43,"line":89},[41,94462,93667],{"class":47},[41,94464,94465],{"class":43,"line":96},[41,94466,94467],{"class":47},"#array([2, 3, 4, 1])\n",[20,94469,94470],{},[1603,94471],{"alt":37,"src":94472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[15,94474,94476],{"id":94475},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[20,94478,94479],{},"resize()重新调整数组的大小",[20,94481,94482],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[32,94484,94486],{"className":30481,"code":94485,"language":30483,"meta":37,"style":37},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[24,94487,94488,94493,94506],{"__ignoreMap":37},[41,94489,94490],{"class":43,"line":44},[41,94491,94492],{"class":47},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[41,94494,94495,94498,94500,94502,94504],{"class":43,"line":51},[41,94496,94497],{"class":275},"np.resize(aa,(",[41,94499,351],{"class":58},[41,94501,651],{"class":275},[41,94503,617],{"class":58},[41,94505,30600],{"class":275},[41,94507,94508,94510,94512,94514,94516,94518],{"class":43,"line":62},[41,94509,94497],{"class":275},[41,94511,351],{"class":58},[41,94513,651],{"class":275},[41,94515,693],{"class":58},[41,94517,82874],{"class":275},[41,94519,94520],{"class":47},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[15,94522,94524],{"id":94523},"_125-placeput函数","12.5 place()\u002Fput()函数",[20,94526,94527],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[20,94529,94530],{},[1603,94531],{"alt":37,"src":94532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[15,94534,94536],{"id":94535},"_126-保存加载文件","12.6 保存加载文件",[20,94538,94539],{},"savetxt():将数据保存到txt文件中",[20,94541,94542],{},"loadtxt():从文件加载数据",[20,94544,94545],{},[1603,94546],{"alt":37,"src":94547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[15,94549,94551],{"id":94550},"_127-genfromtxt函数","12.7 genfromtxt()函数",[20,94553,94554],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[15,94556,94558],{"id":94557},"_128-anyall函数","12.8 any()\u002Fall()函数",[20,94560,94561],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[20,94563,94564],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[20,94566,94567],{},[1603,94568],{"alt":37,"src":94569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[15,94571,94573],{"id":94572},"_129-where语句","12.9 where语句",[20,94575,94576],{},"np.where(条件,x,y)",[20,94578,94579],{},"如果条件为True,对应值为x,否则对应值为y",[20,94581,94582],{},[1603,94583],{"alt":37,"src":94584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[15,94586,94588],{"id":94587},"_1210-dot矩阵","12.10 dot()矩阵",[20,94590,94591],{},[1603,94592],{"alt":37,"src":94593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[189,94595,94596],{},"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":37,"searchDepth":51,"depth":51,"links":94598},[94599,94600,94601,94602,94603,94604,94605,94606,94607,94608],{"id":93961,"depth":51,"text":93962},{"id":94184,"depth":51,"text":94185},{"id":94400,"depth":51,"text":94401},{"id":94475,"depth":51,"text":94476},{"id":94523,"depth":51,"text":94524},{"id":94535,"depth":51,"text":94536},{"id":94550,"depth":51,"text":94551},{"id":94557,"depth":51,"text":94558},{"id":94572,"depth":51,"text":94573},{"id":94587,"depth":51,"text":94588},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93953,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94615,"title":94616,"body":94617,"description":196,"extension":197,"meta":94970,"navigation":79,"path":94971,"seo":94972,"stem":94973,"__hash__":94974},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94618,"toc":94968},[94619,94622,94625,94628,94631,94634,94699,94701,94965],[10,94620,94616],{"id":94621},"_13数组排序",[20,94623,94624],{},"排序主要用到的方法是np.sort和np.argsort",[20,94626,94627],{},"其中np.sort()对数组直接排序",[20,94629,94630],{},"而np.argsort()是返回排序后的原始索引",[20,94632,94633],{},"①一维数组",[32,94635,94637],{"className":30481,"code":94636,"language":30483,"meta":37,"style":37},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[24,94638,94639,94643,94683,94691],{"__ignoreMap":37},[41,94640,94641],{"class":43,"line":44},[41,94642,93208],{"class":47},[41,94644,94645,94647,94649,94651,94653,94655,94657,94659,94661,94663,94665,94667,94669,94671,94673,94675,94677,94679,94681],{"class":43,"line":51},[41,94646,511],{"class":275},[41,94648,321],{"class":271},[41,94650,93127],{"class":275},[41,94652,345],{"class":58},[41,94654,651],{"class":275},[41,94656,771],{"class":58},[41,94658,651],{"class":275},[41,94660,668],{"class":58},[41,94662,651],{"class":275},[41,94664,1048],{"class":58},[41,94666,651],{"class":275},[41,94668,552],{"class":58},[41,94670,651],{"class":275},[41,94672,1166],{"class":58},[41,94674,651],{"class":275},[41,94676,617],{"class":58},[41,94678,651],{"class":275},[41,94680,719],{"class":58},[41,94682,4795],{"class":275},[41,94684,94685,94688],{"class":43,"line":62},[41,94686,94687],{"class":275},"np.sort(a)",[41,94689,94690],{"class":47},"#升序排序\n",[41,94692,94693,94696],{"class":43,"line":70},[41,94694,94695],{"class":275},"np.argsort(a)",[41,94697,94698],{"class":47},"#按照元素大小来索引排序\n",[20,94700,93394],{},[32,94702,94704],{"className":30481,"code":94703,"language":30483,"meta":37,"style":37},"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",[24,94705,94706,94718,94744,94749,94753,94758,94763,94768,94773,94777,94785,94789,94794,94799,94804,94809,94813,94818,94831,94835,94840,94845,94850,94855,94859,94864,94876,94880,94884,94888,94892,94896,94900,94905,94920,94925,94934,94939,94943,94947,94952,94956,94961],{"__ignoreMap":37},[41,94707,94708,94711,94713,94715],{"class":43,"line":44},[41,94709,94710],{"class":275},"np.random.seed(",[41,94712,465],{"class":58},[41,94714,702],{"class":275},[41,94716,94717],{"class":47},"#保证每次值一样\n",[41,94719,94720,94722,94724,94726,94728,94730,94732,94734,94736,94738,94740,94742],{"class":43,"line":51},[41,94721,93409],{"class":275},[41,94723,321],{"class":271},[41,94725,93217],{"class":275},[41,94727,584],{"class":58},[41,94729,651],{"class":275},[41,94731,31599],{"class":5354},[41,94733,321],{"class":271},[41,94735,276],{"class":275},[41,94737,566],{"class":58},[41,94739,651],{"class":275},[41,94741,617],{"class":58},[41,94743,30600],{"class":275},[41,94745,94746],{"class":43,"line":62},[41,94747,94748],{"class":47},"#原数组：\n",[41,94750,94751],{"class":43,"line":70},[41,94752,94031],{"class":378},[41,94754,94755],{"class":43,"line":76},[41,94756,94757],{"class":378},"array([[44, 47, 64, 67, 67,  9],\n",[41,94759,94760],{"class":43,"line":83},[41,94761,94762],{"class":378},"       [83, 21, 36, 87, 70, 88],\n",[41,94764,94765],{"class":43,"line":89},[41,94766,94767],{"class":378},"       [88, 12, 58, 65, 39, 87],\n",[41,94769,94770],{"class":43,"line":96},[41,94771,94772],{"class":378},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[41,94774,94775],{"class":43,"line":104},[41,94776,94031],{"class":378},[41,94778,94779,94782],{"class":43,"line":176},[41,94780,94781],{"class":275},"np.sort(aa)",[41,94783,94784],{"class":47},"#每行进行了排序\n",[41,94786,94787],{"class":43,"line":184},[41,94788,94031],{"class":378},[41,94790,94791],{"class":43,"line":1757},[41,94792,94793],{"class":378},"array([[ 9, 44, 47, 64, 67, 67],\n",[41,94795,94796],{"class":43,"line":1763},[41,94797,94798],{"class":378},"       [21, 36, 70, 83, 87, 88],\n",[41,94800,94801],{"class":43,"line":1768},[41,94802,94803],{"class":378},"       [12, 39, 58, 65, 87, 88],\n",[41,94805,94806],{"class":43,"line":1782},[41,94807,94808],{"class":378},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[41,94810,94811],{"class":43,"line":1787},[41,94812,94031],{"class":378},[41,94814,94815],{"class":43,"line":1793},[41,94816,94817],{"class":47},"#axis=0时\n",[41,94819,94820,94823,94825,94827,94829],{"class":43,"line":1814},[41,94821,94822],{"class":275},"np.sort(aa,",[41,94824,47617],{"class":5354},[41,94826,321],{"class":271},[41,94828,465],{"class":58},[41,94830,282],{"class":275},[41,94832,94833],{"class":43,"line":1819},[41,94834,94031],{"class":378},[41,94836,94837],{"class":43,"line":1833},[41,94838,94839],{"class":378},"array([[44, 12, 36, 37, 25,  9],\n",[41,94841,94842],{"class":43,"line":1838},[41,94843,94844],{"class":378},"       [46, 21, 58, 65, 39, 77],\n",[41,94846,94847],{"class":43,"line":1867},[41,94848,94849],{"class":378},"       [83, 47, 64, 67, 67, 87],\n",[41,94851,94852],{"class":43,"line":1872},[41,94853,94854],{"class":378},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[41,94856,94857],{"class":43,"line":1889},[41,94858,94031],{"class":378},[41,94860,94861],{"class":43,"line":1894},[41,94862,94863],{"class":47},"#axis=1时,为默认值\n",[41,94865,94866,94868,94870,94872,94874],{"class":43,"line":1899},[41,94867,94822],{"class":275},[41,94869,47617],{"class":5354},[41,94871,321],{"class":271},[41,94873,26],{"class":58},[41,94875,282],{"class":275},[41,94877,94878],{"class":43,"line":1904},[41,94879,94031],{"class":378},[41,94881,94882],{"class":43,"line":1918},[41,94883,94793],{"class":378},[41,94885,94886],{"class":43,"line":1923},[41,94887,94798],{"class":378},[41,94889,94890],{"class":43,"line":2715},[41,94891,94803],{"class":378},[41,94893,94894],{"class":43,"line":2729},[41,94895,94808],{"class":378},[41,94897,94898],{"class":43,"line":2737},[41,94899,94031],{"class":378},[41,94901,94902],{"class":43,"line":2742},[41,94903,94904],{"class":47},"#按最后一列排序\n",[41,94906,94907,94909,94911,94914,94916,94918],{"class":43,"line":2748},[41,94908,536],{"class":275},[41,94910,321],{"class":271},[41,94912,94913],{"class":275},"aa[:,",[41,94915,805],{"class":271},[41,94917,26],{"class":58},[41,94919,33349],{"class":275},[41,94921,94922],{"class":43,"line":2754},[41,94923,94924],{"class":47},"#获取最后一列排好序的索引\n",[41,94926,94927,94929,94931],{"class":43,"line":2759},[41,94928,74161],{"class":275},[41,94930,321],{"class":271},[41,94932,94933],{"class":275},"np.argsort(b)\n",[41,94935,94936],{"class":43,"line":8086},[41,94937,94938],{"class":275},"aa[index]\n",[41,94940,94941],{"class":43,"line":8110},[41,94942,94031],{"class":378},[41,94944,94945],{"class":43,"line":8115},[41,94946,94757],{"class":378},[41,94948,94949],{"class":43,"line":8121},[41,94950,94951],{"class":378},"       [46, 88, 81, 37, 25, 77],\n",[41,94953,94954],{"class":43,"line":8148},[41,94955,94767],{"class":378},[41,94957,94958],{"class":43,"line":8153},[41,94959,94960],{"class":378},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[41,94962,94963],{"class":43,"line":8159},[41,94964,94031],{"class":378},[189,94966,94967],{},"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":37,"searchDepth":51,"depth":51,"links":94969},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94616,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94976,"title":94977,"body":94978,"description":196,"extension":197,"meta":95008,"navigation":79,"path":95009,"seo":95010,"stem":95011,"__hash__":95012},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94979,"toc":95006},[94980,94983,94986,94989,94992,94995,94998,95001],[10,94981,94977],{"id":94982},"_14广播机制",[20,94984,94985],{},"广播的规则：",[20,94987,94988],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[20,94990,94991],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[20,94993,94994],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[20,94996,94997],{},"3.如果没有维度形状为1，则会引发异常",[20,94999,95000],{},"也就是只有维度或者个数为1才可以进行广播操作",[20,95002,95003],{},[1603,95004],{"alt":37,"src":95005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":37,"searchDepth":51,"depth":51,"links":95007},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94977,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95014,"title":95015,"body":95016,"description":196,"extension":197,"meta":95114,"navigation":79,"path":95115,"seo":95116,"stem":95117,"__hash__":95118},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95017,"toc":95112},[95018,95021,95024,95109],[10,95019,95015],{"id":95020},"_15比较掩码",[20,95022,95023],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[32,95025,95027],{"className":30481,"code":95026,"language":30483,"meta":37,"style":37},"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",[24,95028,95029,95075,95086,95100,95104],{"__ignoreMap":37},[41,95030,95031,95033,95035,95038,95040,95042,95044,95046,95048,95050,95052,95054,95056,95058,95060,95062,95064,95066,95068,95070,95072],{"class":43,"line":44},[41,95032,511],{"class":275},[41,95034,321],{"class":271},[41,95036,95037],{"class":275},"np.array([[",[41,95039,26],{"class":58},[41,95041,651],{"class":275},[41,95043,351],{"class":58},[41,95045,651],{"class":275},[41,95047,345],{"class":58},[41,95049,48133],{"class":275},[41,95051,745],{"class":58},[41,95053,651],{"class":275},[41,95055,771],{"class":58},[41,95057,651],{"class":275},[41,95059,796],{"class":58},[41,95061,48133],{"class":275},[41,95063,998],{"class":58},[41,95065,651],{"class":275},[41,95067,1023],{"class":58},[41,95069,651],{"class":275},[41,95071,1048],{"class":58},[41,95073,95074],{"class":275},"]])\n",[41,95076,95077,95079,95081,95083],{"class":43,"line":51},[41,95078,511],{"class":275},[41,95080,1183],{"class":271},[41,95082,973],{"class":58},[41,95084,95085],{"class":47},"#结果是一个由True,False组成的数组\n",[41,95087,95088,95091,95093,95095,95097],{"class":43,"line":62},[41,95089,95090],{"class":275},"a[a",[41,95092,1183],{"class":271},[41,95094,973],{"class":58},[41,95096,1213],{"class":275},[41,95098,95099],{"class":47},"#小于20的元素会存到这个数组中\n",[41,95101,95102],{"class":43,"line":70},[41,95103,93667],{"class":47},[41,95105,95106],{"class":43,"line":76},[41,95107,95108],{"class":47},"#array([ 1,  2,  3, 11, 12, 13])\n",[189,95110,95111],{},"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":37,"searchDepth":51,"depth":51,"links":95113},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95015,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95120,"title":95121,"body":95122,"description":196,"extension":197,"meta":95214,"navigation":79,"path":95215,"seo":95216,"stem":95217,"__hash__":95218},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95123,"toc":95212},[95124,95127,95130,95133,95136,95139,95204,95209],[10,95125,95121],{"id":95126},"_16魔法命令time",[20,95128,95129],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[20,95131,95132],{},"%:行模式",[20,95134,95135],{},"%%:单元格模式",[20,95137,95138],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[32,95140,95142],{"className":30481,"code":95141,"language":30483,"meta":37,"style":37},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[24,95143,95144,95149,95156,95161,95170,95183,95187,95195],{"__ignoreMap":37},[41,95145,95146],{"class":43,"line":44},[41,95147,95148],{"class":47},"#程序执行时间\n",[41,95150,95151,95153],{"class":43,"line":51},[41,95152,30495],{"class":271},[41,95154,95155],{"class":275}," time \n",[41,95157,95158],{"class":43,"line":62},[41,95159,95160],{"class":47},"#获取时间\n",[41,95162,95163,95166,95168],{"class":43,"line":70},[41,95164,95165],{"class":275},"start",[41,95167,321],{"class":271},[41,95169,32521],{"class":275},[41,95171,95172,95175,95178,95180],{"class":43,"line":76},[41,95173,95174],{"class":275},"time.sleep(",[41,95176,95177],{"class":58},"0.4",[41,95179,702],{"class":275},[41,95181,95182],{"class":47},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[41,95184,95185],{"class":43,"line":83},[41,95186,95160],{"class":47},[41,95188,95189,95191,95193],{"class":43,"line":89},[41,95190,45904],{"class":275},[41,95192,321],{"class":271},[41,95194,32521],{"class":275},[41,95196,95197,95199,95201],{"class":43,"line":96},[41,95198,45904],{"class":275},[41,95200,805],{"class":271},[41,95202,95203],{"class":275},"start\n",[20,95205,95206],{},[1603,95207],{"alt":37,"src":95208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[189,95210,95211],{},"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":37,"searchDepth":51,"depth":51,"links":95213},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95121,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95220,"title":95221,"body":95222,"description":196,"extension":197,"meta":95257,"navigation":79,"path":95258,"seo":95259,"stem":95260,"__hash__":95261},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95223,"toc":95255},[95224,95227,95230,95233,95236,95239,95242,95245,95250],[10,95225,95221],{"id":95226},"_17魔法命令timeit",[20,95228,95229],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[20,95231,95232],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[20,95234,95235],{},"单元格模式：",[20,95237,95238],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[20,95240,95241],{},"初始化语句执行次数由轮数来决定",[20,95243,95244],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[20,95246,95247],{},[1603,95248],{"alt":37,"src":95249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[20,95251,95252],{},[1603,95253],{"alt":37,"src":95254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":37,"searchDepth":51,"depth":51,"links":95256},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95221,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95263,"title":95264,"body":95265,"description":196,"extension":197,"meta":95283,"navigation":79,"path":95284,"seo":95285,"stem":95286,"__hash__":95287},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95266,"toc":95281},[95267,95270,95273,95276],[10,95268,95264],{"id":95269},"_18魔法命令writefile和run",[20,95271,95272],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[20,95274,95275],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[20,95277,95278],{},[1603,95279],{"alt":37,"src":95280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":37,"searchDepth":51,"depth":51,"links":95282},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95264,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95289,"title":95290,"body":95291,"description":196,"extension":197,"meta":95344,"navigation":79,"path":95345,"seo":95346,"stem":95347,"__hash__":95348},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95292,"toc":95342},[95293,95296,95299,95301,95304,95307,95312,95315,95318,95321,95324,95327,95330,95333,95336,95339],[10,95294,95290],{"id":95295},"_19魔法命令memit",[20,95297,95298],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[20,95300,24736],{},[20,95302,95303],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[20,95305,95306],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[20,95308,95309],{},[1603,95310],{"alt":37,"src":95311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[20,95313,95314],{},"补充：",[20,95316,95317],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[20,95319,95320],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[20,95322,95323],{},"解决方法：",[20,95325,95326],{},"1.cmd",[20,95328,95329],{},"2.依次输入以下代码：",[20,95331,95332],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[20,95334,95335],{},"pip install --upgrade ipython",[20,95337,95338],{},"#升级 memory_profiler 和 setuptools",[20,95340,95341],{},"pip install --upgrade memory_profiler setuptools",{"title":37,"searchDepth":51,"depth":51,"links":95343},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95290,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95350,"title":95351,"body":95352,"description":196,"extension":197,"meta":96998,"navigation":79,"path":96999,"seo":97000,"stem":97001,"__hash__":97002},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95353,"toc":96968},[95354,95357,95361,95365,95426,95429,95434,95438,95443,95448,95453,95458,95461,95466,95470,95474,95507,95510,95513,95516,95568,95571,95607,95610,95652,95656,95677,95679,95716,95718,95723,95725,95730,95734,95737,95765,95769,95773,95826,95830,95922,95926,95930,95933,95938,95942,95967,95972,95976,95979,95982,95985,95988,95991,95994,95997,96009,96013,96017,96020,96052,96055,96078,96081,96107,96110,96136,96139,96173,96176,96238,96242,96245,96249,96252,96278,96281,96284,96289,96292,96361,96363,96368,96429,96432,96443,96449,96454,96458,96461,96474,96478,96493,96495,96518,96520,96546,96549,96552,96555,96603,96605,96610,96614,96618,96645,96649,96676,96679,96684,96689,96779,96783,96841,96846,96849,96852,96894,96898,96954,96959,96962,96965],[10,95355,95351],{"id":95356},"_2创建数组",[15,95358,95360],{"id":95359},"_21-array函数创建数组","2.1 array()函数创建数组",[241,95362,95364],{"id":95363},"_221-函数语句","2.2.1 函数语句",[32,95366,95368],{"className":30481,"code":95367,"language":30483,"meta":37,"style":37},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[24,95369,95370],{"__ignoreMap":37},[41,95371,95372,95375,95378,95380,95382,95384,95386,95388,95391,95393,95396,95398,95401,95403,95405,95407,95410,95412,95415,95417,95420,95422,95424],{"class":43,"line":44},[41,95373,95374],{"class":275},"numpy.array(",[41,95376,95377],{"class":58},"object",[41,95379,12573],{"class":275},[41,95381,93603],{"class":5354},[41,95383,13702],{"class":271},[41,95385,39036],{"class":58},[41,95387,12573],{"class":275},[41,95389,95390],{"class":5354},"copy",[41,95392,13702],{"class":271},[41,95394,95395],{"class":58}," True",[41,95397,12573],{"class":275},[41,95399,95400],{"class":5354},"order",[41,95402,13702],{"class":271},[41,95404,39036],{"class":58},[41,95406,12573],{"class":275},[41,95408,95409],{"class":5354},"subok",[41,95411,13702],{"class":271},[41,95413,95414],{"class":58}," False",[41,95416,12573],{"class":275},[41,95418,95419],{"class":5354},"ndmin",[41,95421,13702],{"class":271},[41,95423,4231],{"class":58},[41,95425,282],{"class":275},[20,95427,95428],{},"参数：",[20,95430,95431],{},[1603,95432],{"alt":37,"src":95433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[241,95435,95437],{"id":95436},"_222-实例","2.2.2 实例",[20,95439,95440],{},[1603,95441],{"alt":37,"src":95442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[20,95444,95445],{},[1603,95446],{"alt":37,"src":95447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[20,95449,95450],{},[1603,95451],{"alt":37,"src":95452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[20,95454,95455],{},[1603,95456],{"alt":37,"src":95457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[20,95459,95460],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[20,95462,95463],{},[1603,95464],{"alt":37,"src":95465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[15,95467,95469],{"id":95468},"_22-随机数创建数组","2.2 随机数创建数组",[241,95471,95473],{"id":95472},"_221-random语句","2.2.1 random语句",[32,95475,95477],{"className":30481,"code":95476,"language":30483,"meta":37,"style":37},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[24,95478,95479,95484,95489,95497,95502],{"__ignoreMap":37},[41,95480,95481],{"class":43,"line":44},[41,95482,95483],{"class":47},"#random.random()\n",[41,95485,95486],{"class":43,"line":51},[41,95487,95488],{"class":47},"#确定随机种子,就是每次运行结果是相同的\n",[41,95490,95491,95493,95495],{"class":43,"line":62},[41,95492,94710],{"class":275},[41,95494,465],{"class":58},[41,95496,282],{"class":275},[41,95498,95499],{"class":43,"line":70},[41,95500,95501],{"class":275},"np.random.random()\n",[41,95503,95504],{"class":43,"line":76},[41,95505,95506],{"class":47},"#生成一个随机的数目\n",[20,95508,95509],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[20,95511,95512],{},"可以指定数组形状 size",[20,95514,95515],{},"①生成一维数组",[32,95517,95519],{"className":30481,"code":95518,"language":30483,"meta":37,"style":37},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[24,95520,95521,95526,95539,95544,95560],{"__ignoreMap":37},[41,95522,95523],{"class":43,"line":44},[41,95524,95525],{"class":47},"#random.random(size())\n",[41,95527,95528,95531,95533,95535,95537],{"class":43,"line":51},[41,95529,95530],{"class":275},"np.random.random(",[41,95532,31599],{"class":5354},[41,95534,321],{"class":271},[41,95536,592],{"class":58},[41,95538,282],{"class":275},[41,95540,95541],{"class":43,"line":62},[41,95542,95543],{"class":47},"#生成一位的五个元素\n",[41,95545,95546,95548,95550,95552,95554,95556,95558],{"class":43,"line":70},[41,95547,511],{"class":275},[41,95549,321],{"class":271},[41,95551,95530],{"class":275},[41,95553,31599],{"class":5354},[41,95555,321],{"class":271},[41,95557,566],{"class":58},[41,95559,282],{"class":275},[41,95561,95562,95565],{"class":43,"line":76},[41,95563,95564],{"class":275},"a.shape ",[41,95566,95567],{"class":47},"#输出数组形状\n",[20,95569,95570],{},"②生成二维数组",[32,95572,95574],{"className":30481,"code":95573,"language":30483,"meta":37,"style":37},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[24,95575,95576,95580,95602],{"__ignoreMap":37},[41,95577,95578],{"class":43,"line":44},[41,95579,93404],{"class":47},[41,95581,95582,95584,95586,95588,95590,95592,95594,95596,95598,95600],{"class":43,"line":51},[41,95583,93409],{"class":275},[41,95585,321],{"class":271},[41,95587,95530],{"class":275},[41,95589,31599],{"class":5354},[41,95591,321],{"class":271},[41,95593,276],{"class":275},[41,95595,566],{"class":58},[41,95597,651],{"class":275},[41,95599,592],{"class":58},[41,95601,30600],{"class":275},[41,95603,95604],{"class":43,"line":62},[41,95605,95606],{"class":47},"#生成四行五列的数组\n",[20,95608,95609],{},"③生成三维数组",[32,95611,95613],{"className":30481,"code":95612,"language":30483,"meta":37,"style":37},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[24,95614,95615,95620,95647],{"__ignoreMap":37},[41,95616,95617],{"class":43,"line":44},[41,95618,95619],{"class":47},"#三维数组\n",[41,95621,95622,95625,95627,95629,95631,95633,95635,95637,95639,95641,95643,95645],{"class":43,"line":51},[41,95623,95624],{"class":275},"aaa",[41,95626,321],{"class":271},[41,95628,95530],{"class":275},[41,95630,31599],{"class":5354},[41,95632,321],{"class":271},[41,95634,276],{"class":275},[41,95636,351],{"class":58},[41,95638,651],{"class":275},[41,95640,345],{"class":58},[41,95642,651],{"class":275},[41,95644,566],{"class":58},[41,95646,30600],{"class":275},[41,95648,95649],{"class":43,"line":62},[41,95650,95651],{"class":275},"aaa.shape\n",[241,95653,95655],{"id":95654},"_222-randint语句","2.2.2 randint语句",[32,95657,95659],{"className":30481,"code":95658,"language":30483,"meta":37,"style":37},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[24,95660,95661,95666],{"__ignoreMap":37},[41,95662,95663],{"class":43,"line":44},[41,95664,95665],{"class":47},"#生成随机的整数 random.randint(low,high,size)\n",[41,95667,95668,95670,95672,95674],{"class":43,"line":51},[41,95669,93217],{"class":275},[41,95671,592],{"class":58},[41,95673,13852],{"class":275},[41,95675,95676],{"class":47},"#0~5中的随机一个数\n",[20,95678,95515],{},[32,95680,95682],{"className":30481,"code":95681,"language":30483,"meta":37,"style":37},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[24,95683,95684,95689,95711],{"__ignoreMap":37},[41,95685,95686],{"class":43,"line":44},[41,95687,95688],{"class":47},"#一维\n",[41,95690,95691,95693,95695,95697,95699,95701,95703,95705,95707,95709],{"class":43,"line":51},[41,95692,93217],{"class":275},[41,95694,26],{"class":58},[41,95696,651],{"class":275},[41,95698,745],{"class":58},[41,95700,651],{"class":275},[41,95702,31599],{"class":5354},[41,95704,321],{"class":271},[41,95706,276],{"class":275},[41,95708,719],{"class":58},[41,95710,30600],{"class":275},[41,95712,95713],{"class":43,"line":62},[41,95714,95715],{"class":47},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[20,95717,95570],{},[20,95719,95720],{},[1603,95721],{"alt":37,"src":95722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[20,95724,95609],{},[20,95726,95727],{},[1603,95728],{"alt":37,"src":95729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[241,95731,95733],{"id":95732},"_222-rand语句","2.2.2 rand语句",[20,95735,95736],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[32,95738,95740],{"className":30481,"code":95739,"language":30483,"meta":37,"style":37},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[24,95741,95742,95755,95760],{"__ignoreMap":37},[41,95743,95744,95747,95749,95751,95753],{"class":43,"line":44},[41,95745,95746],{"class":275},"np.random.rand(",[41,95748,584],{"class":58},[41,95750,651],{"class":275},[41,95752,719],{"class":58},[41,95754,282],{"class":275},[41,95756,95757],{"class":43,"line":51},[41,95758,95759],{"class":47},"#第一个参数100：行数，表示有100个样本\n",[41,95761,95762],{"class":43,"line":62},[41,95763,95764],{"class":47},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[15,95766,95768],{"id":95767},"_23-arange创建数组","2.3 arange()创建数组",[241,95770,95772],{"id":95771},"_231-函数语句","2.3.1 函数语句",[32,95774,95776],{"className":30481,"code":95775,"language":30483,"meta":37,"style":37},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[24,95777,95778,95792,95797,95802,95807,95812,95817,95822],{"__ignoreMap":37},[41,95779,95780,95783,95785,95787,95790],{"class":43,"line":44},[41,95781,95782],{"class":275},"numpy.arange([start,] stop[, step], ",[41,95784,93603],{"class":5354},[41,95786,321],{"class":271},[41,95788,95789],{"class":58},"None",[41,95791,282],{"class":275},[41,95793,95794],{"class":43,"line":51},[41,95795,95796],{"class":47},"#参数\n",[41,95798,95799],{"class":43,"line":62},[41,95800,95801],{"class":378},"\"\"\"\n",[41,95803,95804],{"class":43,"line":70},[41,95805,95806],{"class":378},"start:起始值，可选，默认从 0 开始。\n",[41,95808,95809],{"class":43,"line":76},[41,95810,95811],{"class":378},"stop:结束值（不包含该值）。\n",[41,95813,95814],{"class":43,"line":83},[41,95815,95816],{"class":378},"step:步长，可选，默认是 1。可以为浮点数。\n",[41,95818,95819],{"class":43,"line":89},[41,95820,95821],{"class":378},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[41,95823,95824],{"class":43,"line":96},[41,95825,95801],{"class":378},[241,95827,95829],{"id":95828},"_232-实例","2.3.2 实例",[32,95831,95833],{"className":30481,"code":95832,"language":30483,"meta":37,"style":37},"#创建一维数组\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",[24,95834,95835,95839,95863,95868,95873,95877,95900,95904,95908,95913,95918],{"__ignoreMap":37},[41,95836,95837],{"class":43,"line":44},[41,95838,93208],{"class":47},[41,95840,95841,95843,95845,95847,95849,95851,95853,95855,95857,95859,95861],{"class":43,"line":51},[41,95842,93105],{"class":275},[41,95844,26],{"class":58},[41,95846,651],{"class":275},[41,95848,998],{"class":58},[41,95850,651],{"class":275},[41,95852,26],{"class":58},[41,95854,651],{"class":275},[41,95856,93603],{"class":5354},[41,95858,321],{"class":271},[41,95860,279],{"class":58},[41,95862,282],{"class":275},[41,95864,95865],{"class":43,"line":62},[41,95866,95867],{"class":47},"#输出结果：\n",[41,95869,95870],{"class":43,"line":70},[41,95871,95872],{"class":47},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[41,95874,95875],{"class":43,"line":76},[41,95876,94050],{"class":47},[41,95878,95879,95882,95884,95886,95888,95891,95893,95895,95897],{"class":43,"line":83},[41,95880,95881],{"class":275},"np.array([np.arange(",[41,95883,26],{"class":58},[41,95885,651],{"class":275},[41,95887,566],{"class":58},[41,95889,95890],{"class":275},"),np.arange(",[41,95892,566],{"class":58},[41,95894,651],{"class":275},[41,95896,642],{"class":58},[41,95898,95899],{"class":275},")])\n",[41,95901,95902],{"class":43,"line":89},[41,95903,93667],{"class":47},[41,95905,95906],{"class":43,"line":96},[41,95907,95801],{"class":378},[41,95909,95910],{"class":43,"line":104},[41,95911,95912],{"class":378},"array([[1, 2, 3],\n",[41,95914,95915],{"class":43,"line":176},[41,95916,95917],{"class":378},"       [4, 5, 6]])\n",[41,95919,95920],{"class":43,"line":184},[41,95921,95801],{"class":378},[15,95923,95925],{"id":95924},"_24-生态分布","2.4 生态分布",[241,95927,95929],{"id":95928},"_241-标准正态分布","2.4.1 标准正态分布",[20,95931,95932],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[20,95934,95935],{},[1603,95936],{"alt":37,"src":95937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[241,95939,95941],{"id":95940},"_242-常规正态分布","2.4.2 常规正态分布",[32,95943,95945],{"className":30481,"code":95944,"language":30483,"meta":37,"style":37},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[24,95946,95947,95952,95957,95962],{"__ignoreMap":37},[41,95948,95949],{"class":43,"line":44},[41,95950,95951],{"class":275},"random.normal(loc,scale,size)也可以生成正态分布\n",[41,95953,95954],{"class":43,"line":51},[41,95955,95956],{"class":47},"#loc:期望\n",[41,95958,95959],{"class":43,"line":62},[41,95960,95961],{"class":47},"#scale:方差\n",[41,95963,95964],{"class":43,"line":70},[41,95965,95966],{"class":47},"#size:用于确定是几维的数列\n",[20,95968,95969],{},[1603,95970],{"alt":37,"src":95971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[15,95973,95975],{"id":95974},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[20,95977,95978],{},"ndim:秩，维度个数",[20,95980,95981],{},"size:数组元素的个数",[20,95983,95984],{},"shape:数组的形状",[20,95986,95987],{},"dtype:数组元素的类型",[20,95989,95990],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[20,95992,95993],{},"他们都是属性，通过数组.属性的形式来确定",[20,95995,95996],{},"如果需要输出多个可以通过以下方式：",[32,95998,96000],{"className":30481,"code":95999,"language":30483,"meta":37,"style":37},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[24,96001,96002],{"__ignoreMap":37},[41,96003,96004,96006],{"class":43,"line":44},[41,96005,30518],{"class":58},[41,96007,96008],{"class":275},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[15,96010,96012],{"id":96011},"_26-其他方式创建数组","2.6 其他方式创建数组",[241,96014,96016],{"id":96015},"_261-zeros创建数组","2.6.1 zeros()创建数组",[20,96018,96019],{},"①创建一维数组",[32,96021,96023],{"className":30481,"code":96022,"language":30483,"meta":37,"style":37},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[24,96024,96025,96034,96038,96043,96048],{"__ignoreMap":37},[41,96026,96027,96030,96032],{"class":43,"line":44},[41,96028,96029],{"class":275},"np.zeros(",[41,96031,719],{"class":58},[41,96033,282],{"class":275},[41,96035,96036],{"class":43,"line":51},[41,96037,95801],{"class":378},[41,96039,96040],{"class":43,"line":62},[41,96041,96042],{"class":378},"输出结果：\n",[41,96044,96045],{"class":43,"line":70},[41,96046,96047],{"class":378},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[41,96049,96050],{"class":43,"line":76},[41,96051,95801],{"class":378},[20,96053,96054],{},"上方代码等价于：",[32,96056,96058],{"className":30481,"code":96057,"language":30483,"meta":37,"style":37},"np.zeros(shape=(10))#创建10个元素的0数组\n",[24,96059,96060],{"__ignoreMap":37},[41,96061,96062,96064,96067,96069,96071,96073,96075],{"class":43,"line":44},[41,96063,96029],{"class":275},[41,96065,96066],{"class":5354},"shape",[41,96068,321],{"class":271},[41,96070,276],{"class":275},[41,96072,719],{"class":58},[41,96074,82874],{"class":275},[41,96076,96077],{"class":47},"#创建10个元素的0数组\n",[20,96079,96080],{},"也可以指定类型",[32,96082,96084],{"className":30481,"code":96083,"language":30483,"meta":37,"style":37},"#指定类型\nnp.zeros(5,dtype=int)\n",[24,96085,96086,96091],{"__ignoreMap":37},[41,96087,96088],{"class":43,"line":44},[41,96089,96090],{"class":47},"#指定类型\n",[41,96092,96093,96095,96097,96099,96101,96103,96105],{"class":43,"line":51},[41,96094,96029],{"class":275},[41,96096,592],{"class":58},[41,96098,651],{"class":275},[41,96100,93603],{"class":5354},[41,96102,321],{"class":271},[41,96104,279],{"class":58},[41,96106,282],{"class":275},[20,96108,96109],{},"②创建二维数组",[32,96111,96113],{"className":30481,"code":96112,"language":30483,"meta":37,"style":37},"np.zeros((3,4),dtype=int)\n",[24,96114,96115],{"__ignoreMap":37},[41,96116,96117,96120,96122,96124,96126,96128,96130,96132,96134],{"class":43,"line":44},[41,96118,96119],{"class":275},"np.zeros((",[41,96121,345],{"class":58},[41,96123,651],{"class":275},[41,96125,566],{"class":58},[41,96127,42359],{"class":275},[41,96129,93603],{"class":5354},[41,96131,321],{"class":271},[41,96133,279],{"class":58},[41,96135,282],{"class":275},[20,96137,96138],{},"③创建三维数组",[32,96140,96142],{"className":30481,"code":96141,"language":30483,"meta":37,"style":37},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[24,96143,96144,96149],{"__ignoreMap":37},[41,96145,96146],{"class":43,"line":44},[41,96147,96148],{"class":47},"#创建三维数组\n",[41,96150,96151,96153,96155,96157,96159,96161,96163,96165,96167,96169,96171],{"class":43,"line":51},[41,96152,96119],{"class":275},[41,96154,345],{"class":58},[41,96156,651],{"class":275},[41,96158,566],{"class":58},[41,96160,651],{"class":275},[41,96162,592],{"class":58},[41,96164,42359],{"class":275},[41,96166,93603],{"class":5354},[41,96168,321],{"class":271},[41,96170,279],{"class":58},[41,96172,282],{"class":275},[20,96174,96175],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[32,96177,96179],{"className":30481,"code":96178,"language":30483,"meta":37,"style":37},"#使用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",[24,96180,96181,96186,96201,96206,96211,96233],{"__ignoreMap":37},[41,96182,96183],{"class":43,"line":44},[41,96184,96185],{"class":47},"#使用zeros_like将创建的一维数组变成全0的数组\n",[41,96187,96188,96190,96192,96194,96196,96198],{"class":43,"line":51},[41,96189,511],{"class":275},[41,96191,321],{"class":271},[41,96193,93105],{"class":275},[41,96195,566],{"class":58},[41,96197,702],{"class":275},[41,96199,96200],{"class":47},"#这个得到的结果：一维数组0，1，2，3\n",[41,96202,96203],{"class":43,"line":62},[41,96204,96205],{"class":275},"np.zeros_like(a)\n",[41,96207,96208],{"class":43,"line":70},[41,96209,96210],{"class":47},"#使用zeros_like将创建的二维数组变成全0的数组\n",[41,96212,96213,96215,96217,96219,96221,96223,96225,96227,96229,96231],{"class":43,"line":76},[41,96214,93409],{"class":275},[41,96216,321],{"class":271},[41,96218,95530],{"class":275},[41,96220,31599],{"class":5354},[41,96222,321],{"class":271},[41,96224,276],{"class":275},[41,96226,566],{"class":58},[41,96228,651],{"class":275},[41,96230,592],{"class":58},[41,96232,30600],{"class":275},[41,96234,96235],{"class":43,"line":83},[41,96236,96237],{"class":275},"np.zeros_like(aa)\n",[241,96239,96241],{"id":96240},"_262-ones创建数组","2.6.2 ones()创建数组",[20,96243,96244],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[241,96246,96248],{"id":96247},"_263-empty创建数组","2.6.3 empty()创建数组",[20,96250,96251],{},"①empty()用法",[32,96253,96255],{"className":30481,"code":96254,"language":30483,"meta":37,"style":37},"numpy.empty(shape,dtype=float,order='c')\n",[24,96256,96257],{"__ignoreMap":37},[41,96258,96259,96262,96264,96266,96268,96270,96272,96274,96276],{"class":43,"line":44},[41,96260,96261],{"class":275},"numpy.empty(shape,",[41,96263,93603],{"class":5354},[41,96265,321],{"class":271},[41,96267,315],{"class":58},[41,96269,651],{"class":275},[41,96271,95400],{"class":5354},[41,96273,321],{"class":271},[41,96275,76131],{"class":378},[41,96277,282],{"class":275},[20,96279,96280],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[20,96282,96283],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[20,96285,96286],{},[1603,96287],{"alt":37,"src":96288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[20,96290,96291],{},"②empty()用法",[32,96293,96295],{"className":30481,"code":96294,"language":30483,"meta":37,"style":37},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[24,96296,96297,96318,96330,96351,96356],{"__ignoreMap":37},[41,96298,96299,96301,96303,96306,96308,96310,96312,96314,96316],{"class":43,"line":44},[41,96300,1118],{"class":275},[41,96302,321],{"class":271},[41,96304,96305],{"class":275},"np.empty(",[41,96307,719],{"class":58},[41,96309,651],{"class":275},[41,96311,93603],{"class":5354},[41,96313,321],{"class":271},[41,96315,279],{"class":58},[41,96317,282],{"class":275},[41,96319,96320,96322,96324,96326,96328],{"class":43,"line":51},[41,96321,1093],{"class":275},[41,96323,321],{"class":271},[41,96325,93105],{"class":275},[41,96327,592],{"class":58},[41,96329,282],{"class":275},[41,96331,96332,96335,96337,96340,96342,96344,96347,96349],{"class":43,"line":62},[41,96333,96334],{"class":275},"np.add(",[41,96336,351],{"class":58},[41,96338,96339],{"class":275},",x,",[41,96341,93157],{"class":5354},[41,96343,321],{"class":271},[41,96345,96346],{"class":275},"y[:",[41,96348,592],{"class":58},[41,96350,4795],{"class":275},[41,96352,96353],{"class":43,"line":70},[41,96354,96355],{"class":47},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[41,96357,96358],{"class":43,"line":76},[41,96359,96360],{"class":275},"y\n",[20,96362,11652],{},[20,96364,96365],{},[1603,96366],{"alt":37,"src":96367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[32,96369,96371],{"className":30481,"code":96370,"language":30483,"meta":37,"style":37},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[24,96372,96373,96389,96409,96424],{"__ignoreMap":37},[41,96374,96375,96377,96379,96381,96383,96385,96387],{"class":43,"line":44},[41,96376,1093],{"class":275},[41,96378,321],{"class":271},[41,96380,93105],{"class":275},[41,96382,26],{"class":58},[41,96384,651],{"class":275},[41,96386,617],{"class":58},[41,96388,282],{"class":275},[41,96390,96391,96393,96395,96397,96399,96401,96403,96405,96407],{"class":43,"line":51},[41,96392,1118],{"class":275},[41,96394,321],{"class":271},[41,96396,96305],{"class":275},[41,96398,592],{"class":58},[41,96400,651],{"class":275},[41,96402,93603],{"class":5354},[41,96404,321],{"class":271},[41,96406,279],{"class":58},[41,96408,282],{"class":275},[41,96410,96411,96414,96416,96418,96420,96422],{"class":43,"line":62},[41,96412,96413],{"class":275},"np.add(x,",[41,96415,351],{"class":58},[41,96417,651],{"class":275},[41,96419,93157],{"class":5354},[41,96421,321],{"class":271},[41,96423,93552],{"class":275},[41,96425,96426],{"class":43,"line":70},[41,96427,96428],{"class":47},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[20,96430,96431],{},"③empty_like()",[20,96433,96434],{},[423,96435,96436,96437,96442],{},"创建一个",[423,96438,96439],{},[423,96440,96441],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[20,96444,96445,96448],{},[24,96446,96447],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[20,96450,96451],{},[1603,96452],{"alt":37,"src":96453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[241,96455,96457],{"id":96456},"_264-用法","2.6.4 ？？用法",[20,96459,96460],{},"当想查看一个函数的参数时，可以通过？？来实现",[32,96462,96464],{"className":30481,"code":96463,"language":30483,"meta":37,"style":37},"np.full??\n",[24,96465,96466],{"__ignoreMap":37},[41,96467,96468,96471],{"class":43,"line":44},[41,96469,96470],{"class":275},"np.full",[41,96472,96473],{"class":77506},"??\n",[241,96475,96477],{"id":96476},"_265-full创建数组","2.6.5 full()创建数组",[32,96479,96481],{"className":30481,"code":96480,"language":30483,"meta":37,"style":37},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[24,96482,96483,96488],{"__ignoreMap":37},[41,96484,96485],{"class":43,"line":44},[41,96486,96487],{"class":275},"full(shape,fill_value)\n",[41,96489,96490],{"class":43,"line":51},[41,96491,96492],{"class":275},"创建全为某个指定值的数组\n",[20,96494,94633],{},[32,96496,96498],{"className":30481,"code":96497,"language":30483,"meta":37,"style":37},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[24,96499,96500,96505],{"__ignoreMap":37},[41,96501,96502],{"class":43,"line":44},[41,96503,96504],{"class":47},"#创建一个一维数组,以20进行填充\n",[41,96506,96507,96510,96512,96514,96516],{"class":43,"line":51},[41,96508,96509],{"class":275},"np.full(",[41,96511,719],{"class":58},[41,96513,651],{"class":275},[41,96515,973],{"class":58},[41,96517,282],{"class":275},[20,96519,93394],{},[32,96521,96523],{"className":30481,"code":96522,"language":30483,"meta":37,"style":37},"#创建二维数组\nnp.full((3,5),11)\n",[24,96524,96525,96529],{"__ignoreMap":37},[41,96526,96527],{"class":43,"line":44},[41,96528,94050],{"class":47},[41,96530,96531,96534,96536,96538,96540,96542,96544],{"class":43,"line":51},[41,96532,96533],{"class":275},"np.full((",[41,96535,345],{"class":58},[41,96537,651],{"class":275},[41,96539,592],{"class":58},[41,96541,42359],{"class":275},[41,96543,745],{"class":58},[41,96545,282],{"class":275},[20,96547,96548],{},"③full_like用法",[20,96550,96551],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[20,96553,96554],{},"这里是指定填充而已",[32,96556,96558],{"className":30481,"code":96557,"language":30483,"meta":37,"style":37},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[24,96559,96560,96565,96589,96594],{"__ignoreMap":37},[41,96561,96562],{"class":43,"line":44},[41,96563,96564],{"class":47},"#创建一个指定形状数组\n",[41,96566,96567,96569,96571,96573,96575,96577,96579,96581,96583,96585,96587],{"class":43,"line":51},[41,96568,511],{"class":275},[41,96570,321],{"class":271},[41,96572,93105],{"class":275},[41,96574,26],{"class":58},[41,96576,651],{"class":275},[41,96578,598],{"class":58},[41,96580,93110],{"class":275},[41,96582,566],{"class":58},[41,96584,651],{"class":275},[41,96586,693],{"class":58},[41,96588,282],{"class":275},[41,96590,96591],{"class":43,"line":62},[41,96592,96593],{"class":47},"#进行指定填充\n",[41,96595,96596,96599,96601],{"class":43,"line":70},[41,96597,96598],{"class":275},"np.full_like(a,",[41,96600,719],{"class":58},[41,96602,282],{"class":275},[20,96604,11652],{},[20,96606,96607],{},[1603,96608],{"alt":37,"src":96609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[241,96611,96613],{"id":96612},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22136,96615,96617],{"id":96616},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[32,96619,96621],{"className":30481,"code":96620,"language":30483,"meta":37,"style":37},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[24,96622,96623,96640],{"__ignoreMap":37},[41,96624,96625,96628,96630,96632,96634,96636,96638],{"class":43,"line":44},[41,96626,96627],{"class":275},"np.eye(",[41,96629,566],{"class":58},[41,96631,651],{"class":275},[41,96633,93603],{"class":5354},[41,96635,321],{"class":271},[41,96637,279],{"class":58},[41,96639,282],{"class":275},[41,96641,96642],{"class":43,"line":51},[41,96643,96644],{"class":47},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22136,96646,96648],{"id":96647},"_2662-法2identity","2.6.6.2 法2：identity()",[32,96650,96652],{"className":30481,"code":96651,"language":30483,"meta":37,"style":37},"#identity()\nnp.identity(5,dtype=int)\n",[24,96653,96654,96659],{"__ignoreMap":37},[41,96655,96656],{"class":43,"line":44},[41,96657,96658],{"class":47},"#identity()\n",[41,96660,96661,96664,96666,96668,96670,96672,96674],{"class":43,"line":51},[41,96662,96663],{"class":275},"np.identity(",[41,96665,592],{"class":58},[41,96667,651],{"class":275},[41,96669,93603],{"class":5354},[41,96671,321],{"class":271},[41,96673,279],{"class":58},[41,96675,282],{"class":275},[20,96677,96678],{},"两个函数是有区别的",[20,96680,96681],{},[1603,96682],{"alt":37,"src":96683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[20,96685,96686],{},[1603,96687],{"alt":37,"src":96688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[32,96690,96692],{"className":30481,"code":96691,"language":30483,"meta":37,"style":37},"# 创建一个 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",[24,96693,96694,96699,96711,96716,96721,96726,96731,96735,96740,96760,96764,96769,96774],{"__ignoreMap":37},[41,96695,96696],{"class":43,"line":44},[41,96697,96698],{"class":47},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[41,96700,96701,96703,96705,96707,96709],{"class":43,"line":51},[41,96702,96627],{"class":275},[41,96704,345],{"class":58},[41,96706,12573],{"class":275},[41,96708,566],{"class":58},[41,96710,282],{"class":275},[41,96712,96713],{"class":43,"line":62},[41,96714,96715],{"class":47},"# 输出:\n",[41,96717,96718],{"class":43,"line":70},[41,96719,96720],{"class":47},"# [[1. 0. 0. 0.]\n",[41,96722,96723],{"class":43,"line":76},[41,96724,96725],{"class":47},"#  [0. 1. 0. 0.]\n",[41,96727,96728],{"class":43,"line":83},[41,96729,96730],{"class":47},"#  [0. 0. 1. 0.]]\n",[41,96732,96733],{"class":43,"line":89},[41,96734,80],{"emptyLinePlaceholder":79},[41,96736,96737],{"class":43,"line":96},[41,96738,96739],{"class":47},"# 对角线向上偏移1\n",[41,96741,96742,96744,96746,96748,96750,96752,96754,96756,96758],{"class":43,"line":104},[41,96743,96627],{"class":275},[41,96745,345],{"class":58},[41,96747,12573],{"class":275},[41,96749,566],{"class":58},[41,96751,12573],{"class":275},[41,96753,766],{"class":5354},[41,96755,321],{"class":271},[41,96757,26],{"class":58},[41,96759,282],{"class":275},[41,96761,96762],{"class":43,"line":176},[41,96763,96715],{"class":47},[41,96765,96766],{"class":43,"line":184},[41,96767,96768],{"class":47},"# [[0. 1. 0. 0.]\n",[41,96770,96771],{"class":43,"line":1757},[41,96772,96773],{"class":47},"#  [0. 0. 1. 0.]\n",[41,96775,96776],{"class":43,"line":1763},[41,96777,96778],{"class":47},"#  [0. 0. 0. 1.]]\n",[241,96780,96782],{"id":96781},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[32,96784,96786],{"className":30481,"code":96785,"language":30483,"meta":37,"style":37},"#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",[24,96787,96788,96793,96797,96802,96807,96812,96817,96822,96827,96832,96837],{"__ignoreMap":37},[41,96789,96790],{"class":43,"line":44},[41,96791,96792],{"class":47},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[41,96794,96795],{"class":43,"line":51},[41,96796,95801],{"class":378},[41,96798,96799],{"class":43,"line":62},[41,96800,96801],{"class":378},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[41,96803,96804],{"class":43,"line":70},[41,96805,96806],{"class":378},"参数介绍：\n",[41,96808,96809],{"class":43,"line":76},[41,96810,96811],{"class":378},"start：序列的起始值\n",[41,96813,96814],{"class":43,"line":83},[41,96815,96816],{"class":378},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[41,96818,96819],{"class":43,"line":89},[41,96820,96821],{"class":378},"num：要生长的等步长的样本数量，默认为50\n",[41,96823,96824],{"class":43,"line":96},[41,96825,96826],{"class":378},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[41,96828,96829],{"class":43,"line":104},[41,96830,96831],{"class":378},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[41,96833,96834],{"class":43,"line":176},[41,96835,96836],{"class":378},"dtype：ndarry的数据类型\n",[41,96838,96839],{"class":43,"line":184},[41,96840,95801],{"class":378},[20,96842,96843],{},[1603,96844],{"alt":37,"src":96845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[20,96847,96848],{},"这里num=是可以省略的",[20,96850,96851],{},"也就是下方两行代码结果是一模一样的",[32,96853,96855],{"className":30481,"code":96854,"language":30483,"meta":37,"style":37},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[24,96856,96857,96874],{"__ignoreMap":37},[41,96858,96859,96862,96864,96866,96868,96870,96872],{"class":43,"line":44},[41,96860,96861],{"class":275},"np.linspace(",[41,96863,26],{"class":58},[41,96865,651],{"class":275},[41,96867,592],{"class":58},[41,96869,651],{"class":275},[41,96871,592],{"class":58},[41,96873,282],{"class":275},[41,96875,96876,96878,96880,96882,96884,96886,96888,96890,96892],{"class":43,"line":51},[41,96877,96861],{"class":275},[41,96879,26],{"class":58},[41,96881,651],{"class":275},[41,96883,592],{"class":58},[41,96885,651],{"class":275},[41,96887,1805],{"class":5354},[41,96889,321],{"class":271},[41,96891,592],{"class":58},[41,96893,282],{"class":275},[241,96895,96897],{"id":96896},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[32,96899,96901],{"className":30481,"code":96900,"language":30483,"meta":37,"style":37},"#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",[24,96902,96903,96908,96912,96917,96922,96927,96932,96936,96941,96946,96950],{"__ignoreMap":37},[41,96904,96905],{"class":43,"line":44},[41,96906,96907],{"class":47},"#logspace函数用于创建一个等比数列，格式如下：\n",[41,96909,96910],{"class":43,"line":51},[41,96911,95801],{"class":378},[41,96913,96914],{"class":43,"line":62},[41,96915,96916],{"class":378},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[41,96918,96919],{"class":43,"line":70},[41,96920,96921],{"class":378},"参数为：\n",[41,96923,96924],{"class":43,"line":76},[41,96925,96926],{"class":378},"start:序列的起始位置为：base**start\n",[41,96928,96929],{"class":43,"line":83},[41,96930,96931],{"class":378},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[41,96933,96934],{"class":43,"line":89},[41,96935,96821],{"class":378},[41,96937,96938],{"class":43,"line":96},[41,96939,96940],{"class":378},"endpoint：是否包含 stop 这个值，默认是 True\n",[41,96942,96943],{"class":43,"line":104},[41,96944,96945],{"class":378},"base：对数的底数，默认是 10（常见对数）\n",[41,96947,96948],{"class":43,"line":176},[41,96949,96836],{"class":378},[41,96951,96952],{"class":43,"line":184},[41,96953,95801],{"class":378},[20,96955,96956],{},[1603,96957],{"alt":37,"src":96958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[20,96960,96961],{},"logspace()函数中的num参数也是可以不写num=的",[20,96963,96964],{},"endpoint是不可以省略的",[189,96966,96967],{},"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":37,"searchDepth":51,"depth":51,"links":96969},[96970,96974,96979,96983,96987,96988],{"id":95359,"depth":51,"text":95360,"children":96971},[96972,96973],{"id":95363,"depth":62,"text":95364},{"id":95436,"depth":62,"text":95437},{"id":95468,"depth":51,"text":95469,"children":96975},[96976,96977,96978],{"id":95472,"depth":62,"text":95473},{"id":95654,"depth":62,"text":95655},{"id":95732,"depth":62,"text":95733},{"id":95767,"depth":51,"text":95768,"children":96980},[96981,96982],{"id":95771,"depth":62,"text":95772},{"id":95828,"depth":62,"text":95829},{"id":95924,"depth":51,"text":95925,"children":96984},[96985,96986],{"id":95928,"depth":62,"text":95929},{"id":95940,"depth":62,"text":95941},{"id":95974,"depth":51,"text":95975},{"id":96011,"depth":51,"text":96012,"children":96989},[96990,96991,96992,96993,96994,96995,96996,96997],{"id":96015,"depth":62,"text":96016},{"id":96240,"depth":62,"text":96241},{"id":96247,"depth":62,"text":96248},{"id":96456,"depth":62,"text":96457},{"id":96476,"depth":62,"text":96477},{"id":96612,"depth":62,"text":96613},{"id":96781,"depth":62,"text":96782},{"id":96896,"depth":62,"text":96897},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95351,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97004,"title":97005,"body":97006,"description":196,"extension":197,"meta":97099,"navigation":79,"path":97100,"seo":97101,"stem":97102,"__hash__":97103},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97007,"toc":97097},[97008,97011,97014,97017,97020,97023,97026,97029,97032,97035,97038,97041,97043,97046,97049,97054,97057,97060,97094],[10,97009,97005],{"id":97010},"_20魔法命令mprun",[20,97012,97013],{},"逐行分析数据内存的使用情况",[20,97015,97016],{},"语法格式：",[20,97018,97019],{},"%mprun -f 模块名.函数名 模块名.函数名()",[20,97021,97022],{},"分析结果列如下：",[20,97024,97025],{},"Line行号",[20,97027,97028],{},"Mem usage内存使用大小",[20,97030,97031],{},"increment内存增量",[20,97033,97034],{},"Line content代码内容",[20,97036,97037],{},"补充说明：",[20,97039,97040],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[20,97042,95306],{},[20,97044,97045],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[20,97047,97048],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[20,97050,97051],{},[1603,97052],{"alt":37,"src":97053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[20,97055,97056],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[20,97058,97059],{},"这时候需要重新加载模块",[32,97061,97063],{"className":30481,"code":97062,"language":30483,"meta":37,"style":37},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[24,97064,97065,97070,97077,97082],{"__ignoreMap":37},[41,97066,97067],{"class":43,"line":44},[41,97068,97069],{"class":47},"#重新加载模块\n",[41,97071,97072,97074],{"class":43,"line":51},[41,97073,30495],{"class":271},[41,97075,97076],{"class":275}," importlib\n",[41,97078,97079],{"class":43,"line":62},[41,97080,97081],{"class":275},"importlib.reload(mprun_test)\n",[41,97083,97084,97086,97089,97091],{"class":43,"line":70},[41,97085,601],{"class":271},[41,97087,97088],{"class":275},"mprun ",[41,97090,805],{"class":271},[41,97092,97093],{"class":275},"f mprun_test.fun_test mprun_test.fun_test()\n",[189,97095,97096],{},"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":37,"searchDepth":51,"depth":51,"links":97098},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97005,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97105,"title":97106,"body":97107,"description":196,"extension":197,"meta":97124,"navigation":79,"path":97125,"seo":97126,"stem":97127,"__hash__":97128},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97108,"toc":97122},[97109,97112,97117],[10,97110,97106],{"id":97111},"_3一维数组的索引和切片",[20,97113,97114],{},[1603,97115],{"alt":37,"src":97116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[20,97118,97119],{},[1603,97120],{"alt":37,"src":97121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":37,"searchDepth":51,"depth":51,"links":97123},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97106,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97130,"title":97131,"body":97132,"description":196,"extension":197,"meta":97615,"navigation":79,"path":97616,"seo":97617,"stem":97618,"__hash__":97619},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97133,"toc":97613},[97134,97137,97140,97145,97178,97181,97219,97222,97256,97259,97364,97367,97404,97407,97508,97511,97562,97565,97607,97610],[10,97135,97131],{"id":97136},"_4二维数组的索引与切片",[20,97138,97139],{},"①获取指定单个元素",[20,97141,97142],{},[1603,97143],{"alt":37,"src":97144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[32,97146,97148],{"className":30481,"code":97147,"language":30483,"meta":37,"style":37},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[24,97149,97150,97155,97160,97165],{"__ignoreMap":37},[41,97151,97152],{"class":43,"line":44},[41,97153,97154],{"class":47},"#获取元素9\n",[41,97156,97157],{"class":43,"line":51},[41,97158,97159],{"class":47},"#先获取所在行，再获取所在列\n",[41,97161,97162],{"class":43,"line":62},[41,97163,97164],{"class":47},"#数组[行索引号，列索引号]\n",[41,97166,97167,97170,97172,97174,97176],{"class":43,"line":70},[41,97168,97169],{"class":275},"a[",[41,97171,26],{"class":58},[41,97173,651],{"class":275},[41,97175,351],{"class":58},[41,97177,33349],{"class":275},[20,97179,97180],{},"②获取整行元素",[32,97182,97184],{"className":30481,"code":97183,"language":30483,"meta":37,"style":37},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[24,97185,97186,97191,97196,97204,97209],{"__ignoreMap":37},[41,97187,97188],{"class":43,"line":44},[41,97189,97190],{"class":47},"#获取整行 数组[行索引号]\n",[41,97192,97193],{"class":43,"line":51},[41,97194,97195],{"class":47},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[41,97197,97198,97200,97202],{"class":43,"line":62},[41,97199,97169],{"class":275},[41,97201,351],{"class":58},[41,97203,33349],{"class":275},[41,97205,97206],{"class":43,"line":70},[41,97207,97208],{"class":47},"#也可以负索引获取一行\n",[41,97210,97211,97213,97215,97217],{"class":43,"line":76},[41,97212,97169],{"class":275},[41,97214,805],{"class":271},[41,97216,26],{"class":58},[41,97218,33349],{"class":275},[20,97220,97221],{},"③获取整列元素",[32,97223,97225],{"className":30481,"code":97224,"language":30483,"meta":37,"style":37},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[24,97226,97227,97232,97241,97246],{"__ignoreMap":37},[41,97228,97229],{"class":43,"line":44},[41,97230,97231],{"class":47},"#获取整列 数组名[:,列索引]\n",[41,97233,97234,97237,97239],{"class":43,"line":51},[41,97235,97236],{"class":275},"a[:,",[41,97238,351],{"class":58},[41,97240,33349],{"class":275},[41,97242,97243],{"class":43,"line":62},[41,97244,97245],{"class":47},"#也可以负索引获取一列\n",[41,97247,97248,97250,97252,97254],{"class":43,"line":70},[41,97249,97236],{"class":275},[41,97251,805],{"class":271},[41,97253,26],{"class":58},[41,97255,33349],{"class":275},[20,97257,97258],{},"④部分行部分列的元素",[32,97260,97262],{"className":30481,"code":97261,"language":30483,"meta":37,"style":37},"#部分行部分列 数组名[行切片，列切片]\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",[24,97263,97264,97269,97279,97283,97287,97292,97297,97301,97313,97317,97321,97326,97331,97336,97341,97345,97350],{"__ignoreMap":37},[41,97265,97266],{"class":43,"line":44},[41,97267,97268],{"class":47},"#部分行部分列 数组名[行切片，列切片]\n",[41,97270,97271,97274,97276],{"class":43,"line":51},[41,97272,97273],{"class":275},"a[:",[41,97275,351],{"class":58},[41,97277,97278],{"class":275},",:]\n",[41,97280,97281],{"class":43,"line":62},[41,97282,93667],{"class":47},[41,97284,97285],{"class":43,"line":70},[41,97286,94031],{"class":378},[41,97288,97289],{"class":43,"line":76},[41,97290,97291],{"class":378},"array([[ 1,  2,  3,  4,  5,  6],\n",[41,97293,97294],{"class":43,"line":83},[41,97295,97296],{"class":378},"       [ 7,  8,  9, 10, 11, 12]])\n",[41,97298,97299],{"class":43,"line":89},[41,97300,94031],{"class":378},[41,97302,97303,97305,97307,97309,97311],{"class":43,"line":96},[41,97304,97236],{"class":275},[41,97306,26],{"class":58},[41,97308,1132],{"class":275},[41,97310,566],{"class":58},[41,97312,33349],{"class":275},[41,97314,97315],{"class":43,"line":104},[41,97316,93667],{"class":47},[41,97318,97319],{"class":43,"line":176},[41,97320,94031],{"class":378},[41,97322,97323],{"class":43,"line":184},[41,97324,97325],{"class":378},"array([[ 2,  3,  4],\n",[41,97327,97328],{"class":43,"line":1757},[41,97329,97330],{"class":378},"       [ 8,  9, 10],\n",[41,97332,97333],{"class":43,"line":1763},[41,97334,97335],{"class":378},"       [14, 15, 16],\n",[41,97337,97338],{"class":43,"line":1768},[41,97339,97340],{"class":378},"       [20, 21, 22]])\n",[41,97342,97343],{"class":43,"line":1782},[41,97344,94031],{"class":378},[41,97346,97347],{"class":43,"line":1787},[41,97348,97349],{"class":47},"#对列行同时进行切片，使用了step参数\n",[41,97351,97352,97355,97357,97360,97362],{"class":43,"line":1793},[41,97353,97354],{"class":275},"a[::",[41,97356,351],{"class":58},[41,97358,97359],{"class":275},",::",[41,97361,351],{"class":58},[41,97363,33349],{"class":275},[20,97365,97366],{},"⑤同时获取两个元素",[32,97368,97370],{"className":30481,"code":97369,"language":30483,"meta":37,"style":37},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[24,97371,97372,97377,97382],{"__ignoreMap":37},[41,97373,97374],{"class":43,"line":44},[41,97375,97376],{"class":47},"#同时获取第三行第二列，第四行第一列\n",[41,97378,97379],{"class":43,"line":51},[41,97380,97381],{"class":47},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[41,97383,97384,97387,97389,97391,97393,97395,97397,97399,97401],{"class":43,"line":62},[41,97385,97386],{"class":275},"a[(",[41,97388,351],{"class":58},[41,97390,651],{"class":275},[41,97392,345],{"class":58},[41,97394,42350],{"class":275},[41,97396,26],{"class":58},[41,97398,651],{"class":275},[41,97400,465],{"class":58},[41,97402,97403],{"class":275},")]\n",[20,97405,97406],{},"⑥切片，对行进行反向获取",[32,97408,97410],{"className":30481,"code":97409,"language":30483,"meta":37,"style":37},"#切片 对所有行进行反向获取\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",[24,97411,97412,97417,97427,97431,97435,97440,97445,97450,97455,97459,97464,97480,97484,97489,97494,97499,97504],{"__ignoreMap":37},[41,97413,97414],{"class":43,"line":44},[41,97415,97416],{"class":47},"#切片 对所有行进行反向获取\n",[41,97418,97419,97421,97423,97425],{"class":43,"line":51},[41,97420,97354],{"class":275},[41,97422,805],{"class":271},[41,97424,26],{"class":58},[41,97426,33349],{"class":275},[41,97428,97429],{"class":43,"line":62},[41,97430,93667],{"class":47},[41,97432,97433],{"class":43,"line":70},[41,97434,94031],{"class":378},[41,97436,97437],{"class":43,"line":76},[41,97438,97439],{"class":378},"array([[19, 20, 21, 22, 23, 24],\n",[41,97441,97442],{"class":43,"line":83},[41,97443,97444],{"class":378},"       [13, 14, 15, 16, 17, 18],\n",[41,97446,97447],{"class":43,"line":89},[41,97448,97449],{"class":378},"       [ 7,  8,  9, 10, 11, 12],\n",[41,97451,97452],{"class":43,"line":96},[41,97453,97454],{"class":378},"       [ 1,  2,  3,  4,  5,  6]])\n",[41,97456,97457],{"class":43,"line":104},[41,97458,94031],{"class":378},[41,97460,97461],{"class":43,"line":176},[41,97462,97463],{"class":47},"#对行列都进行反向切片获取\n",[41,97465,97466,97468,97470,97472,97474,97476,97478],{"class":43,"line":184},[41,97467,97354],{"class":275},[41,97469,805],{"class":271},[41,97471,26],{"class":58},[41,97473,97359],{"class":275},[41,97475,805],{"class":271},[41,97477,26],{"class":58},[41,97479,33349],{"class":275},[41,97481,97482],{"class":43,"line":1757},[41,97483,94031],{"class":378},[41,97485,97486],{"class":43,"line":1763},[41,97487,97488],{"class":378},"array([[24, 23, 22, 21, 20, 19],\n",[41,97490,97491],{"class":43,"line":1768},[41,97492,97493],{"class":378},"       [18, 17, 16, 15, 14, 13],\n",[41,97495,97496],{"class":43,"line":1782},[41,97497,97498],{"class":378},"       [12, 11, 10,  9,  8,  7],\n",[41,97500,97501],{"class":43,"line":1787},[41,97502,97503],{"class":378},"       [ 6,  5,  4,  3,  2,  1]])\n",[41,97505,97506],{"class":43,"line":1793},[41,97507,94031],{"class":378},[20,97509,97510],{},"⑦修改元素",[32,97512,97514],{"className":30481,"code":97513,"language":30483,"meta":37,"style":37},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[24,97515,97516,97521,97539,97544],{"__ignoreMap":37},[41,97517,97518],{"class":43,"line":44},[41,97519,97520],{"class":47},"#获取前两行和前两列\n",[41,97522,97523,97526,97528,97530,97532,97535,97537],{"class":43,"line":51},[41,97524,97525],{"class":275},"sub_a",[41,97527,321],{"class":271},[41,97529,97273],{"class":275},[41,97531,351],{"class":58},[41,97533,97534],{"class":275},",:",[41,97536,351],{"class":58},[41,97538,33349],{"class":275},[41,97540,97541],{"class":43,"line":62},[41,97542,97543],{"class":47},"#修改sub_a第一个元素的值\n",[41,97545,97546,97549,97551,97553,97555,97557,97559],{"class":43,"line":70},[41,97547,97548],{"class":275},"sub_a[",[41,97550,465],{"class":58},[41,97552,651],{"class":275},[41,97554,465],{"class":58},[41,97556,1213],{"class":275},[41,97558,321],{"class":271},[41,97560,97561],{"class":58},"100\n",[20,97563,97564],{},"⑧数组复制copy()",[32,97566,97568],{"className":30481,"code":97567,"language":30483,"meta":37,"style":37},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[24,97569,97570,97575,97585,97590],{"__ignoreMap":37},[41,97571,97572],{"class":43,"line":44},[41,97573,97574],{"class":47},"#数组复制\n",[41,97576,97577,97580,97582],{"class":43,"line":51},[41,97578,97579],{"class":275},"copy_a",[41,97581,321],{"class":271},[41,97583,97584],{"class":275},"np.copy(sub_a)\n",[41,97586,97587],{"class":43,"line":62},[41,97588,97589],{"class":47},"#修改copy_a后不影响原数组\n",[41,97591,97592,97595,97597,97599,97601,97603,97605],{"class":43,"line":70},[41,97593,97594],{"class":275},"copy_a[",[41,97596,465],{"class":58},[41,97598,651],{"class":275},[41,97600,465],{"class":58},[41,97602,1213],{"class":275},[41,97604,321],{"class":271},[41,97606,97561],{"class":58},[20,97608,97609],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[189,97611,97612],{},"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":37,"searchDepth":51,"depth":51,"links":97614},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97131,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97621,"title":97622,"body":97623,"description":196,"extension":197,"meta":98115,"navigation":79,"path":98116,"seo":98117,"stem":98118,"__hash__":98119},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97624,"toc":98107},[97625,97628,97632,97635,97638,97691,97694,97719,97722,97741,97761,97764,97780,97784,97830,97834,97876,97880,97883,97886,97889,97892,97895,97957,98017,98021,98024,98081,98085,98090,98099,98104],[10,97626,97622],{"id":97627},"_5改变数组的维度",[15,97629,97631],{"id":97630},"_51-使用reshape","5.1 使用reshape()",[20,97633,97634],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[20,97636,97637],{},"①一维数组转换为二维数组",[32,97639,97641],{"className":30481,"code":97640,"language":30483,"meta":37,"style":37},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[24,97642,97643,97659,97664,97669,97674],{"__ignoreMap":37},[41,97644,97645,97647,97649,97651,97653,97655,97657],{"class":43,"line":44},[41,97646,511],{"class":275},[41,97648,321],{"class":271},[41,97650,93105],{"class":275},[41,97652,26],{"class":58},[41,97654,651],{"class":275},[41,97656,796],{"class":58},[41,97658,282],{"class":275},[41,97660,97661],{"class":43,"line":51},[41,97662,97663],{"class":47},"#将一维数组进行转换\n",[41,97665,97666],{"class":43,"line":62},[41,97667,97668],{"class":47},"#注意点：元素个数不可以变\n",[41,97670,97671],{"class":43,"line":70},[41,97672,97673],{"class":47},"#转换维度要保持一致，不一致就异常！！！\n",[41,97675,97676,97678,97680,97683,97685,97687,97689],{"class":43,"line":76},[41,97677,93409],{"class":275},[41,97679,321],{"class":271},[41,97681,97682],{"class":275},"a.reshape(",[41,97684,351],{"class":58},[41,97686,651],{"class":275},[41,97688,617],{"class":58},[41,97690,282],{"class":275},[20,97692,97693],{},"②一维数组转换为三维数组",[32,97695,97697],{"className":30481,"code":97696,"language":30483,"meta":37,"style":37},"aaa=a.reshape(2,3,2)\n",[24,97698,97699],{"__ignoreMap":37},[41,97700,97701,97703,97705,97707,97709,97711,97713,97715,97717],{"class":43,"line":44},[41,97702,95624],{"class":275},[41,97704,321],{"class":271},[41,97706,97682],{"class":275},[41,97708,351],{"class":58},[41,97710,651],{"class":275},[41,97712,345],{"class":58},[41,97714,651],{"class":275},[41,97716,351],{"class":58},[41,97718,282],{"class":275},[20,97720,97721],{},"③二维数组转化为一维数组",[32,97723,97725],{"className":30481,"code":97724,"language":30483,"meta":37,"style":37},"#知道元素个数：\naa.reshape(12)\n",[24,97726,97727,97732],{"__ignoreMap":37},[41,97728,97729],{"class":43,"line":44},[41,97730,97731],{"class":47},"#知道元素个数：\n",[41,97733,97734,97737,97739],{"class":43,"line":51},[41,97735,97736],{"class":275},"aa.reshape(",[41,97738,771],{"class":58},[41,97740,282],{"class":275},[32,97742,97744],{"className":30481,"code":97743,"language":30483,"meta":37,"style":37},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[24,97745,97746,97751],{"__ignoreMap":37},[41,97747,97748],{"class":43,"line":44},[41,97749,97750],{"class":47},"#不知道元素个数，参数传递-1\n",[41,97752,97753,97755,97757,97759],{"class":43,"line":51},[41,97754,97736],{"class":275},[41,97756,805],{"class":271},[41,97758,26],{"class":58},[41,97760,282],{"class":275},[20,97762,97763],{},"④三维数组转换为一维数组",[32,97765,97767],{"className":30481,"code":97766,"language":30483,"meta":37,"style":37},"aaa.reshape(-1)\n",[24,97768,97769],{"__ignoreMap":37},[41,97770,97771,97774,97776,97778],{"class":43,"line":44},[41,97772,97773],{"class":275},"aaa.reshape(",[41,97775,805],{"class":271},[41,97777,26],{"class":58},[41,97779,282],{"class":275},[15,97781,97783],{"id":97782},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[32,97785,97787],{"className":30481,"code":97786,"language":30483,"meta":37,"style":37},"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",[24,97788,97789,97816,97821,97825],{"__ignoreMap":37},[41,97790,97791,97793,97795,97797,97799,97801,97803,97805,97807,97809,97811,97813],{"class":43,"line":44},[41,97792,93409],{"class":275},[41,97794,321],{"class":271},[41,97796,93105],{"class":275},[41,97798,26],{"class":58},[41,97800,651],{"class":275},[41,97802,796],{"class":58},[41,97804,93110],{"class":275},[41,97806,351],{"class":58},[41,97808,651],{"class":275},[41,97810,617],{"class":58},[41,97812,702],{"class":275},[41,97814,97815],{"class":47},"#转换为2行6列的数组\n",[41,97817,97818],{"class":43,"line":51},[41,97819,97820],{"class":275},"aa.revel()\n",[41,97822,97823],{"class":43,"line":62},[41,97824,93667],{"class":47},[41,97826,97827],{"class":43,"line":70},[41,97828,97829],{"class":47},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[15,97831,97833],{"id":97832},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[32,97835,97837],{"className":30481,"code":97836,"language":30483,"meta":37,"style":37},"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",[24,97838,97839,97863,97868,97872],{"__ignoreMap":37},[41,97840,97841,97843,97845,97847,97849,97851,97853,97855,97857,97859,97861],{"class":43,"line":44},[41,97842,93409],{"class":275},[41,97844,321],{"class":271},[41,97846,93105],{"class":275},[41,97848,26],{"class":58},[41,97850,651],{"class":275},[41,97852,796],{"class":58},[41,97854,93110],{"class":275},[41,97856,351],{"class":58},[41,97858,651],{"class":275},[41,97860,617],{"class":58},[41,97862,282],{"class":275},[41,97864,97865],{"class":43,"line":51},[41,97866,97867],{"class":275},"aa.flatten()\n",[41,97869,97870],{"class":43,"line":62},[41,97871,93667],{"class":47},[41,97873,97874],{"class":43,"line":70},[41,97875,97829],{"class":47},[15,97877,97879],{"id":97878},"_54-使用resize","5.4 使用resize()",[20,97881,97882],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[20,97884,97885],{},"通过resize方法可以改变数组的维度",[20,97887,97888],{},"#resize修改数组维度",[20,97890,97891],{},"#以元组的形式指定形状",[20,97893,97894],{},"#改变的是原数组",[32,97896,97898],{"className":30481,"code":97897,"language":30483,"meta":37,"style":37},"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",[24,97899,97900,97916,97936,97949,97953],{"__ignoreMap":37},[41,97901,97902,97904,97906,97908,97910,97912,97914],{"class":43,"line":44},[41,97903,511],{"class":275},[41,97905,321],{"class":271},[41,97907,93105],{"class":275},[41,97909,26],{"class":58},[41,97911,651],{"class":275},[41,97913,796],{"class":58},[41,97915,282],{"class":275},[41,97917,97918,97921,97923,97925,97927,97929,97931,97933],{"class":43,"line":51},[41,97919,97920],{"class":275},"a.shape",[41,97922,321],{"class":271},[41,97924,276],{"class":275},[41,97926,351],{"class":58},[41,97928,651],{"class":275},[41,97930,617],{"class":58},[41,97932,702],{"class":275},[41,97934,97935],{"class":47},"#改变了原数组\n",[41,97937,97938,97940,97942,97945,97947],{"class":43,"line":62},[41,97939,511],{"class":275},[41,97941,321],{"class":271},[41,97943,97944],{"class":275},"resize((",[41,97946,771],{"class":58},[41,97948,30600],{"class":275},[41,97950,97951],{"class":43,"line":70},[41,97952,93667],{"class":47},[41,97954,97955],{"class":43,"line":76},[41,97956,97829],{"class":47},[32,97958,97960],{"className":30481,"code":97959,"language":30483,"meta":37,"style":37},"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",[24,97961,97962,97975,97979,97983,97988,97993,97998,98003,98008,98013],{"__ignoreMap":37},[41,97963,97964,97967,97969,97971,97973],{"class":43,"line":44},[41,97965,97966],{"class":275},"a.resize((",[41,97968,617],{"class":58},[41,97970,651],{"class":275},[41,97972,351],{"class":58},[41,97974,30600],{"class":275},[41,97976,97977],{"class":43,"line":51},[41,97978,93667],{"class":47},[41,97980,97981],{"class":43,"line":62},[41,97982,94031],{"class":378},[41,97984,97985],{"class":43,"line":70},[41,97986,97987],{"class":378},"array([[ 1,  2],\n",[41,97989,97990],{"class":43,"line":76},[41,97991,97992],{"class":378},"       [ 3,  4],\n",[41,97994,97995],{"class":43,"line":83},[41,97996,97997],{"class":378},"       [ 5,  6],\n",[41,97999,98000],{"class":43,"line":89},[41,98001,98002],{"class":378},"       [ 7,  8],\n",[41,98004,98005],{"class":43,"line":96},[41,98006,98007],{"class":378},"       [ 9, 10],\n",[41,98009,98010],{"class":43,"line":104},[41,98011,98012],{"class":378},"       [11, 12]])\n",[41,98014,98015],{"class":43,"line":176},[41,98016,94031],{"class":378},[15,98018,98020],{"id":98019},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[20,98022,98023],{},"改变了原数组",[32,98025,98027],{"className":30481,"code":98026,"language":30483,"meta":37,"style":37},"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",[24,98028,98029,98045,98061,98065,98069,98073,98077],{"__ignoreMap":37},[41,98030,98031,98033,98035,98037,98039,98041,98043],{"class":43,"line":44},[41,98032,511],{"class":275},[41,98034,321],{"class":271},[41,98036,93105],{"class":275},[41,98038,26],{"class":58},[41,98040,651],{"class":275},[41,98042,796],{"class":58},[41,98044,282],{"class":275},[41,98046,98047,98049,98051,98053,98055,98057,98059],{"class":43,"line":51},[41,98048,97920],{"class":275},[41,98050,321],{"class":271},[41,98052,276],{"class":275},[41,98054,351],{"class":58},[41,98056,651],{"class":275},[41,98058,617],{"class":58},[41,98060,282],{"class":275},[41,98062,98063],{"class":43,"line":62},[41,98064,93667],{"class":47},[41,98066,98067],{"class":43,"line":70},[41,98068,94031],{"class":378},[41,98070,98071],{"class":43,"line":76},[41,98072,97291],{"class":378},[41,98074,98075],{"class":43,"line":83},[41,98076,97296],{"class":378},[41,98078,98079],{"class":43,"line":89},[41,98080,94031],{"class":378},[15,98082,98084],{"id":98083},"_56-重要比较","5.6 重要比较：",[20,98086,98087],{},[1603,98088],{"alt":37,"src":98089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[20,98091,98092,98093,98095,98096,98098],{},"口诀：NumPy 函数要么用 ",[24,98094,96066],{},"，要么用 ",[24,98097,31599],{},"，创建结构用 shape，造数据用 size",[20,98100,98101],{},[1603,98102],{"alt":37,"src":98103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[189,98105,98106],{},"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":37,"searchDepth":51,"depth":51,"links":98108},[98109,98110,98111,98112,98113,98114],{"id":97630,"depth":51,"text":97631},{"id":97782,"depth":51,"text":97783},{"id":97832,"depth":51,"text":97833},{"id":97878,"depth":51,"text":97879},{"id":98019,"depth":51,"text":98020},{"id":98083,"depth":51,"text":98084},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97622,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98121,"title":98122,"body":98123,"description":196,"extension":197,"meta":99195,"navigation":79,"path":99196,"seo":99197,"stem":99198,"__hash__":99199},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98124,"toc":99189},[98125,98128,98132,98135,98138,98141,98206,98209,98249,98252,98334,98337,98342,98364,98366,98371,98376,98379,98382,98537,98540,98742,98746,98749,98752,98820,98822,98827,98830,98833,98913,98917,98920,98922,98995,98997,99002,99004,99084,99088,99091,99094,99097,99100,99103,99106,99186],[10,98126,98122],{"id":98127},"_6数组的拼接",[15,98129,98131],{"id":98130},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[20,98133,98134],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[20,98136,98137],{},"函数内部传两个数列构成的数列或者元组",[20,98139,98140],{},"①一维数组的拼接",[32,98142,98144],{"className":30481,"code":98143,"language":30483,"meta":37,"style":37},"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",[24,98145,98146,98166,98186,98191,98196,98201],{"__ignoreMap":37},[41,98147,98148,98150,98152,98154,98156,98158,98160,98162,98164],{"class":43,"line":44},[41,98149,511],{"class":275},[41,98151,321],{"class":271},[41,98153,93127],{"class":275},[41,98155,26],{"class":58},[41,98157,651],{"class":275},[41,98159,351],{"class":58},[41,98161,651],{"class":275},[41,98163,345],{"class":58},[41,98165,4795],{"class":275},[41,98167,98168,98170,98172,98174,98176,98178,98180,98182,98184],{"class":43,"line":51},[41,98169,536],{"class":275},[41,98171,321],{"class":271},[41,98173,93127],{"class":275},[41,98175,566],{"class":58},[41,98177,651],{"class":275},[41,98179,592],{"class":58},[41,98181,651],{"class":275},[41,98183,617],{"class":58},[41,98185,4795],{"class":275},[41,98187,98188],{"class":43,"line":62},[41,98189,98190],{"class":47},"#调用concatenate进行数组拼接\n",[41,98192,98193],{"class":43,"line":70},[41,98194,98195],{"class":275},"np.concatenate((a,b))\n",[41,98197,98198],{"class":43,"line":76},[41,98199,98200],{"class":47},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[41,98202,98203],{"class":43,"line":83},[41,98204,98205],{"class":47},"#np.concatenate([a,b])\n",[20,98207,98208],{},"②一维多个数组拼接",[32,98210,98212],{"className":30481,"code":98211,"language":30483,"meta":37,"style":37},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[24,98213,98214,98219,98239,98244],{"__ignoreMap":37},[41,98215,98216],{"class":43,"line":44},[41,98217,98218],{"class":47},"#也可以多个数组进行拼接\n",[41,98220,98221,98223,98225,98227,98229,98231,98233,98235,98237],{"class":43,"line":51},[41,98222,561],{"class":275},[41,98224,321],{"class":271},[41,98226,93127],{"class":275},[41,98228,719],{"class":58},[41,98230,651],{"class":275},[41,98232,745],{"class":58},[41,98234,651],{"class":275},[41,98236,796],{"class":58},[41,98238,4795],{"class":275},[41,98240,98241],{"class":43,"line":62},[41,98242,98243],{"class":275},"c\n",[41,98245,98246],{"class":43,"line":70},[41,98247,98248],{"class":275},"np.concatenate((a,b,c))\n",[20,98250,98251],{},"③二维数组拼接",[32,98253,98255],{"className":30481,"code":98254,"language":30483,"meta":37,"style":37},"#二维数组使用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",[24,98256,98257,98262,98286,98311,98316,98321],{"__ignoreMap":37},[41,98258,98259],{"class":43,"line":44},[41,98260,98261],{"class":47},"#二维数组使用concatenate进行拼接\n",[41,98263,98264,98266,98268,98270,98272,98274,98276,98278,98280,98282,98284],{"class":43,"line":51},[41,98265,93409],{"class":275},[41,98267,321],{"class":271},[41,98269,93105],{"class":275},[41,98271,26],{"class":58},[41,98273,651],{"class":275},[41,98275,796],{"class":58},[41,98277,93110],{"class":275},[41,98279,345],{"class":58},[41,98281,651],{"class":275},[41,98283,566],{"class":58},[41,98285,282],{"class":275},[41,98287,98288,98291,98293,98295,98297,98299,98301,98303,98305,98307,98309],{"class":43,"line":62},[41,98289,98290],{"class":275},"bb",[41,98292,321],{"class":271},[41,98294,93105],{"class":275},[41,98296,610],{"class":58},[41,98298,651],{"class":275},[41,98300,915],{"class":58},[41,98302,93110],{"class":275},[41,98304,345],{"class":58},[41,98306,651],{"class":275},[41,98308,566],{"class":58},[41,98310,282],{"class":275},[41,98312,98313],{"class":43,"line":70},[41,98314,98315],{"class":47},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[41,98317,98318],{"class":43,"line":76},[41,98319,98320],{"class":47},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[41,98322,98323,98326,98328,98330,98332],{"class":43,"line":83},[41,98324,98325],{"class":275},"np.concatenate((aa,bb),",[41,98327,47617],{"class":5354},[41,98329,321],{"class":271},[41,98331,465],{"class":58},[41,98333,282],{"class":275},[20,98335,98336],{},"结果：",[20,98338,98339],{},[1603,98340],{"alt":37,"src":98341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[32,98343,98345],{"className":30481,"code":98344,"language":30483,"meta":37,"style":37},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[24,98346,98347,98352],{"__ignoreMap":37},[41,98348,98349],{"class":43,"line":44},[41,98350,98351],{"class":47},"#指定axis为1进行拼接\n",[41,98353,98354,98356,98358,98360,98362],{"class":43,"line":51},[41,98355,98325],{"class":275},[41,98357,47617],{"class":5354},[41,98359,321],{"class":271},[41,98361,26],{"class":58},[41,98363,282],{"class":275},[20,98365,98336],{},[20,98367,98368],{},[1603,98369],{"alt":37,"src":98370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[20,98372,98373],{},[423,98374,98375],{},"二维数组总结：0竖着方向，1横着方向",[20,98377,98378],{},"④三维数组拼接",[20,98380,98381],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[32,98383,98385],{"className":30481,"code":98384,"language":30483,"meta":37,"style":37},"#两个三行六列\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",[24,98386,98387,98392,98420,98450,98455,98472,98477,98482,98487,98504,98509,98514,98519,98532],{"__ignoreMap":37},[41,98388,98389],{"class":43,"line":44},[41,98390,98391],{"class":47},"#两个三行六列\n",[41,98393,98394,98396,98398,98400,98402,98404,98406,98408,98410,98412,98414,98416,98418],{"class":43,"line":51},[41,98395,95624],{"class":275},[41,98397,321],{"class":271},[41,98399,93105],{"class":275},[41,98401,26],{"class":58},[41,98403,651],{"class":275},[41,98405,598],{"class":58},[41,98407,93110],{"class":275},[41,98409,351],{"class":58},[41,98411,651],{"class":275},[41,98413,345],{"class":58},[41,98415,651],{"class":275},[41,98417,617],{"class":58},[41,98419,282],{"class":275},[41,98421,98422,98425,98427,98429,98431,98433,98436,98438,98440,98442,98444,98446,98448],{"class":43,"line":62},[41,98423,98424],{"class":275},"bbb",[41,98426,321],{"class":271},[41,98428,93105],{"class":275},[41,98430,610],{"class":58},[41,98432,651],{"class":275},[41,98434,98435],{"class":58},"137",[41,98437,93110],{"class":275},[41,98439,351],{"class":58},[41,98441,651],{"class":275},[41,98443,345],{"class":58},[41,98445,651],{"class":275},[41,98447,617],{"class":58},[41,98449,282],{"class":275},[41,98451,98452],{"class":43,"line":70},[41,98453,98454],{"class":47},"#axis=0\n",[41,98456,98457,98459,98461,98464,98466,98468,98470],{"class":43,"line":76},[41,98458,968],{"class":275},[41,98460,321],{"class":271},[41,98462,98463],{"class":275},"np.concatenate((aaa,bbb),",[41,98465,47617],{"class":5354},[41,98467,321],{"class":271},[41,98469,465],{"class":58},[41,98471,282],{"class":275},[41,98473,98474],{"class":43,"line":83},[41,98475,98476],{"class":275},"s.shape\n",[41,98478,98479],{"class":43,"line":89},[41,98480,98481],{"class":47},"#输出：(4,3,6)\n",[41,98483,98484],{"class":43,"line":96},[41,98485,98486],{"class":47},"#axis=1\n",[41,98488,98489,98492,98494,98496,98498,98500,98502],{"class":43,"line":104},[41,98490,98491],{"class":275},"ss",[41,98493,321],{"class":271},[41,98495,98463],{"class":275},[41,98497,47617],{"class":5354},[41,98499,321],{"class":271},[41,98501,26],{"class":58},[41,98503,282],{"class":275},[41,98505,98506],{"class":43,"line":176},[41,98507,98508],{"class":275},"ss.shape\n",[41,98510,98511],{"class":43,"line":184},[41,98512,98513],{"class":47},"#输出：(2,6,6)\n",[41,98515,98516],{"class":43,"line":1757},[41,98517,98518],{"class":47},"#axis=2\n",[41,98520,98521,98523,98525,98527,98529],{"class":43,"line":1763},[41,98522,98463],{"class":275},[41,98524,47617],{"class":5354},[41,98526,321],{"class":271},[41,98528,351],{"class":58},[41,98530,98531],{"class":275},").shape\n",[41,98533,98534],{"class":43,"line":1768},[41,98535,98536],{"class":47},"#输出：（2，3，12）\n",[20,98538,98539],{},"⑤四维数组拼接",[32,98541,98543],{"className":30481,"code":98542,"language":30483,"meta":37,"style":37},"#两个三行六列\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",[24,98544,98545,98549,98577,98605,98630,98656,98660,98673,98678,98682,98694,98699,98703,98715,98720,98725,98737],{"__ignoreMap":37},[41,98546,98547],{"class":43,"line":44},[41,98548,98391],{"class":47},[41,98550,98551,98553,98555,98557,98559,98561,98563,98565,98567,98569,98571,98573,98575],{"class":43,"line":51},[41,98552,95624],{"class":275},[41,98554,321],{"class":271},[41,98556,93105],{"class":275},[41,98558,26],{"class":58},[41,98560,651],{"class":275},[41,98562,598],{"class":58},[41,98564,93110],{"class":275},[41,98566,351],{"class":58},[41,98568,651],{"class":275},[41,98570,345],{"class":58},[41,98572,651],{"class":275},[41,98574,617],{"class":58},[41,98576,282],{"class":275},[41,98578,98579,98581,98583,98585,98587,98589,98591,98593,98595,98597,98599,98601,98603],{"class":43,"line":62},[41,98580,98424],{"class":275},[41,98582,321],{"class":271},[41,98584,93105],{"class":275},[41,98586,610],{"class":58},[41,98588,651],{"class":275},[41,98590,98435],{"class":58},[41,98592,93110],{"class":275},[41,98594,351],{"class":58},[41,98596,651],{"class":275},[41,98598,345],{"class":58},[41,98600,651],{"class":275},[41,98602,617],{"class":58},[41,98604,282],{"class":275},[41,98606,98607,98610,98612,98614,98616,98618,98620,98622,98624,98626,98628],{"class":43,"line":70},[41,98608,98609],{"class":275},"aaaa",[41,98611,321],{"class":271},[41,98613,97773],{"class":275},[41,98615,351],{"class":58},[41,98617,651],{"class":275},[41,98619,345],{"class":58},[41,98621,651],{"class":275},[41,98623,345],{"class":58},[41,98625,651],{"class":275},[41,98627,351],{"class":58},[41,98629,282],{"class":275},[41,98631,98632,98635,98637,98640,98642,98644,98646,98648,98650,98652,98654],{"class":43,"line":76},[41,98633,98634],{"class":275},"bbbb",[41,98636,321],{"class":271},[41,98638,98639],{"class":275},"bbb.reshape(",[41,98641,351],{"class":58},[41,98643,651],{"class":275},[41,98645,345],{"class":58},[41,98647,651],{"class":275},[41,98649,345],{"class":58},[41,98651,651],{"class":275},[41,98653,351],{"class":58},[41,98655,282],{"class":275},[41,98657,98658],{"class":43,"line":83},[41,98659,98454],{"class":47},[41,98661,98662,98665,98667,98669,98671],{"class":43,"line":89},[41,98663,98664],{"class":275},"np.concatenate((aaaa,bbbb),",[41,98666,47617],{"class":5354},[41,98668,321],{"class":271},[41,98670,465],{"class":58},[41,98672,98531],{"class":275},[41,98674,98675],{"class":43,"line":96},[41,98676,98677],{"class":47},"#结果：（4，3，3，2）\n",[41,98679,98680],{"class":43,"line":104},[41,98681,98486],{"class":47},[41,98683,98684,98686,98688,98690,98692],{"class":43,"line":176},[41,98685,98664],{"class":275},[41,98687,47617],{"class":5354},[41,98689,321],{"class":271},[41,98691,26],{"class":58},[41,98693,98531],{"class":275},[41,98695,98696],{"class":43,"line":184},[41,98697,98698],{"class":47},"#结果：（2，6，3，2）\n",[41,98700,98701],{"class":43,"line":1757},[41,98702,98518],{"class":47},[41,98704,98705,98707,98709,98711,98713],{"class":43,"line":1763},[41,98706,98664],{"class":275},[41,98708,47617],{"class":5354},[41,98710,321],{"class":271},[41,98712,351],{"class":58},[41,98714,98531],{"class":275},[41,98716,98717],{"class":43,"line":1768},[41,98718,98719],{"class":47},"#结果：（2，3，6，2）\n",[41,98721,98722],{"class":43,"line":1782},[41,98723,98724],{"class":47},"#axis=3\n",[41,98726,98727,98729,98731,98733,98735],{"class":43,"line":1787},[41,98728,98664],{"class":275},[41,98730,47617],{"class":5354},[41,98732,321],{"class":271},[41,98734,345],{"class":58},[41,98736,98531],{"class":275},[41,98738,98739],{"class":43,"line":1793},[41,98740,98741],{"class":47},"#结果：（2，3，3，4）\n",[15,98743,98745],{"id":98744},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[20,98747,98748],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[20,98750,98751],{},"①二维数组",[32,98753,98755],{"className":30481,"code":98754,"language":30483,"meta":37,"style":37},"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",[24,98756,98757,98781,98805,98810,98815],{"__ignoreMap":37},[41,98758,98759,98761,98763,98765,98767,98769,98771,98773,98775,98777,98779],{"class":43,"line":44},[41,98760,93409],{"class":275},[41,98762,321],{"class":271},[41,98764,93105],{"class":275},[41,98766,26],{"class":58},[41,98768,651],{"class":275},[41,98770,796],{"class":58},[41,98772,93110],{"class":275},[41,98774,345],{"class":58},[41,98776,651],{"class":275},[41,98778,566],{"class":58},[41,98780,282],{"class":275},[41,98782,98783,98785,98787,98789,98791,98793,98795,98797,98799,98801,98803],{"class":43,"line":51},[41,98784,98290],{"class":275},[41,98786,321],{"class":271},[41,98788,93105],{"class":275},[41,98790,610],{"class":58},[41,98792,651],{"class":275},[41,98794,915],{"class":58},[41,98796,93110],{"class":275},[41,98798,345],{"class":58},[41,98800,651],{"class":275},[41,98802,566],{"class":58},[41,98804,282],{"class":275},[41,98806,98807],{"class":43,"line":62},[41,98808,98809],{"class":275},"np.hstack((aa,bb))\n",[41,98811,98812],{"class":43,"line":70},[41,98813,98814],{"class":47},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[41,98816,98817],{"class":43,"line":76},[41,98818,98819],{"class":47},"#np.hstack([aa,bb])\n",[20,98821,98336],{},[20,98823,98824],{},[1603,98825],{"alt":37,"src":98826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[20,98828,98829],{},"等效于concatenate()函数中axis=1时的情况",[20,98831,98832],{},"②三维数组",[32,98834,98836],{"className":30481,"code":98835,"language":30483,"meta":37,"style":37},"#两个三行六列\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",[24,98837,98838,98842,98870,98898,98903,98908],{"__ignoreMap":37},[41,98839,98840],{"class":43,"line":44},[41,98841,98391],{"class":47},[41,98843,98844,98846,98848,98850,98852,98854,98856,98858,98860,98862,98864,98866,98868],{"class":43,"line":51},[41,98845,95624],{"class":275},[41,98847,321],{"class":271},[41,98849,93105],{"class":275},[41,98851,26],{"class":58},[41,98853,651],{"class":275},[41,98855,598],{"class":58},[41,98857,93110],{"class":275},[41,98859,351],{"class":58},[41,98861,651],{"class":275},[41,98863,345],{"class":58},[41,98865,651],{"class":275},[41,98867,617],{"class":58},[41,98869,282],{"class":275},[41,98871,98872,98874,98876,98878,98880,98882,98884,98886,98888,98890,98892,98894,98896],{"class":43,"line":62},[41,98873,98424],{"class":275},[41,98875,321],{"class":271},[41,98877,93105],{"class":275},[41,98879,610],{"class":58},[41,98881,651],{"class":275},[41,98883,98435],{"class":58},[41,98885,93110],{"class":275},[41,98887,351],{"class":58},[41,98889,651],{"class":275},[41,98891,345],{"class":58},[41,98893,651],{"class":275},[41,98895,617],{"class":58},[41,98897,282],{"class":275},[41,98899,98900],{"class":43,"line":70},[41,98901,98902],{"class":47},"#使用hstack\n",[41,98904,98905],{"class":43,"line":76},[41,98906,98907],{"class":275},"np.hstack((aaa,bbb)).shape\n",[41,98909,98910],{"class":43,"line":83},[41,98911,98912],{"class":47},"#输出：（2，6，6）\n",[15,98914,98916],{"id":98915},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[20,98918,98919],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[20,98921,98751],{},[32,98923,98925],{"className":30481,"code":98924,"language":30483,"meta":37,"style":37},"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",[24,98926,98927,98951,98975,98980,98985,98990],{"__ignoreMap":37},[41,98928,98929,98931,98933,98935,98937,98939,98941,98943,98945,98947,98949],{"class":43,"line":44},[41,98930,93409],{"class":275},[41,98932,321],{"class":271},[41,98934,93105],{"class":275},[41,98936,26],{"class":58},[41,98938,651],{"class":275},[41,98940,796],{"class":58},[41,98942,93110],{"class":275},[41,98944,345],{"class":58},[41,98946,651],{"class":275},[41,98948,566],{"class":58},[41,98950,282],{"class":275},[41,98952,98953,98955,98957,98959,98961,98963,98965,98967,98969,98971,98973],{"class":43,"line":51},[41,98954,98290],{"class":275},[41,98956,321],{"class":271},[41,98958,93105],{"class":275},[41,98960,610],{"class":58},[41,98962,651],{"class":275},[41,98964,915],{"class":58},[41,98966,93110],{"class":275},[41,98968,345],{"class":58},[41,98970,651],{"class":275},[41,98972,566],{"class":58},[41,98974,282],{"class":275},[41,98976,98977],{"class":43,"line":62},[41,98978,98979],{"class":47},"#vstack 垂直方向进行堆叠\n",[41,98981,98982],{"class":43,"line":70},[41,98983,98984],{"class":275},"np.vstack((aa,bb))\n",[41,98986,98987],{"class":43,"line":76},[41,98988,98989],{"class":47},"#与hstack传的参数类似，等价于：\n",[41,98991,98992],{"class":43,"line":83},[41,98993,98994],{"class":275},"np.vstack([aa,bb])\n",[20,98996,98336],{},[20,98998,98999],{},[1603,99000],{"alt":37,"src":99001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[20,99003,98832],{},[32,99005,99007],{"className":30481,"code":99006,"language":30483,"meta":37,"style":37},"#两个三行六列\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",[24,99008,99009,99013,99041,99069,99074,99079],{"__ignoreMap":37},[41,99010,99011],{"class":43,"line":44},[41,99012,98391],{"class":47},[41,99014,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039],{"class":43,"line":51},[41,99016,95624],{"class":275},[41,99018,321],{"class":271},[41,99020,93105],{"class":275},[41,99022,26],{"class":58},[41,99024,651],{"class":275},[41,99026,598],{"class":58},[41,99028,93110],{"class":275},[41,99030,351],{"class":58},[41,99032,651],{"class":275},[41,99034,345],{"class":58},[41,99036,651],{"class":275},[41,99038,617],{"class":58},[41,99040,282],{"class":275},[41,99042,99043,99045,99047,99049,99051,99053,99055,99057,99059,99061,99063,99065,99067],{"class":43,"line":62},[41,99044,98424],{"class":275},[41,99046,321],{"class":271},[41,99048,93105],{"class":275},[41,99050,610],{"class":58},[41,99052,651],{"class":275},[41,99054,98435],{"class":58},[41,99056,93110],{"class":275},[41,99058,351],{"class":58},[41,99060,651],{"class":275},[41,99062,345],{"class":58},[41,99064,651],{"class":275},[41,99066,617],{"class":58},[41,99068,282],{"class":275},[41,99070,99071],{"class":43,"line":70},[41,99072,99073],{"class":47},"#使用vstack\n",[41,99075,99076],{"class":43,"line":76},[41,99077,99078],{"class":275},"np.vstack((aaa,bbb)).shape\n",[41,99080,99081],{"class":43,"line":83},[41,99082,99083],{"class":47},"#输出：（4，3，6）\n",[15,99085,99087],{"id":99086},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[20,99089,99090],{},"该方法是三维数组特有的方法",[20,99092,99093],{},"也就是说",[20,99095,99096],{},"一维数组拼接方法用：concatenate()",[20,99098,99099],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[20,99101,99102],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[20,99104,99105],{},"四维数组及多维数组只能用concatenate进行拼接",[32,99107,99109],{"className":30481,"code":99108,"language":30483,"meta":37,"style":37},"#两个三行六列\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",[24,99110,99111,99115,99143,99171,99176,99181],{"__ignoreMap":37},[41,99112,99113],{"class":43,"line":44},[41,99114,98391],{"class":47},[41,99116,99117,99119,99121,99123,99125,99127,99129,99131,99133,99135,99137,99139,99141],{"class":43,"line":51},[41,99118,95624],{"class":275},[41,99120,321],{"class":271},[41,99122,93105],{"class":275},[41,99124,26],{"class":58},[41,99126,651],{"class":275},[41,99128,598],{"class":58},[41,99130,93110],{"class":275},[41,99132,351],{"class":58},[41,99134,651],{"class":275},[41,99136,345],{"class":58},[41,99138,651],{"class":275},[41,99140,617],{"class":58},[41,99142,282],{"class":275},[41,99144,99145,99147,99149,99151,99153,99155,99157,99159,99161,99163,99165,99167,99169],{"class":43,"line":62},[41,99146,98424],{"class":275},[41,99148,321],{"class":271},[41,99150,93105],{"class":275},[41,99152,610],{"class":58},[41,99154,651],{"class":275},[41,99156,98435],{"class":58},[41,99158,93110],{"class":275},[41,99160,351],{"class":58},[41,99162,651],{"class":275},[41,99164,345],{"class":58},[41,99166,651],{"class":275},[41,99168,617],{"class":58},[41,99170,282],{"class":275},[41,99172,99173],{"class":43,"line":70},[41,99174,99175],{"class":47},"#使用dstack\n",[41,99177,99178],{"class":43,"line":76},[41,99179,99180],{"class":275},"np.dstack((aaa,bbb)).shape\n",[41,99182,99183],{"class":43,"line":83},[41,99184,99185],{"class":47},"#结果：（2，3，12）\n",[189,99187,99188],{},"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":37,"searchDepth":51,"depth":51,"links":99190},[99191,99192,99193,99194],{"id":98130,"depth":51,"text":98131},{"id":98744,"depth":51,"text":98745},{"id":98915,"depth":51,"text":98916},{"id":99086,"depth":51,"text":99087},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98122,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99201,"title":99202,"body":99203,"description":196,"extension":197,"meta":99478,"navigation":79,"path":99479,"seo":99480,"stem":99481,"__hash__":99482},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99204,"toc":99476},[99205,99208,99211,99305,99308,99311,99314,99317,99320,99323,99326,99329,99473],[10,99206,99202],{"id":99207},"_7数组转置",[20,99209,99210],{},"使用transpose()函数",[32,99212,99214],{"className":30481,"code":99213,"language":30483,"meta":37,"style":37},"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",[24,99215,99216,99226,99250,99255,99260,99265,99270,99278,99282,99286,99291,99296,99301],{"__ignoreMap":37},[41,99217,99218,99220,99222,99224],{"class":43,"line":44},[41,99219,30495],{"class":271},[41,99221,31483],{"class":275},[41,99223,31486],{"class":271},[41,99225,31489],{"class":275},[41,99227,99228,99230,99232,99234,99236,99238,99240,99242,99244,99246,99248],{"class":43,"line":51},[41,99229,511],{"class":275},[41,99231,321],{"class":271},[41,99233,31820],{"class":275},[41,99235,26],{"class":58},[41,99237,651],{"class":275},[41,99239,796],{"class":58},[41,99241,93110],{"class":275},[41,99243,566],{"class":58},[41,99245,651],{"class":275},[41,99247,345],{"class":58},[41,99249,282],{"class":275},[41,99251,99252],{"class":43,"line":62},[41,99253,99254],{"class":47},"#二维数组转置\n",[41,99256,99257],{"class":43,"line":70},[41,99258,99259],{"class":47},"#调用transpose()函数\n",[41,99261,99262],{"class":43,"line":76},[41,99263,99264],{"class":275},"a.transpose()\n",[41,99266,99267],{"class":43,"line":83},[41,99268,99269],{"class":47},"#对于二维数组也可以采用.T来实现\n",[41,99271,99272,99275],{"class":43,"line":89},[41,99273,99274],{"class":275},"a.T",[41,99276,99277],{"class":47},"#与上述代码一样\n",[41,99279,99280],{"class":43,"line":96},[41,99281,93667],{"class":47},[41,99283,99284],{"class":43,"line":104},[41,99285,94031],{"class":378},[41,99287,99288],{"class":43,"line":176},[41,99289,99290],{"class":378},"array([[ 1,  4,  7, 10],\n",[41,99292,99293],{"class":43,"line":184},[41,99294,99295],{"class":378},"       [ 2,  5,  8, 11],\n",[41,99297,99298],{"class":43,"line":1757},[41,99299,99300],{"class":378},"       [ 3,  6,  9, 12]])\n",[41,99302,99303],{"class":43,"line":1763},[41,99304,94031],{"class":378},[20,99306,99307],{},"也可以使用np.transpose()的形式",[20,99309,99310],{},"#多维数组进行转置 np.transpose()",[20,99312,99313],{},"#对二维数组也可以使用np.transpose()进行转置",[20,99315,99316],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[20,99318,99319],{},"第二个参数，维度可以理解为用axis中的数来理解",[20,99321,99322],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[20,99324,99325],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[20,99327,99328],{},"四维及以上的数组也是一样的道理",[32,99330,99332],{"className":30481,"code":99331,"language":30483,"meta":37,"style":37},"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",[24,99333,99334,99362,99367,99372,99377,99395,99400,99432,99437,99442,99447,99468],{"__ignoreMap":37},[41,99335,99336,99338,99340,99342,99344,99346,99348,99350,99352,99354,99356,99358,99360],{"class":43,"line":44},[41,99337,1093],{"class":275},[41,99339,321],{"class":271},[41,99341,93105],{"class":275},[41,99343,26],{"class":58},[41,99345,651],{"class":275},[41,99347,598],{"class":58},[41,99349,93110],{"class":275},[41,99351,345],{"class":58},[41,99353,651],{"class":275},[41,99355,617],{"class":58},[41,99357,651],{"class":275},[41,99359,351],{"class":58},[41,99361,282],{"class":275},[41,99363,99364],{"class":43,"line":51},[41,99365,99366],{"class":275},"x.shape\n",[41,99368,99369],{"class":43,"line":62},[41,99370,99371],{"class":47},"#结果：（3,6,2）\n",[41,99373,99374],{"class":43,"line":70},[41,99375,99376],{"class":47},"#使用np.transpose()进行转置 变为(2,6,3)\n",[41,99378,99379,99382,99384,99386,99388,99390,99392],{"class":43,"line":76},[41,99380,99381],{"class":275},"np.transpose(x,(",[41,99383,351],{"class":58},[41,99385,651],{"class":275},[41,99387,26],{"class":58},[41,99389,651],{"class":275},[41,99391,465],{"class":58},[41,99393,99394],{"class":275},")).shape\n",[41,99396,99397],{"class":43,"line":83},[41,99398,99399],{"class":47},"#结果：(2,6,3)\n",[41,99401,99402,99404,99406,99408,99410,99412,99414,99416,99418,99420,99422,99424,99426,99428,99430],{"class":43,"line":89},[41,99403,98609],{"class":275},[41,99405,321],{"class":271},[41,99407,93105],{"class":275},[41,99409,26],{"class":58},[41,99411,651],{"class":275},[41,99413,598],{"class":58},[41,99415,93110],{"class":275},[41,99417,345],{"class":58},[41,99419,651],{"class":275},[41,99421,351],{"class":58},[41,99423,651],{"class":275},[41,99425,26],{"class":58},[41,99427,651],{"class":275},[41,99429,617],{"class":58},[41,99431,282],{"class":275},[41,99433,99434],{"class":43,"line":96},[41,99435,99436],{"class":275},"aaaa.shape\n",[41,99438,99439],{"class":43,"line":104},[41,99440,99441],{"class":47},"#结果：（3，2，1，6）\n",[41,99443,99444],{"class":43,"line":176},[41,99445,99446],{"class":47},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[41,99448,99449,99452,99454,99456,99458,99460,99462,99464,99466],{"class":43,"line":184},[41,99450,99451],{"class":275},"np.transpose(aaaa,(",[41,99453,26],{"class":58},[41,99455,651],{"class":275},[41,99457,351],{"class":58},[41,99459,651],{"class":275},[41,99461,465],{"class":58},[41,99463,651],{"class":275},[41,99465,345],{"class":58},[41,99467,99394],{"class":275},[41,99469,99470],{"class":43,"line":1757},[41,99471,99472],{"class":47},"#结果：(2,1,3,6)\n",[189,99474,99475],{},"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":37,"searchDepth":51,"depth":51,"links":99477},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99202,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99484,"title":99485,"body":99486,"description":196,"extension":197,"meta":100220,"navigation":79,"path":100221,"seo":100222,"stem":100223,"__hash__":100224},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99487,"toc":100218},[99488,99491,99494,99497,99500,99503,99506,99509,99512,99621,99624,99627,100215],[10,99489,99485],{"id":99490},"_8数组分割",[20,99492,99493],{},"split分割",[20,99495,99496],{},"numpy.split(ary,indics_or_sections,axis)",[20,99498,99499],{},"解释：",[20,99501,99502],{},"ary:被分割的数组",[20,99504,99505],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[20,99507,99508],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[20,99510,99511],{},"①一维数组的分割",[32,99513,99515],{"className":30481,"code":99514,"language":30483,"meta":37,"style":37},"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",[24,99516,99517,99533,99538,99547,99551,99556,99564,99568,99573,99578,99591,99595,99600,99612,99616],{"__ignoreMap":37},[41,99518,99519,99521,99523,99525,99527,99529,99531],{"class":43,"line":44},[41,99520,511],{"class":275},[41,99522,321],{"class":271},[41,99524,93105],{"class":275},[41,99526,26],{"class":58},[41,99528,651],{"class":275},[41,99530,693],{"class":58},[41,99532,282],{"class":275},[41,99534,99535],{"class":43,"line":51},[41,99536,99537],{"class":47},"#如果传入整数，必须能够平分，否则会报错\n",[41,99539,99540,99543,99545],{"class":43,"line":62},[41,99541,99542],{"class":275},"np.split(a,",[41,99544,351],{"class":58},[41,99546,282],{"class":275},[41,99548,99549],{"class":43,"line":70},[41,99550,93667],{"class":47},[41,99552,99553],{"class":43,"line":76},[41,99554,99555],{"class":47},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[41,99557,99558,99560,99562],{"class":43,"line":83},[41,99559,99542],{"class":275},[41,99561,566],{"class":58},[41,99563,282],{"class":275},[41,99565,99566],{"class":43,"line":89},[41,99567,93667],{"class":47},[41,99569,99570],{"class":43,"line":96},[41,99571,99572],{"class":47},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[41,99574,99575],{"class":43,"line":104},[41,99576,99577],{"class":47},"#传入数组\n",[41,99579,99580,99583,99585,99587,99589],{"class":43,"line":176},[41,99581,99582],{"class":275},"np.split(a,[",[41,99584,345],{"class":58},[41,99586,651],{"class":275},[41,99588,592],{"class":58},[41,99590,4795],{"class":275},[41,99592,99593],{"class":43,"line":184},[41,99594,93667],{"class":47},[41,99596,99597],{"class":43,"line":1757},[41,99598,99599],{"class":47},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[41,99601,99602,99604,99606,99608,99610],{"class":43,"line":1763},[41,99603,99582],{"class":275},[41,99605,592],{"class":58},[41,99607,651],{"class":275},[41,99609,642],{"class":58},[41,99611,4795],{"class":275},[41,99613,99614],{"class":43,"line":1768},[41,99615,93667],{"class":47},[41,99617,99618],{"class":43,"line":1782},[41,99619,99620],{"class":47},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[20,99622,99623],{},"②二维数组的分割",[20,99625,99626],{},"使用split()",[32,99628,99630],{"className":30481,"code":99629,"language":30483,"meta":37,"style":37},"#二维数组分割\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",[24,99631,99632,99637,99661,99666,99675,99679,99683,99688,99693,99698,99703,99708,99713,99718,99722,99735,99739,99743,99747,99751,99755,99760,99765,99770,99774,99779,99795,99799,99803,99808,99813,99818,99823,99828,99833,99838,99843,99848,99853,99858,99863,99868,99873,99878,99883,99888,99893,99897,99901,99921,99925,99929,99934,99939,99944,99949,99954,99959,99964,99969,99974,99979,99984,99989,99994,99999,100004,100009,100014,100019,100023,100028,100037,100041,100045,100049,100053,100057,100061,100065,100069,100073,100082,100086,100090,100094,100098,100102,100106,100110,100114,100118,100122,100126,100130,100134,100138,100142,100146,100150,100154,100158,100162,100166,100179,100183,100187,100191,100195,100199,100203,100207,100211],{"__ignoreMap":37},[41,99633,99634],{"class":43,"line":44},[41,99635,99636],{"class":47},"#二维数组分割\n",[41,99638,99639,99641,99643,99645,99647,99649,99651,99653,99655,99657,99659],{"class":43,"line":51},[41,99640,93409],{"class":275},[41,99642,321],{"class":271},[41,99644,93105],{"class":275},[41,99646,26],{"class":58},[41,99648,651],{"class":275},[41,99650,598],{"class":58},[41,99652,93110],{"class":275},[41,99654,617],{"class":58},[41,99656,651],{"class":275},[41,99658,617],{"class":58},[41,99660,282],{"class":275},[41,99662,99663],{"class":43,"line":62},[41,99664,99665],{"class":47},"#默认axis=0  传入整数平均分,按行来的\n",[41,99667,99668,99671,99673],{"class":43,"line":70},[41,99669,99670],{"class":275},"np.split(aa,",[41,99672,345],{"class":58},[41,99674,282],{"class":275},[41,99676,99677],{"class":43,"line":76},[41,99678,95867],{"class":47},[41,99680,99681],{"class":43,"line":83},[41,99682,94031],{"class":378},[41,99684,99685],{"class":43,"line":89},[41,99686,99687],{"class":378},"[array([[ 1,  2,  3,  4,  5,  6],\n",[41,99689,99690],{"class":43,"line":96},[41,99691,99692],{"class":378},"        [ 7,  8,  9, 10, 11, 12]]),\n",[41,99694,99695],{"class":43,"line":104},[41,99696,99697],{"class":378}," array([[13, 14, 15, 16, 17, 18],\n",[41,99699,99700],{"class":43,"line":176},[41,99701,99702],{"class":378},"        [19, 20, 21, 22, 23, 24]]),\n",[41,99704,99705],{"class":43,"line":184},[41,99706,99707],{"class":378}," array([[25, 26, 27, 28, 29, 30],\n",[41,99709,99710],{"class":43,"line":1757},[41,99711,99712],{"class":378},"        [31, 32, 33, 34, 35, 36]])]\n",[41,99714,99715],{"class":43,"line":1763},[41,99716,99717],{"class":378}," '''\n",[41,99719,99720],{"class":43,"line":1768},[41,99721,99577],{"class":47},[41,99723,99724,99727,99729,99731,99733],{"class":43,"line":1782},[41,99725,99726],{"class":275},"np.split(aa,[",[41,99728,351],{"class":58},[41,99730,651],{"class":275},[41,99732,592],{"class":58},[41,99734,4795],{"class":275},[41,99736,99737],{"class":43,"line":1787},[41,99738,95867],{"class":47},[41,99740,99741],{"class":43,"line":1793},[41,99742,94031],{"class":378},[41,99744,99745],{"class":43,"line":1814},[41,99746,99687],{"class":378},[41,99748,99749],{"class":43,"line":1819},[41,99750,99692],{"class":378},[41,99752,99753],{"class":43,"line":1833},[41,99754,99697],{"class":378},[41,99756,99757],{"class":43,"line":1838},[41,99758,99759],{"class":378},"        [19, 20, 21, 22, 23, 24],\n",[41,99761,99762],{"class":43,"line":1867},[41,99763,99764],{"class":378},"        [25, 26, 27, 28, 29, 30]]),\n",[41,99766,99767],{"class":43,"line":1872},[41,99768,99769],{"class":378}," array([[31, 32, 33, 34, 35, 36]])]\n",[41,99771,99772],{"class":43,"line":1889},[41,99773,94031],{"class":378},[41,99775,99776],{"class":43,"line":1894},[41,99777,99778],{"class":47},"#axis=1 按照列来分\n",[41,99780,99781,99783,99785,99787,99789,99791,99793],{"class":43,"line":1899},[41,99782,99670],{"class":275},[41,99784,345],{"class":58},[41,99786,651],{"class":275},[41,99788,47617],{"class":5354},[41,99790,321],{"class":271},[41,99792,26],{"class":58},[41,99794,282],{"class":275},[41,99796,99797],{"class":43,"line":1904},[41,99798,95867],{"class":47},[41,99800,99801],{"class":43,"line":1918},[41,99802,94031],{"class":378},[41,99804,99805],{"class":43,"line":1923},[41,99806,99807],{"class":378},"[array([[ 1,  2],\n",[41,99809,99810],{"class":43,"line":2715},[41,99811,99812],{"class":378},"        [ 7,  8],\n",[41,99814,99815],{"class":43,"line":2729},[41,99816,99817],{"class":378},"        [13, 14],\n",[41,99819,99820],{"class":43,"line":2737},[41,99821,99822],{"class":378},"        [19, 20],\n",[41,99824,99825],{"class":43,"line":2742},[41,99826,99827],{"class":378},"        [25, 26],\n",[41,99829,99830],{"class":43,"line":2748},[41,99831,99832],{"class":378},"        [31, 32]]),\n",[41,99834,99835],{"class":43,"line":2754},[41,99836,99837],{"class":378}," array([[ 3,  4],\n",[41,99839,99840],{"class":43,"line":2759},[41,99841,99842],{"class":378},"        [ 9, 10],\n",[41,99844,99845],{"class":43,"line":8086},[41,99846,99847],{"class":378},"        [15, 16],\n",[41,99849,99850],{"class":43,"line":8110},[41,99851,99852],{"class":378},"        [21, 22],\n",[41,99854,99855],{"class":43,"line":8115},[41,99856,99857],{"class":378},"        [27, 28],\n",[41,99859,99860],{"class":43,"line":8121},[41,99861,99862],{"class":378},"        [33, 34]]),\n",[41,99864,99865],{"class":43,"line":8148},[41,99866,99867],{"class":378}," array([[ 5,  6],\n",[41,99869,99870],{"class":43,"line":8153},[41,99871,99872],{"class":378},"        [11, 12],\n",[41,99874,99875],{"class":43,"line":8159},[41,99876,99877],{"class":378},"        [17, 18],\n",[41,99879,99880],{"class":43,"line":8171},[41,99881,99882],{"class":378},"        [23, 24],\n",[41,99884,99885],{"class":43,"line":8183},[41,99886,99887],{"class":378},"        [29, 30],\n",[41,99889,99890],{"class":43,"line":8195},[41,99891,99892],{"class":378},"        [35, 36]])]\n",[41,99894,99895],{"class":43,"line":9854},[41,99896,99717],{"class":378},[41,99898,99899],{"class":43,"line":9879},[41,99900,99577],{"class":47},[41,99902,99903,99905,99907,99909,99911,99913,99915,99917,99919],{"class":43,"line":9902},[41,99904,99726],{"class":275},[41,99906,26],{"class":58},[41,99908,651],{"class":275},[41,99910,351],{"class":58},[41,99912,41712],{"class":275},[41,99914,47617],{"class":5354},[41,99916,321],{"class":271},[41,99918,26],{"class":58},[41,99920,282],{"class":275},[41,99922,99923],{"class":43,"line":9926},[41,99924,93667],{"class":47},[41,99926,99927],{"class":43,"line":9931},[41,99928,94031],{"class":378},[41,99930,99931],{"class":43,"line":9936},[41,99932,99933],{"class":378},"[array([[ 1],\n",[41,99935,99936],{"class":43,"line":9941},[41,99937,99938],{"class":378},"        [ 7],\n",[41,99940,99941],{"class":43,"line":9950},[41,99942,99943],{"class":378},"        [13],\n",[41,99945,99946],{"class":43,"line":9955},[41,99947,99948],{"class":378},"        [19],\n",[41,99950,99951],{"class":43,"line":9961},[41,99952,99953],{"class":378},"        [25],\n",[41,99955,99956],{"class":43,"line":9982},[41,99957,99958],{"class":378},"        [31]]),\n",[41,99960,99961],{"class":43,"line":9988},[41,99962,99963],{"class":378}," array([[ 2],\n",[41,99965,99966],{"class":43,"line":10002},[41,99967,99968],{"class":378},"        [ 8],\n",[41,99970,99971],{"class":43,"line":10008},[41,99972,99973],{"class":378},"        [14],\n",[41,99975,99976],{"class":43,"line":10035},[41,99977,99978],{"class":378},"        [20],\n",[41,99980,99981],{"class":43,"line":10044},[41,99982,99983],{"class":378},"        [26],\n",[41,99985,99986],{"class":43,"line":10050},[41,99987,99988],{"class":378},"        [32]]),\n",[41,99990,99991],{"class":43,"line":10058},[41,99992,99993],{"class":378}," array([[ 3,  4,  5,  6],\n",[41,99995,99996],{"class":43,"line":10063},[41,99997,99998],{"class":378},"        [ 9, 10, 11, 12],\n",[41,100000,100001],{"class":43,"line":16742},[41,100002,100003],{"class":378},"        [15, 16, 17, 18],\n",[41,100005,100006],{"class":43,"line":16748},[41,100007,100008],{"class":378},"        [21, 22, 23, 24],\n",[41,100010,100011],{"class":43,"line":16771},[41,100012,100013],{"class":378},"        [27, 28, 29, 30],\n",[41,100015,100016],{"class":43,"line":16777},[41,100017,100018],{"class":378},"        [33, 34, 35, 36]])]\n",[41,100020,100021],{"class":43,"line":16800},[41,100022,94031],{"class":378},[41,100024,100025],{"class":43,"line":16814},[41,100026,100027],{"class":47},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[41,100029,100030,100033,100035],{"class":43,"line":16834},[41,100031,100032],{"class":275},"np.vsplit(aa,",[41,100034,345],{"class":58},[41,100036,282],{"class":275},[41,100038,100039],{"class":43,"line":16840},[41,100040,93667],{"class":47},[41,100042,100043],{"class":43,"line":16851},[41,100044,94031],{"class":378},[41,100046,100047],{"class":43,"line":16874},[41,100048,99687],{"class":378},[41,100050,100051],{"class":43,"line":16896},[41,100052,99692],{"class":378},[41,100054,100055],{"class":43,"line":16901},[41,100056,99697],{"class":378},[41,100058,100059],{"class":43,"line":16907},[41,100060,99702],{"class":378},[41,100062,100063],{"class":43,"line":16921},[41,100064,99707],{"class":378},[41,100066,100067],{"class":43,"line":16934},[41,100068,99712],{"class":378},[41,100070,100071],{"class":43,"line":16939},[41,100072,94031],{"class":378},[41,100074,100075,100078,100080],{"class":43,"line":16953},[41,100076,100077],{"class":275},"np.hsplit(aa,",[41,100079,345],{"class":58},[41,100081,282],{"class":275},[41,100083,100084],{"class":43,"line":16958},[41,100085,93667],{"class":47},[41,100087,100088],{"class":43,"line":16964},[41,100089,94031],{"class":378},[41,100091,100092],{"class":43,"line":16969},[41,100093,99807],{"class":378},[41,100095,100096],{"class":43,"line":16983},[41,100097,99812],{"class":378},[41,100099,100100],{"class":43,"line":16988},[41,100101,99817],{"class":378},[41,100103,100104],{"class":43,"line":16993},[41,100105,99822],{"class":378},[41,100107,100108],{"class":43,"line":17007},[41,100109,99827],{"class":378},[41,100111,100112],{"class":43,"line":17019},[41,100113,99832],{"class":378},[41,100115,100116],{"class":43,"line":17024},[41,100117,99837],{"class":378},[41,100119,100120],{"class":43,"line":17037},[41,100121,99842],{"class":378},[41,100123,100124],{"class":43,"line":17042},[41,100125,99847],{"class":378},[41,100127,100128],{"class":43,"line":17047},[41,100129,99852],{"class":378},[41,100131,100132],{"class":43,"line":17052},[41,100133,99857],{"class":378},[41,100135,100136],{"class":43,"line":17065},[41,100137,99862],{"class":378},[41,100139,100140],{"class":43,"line":17070},[41,100141,99867],{"class":378},[41,100143,100144],{"class":43,"line":32736},[41,100145,99872],{"class":378},[41,100147,100148],{"class":43,"line":32742},[41,100149,99877],{"class":378},[41,100151,100152],{"class":43,"line":32748},[41,100153,99882],{"class":378},[41,100155,100156],{"class":43,"line":32754},[41,100157,99887],{"class":378},[41,100159,100160],{"class":43,"line":32760},[41,100161,99892],{"class":378},[41,100163,100164],{"class":43,"line":32771},[41,100165,94031],{"class":378},[41,100167,100168,100171,100173,100175,100177],{"class":43,"line":32777},[41,100169,100170],{"class":275},"np.vsplit(aa,[",[41,100172,351],{"class":58},[41,100174,651],{"class":275},[41,100176,592],{"class":58},[41,100178,4795],{"class":275},[41,100180,100181],{"class":43,"line":32797},[41,100182,93667],{"class":47},[41,100184,100185],{"class":43,"line":32803},[41,100186,94031],{"class":378},[41,100188,100189],{"class":43,"line":32814},[41,100190,99687],{"class":378},[41,100192,100193],{"class":43,"line":32820},[41,100194,99692],{"class":378},[41,100196,100197],{"class":43,"line":32826},[41,100198,99697],{"class":378},[41,100200,100201],{"class":43,"line":32832},[41,100202,99759],{"class":378},[41,100204,100205],{"class":43,"line":32838},[41,100206,99764],{"class":378},[41,100208,100209],{"class":43,"line":32844},[41,100210,99769],{"class":378},[41,100212,100213],{"class":43,"line":32850},[41,100214,99717],{"class":378},[189,100216,100217],{},"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":37,"searchDepth":51,"depth":51,"links":100219},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99485,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100226,"title":100227,"body":100228,"description":196,"extension":197,"meta":100722,"navigation":79,"path":100723,"seo":100724,"stem":100725,"__hash__":100726},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100229,"toc":100713},[100230,100233,100236,100261,100265,100324,100376,100380,100382,100418,100472,100474,100512,100583,100587,100592,100596,100599,100632,100635,100639,100642,100645,100648,100651,100656,100660,100663,100666,100669,100672,100677,100681,100686,100689,100710],[10,100231,100227],{"id":100232},"_9数学函数",[20,100234,100235],{},"补充回顾：python的列表推导式",[32,100237,100239],{"className":30481,"code":100238,"language":30483,"meta":37,"style":37},"[1\u002Fi for i in a]\n",[24,100240,100241],{"__ignoreMap":37},[41,100242,100243,100245,100247,100249,100252,100254,100256,100258],{"class":43,"line":44},[41,100244,1163],{"class":275},[41,100246,26],{"class":58},[41,100248,857],{"class":271},[41,100250,100251],{"class":275},"i ",[41,100253,3163],{"class":271},[41,100255,9576],{"class":275},[41,100257,26146],{"class":271},[41,100259,100260],{"class":275}," a]\n",[15,100262,100264],{"id":100263},"_91-求倒数","9.1 求倒数",[32,100266,100268],{"className":30481,"code":100267,"language":30483,"meta":37,"style":37},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[24,100269,100270,100275,100303,100315],{"__ignoreMap":37},[41,100271,100272],{"class":43,"line":44},[41,100273,100274],{"class":47},"#数组求倒数\n",[41,100276,100277,100279,100281,100283,100285,100287,100289,100291,100293,100295,100297,100299,100301],{"class":43,"line":51},[41,100278,511],{"class":275},[41,100280,321],{"class":271},[41,100282,1163],{"class":275},[41,100284,26],{"class":58},[41,100286,651],{"class":275},[41,100288,351],{"class":58},[41,100290,651],{"class":275},[41,100292,345],{"class":58},[41,100294,651],{"class":275},[41,100296,566],{"class":58},[41,100298,651],{"class":275},[41,100300,592],{"class":58},[41,100302,33349],{"class":275},[41,100304,100305,100307,100309,100312],{"class":43,"line":62},[41,100306,536],{"class":275},[41,100308,321],{"class":271},[41,100310,100311],{"class":275},"np.array(a)",[41,100313,100314],{"class":47},"#将列表转换为数组\n",[41,100316,100317,100319,100321],{"class":43,"line":70},[41,100318,26],{"class":58},[41,100320,857],{"class":271},[41,100322,100323],{"class":275},"b\n",[32,100325,100327],{"className":30481,"code":100326,"language":30483,"meta":37,"style":37},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[24,100328,100329,100357,100366,100371],{"__ignoreMap":37},[41,100330,100331,100333,100335,100337,100339,100341,100343,100345,100347,100349,100351,100353,100355],{"class":43,"line":44},[41,100332,511],{"class":275},[41,100334,321],{"class":271},[41,100336,1163],{"class":275},[41,100338,26],{"class":58},[41,100340,651],{"class":275},[41,100342,351],{"class":58},[41,100344,651],{"class":275},[41,100346,345],{"class":58},[41,100348,651],{"class":275},[41,100350,566],{"class":58},[41,100352,651],{"class":275},[41,100354,592],{"class":58},[41,100356,33349],{"class":275},[41,100358,100359,100361,100363],{"class":43,"line":51},[41,100360,536],{"class":275},[41,100362,321],{"class":271},[41,100364,100365],{"class":275},"np.array(a)\n",[41,100367,100368],{"class":43,"line":62},[41,100369,100370],{"class":47},"#调用numpy中的函数reciprocal()\n",[41,100372,100373],{"class":43,"line":70},[41,100374,100375],{"class":275},"np.reciprocal(b)\n",[15,100377,100379],{"id":100378},"_92-求平方","9.2 求平方",[20,100381,94633],{},[32,100383,100385],{"className":30481,"code":100384,"language":30483,"meta":37,"style":37},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[24,100386,100387,100392,100397,100413],{"__ignoreMap":37},[41,100388,100389],{"class":43,"line":44},[41,100390,100391],{"class":47},"#square()，求平方\n",[41,100393,100394],{"class":43,"line":51},[41,100395,100396],{"class":47},"#一维数组\n",[41,100398,100399,100401,100403,100405,100407,100409,100411],{"class":43,"line":62},[41,100400,511],{"class":275},[41,100402,321],{"class":271},[41,100404,93105],{"class":275},[41,100406,26],{"class":58},[41,100408,651],{"class":275},[41,100410,719],{"class":58},[41,100412,282],{"class":275},[41,100414,100415],{"class":43,"line":70},[41,100416,100417],{"class":275},"np.square(a)\n",[32,100419,100421],{"className":30481,"code":100420,"language":30483,"meta":37,"style":37},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[24,100422,100423,100428,100433,100454],{"__ignoreMap":37},[41,100424,100425],{"class":43,"line":44},[41,100426,100427],{"class":47},"#或者通过循环遍历的形式来计算\n",[41,100429,100430],{"class":43,"line":51},[41,100431,100432],{"class":47},"#这是一个列表\n",[41,100434,100435,100438,100440,100442,100444,100446,100448,100451],{"class":43,"line":62},[41,100436,100437],{"class":275},"[i",[41,100439,728],{"class":271},[41,100441,100251],{"class":275},[41,100443,3163],{"class":271},[41,100445,9576],{"class":275},[41,100447,26146],{"class":271},[41,100449,100450],{"class":275}," a]",[41,100452,100453],{"class":47},"#这个求完之后在数列当中\n",[41,100455,100456,100459,100461,100463,100465,100467,100469],{"class":43,"line":70},[41,100457,100458],{"class":275},"np.array([i",[41,100460,728],{"class":271},[41,100462,100251],{"class":275},[41,100464,3163],{"class":271},[41,100466,9576],{"class":275},[41,100468,26146],{"class":271},[41,100470,100471],{"class":275}," a])\n",[20,100473,93394],{},[32,100475,100477],{"className":30481,"code":100476,"language":30483,"meta":37,"style":37},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[24,100478,100479,100483,100507],{"__ignoreMap":37},[41,100480,100481],{"class":43,"line":44},[41,100482,93404],{"class":47},[41,100484,100485,100487,100489,100491,100493,100495,100497,100499,100501,100503,100505],{"class":43,"line":51},[41,100486,93409],{"class":275},[41,100488,321],{"class":271},[41,100490,93105],{"class":275},[41,100492,26],{"class":58},[41,100494,651],{"class":275},[41,100496,796],{"class":58},[41,100498,93110],{"class":275},[41,100500,566],{"class":58},[41,100502,651],{"class":275},[41,100504,345],{"class":58},[41,100506,282],{"class":275},[41,100508,100509],{"class":43,"line":62},[41,100510,100511],{"class":275},"np.square(aa)\n",[32,100513,100515],{"className":30481,"code":100514,"language":30483,"meta":37,"style":37},"#传统的方式\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",[24,100516,100517,100522,100531,100547,100563,100578],{"__ignoreMap":37},[41,100518,100519],{"class":43,"line":44},[41,100520,100521],{"class":47},"#传统的方式\n",[41,100523,100524,100526,100528],{"class":43,"line":51},[41,100525,98290],{"class":275},[41,100527,321],{"class":271},[41,100529,100530],{"class":275},"np.empty_like(aa)\n",[41,100532,100533,100535,100537,100539,100541,100543,100545],{"class":43,"line":62},[41,100534,3163],{"class":271},[41,100536,9576],{"class":275},[41,100538,26146],{"class":271},[41,100540,32546],{"class":58},[41,100542,276],{"class":275},[41,100544,566],{"class":58},[41,100546,30889],{"class":275},[41,100548,100549,100551,100553,100555,100557,100559,100561],{"class":43,"line":70},[41,100550,3339],{"class":271},[41,100552,9638],{"class":275},[41,100554,26146],{"class":271},[41,100556,32546],{"class":58},[41,100558,276],{"class":275},[41,100560,345],{"class":58},[41,100562,30889],{"class":275},[41,100564,100565,100568,100570,100573,100575],{"class":43,"line":76},[41,100566,100567],{"class":275},"        bb[i,j]",[41,100569,321],{"class":271},[41,100571,100572],{"class":275},"aa[i,j]",[41,100574,728],{"class":271},[41,100576,100577],{"class":275},"aa[i,j]\n",[41,100579,100580],{"class":43,"line":83},[41,100581,100582],{"class":275},"bb\n",[15,100584,100586],{"id":100585},"_93-求各元素的符号","9.3 求各元素的符号",[20,100588,100589],{},[1603,100590],{"alt":37,"src":100591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[15,100593,100595],{"id":100594},"_94-modf函数","9.4 modf函数",[20,100597,100598],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[32,100600,100602],{"className":30481,"code":100601,"language":30483,"meta":37,"style":37},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[24,100603,100604,100627],{"__ignoreMap":37},[41,100605,100606,100608,100610,100612,100614,100616,100618,100620,100622,100625],{"class":43,"line":44},[41,100607,511],{"class":275},[41,100609,321],{"class":271},[41,100611,93105],{"class":275},[41,100613,805],{"class":271},[41,100615,719],{"class":58},[41,100617,651],{"class":275},[41,100619,719],{"class":58},[41,100621,651],{"class":275},[41,100623,100624],{"class":58},"0.3",[41,100626,282],{"class":275},[41,100628,100629],{"class":43,"line":51},[41,100630,100631],{"class":275},"np.modf(a)\n",[20,100633,100634],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[15,100636,100638],{"id":100637},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[20,100640,100641],{},"np.cell()",[20,100643,100644],{},"np.floor()",[20,100646,100647],{},"np.rint()",[20,100649,100650],{},"对各元素分别向上取整、向下取整、四舍五入",[20,100652,100653],{},[1603,100654],{"alt":37,"src":100655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[15,100657,100659],{"id":100658},"_96-around函数","9.6 around()函数",[20,100661,100662],{},"around()函数也可以实现对数的小数位数进行操作",[20,100664,100665],{},"其中的参数：",[20,100667,100668],{},"1.要传的数组",[20,100670,100671],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[20,100673,100674],{},[1603,100675],{"alt":37,"src":100676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[15,100678,100680],{"id":100679},"_97-三角函数","9.7 三角函数",[20,100682,100683],{},[1603,100684],{"alt":37,"src":100685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[20,100687,100688],{},"引入图像模块非常重要",[32,100690,100692],{"className":30481,"code":100691,"language":30483,"meta":37,"style":37},"from matplotlib import pyplot as plt\n",[24,100693,100694],{"__ignoreMap":37},[41,100695,100696,100698,100701,100703,100706,100708],{"class":43,"line":44},[41,100697,30840],{"class":271},[41,100699,100700],{"class":275}," matplotlib ",[41,100702,30495],{"class":271},[41,100704,100705],{"class":275}," pyplot ",[41,100707,31486],{"class":271},[41,100709,31540],{"class":275},[189,100711,100712],{},"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":37,"searchDepth":51,"depth":51,"links":100714},[100715,100716,100717,100718,100719,100720,100721],{"id":100263,"depth":51,"text":100264},{"id":100378,"depth":51,"text":100379},{"id":100585,"depth":51,"text":100586},{"id":100594,"depth":51,"text":100595},{"id":100637,"depth":51,"text":100638},{"id":100658,"depth":51,"text":100659},{"id":100679,"depth":51,"text":100680},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100227,"description":196},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100728,"title":100729,"body":100730,"description":196,"extension":197,"meta":100734,"navigation":79,"path":100735,"seo":100736,"stem":100737,"__hash__":100738},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100731,"toc":100732},[],{"title":37,"searchDepth":51,"depth":51,"links":100733},[],{"category":50523},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100729,"description":196},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100740,"title":100741,"body":100742,"description":37,"extension":197,"meta":102750,"navigation":79,"path":102751,"seo":102752,"stem":102753,"__hash__":102754},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100743,"toc":102726},[100744,100747,100751,100754,100757,100763,100766,100789,100792,100826,100829,100870,100874,100877,100970,100973,101017,101020,101037,101040,101054,101057,101060,101105,101108,101145,101149,101152,101158,101163,101183,101187,101190,101256,101259,101277,101281,101284,101313,101323,101329,101333,101336,101342,101353,101357,101360,101390,101393,101673,101676,101679,101690,101693,101696,101718,101725,101728,101746,101749,101752,101766,101774,101777,101803,101809,101812,101815,101825,101837,101857,101866,101886,101896,101920,101933,101947,101952,101993,102010,102035,102047,102067,102073,102118,102137,102154,102167,102183,102190,102202,102211,102246,102267,102292,102305,102329,102344,102369,102372,102393,102402,102405,102416,102420,102423,102429,102441,102448,102452,102455,102467,102470,102484,102487,102497,102507,102510,102550,102553,102557,102563,102566,102580,102584,102587,102620,102624,102627,102650,102658,102661,102667,102673,102676,102679,102707,102711,102714,102720,102723],[10,100745,100741],{"id":100746},"_1环境安装与第一个-mujoco-程序",[15,100748,100750],{"id":100749},"_1目标说明","1.目标说明",[20,100752,100753],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[20,100755,100756],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[32,100758,100761],{"className":100759,"code":100760,"language":5325,"meta":37},[5323],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[24,100762,100760],{"__ignoreMap":37},[20,100764,100765],{},"需要掌握:",[224,100767,100768,100771,100774,100779,100784],{},[227,100769,100770],{},"Fedora 44 下 MuJoCo 的系统依赖",[227,100772,100773],{},"Python 虚拟环境创建",[227,100775,100776],{},[24,100777,100778],{},"mujoco.MjModel",[227,100780,100781],{},[24,100782,100783],{},"mujoco.MjData",[227,100785,100786],{},[24,100787,100788],{},"mujoco.mj_step(model, data)",[20,100790,100791],{},"MuJoCo 中最重要的两个对象:",[411,100793,100794,100804],{},[414,100795,100796],{},[417,100797,100798,100801],{},[420,100799,100800],{"align":23874},"对象",[420,100802,100803],{"align":23874},"含义",[458,100805,100806,100816],{},[417,100807,100808,100813],{},[463,100809,100810],{"align":23874},[24,100811,100812],{},"MjModel",[463,100814,100815],{"align":23874},"模型结构，来自 XML，基本不随时间变化",[417,100817,100818,100823],{},[463,100819,100820],{"align":23874},[24,100821,100822],{},"MjData",[463,100824,100825],{"align":23874},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[20,100827,100828],{},"可以先用一个类比理解：",[411,100830,100831,100841],{},[414,100832,100833],{},[417,100834,100835,100838],{},[420,100836,100837],{"align":23874},"类比",[420,100839,100840],{"align":23874},"MuJoCo 对象",[458,100842,100843,100852,100861],{},[417,100844,100845,100848],{},[463,100846,100847],{"align":23874},"游戏地图和角色配置",[463,100849,100850],{"align":23874},[24,100851,100812],{},[417,100853,100854,100857],{},[463,100855,100856],{"align":23874},"游戏运行到当前帧的状态",[463,100858,100859],{"align":23874},[24,100860,100822],{},[417,100862,100863,100866],{},[463,100864,100865],{"align":23874},"前进一帧",[463,100867,100868],{"align":23874},[24,100869,100788],{},[15,100871,100873],{"id":100872},"_2环境与依赖安装","2.环境与依赖安装",[20,100875,100876],{},"Fedora 44 系统依赖:",[32,100878,100880],{"className":34,"code":100879,"language":36,"meta":37,"style":37},"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",[24,100881,100882,100894,100907,100920,100930,100940,100959],{"__ignoreMap":37},[41,100883,100884,100886,100888,100890,100892],{"class":43,"line":44},[41,100885,24713],{"class":54},[41,100887,26418],{"class":378},[41,100889,23970],{"class":378},[41,100891,26503],{"class":58},[41,100893,59],{"class":58},[41,100895,100896,100899,100902,100905],{"class":43,"line":51},[41,100897,100898],{"class":378},"  python3",[41,100900,100901],{"class":378}," python3-pip",[41,100903,100904],{"class":378}," python3-virtualenv",[41,100906,59],{"class":58},[41,100908,100909,100912,100915,100918],{"class":43,"line":62},[41,100910,100911],{"class":378},"  mesa-libGL",[41,100913,100914],{"class":378}," mesa-libGLU",[41,100916,100917],{"class":378}," mesa-dri-drivers",[41,100919,59],{"class":58},[41,100921,100922,100925,100928],{"class":43,"line":70},[41,100923,100924],{"class":378},"  libglvnd-glx",[41,100926,100927],{"class":378}," libglvnd-opengl",[41,100929,59],{"class":58},[41,100931,100932,100935,100938],{"class":43,"line":76},[41,100933,100934],{"class":378},"  glfw",[41,100936,100937],{"class":378}," glfw-devel",[41,100939,59],{"class":58},[41,100941,100942,100945,100948,100951,100954,100957],{"class":43,"line":83},[41,100943,100944],{"class":378},"  libX11",[41,100946,100947],{"class":378}," libXcursor",[41,100949,100950],{"class":378}," libXi",[41,100952,100953],{"class":378}," libXinerama",[41,100955,100956],{"class":378}," libXrandr",[41,100958,59],{"class":58},[41,100960,100961,100964,100967],{"class":43,"line":89},[41,100962,100963],{"class":378},"  gcc",[41,100965,100966],{"class":378}," gcc-c++",[41,100968,100969],{"class":378}," make\n",[20,100971,100972],{},"创建 Python 环境:",[32,100974,100976],{"className":34,"code":100975,"language":36,"meta":37,"style":37},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[24,100977,100978,100992,101000],{"__ignoreMap":37},[41,100979,100980,100983,100986,100989],{"class":43,"line":44},[41,100981,100982],{"class":54},"python3",[41,100984,100985],{"class":58}," -m",[41,100987,100988],{"class":378}," venv",[41,100990,100991],{"class":378}," .venv\n",[41,100993,100994,100997],{"class":43,"line":51},[41,100995,100996],{"class":58},"source",[41,100998,100999],{"class":378}," .venv\u002Fbin\u002Factivate\n",[41,101001,101002,101004,101006,101009,101011,101014],{"class":43,"line":62},[41,101003,30483],{"class":54},[41,101005,100985],{"class":58},[41,101007,101008],{"class":378}," pip",[41,101010,23970],{"class":378},[41,101012,101013],{"class":58}," --upgrade",[41,101015,101016],{"class":378}," pip\n",[20,101018,101019],{},"pip 安装:",[32,101021,101023],{"className":34,"code":101022,"language":36,"meta":37,"style":37},"pip install \"mujoco>=2.3\" numpy\n",[24,101024,101025],{"__ignoreMap":37},[41,101026,101027,101029,101031,101034],{"class":43,"line":44},[41,101028,23967],{"class":54},[41,101030,23970],{"class":378},[41,101032,101033],{"class":378}," \"mujoco>=2.3\"",[41,101035,101036],{"class":378}," numpy\n",[20,101038,101039],{},"安装完成后，先做最小检查：",[32,101041,101043],{"className":34,"code":101042,"language":36,"meta":37,"style":37},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[24,101044,101045],{"__ignoreMap":37},[41,101046,101047,101049,101051],{"class":43,"line":44},[41,101048,30483],{"class":54},[41,101050,30461],{"class":58},[41,101052,101053],{"class":378}," \"import mujoco; print(mujoco.__version__)\"\n",[20,101055,101056],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[20,101058,101059],{},"conda 安装:",[32,101061,101063],{"className":34,"code":101062,"language":36,"meta":37,"style":37},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[24,101064,101065,101085,101095],{"__ignoreMap":37},[41,101066,101067,101069,101071,101073,101076,101079,101082],{"class":43,"line":44},[41,101068,30433],{"class":54},[41,101070,29279],{"class":378},[41,101072,25218],{"class":58},[41,101074,101075],{"class":378}," mujoco-study",[41,101077,101078],{"class":378}," python=",[41,101080,101081],{"class":58},"3.10",[41,101083,101084],{"class":58}," -y\n",[41,101086,101087,101089,101092],{"class":43,"line":51},[41,101088,30433],{"class":54},[41,101090,101091],{"class":378}," activate",[41,101093,101094],{"class":378}," mujoco-study\n",[41,101096,101097,101099,101101,101103],{"class":43,"line":62},[41,101098,23967],{"class":54},[41,101100,23970],{"class":378},[41,101102,101033],{"class":378},[41,101104,101036],{"class":378},[20,101106,101107],{},"版本冲突说明:",[224,101109,101110,101116,101126,101135],{},[227,101111,101112,101113,28488],{},"不要安装 ",[24,101114,101115],{},"mujoco-py",[227,101117,101118,101119,101121,101122,101125],{},"如果旧项目里同时安装了 ",[24,101120,101115],{}," 和 ",[24,101123,101124],{},"mujoco","，建议新建干净虚拟环境。",[227,101127,101128,101131,101132,28488],{},[24,101129,101130],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[24,101133,101134],{},"~\u002F.mujoco\u002Fmujoco210",[227,101136,101137,101138,82642,101141,101144],{},"离屏渲染可能涉及 OpenGL 后端，",[24,101139,101140],{},"MUJOCO_GL=egl",[24,101142,101143],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[15,101146,101148],{"id":101147},"_3核心概念解释","3.核心概念解释",[20,101150,101151],{},"MuJoCo 的基本执行流程:",[32,101153,101156],{"className":101154,"code":101155,"language":5325,"meta":37},[5323],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[24,101157,101155],{"__ignoreMap":37},[20,101159,101160,101162],{},[24,101161,100812],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[20,101164,101165,101167,101168,486,101171,486,101174,486,101177,486,101180,28488],{},[24,101166,100822],{}," 存放仿真运行时状态，例如 ",[24,101169,101170],{},"data.time",[24,101172,101173],{},"data.qpos",[24,101175,101176],{},"data.qvel",[24,101178,101179],{},"data.ctrl",[24,101181,101182],{},"data.xpos",[241,101184,101186],{"id":101185},"xml-是什么","XML 是什么",[20,101188,101189],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[32,101191,101193],{"className":53170,"code":101192,"language":53172,"meta":37,"style":37},"\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",[24,101194,101195,101217,101248],{"__ignoreMap":37},[41,101196,101197,101199,101201,101203,101205,101207,101210,101212,101215],{"class":43,"line":44},[41,101198,1183],{"class":275},[41,101200,51903],{"class":51403},[41,101202,15058],{"class":54},[41,101204,321],{"class":275},[41,101206,53594],{"class":378},[41,101208,101209],{"class":54}," pos",[41,101211,321],{"class":275},[41,101213,101214],{"class":378},"\"0 0 1\"",[41,101216,51410],{"class":275},[41,101218,101219,101221,101224,101226,101228,101231,101233,101235,101237,101240,101242,101245],{"class":43,"line":51},[41,101220,52247],{"class":275},[41,101222,101223],{"class":51403},"geom",[41,101225,15058],{"class":54},[41,101227,321],{"class":275},[41,101229,101230],{"class":378},"\"box_geom\"",[41,101232,53927],{"class":54},[41,101234,321],{"class":275},[41,101236,53594],{"class":378},[41,101238,101239],{"class":54}," size",[41,101241,321],{"class":275},[41,101243,101244],{"class":378},"\"0.1 0.1 0.1\"",[41,101246,101247],{"class":275},"\u002F>\n",[41,101249,101250,101252,101254],{"class":43,"line":62},[41,101251,51888],{"class":275},[41,101253,51903],{"class":51403},[41,101255,51410],{"class":275},[20,101257,101258],{},"这段意思是：",[224,101260,101261,101267,101274],{},[227,101262,101263,101264,101266],{},"创建一个叫 ",[24,101265,53817],{}," 的刚体。",[227,101268,101269,101270,101273],{},"它初始放在 ",[24,101271,101272],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[227,101275,101276],{},"它里面有一个盒子形状的几何体。",[241,101278,101280],{"id":101279},"timestep-是什么","timestep 是什么",[20,101282,101283],{},"XML 里的：",[32,101285,101287],{"className":53170,"code":101286,"language":53172,"meta":37,"style":37},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[24,101288,101289],{"__ignoreMap":37},[41,101290,101291,101293,101295,101298,101300,101303,101306,101308,101311],{"class":43,"line":44},[41,101292,1183],{"class":275},[41,101294,69269],{"class":51403},[41,101296,101297],{"class":54}," timestep",[41,101299,321],{"class":275},[41,101301,101302],{"class":378},"\"0.01\"",[41,101304,101305],{"class":54}," gravity",[41,101307,321],{"class":275},[41,101309,101310],{"class":378},"\"0 0 -9.81\"",[41,101312,101247],{"class":275},[20,101314,101315,101316,101319,101320,101322],{},"表示每调用一次 ",[24,101317,101318],{},"mj_step","，仿真时间前进 ",[24,101321,39089],{}," 秒。循环 100 次，大约就是 1 秒：",[32,101324,101327],{"className":101325,"code":101326,"language":5325,"meta":37},[5323],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[24,101328,101326],{"__ignoreMap":37},[241,101330,101332],{"id":101331},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[20,101334,101335],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[32,101337,101340],{"className":101338,"code":101339,"language":5325,"meta":37},[5323],"x y z qw qx qy qz\n",[24,101341,101339],{"__ignoreMap":37},[20,101343,101344,101345,101348,101349,101352],{},"表示一个自由刚体的位置和姿态。其中 ",[24,101346,101347],{},"x y z"," 是位置，",[24,101350,101351],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[15,101354,101356],{"id":101355},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[20,101358,101359],{},"新建文件:",[32,101361,101363],{"className":34,"code":101362,"language":36,"meta":37,"style":37},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[24,101364,101365,101375,101382],{"__ignoreMap":37},[41,101366,101367,101370,101372],{"class":43,"line":44},[41,101368,101369],{"class":54},"mkdir",[41,101371,29319],{"class":58},[41,101373,101374],{"class":378}," mujoco_tutorial\n",[41,101376,101377,101380],{"class":43,"line":51},[41,101378,101379],{"class":58},"cd",[41,101381,101374],{"class":378},[41,101383,101384,101387],{"class":43,"line":62},[41,101385,101386],{"class":54},"touch",[41,101388,101389],{"class":378}," ch1_first_sim.py\n",[20,101391,101392],{},"写入:",[32,101394,101396],{"className":30481,"code":101395,"language":30483,"meta":37,"style":37},"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",[24,101397,101398,101405,101409,101413,101423,101428,101433,101437,101442,101447,101451,101456,101461,101466,101471,101476,101481,101485,101489,101493,101506,101520,101530,101534,101546,101558,101570,101582,101594,101598,101615,101620,101624,101635,101646,101650,101654,101668],{"__ignoreMap":37},[41,101399,101400,101402],{"class":43,"line":44},[41,101401,30495],{"class":271},[41,101403,101404],{"class":275}," mujoco\n",[41,101406,101407],{"class":43,"line":51},[41,101408,80],{"emptyLinePlaceholder":79},[41,101410,101411],{"class":43,"line":62},[41,101412,80],{"emptyLinePlaceholder":79},[41,101414,101415,101418,101420],{"class":43,"line":70},[41,101416,101417],{"class":58},"XML",[41,101419,13702],{"class":271},[41,101421,101422],{"class":378}," \"\"\"\n",[41,101424,101425],{"class":43,"line":76},[41,101426,101427],{"class":378},"\u003Cmujoco model=\"first_sim\">\n",[41,101429,101430],{"class":43,"line":83},[41,101431,101432],{"class":378},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[41,101434,101435],{"class":43,"line":89},[41,101436,80],{"emptyLinePlaceholder":79},[41,101438,101439],{"class":43,"line":96},[41,101440,101441],{"class":378},"  \u003Cworldbody>\n",[41,101443,101444],{"class":43,"line":104},[41,101445,101446],{"class":378},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[41,101448,101449],{"class":43,"line":176},[41,101450,80],{"emptyLinePlaceholder":79},[41,101452,101453],{"class":43,"line":184},[41,101454,101455],{"class":378},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[41,101457,101458],{"class":43,"line":1757},[41,101459,101460],{"class":378},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[41,101462,101463],{"class":43,"line":1763},[41,101464,101465],{"class":378},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[41,101467,101468],{"class":43,"line":1768},[41,101469,101470],{"class":378},"    \u003C\u002Fbody>\n",[41,101472,101473],{"class":43,"line":1782},[41,101474,101475],{"class":378},"  \u003C\u002Fworldbody>\n",[41,101477,101478],{"class":43,"line":1787},[41,101479,101480],{"class":378},"\u003C\u002Fmujoco>\n",[41,101482,101483],{"class":43,"line":1793},[41,101484,95801],{"class":378},[41,101486,101487],{"class":43,"line":1814},[41,101488,80],{"emptyLinePlaceholder":79},[41,101490,101491],{"class":43,"line":1819},[41,101492,80],{"emptyLinePlaceholder":79},[41,101494,101495,101497,101499,101502,101504],{"class":43,"line":1833},[41,101496,32050],{"class":271},[41,101498,2112],{"class":54},[41,101500,101501],{"class":275},"() -> ",[41,101503,95789],{"class":58},[41,101505,3877],{"class":275},[41,101507,101508,101511,101513,101516,101518],{"class":43,"line":1838},[41,101509,101510],{"class":275},"    model ",[41,101512,321],{"class":271},[41,101514,101515],{"class":275}," mujoco.MjModel.from_xml_string(",[41,101517,101417],{"class":58},[41,101519,282],{"class":275},[41,101521,101522,101525,101527],{"class":43,"line":1867},[41,101523,101524],{"class":275},"    data ",[41,101526,321],{"class":271},[41,101528,101529],{"class":275}," mujoco.MjData(model)\n",[41,101531,101532],{"class":43,"line":1872},[41,101533,80],{"emptyLinePlaceholder":79},[41,101535,101536,101538,101540,101543],{"class":43,"line":1889},[41,101537,31402],{"class":58},[41,101539,276],{"class":275},[41,101541,101542],{"class":378},"\"nq:\"",[41,101544,101545],{"class":275},", model.nq)\n",[41,101547,101548,101550,101552,101555],{"class":43,"line":1894},[41,101549,31402],{"class":58},[41,101551,276],{"class":275},[41,101553,101554],{"class":378},"\"nv:\"",[41,101556,101557],{"class":275},", model.nv)\n",[41,101559,101560,101562,101564,101567],{"class":43,"line":1899},[41,101561,31402],{"class":58},[41,101563,276],{"class":275},[41,101565,101566],{"class":378},"\"nu:\"",[41,101568,101569],{"class":275},", model.nu)\n",[41,101571,101572,101574,101576,101579],{"class":43,"line":1904},[41,101573,31402],{"class":58},[41,101575,276],{"class":275},[41,101577,101578],{"class":378},"\"initial time:\"",[41,101580,101581],{"class":275},", data.time)\n",[41,101583,101584,101586,101588,101591],{"class":43,"line":1918},[41,101585,31402],{"class":58},[41,101587,276],{"class":275},[41,101589,101590],{"class":378},"\"initial qpos:\"",[41,101592,101593],{"class":275},", data.qpos.copy())\n",[41,101595,101596],{"class":43,"line":1923},[41,101597,80],{"emptyLinePlaceholder":79},[41,101599,101600,101602,101605,101607,101609,101611,101613],{"class":43,"line":2715},[41,101601,3339],{"class":271},[41,101603,101604],{"class":275}," _ ",[41,101606,26146],{"class":271},[41,101608,32546],{"class":58},[41,101610,276],{"class":275},[41,101612,584],{"class":58},[41,101614,30889],{"class":275},[41,101616,101617],{"class":43,"line":2729},[41,101618,101619],{"class":275},"        mujoco.mj_step(model, data)\n",[41,101621,101622],{"class":43,"line":2737},[41,101623,80],{"emptyLinePlaceholder":79},[41,101625,101626,101628,101630,101633],{"class":43,"line":2742},[41,101627,31402],{"class":58},[41,101629,276],{"class":275},[41,101631,101632],{"class":378},"\"final time:\"",[41,101634,101581],{"class":275},[41,101636,101637,101639,101641,101644],{"class":43,"line":2748},[41,101638,31402],{"class":58},[41,101640,276],{"class":275},[41,101642,101643],{"class":378},"\"final qpos:\"",[41,101645,101593],{"class":275},[41,101647,101648],{"class":43,"line":2754},[41,101649,80],{"emptyLinePlaceholder":79},[41,101651,101652],{"class":43,"line":2759},[41,101653,80],{"emptyLinePlaceholder":79},[41,101655,101656,101658,101660,101663,101666],{"class":43,"line":8086},[41,101657,1672],{"class":271},[41,101659,31323],{"class":58},[41,101661,101662],{"class":271}," ==",[41,101664,101665],{"class":378}," \"__main__\"",[41,101667,3877],{"class":275},[41,101669,101670],{"class":43,"line":8110},[41,101671,101672],{"class":275},"    main()\n",[241,101674,101675],{"id":101675},"代码逐段解释",[20,101677,101678],{},"导入库：",[32,101680,101682],{"className":30481,"code":101681,"language":30483,"meta":37,"style":37},"import mujoco\n",[24,101683,101684],{"__ignoreMap":37},[41,101685,101686,101688],{"class":43,"line":44},[41,101687,30495],{"class":271},[41,101689,101404],{"class":275},[20,101691,101692],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[20,101694,101695],{},"定义 XML：",[32,101697,101699],{"className":30481,"code":101698,"language":30483,"meta":37,"style":37},"XML = \"\"\"\n...\n\"\"\"\n",[24,101700,101701,101709,101714],{"__ignoreMap":37},[41,101702,101703,101705,101707],{"class":43,"line":44},[41,101704,101417],{"class":58},[41,101706,13702],{"class":271},[41,101708,101422],{"class":378},[41,101710,101711],{"class":43,"line":51},[41,101712,101713],{"class":378},"...\n",[41,101715,101716],{"class":43,"line":62},[41,101717,95801],{"class":378},[20,101719,101720,101721,101724],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[24,101722,101723],{},"freejoint"," 的方块。",[20,101726,101727],{},"编译模型：",[32,101729,101731],{"className":30481,"code":101730,"language":30483,"meta":37,"style":37},"model = mujoco.MjModel.from_xml_string(XML)\n",[24,101732,101733],{"__ignoreMap":37},[41,101734,101735,101738,101740,101742,101744],{"class":43,"line":44},[41,101736,101737],{"class":275},"model ",[41,101739,321],{"class":271},[41,101741,101515],{"class":275},[41,101743,101417],{"class":58},[41,101745,282],{"class":275},[20,101747,101748],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[20,101750,101751],{},"创建数据：",[32,101753,101755],{"className":30481,"code":101754,"language":30483,"meta":37,"style":37},"data = mujoco.MjData(model)\n",[24,101756,101757],{"__ignoreMap":37},[41,101758,101759,101762,101764],{"class":43,"line":44},[41,101760,101761],{"class":275},"data ",[41,101763,321],{"class":271},[41,101765,101529],{"class":275},[20,101767,101768,101770,101771,101773],{},[24,101769,33504],{}," 会保存仿真当前状态。刚创建时，时间是 ",[24,101772,465],{},"，方块还在初始位置。",[20,101775,101776],{},"推进仿真：",[32,101778,101780],{"className":30481,"code":101779,"language":30483,"meta":37,"style":37},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[24,101781,101782,101798],{"__ignoreMap":37},[41,101783,101784,101786,101788,101790,101792,101794,101796],{"class":43,"line":44},[41,101785,3163],{"class":271},[41,101787,101604],{"class":275},[41,101789,26146],{"class":271},[41,101791,32546],{"class":58},[41,101793,276],{"class":275},[41,101795,584],{"class":58},[41,101797,30889],{"class":275},[41,101799,101800],{"class":43,"line":51},[41,101801,101802],{"class":275},"    mujoco.mj_step(model, data)\n",[20,101804,101805,101806,101808],{},"每次 ",[24,101807,101318],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[241,101810,101811],{"id":101811},"代码逐行细讲",[20,101813,101814],{},"下面把完整代码按新手视角拆开讲。",[32,101816,101817],{"className":30481,"code":101681,"language":30483,"meta":37,"style":37},[24,101818,101819],{"__ignoreMap":37},[41,101820,101821,101823],{"class":43,"line":44},[41,101822,30495],{"class":271},[41,101824,101404],{"class":275},[20,101826,101827,101829,101830,486,101832,486,101834,28488],{},[24,101828,30495],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[24,101831,100778],{},[24,101833,100783],{},[24,101835,101836],{},"mujoco.mj_step",[32,101838,101839],{"className":30481,"code":101698,"language":30483,"meta":37,"style":37},[24,101840,101841,101849,101853],{"__ignoreMap":37},[41,101842,101843,101845,101847],{"class":43,"line":44},[41,101844,101417],{"class":58},[41,101846,13702],{"class":271},[41,101848,101422],{"class":378},[41,101850,101851],{"class":43,"line":51},[41,101852,101713],{"class":378},[41,101854,101855],{"class":43,"line":62},[41,101856,95801],{"class":378},[20,101858,101859,101861,101862,101865],{},[24,101860,101417],{}," 是一个变量名。右边的三引号 ",[24,101863,101864],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[32,101867,101868],{"className":53170,"code":101427,"language":53172,"meta":37,"style":37},[24,101869,101870],{"__ignoreMap":37},[41,101871,101872,101874,101876,101879,101881,101884],{"class":43,"line":44},[41,101873,1183],{"class":275},[41,101875,101124],{"class":51403},[41,101877,101878],{"class":54}," model",[41,101880,321],{"class":275},[41,101882,101883],{"class":378},"\"first_sim\"",[41,101885,51410],{"class":275},[20,101887,101888,101889,101892,101893,28488],{},"这是 XML 的根标签。",[24,101890,101891],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[24,101894,101895],{},"first_sim",[32,101897,101898],{"className":53170,"code":101286,"language":53172,"meta":37,"style":37},[24,101899,101900],{"__ignoreMap":37},[41,101901,101902,101904,101906,101908,101910,101912,101914,101916,101918],{"class":43,"line":44},[41,101903,1183],{"class":275},[41,101905,69269],{"class":51403},[41,101907,101297],{"class":54},[41,101909,321],{"class":275},[41,101911,101302],{"class":378},[41,101913,101305],{"class":54},[41,101915,321],{"class":275},[41,101917,101310],{"class":378},[41,101919,101247],{"class":275},[20,101921,101922,101924,101925,101928,101929,101932],{},[24,101923,69269],{}," 用来设置仿真参数。",[24,101926,101927],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[24,101930,101931],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[32,101934,101936],{"className":53170,"code":101935,"language":53172,"meta":37,"style":37},"\u003Cworldbody>\n",[24,101937,101938],{"__ignoreMap":37},[41,101939,101940,101942,101945],{"class":43,"line":44},[41,101941,1183],{"class":275},[41,101943,101944],{"class":51403},"worldbody",[41,101946,51410],{"class":275},[20,101948,101949,101951],{},[24,101950,101944],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[32,101953,101955],{"className":53170,"code":101954,"language":53172,"meta":37,"style":37},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[24,101956,101957],{"__ignoreMap":37},[41,101958,101959,101961,101963,101965,101967,101970,101972,101974,101977,101979,101981,101984,101986,101988,101991],{"class":43,"line":44},[41,101960,1183],{"class":275},[41,101962,101223],{"class":51403},[41,101964,15058],{"class":54},[41,101966,321],{"class":275},[41,101968,101969],{"class":378},"\"floor\"",[41,101971,53927],{"class":54},[41,101973,321],{"class":275},[41,101975,101976],{"class":378},"\"plane\"",[41,101978,101239],{"class":54},[41,101980,321],{"class":275},[41,101982,101983],{"class":378},"\"2 2 0.1\"",[41,101985,78870],{"class":54},[41,101987,321],{"class":275},[41,101989,101990],{"class":378},"\"0.8 0.8 0.8 1\"",[41,101992,101247],{"class":275},[20,101994,101995,101996,101998,101999,102002,102003,102006,102007,102009],{},"这行创建地面。",[24,101997,101223],{}," 是几何体。",[24,102000,102001],{},"name=\"floor\""," 是名字。",[24,102004,102005],{},"type=\"plane\""," 表示平面。",[24,102008,55213],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[32,102011,102013],{"className":53170,"code":102012,"language":53172,"meta":37,"style":37},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[24,102014,102015],{"__ignoreMap":37},[41,102016,102017,102019,102021,102023,102025,102027,102029,102031,102033],{"class":43,"line":44},[41,102018,1183],{"class":275},[41,102020,51903],{"class":51403},[41,102022,15058],{"class":54},[41,102024,321],{"class":275},[41,102026,53594],{"class":378},[41,102028,101209],{"class":54},[41,102030,321],{"class":275},[41,102032,101214],{"class":378},[41,102034,51410],{"class":275},[20,102036,102037,102038,28488,102040,102043,102044,102046],{},"这行创建一个刚体，名字叫 ",[24,102039,53817],{},[24,102041,102042],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[24,102045,101272],{},"，也就是离地面 1 米高。",[32,102048,102050],{"className":53170,"code":102049,"language":53172,"meta":37,"style":37},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[24,102051,102052],{"__ignoreMap":37},[41,102053,102054,102056,102058,102060,102062,102065],{"class":43,"line":44},[41,102055,1183],{"class":275},[41,102057,101723],{"class":51403},[41,102059,15058],{"class":54},[41,102061,321],{"class":275},[41,102063,102064],{"class":378},"\"box_free\"",[41,102066,101247],{"class":275},[20,102068,102069,102070,102072],{},"这行很重要。",[24,102071,101723],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[32,102074,102076],{"className":53170,"code":102075,"language":53172,"meta":37,"style":37},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[24,102077,102078],{"__ignoreMap":37},[41,102079,102080,102082,102084,102086,102088,102090,102092,102094,102096,102098,102100,102102,102105,102107,102109,102111,102113,102116],{"class":43,"line":44},[41,102081,1183],{"class":275},[41,102083,101223],{"class":51403},[41,102085,15058],{"class":54},[41,102087,321],{"class":275},[41,102089,101230],{"class":378},[41,102091,53927],{"class":54},[41,102093,321],{"class":275},[41,102095,53594],{"class":378},[41,102097,101239],{"class":54},[41,102099,321],{"class":275},[41,102101,101244],{"class":378},[41,102103,102104],{"class":54}," mass",[41,102106,321],{"class":275},[41,102108,3816],{"class":378},[41,102110,78870],{"class":54},[41,102112,321],{"class":275},[41,102114,102115],{"class":378},"\"1 0 0 1\"",[41,102117,101247],{"class":275},[20,102119,102120,102121,102124,102125,102128,102129,102132,102133,102136],{},"这行给 box body 添加一个盒子形状。",[24,102122,102123],{},"type=\"box\""," 表示形状是盒子。",[24,102126,102127],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[24,102130,102131],{},"mass=\"1\""," 表示质量是 1。",[24,102134,102135],{},"rgba=\"1 0 0 1\""," 表示红色。",[32,102138,102140],{"className":30481,"code":102139,"language":30483,"meta":37,"style":37},"def main() -> None:\n",[24,102141,102142],{"__ignoreMap":37},[41,102143,102144,102146,102148,102150,102152],{"class":43,"line":44},[41,102145,32050],{"class":271},[41,102147,2112],{"class":54},[41,102149,101501],{"class":275},[41,102151,95789],{"class":58},[41,102153,3877],{"class":275},[20,102155,102156,102158,102159,102162,102163,102166],{},[24,102157,32050],{}," 用来定义函数。这里定义了一个叫 ",[24,102160,102161],{},"main"," 的函数。",[24,102164,102165],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[32,102168,102169],{"className":30481,"code":101730,"language":30483,"meta":37,"style":37},[24,102170,102171],{"__ignoreMap":37},[41,102172,102173,102175,102177,102179,102181],{"class":43,"line":44},[41,102174,101737],{"class":275},[41,102176,321],{"class":271},[41,102178,101515],{"class":275},[41,102180,101417],{"class":58},[41,102182,282],{"class":275},[20,102184,102185,102186,102189],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[24,102187,102188],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[32,102191,102192],{"className":30481,"code":101754,"language":30483,"meta":37,"style":37},[24,102193,102194],{"__ignoreMap":37},[41,102195,102196,102198,102200],{"class":43,"line":44},[41,102197,101761],{"class":275},[41,102199,321],{"class":271},[41,102201,101529],{"class":275},[20,102203,102204,102205,102207,102208,102210],{},"这行创建仿真数据。",[24,102206,33504],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[24,102209,33504],{}," 都会变化。",[32,102212,102214],{"className":30481,"code":102213,"language":30483,"meta":37,"style":37},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[24,102215,102216,102226,102236],{"__ignoreMap":37},[41,102217,102218,102220,102222,102224],{"class":43,"line":44},[41,102219,30518],{"class":58},[41,102221,276],{"class":275},[41,102223,101542],{"class":378},[41,102225,101545],{"class":275},[41,102227,102228,102230,102232,102234],{"class":43,"line":51},[41,102229,30518],{"class":58},[41,102231,276],{"class":275},[41,102233,101554],{"class":378},[41,102235,101557],{"class":275},[41,102237,102238,102240,102242,102244],{"class":43,"line":62},[41,102239,30518],{"class":58},[41,102241,276],{"class":275},[41,102243,101566],{"class":378},[41,102245,101569],{"class":275},[20,102247,102248,102250,102251,102254,102255,102258,102259,102262,102263,102266],{},[24,102249,30518],{}," 用来输出信息。",[24,102252,102253],{},"model.nq"," 是位置变量数量，",[24,102256,102257],{},"model.nv"," 是速度变量数量，",[24,102260,102261],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[24,102264,102265],{},"nu"," 是 0。",[32,102268,102270],{"className":30481,"code":102269,"language":30483,"meta":37,"style":37},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[24,102271,102272,102282],{"__ignoreMap":37},[41,102273,102274,102276,102278,102280],{"class":43,"line":44},[41,102275,30518],{"class":58},[41,102277,276],{"class":275},[41,102279,101578],{"class":378},[41,102281,101581],{"class":275},[41,102283,102284,102286,102288,102290],{"class":43,"line":51},[41,102285,30518],{"class":58},[41,102287,276],{"class":275},[41,102289,101590],{"class":378},[41,102291,101593],{"class":275},[20,102293,102294,102295,102297,102298,102300,102301,102304],{},"这里打印初始时间和初始位置。",[24,102296,101170],{}," 一开始是 0。",[24,102299,101173],{}," 是位置数组。",[24,102302,102303],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[32,102306,102307],{"className":30481,"code":101779,"language":30483,"meta":37,"style":37},[24,102308,102309,102325],{"__ignoreMap":37},[41,102310,102311,102313,102315,102317,102319,102321,102323],{"class":43,"line":44},[41,102312,3163],{"class":271},[41,102314,101604],{"class":275},[41,102316,26146],{"class":271},[41,102318,32546],{"class":58},[41,102320,276],{"class":275},[41,102322,584],{"class":58},[41,102324,30889],{"class":275},[41,102326,102327],{"class":43,"line":51},[41,102328,101802],{"class":275},[20,102330,102331,102333,102334,102337,102338,102340,102341,102343],{},[24,102332,3163],{}," 是循环。",[24,102335,102336],{},"range(100)"," 表示循环 100 次。",[24,102339,1265],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[24,102342,101318],{},"，仿真就前进一步。",[32,102345,102347],{"className":30481,"code":102346,"language":30483,"meta":37,"style":37},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[24,102348,102349,102359],{"__ignoreMap":37},[41,102350,102351,102353,102355,102357],{"class":43,"line":44},[41,102352,30518],{"class":58},[41,102354,276],{"class":275},[41,102356,101632],{"class":378},[41,102358,101581],{"class":275},[41,102360,102361,102363,102365,102367],{"class":43,"line":51},[41,102362,30518],{"class":58},[41,102364,276],{"class":275},[41,102366,101643],{"class":378},[41,102368,101593],{"class":275},[20,102370,102371],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[32,102373,102375],{"className":30481,"code":102374,"language":30483,"meta":37,"style":37},"if __name__ == \"__main__\":\n    main()\n",[24,102376,102377,102389],{"__ignoreMap":37},[41,102378,102379,102381,102383,102385,102387],{"class":43,"line":44},[41,102380,1672],{"class":271},[41,102382,31323],{"class":58},[41,102384,101662],{"class":271},[41,102386,101665],{"class":378},[41,102388,3877],{"class":275},[41,102390,102391],{"class":43,"line":51},[41,102392,101672],{"class":275},[20,102394,102395,102396,102399,102400,28488],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[24,102397,102398],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[24,102401,102398],{},[20,102403,102404],{},"运行:",[32,102406,102408],{"className":34,"code":102407,"language":36,"meta":37,"style":37},"python ch1_first_sim.py\n",[24,102409,102410],{"__ignoreMap":37},[41,102411,102412,102414],{"class":43,"line":44},[41,102413,30483],{"class":54},[41,102415,101389],{"class":378},[15,102417,102419],{"id":102418},"_5运行结果说明","5.运行结果说明",[20,102421,102422],{},"你应该看到类似输出:",[32,102424,102427],{"className":102425,"code":102426,"language":5325,"meta":37},[5323],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[24,102428,102426],{"__ignoreMap":37},[20,102430,102431,102433,102434,102437,102438,28488],{},[24,102432,101723],{}," 有 7 个位置变量: ",[24,102435,102436],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[24,102439,102440],{},"vx vy vz wx wy wz",[20,102442,102443,102444,102447],{},"你还会看到 ",[24,102445,102446],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[15,102449,102451],{"id":102450},"_6验证步骤","6.验证步骤",[20,102453,102454],{},"确认版本:",[32,102456,102457],{"className":34,"code":101042,"language":36,"meta":37,"style":37},[24,102458,102459],{"__ignoreMap":37},[41,102460,102461,102463,102465],{"class":43,"line":44},[41,102462,30483],{"class":54},[41,102464,30461],{"class":58},[41,102466,101053],{"class":378},[20,102468,102469],{},"确认导入的是官方 bindings:",[32,102471,102473],{"className":34,"code":102472,"language":36,"meta":37,"style":37},"python -c \"import mujoco; print(mujoco)\"\n",[24,102474,102475],{"__ignoreMap":37},[41,102476,102477,102479,102481],{"class":43,"line":44},[41,102478,30483],{"class":54},[41,102480,30461],{"class":58},[41,102482,102483],{"class":378}," \"import mujoco; print(mujoco)\"\n",[20,102485,102486],{},"运行程序:",[32,102488,102489],{"className":34,"code":102407,"language":36,"meta":37,"style":37},[24,102490,102491],{"__ignoreMap":37},[41,102492,102493,102495],{"class":43,"line":44},[41,102494,30483],{"class":54},[41,102496,101389],{"class":378},[20,102498,102499,102500,102503,102504,28488],{},"检查 ",[24,102501,102502],{},"final time"," 是否约等于 ",[24,102505,102506],{},"1.0",[20,102508,102509],{},"再做几个小实验：",[224,102511,102512,102522,102530,102543],{},[227,102513,102514,102515,102517,102518,102521],{},"把 ",[24,102516,102042],{}," 改成 ",[24,102519,102520],{},"pos=\"0 0 2\"","，观察初始高度变化。",[227,102523,102514,102524,102517,102526,102529],{},[24,102525,101931],{},[24,102527,102528],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[227,102531,102514,102532,102517,102534,102537,102538,102540,102541,28488],{},[24,102533,101927],{},[24,102535,102536],{},"timestep=\"0.005\"","，观察 100 步后的 ",[24,102539,102502],{}," 是否变成约 ",[24,102542,35432],{},[227,102544,102545,102546,102549],{},"删除 ",[24,102547,102548],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[20,102551,102552],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[15,102554,102556],{"id":102555},"_7常见错误与解决方案","7.常见错误与解决方案",[241,102558,102560],{"id":102559},"modulenotfounderror-no-module-named-mujoco",[24,102561,102562],{},"ModuleNotFoundError: No module named 'mujoco'",[20,102564,102565],{},"解决:",[32,102567,102569],{"className":34,"code":102568,"language":36,"meta":37,"style":37},"pip install \"mujoco>=2.3\"\n",[24,102570,102571],{"__ignoreMap":37},[41,102572,102573,102575,102577],{"class":43,"line":44},[41,102574,23967],{"class":54},[41,102576,23970],{"class":378},[41,102578,102579],{"class":378}," \"mujoco>=2.3\"\n",[241,102581,102583],{"id":102582},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[20,102585,102586],{},"先安装系统依赖:",[32,102588,102590],{"className":34,"code":102589,"language":36,"meta":37,"style":37},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[24,102591,102592],{"__ignoreMap":37},[41,102593,102594,102596,102598,102600,102602,102605,102607,102610,102612,102615,102617],{"class":43,"line":44},[41,102595,24713],{"class":54},[41,102597,26418],{"class":378},[41,102599,23970],{"class":378},[41,102601,26503],{"class":58},[41,102603,102604],{"class":378}," mesa-libGL",[41,102606,100917],{"class":378},[41,102608,102609],{"class":378}," glfw",[41,102611,100937],{"class":378},[41,102613,102614],{"class":378}," libX11",[41,102616,100950],{"class":378},[41,102618,102619],{"class":378}," libXrandr\n",[241,102621,102623],{"id":102622},"xml-解析失败","XML 解析失败",[20,102625,102626],{},"检查:",[224,102628,102629,102632,102635,102641],{},[227,102630,102631],{},"标签是否闭合",[227,102633,102634],{},"属性是否带引号",[227,102636,102637,102638],{},"根节点是否是 ",[24,102639,102640],{},"\u003Cmujoco>",[227,102642,102643,102645,102646,102649],{},[24,102644,51903],{}," 是否放在 ",[24,102647,102648],{},"\u003Cworldbody>"," 内部",[241,102651,102653,102655,102656],{"id":102652},"final-time-不是严格等于-10",[24,102654,102502],{}," 不是严格等于 ",[24,102657,102506],{},[20,102659,102660],{},"这通常不是错误。浮点数计算可能得到：",[32,102662,102665],{"className":102663,"code":102664,"language":5325,"meta":37},[5323],"1.0000000000000007\n",[24,102666,102664],{"__ignoreMap":37},[20,102668,102669,102670,102672],{},"只要接近 ",[24,102671,102506],{}," 就正常。",[241,102674,102675],{"id":102675},"方块没有掉下来",[20,102677,102678],{},"检查：",[224,102680,102681,102687,102693,102698],{},[227,102682,102683,102684],{},"方块 body 里是否有 ",[24,102685,102686],{},"\u003Cfreejoint\u002F>",[227,102688,102689,102690],{},"重力是否是 ",[24,102691,102692],{},"0 0 -9.81",[227,102694,102695,102696],{},"是否真的调用了 ",[24,102697,100788],{},[227,102699,102700,102701,102703,102704],{},"你看的是否是 ",[24,102702,102446],{},"，不是 ",[24,102705,102706],{},"initial qpos",[15,102708,102710],{"id":102709},"_8本章小结","8.本章小结",[20,102712,102713],{},"本章你已经完成了 MuJoCo 的最小闭环：",[32,102715,102718],{"className":102716,"code":102717,"language":5325,"meta":37},[5323],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[24,102719,102717],{"__ignoreMap":37},[20,102721,102722],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[189,102724,102725],{},"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":37,"searchDepth":51,"depth":51,"links":102727},[102728,102729,102730,102735,102739,102740,102741,102749],{"id":100749,"depth":51,"text":100750},{"id":100872,"depth":51,"text":100873},{"id":101147,"depth":51,"text":101148,"children":102731},[102732,102733,102734],{"id":101185,"depth":62,"text":101186},{"id":101279,"depth":62,"text":101280},{"id":101331,"depth":62,"text":101332},{"id":101355,"depth":51,"text":101356,"children":102736},[102737,102738],{"id":101675,"depth":62,"text":101675},{"id":101811,"depth":62,"text":101811},{"id":102418,"depth":51,"text":102419},{"id":102450,"depth":51,"text":102451},{"id":102555,"depth":51,"text":102556,"children":102742},[102743,102744,102745,102746,102748],{"id":102559,"depth":62,"text":102562},{"id":102582,"depth":62,"text":102583},{"id":102622,"depth":62,"text":102623},{"id":102652,"depth":62,"text":102747},"final time 不是严格等于 1.0",{"id":102675,"depth":62,"text":102675},{"id":102709,"depth":51,"text":102710},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100741,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102756,"title":102757,"body":102758,"description":37,"extension":197,"meta":104414,"navigation":79,"path":104415,"seo":104416,"stem":104417,"__hash__":104418},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102759,"toc":104390},[102760,102763,102765,102768,102771,102788,102883,102886,102892,102894,102896,102920,102923,102937,102940,102981,102983,102996,102998,103001,103049,103061,103064,103067,103073,103086,103153,103156,103175,103178,103181,103187,103189,103198,103201,103205,103214,103296,103305,103309,103315,103329,103339,103341,103671,103674,103686,103688,103699,103701,103704,103722,103725,103728,103746,103757,103760,103775,103785,103787,103808,103825,103845,103851,103891,103907,103923,103929,103932,103956,103972,103977,104007,104024,104049,104052,104067,104076,104091,104100,104115,104122,104124,104134,104147,104154,104157,104196,104203,104205,104257,104259,104265,104268,104275,104282,104285,104287,104305,104308,104311,104345,104357,104359,104362,104384,104387],[10,102761,102757],{"id":102762},"_2xml-与-mjcf-物理建模基础",[15,102764,100750],{"id":100749},[20,102766,102767],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[20,102769,102770],{},"本章结束后，你应该能看懂一个简单模型里：",[224,102772,102773,102776,102779,102782,102785],{},[227,102774,102775],{},"地面在哪里。",[227,102777,102778],{},"物体初始位置在哪里。",[227,102780,102781],{},"几何体是什么形状。",[227,102783,102784],{},"哪些 body 可以自由运动。",[227,102786,102787],{},"如何用名字在 Python 里找到 XML 中的对象。",[411,102789,102790,102800],{},[414,102791,102792],{},[417,102793,102794,102797],{},[420,102795,102796],{"align":23874},"标签",[420,102798,102799],{"align":23874},"作用",[458,102801,102802,102811,102821,102830,102840,102850,102863,102873],{},[417,102803,102804,102808],{},[463,102805,102806],{"align":23874},[24,102807,102640],{},[463,102809,102810],{"align":23874},"根节点",[417,102812,102813,102818],{},[463,102814,102815],{"align":23874},[24,102816,102817],{},"\u003Coption>",[463,102819,102820],{"align":23874},"仿真参数",[417,102822,102823,102827],{},[463,102824,102825],{"align":23874},[24,102826,102648],{},[463,102828,102829],{"align":23874},"世界中的物体",[417,102831,102832,102837],{},[463,102833,102834],{"align":23874},[24,102835,102836],{},"\u003Cbody>",[463,102838,102839],{"align":23874},"刚体",[417,102841,102842,102847],{},[463,102843,102844],{"align":23874},[24,102845,102846],{},"\u003Cgeom>",[463,102848,102849],{"align":23874},"几何体、碰撞体、可视体",[417,102851,102852,102860],{},[463,102853,102854,25081,102857],{"align":23874},[24,102855,102856],{},"\u003Cjoint>",[24,102858,102859],{},"\u003Cfreejoint>",[463,102861,102862],{"align":23874},"关节",[417,102864,102865,102870],{},[463,102866,102867],{"align":23874},[24,102868,102869],{},"\u003Csite>",[463,102871,102872],{"align":23874},"标记点",[417,102874,102875,102880],{},[463,102876,102877],{"align":23874},[24,102878,102879],{},"\u003Cactuator>",[463,102881,102882],{"align":23874},"控制器",[20,102884,102885],{},"初学时可以先记住：",[32,102887,102890],{"className":102888,"code":102889,"language":5325,"meta":37},[5323],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[24,102891,102889],{"__ignoreMap":37},[15,102893,100873],{"id":100872},[20,102895,100876],{},[32,102897,102899],{"className":34,"code":102898,"language":36,"meta":37,"style":37},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[24,102900,102901],{"__ignoreMap":37},[41,102902,102903,102905,102907,102909,102911,102913,102915,102917],{"class":43,"line":44},[41,102904,24713],{"class":54},[41,102906,26418],{"class":378},[41,102908,23970],{"class":378},[41,102910,26503],{"class":58},[41,102912,102604],{"class":378},[41,102914,100917],{"class":378},[41,102916,102609],{"class":378},[41,102918,102919],{"class":378}," glfw-devel\n",[20,102921,102922],{},"pip:",[32,102924,102925],{"className":34,"code":101022,"language":36,"meta":37,"style":37},[24,102926,102927],{"__ignoreMap":37},[41,102928,102929,102931,102933,102935],{"class":43,"line":44},[41,102930,23967],{"class":54},[41,102932,23970],{"class":378},[41,102934,101033],{"class":378},[41,102936,101036],{"class":378},[20,102938,102939],{},"conda:",[32,102941,102943],{"className":34,"code":102942,"language":36,"meta":37,"style":37},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[24,102944,102945,102962,102971],{"__ignoreMap":37},[41,102946,102947,102949,102951,102953,102956,102958,102960],{"class":43,"line":44},[41,102948,30433],{"class":54},[41,102950,29279],{"class":378},[41,102952,25218],{"class":58},[41,102954,102955],{"class":378}," mujoco-xml",[41,102957,101078],{"class":378},[41,102959,101081],{"class":58},[41,102961,101084],{"class":58},[41,102963,102964,102966,102968],{"class":43,"line":51},[41,102965,30433],{"class":54},[41,102967,101091],{"class":378},[41,102969,102970],{"class":378}," mujoco-xml\n",[41,102972,102973,102975,102977,102979],{"class":43,"line":62},[41,102974,23967],{"class":54},[41,102976,23970],{"class":378},[41,102978,101033],{"class":378},[41,102980,101036],{"class":378},[20,102982,101107],{},[224,102984,102985,102988,102993],{},[227,102986,102987],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[227,102989,102990,102991,28488],{},"本章使用基础标签，适用于 ",[24,102992,101130],{},[227,102994,102995],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[15,102997,101148],{"id":101147},[20,102999,103000],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[32,103002,103004],{"className":53170,"code":103003,"language":53172,"meta":37,"style":37},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[24,103005,103006,103020,103028,103033,103041],{"__ignoreMap":37},[41,103007,103008,103010,103012,103014,103016,103018],{"class":43,"line":44},[41,103009,1183],{"class":275},[41,103011,101124],{"class":51403},[41,103013,101878],{"class":54},[41,103015,321],{"class":275},[41,103017,62782],{"class":378},[41,103019,51410],{"class":275},[41,103021,103022,103024,103026],{"class":43,"line":51},[41,103023,52247],{"class":275},[41,103025,101944],{"class":51403},[41,103027,51410],{"class":275},[41,103029,103030],{"class":43,"line":62},[41,103031,103032],{"class":275},"    ...\n",[41,103034,103035,103037,103039],{"class":43,"line":70},[41,103036,52520],{"class":275},[41,103038,101944],{"class":51403},[41,103040,51410],{"class":275},[41,103042,103043,103045,103047],{"class":43,"line":76},[41,103044,51888],{"class":275},[41,103046,101124],{"class":51403},[41,103048,51410],{"class":275},[20,103050,103051,103053,103054,103056,103057,103060],{},[24,103052,51903],{}," 表示刚体。",[24,103055,101223],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[24,103058,103059],{},"joint"," 表示刚体相对父刚体如何运动。",[241,103062,103063],{"id":103063},"层级结构非常重要",[20,103065,103066],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[32,103068,103071],{"className":103069,"code":103070,"language":5325,"meta":37},[5323],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[24,103072,103070],{"__ignoreMap":37},[20,103074,103075,101121,103078,103081,103082,103085],{},[24,103076,103077],{},"red_box_geom",[24,103079,103080],{},"box_center"," 都属于 ",[24,103083,103084],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[32,103087,103089],{"className":53170,"code":103088,"language":53172,"meta":37,"style":37},"\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",[24,103090,103091,103111,103125,103145],{"__ignoreMap":37},[41,103092,103093,103095,103097,103099,103101,103103,103105,103107,103109],{"class":43,"line":44},[41,103094,1183],{"class":275},[41,103096,51903],{"class":51403},[41,103098,15058],{"class":54},[41,103100,321],{"class":275},[41,103102,53594],{"class":378},[41,103104,101209],{"class":54},[41,103106,321],{"class":275},[41,103108,101214],{"class":378},[41,103110,51410],{"class":275},[41,103112,103113,103115,103117,103119,103121,103123],{"class":43,"line":51},[41,103114,52247],{"class":275},[41,103116,101723],{"class":51403},[41,103118,15058],{"class":54},[41,103120,321],{"class":275},[41,103122,102064],{"class":378},[41,103124,101247],{"class":275},[41,103126,103127,103129,103131,103133,103135,103137,103139,103141,103143],{"class":43,"line":62},[41,103128,52247],{"class":275},[41,103130,101223],{"class":51403},[41,103132,53927],{"class":54},[41,103134,321],{"class":275},[41,103136,53594],{"class":378},[41,103138,101239],{"class":54},[41,103140,321],{"class":275},[41,103142,101244],{"class":378},[41,103144,101247],{"class":275},[41,103146,103147,103149,103151],{"class":43,"line":70},[41,103148,51888],{"class":275},[41,103150,51903],{"class":51403},[41,103152,51410],{"class":275},[20,103154,103155],{},"含义:",[224,103157,103158,103164,103169,103172],{},[227,103159,103160,103161,103163],{},"创建名为 ",[24,103162,53817],{}," 的刚体",[227,103165,103166,103167],{},"初始位置在世界坐标 ",[24,103168,101272],{},[227,103170,103171],{},"它有一个自由关节",[227,103173,103174],{},"它有一个盒子几何体",[241,103176,103177],{"id":103177},"坐标怎么理解",[20,103179,103180],{},"MuJoCo 默认使用三维坐标：",[32,103182,103185],{"className":103183,"code":103184,"language":5325,"meta":37},[5323],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[24,103186,103184],{"__ignoreMap":37},[20,103188,14771],{},[32,103190,103192],{"className":53170,"code":103191,"language":53172,"meta":37,"style":37},"pos=\"0 0 1\"\n",[24,103193,103194],{"__ignoreMap":37},[41,103195,103196],{"class":43,"line":44},[41,103197,103191],{"class":275},[20,103199,103200],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[241,103202,103204],{"id":103203},"geom-的-size-怎么理解","geom 的 size 怎么理解",[20,103206,103207,103208,82633,103211,103213],{},"不同 ",[24,103209,103210],{},"type",[24,103212,31599],{}," 含义不同：",[411,103215,103216,103231],{},[414,103217,103218],{},[417,103219,103220,103224,103229],{},[420,103221,103222],{"align":23874},[24,103223,103210],{},[420,103225,103226,103228],{"align":23874},[24,103227,31599],{}," 示例",[420,103230,100803],{"align":23874},[458,103232,103233,103247,103262,103281],{},[417,103234,103235,103239,103244],{},[463,103236,103237],{"align":23874},[24,103238,53817],{},[463,103240,103241],{"align":23874},[24,103242,103243],{},"size=\"0.1 0.2 0.3\"",[463,103245,103246],{"align":23874},"x\u002Fy\u002Fz 半边长，不是完整长度",[417,103248,103249,103254,103259],{},[463,103250,103251],{"align":23874},[24,103252,103253],{},"sphere",[463,103255,103256],{"align":23874},[24,103257,103258],{},"size=\"0.1\"",[463,103260,103261],{"align":23874},"球半径",[417,103263,103264,103269,103274],{},[463,103265,103266],{"align":23874},[24,103267,103268],{},"capsule",[463,103270,103271],{"align":23874},[24,103272,103273],{},"size=\"0.03\"",[463,103275,103276,103277,103280],{"align":23874},"胶囊半径，长度常用 ",[24,103278,103279],{},"fromto"," 指定",[417,103282,103283,103288,103293],{},[463,103284,103285],{"align":23874},[24,103286,103287],{},"plane",[463,103289,103290],{"align":23874},[24,103291,103292],{},"size=\"3 3 0.1\"",[463,103294,103295],{"align":23874},"可视平面大小，通常当地面",[20,103297,103298,103299,103301,103302,103304],{},"最容易踩坑的是 box：",[24,103300,102127],{}," 表示边长大约是 ",[24,103303,32140],{},"，因为 MuJoCo 用的是半边长。",[241,103306,103308],{"id":103307},"site-是什么","site 是什么",[20,103310,103311,103314],{},[24,103312,103313],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[224,103316,103317,103320,103323,103326],{},[227,103318,103319],{},"标记机械臂末端。",[227,103321,103322],{},"标记目标位置。",[227,103324,103325],{},"放传感器或相机参考点。",[227,103327,103328],{},"在 Python 中读取某个关键点的世界坐标。",[20,103330,103331,103332,101121,103335,103338],{},"在后面的 Reacher 任务中，",[24,103333,103334],{},"tip",[24,103336,103337],{},"target"," 就会用 site 表示。",[15,103340,101356],{"id":101355},[32,103342,103344],{"className":30481,"code":103343,"language":30483,"meta":37,"style":37},"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",[24,103345,103346,103352,103362,103366,103370,103378,103383,103387,103391,103395,103400,103404,103409,103414,103419,103424,103428,103432,103436,103440,103444,103448,103460,103472,103480,103484,103499,103514,103518,103531,103546,103559,103572,103576,103592,103596,103600,103611,103623,103635,103647,103651,103655,103667],{"__ignoreMap":37},[41,103347,103348,103350],{"class":43,"line":44},[41,103349,30495],{"class":271},[41,103351,101404],{"class":275},[41,103353,103354,103356,103358,103360],{"class":43,"line":51},[41,103355,30495],{"class":271},[41,103357,31483],{"class":275},[41,103359,31486],{"class":271},[41,103361,31489],{"class":275},[41,103363,103364],{"class":43,"line":62},[41,103365,80],{"emptyLinePlaceholder":79},[41,103367,103368],{"class":43,"line":70},[41,103369,80],{"emptyLinePlaceholder":79},[41,103371,103372,103374,103376],{"class":43,"line":76},[41,103373,101417],{"class":58},[41,103375,13702],{"class":271},[41,103377,101422],{"class":378},[41,103379,103380],{"class":43,"line":83},[41,103381,103382],{"class":378},"\u003Cmujoco model=\"xml_basic\">\n",[41,103384,103385],{"class":43,"line":89},[41,103386,101432],{"class":378},[41,103388,103389],{"class":43,"line":96},[41,103390,80],{"emptyLinePlaceholder":79},[41,103392,103393],{"class":43,"line":104},[41,103394,101441],{"class":378},[41,103396,103397],{"class":43,"line":176},[41,103398,103399],{"class":378},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[41,103401,103402],{"class":43,"line":184},[41,103403,80],{"emptyLinePlaceholder":79},[41,103405,103406],{"class":43,"line":1757},[41,103407,103408],{"class":378},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[41,103410,103411],{"class":43,"line":1763},[41,103412,103413],{"class":378},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[41,103415,103416],{"class":43,"line":1768},[41,103417,103418],{"class":378},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[41,103420,103421],{"class":43,"line":1782},[41,103422,103423],{"class":378},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[41,103425,103426],{"class":43,"line":1787},[41,103427,101470],{"class":378},[41,103429,103430],{"class":43,"line":1793},[41,103431,101475],{"class":378},[41,103433,103434],{"class":43,"line":1814},[41,103435,101480],{"class":378},[41,103437,103438],{"class":43,"line":1819},[41,103439,95801],{"class":378},[41,103441,103442],{"class":43,"line":1833},[41,103443,80],{"emptyLinePlaceholder":79},[41,103445,103446],{"class":43,"line":1838},[41,103447,80],{"emptyLinePlaceholder":79},[41,103449,103450,103452,103454,103456,103458],{"class":43,"line":1867},[41,103451,32050],{"class":271},[41,103453,2112],{"class":54},[41,103455,101501],{"class":275},[41,103457,95789],{"class":58},[41,103459,3877],{"class":275},[41,103461,103462,103464,103466,103468,103470],{"class":43,"line":1872},[41,103463,101510],{"class":275},[41,103465,321],{"class":271},[41,103467,101515],{"class":275},[41,103469,101417],{"class":58},[41,103471,282],{"class":275},[41,103473,103474,103476,103478],{"class":43,"line":1889},[41,103475,101524],{"class":275},[41,103477,321],{"class":271},[41,103479,101529],{"class":275},[41,103481,103482],{"class":43,"line":1894},[41,103483,80],{"emptyLinePlaceholder":79},[41,103485,103486,103489,103491,103494,103497],{"class":43,"line":1899},[41,103487,103488],{"class":275},"    box_body_id ",[41,103490,321],{"class":271},[41,103492,103493],{"class":275}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[41,103495,103496],{"class":378},"\"red_box\"",[41,103498,282],{"class":275},[41,103500,103501,103504,103506,103509,103512],{"class":43,"line":1904},[41,103502,103503],{"class":275},"    site_id ",[41,103505,321],{"class":271},[41,103507,103508],{"class":275}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[41,103510,103511],{"class":378},"\"box_center\"",[41,103513,282],{"class":275},[41,103515,103516],{"class":43,"line":1918},[41,103517,80],{"emptyLinePlaceholder":79},[41,103519,103520,103522,103525,103527,103529],{"class":43,"line":1923},[41,103521,3239],{"class":271},[41,103523,103524],{"class":275}," box_body_id ",[41,103526,1183],{"class":271},[41,103528,4231],{"class":58},[41,103530,3877],{"class":275},[41,103532,103533,103536,103539,103541,103544],{"class":43,"line":2715},[41,103534,103535],{"class":271},"        raise",[41,103537,103538],{"class":58}," RuntimeError",[41,103540,276],{"class":275},[41,103542,103543],{"class":378},"\"body red_box not found\"",[41,103545,282],{"class":275},[41,103547,103548,103550,103553,103555,103557],{"class":43,"line":2729},[41,103549,3239],{"class":271},[41,103551,103552],{"class":275}," site_id ",[41,103554,1183],{"class":271},[41,103556,4231],{"class":58},[41,103558,3877],{"class":275},[41,103560,103561,103563,103565,103567,103570],{"class":43,"line":2737},[41,103562,103535],{"class":271},[41,103564,103538],{"class":58},[41,103566,276],{"class":275},[41,103568,103569],{"class":378},"\"site box_center not found\"",[41,103571,282],{"class":275},[41,103573,103574],{"class":43,"line":2742},[41,103575,80],{"emptyLinePlaceholder":79},[41,103577,103578,103580,103582,103584,103586,103588,103590],{"class":43,"line":2748},[41,103579,3339],{"class":271},[41,103581,101604],{"class":275},[41,103583,26146],{"class":271},[41,103585,32546],{"class":58},[41,103587,276],{"class":275},[41,103589,1862],{"class":58},[41,103591,30889],{"class":275},[41,103593,103594],{"class":43,"line":2754},[41,103595,101619],{"class":275},[41,103597,103598],{"class":43,"line":2759},[41,103599,80],{"emptyLinePlaceholder":79},[41,103601,103602,103604,103606,103609],{"class":43,"line":8086},[41,103603,31402],{"class":58},[41,103605,276],{"class":275},[41,103607,103608],{"class":378},"\"simulation time:\"",[41,103610,101581],{"class":275},[41,103612,103613,103615,103617,103620],{"class":43,"line":8110},[41,103614,31402],{"class":58},[41,103616,276],{"class":275},[41,103618,103619],{"class":378},"\"box body position:\"",[41,103621,103622],{"class":275},", data.xpos[box_body_id].copy())\n",[41,103624,103625,103627,103629,103632],{"class":43,"line":8115},[41,103626,31402],{"class":58},[41,103628,276],{"class":275},[41,103630,103631],{"class":378},"\"site position:\"",[41,103633,103634],{"class":275},", data.site_xpos[site_id].copy())\n",[41,103636,103637,103639,103641,103644],{"class":43,"line":8121},[41,103638,31402],{"class":58},[41,103640,276],{"class":275},[41,103642,103643],{"class":378},"\"box qpos:\"",[41,103645,103646],{"class":275},", np.array(data.qpos))\n",[41,103648,103649],{"class":43,"line":8148},[41,103650,80],{"emptyLinePlaceholder":79},[41,103652,103653],{"class":43,"line":8153},[41,103654,80],{"emptyLinePlaceholder":79},[41,103656,103657,103659,103661,103663,103665],{"class":43,"line":8159},[41,103658,1672],{"class":271},[41,103660,31323],{"class":58},[41,103662,101662],{"class":271},[41,103664,101665],{"class":378},[41,103666,3877],{"class":275},[41,103668,103669],{"class":43,"line":8171},[41,103670,101672],{"class":275},[20,103672,103673],{},"保存为：",[32,103675,103677],{"className":34,"code":103676,"language":36,"meta":37,"style":37},"touch ch2_xml_basic.py\n",[24,103678,103679],{"__ignoreMap":37},[41,103680,103681,103683],{"class":43,"line":44},[41,103682,101386],{"class":54},[41,103684,103685],{"class":378}," ch2_xml_basic.py\n",[20,103687,102404],{},[32,103689,103691],{"className":34,"code":103690,"language":36,"meta":37,"style":37},"python ch2_xml_basic.py\n",[24,103692,103693],{"__ignoreMap":37},[41,103694,103695,103697],{"class":43,"line":44},[41,103696,30483],{"class":54},[41,103698,103685],{"class":378},[241,103700,101675],{"id":101675},[20,103702,103703],{},"用名字查找 body：",[32,103705,103707],{"className":30481,"code":103706,"language":30483,"meta":37,"style":37},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[24,103708,103709],{"__ignoreMap":37},[41,103710,103711,103714,103716,103718,103720],{"class":43,"line":44},[41,103712,103713],{"class":275},"box_body_id ",[41,103715,321],{"class":271},[41,103717,103493],{"class":275},[41,103719,103496],{"class":378},[41,103721,282],{"class":275},[20,103723,103724],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[20,103726,103727],{},"用名字查找 site：",[32,103729,103731],{"className":30481,"code":103730,"language":30483,"meta":37,"style":37},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[24,103732,103733],{"__ignoreMap":37},[41,103734,103735,103738,103740,103742,103744],{"class":43,"line":44},[41,103736,103737],{"class":275},"site_id ",[41,103739,321],{"class":271},[41,103741,103508],{"class":275},[41,103743,103511],{"class":378},[41,103745,282],{"class":275},[20,103747,103748,103749,103752,103753,103756],{},"注意第二个参数是对象类型。查 body 就用 ",[24,103750,103751],{},"mjOBJ_BODY","，查 site 就用 ",[24,103754,103755],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[20,103758,103759],{},"读取世界坐标：",[32,103761,103763],{"className":30481,"code":103762,"language":30483,"meta":37,"style":37},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[24,103764,103765,103770],{"__ignoreMap":37},[41,103766,103767],{"class":43,"line":44},[41,103768,103769],{"class":275},"data.xpos[box_body_id]\n",[41,103771,103772],{"class":43,"line":51},[41,103773,103774],{"class":275},"data.site_xpos[site_id]\n",[20,103776,103777,103780,103781,103784],{},[24,103778,103779],{},"xpos"," 是 body 的世界坐标，",[24,103782,103783],{},"site_xpos"," 是 site 的世界坐标。",[241,103786,101811],{"id":101811},[32,103788,103790],{"className":30481,"code":103789,"language":30483,"meta":37,"style":37},"import mujoco\nimport numpy as np\n",[24,103791,103792,103798],{"__ignoreMap":37},[41,103793,103794,103796],{"class":43,"line":44},[41,103795,30495],{"class":271},[41,103797,101404],{"class":275},[41,103799,103800,103802,103804,103806],{"class":43,"line":51},[41,103801,30495],{"class":271},[41,103803,31483],{"class":275},[41,103805,31486],{"class":271},[41,103807,31489],{"class":275},[20,103809,103810,103811,103814,103815,103818,103819,486,103822,28488],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[24,103812,103813],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[24,103816,103817],{},"as np"," 是习惯写法，后面就可以写 ",[24,103820,103821],{},"np.array(...)",[24,103823,103824],{},"np.round(...)",[32,103826,103827],{"className":30481,"code":101698,"language":30483,"meta":37,"style":37},[24,103828,103829,103837,103841],{"__ignoreMap":37},[41,103830,103831,103833,103835],{"class":43,"line":44},[41,103832,101417],{"class":58},[41,103834,13702],{"class":271},[41,103836,101422],{"class":378},[41,103838,103839],{"class":43,"line":51},[41,103840,101713],{"class":378},[41,103842,103843],{"class":43,"line":62},[41,103844,95801],{"class":378},[20,103846,103847,103848,28488],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[24,103849,103850],{},"mujoco.MjModel.from_xml_string(XML)",[32,103852,103854],{"className":53170,"code":103853,"language":53172,"meta":37,"style":37},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[24,103855,103856],{"__ignoreMap":37},[41,103857,103858,103860,103862,103864,103866,103868,103870,103872,103875,103877,103879,103882,103884,103886,103889],{"class":43,"line":44},[41,103859,1183],{"class":275},[41,103861,103313],{"class":51403},[41,103863,15058],{"class":54},[41,103865,321],{"class":275},[41,103867,103511],{"class":378},[41,103869,101209],{"class":54},[41,103871,321],{"class":275},[41,103873,103874],{"class":378},"\"0 0 0\"",[41,103876,101239],{"class":54},[41,103878,321],{"class":275},[41,103880,103881],{"class":378},"\"0.03\"",[41,103883,78870],{"class":54},[41,103885,321],{"class":275},[41,103887,103888],{"class":378},"\"0 1 0 1\"",[41,103890,101247],{"class":275},[20,103892,103893,103895,103896,103899,103900,103902,103903,103906],{},[24,103894,103313],{}," 是标记点。",[24,103897,103898],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[24,103901,103273],{}," 表示显示出来的小球大小。",[24,103904,103905],{},"rgba=\"0 1 0 1\""," 表示绿色。",[32,103908,103909],{"className":30481,"code":103706,"language":30483,"meta":37,"style":37},[24,103910,103911],{"__ignoreMap":37},[41,103912,103913,103915,103917,103919,103921],{"class":43,"line":44},[41,103914,103713],{"class":275},[41,103916,321],{"class":271},[41,103918,103493],{"class":275},[41,103920,103496],{"class":378},[41,103922,282],{"class":275},[20,103924,103925,103926,103928],{},"这行的作用是：根据名字 ",[24,103927,103496],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[20,103930,103931],{},"拆开看：",[224,103933,103934,103940,103945,103951],{},[227,103935,103936,103939],{},[24,103937,103938],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[227,103941,103942,103944],{},[24,103943,102188],{}," 是被查询的模型。",[227,103946,103947,103950],{},[24,103948,103949],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[227,103952,103953,103955],{},[24,103954,103496],{}," 是 XML 里写的名字。",[32,103957,103958],{"className":30481,"code":103730,"language":30483,"meta":37,"style":37},[24,103959,103960],{"__ignoreMap":37},[41,103961,103962,103964,103966,103968,103970],{"class":43,"line":44},[41,103963,103737],{"class":275},[41,103965,321],{"class":271},[41,103967,103508],{"class":275},[41,103969,103511],{"class":378},[41,103971,282],{"class":275},[20,103973,103974,103975,28488],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[24,103976,103511],{},[32,103978,103980],{"className":30481,"code":103979,"language":30483,"meta":37,"style":37},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[24,103981,103982,103994],{"__ignoreMap":37},[41,103983,103984,103986,103988,103990,103992],{"class":43,"line":44},[41,103985,1672],{"class":271},[41,103987,103524],{"class":275},[41,103989,1183],{"class":271},[41,103991,4231],{"class":58},[41,103993,3877],{"class":275},[41,103995,103996,103999,104001,104003,104005],{"class":43,"line":51},[41,103997,103998],{"class":271},"    raise",[41,104000,103538],{"class":58},[41,104002,276],{"class":275},[41,104004,103543],{"class":378},[41,104006,282],{"class":275},[20,104008,104009,104011,104012,104015,104016,104019,104020,104023],{},[24,104010,1672],{}," 是条件判断。",[24,104013,104014],{},"mj_name2id"," 找不到对象时会返回 ",[24,104017,104018],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[24,104021,104022],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[32,104025,104027],{"className":30481,"code":104026,"language":30483,"meta":37,"style":37},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[24,104028,104029,104045],{"__ignoreMap":37},[41,104030,104031,104033,104035,104037,104039,104041,104043],{"class":43,"line":44},[41,104032,3163],{"class":271},[41,104034,101604],{"class":275},[41,104036,26146],{"class":271},[41,104038,32546],{"class":58},[41,104040,276],{"class":275},[41,104042,1862],{"class":58},[41,104044,30889],{"class":275},[41,104046,104047],{"class":43,"line":51},[41,104048,101802],{"class":275},[20,104050,104051],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[32,104053,104055],{"className":30481,"code":104054,"language":30483,"meta":37,"style":37},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[24,104056,104057],{"__ignoreMap":37},[41,104058,104059,104061,104063,104065],{"class":43,"line":44},[41,104060,30518],{"class":58},[41,104062,276],{"class":275},[41,104064,103619],{"class":378},[41,104066,103622],{"class":275},[20,104068,104069,104071,104072,104075],{},[24,104070,101182],{}," 保存所有 body 的世界坐标。",[24,104073,104074],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[32,104077,104079],{"className":30481,"code":104078,"language":30483,"meta":37,"style":37},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[24,104080,104081],{"__ignoreMap":37},[41,104082,104083,104085,104087,104089],{"class":43,"line":44},[41,104084,30518],{"class":58},[41,104086,276],{"class":275},[41,104088,103631],{"class":378},[41,104090,103634],{"class":275},[20,104092,104093,104096,104097,104099],{},[24,104094,104095],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[24,104098,103080],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[32,104101,104103],{"className":30481,"code":104102,"language":30483,"meta":37,"style":37},"print(\"box qpos:\", np.array(data.qpos))\n",[24,104104,104105],{"__ignoreMap":37},[41,104106,104107,104109,104111,104113],{"class":43,"line":44},[41,104108,30518],{"class":58},[41,104110,276],{"class":275},[41,104112,103643],{"class":378},[41,104114,103646],{"class":275},[20,104116,104117,104118,104121],{},"这里打印广义位置数组。",[24,104119,104120],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[15,104123,102419],{"id":102418},[20,104125,104126,104127,104130,104131,28488],{},"程序会输出 ",[24,104128,104129],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[24,104132,104133],{},"qpos",[20,104135,104136,104138,104139,104142,104143,104146],{},[24,104137,104074],{}," 是 body 的世界坐标位置。",[24,104140,104141],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[24,104144,104145],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[20,104148,82325,104149,82633,104151,104153],{},[24,104150,103080],{},[24,104152,103898],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[20,104155,104156],{},"如果你把 site 改成：",[32,104158,104160],{"className":53170,"code":104159,"language":53172,"meta":37,"style":37},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[24,104161,104162],{"__ignoreMap":37},[41,104163,104164,104166,104168,104170,104172,104175,104177,104179,104182,104184,104186,104188,104190,104192,104194],{"class":43,"line":44},[41,104165,1183],{"class":275},[41,104167,103313],{"class":51403},[41,104169,15058],{"class":54},[41,104171,321],{"class":275},[41,104173,104174],{"class":378},"\"box_top\"",[41,104176,101209],{"class":54},[41,104178,321],{"class":275},[41,104180,104181],{"class":378},"\"0 0 0.15\"",[41,104183,101239],{"class":54},[41,104185,321],{"class":275},[41,104187,103881],{"class":378},[41,104189,78870],{"class":54},[41,104191,321],{"class":275},[41,104193,103888],{"class":378},[41,104195,101247],{"class":275},[20,104197,104198,104199,104202],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[24,104200,104201],{},"site position"," 就会比 body position 的 z 坐标更高。",[15,104204,102451],{"id":102450},[224,104206,104207,104216,104219,104226,104232,104243],{},[227,104208,102514,104209,104211,104212,102517,104214,28488],{},[24,104210,103084],{}," 的初始高度从 ",[24,104213,26],{},[24,104215,351],{},[227,104217,104218],{},"重新运行程序。",[227,104220,104221,104222,104225],{},"观察 ",[24,104223,104224],{},"box qpos"," 和最终位置是否变化。",[227,104227,104228,104229,104231],{},"故意把 ",[24,104230,103313],{}," 名称改错，确认程序能报错。",[227,104233,102514,104234,104236,104237,102517,104239,104242],{},[24,104235,101223],{}," 的颜色 ",[24,104238,102135],{},[24,104240,104241],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[227,104244,102514,104245,82633,104247,102517,104250,104253,104254,104256],{},[24,104246,103080],{},[24,104248,104249],{},"pos",[24,104251,104252],{},"0 0 0.2","，观察 ",[24,104255,104201],{}," 如何变化。",[15,104258,102556],{"id":102555},[241,104260,104262],{"id":104261},"xml-error-schema-violation",[24,104263,104264],{},"XML Error: Schema violation",[20,104266,104267],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[241,104269,104271,81393,104273],{"id":104270},"mj_name2id-返回-1",[24,104272,104014],{},[24,104274,104018],{},[20,104276,104277,104278,104281],{},"说明名字没有找到。检查 XML 中 ",[24,104279,104280],{},"name=\"...\"","，并确认对象类型正确。",[241,104283,104284],{"id":104284},"物体不下落",[20,104286,102626],{},[224,104288,104289,104294,104299],{},[227,104290,104291,104292],{},"body 是否有 ",[24,104293,101723],{},[227,104295,104296,104297],{},"gravity 是否为 ",[24,104298,102692],{},[227,104300,104301,104302,104304],{},"body 是否被固定在 ",[24,104303,101944],{}," 中",[241,104306,104307],{"id":104307},"坐标看起来不符合预期",[20,104309,104310],{},"先区分两种坐标：",[411,104312,104313,104322],{},[414,104314,104315],{},[417,104316,104317,104320],{},[420,104318,104319],{"align":23874},"坐标",[420,104321,100803],{"align":23874},[458,104323,104324,104334],{},[417,104325,104326,104331],{},[463,104327,104328,104329],{"align":23874},"XML 里的 ",[24,104330,104249],{},[463,104332,104333],{"align":23874},"相对父 body 的局部坐标",[417,104335,104336,104342],{},[463,104337,104338,25081,104340],{"align":23874},[24,104339,101182],{},[24,104341,104095],{},[463,104343,104344],{"align":23874},"仿真更新后的世界坐标",[20,104346,104347,104348,104350,104351,82642,104354,104356],{},"如果你修改了 ",[24,104349,101173],{},"，但还没调用 ",[24,104352,104353],{},"mj_forward",[24,104355,101318],{},"，世界坐标可能还没有更新。",[15,104358,102710],{"id":102709},[20,104360,104361],{},"MJCF 建模先掌握四件事：",[224,104363,104364,104369,104374,104379],{},[227,104365,104366,104368],{},[24,104367,51903],{}," 表示刚体层级。",[227,104370,104371,104373],{},[24,104372,101223],{}," 表示形状、碰撞和质量。",[227,104375,104376,104378],{},[24,104377,103059],{}," 决定 body 能不能动、怎么动。",[227,104380,104381,104383],{},[24,104382,103313],{}," 用来标记关键点，方便 Python 读取位置。",[20,104385,104386],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[189,104388,104389],{},"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":37,"searchDepth":51,"depth":51,"links":104391},[104392,104393,104394,104400,104404,104405,104406,104413],{"id":100749,"depth":51,"text":100750},{"id":100872,"depth":51,"text":100873},{"id":101147,"depth":51,"text":101148,"children":104395},[104396,104397,104398,104399],{"id":103063,"depth":62,"text":103063},{"id":103177,"depth":62,"text":103177},{"id":103203,"depth":62,"text":103204},{"id":103307,"depth":62,"text":103308},{"id":101355,"depth":51,"text":101356,"children":104401},[104402,104403],{"id":101675,"depth":62,"text":101675},{"id":101811,"depth":62,"text":101811},{"id":102418,"depth":51,"text":102419},{"id":102450,"depth":51,"text":102451},{"id":102555,"depth":51,"text":102556,"children":104407},[104408,104409,104411,104412],{"id":104261,"depth":62,"text":104264},{"id":104270,"depth":62,"text":104410},"mj_name2id 返回 -1",{"id":104284,"depth":62,"text":104284},{"id":104307,"depth":62,"text":104307},{"id":102709,"depth":51,"text":102710},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102757,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104420,"title":104421,"body":104422,"description":37,"extension":197,"meta":105917,"navigation":79,"path":105918,"seo":105919,"stem":105920,"__hash__":105921},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104423,"toc":105889},[104424,104427,104429,104432,104435,104473,104476,104482,104485,104487,104489,104516,104518,104532,104534,104575,104577,104601,104603,104606,104615,104624,104627,104636,104644,104653,104656,104666,104669,104721,104728,104734,104742,104790,104793,104812,104815,104823,104827,104836,104869,104871,105219,105221,105233,105235,105246,105248,105251,105272,105278,105281,105306,105316,105319,105327,105330,105333,105354,105365,105367,105387,105390,105411,105420,105439,105445,105470,105473,105487,105494,105518,105521,105529,105538,105554,105566,105574,105583,105585,105588,105612,105617,105620,105642,105644,105683,105685,105692,105694,105702,105705,105708,105720,105761,105768,105779,105786,105789,105838,105841,105844,105850,105852,105857,105883,105886],[10,104425,104421],{"id":104426},"_3python-控制接口读取状态与推进仿真",[15,104428,100750],{"id":100749},[20,104430,104431],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[20,104433,104434],{},"你将学习:",[224,104436,104437,104442,104447,104451,104456,104467],{},[227,104438,104439],{},[24,104440,104441],{},"MjModel.from_xml_string",[227,104443,104444],{},[24,104445,104446],{},"MjData(model)",[227,104448,104449],{},[24,104450,101318],{},[227,104452,104453],{},[24,104454,104455],{},"mj_resetData",[227,104457,104458,104459,486,104461,486,104464],{},"读取 ",[24,104460,104133],{},[24,104462,104463],{},"qvel",[24,104465,104466],{},"ctrl",[227,104468,104469,104470],{},"使用 ",[24,104471,104472],{},"model.opt.timestep",[20,104474,104475],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[32,104477,104480],{"className":104478,"code":104479,"language":5325,"meta":37},[5323],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[24,104481,104479],{"__ignoreMap":37},[20,104483,104484],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[15,104486,100873],{"id":100872},[20,104488,100876],{},[32,104490,104492],{"className":34,"code":104491,"language":36,"meta":37,"style":37},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[24,104493,104494],{"__ignoreMap":37},[41,104495,104496,104498,104500,104502,104504,104507,104509,104511,104513],{"class":43,"line":44},[41,104497,24713],{"class":54},[41,104499,26418],{"class":378},[41,104501,23970],{"class":378},[41,104503,26503],{"class":58},[41,104505,104506],{"class":378}," python3",[41,104508,100901],{"class":378},[41,104510,102604],{"class":378},[41,104512,100917],{"class":378},[41,104514,104515],{"class":378}," glfw\n",[20,104517,102922],{},[32,104519,104520],{"className":34,"code":101022,"language":36,"meta":37,"style":37},[24,104521,104522],{"__ignoreMap":37},[41,104523,104524,104526,104528,104530],{"class":43,"line":44},[41,104525,23967],{"class":54},[41,104527,23970],{"class":378},[41,104529,101033],{"class":378},[41,104531,101036],{"class":378},[20,104533,102939],{},[32,104535,104537],{"className":34,"code":104536,"language":36,"meta":37,"style":37},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[24,104538,104539,104556,104565],{"__ignoreMap":37},[41,104540,104541,104543,104545,104547,104550,104552,104554],{"class":43,"line":44},[41,104542,30433],{"class":54},[41,104544,29279],{"class":378},[41,104546,25218],{"class":58},[41,104548,104549],{"class":378}," mujoco-python-api",[41,104551,101078],{"class":378},[41,104553,101081],{"class":58},[41,104555,101084],{"class":58},[41,104557,104558,104560,104562],{"class":43,"line":51},[41,104559,30433],{"class":54},[41,104561,101091],{"class":378},[41,104563,104564],{"class":378}," mujoco-python-api\n",[41,104566,104567,104569,104571,104573],{"class":43,"line":62},[41,104568,23967],{"class":54},[41,104570,23970],{"class":378},[41,104572,101033],{"class":378},[41,104574,101036],{"class":378},[20,104576,101107],{},[224,104578,104579,104586,104595],{},[227,104580,104581,101121,104583,104585],{},[24,104582,100778],{},[24,104584,100783],{}," 是官方 Python bindings 的类名。",[227,104587,104588,104589,104592,104593,28488],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[24,104590,104591],{},"mjModel"," 在 Python 中是 ",[24,104594,100812],{},[227,104596,104597,104598,28488],{},"不要使用 ",[24,104599,104600],{},"sim = mujoco_py.MjSim(...)",[15,104602,101148],{"id":101147},[20,104604,104605],{},"仿真推进核心代码:",[32,104607,104609],{"className":30481,"code":104608,"language":30483,"meta":37,"style":37},"mujoco.mj_step(model, data)\n",[24,104610,104611],{"__ignoreMap":37},[41,104612,104613],{"class":43,"line":44},[41,104614,104608],{"class":275},[20,104616,104617,104618,486,104620,486,104622,28488],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[24,104619,101173],{},[24,104621,101176],{},[24,104623,101170],{},[20,104625,104626],{},"重置仿真:",[32,104628,104630],{"className":30481,"code":104629,"language":30483,"meta":37,"style":37},"mujoco.mj_resetData(model, data)\n",[24,104631,104632],{"__ignoreMap":37},[41,104633,104634],{"class":43,"line":44},[41,104635,104629],{"class":275},[20,104637,104638,104639,82642,104641,104643],{},"如果手动修改了 ",[24,104640,101173],{},[24,104642,101176],{},"，通常应调用:",[32,104645,104647],{"className":30481,"code":104646,"language":30483,"meta":37,"style":37},"mujoco.mj_forward(model, data)\n",[24,104648,104649],{"__ignoreMap":37},[41,104650,104651],{"class":43,"line":44},[41,104652,104646],{"class":275},[20,104654,104655],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[241,104657,104659,486,104661,486,104663,104665],{"id":104658},"qposqvelctrl-是什么",[24,104660,104133],{},[24,104662,104463],{},[24,104664,104466],{}," 是什么",[20,104667,104668],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[411,104670,104671,104683],{},[414,104672,104673],{},[417,104674,104675,104678,104680],{},[420,104676,104677],{"align":23874},"字段",[420,104679,100803],{"align":23874},[420,104681,104682],{"align":23874},"谁来修改",[458,104684,104685,104697,104709],{},[417,104686,104687,104691,104694],{},[463,104688,104689],{"align":23874},[24,104690,101173],{},[463,104692,104693],{"align":23874},"广义位置，例如小车位置、关节角、自由物体位置姿态",[463,104695,104696],{"align":23874},"MuJoCo 更新，也可以手动设置初始状态",[417,104698,104699,104703,104706],{},[463,104700,104701],{"align":23874},[24,104702,101176],{},[463,104704,104705],{"align":23874},"广义速度，例如小车速度、关节角速度",[463,104707,104708],{"align":23874},"MuJoCo 更新，也可以手动清零",[417,104710,104711,104715,104718],{},[463,104712,104713],{"align":23874},[24,104714,101179],{},[463,104716,104717],{"align":23874},"actuator 的控制输入",[463,104719,104720],{"align":23874},"主要由你的控制代码写入",[20,104722,9163,104723,101121,104725,104727],{},[24,104724,104133],{},[24,104726,104463],{}," 不一定同维。自由刚体就是典型例子：",[32,104729,104732],{"className":104730,"code":104731,"language":5325,"meta":37},[5323],"freejoint: qpos 7 维，qvel 6 维\n",[24,104733,104731],{"__ignoreMap":37},[241,104735,104737,101121,104739,104741],{"id":104736},"mj_step-和-mj_forward-的区别",[24,104738,101318],{},[24,104740,104353],{}," 的区别",[411,104743,104744,104757],{},[414,104745,104746],{},[417,104747,104748,104751,104754],{},[420,104749,104750],{"align":23874},"函数",[420,104752,104753],{"align":23874},"是否推进时间",[420,104755,104756],{"align":23874},"什么时候用",[458,104758,104759,104772],{},[417,104760,104761,104766,104769],{},[463,104762,104763],{"align":23874},[24,104764,104765],{},"mj_step(model, data)",[463,104767,104768],{"align":23874},"是",[463,104770,104771],{"align":23874},"正常仿真循环，每调用一次前进一步",[417,104773,104774,104779,104782],{},[463,104775,104776],{"align":23874},[24,104777,104778],{},"mj_forward(model, data)",[463,104780,104781],{"align":23874},"否",[463,104783,104784,104785,486,104787,104789],{"align":23874},"手动改了 ",[24,104786,104133],{},[24,104788,104463],{}," 后，刷新派生量",[20,104791,104792],{},"例如你写：",[32,104794,104796],{"className":30481,"code":104795,"language":30483,"meta":37,"style":37},"data.qpos[2] = 2.0\n",[24,104797,104798],{"__ignoreMap":37},[41,104799,104800,104803,104805,104807,104809],{"class":43,"line":44},[41,104801,104802],{"class":275},"data.qpos[",[41,104804,351],{"class":58},[41,104806,4581],{"class":275},[41,104808,321],{"class":271},[41,104810,104811],{"class":58}," 2.0\n",[20,104813,104814],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[32,104816,104817],{"className":30481,"code":104646,"language":30483,"meta":37,"style":37},[24,104818,104819],{"__ignoreMap":37},[41,104820,104821],{"class":43,"line":44},[41,104822,104646],{"class":275},[241,104824,104826],{"id":104825},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[20,104828,104829,104832,104833,104835],{},[24,104830,104831],{},"mujoco.mj_resetData(model, data)"," 会把 ",[24,104834,33504],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[32,104837,104839],{"className":30481,"code":104838,"language":30483,"meta":37,"style":37},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[24,104840,104841,104845,104855,104865],{"__ignoreMap":37},[41,104842,104843],{"class":43,"line":44},[41,104844,104629],{"class":275},[41,104846,104847,104850,104852],{"class":43,"line":51},[41,104848,104849],{"class":275},"data.qpos[:] ",[41,104851,321],{"class":271},[41,104853,104854],{"class":275}," random_qpos\n",[41,104856,104857,104860,104862],{"class":43,"line":62},[41,104858,104859],{"class":275},"data.qvel[:] ",[41,104861,321],{"class":271},[41,104863,104864],{"class":58}," 0.0\n",[41,104866,104867],{"class":43,"line":70},[41,104868,104646],{"class":275},[15,104870,101356],{"id":101355},[32,104872,104874],{"className":30481,"code":104873,"language":30483,"meta":37,"style":37},"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",[24,104875,104876,104882,104892,104896,104900,104908,104913,104917,104921,104925,104930,104934,104939,104944,104949,104953,104957,104961,104965,104969,104973,104992,104999,105011,105022,105038,105054,105058,105062,105074,105086,105094,105098,105109,105113,105129,105133,105137,105146,105150,105155,105164,105168,105181,105186,105195,105199,105203,105215],{"__ignoreMap":37},[41,104877,104878,104880],{"class":43,"line":44},[41,104879,30495],{"class":271},[41,104881,101404],{"class":275},[41,104883,104884,104886,104888,104890],{"class":43,"line":51},[41,104885,30495],{"class":271},[41,104887,31483],{"class":275},[41,104889,31486],{"class":271},[41,104891,31489],{"class":275},[41,104893,104894],{"class":43,"line":62},[41,104895,80],{"emptyLinePlaceholder":79},[41,104897,104898],{"class":43,"line":70},[41,104899,80],{"emptyLinePlaceholder":79},[41,104901,104902,104904,104906],{"class":43,"line":76},[41,104903,101417],{"class":58},[41,104905,13702],{"class":271},[41,104907,101422],{"class":378},[41,104909,104910],{"class":43,"line":83},[41,104911,104912],{"class":378},"\u003Cmujoco model=\"state_api\">\n",[41,104914,104915],{"class":43,"line":89},[41,104916,101432],{"class":378},[41,104918,104919],{"class":43,"line":96},[41,104920,80],{"emptyLinePlaceholder":79},[41,104922,104923],{"class":43,"line":104},[41,104924,101441],{"class":378},[41,104926,104927],{"class":43,"line":176},[41,104928,104929],{"class":378},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[41,104931,104932],{"class":43,"line":184},[41,104933,80],{"emptyLinePlaceholder":79},[41,104935,104936],{"class":43,"line":1757},[41,104937,104938],{"class":378},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[41,104940,104941],{"class":43,"line":1763},[41,104942,104943],{"class":378},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[41,104945,104946],{"class":43,"line":1768},[41,104947,104948],{"class":378},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[41,104950,104951],{"class":43,"line":1782},[41,104952,101470],{"class":378},[41,104954,104955],{"class":43,"line":1787},[41,104956,101475],{"class":378},[41,104958,104959],{"class":43,"line":1793},[41,104960,101480],{"class":378},[41,104962,104963],{"class":43,"line":1814},[41,104964,95801],{"class":378},[41,104966,104967],{"class":43,"line":1819},[41,104968,80],{"emptyLinePlaceholder":79},[41,104970,104971],{"class":43,"line":1833},[41,104972,80],{"emptyLinePlaceholder":79},[41,104974,104975,104977,104980,104983,104985,104988,104990],{"class":43,"line":1838},[41,104976,32050],{"class":271},[41,104978,104979],{"class":54}," print_state",[41,104981,104982],{"class":275},"(prefix: ",[41,104984,1443],{"class":58},[41,104986,104987],{"class":275},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[41,104989,95789],{"class":58},[41,104991,3877],{"class":275},[41,104993,104994,104996],{"class":43,"line":1867},[41,104995,31402],{"class":58},[41,104997,104998],{"class":275},"(prefix)\n",[41,105000,105001,105003,105005,105008],{"class":43,"line":1872},[41,105002,31402],{"class":58},[41,105004,276],{"class":275},[41,105006,105007],{"class":378},"\"  timestep:\"",[41,105009,105010],{"class":275},", model.opt.timestep)\n",[41,105012,105013,105015,105017,105020],{"class":43,"line":1889},[41,105014,31402],{"class":58},[41,105016,276],{"class":275},[41,105018,105019],{"class":378},"\"  time:\"",[41,105021,101581],{"class":275},[41,105023,105024,105026,105028,105031,105034,105036],{"class":43,"line":1894},[41,105025,31402],{"class":58},[41,105027,276],{"class":275},[41,105029,105030],{"class":378},"\"  qpos:\"",[41,105032,105033],{"class":275},", np.round(data.qpos.copy(), ",[41,105035,566],{"class":58},[41,105037,30600],{"class":275},[41,105039,105040,105042,105044,105047,105050,105052],{"class":43,"line":1899},[41,105041,31402],{"class":58},[41,105043,276],{"class":275},[41,105045,105046],{"class":378},"\"  qvel:\"",[41,105048,105049],{"class":275},", np.round(data.qvel.copy(), ",[41,105051,566],{"class":58},[41,105053,30600],{"class":275},[41,105055,105056],{"class":43,"line":1904},[41,105057,80],{"emptyLinePlaceholder":79},[41,105059,105060],{"class":43,"line":1918},[41,105061,80],{"emptyLinePlaceholder":79},[41,105063,105064,105066,105068,105070,105072],{"class":43,"line":1923},[41,105065,32050],{"class":271},[41,105067,2112],{"class":54},[41,105069,101501],{"class":275},[41,105071,95789],{"class":58},[41,105073,3877],{"class":275},[41,105075,105076,105078,105080,105082,105084],{"class":43,"line":2715},[41,105077,101510],{"class":275},[41,105079,321],{"class":271},[41,105081,101515],{"class":275},[41,105083,101417],{"class":58},[41,105085,282],{"class":275},[41,105087,105088,105090,105092],{"class":43,"line":2729},[41,105089,101524],{"class":275},[41,105091,321],{"class":271},[41,105093,101529],{"class":275},[41,105095,105096],{"class":43,"line":2737},[41,105097,80],{"emptyLinePlaceholder":79},[41,105099,105100,105103,105106],{"class":43,"line":2742},[41,105101,105102],{"class":275},"    print_state(",[41,105104,105105],{"class":378},"\"initial\"",[41,105107,105108],{"class":275},", model, data)\n",[41,105110,105111],{"class":43,"line":2748},[41,105112,80],{"emptyLinePlaceholder":79},[41,105114,105115,105117,105119,105121,105123,105125,105127],{"class":43,"line":2754},[41,105116,3339],{"class":271},[41,105118,101604],{"class":275},[41,105120,26146],{"class":271},[41,105122,32546],{"class":58},[41,105124,276],{"class":275},[41,105126,929],{"class":58},[41,105128,30889],{"class":275},[41,105130,105131],{"class":43,"line":2759},[41,105132,101619],{"class":275},[41,105134,105135],{"class":43,"line":8086},[41,105136,80],{"emptyLinePlaceholder":79},[41,105138,105139,105141,105144],{"class":43,"line":8110},[41,105140,105102],{"class":275},[41,105142,105143],{"class":378},"\"after 50 steps\"",[41,105145,105108],{"class":275},[41,105147,105148],{"class":43,"line":8115},[41,105149,80],{"emptyLinePlaceholder":79},[41,105151,105152],{"class":43,"line":8121},[41,105153,105154],{"class":275},"    mujoco.mj_resetData(model, data)\n",[41,105156,105157,105159,105162],{"class":43,"line":8148},[41,105158,105102],{"class":275},[41,105160,105161],{"class":378},"\"after reset\"",[41,105163,105108],{"class":275},[41,105165,105166],{"class":43,"line":8153},[41,105167,80],{"emptyLinePlaceholder":79},[41,105169,105170,105173,105175,105177,105179],{"class":43,"line":8159},[41,105171,105172],{"class":275},"    data.qpos[",[41,105174,351],{"class":58},[41,105176,4581],{"class":275},[41,105178,321],{"class":271},[41,105180,104811],{"class":58},[41,105182,105183],{"class":43,"line":8171},[41,105184,105185],{"class":275},"    mujoco.mj_forward(model, data)\n",[41,105187,105188,105190,105193],{"class":43,"line":8183},[41,105189,105102],{"class":275},[41,105191,105192],{"class":378},"\"after manual qpos edit\"",[41,105194,105108],{"class":275},[41,105196,105197],{"class":43,"line":8195},[41,105198,80],{"emptyLinePlaceholder":79},[41,105200,105201],{"class":43,"line":9854},[41,105202,80],{"emptyLinePlaceholder":79},[41,105204,105205,105207,105209,105211,105213],{"class":43,"line":9879},[41,105206,1672],{"class":271},[41,105208,31323],{"class":58},[41,105210,101662],{"class":271},[41,105212,101665],{"class":378},[41,105214,3877],{"class":275},[41,105216,105217],{"class":43,"line":9902},[41,105218,101672],{"class":275},[20,105220,103673],{},[32,105222,105224],{"className":34,"code":105223,"language":36,"meta":37,"style":37},"touch ch3_python_state.py\n",[24,105225,105226],{"__ignoreMap":37},[41,105227,105228,105230],{"class":43,"line":44},[41,105229,101386],{"class":54},[41,105231,105232],{"class":378}," ch3_python_state.py\n",[20,105234,102404],{},[32,105236,105238],{"className":34,"code":105237,"language":36,"meta":37,"style":37},"python ch3_python_state.py\n",[24,105239,105240],{"__ignoreMap":37},[41,105241,105242,105244],{"class":43,"line":44},[41,105243,30483],{"class":54},[41,105245,105232],{"class":378},[241,105247,101675],{"id":101675},[20,105249,105250],{},"打印状态的函数：",[32,105252,105254],{"className":30481,"code":105253,"language":30483,"meta":37,"style":37},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[24,105255,105256],{"__ignoreMap":37},[41,105257,105258,105260,105262,105264,105266,105268,105270],{"class":43,"line":44},[41,105259,32050],{"class":271},[41,105261,104979],{"class":54},[41,105263,104982],{"class":275},[41,105265,1443],{"class":58},[41,105267,104987],{"class":275},[41,105269,95789],{"class":58},[41,105271,3877],{"class":275},[20,105273,105274,105275,105277],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[24,105276,33504],{}," 里发生了什么。",[20,105279,105280],{},"推进 50 步：",[32,105282,105284],{"className":30481,"code":105283,"language":30483,"meta":37,"style":37},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[24,105285,105286,105302],{"__ignoreMap":37},[41,105287,105288,105290,105292,105294,105296,105298,105300],{"class":43,"line":44},[41,105289,3163],{"class":271},[41,105291,101604],{"class":275},[41,105293,26146],{"class":271},[41,105295,32546],{"class":58},[41,105297,276],{"class":275},[41,105299,929],{"class":58},[41,105301,30889],{"class":275},[41,105303,105304],{"class":43,"line":51},[41,105305,101802],{"class":275},[20,105307,105308,105309,105312,105313,105315],{},"由于 ",[24,105310,105311],{},"timestep=0.01","，所以 50 步后时间约为 ",[24,105314,35432],{}," 秒。",[20,105317,105318],{},"重置：",[32,105320,105321],{"className":30481,"code":104629,"language":30483,"meta":37,"style":37},[24,105322,105323],{"__ignoreMap":37},[41,105324,105325],{"class":43,"line":44},[41,105326,104629],{"class":275},[20,105328,105329],{},"这会把时间、位置、速度恢复到初始状态。",[20,105331,105332],{},"手动改高度：",[32,105334,105336],{"className":30481,"code":105335,"language":30483,"meta":37,"style":37},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[24,105337,105338,105350],{"__ignoreMap":37},[41,105339,105340,105342,105344,105346,105348],{"class":43,"line":44},[41,105341,104802],{"class":275},[41,105343,351],{"class":58},[41,105345,4581],{"class":275},[41,105347,321],{"class":271},[41,105349,104811],{"class":58},[41,105351,105352],{"class":43,"line":51},[41,105353,104646],{"class":275},[20,105355,105356,105357,105360,105361,105364],{},"这个例子里 ",[24,105358,105359],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[24,105362,105363],{},"2.0"," 表示把小球放到更高的位置。",[241,105366,101811],{"id":101811},[32,105368,105369],{"className":30481,"code":105253,"language":30483,"meta":37,"style":37},[24,105370,105371],{"__ignoreMap":37},[41,105372,105373,105375,105377,105379,105381,105383,105385],{"class":43,"line":44},[41,105374,32050],{"class":271},[41,105376,104979],{"class":54},[41,105378,104982],{"class":275},[41,105380,1443],{"class":58},[41,105382,104987],{"class":275},[41,105384,95789],{"class":58},[41,105386,3877],{"class":275},[20,105388,105389],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[224,105391,105392,105401,105406],{},[227,105393,105394,105397,105398,105400],{},[24,105395,105396],{},"prefix","：一段文字，比如 ",[24,105399,105105],{},"，用来说明现在打印的是哪个阶段。",[227,105402,105403,105405],{},[24,105404,102188],{},"：MuJoCo 模型。",[227,105407,105408,105410],{},[24,105409,33504],{},"：MuJoCo 当前状态。",[20,105412,105413,486,105416,105419],{},[24,105414,105415],{},"prefix: str",[24,105417,105418],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[32,105421,105423],{"className":30481,"code":105422,"language":30483,"meta":37,"style":37},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[24,105424,105425],{"__ignoreMap":37},[41,105426,105427,105429,105431,105433,105435,105437],{"class":43,"line":44},[41,105428,30518],{"class":58},[41,105430,276],{"class":275},[41,105432,105030],{"class":378},[41,105434,105033],{"class":275},[41,105436,566],{"class":58},[41,105438,30600],{"class":275},[20,105440,105441,105444],{},[24,105442,105443],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[32,105446,105448],{"className":30481,"code":105447,"language":30483,"meta":37,"style":37},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[24,105449,105450,105462],{"__ignoreMap":37},[41,105451,105452,105454,105456,105458,105460],{"class":43,"line":44},[41,105453,101737],{"class":275},[41,105455,321],{"class":271},[41,105457,101515],{"class":275},[41,105459,101417],{"class":58},[41,105461,282],{"class":275},[41,105463,105464,105466,105468],{"class":43,"line":51},[41,105465,101761],{"class":275},[41,105467,321],{"class":271},[41,105469,101529],{"class":275},[20,105471,105472],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[32,105474,105476],{"className":30481,"code":105475,"language":30483,"meta":37,"style":37},"print_state(\"initial\", model, data)\n",[24,105477,105478],{"__ignoreMap":37},[41,105479,105480,105483,105485],{"class":43,"line":44},[41,105481,105482],{"class":275},"print_state(",[41,105484,105105],{"class":378},[41,105486,105108],{"class":275},[20,105488,105489,105490,105493],{},"调用刚才定义的 ",[24,105491,105492],{},"print_state"," 函数，打印初始状态。",[32,105495,105496],{"className":30481,"code":105283,"language":30483,"meta":37,"style":37},[24,105497,105498,105514],{"__ignoreMap":37},[41,105499,105500,105502,105504,105506,105508,105510,105512],{"class":43,"line":44},[41,105501,3163],{"class":271},[41,105503,101604],{"class":275},[41,105505,26146],{"class":271},[41,105507,32546],{"class":58},[41,105509,276],{"class":275},[41,105511,929],{"class":58},[41,105513,30889],{"class":275},[41,105515,105516],{"class":43,"line":51},[41,105517,101802],{"class":275},[20,105519,105520],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[32,105522,105523],{"className":30481,"code":104629,"language":30483,"meta":37,"style":37},[24,105524,105525],{"__ignoreMap":37},[41,105526,105527],{"class":43,"line":44},[41,105528,104629],{"class":275},[20,105530,105531,105532,105534,105535,105537],{},"重置 ",[24,105533,33504],{},"。注意它不会重新创建 ",[24,105536,102188],{},"，因为模型结构没有变，只是状态回到初始值。",[32,105539,105540],{"className":30481,"code":104795,"language":30483,"meta":37,"style":37},[24,105541,105542],{"__ignoreMap":37},[41,105543,105544,105546,105548,105550,105552],{"class":43,"line":44},[41,105545,104802],{"class":275},[41,105547,351],{"class":58},[41,105549,4581],{"class":275},[41,105551,321],{"class":271},[41,105553,104811],{"class":58},[20,105555,105556,105557,486,105560,486,105563,105565],{},"这行是“手动改状态”。在 freejoint 中，",[24,105558,105559],{},"qpos[0]",[24,105561,105562],{},"qpos[1]",[24,105564,105359],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[32,105567,105568],{"className":30481,"code":104646,"language":30483,"meta":37,"style":37},[24,105569,105570],{"__ignoreMap":37},[41,105571,105572],{"class":43,"line":44},[41,105573,104646],{"class":275},[20,105575,105576,105577,105579,105580,105582],{},"手动改完 ",[24,105578,104133],{}," 后，调用 ",[24,105581,104353],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[15,105584,102419],{"id":102418},[20,105586,105587],{},"你会看到:",[224,105589,105590,105595,105600,105603],{},[227,105591,105592,105593],{},"初始时间为 ",[24,105594,465],{},[227,105596,105597,105598],{},"50 步后时间约为 ",[24,105599,35432],{},[227,105601,105602],{},"reset 后状态恢复",[227,105604,105605,105606,105609,105610],{},"手动修改 ",[24,105607,105608],{},"data.qpos[2]"," 后，小球高度变为 ",[24,105611,105363],{},[20,105613,105614,105616],{},[24,105615,105359],{}," 在这个例子中表示自由刚体的 z 坐标。",[20,105618,105619],{},"输出里可以重点看三件事：",[224,105621,105622,105630,105635],{},[227,105623,105624,105626,105627,105629],{},[24,105625,2526],{}," 是否随着 ",[24,105628,101318],{}," 增加。",[227,105631,105632,105634],{},[24,105633,104133],{}," 的 z 坐标是否因为下落而变化。",[227,105636,105637,105639,105640,28488],{},[24,105638,104455],{}," 后时间是否回到 ",[24,105641,465],{},[15,105643,102451],{"id":102450},[224,105645,105646,105652,105658,105664,105667,105676],{},[227,105647,105648,105649,28488],{},"修改 timestep 为 ",[24,105650,105651],{},"0.005",[227,105653,105654,105655,28488],{},"重新运行，检查 50 步后时间是否约为 ",[24,105656,105657],{},"0.25",[227,105659,105660,105661,28488],{},"修改重力为 ",[24,105662,105663],{},"0 0 -1.0",[227,105665,105666],{},"观察小球下降速度是否变慢。",[227,105668,102514,105669,102517,105672,105675],{},[24,105670,105671],{},"data.qpos[2] = 2.0",[24,105673,105674],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[227,105677,105678,105679,105682],{},"注释掉 ",[24,105680,105681],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[15,105684,102556],{"id":102555},[241,105686,105688,105689,105691],{"id":105687},"修改-dataqpos-后位置没有更新","修改 ",[24,105690,101173],{}," 后位置没有更新",[20,105693,102565],{},[32,105695,105696],{"className":30481,"code":104646,"language":30483,"meta":37,"style":37},[24,105697,105698],{"__ignoreMap":37},[41,105699,105700],{"class":43,"line":44},[41,105701,104646],{"class":275},[241,105703,105704],{"id":105704},"数组维度看不懂",[20,105706,105707],{},"打印模型维度:",[32,105709,105711],{"className":30481,"code":105710,"language":30483,"meta":37,"style":37},"print(model.nq, model.nv, model.nu)\n",[24,105712,105713],{"__ignoreMap":37},[41,105714,105715,105717],{"class":43,"line":44},[41,105716,30518],{"class":58},[41,105718,105719],{"class":275},"(model.nq, model.nv, model.nu)\n",[411,105721,105722,105730],{},[414,105723,105724],{},[417,105725,105726,105728],{},[420,105727,104677],{"align":23874},[420,105729,100803],{"align":23874},[458,105731,105732,105742,105752],{},[417,105733,105734,105739],{},[463,105735,105736],{"align":23874},[24,105737,105738],{},"nq",[463,105740,105741],{"align":23874},"位置变量数量",[417,105743,105744,105749],{},[463,105745,105746],{"align":23874},[24,105747,105748],{},"nv",[463,105750,105751],{"align":23874},"速度变量数量",[417,105753,105754,105758],{},[463,105755,105756],{"align":23874},[24,105757,102265],{},[463,105759,105760],{"align":23874},"控制输入数量",[241,105762,105764,105765,105767],{"id":105763},"误以为-qpos-一定等于关节数","误以为 ",[24,105766,104133],{}," 一定等于关节数",[20,105769,105770,105771,82633,105773,105775,105776,105778],{},"不是。例如 ",[24,105772,101723],{},[24,105774,104133],{}," 是 7 维，但 ",[24,105777,104463],{}," 是 6 维。",[241,105780,105782,105783,105785],{"id":105781},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[24,105784,104133],{}," 的第几位",[20,105787,105788],{},"初学时可以先打印：",[32,105790,105792],{"className":30481,"code":105791,"language":30483,"meta":37,"style":37},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[24,105793,105794,105804,105814,105826],{"__ignoreMap":37},[41,105795,105796,105798,105800,105802],{"class":43,"line":44},[41,105797,30518],{"class":58},[41,105799,276],{"class":275},[41,105801,101542],{"class":378},[41,105803,101545],{"class":275},[41,105805,105806,105808,105810,105812],{"class":43,"line":51},[41,105807,30518],{"class":58},[41,105809,276],{"class":275},[41,105811,101554],{"class":378},[41,105813,101557],{"class":275},[41,105815,105816,105818,105820,105823],{"class":43,"line":62},[41,105817,30518],{"class":58},[41,105819,276],{"class":275},[41,105821,105822],{"class":378},"\"qpos:\"",[41,105824,105825],{"class":275},", data.qpos)\n",[41,105827,105828,105830,105832,105835],{"class":43,"line":70},[41,105829,30518],{"class":58},[41,105831,276],{"class":275},[41,105833,105834],{"class":378},"\"qvel:\"",[41,105836,105837],{"class":275},", data.qvel)\n",[20,105839,105840],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[241,105842,105843],{"id":105843},"仿真结果每次都一样",[20,105845,105846,105847,105849],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[24,105848,104133],{},"、目标点或控制输入。",[15,105851,102710],{"id":102709},[20,105853,105854,105855,24755],{},"Python 控制 MuJoCo 的核心就是读写 ",[24,105856,33504],{},[224,105858,105859,105867,105872,105877],{},[227,105860,105861,105862,101121,105864,105866],{},"用 ",[24,105863,101173],{},[24,105865,101176],{}," 读取状态。",[227,105868,105861,105869,105871],{},[24,105870,101179],{}," 写入控制。",[227,105873,105861,105874,105876],{},[24,105875,101318],{}," 推进时间。",[227,105878,105879,105880,105882],{},"手动改状态后用 ",[24,105881,104353],{}," 刷新派生量。",[20,105884,105885],{},"理解这一章后，就可以进入关节和 actuator 控制。",[189,105887,105888],{},"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":37,"searchDepth":51,"depth":51,"links":105890},[105891,105892,105893,105900,105904,105905,105906,105916],{"id":100749,"depth":51,"text":100750},{"id":100872,"depth":51,"text":100873},{"id":101147,"depth":51,"text":101148,"children":105894},[105895,105897,105899],{"id":104658,"depth":62,"text":105896},"qpos、qvel、ctrl 是什么",{"id":104736,"depth":62,"text":105898},"mj_step 和 mj_forward 的区别",{"id":104825,"depth":62,"text":104826},{"id":101355,"depth":51,"text":101356,"children":105901},[105902,105903],{"id":101675,"depth":62,"text":101675},{"id":101811,"depth":62,"text":101811},{"id":102418,"depth":51,"text":102419},{"id":102450,"depth":51,"text":102451},{"id":102555,"depth":51,"text":102556,"children":105907},[105908,105910,105911,105913,105915],{"id":105687,"depth":62,"text":105909},"修改 data.qpos 后位置没有更新",{"id":105704,"depth":62,"text":105704},{"id":105763,"depth":62,"text":105912},"误以为 qpos 一定等于关节数",{"id":105781,"depth":62,"text":105914},"不知道某个元素在 qpos 的第几位",{"id":105843,"depth":62,"text":105843},{"id":102709,"depth":51,"text":102710},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104421,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105923,"title":105924,"body":105925,"description":37,"extension":197,"meta":107615,"navigation":79,"path":107616,"seo":107617,"stem":107618,"__hash__":107619},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105926,"toc":107591},[105927,105930,105932,105935,105937,105962,105965,105984,105987,105989,105991,106015,106017,106031,106033,106074,106076,106100,106102,106105,106139,106141,106154,106157,106225,106234,106238,106241,106275,106281,106284,106288,106327,106330,106350,106354,106397,106399,106428,106431,106437,106440,106442,106836,106838,106850,106852,106863,106865,106868,106897,106905,106908,106943,106946,106948,106956,106959,106961,106972,106982,107002,107005,107041,107053,107101,107120,107162,107175,107203,107208,107229,107239,107257,107260,107294,107297,107317,107320,107339,107345,107347,107350,107356,107362,107372,107375,107381,107390,107392,107438,107440,107446,107452,107455,107458,107478,107481,107487,107493,107495,107518,107521,107524,107533,107536,107574,107576,107579,107585,107588],[10,105928,105924],{"id":105929},"_4关节actuator-与力控制",[15,105931,100750],{"id":100749},[20,105933,105934],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[20,105936,104434],{},[224,105938,105939,105945,105950,105954,105959],{},[227,105940,105941,105944],{},[24,105942,105943],{},"hinge"," 关节",[227,105946,105947],{},[24,105948,105949],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[227,105951,105952],{},[24,105953,101179],{},[227,105955,105956],{},[24,105957,105958],{},"ctrlrange",[227,105960,105961],{},"读取关节角和角速度",[20,105963,105964],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[32,105966,105968],{"className":30481,"code":105967,"language":30483,"meta":37,"style":37},"data.ctrl[0] = ...\n",[24,105969,105970],{"__ignoreMap":37},[41,105971,105972,105975,105977,105979,105981],{"class":43,"line":44},[41,105973,105974],{"class":275},"data.ctrl[",[41,105976,465],{"class":58},[41,105978,4581],{"class":275},[41,105980,321],{"class":271},[41,105982,105983],{"class":58}," ...\n",[20,105985,105986],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[15,105988,100873],{"id":100872},[20,105990,100876],{},[32,105992,105993],{"className":34,"code":104491,"language":36,"meta":37,"style":37},[24,105994,105995],{"__ignoreMap":37},[41,105996,105997,105999,106001,106003,106005,106007,106009,106011,106013],{"class":43,"line":44},[41,105998,24713],{"class":54},[41,106000,26418],{"class":378},[41,106002,23970],{"class":378},[41,106004,26503],{"class":58},[41,106006,104506],{"class":378},[41,106008,100901],{"class":378},[41,106010,102604],{"class":378},[41,106012,100917],{"class":378},[41,106014,104515],{"class":378},[20,106016,102922],{},[32,106018,106019],{"className":34,"code":101022,"language":36,"meta":37,"style":37},[24,106020,106021],{"__ignoreMap":37},[41,106022,106023,106025,106027,106029],{"class":43,"line":44},[41,106024,23967],{"class":54},[41,106026,23970],{"class":378},[41,106028,101033],{"class":378},[41,106030,101036],{"class":378},[20,106032,102939],{},[32,106034,106036],{"className":34,"code":106035,"language":36,"meta":37,"style":37},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[24,106037,106038,106055,106064],{"__ignoreMap":37},[41,106039,106040,106042,106044,106046,106049,106051,106053],{"class":43,"line":44},[41,106041,30433],{"class":54},[41,106043,29279],{"class":378},[41,106045,25218],{"class":58},[41,106047,106048],{"class":378}," mujoco-control",[41,106050,101078],{"class":378},[41,106052,101081],{"class":58},[41,106054,101084],{"class":58},[41,106056,106057,106059,106061],{"class":43,"line":51},[41,106058,30433],{"class":54},[41,106060,101091],{"class":378},[41,106062,106063],{"class":378}," mujoco-control\n",[41,106065,106066,106068,106070,106072],{"class":43,"line":62},[41,106067,23967],{"class":54},[41,106069,23970],{"class":378},[41,106071,101033],{"class":378},[41,106073,101036],{"class":378},[20,106075,101107],{},[224,106077,106078,106084,106091,106097],{},[227,106079,106080,106083],{},[24,106081,106082],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[227,106085,106086,106088,106089,28488],{},[24,106087,101179],{}," 长度等于 ",[24,106090,102261],{},[227,106092,82325,106093,106096],{},[24,106094,106095],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[227,106098,106099],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[15,106101,101148],{"id":101147},[20,106103,106104],{},"关节决定 body 如何运动:",[32,106106,106108],{"className":53170,"code":106107,"language":53172,"meta":37,"style":37},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[24,106109,106110],{"__ignoreMap":37},[41,106111,106112,106114,106116,106118,106120,106123,106125,106127,106129,106132,106134,106137],{"class":43,"line":44},[41,106113,1183],{"class":275},[41,106115,103059],{"class":51403},[41,106117,15058],{"class":54},[41,106119,321],{"class":275},[41,106121,106122],{"class":378},"\"hinge\"",[41,106124,53927],{"class":54},[41,106126,321],{"class":275},[41,106128,106122],{"class":378},[41,106130,106131],{"class":54}," axis",[41,106133,321],{"class":275},[41,106135,106136],{"class":378},"\"0 1 0\"",[41,106138,101247],{"class":275},[20,106140,103155],{},[224,106142,106143,106148,106151],{},[227,106144,106145,106146],{},"名字是 ",[24,106147,105943],{},[227,106149,106150],{},"类型是旋转关节",[227,106152,106153],{},"绕 y 轴旋转",[20,106155,106156],{},"actuator 决定如何施加控制:",[32,106158,106160],{"className":53170,"code":106159,"language":53172,"meta":37,"style":37},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[24,106161,106162,106171,106217],{"__ignoreMap":37},[41,106163,106164,106166,106169],{"class":43,"line":44},[41,106165,1183],{"class":275},[41,106167,106168],{"class":51403},"actuator",[41,106170,51410],{"class":275},[41,106172,106173,106175,106178,106180,106182,106185,106188,106190,106192,106195,106197,106199,106202,106204,106207,106210,106212,106215],{"class":43,"line":51},[41,106174,52247],{"class":275},[41,106176,106177],{"class":51403},"motor",[41,106179,15058],{"class":54},[41,106181,321],{"class":275},[41,106183,106184],{"class":378},"\"hinge_motor\"",[41,106186,106187],{"class":54}," joint",[41,106189,321],{"class":275},[41,106191,106122],{"class":378},[41,106193,106194],{"class":54}," gear",[41,106196,321],{"class":275},[41,106198,3816],{"class":378},[41,106200,106201],{"class":54}," ctrlrange",[41,106203,321],{"class":275},[41,106205,106206],{"class":378},"\"-2 2\"",[41,106208,106209],{"class":54}," ctrllimited",[41,106211,321],{"class":275},[41,106213,106214],{"class":378},"\"true\"",[41,106216,101247],{"class":275},[41,106218,106219,106221,106223],{"class":43,"line":62},[41,106220,51888],{"class":275},[41,106222,106168],{"class":51403},[41,106224,51410],{"class":275},[20,106226,106227,106230,106231,28488],{},[24,106228,106229],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[24,106232,106233],{},"[-2, 2]",[241,106235,106237],{"id":106236},"joint-和-actuator-的关系","joint 和 actuator 的关系",[20,106239,106240],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[411,106242,106243,106253],{},[414,106244,106245],{},[417,106246,106247,106249,106251],{},[420,106248,25856],{"align":23874},[420,106250,102799],{"align":23874},[420,106252,100837],{"align":23874},[458,106254,106255,106265],{},[417,106256,106257,106259,106262],{},[463,106258,103059],{"align":23874},[463,106260,106261],{"align":23874},"定义能怎么动",[463,106263,106264],{"align":23874},"门轴允许门旋转",[417,106266,106267,106269,106272],{},[463,106268,106168],{"align":23874},[463,106270,106271],{"align":23874},"定义怎么施力或控制",[463,106273,106274],{"align":23874},"人推门、马达带动门",[20,106276,106277,106278,106280],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[24,106279,101179],{}," 主动控制它。",[20,106282,106283],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[241,106285,106287],{"id":106286},"hinge-joint","hinge joint",[32,106289,106291],{"className":53170,"code":106290,"language":53172,"meta":37,"style":37},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[24,106292,106293],{"__ignoreMap":37},[41,106294,106295,106297,106299,106301,106303,106305,106307,106309,106311,106313,106315,106317,106320,106322,106325],{"class":43,"line":44},[41,106296,1183],{"class":275},[41,106298,103059],{"class":51403},[41,106300,15058],{"class":54},[41,106302,321],{"class":275},[41,106304,106122],{"class":378},[41,106306,53927],{"class":54},[41,106308,321],{"class":275},[41,106310,106122],{"class":378},[41,106312,106131],{"class":54},[41,106314,321],{"class":275},[41,106316,106136],{"class":378},[41,106318,106319],{"class":54}," damping",[41,106321,321],{"class":275},[41,106323,106324],{"class":378},"\"0.1\"",[41,106326,101247],{"class":275},[20,106328,106329],{},"含义：",[224,106331,106332,106338,106344],{},[227,106333,106334,106337],{},[24,106335,106336],{},"type=\"hinge\"","：只能绕一个轴旋转。",[227,106339,106340,106343],{},[24,106341,106342],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[227,106345,106346,106349],{},[24,106347,106348],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[241,106351,106353],{"id":106352},"motor-actuator","motor actuator",[32,106355,106357],{"className":53170,"code":106356,"language":53172,"meta":37,"style":37},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[24,106358,106359],{"__ignoreMap":37},[41,106360,106361,106363,106365,106367,106369,106371,106373,106375,106377,106379,106381,106383,106385,106387,106389,106391,106393,106395],{"class":43,"line":44},[41,106362,1183],{"class":275},[41,106364,106177],{"class":51403},[41,106366,15058],{"class":54},[41,106368,321],{"class":275},[41,106370,106184],{"class":378},[41,106372,106187],{"class":54},[41,106374,321],{"class":275},[41,106376,106122],{"class":378},[41,106378,106194],{"class":54},[41,106380,321],{"class":275},[41,106382,3816],{"class":378},[41,106384,106201],{"class":54},[41,106386,321],{"class":275},[41,106388,106206],{"class":378},[41,106390,106209],{"class":54},[41,106392,321],{"class":275},[41,106394,106214],{"class":378},[41,106396,101247],{"class":275},[20,106398,106329],{},[224,106400,106401,106410,106416,106422],{},[227,106402,106403,106406,106407,106409],{},[24,106404,106405],{},"joint=\"hinge\"","：这个电机作用在名为 ",[24,106408,105943],{}," 的关节上。",[227,106411,106412,106415],{},[24,106413,106414],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[227,106417,106418,106421],{},[24,106419,106420],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[227,106423,106424,106427],{},[24,106425,106426],{},"ctrllimited=\"true\"","：启用控制范围限制。",[20,106429,106430],{},"简单理解：",[32,106432,106435],{"className":106433,"code":106434,"language":5325,"meta":37},[5323],"实际施加效果 ≈ data.ctrl[0] * gear\n",[24,106436,106434],{"__ignoreMap":37},[20,106438,106439],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[15,106441,101356],{"id":101355},[32,106443,106445],{"className":30481,"code":106444,"language":30483,"meta":37,"style":37},"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",[24,106446,106447,106454,106458,106464,106474,106478,106482,106490,106495,106500,106504,106508,106513,106518,106522,106527,106532,106537,106542,106546,106550,106554,106559,106564,106569,106573,106577,106581,106585,106597,106609,106617,106621,106631,106641,106651,106655,106668,106681,106685,106702,106716,106751,106755,106759,106770,106785,106800,106812,106816,106820,106832],{"__ignoreMap":37},[41,106448,106449,106451],{"class":43,"line":44},[41,106450,30495],{"class":271},[41,106452,106453],{"class":275}," math\n",[41,106455,106456],{"class":43,"line":51},[41,106457,80],{"emptyLinePlaceholder":79},[41,106459,106460,106462],{"class":43,"line":62},[41,106461,30495],{"class":271},[41,106463,101404],{"class":275},[41,106465,106466,106468,106470,106472],{"class":43,"line":70},[41,106467,30495],{"class":271},[41,106469,31483],{"class":275},[41,106471,31486],{"class":271},[41,106473,31489],{"class":275},[41,106475,106476],{"class":43,"line":76},[41,106477,80],{"emptyLinePlaceholder":79},[41,106479,106480],{"class":43,"line":83},[41,106481,80],{"emptyLinePlaceholder":79},[41,106483,106484,106486,106488],{"class":43,"line":89},[41,106485,101417],{"class":58},[41,106487,13702],{"class":271},[41,106489,101422],{"class":378},[41,106491,106492],{"class":43,"line":96},[41,106493,106494],{"class":378},"\u003Cmujoco model=\"one_link_motor\">\n",[41,106496,106497],{"class":43,"line":104},[41,106498,106499],{"class":378},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[41,106501,106502],{"class":43,"line":176},[41,106503,80],{"emptyLinePlaceholder":79},[41,106505,106506],{"class":43,"line":184},[41,106507,101441],{"class":378},[41,106509,106510],{"class":43,"line":1757},[41,106511,106512],{"class":378},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[41,106514,106515],{"class":43,"line":1763},[41,106516,106517],{"class":378},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[41,106519,106520],{"class":43,"line":1768},[41,106521,80],{"emptyLinePlaceholder":79},[41,106523,106524],{"class":43,"line":1782},[41,106525,106526],{"class":378},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[41,106528,106529],{"class":43,"line":1787},[41,106530,106531],{"class":378},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[41,106533,106534],{"class":43,"line":1793},[41,106535,106536],{"class":378},"        \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",[41,106538,106539],{"class":43,"line":1814},[41,106540,106541],{"class":378},"      \u003C\u002Fbody>\n",[41,106543,106544],{"class":43,"line":1819},[41,106545,101470],{"class":378},[41,106547,106548],{"class":43,"line":1833},[41,106549,101475],{"class":378},[41,106551,106552],{"class":43,"line":1838},[41,106553,80],{"emptyLinePlaceholder":79},[41,106555,106556],{"class":43,"line":1867},[41,106557,106558],{"class":378},"  \u003Cactuator>\n",[41,106560,106561],{"class":43,"line":1872},[41,106562,106563],{"class":378},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[41,106565,106566],{"class":43,"line":1889},[41,106567,106568],{"class":378},"  \u003C\u002Factuator>\n",[41,106570,106571],{"class":43,"line":1894},[41,106572,101480],{"class":378},[41,106574,106575],{"class":43,"line":1899},[41,106576,95801],{"class":378},[41,106578,106579],{"class":43,"line":1904},[41,106580,80],{"emptyLinePlaceholder":79},[41,106582,106583],{"class":43,"line":1918},[41,106584,80],{"emptyLinePlaceholder":79},[41,106586,106587,106589,106591,106593,106595],{"class":43,"line":1923},[41,106588,32050],{"class":271},[41,106590,2112],{"class":54},[41,106592,101501],{"class":275},[41,106594,95789],{"class":58},[41,106596,3877],{"class":275},[41,106598,106599,106601,106603,106605,106607],{"class":43,"line":2715},[41,106600,101510],{"class":275},[41,106602,321],{"class":271},[41,106604,101515],{"class":275},[41,106606,101417],{"class":58},[41,106608,282],{"class":275},[41,106610,106611,106613,106615],{"class":43,"line":2729},[41,106612,101524],{"class":275},[41,106614,321],{"class":271},[41,106616,101529],{"class":275},[41,106618,106619],{"class":43,"line":2737},[41,106620,80],{"emptyLinePlaceholder":79},[41,106622,106623,106625,106627,106629],{"class":43,"line":2742},[41,106624,31402],{"class":58},[41,106626,276],{"class":275},[41,106628,101542],{"class":378},[41,106630,101545],{"class":275},[41,106632,106633,106635,106637,106639],{"class":43,"line":2748},[41,106634,31402],{"class":58},[41,106636,276],{"class":275},[41,106638,101554],{"class":378},[41,106640,101557],{"class":275},[41,106642,106643,106645,106647,106649],{"class":43,"line":2754},[41,106644,31402],{"class":58},[41,106646,276],{"class":275},[41,106648,101566],{"class":378},[41,106650,101569],{"class":275},[41,106652,106653],{"class":43,"line":2759},[41,106654,80],{"emptyLinePlaceholder":79},[41,106656,106657,106659,106662,106664,106666],{"class":43,"line":8086},[41,106658,3239],{"class":271},[41,106660,106661],{"class":275}," model.nu ",[41,106663,21086],{"class":271},[41,106665,25221],{"class":58},[41,106667,3877],{"class":275},[41,106669,106670,106672,106674,106676,106679],{"class":43,"line":8110},[41,106671,103535],{"class":271},[41,106673,103538],{"class":58},[41,106675,276],{"class":275},[41,106677,106678],{"class":378},"\"expected exactly one actuator\"",[41,106680,282],{"class":275},[41,106682,106683],{"class":43,"line":8115},[41,106684,80],{"emptyLinePlaceholder":79},[41,106686,106687,106689,106691,106693,106695,106697,106700],{"class":43,"line":8121},[41,106688,3339],{"class":271},[41,106690,31719],{"class":275},[41,106692,26146],{"class":271},[41,106694,32546],{"class":58},[41,106696,276],{"class":275},[41,106698,106699],{"class":58},"2000",[41,106701,30889],{"class":275},[41,106703,106704,106707,106709,106711,106713],{"class":43,"line":8148},[41,106705,106706],{"class":275},"        t ",[41,106708,321],{"class":271},[41,106710,31719],{"class":275},[41,106712,728],{"class":271},[41,106714,106715],{"class":275}," model.opt.timestep\n",[41,106717,106718,106721,106723,106725,106727,106730,106732,106735,106737,106739,106742,106744,106746,106748],{"class":43,"line":8153},[41,106719,106720],{"class":275},"        data.ctrl[",[41,106722,465],{"class":58},[41,106724,4581],{"class":275},[41,106726,321],{"class":271},[41,106728,106729],{"class":58}," 1.5",[41,106731,6656],{"class":271},[41,106733,106734],{"class":275}," math.sin(",[41,106736,105363],{"class":58},[41,106738,6656],{"class":271},[41,106740,106741],{"class":275}," math.pi ",[41,106743,728],{"class":271},[41,106745,61970],{"class":58},[41,106747,6656],{"class":271},[41,106749,106750],{"class":275}," t)\n",[41,106752,106753],{"class":43,"line":8159},[41,106754,101619],{"class":275},[41,106756,106757],{"class":43,"line":8171},[41,106758,80],{"emptyLinePlaceholder":79},[41,106760,106761,106763,106765,106768],{"class":43,"line":8183},[41,106762,31402],{"class":58},[41,106764,276],{"class":275},[41,106766,106767],{"class":378},"\"time:\"",[41,106769,101581],{"class":275},[41,106771,106772,106774,106776,106779,106781,106783],{"class":43,"line":8195},[41,106773,31402],{"class":58},[41,106775,276],{"class":275},[41,106777,106778],{"class":378},"\"joint qpos:\"",[41,106780,105033],{"class":275},[41,106782,566],{"class":58},[41,106784,30600],{"class":275},[41,106786,106787,106789,106791,106794,106796,106798],{"class":43,"line":9854},[41,106788,31402],{"class":58},[41,106790,276],{"class":275},[41,106792,106793],{"class":378},"\"joint qvel:\"",[41,106795,105049],{"class":275},[41,106797,566],{"class":58},[41,106799,30600],{"class":275},[41,106801,106802,106804,106806,106809],{"class":43,"line":9879},[41,106803,31402],{"class":58},[41,106805,276],{"class":275},[41,106807,106808],{"class":378},"\"last ctrl:\"",[41,106810,106811],{"class":275},", data.ctrl.copy())\n",[41,106813,106814],{"class":43,"line":9902},[41,106815,80],{"emptyLinePlaceholder":79},[41,106817,106818],{"class":43,"line":9926},[41,106819,80],{"emptyLinePlaceholder":79},[41,106821,106822,106824,106826,106828,106830],{"class":43,"line":9931},[41,106823,1672],{"class":271},[41,106825,31323],{"class":58},[41,106827,101662],{"class":271},[41,106829,101665],{"class":378},[41,106831,3877],{"class":275},[41,106833,106834],{"class":43,"line":9936},[41,106835,101672],{"class":275},[20,106837,103673],{},[32,106839,106841],{"className":34,"code":106840,"language":36,"meta":37,"style":37},"touch ch4_joint_motor.py\n",[24,106842,106843],{"__ignoreMap":37},[41,106844,106845,106847],{"class":43,"line":44},[41,106846,101386],{"class":54},[41,106848,106849],{"class":378}," ch4_joint_motor.py\n",[20,106851,102404],{},[32,106853,106855],{"className":34,"code":106854,"language":36,"meta":37,"style":37},"python ch4_joint_motor.py\n",[24,106856,106857],{"__ignoreMap":37},[41,106858,106859,106861],{"class":43,"line":44},[41,106860,30483],{"class":54},[41,106862,106849],{"class":378},[241,106864,101675],{"id":101675},[20,106866,106867],{},"检查 actuator 数量：",[32,106869,106871],{"className":30481,"code":106870,"language":30483,"meta":37,"style":37},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[24,106872,106873,106885],{"__ignoreMap":37},[41,106874,106875,106877,106879,106881,106883],{"class":43,"line":44},[41,106876,1672],{"class":271},[41,106878,106661],{"class":275},[41,106880,21086],{"class":271},[41,106882,25221],{"class":58},[41,106884,3877],{"class":275},[41,106886,106887,106889,106891,106893,106895],{"class":43,"line":51},[41,106888,103998],{"class":271},[41,106890,103538],{"class":58},[41,106892,276],{"class":275},[41,106894,106678],{"class":378},[41,106896,282],{"class":275},[20,106898,106899,106901,106902,106904],{},[24,106900,102261],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[24,106903,101179],{}," 长度应该是 1。",[20,106906,106907],{},"产生正弦控制信号：",[32,106909,106911],{"className":30481,"code":106910,"language":30483,"meta":37,"style":37},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[24,106912,106913],{"__ignoreMap":37},[41,106914,106915,106917,106919,106921,106923,106925,106927,106929,106931,106933,106935,106937,106939,106941],{"class":43,"line":44},[41,106916,105974],{"class":275},[41,106918,465],{"class":58},[41,106920,4581],{"class":275},[41,106922,321],{"class":271},[41,106924,106729],{"class":58},[41,106926,6656],{"class":271},[41,106928,106734],{"class":275},[41,106930,105363],{"class":58},[41,106932,6656],{"class":271},[41,106934,106741],{"class":275},[41,106936,728],{"class":271},[41,106938,61970],{"class":58},[41,106940,6656],{"class":271},[41,106942,106750],{"class":275},[20,106944,106945],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[20,106947,101776],{},[32,106949,106950],{"className":30481,"code":104608,"language":30483,"meta":37,"style":37},[24,106951,106952],{"__ignoreMap":37},[41,106953,106954],{"class":43,"line":44},[41,106955,104608],{"class":275},[20,106957,106958],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[241,106960,101811],{"id":101811},[32,106962,106964],{"className":30481,"code":106963,"language":30483,"meta":37,"style":37},"import math\n",[24,106965,106966],{"__ignoreMap":37},[41,106967,106968,106970],{"class":43,"line":44},[41,106969,30495],{"class":271},[41,106971,106453],{"class":275},[20,106973,106974,106975,101121,106978,106981],{},"导入 Python 标准库里的数学模块。后面要用 ",[24,106976,106977],{},"math.sin",[24,106979,106980],{},"math.pi"," 生成周期变化的控制信号。",[32,106983,106984],{"className":30481,"code":103789,"language":30483,"meta":37,"style":37},[24,106985,106986,106992],{"__ignoreMap":37},[41,106987,106988,106990],{"class":43,"line":44},[41,106989,30495],{"class":271},[41,106991,101404],{"class":275},[41,106993,106994,106996,106998,107000],{"class":43,"line":51},[41,106995,30495],{"class":271},[41,106997,31483],{"class":275},[41,106999,31486],{"class":271},[41,107001,31489],{"class":275},[20,107003,107004],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[32,107006,107007],{"className":53170,"code":106290,"language":53172,"meta":37,"style":37},[24,107008,107009],{"__ignoreMap":37},[41,107010,107011,107013,107015,107017,107019,107021,107023,107025,107027,107029,107031,107033,107035,107037,107039],{"class":43,"line":44},[41,107012,1183],{"class":275},[41,107014,103059],{"class":51403},[41,107016,15058],{"class":54},[41,107018,321],{"class":275},[41,107020,106122],{"class":378},[41,107022,53927],{"class":54},[41,107024,321],{"class":275},[41,107026,106122],{"class":378},[41,107028,106131],{"class":54},[41,107030,321],{"class":275},[41,107032,106136],{"class":378},[41,107034,106319],{"class":54},[41,107036,321],{"class":275},[41,107038,106324],{"class":378},[41,107040,101247],{"class":275},[20,107042,107043,107044,107046,107047,107049,107050,107052],{},"这行定义关节。",[24,107045,105943],{}," 表示旋转关节。",[24,107048,106342],{}," 表示绕 y 轴旋转。",[24,107051,106348],{}," 表示有一点阻尼，运动不会完全无损耗。",[32,107054,107056],{"className":53170,"code":107055,"language":53172,"meta":37,"style":37},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[24,107057,107058],{"__ignoreMap":37},[41,107059,107060,107062,107064,107066,107068,107071,107073,107075,107078,107081,107083,107086,107088,107090,107092,107094,107096,107099],{"class":43,"line":44},[41,107061,1183],{"class":275},[41,107063,101223],{"class":51403},[41,107065,15058],{"class":54},[41,107067,321],{"class":275},[41,107069,107070],{"class":378},"\"link_geom\"",[41,107072,53927],{"class":54},[41,107074,321],{"class":275},[41,107076,107077],{"class":378},"\"capsule\"",[41,107079,107080],{"class":54}," fromto",[41,107082,321],{"class":275},[41,107084,107085],{"class":378},"\"0 0 0 0 0 0.5\"",[41,107087,101239],{"class":54},[41,107089,321],{"class":275},[41,107091,103881],{"class":378},[41,107093,102104],{"class":54},[41,107095,321],{"class":275},[41,107097,107098],{"class":378},"\"0.5\"",[41,107100,101247],{"class":275},[20,107102,107103,107104,107106,107107,107109,107110,107113,107114,28488,107117,107119],{},"这行定义摆杆的形状。",[24,107105,103268],{}," 是胶囊体，适合表示杆子。",[24,107108,103279],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[24,107111,107112],{},"(0,0,0)"," 延伸到 ",[24,107115,107116],{},"(0,0,0.5)",[24,107118,103273],{}," 是半径。",[32,107121,107122],{"className":53170,"code":106356,"language":53172,"meta":37,"style":37},[24,107123,107124],{"__ignoreMap":37},[41,107125,107126,107128,107130,107132,107134,107136,107138,107140,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160],{"class":43,"line":44},[41,107127,1183],{"class":275},[41,107129,106177],{"class":51403},[41,107131,15058],{"class":54},[41,107133,321],{"class":275},[41,107135,106184],{"class":378},[41,107137,106187],{"class":54},[41,107139,321],{"class":275},[41,107141,106122],{"class":378},[41,107143,106194],{"class":54},[41,107145,321],{"class":275},[41,107147,3816],{"class":378},[41,107149,106201],{"class":54},[41,107151,321],{"class":275},[41,107153,106206],{"class":378},[41,107155,106209],{"class":54},[41,107157,321],{"class":275},[41,107159,106214],{"class":378},[41,107161,101247],{"class":275},[20,107163,107164,107165,107167,107168,107171,107172,107174],{},"这行定义电机。它作用在 ",[24,107166,105943],{}," 关节上。",[24,107169,107170],{},"gear"," 可以理解成放大倍数。",[24,107173,105958],{}," 限制控制输入范围。",[32,107176,107177],{"className":30481,"code":106870,"language":30483,"meta":37,"style":37},[24,107178,107179,107191],{"__ignoreMap":37},[41,107180,107181,107183,107185,107187,107189],{"class":43,"line":44},[41,107182,1672],{"class":271},[41,107184,106661],{"class":275},[41,107186,21086],{"class":271},[41,107188,25221],{"class":58},[41,107190,3877],{"class":275},[41,107192,107193,107195,107197,107199,107201],{"class":43,"line":51},[41,107194,103998],{"class":271},[41,107196,103538],{"class":58},[41,107198,276],{"class":275},[41,107200,106678],{"class":378},[41,107202,282],{"class":275},[20,107204,107205,107207],{},[24,107206,102261],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[32,107209,107211],{"className":30481,"code":107210,"language":30483,"meta":37,"style":37},"for step in range(2000):\n",[24,107212,107213],{"__ignoreMap":37},[41,107214,107215,107217,107219,107221,107223,107225,107227],{"class":43,"line":44},[41,107216,3163],{"class":271},[41,107218,31719],{"class":275},[41,107220,26146],{"class":271},[41,107222,32546],{"class":58},[41,107224,276],{"class":275},[41,107226,106699],{"class":58},[41,107228,30889],{"class":275},[20,107230,107231,107232,107234,107235,107238],{},"循环 2000 步。这里没有用 ",[24,107233,1265],{},"，而是用 ",[24,107236,107237],{},"step","，因为后面要用当前步数计算时间。",[32,107240,107242],{"className":30481,"code":107241,"language":30483,"meta":37,"style":37},"t = step * model.opt.timestep\n",[24,107243,107244],{"__ignoreMap":37},[41,107245,107246,107249,107251,107253,107255],{"class":43,"line":44},[41,107247,107248],{"class":275},"t ",[41,107250,321],{"class":271},[41,107252,31719],{"class":275},[41,107254,728],{"class":271},[41,107256,106715],{"class":275},[20,107258,107259],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[32,107261,107262],{"className":30481,"code":106910,"language":30483,"meta":37,"style":37},[24,107263,107264],{"__ignoreMap":37},[41,107265,107266,107268,107270,107272,107274,107276,107278,107280,107282,107284,107286,107288,107290,107292],{"class":43,"line":44},[41,107267,105974],{"class":275},[41,107269,465],{"class":58},[41,107271,4581],{"class":275},[41,107273,321],{"class":271},[41,107275,106729],{"class":58},[41,107277,6656],{"class":271},[41,107279,106734],{"class":275},[41,107281,105363],{"class":58},[41,107283,6656],{"class":271},[41,107285,106741],{"class":275},[41,107287,728],{"class":271},[41,107289,61970],{"class":58},[41,107291,6656],{"class":271},[41,107293,106750],{"class":275},[20,107295,107296],{},"这行给电机输入一个正弦波。拆开看：",[224,107298,107299,107305,107311],{},[227,107300,107301,107304],{},[24,107302,107303],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[227,107306,107307,107310],{},[24,107308,107309],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[227,107312,107313,107316],{},[24,107314,107315],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[20,107318,107319],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[32,107321,107323],{"className":30481,"code":107322,"language":30483,"meta":37,"style":37},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[24,107324,107325],{"__ignoreMap":37},[41,107326,107327,107329,107331,107333,107335,107337],{"class":43,"line":44},[41,107328,30518],{"class":58},[41,107330,276],{"class":275},[41,107332,106778],{"class":378},[41,107334,105033],{"class":275},[41,107336,566],{"class":58},[41,107338,30600],{"class":275},[20,107340,107341,107342,107344],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[24,107343,101173],{}," 只有一个数。",[15,107346,102419],{"id":102418},[20,107348,107349],{},"输出类似:",[32,107351,107354],{"className":107352,"code":107353,"language":5325,"meta":37},[5323],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[24,107355,107353],{"__ignoreMap":37},[20,107357,107358,107359,107361],{},"这里 ",[24,107360,106229],{}," 是电机输入。",[20,107363,107364,107367,107368,107371],{},[24,107365,107366],{},"joint qpos"," 是关节角度，单位通常是弧度。",[24,107369,107370],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[20,107373,107374],{},"角度单位提示：",[32,107376,107379],{"className":107377,"code":107378,"language":5325,"meta":37},[5323],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[24,107380,107378],{"__ignoreMap":37},[20,107382,107383,107384,107386,107387,107389],{},"如果你看到 ",[24,107385,104133],{}," 是 ",[24,107388,35432],{},"，大约就是 28.6 度。",[15,107391,102451],{"id":102450},[224,107393,107394,107401,107404,107411,107414,107422,107430],{},[227,107395,102514,107396,102517,107398,28488],{},[24,107397,106414],{},[24,107399,107400],{},"gear=\"5\"",[227,107402,107403],{},"重新运行，观察关节运动是否更剧烈。",[227,107405,102514,107406,102517,107408,28488],{},[24,107407,105958],{},[24,107409,107410],{},"-0.2 0.2",[227,107412,107413],{},"重新运行，观察控制能力是否变弱。",[227,107415,107416,107417,107419,107420,28488],{},"去掉 actuator，确认 ",[24,107418,102261],{}," 变成 ",[24,107421,465],{},[227,107423,102514,107424,102517,107426,107429],{},[24,107425,106348],{},[24,107427,107428],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[227,107431,102514,107432,102517,107434,107437],{},[24,107433,106342],{},[24,107435,107436],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[15,107439,102556],{"id":102555},[241,107441,107443],{"id":107442},"indexerror-index-0-is-out-of-bounds",[24,107444,107445],{},"IndexError: index 0 is out of bounds",[20,107447,107448,107449,107451],{},"原因是 ",[24,107450,106095],{},"，没有 actuator。",[241,107453,107454],{"id":107454},"关节几乎不动",[20,107456,107457],{},"可能原因:",[224,107459,107460,107465,107469,107475],{},[227,107461,107462,107464],{},[24,107463,107170],{}," 太小",[227,107466,107467,107464],{},[24,107468,105958],{},[227,107470,107471,107474],{},[24,107472,107473],{},"damping"," 太大",[227,107476,107477],{},"重力方向导致运动不明显",[241,107479,107480],{"id":107480},"模型编译失败",[20,107482,107483,107484,107486],{},"检查 actuator 引用的 ",[24,107485,106405],{}," 是否存在，joint 名称是否拼写一致。",[241,107488,107490,107492],{"id":107489},"datactrl0-写了但没有效果",[24,107491,106229],{}," 写了但没有效果",[20,107494,102678],{},[224,107496,107497,107502,107505,107510,107515],{},[227,107498,107499,107501],{},[24,107500,102261],{}," 是否大于 0。",[227,107503,107504],{},"motor 是否引用了正确 joint。",[227,107506,107507,107509],{},[24,107508,107170],{}," 是否太小。",[227,107511,107512,107514],{},[24,107513,105958],{}," 是否把输入限制得太小。",[227,107516,107517],{},"body 是否真的有可动 joint。",[241,107519,107520],{"id":107520},"控制输入超过范围会怎样",[20,107522,107523],{},"如果设置了：",[32,107525,107527],{"className":53170,"code":107526,"language":53172,"meta":37,"style":37},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[24,107528,107529],{"__ignoreMap":37},[41,107530,107531],{"class":43,"line":44},[41,107532,107526],{"class":275},[20,107534,107535],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[32,107537,107539],{"className":30481,"code":107538,"language":30483,"meta":37,"style":37},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[24,107540,107541,107561],{"__ignoreMap":37},[41,107542,107543,107546,107548,107551,107553,107555,107557,107559],{"class":43,"line":44},[41,107544,107545],{"class":275},"action ",[41,107547,321],{"class":271},[41,107549,107550],{"class":275}," np.clip(action, ",[41,107552,805],{"class":271},[41,107554,105363],{"class":58},[41,107556,12573],{"class":275},[41,107558,105363],{"class":58},[41,107560,282],{"class":275},[41,107562,107563,107565,107567,107569,107571],{"class":43,"line":51},[41,107564,105974],{"class":275},[41,107566,465],{"class":58},[41,107568,4581],{"class":275},[41,107570,321],{"class":271},[41,107572,107573],{"class":275}," action\n",[15,107575,102710],{"id":102709},[20,107577,107578],{},"这一章建立了控制任务的基本形式：",[32,107580,107583],{"className":107581,"code":107582,"language":5325,"meta":37},[5323],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[24,107584,107582],{"__ignoreMap":37},[20,107586,107587],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[189,107589,107590],{},"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":37,"searchDepth":51,"depth":51,"links":107592},[107593,107594,107595,107600,107604,107605,107606,107614],{"id":100749,"depth":51,"text":100750},{"id":100872,"depth":51,"text":100873},{"id":101147,"depth":51,"text":101148,"children":107596},[107597,107598,107599],{"id":106236,"depth":62,"text":106237},{"id":106286,"depth":62,"text":106287},{"id":106352,"depth":62,"text":106353},{"id":101355,"depth":51,"text":101356,"children":107601},[107602,107603],{"id":101675,"depth":62,"text":101675},{"id":101811,"depth":62,"text":101811},{"id":102418,"depth":51,"text":102419},{"id":102450,"depth":51,"text":102451},{"id":102555,"depth":51,"text":102556,"children":107607},[107608,107609,107610,107611,107613],{"id":107442,"depth":62,"text":107445},{"id":107454,"depth":62,"text":107454},{"id":107480,"depth":62,"text":107480},{"id":107489,"depth":62,"text":107612},"data.ctrl[0] 写了但没有效果",{"id":107520,"depth":62,"text":107520},{"id":102709,"depth":51,"text":102710},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105924,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107621,"title":107622,"body":107623,"description":37,"extension":197,"meta":109532,"navigation":79,"path":109533,"seo":109534,"stem":109535,"__hash__":109536},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107624,"toc":109508},[107625,107628,107630,107633,107641,107644,107661,107664,107689,107692,107738,107740,107742,107797,107799,107818,107820,107863,107866,107883,107886,107902,107912,107919,107921,107924,107927,107961,107964,108012,108016,108019,108033,108042,108046,108049,108074,108077,108081,108094,108097,108103,108106,108121,108123,108126,108386,108388,108400,108403,108715,108717,108729,108731,108734,108749,108754,108757,108779,108782,108785,108819,108822,108826,108837,108840,108857,108860,108874,108881,108901,108908,108922,108925,108937,108952,108972,108975,108997,109000,109004,109019,109030,109045,109048,109078,109094,109123,109131,109155,109158,109176,109186,109198,109205,109214,109220,109229,109232,109234,109243,109246,109261,109263,109266,109277,109280,109291,109294,109312,109314,109331,109334,109362,109364,109368,109371,109401,109407,109410,109414,109422,109425,109427,109448,109451,109454,109470,109473,109489,109491,109494,109505],[10,107626,107622],{"id":107627},"_5viewer-可视化与-renderer-离屏渲染",[15,107629,100750],{"id":100749},[20,107631,107632],{},"本章掌握两类可视化方式:",[224,107634,107635,107638],{},[227,107636,107637],{},"交互式 viewer: 适合人工观察仿真",[227,107639,107640],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[20,107642,107643],{},"使用官方接口:",[32,107645,107647],{"className":30481,"code":107646,"language":30483,"meta":37,"style":37},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[24,107648,107649,107656],{"__ignoreMap":37},[41,107650,107651,107653],{"class":43,"line":44},[41,107652,30495],{"class":271},[41,107654,107655],{"class":275}," mujoco.viewer\n",[41,107657,107658],{"class":43,"line":51},[41,107659,107660],{"class":275},"mujoco.viewer.launch_passive(model, data)\n",[20,107662,107663],{},"以及:",[32,107665,107667],{"className":30481,"code":107666,"language":30483,"meta":37,"style":37},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[24,107668,107669,107679],{"__ignoreMap":37},[41,107670,107671,107674,107676],{"class":43,"line":44},[41,107672,107673],{"class":275},"renderer ",[41,107675,321],{"class":271},[41,107677,107678],{"class":275}," mujoco.Renderer(model)\n",[41,107680,107681,107684,107686],{"class":43,"line":51},[41,107682,107683],{"class":275},"image ",[41,107685,321],{"class":271},[41,107687,107688],{"class":275}," renderer.render()\n",[20,107690,107691],{},"新手建议先理解二者区别：",[411,107693,107694,107710],{},[414,107695,107696],{},[417,107697,107698,107701,107704,107707],{},[420,107699,107700],{"align":23874},"工具",[420,107702,107703],{"align":23874},"用途",[420,107705,107706],{"align":23874},"是否打开窗口",[420,107708,107709],{"align":23874},"常见场景",[458,107711,107712,107725],{},[417,107713,107714,107717,107720,107722],{},[463,107715,107716],{"align":23874},"Viewer",[463,107718,107719],{"align":23874},"人眼实时观察仿真",[463,107721,104768],{"align":23874},[463,107723,107724],{"align":23874},"调试模型、看控制效果",[417,107726,107727,107730,107733,107735],{},[463,107728,107729],{"align":23874},"Renderer",[463,107731,107732],{"align":23874},"生成图像数组",[463,107734,104781],{"align":23874},[463,107736,107737],{"align":23874},"保存图片、训练视觉策略、服务器批量采集",[15,107739,100873],{"id":100872},[20,107741,100876],{},[32,107743,107745],{"className":34,"code":107744,"language":36,"meta":37,"style":37},"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",[24,107746,107747,107759,107769,107777,107785],{"__ignoreMap":37},[41,107748,107749,107751,107753,107755,107757],{"class":43,"line":44},[41,107750,24713],{"class":54},[41,107752,26418],{"class":378},[41,107754,23970],{"class":378},[41,107756,26503],{"class":58},[41,107758,59],{"class":58},[41,107760,107761,107763,107765,107767],{"class":43,"line":51},[41,107762,100911],{"class":378},[41,107764,100914],{"class":378},[41,107766,100917],{"class":378},[41,107768,59],{"class":58},[41,107770,107771,107773,107775],{"class":43,"line":62},[41,107772,100924],{"class":378},[41,107774,100927],{"class":378},[41,107776,59],{"class":58},[41,107778,107779,107781,107783],{"class":43,"line":70},[41,107780,100934],{"class":378},[41,107782,100937],{"class":378},[41,107784,59],{"class":58},[41,107786,107787,107789,107791,107793,107795],{"class":43,"line":76},[41,107788,100944],{"class":378},[41,107790,100947],{"class":378},[41,107792,100950],{"class":378},[41,107794,100953],{"class":378},[41,107796,102619],{"class":378},[20,107798,102922],{},[32,107800,107802],{"className":34,"code":107801,"language":36,"meta":37,"style":37},"pip install \"mujoco>=2.3\" numpy pillow\n",[24,107803,107804],{"__ignoreMap":37},[41,107805,107806,107808,107810,107812,107815],{"class":43,"line":44},[41,107807,23967],{"class":54},[41,107809,23970],{"class":378},[41,107811,101033],{"class":378},[41,107813,107814],{"class":378}," numpy",[41,107816,107817],{"class":378}," pillow\n",[20,107819,102939],{},[32,107821,107823],{"className":34,"code":107822,"language":36,"meta":37,"style":37},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[24,107824,107825,107842,107851],{"__ignoreMap":37},[41,107826,107827,107829,107831,107833,107836,107838,107840],{"class":43,"line":44},[41,107828,30433],{"class":54},[41,107830,29279],{"class":378},[41,107832,25218],{"class":58},[41,107834,107835],{"class":378}," mujoco-render",[41,107837,101078],{"class":378},[41,107839,101081],{"class":58},[41,107841,101084],{"class":58},[41,107843,107844,107846,107848],{"class":43,"line":51},[41,107845,30433],{"class":54},[41,107847,101091],{"class":378},[41,107849,107850],{"class":378}," mujoco-render\n",[41,107852,107853,107855,107857,107859,107861],{"class":43,"line":62},[41,107854,23967],{"class":54},[41,107856,23970],{"class":378},[41,107858,101033],{"class":378},[41,107860,107814],{"class":378},[41,107862,107817],{"class":378},[20,107864,107865],{},"离屏渲染后端:",[32,107867,107869],{"className":34,"code":107868,"language":36,"meta":37,"style":37},"export MUJOCO_GL=egl\n",[24,107870,107871],{"__ignoreMap":37},[41,107872,107873,107875,107878,107880],{"class":43,"line":44},[41,107874,25145],{"class":271},[41,107876,107877],{"class":275}," MUJOCO_GL",[41,107879,321],{"class":271},[41,107881,107882],{"class":275},"egl\n",[20,107884,107885],{},"或:",[32,107887,107889],{"className":34,"code":107888,"language":36,"meta":37,"style":37},"export MUJOCO_GL=osmesa\n",[24,107890,107891],{"__ignoreMap":37},[41,107892,107893,107895,107897,107899],{"class":43,"line":44},[41,107894,25145],{"class":271},[41,107896,107877],{"class":275},[41,107898,321],{"class":271},[41,107900,107901],{"class":275},"osmesa\n",[20,107903,107904,107905,107908,107909,28488],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[24,107906,107907],{},"egl"," 失败，再尝试 ",[24,107910,107911],{},"osmesa",[20,107913,107914,107915,107918],{},"如果你在本机桌面环境运行，通常先不要设置 ",[24,107916,107917],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[15,107920,101148],{"id":101147},[20,107922,107923],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[20,107925,107926],{},"典型 viewer 流程:",[32,107928,107930],{"className":30481,"code":107929,"language":30483,"meta":37,"style":37},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[24,107931,107932,107945,107952,107956],{"__ignoreMap":37},[41,107933,107934,107937,107940,107942],{"class":43,"line":44},[41,107935,107936],{"class":271},"with",[41,107938,107939],{"class":275}," mujoco.viewer.launch_passive(model, data) ",[41,107941,31486],{"class":271},[41,107943,107944],{"class":275}," viewer:\n",[41,107946,107947,107949],{"class":43,"line":51},[41,107948,2390],{"class":271},[41,107950,107951],{"class":275}," viewer.is_running():\n",[41,107953,107954],{"class":43,"line":62},[41,107955,101619],{"class":275},[41,107957,107958],{"class":43,"line":70},[41,107959,107960],{"class":275},"        viewer.sync()\n",[20,107962,107963],{},"典型 renderer 流程:",[32,107965,107967],{"className":30481,"code":107966,"language":30483,"meta":37,"style":37},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[24,107968,107969,107995,107999,108004],{"__ignoreMap":37},[41,107970,107971,107973,107975,107978,107980,107982,107984,107986,107988,107990,107993],{"class":43,"line":44},[41,107972,107673],{"class":275},[41,107974,321],{"class":271},[41,107976,107977],{"class":275}," mujoco.Renderer(model, ",[41,107979,25084],{"class":5354},[41,107981,321],{"class":271},[41,107983,42445],{"class":58},[41,107985,12573],{"class":275},[41,107987,25080],{"class":5354},[41,107989,321],{"class":271},[41,107991,107992],{"class":58},"640",[41,107994,282],{"class":275},[41,107996,107997],{"class":43,"line":51},[41,107998,104608],{"class":275},[41,108000,108001],{"class":43,"line":62},[41,108002,108003],{"class":275},"renderer.update_scene(data)\n",[41,108005,108006,108008,108010],{"class":43,"line":70},[41,108007,107683],{"class":275},[41,108009,321],{"class":271},[41,108011,107688],{"class":275},[241,108013,108015],{"id":108014},"viewer-的同步逻辑","viewer 的同步逻辑",[20,108017,108018],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[32,108020,108022],{"className":30481,"code":108021,"language":30483,"meta":37,"style":37},"mujoco.mj_step(model, data)\nviewer.sync()\n",[24,108023,108024,108028],{"__ignoreMap":37},[41,108025,108026],{"class":43,"line":44},[41,108027,104608],{"class":275},[41,108029,108030],{"class":43,"line":51},[41,108031,108032],{"class":275},"viewer.sync()\n",[20,108034,108035,108037,108038,108041],{},[24,108036,101318],{}," 负责算物理，",[24,108039,108040],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[241,108043,108045],{"id":108044},"为什么要-sleep","为什么要 sleep",[20,108047,108048],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[32,108050,108052],{"className":30481,"code":108051,"language":30483,"meta":37,"style":37},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[24,108053,108054],{"__ignoreMap":37},[41,108055,108056,108059,108061,108064,108066,108069,108071],{"class":43,"line":44},[41,108057,108058],{"class":275},"sleep_time ",[41,108060,321],{"class":271},[41,108062,108063],{"class":275}," model.opt.timestep ",[41,108065,805],{"class":271},[41,108067,108068],{"class":275}," (time.time() ",[41,108070,805],{"class":271},[41,108072,108073],{"class":275}," step_start)\n",[20,108075,108076],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[241,108078,108080],{"id":108079},"renderer-输出是什么","renderer 输出是什么",[32,108082,108084],{"className":30481,"code":108083,"language":30483,"meta":37,"style":37},"image = renderer.render()\n",[24,108085,108086],{"__ignoreMap":37},[41,108087,108088,108090,108092],{"class":43,"line":44},[41,108089,107683],{"class":275},[41,108091,321],{"class":271},[41,108093,107688],{"class":275},[20,108095,108096],{},"得到的是 NumPy 数组，形状通常是：",[32,108098,108101],{"className":108099,"code":108100,"language":5325,"meta":37},[5323],"(height, width, 3)\n",[24,108102,108100],{"__ignoreMap":37},[20,108104,108105],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[32,108107,108109],{"className":30481,"code":108108,"language":30483,"meta":37,"style":37},"Image.fromarray(image).save(\"render_output.png\")\n",[24,108110,108111],{"__ignoreMap":37},[41,108112,108113,108116,108119],{"class":43,"line":44},[41,108114,108115],{"class":275},"Image.fromarray(image).save(",[41,108117,108118],{"class":378},"\"render_output.png\"",[41,108120,282],{"class":275},[15,108122,101356],{"id":101355},[20,108124,108125],{},"交互式 Viewer:",[32,108127,108129],{"className":30481,"code":108128,"language":30483,"meta":37,"style":37},"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",[24,108130,108131,108137,108141,108147,108153,108157,108161,108169,108174,108178,108182,108186,108191,108196,108200,108204,108208,108213,108217,108221,108225,108229,108233,108237,108249,108261,108269,108273,108283,108303,108313,108318,108323,108327,108344,108357,108362,108366,108370,108382],{"__ignoreMap":37},[41,108132,108133,108135],{"class":43,"line":44},[41,108134,30495],{"class":271},[41,108136,31932],{"class":275},[41,108138,108139],{"class":43,"line":51},[41,108140,80],{"emptyLinePlaceholder":79},[41,108142,108143,108145],{"class":43,"line":62},[41,108144,30495],{"class":271},[41,108146,101404],{"class":275},[41,108148,108149,108151],{"class":43,"line":70},[41,108150,30495],{"class":271},[41,108152,107655],{"class":275},[41,108154,108155],{"class":43,"line":76},[41,108156,80],{"emptyLinePlaceholder":79},[41,108158,108159],{"class":43,"line":83},[41,108160,80],{"emptyLinePlaceholder":79},[41,108162,108163,108165,108167],{"class":43,"line":89},[41,108164,101417],{"class":58},[41,108166,13702],{"class":271},[41,108168,101422],{"class":378},[41,108170,108171],{"class":43,"line":96},[41,108172,108173],{"class":378},"\u003Cmujoco model=\"viewer_demo\">\n",[41,108175,108176],{"class":43,"line":104},[41,108177,101432],{"class":378},[41,108179,108180],{"class":43,"line":176},[41,108181,80],{"emptyLinePlaceholder":79},[41,108183,108184],{"class":43,"line":184},[41,108185,101441],{"class":378},[41,108187,108188],{"class":43,"line":1757},[41,108189,108190],{"class":378},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[41,108192,108193],{"class":43,"line":1763},[41,108194,108195],{"class":378},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[41,108197,108198],{"class":43,"line":1768},[41,108199,80],{"emptyLinePlaceholder":79},[41,108201,108202],{"class":43,"line":1782},[41,108203,101455],{"class":378},[41,108205,108206],{"class":43,"line":1787},[41,108207,101460],{"class":378},[41,108209,108210],{"class":43,"line":1793},[41,108211,108212],{"class":378},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[41,108214,108215],{"class":43,"line":1814},[41,108216,101470],{"class":378},[41,108218,108219],{"class":43,"line":1819},[41,108220,101475],{"class":378},[41,108222,108223],{"class":43,"line":1833},[41,108224,101480],{"class":378},[41,108226,108227],{"class":43,"line":1838},[41,108228,95801],{"class":378},[41,108230,108231],{"class":43,"line":1867},[41,108232,80],{"emptyLinePlaceholder":79},[41,108234,108235],{"class":43,"line":1872},[41,108236,80],{"emptyLinePlaceholder":79},[41,108238,108239,108241,108243,108245,108247],{"class":43,"line":1889},[41,108240,32050],{"class":271},[41,108242,2112],{"class":54},[41,108244,101501],{"class":275},[41,108246,95789],{"class":58},[41,108248,3877],{"class":275},[41,108250,108251,108253,108255,108257,108259],{"class":43,"line":1894},[41,108252,101510],{"class":275},[41,108254,321],{"class":271},[41,108256,101515],{"class":275},[41,108258,101417],{"class":58},[41,108260,282],{"class":275},[41,108262,108263,108265,108267],{"class":43,"line":1899},[41,108264,101524],{"class":275},[41,108266,321],{"class":271},[41,108268,101529],{"class":275},[41,108270,108271],{"class":43,"line":1904},[41,108272,80],{"emptyLinePlaceholder":79},[41,108274,108275,108277,108279,108281],{"class":43,"line":1918},[41,108276,34281],{"class":271},[41,108278,107939],{"class":275},[41,108280,31486],{"class":271},[41,108282,107944],{"class":275},[41,108284,108285,108288,108291,108293,108296,108298,108301],{"class":43,"line":1923},[41,108286,108287],{"class":271},"        while",[41,108289,108290],{"class":275}," viewer.is_running() ",[41,108292,30565],{"class":271},[41,108294,108295],{"class":275}," data.time ",[41,108297,1183],{"class":271},[41,108299,108300],{"class":58}," 5.0",[41,108302,3877],{"class":275},[41,108304,108305,108308,108310],{"class":43,"line":2715},[41,108306,108307],{"class":275},"            step_start ",[41,108309,321],{"class":271},[41,108311,108312],{"class":275}," time.time()\n",[41,108314,108315],{"class":43,"line":2729},[41,108316,108317],{"class":275},"            mujoco.mj_step(model, data)\n",[41,108319,108320],{"class":43,"line":2737},[41,108321,108322],{"class":275},"            viewer.sync()\n",[41,108324,108325],{"class":43,"line":2742},[41,108326,80],{"emptyLinePlaceholder":79},[41,108328,108329,108332,108334,108336,108338,108340,108342],{"class":43,"line":2748},[41,108330,108331],{"class":275},"            sleep_time ",[41,108333,321],{"class":271},[41,108335,108063],{"class":275},[41,108337,805],{"class":271},[41,108339,108068],{"class":275},[41,108341,805],{"class":271},[41,108343,108073],{"class":275},[41,108345,108346,108348,108351,108353,108355],{"class":43,"line":2754},[41,108347,4780],{"class":271},[41,108349,108350],{"class":275}," sleep_time ",[41,108352,1233],{"class":271},[41,108354,4231],{"class":58},[41,108356,3877],{"class":275},[41,108358,108359],{"class":43,"line":2759},[41,108360,108361],{"class":275},"                time.sleep(sleep_time)\n",[41,108363,108364],{"class":43,"line":8086},[41,108365,80],{"emptyLinePlaceholder":79},[41,108367,108368],{"class":43,"line":8110},[41,108369,80],{"emptyLinePlaceholder":79},[41,108371,108372,108374,108376,108378,108380],{"class":43,"line":8115},[41,108373,1672],{"class":271},[41,108375,31323],{"class":58},[41,108377,101662],{"class":271},[41,108379,101665],{"class":378},[41,108381,3877],{"class":275},[41,108383,108384],{"class":43,"line":8121},[41,108385,101672],{"class":275},[20,108387,103673],{},[32,108389,108391],{"className":34,"code":108390,"language":36,"meta":37,"style":37},"touch ch5_viewer.py\n",[24,108392,108393],{"__ignoreMap":37},[41,108394,108395,108397],{"class":43,"line":44},[41,108396,101386],{"class":54},[41,108398,108399],{"class":378}," ch5_viewer.py\n",[20,108401,108402],{},"离屏 Renderer 保存图片:",[32,108404,108406],{"className":30481,"code":108405,"language":30483,"meta":37,"style":37},"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",[24,108407,108408,108420,108424,108430,108440,108444,108448,108456,108461,108465,108469,108473,108477,108482,108486,108490,108494,108498,108502,108506,108510,108514,108518,108522,108526,108538,108550,108558,108583,108587,108603,108607,108611,108626,108635,108639,108653,108658,108663,108667,108679,108691,108695,108699,108711],{"__ignoreMap":37},[41,108409,108410,108412,108415,108417],{"class":43,"line":44},[41,108411,30840],{"class":271},[41,108413,108414],{"class":275}," pathlib ",[41,108416,30495],{"class":271},[41,108418,108419],{"class":275}," Path\n",[41,108421,108422],{"class":43,"line":51},[41,108423,80],{"emptyLinePlaceholder":79},[41,108425,108426,108428],{"class":43,"line":62},[41,108427,30495],{"class":271},[41,108429,101404],{"class":275},[41,108431,108432,108434,108436,108438],{"class":43,"line":70},[41,108433,30840],{"class":271},[41,108435,47366],{"class":58},[41,108437,47369],{"class":271},[41,108439,47372],{"class":275},[41,108441,108442],{"class":43,"line":76},[41,108443,80],{"emptyLinePlaceholder":79},[41,108445,108446],{"class":43,"line":83},[41,108447,80],{"emptyLinePlaceholder":79},[41,108449,108450,108452,108454],{"class":43,"line":89},[41,108451,101417],{"class":58},[41,108453,13702],{"class":271},[41,108455,101422],{"class":378},[41,108457,108458],{"class":43,"line":96},[41,108459,108460],{"class":378},"\u003Cmujoco model=\"renderer_demo\">\n",[41,108462,108463],{"class":43,"line":104},[41,108464,101432],{"class":378},[41,108466,108467],{"class":43,"line":176},[41,108468,80],{"emptyLinePlaceholder":79},[41,108470,108471],{"class":43,"line":184},[41,108472,101441],{"class":378},[41,108474,108475],{"class":43,"line":1757},[41,108476,108190],{"class":378},[41,108478,108479],{"class":43,"line":1763},[41,108480,108481],{"class":378},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[41,108483,108484],{"class":43,"line":1768},[41,108485,108195],{"class":378},[41,108487,108488],{"class":43,"line":1782},[41,108489,80],{"emptyLinePlaceholder":79},[41,108491,108492],{"class":43,"line":1787},[41,108493,101455],{"class":378},[41,108495,108496],{"class":43,"line":1793},[41,108497,101460],{"class":378},[41,108499,108500],{"class":43,"line":1814},[41,108501,108212],{"class":378},[41,108503,108504],{"class":43,"line":1819},[41,108505,101470],{"class":378},[41,108507,108508],{"class":43,"line":1833},[41,108509,101475],{"class":378},[41,108511,108512],{"class":43,"line":1838},[41,108513,101480],{"class":378},[41,108515,108516],{"class":43,"line":1867},[41,108517,95801],{"class":378},[41,108519,108520],{"class":43,"line":1872},[41,108521,80],{"emptyLinePlaceholder":79},[41,108523,108524],{"class":43,"line":1889},[41,108525,80],{"emptyLinePlaceholder":79},[41,108527,108528,108530,108532,108534,108536],{"class":43,"line":1894},[41,108529,32050],{"class":271},[41,108531,2112],{"class":54},[41,108533,101501],{"class":275},[41,108535,95789],{"class":58},[41,108537,3877],{"class":275},[41,108539,108540,108542,108544,108546,108548],{"class":43,"line":1899},[41,108541,101510],{"class":275},[41,108543,321],{"class":271},[41,108545,101515],{"class":275},[41,108547,101417],{"class":58},[41,108549,282],{"class":275},[41,108551,108552,108554,108556],{"class":43,"line":1904},[41,108553,101524],{"class":275},[41,108555,321],{"class":271},[41,108557,101529],{"class":275},[41,108559,108560,108563,108565,108567,108569,108571,108573,108575,108577,108579,108581],{"class":43,"line":1918},[41,108561,108562],{"class":275},"    renderer ",[41,108564,321],{"class":271},[41,108566,107977],{"class":275},[41,108568,25084],{"class":5354},[41,108570,321],{"class":271},[41,108572,42445],{"class":58},[41,108574,12573],{"class":275},[41,108576,25080],{"class":5354},[41,108578,321],{"class":271},[41,108580,107992],{"class":58},[41,108582,282],{"class":275},[41,108584,108585],{"class":43,"line":1923},[41,108586,80],{"emptyLinePlaceholder":79},[41,108588,108589,108591,108593,108595,108597,108599,108601],{"class":43,"line":2715},[41,108590,3339],{"class":271},[41,108592,101604],{"class":275},[41,108594,26146],{"class":271},[41,108596,32546],{"class":58},[41,108598,276],{"class":275},[41,108600,584],{"class":58},[41,108602,30889],{"class":275},[41,108604,108605],{"class":43,"line":2729},[41,108606,101619],{"class":275},[41,108608,108609],{"class":43,"line":2737},[41,108610,80],{"emptyLinePlaceholder":79},[41,108612,108613,108616,108619,108621,108624],{"class":43,"line":2742},[41,108614,108615],{"class":275},"    renderer.update_scene(data, ",[41,108617,108618],{"class":5354},"camera",[41,108620,321],{"class":271},[41,108622,108623],{"class":378},"\"fixed_camera\"",[41,108625,282],{"class":275},[41,108627,108628,108631,108633],{"class":43,"line":2748},[41,108629,108630],{"class":275},"    image ",[41,108632,321],{"class":271},[41,108634,107688],{"class":275},[41,108636,108637],{"class":43,"line":2754},[41,108638,80],{"emptyLinePlaceholder":79},[41,108640,108641,108644,108646,108649,108651],{"class":43,"line":2759},[41,108642,108643],{"class":275},"    output_path ",[41,108645,321],{"class":271},[41,108647,108648],{"class":275}," Path(",[41,108650,108118],{"class":378},[41,108652,282],{"class":275},[41,108654,108655],{"class":43,"line":8086},[41,108656,108657],{"class":275},"    Image.fromarray(image).save(output_path)\n",[41,108659,108660],{"class":43,"line":8110},[41,108661,108662],{"class":275},"    renderer.close()\n",[41,108664,108665],{"class":43,"line":8115},[41,108666,80],{"emptyLinePlaceholder":79},[41,108668,108669,108671,108673,108676],{"class":43,"line":8121},[41,108670,31402],{"class":58},[41,108672,276],{"class":275},[41,108674,108675],{"class":378},"\"saved:\"",[41,108677,108678],{"class":275},", output_path.resolve())\n",[41,108680,108681,108683,108685,108688],{"class":43,"line":8148},[41,108682,31402],{"class":58},[41,108684,276],{"class":275},[41,108686,108687],{"class":378},"\"image shape:\"",[41,108689,108690],{"class":275},", image.shape)\n",[41,108692,108693],{"class":43,"line":8153},[41,108694,80],{"emptyLinePlaceholder":79},[41,108696,108697],{"class":43,"line":8159},[41,108698,80],{"emptyLinePlaceholder":79},[41,108700,108701,108703,108705,108707,108709],{"class":43,"line":8171},[41,108702,1672],{"class":271},[41,108704,31323],{"class":58},[41,108706,101662],{"class":271},[41,108708,101665],{"class":378},[41,108710,3877],{"class":275},[41,108712,108713],{"class":43,"line":8183},[41,108714,101672],{"class":275},[20,108716,103673],{},[32,108718,108720],{"className":34,"code":108719,"language":36,"meta":37,"style":37},"touch ch5_renderer.py\n",[24,108721,108722],{"__ignoreMap":37},[41,108723,108724,108726],{"class":43,"line":44},[41,108725,101386],{"class":54},[41,108727,108728],{"class":378}," ch5_renderer.py\n",[241,108730,101675],{"id":101675},[20,108732,108733],{},"viewer 上下文：",[32,108735,108737],{"className":30481,"code":108736,"language":30483,"meta":37,"style":37},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[24,108738,108739],{"__ignoreMap":37},[41,108740,108741,108743,108745,108747],{"class":43,"line":44},[41,108742,107936],{"class":271},[41,108744,107939],{"class":275},[41,108746,31486],{"class":271},[41,108748,107944],{"class":275},[20,108750,108751,108753],{},[24,108752,107936],{}," 语句会创建窗口，并在退出时自动清理资源。",[20,108755,108756],{},"窗口循环：",[32,108758,108760],{"className":30481,"code":108759,"language":30483,"meta":37,"style":37},"while viewer.is_running() and data.time \u003C 5.0:\n",[24,108761,108762],{"__ignoreMap":37},[41,108763,108764,108767,108769,108771,108773,108775,108777],{"class":43,"line":44},[41,108765,108766],{"class":271},"while",[41,108768,108290],{"class":275},[41,108770,30565],{"class":271},[41,108772,108295],{"class":275},[41,108774,1183],{"class":271},[41,108776,108300],{"class":58},[41,108778,3877],{"class":275},[20,108780,108781],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[20,108783,108784],{},"固定相机：",[32,108786,108788],{"className":53170,"code":108787,"language":53172,"meta":37,"style":37},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[24,108789,108790],{"__ignoreMap":37},[41,108791,108792,108794,108796,108798,108800,108802,108804,108806,108809,108812,108814,108817],{"class":43,"line":44},[41,108793,1183],{"class":275},[41,108795,108618],{"class":51403},[41,108797,15058],{"class":54},[41,108799,321],{"class":275},[41,108801,108623],{"class":378},[41,108803,101209],{"class":54},[41,108805,321],{"class":275},[41,108807,108808],{"class":378},"\"1.5 -2.0 1.2\"",[41,108810,108811],{"class":54}," xyaxes",[41,108813,321],{"class":275},[41,108815,108816],{"class":378},"\"1 0.75 0 0 0 1\"",[41,108818,101247],{"class":275},[20,108820,108821],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[241,108823,108825],{"id":108824},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[32,108827,108829],{"className":30481,"code":108828,"language":30483,"meta":37,"style":37},"import time\n",[24,108830,108831],{"__ignoreMap":37},[41,108832,108833,108835],{"class":43,"line":44},[41,108834,30495],{"class":271},[41,108836,31932],{"class":275},[20,108838,108839],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[32,108841,108843],{"className":30481,"code":108842,"language":30483,"meta":37,"style":37},"import mujoco\nimport mujoco.viewer\n",[24,108844,108845,108851],{"__ignoreMap":37},[41,108846,108847,108849],{"class":43,"line":44},[41,108848,30495],{"class":271},[41,108850,101404],{"class":275},[41,108852,108853,108855],{"class":43,"line":51},[41,108854,30495],{"class":271},[41,108856,107655],{"class":275},[20,108858,108859],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[32,108861,108862],{"className":30481,"code":108736,"language":30483,"meta":37,"style":37},[24,108863,108864],{"__ignoreMap":37},[41,108865,108866,108868,108870,108872],{"class":43,"line":44},[41,108867,107936],{"class":271},[41,108869,107939],{"class":275},[41,108871,31486],{"class":271},[41,108873,107944],{"class":275},[20,108875,108876,108877,108880],{},"打开一个 viewer 窗口。",[24,108878,108879],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[32,108882,108883],{"className":30481,"code":108759,"language":30483,"meta":37,"style":37},[24,108884,108885],{"__ignoreMap":37},[41,108886,108887,108889,108891,108893,108895,108897,108899],{"class":43,"line":44},[41,108888,108766],{"class":271},[41,108890,108290],{"class":275},[41,108892,30565],{"class":271},[41,108894,108295],{"class":275},[41,108896,1183],{"class":271},[41,108898,108300],{"class":58},[41,108900,3877],{"class":275},[20,108902,108903,108904,108907],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[24,108905,108906],{},"viewer.is_running()"," 会变成 false，循环结束。",[32,108909,108911],{"className":30481,"code":108910,"language":30483,"meta":37,"style":37},"step_start = time.time()\n",[24,108912,108913],{"__ignoreMap":37},[41,108914,108915,108918,108920],{"class":43,"line":44},[41,108916,108917],{"class":275},"step_start ",[41,108919,321],{"class":271},[41,108921,108312],{"class":275},[20,108923,108924],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[32,108926,108927],{"className":30481,"code":108021,"language":30483,"meta":37,"style":37},[24,108928,108929,108933],{"__ignoreMap":37},[41,108930,108931],{"class":43,"line":44},[41,108932,104608],{"class":275},[41,108934,108935],{"class":43,"line":51},[41,108936,108032],{"class":275},[20,108938,108939,108941,108942,108944,108945,108947,108948,108951],{},[24,108940,101318],{}," 推进物理仿真。",[24,108943,108040],{}," 把最新的 ",[24,108946,33504],{}," 同步到窗口里显示。没有 ",[24,108949,108950],{},"sync()","，窗口可能看不到最新状态。",[32,108953,108954],{"className":30481,"code":108051,"language":30483,"meta":37,"style":37},[24,108955,108956],{"__ignoreMap":37},[41,108957,108958,108960,108962,108964,108966,108968,108970],{"class":43,"line":44},[41,108959,108058],{"class":275},[41,108961,321],{"class":271},[41,108963,108063],{"class":275},[41,108965,805],{"class":271},[41,108967,108068],{"class":275},[41,108969,805],{"class":271},[41,108971,108073],{"class":275},[20,108973,108974],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[32,108976,108978],{"className":30481,"code":108977,"language":30483,"meta":37,"style":37},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[24,108979,108980,108992],{"__ignoreMap":37},[41,108981,108982,108984,108986,108988,108990],{"class":43,"line":44},[41,108983,1672],{"class":271},[41,108985,108350],{"class":275},[41,108987,1233],{"class":271},[41,108989,4231],{"class":58},[41,108991,3877],{"class":275},[41,108993,108994],{"class":43,"line":51},[41,108995,108996],{"class":275},"    time.sleep(sleep_time)\n",[20,108998,108999],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[241,109001,109003],{"id":109002},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[32,109005,109007],{"className":30481,"code":109006,"language":30483,"meta":37,"style":37},"from pathlib import Path\n",[24,109008,109009],{"__ignoreMap":37},[41,109010,109011,109013,109015,109017],{"class":43,"line":44},[41,109012,30840],{"class":271},[41,109014,108414],{"class":275},[41,109016,30495],{"class":271},[41,109018,108419],{"class":275},[20,109020,109021,109022,109025,109026,109029],{},"导入 ",[24,109023,109024],{},"Path","，用来处理文件路径。相比直接写字符串，",[24,109027,109028],{},"Path(\"render_output.png\")"," 更清晰。",[32,109031,109033],{"className":30481,"code":109032,"language":30483,"meta":37,"style":37},"from PIL import Image\n",[24,109034,109035],{"__ignoreMap":37},[41,109036,109037,109039,109041,109043],{"class":43,"line":44},[41,109038,30840],{"class":271},[41,109040,47366],{"class":58},[41,109042,47369],{"class":271},[41,109044,47372],{"class":275},[20,109046,109047],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[32,109049,109050],{"className":53170,"code":108787,"language":53172,"meta":37,"style":37},[24,109051,109052],{"__ignoreMap":37},[41,109053,109054,109056,109058,109060,109062,109064,109066,109068,109070,109072,109074,109076],{"class":43,"line":44},[41,109055,1183],{"class":275},[41,109057,108618],{"class":51403},[41,109059,15058],{"class":54},[41,109061,321],{"class":275},[41,109063,108623],{"class":378},[41,109065,101209],{"class":54},[41,109067,321],{"class":275},[41,109069,108808],{"class":378},[41,109071,108811],{"class":54},[41,109073,321],{"class":275},[41,109075,108816],{"class":378},[41,109077,101247],{"class":275},[20,109079,109080,109081,109083,109084,109086,109087,109090,109091,109093],{},"定义一个相机。",[24,109082,79913],{}," 是相机名字。",[24,109085,104249],{}," 是相机在世界里的位置。",[24,109088,109089],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[24,109092,104249],{}," 来调视角。",[32,109095,109097],{"className":30481,"code":109096,"language":30483,"meta":37,"style":37},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[24,109098,109099],{"__ignoreMap":37},[41,109100,109101,109103,109105,109107,109109,109111,109113,109115,109117,109119,109121],{"class":43,"line":44},[41,109102,107673],{"class":275},[41,109104,321],{"class":271},[41,109106,107977],{"class":275},[41,109108,25084],{"class":5354},[41,109110,321],{"class":271},[41,109112,42445],{"class":58},[41,109114,12573],{"class":275},[41,109116,25080],{"class":5354},[41,109118,321],{"class":271},[41,109120,107992],{"class":58},[41,109122,282],{"class":275},[20,109124,109125,109126,101121,109128,109130],{},"创建离屏渲染器。",[24,109127,25084],{},[24,109129,25080],{}," 决定输出图片大小。",[32,109132,109133],{"className":30481,"code":101779,"language":30483,"meta":37,"style":37},[24,109134,109135,109151],{"__ignoreMap":37},[41,109136,109137,109139,109141,109143,109145,109147,109149],{"class":43,"line":44},[41,109138,3163],{"class":271},[41,109140,101604],{"class":275},[41,109142,26146],{"class":271},[41,109144,32546],{"class":58},[41,109146,276],{"class":275},[41,109148,584],{"class":58},[41,109150,30889],{"class":275},[41,109152,109153],{"class":43,"line":51},[41,109154,101802],{"class":275},[20,109156,109157],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[32,109159,109161],{"className":30481,"code":109160,"language":30483,"meta":37,"style":37},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[24,109162,109163],{"__ignoreMap":37},[41,109164,109165,109168,109170,109172,109174],{"class":43,"line":44},[41,109166,109167],{"class":275},"renderer.update_scene(data, ",[41,109169,108618],{"class":5354},[41,109171,321],{"class":271},[41,109173,108623],{"class":378},[41,109175,282],{"class":275},[20,109177,109178,109179,109181,109182,109185],{},"告诉 renderer：用当前 ",[24,109180,33504],{}," 的状态更新画面，并使用名为 ",[24,109183,109184],{},"fixed_camera"," 的相机视角。",[32,109187,109188],{"className":30481,"code":108083,"language":30483,"meta":37,"style":37},[24,109189,109190],{"__ignoreMap":37},[41,109191,109192,109194,109196],{"class":43,"line":44},[41,109193,107683],{"class":275},[41,109195,321],{"class":271},[41,109197,107688],{"class":275},[20,109199,109200,109201,109204],{},"真正渲染出图像。",[24,109202,109203],{},"image"," 是一个 NumPy 数组，不是文件。",[32,109206,109208],{"className":30481,"code":109207,"language":30483,"meta":37,"style":37},"Image.fromarray(image).save(output_path)\n",[24,109209,109210],{"__ignoreMap":37},[41,109211,109212],{"class":43,"line":44},[41,109213,109207],{"class":275},[20,109215,109216,109217,28488],{},"把数组转换成图片，并保存到 ",[24,109218,109219],{},"render_output.png",[32,109221,109223],{"className":30481,"code":109222,"language":30483,"meta":37,"style":37},"renderer.close()\n",[24,109224,109225],{"__ignoreMap":37},[41,109226,109227],{"class":43,"line":44},[41,109228,109222],{"class":275},[20,109230,109231],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[15,109233,102419],{"id":102418},[20,109235,109236,109237,109239,109240,28488],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[24,109238,109219],{},"，并输出图像数组形状，例如 ",[24,109241,109242],{},"(480, 640, 3)",[20,109244,109245],{},"如果图片里看不到方块，先检查：",[224,109247,109248,109251,109254],{},[227,109249,109250],{},"方块是否掉到相机视野外。",[227,109252,109253],{},"camera 位置是否合理。",[227,109255,109256,109257,109260],{},"是否在 ",[24,109258,109259],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[15,109262,102451],{"id":102450},[20,109264,109265],{},"运行 viewer:",[32,109267,109269],{"className":34,"code":109268,"language":36,"meta":37,"style":37},"python ch5_viewer.py\n",[24,109270,109271],{"__ignoreMap":37},[41,109272,109273,109275],{"class":43,"line":44},[41,109274,30483],{"class":54},[41,109276,108399],{"class":378},[20,109278,109279],{},"运行 renderer:",[32,109281,109283],{"className":34,"code":109282,"language":36,"meta":37,"style":37},"python ch5_renderer.py\n",[24,109284,109285],{"__ignoreMap":37},[41,109286,109287,109289],{"class":43,"line":44},[41,109288,30483],{"class":54},[41,109290,108728],{"class":378},[20,109292,109293],{},"如果在服务器上运行:",[32,109295,109297],{"className":34,"code":109296,"language":36,"meta":37,"style":37},"MUJOCO_GL=egl python ch5_renderer.py\n",[24,109298,109299],{"__ignoreMap":37},[41,109300,109301,109303,109305,109307,109310],{"class":43,"line":44},[41,109302,107917],{"class":275},[41,109304,321],{"class":271},[41,109306,107907],{"class":378},[41,109308,109309],{"class":54}," python",[41,109311,108728],{"class":378},[20,109313,107885],{},[32,109315,109317],{"className":34,"code":109316,"language":36,"meta":37,"style":37},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[24,109318,109319],{"__ignoreMap":37},[41,109320,109321,109323,109325,109327,109329],{"class":43,"line":44},[41,109322,107917],{"class":275},[41,109324,321],{"class":271},[41,109326,107911],{"class":378},[41,109328,109309],{"class":54},[41,109330,108728],{"class":378},[20,109332,109333],{},"再做几个练习：",[224,109335,109336,109343,109346,109352],{},[227,109337,109338,109339,109342],{},"把 renderer 分辨率改成 ",[24,109340,109341],{},"height=240, width=320","，观察输出 shape。",[227,109344,109345],{},"把方块颜色改成蓝色，重新保存图片。",[227,109347,109348,109349,109351],{},"把相机 ",[24,109350,104249],{}," 改远一点，观察画面中物体是否变小。",[227,109353,109354,109355,102517,109358,109361],{},"把 viewer 示例中的 ",[24,109356,109357],{},"data.time \u003C 5.0",[24,109359,109360],{},"data.time \u003C 20.0","，观察更长时间。",[15,109363,102556],{"id":102555},[241,109365,109367],{"id":109366},"viewer-窗口打不开","viewer 窗口打不开",[20,109369,109370],{},"安装:",[32,109372,109374],{"className":34,"code":109373,"language":36,"meta":37,"style":37},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[24,109375,109376],{"__ignoreMap":37},[41,109377,109378,109380,109382,109384,109386,109388,109390,109392,109394,109396,109398],{"class":43,"line":44},[41,109379,24713],{"class":54},[41,109381,26418],{"class":378},[41,109383,23970],{"class":378},[41,109385,26503],{"class":58},[41,109387,102609],{"class":378},[41,109389,100937],{"class":378},[41,109391,102614],{"class":378},[41,109393,100950],{"class":378},[41,109395,100956],{"class":378},[41,109397,100947],{"class":378},[41,109399,109400],{"class":378}," libXinerama\n",[241,109402,109404],{"id":109403},"glfwerror",[24,109405,109406],{},"GLFWError",[20,109408,109409],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[241,109411,109413],{"id":109412},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[20,109415,109416,109417,82642,109419,109421],{},"尝试 ",[24,109418,101140],{},[24,109420,101143],{},"。可能存在版本差异。",[241,109423,109424],{"id":109424},"保存图片是黑的",[20,109426,102678],{},[224,109428,109429,109432,109435,109445],{},[227,109430,109431],{},"XML 里是否有 light。",[227,109433,109434],{},"相机是否对着模型。",[227,109436,109437,109438,109441,109442,28488],{},"是否先 ",[24,109439,109440],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[24,109443,109444],{},"renderer.render()",[227,109446,109447],{},"物体是否已经掉出视野。",[241,109449,109450],{"id":109450},"远程服务器没有显示器",[20,109452,109453],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[32,109455,109456],{"className":34,"code":109296,"language":36,"meta":37,"style":37},[24,109457,109458],{"__ignoreMap":37},[41,109459,109460,109462,109464,109466,109468],{"class":43,"line":44},[41,109461,107917],{"class":275},[41,109463,321],{"class":271},[41,109465,107907],{"class":378},[41,109467,109309],{"class":54},[41,109469,108728],{"class":378},[20,109471,109472],{},"如果 EGL 不可用，再尝试：",[32,109474,109475],{"className":34,"code":109316,"language":36,"meta":37,"style":37},[24,109476,109477],{"__ignoreMap":37},[41,109478,109479,109481,109483,109485,109487],{"class":43,"line":44},[41,109480,107917],{"class":275},[41,109482,321],{"class":271},[41,109484,107911],{"class":378},[41,109486,109309],{"class":54},[41,109488,108728],{"class":378},[15,109490,102710],{"id":102709},[20,109492,109493],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[224,109495,109496,109499,109502],{},[227,109497,109498],{},"先用 viewer 看模型和控制是否正常。",[227,109500,109501],{},"再用 renderer 保存图片或构造视觉观测。",[227,109503,109504],{},"最后把状态、动作、图像、奖励组织成训练数据。",[189,109506,109507],{},"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":37,"searchDepth":51,"depth":51,"links":109509},[109510,109511,109512,109517,109522,109523,109524,109531],{"id":100749,"depth":51,"text":100750},{"id":100872,"depth":51,"text":100873},{"id":101147,"depth":51,"text":101148,"children":109513},[109514,109515,109516],{"id":108014,"depth":62,"text":108015},{"id":108044,"depth":62,"text":108045},{"id":108079,"depth":62,"text":108080},{"id":101355,"depth":51,"text":101356,"children":109518},[109519,109520,109521],{"id":101675,"depth":62,"text":101675},{"id":108824,"depth":62,"text":108825},{"id":109002,"depth":62,"text":109003},{"id":102418,"depth":51,"text":102419},{"id":102450,"depth":51,"text":102451},{"id":102555,"depth":51,"text":102556,"children":109525},[109526,109527,109528,109529,109530],{"id":109366,"depth":62,"text":109367},{"id":109403,"depth":62,"text":109406},{"id":109412,"depth":62,"text":109413},{"id":109424,"depth":62,"text":109424},{"id":109450,"depth":62,"text":109450},{"id":102709,"depth":51,"text":102710},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107622,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109538,"title":109539,"body":109540,"description":37,"extension":197,"meta":111451,"navigation":79,"path":111452,"seo":111453,"stem":111454,"__hash__":111455},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109541,"toc":111427},[109542,109545,109547,109550,109552,109571,109574,109580,109583,109585,109587,109611,109613,109627,109629,109670,109672,109683,109685,109688,109694,109697,109731,109734,109766,109769,109801,109805,109808,109848,109851,109857,109860,109866,109870,109873,109879,109882,109886,109889,109929,109931,109944,109947,109949,110531,110533,110545,110548,110559,110561,110564,110583,110595,110598,110619,110622,110625,110668,110671,110674,110694,110701,110703,110721,110736,110739,110745,110748,110754,110771,110778,110809,110820,110854,110865,110882,110891,110899,110904,110918,110921,110942,110948,110962,110967,110997,111007,111032,111040,111063,111066,111082,111085,111093,111099,111121,111134,111155,111164,111203,111214,111216,111219,111225,111228,111231,111237,111240,111260,111263,111265,111304,111306,111309,111317,111320,111323,111350,111353,111363,111369,111372,111378,111380,111386,111390,111393,111395,111398,111422,111425],[10,109543,109539],{"id":109544},"_6控制任务cartpole",[15,109546,100750],{"id":100749},[20,109548,109549],{},"本章搭建一个最小 Cartpole 控制任务。",[20,109551,104434],{},[224,109553,109554,109557,109559,109562,109565,109568],{},[227,109555,109556],{},"slide joint",[227,109558,106287],{},[227,109560,109561],{},"cart force actuator",[227,109563,109564],{},"状态观测",[227,109566,109567],{},"简单控制循环",[227,109569,109570],{},"reward 设计雏形",[20,109572,109573],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[32,109575,109578],{"className":109576,"code":109577,"language":5325,"meta":37},[5323],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[24,109579,109577],{"__ignoreMap":37},[20,109581,109582],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[15,109584,100873],{"id":100872},[20,109586,100876],{},[32,109588,109589],{"className":34,"code":104491,"language":36,"meta":37,"style":37},[24,109590,109591],{"__ignoreMap":37},[41,109592,109593,109595,109597,109599,109601,109603,109605,109607,109609],{"class":43,"line":44},[41,109594,24713],{"class":54},[41,109596,26418],{"class":378},[41,109598,23970],{"class":378},[41,109600,26503],{"class":58},[41,109602,104506],{"class":378},[41,109604,100901],{"class":378},[41,109606,102604],{"class":378},[41,109608,100917],{"class":378},[41,109610,104515],{"class":378},[20,109612,102922],{},[32,109614,109615],{"className":34,"code":101022,"language":36,"meta":37,"style":37},[24,109616,109617],{"__ignoreMap":37},[41,109618,109619,109621,109623,109625],{"class":43,"line":44},[41,109620,23967],{"class":54},[41,109622,23970],{"class":378},[41,109624,101033],{"class":378},[41,109626,101036],{"class":378},[20,109628,102939],{},[32,109630,109632],{"className":34,"code":109631,"language":36,"meta":37,"style":37},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[24,109633,109634,109651,109660],{"__ignoreMap":37},[41,109635,109636,109638,109640,109642,109645,109647,109649],{"class":43,"line":44},[41,109637,30433],{"class":54},[41,109639,29279],{"class":378},[41,109641,25218],{"class":58},[41,109643,109644],{"class":378}," mujoco-cartpole",[41,109646,101078],{"class":378},[41,109648,101081],{"class":58},[41,109650,101084],{"class":58},[41,109652,109653,109655,109657],{"class":43,"line":51},[41,109654,30433],{"class":54},[41,109656,101091],{"class":378},[41,109658,109659],{"class":378}," mujoco-cartpole\n",[41,109661,109662,109664,109666,109668],{"class":43,"line":62},[41,109663,23967],{"class":54},[41,109665,23970],{"class":378},[41,109667,101033],{"class":378},[41,109669,101036],{"class":378},[20,109671,101107],{},[224,109673,109674,109677,109680],{},[227,109675,109676],{},"本章不依赖 Gymnasium。",[227,109678,109679],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[227,109681,109682],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[15,109684,101148],{"id":101147},[20,109686,109687],{},"Cartpole 的模型结构:",[32,109689,109692],{"className":109690,"code":109691,"language":5325,"meta":37},[5323],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[24,109693,109691],{"__ignoreMap":37},[20,109695,109696],{},"小车通过 slide joint 左右移动:",[32,109698,109700],{"className":53170,"code":109699,"language":53172,"meta":37,"style":37},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[24,109701,109702],{"__ignoreMap":37},[41,109703,109704,109706,109708,109710,109712,109715,109717,109719,109722,109724,109726,109729],{"class":43,"line":44},[41,109705,1183],{"class":275},[41,109707,103059],{"class":51403},[41,109709,15058],{"class":54},[41,109711,321],{"class":275},[41,109713,109714],{"class":378},"\"cart_x\"",[41,109716,53927],{"class":54},[41,109718,321],{"class":275},[41,109720,109721],{"class":378},"\"slide\"",[41,109723,106131],{"class":54},[41,109725,321],{"class":275},[41,109727,109728],{"class":378},"\"1 0 0\"",[41,109730,101247],{"class":275},[20,109732,109733],{},"杆子通过 hinge joint 旋转:",[32,109735,109737],{"className":53170,"code":109736,"language":53172,"meta":37,"style":37},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[24,109738,109739],{"__ignoreMap":37},[41,109740,109741,109743,109745,109747,109749,109752,109754,109756,109758,109760,109762,109764],{"class":43,"line":44},[41,109742,1183],{"class":275},[41,109744,103059],{"class":51403},[41,109746,15058],{"class":54},[41,109748,321],{"class":275},[41,109750,109751],{"class":378},"\"pole_hinge\"",[41,109753,53927],{"class":54},[41,109755,321],{"class":275},[41,109757,106122],{"class":378},[41,109759,106131],{"class":54},[41,109761,321],{"class":275},[41,109763,106136],{"class":378},[41,109765,101247],{"class":275},[20,109767,109768],{},"控制力作用在小车 slide joint 上:",[32,109770,109772],{"className":53170,"code":109771,"language":53172,"meta":37,"style":37},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[24,109773,109774],{"__ignoreMap":37},[41,109775,109776,109778,109780,109782,109784,109787,109789,109791,109793,109795,109797,109799],{"class":43,"line":44},[41,109777,1183],{"class":275},[41,109779,106177],{"class":51403},[41,109781,15058],{"class":54},[41,109783,321],{"class":275},[41,109785,109786],{"class":378},"\"cart_motor\"",[41,109788,106187],{"class":54},[41,109790,321],{"class":275},[41,109792,109714],{"class":378},[41,109794,106194],{"class":54},[41,109796,321],{"class":275},[41,109798,54419],{"class":378},[41,109800,101247],{"class":275},[241,109802,109804],{"id":109803},"cartpole-的状态是什么","Cartpole 的状态是什么",[20,109806,109807],{},"这个简化模型有两个关节：",[411,109809,109810,109821],{},[414,109811,109812],{},[417,109813,109814,109816,109818],{},[420,109815,102862],{"align":23874},[420,109817,23875],{"align":23874},[420,109819,109820],{"align":23874},"对应状态",[458,109822,109823,109836],{},[417,109824,109825,109830,109833],{},[463,109826,109827],{"align":23874},[24,109828,109829],{},"cart_x",[463,109831,109832],{"align":23874},"slide",[463,109834,109835],{"align":23874},"小车 x 位置",[417,109837,109838,109843,109845],{},[463,109839,109840],{"align":23874},[24,109841,109842],{},"pole_hinge",[463,109844,105943],{"align":23874},[463,109846,109847],{"align":23874},"杆子角度",[20,109849,109850],{},"所以：",[32,109852,109855],{"className":109853,"code":109854,"language":5325,"meta":37},[5323],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[24,109856,109854],{"__ignoreMap":37},[20,109858,109859],{},"把它们拼起来就是观测：",[32,109861,109864],{"className":109862,"code":109863,"language":5325,"meta":37},[5323],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[24,109865,109863],{"__ignoreMap":37},[241,109867,109869],{"id":109868},"action-是什么","action 是什么",[20,109871,109872],{},"本章只有一个 actuator：",[32,109874,109877],{"className":109875,"code":109876,"language":5325,"meta":37},[5323],"data.ctrl[0] = action\n",[24,109878,109876],{"__ignoreMap":37},[20,109880,109881],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[241,109883,109885],{"id":109884},"reward-是什么","reward 是什么",[20,109887,109888],{},"奖励函数：",[32,109890,109892],{"className":30481,"code":109891,"language":30483,"meta":37,"style":37},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[24,109893,109894],{"__ignoreMap":37},[41,109895,109896,109898,109901,109903,109905,109907,109910,109912,109915,109917,109919,109921,109924,109926],{"class":43,"line":44},[41,109897,17184],{"class":271},[41,109899,109900],{"class":58}," float",[41,109902,276],{"class":275},[41,109904,102506],{"class":58},[41,109906,52374],{"class":271},[41,109908,109909],{"class":58}," 0.1",[41,109911,6656],{"class":271},[41,109913,109914],{"class":275}," cart_x ",[41,109916,728],{"class":271},[41,109918,109914],{"class":275},[41,109920,805],{"class":271},[41,109922,109923],{"class":275}," pole_angle ",[41,109925,728],{"class":271},[41,109927,109928],{"class":275}," pole_angle)\n",[20,109930,106329],{},[224,109932,109933,109938,109941],{},[227,109934,109935,109936,28488],{},"基础奖励是 ",[24,109937,102506],{},[227,109939,109940],{},"小车离中心越远，扣分越多。",[227,109942,109943],{},"杆子角度越大，扣分越多。",[20,109945,109946],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[15,109948,101356],{"id":101355},[32,109950,109952],{"className":30481,"code":109951,"language":30483,"meta":37,"style":37},"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",[24,109953,109954,109960,109970,109974,109978,109986,109991,109995,109999,110003,110008,110012,110017,110022,110027,110031,110036,110041,110046,110050,110054,110058,110062,110066,110071,110075,110079,110083,110087,110091,110101,110108,110112,110116,110130,110144,110157,110187,110191,110195,110207,110219,110227,110231,110244,110248,110252,110261,110265,110281,110291,110304,110317,110321,110344,110362,110366,110378,110382,110386,110396,110406,110410,110426,110467,110471,110491,110507,110511,110515,110527],{"__ignoreMap":37},[41,109955,109956,109958],{"class":43,"line":44},[41,109957,30495],{"class":271},[41,109959,101404],{"class":275},[41,109961,109962,109964,109966,109968],{"class":43,"line":51},[41,109963,30495],{"class":271},[41,109965,31483],{"class":275},[41,109967,31486],{"class":271},[41,109969,31489],{"class":275},[41,109971,109972],{"class":43,"line":62},[41,109973,80],{"emptyLinePlaceholder":79},[41,109975,109976],{"class":43,"line":70},[41,109977,80],{"emptyLinePlaceholder":79},[41,109979,109980,109982,109984],{"class":43,"line":76},[41,109981,101417],{"class":58},[41,109983,13702],{"class":271},[41,109985,101422],{"class":378},[41,109987,109988],{"class":43,"line":83},[41,109989,109990],{"class":378},"\u003Cmujoco model=\"cartpole\">\n",[41,109992,109993],{"class":43,"line":89},[41,109994,101432],{"class":378},[41,109996,109997],{"class":43,"line":96},[41,109998,80],{"emptyLinePlaceholder":79},[41,110000,110001],{"class":43,"line":104},[41,110002,101441],{"class":378},[41,110004,110005],{"class":43,"line":176},[41,110006,110007],{"class":378},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[41,110009,110010],{"class":43,"line":184},[41,110011,80],{"emptyLinePlaceholder":79},[41,110013,110014],{"class":43,"line":1757},[41,110015,110016],{"class":378},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[41,110018,110019],{"class":43,"line":1763},[41,110020,110021],{"class":378},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[41,110023,110024],{"class":43,"line":1768},[41,110025,110026],{"class":378},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[41,110028,110029],{"class":43,"line":1782},[41,110030,80],{"emptyLinePlaceholder":79},[41,110032,110033],{"class":43,"line":1787},[41,110034,110035],{"class":378},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[41,110037,110038],{"class":43,"line":1793},[41,110039,110040],{"class":378},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[41,110042,110043],{"class":43,"line":1814},[41,110044,110045],{"class":378},"        \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",[41,110047,110048],{"class":43,"line":1819},[41,110049,106541],{"class":378},[41,110051,110052],{"class":43,"line":1833},[41,110053,101470],{"class":378},[41,110055,110056],{"class":43,"line":1838},[41,110057,101475],{"class":378},[41,110059,110060],{"class":43,"line":1867},[41,110061,80],{"emptyLinePlaceholder":79},[41,110063,110064],{"class":43,"line":1872},[41,110065,106558],{"class":378},[41,110067,110068],{"class":43,"line":1889},[41,110069,110070],{"class":378},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[41,110072,110073],{"class":43,"line":1894},[41,110074,106568],{"class":378},[41,110076,110077],{"class":43,"line":1899},[41,110078,101480],{"class":378},[41,110080,110081],{"class":43,"line":1904},[41,110082,95801],{"class":378},[41,110084,110085],{"class":43,"line":1918},[41,110086,80],{"emptyLinePlaceholder":79},[41,110088,110089],{"class":43,"line":1923},[41,110090,80],{"emptyLinePlaceholder":79},[41,110092,110093,110095,110098],{"class":43,"line":2715},[41,110094,32050],{"class":271},[41,110096,110097],{"class":54}," get_observation",[41,110099,110100],{"class":275},"(data: mujoco.MjData) -> np.ndarray:\n",[41,110102,110103,110105],{"class":43,"line":2729},[41,110104,4228],{"class":271},[41,110106,110107],{"class":275}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[41,110109,110110],{"class":43,"line":2737},[41,110111,80],{"emptyLinePlaceholder":79},[41,110113,110114],{"class":43,"line":2742},[41,110115,80],{"emptyLinePlaceholder":79},[41,110117,110118,110120,110123,110126,110128],{"class":43,"line":2748},[41,110119,32050],{"class":271},[41,110121,110122],{"class":54}," compute_reward",[41,110124,110125],{"class":275},"(obs: np.ndarray) -> ",[41,110127,315],{"class":58},[41,110129,3877],{"class":275},[41,110131,110132,110135,110137,110140,110142],{"class":43,"line":2754},[41,110133,110134],{"class":275},"    cart_x ",[41,110136,321],{"class":271},[41,110138,110139],{"class":275}," obs[",[41,110141,465],{"class":58},[41,110143,33349],{"class":275},[41,110145,110146,110149,110151,110153,110155],{"class":43,"line":2759},[41,110147,110148],{"class":275},"    pole_angle ",[41,110150,321],{"class":271},[41,110152,110139],{"class":275},[41,110154,26],{"class":58},[41,110156,33349],{"class":275},[41,110158,110159,110161,110163,110165,110167,110169,110171,110173,110175,110177,110179,110181,110183,110185],{"class":43,"line":8086},[41,110160,4228],{"class":271},[41,110162,109900],{"class":58},[41,110164,276],{"class":275},[41,110166,102506],{"class":58},[41,110168,52374],{"class":271},[41,110170,109909],{"class":58},[41,110172,6656],{"class":271},[41,110174,109914],{"class":275},[41,110176,728],{"class":271},[41,110178,109914],{"class":275},[41,110180,805],{"class":271},[41,110182,109923],{"class":275},[41,110184,728],{"class":271},[41,110186,109928],{"class":275},[41,110188,110189],{"class":43,"line":8110},[41,110190,80],{"emptyLinePlaceholder":79},[41,110192,110193],{"class":43,"line":8115},[41,110194,80],{"emptyLinePlaceholder":79},[41,110196,110197,110199,110201,110203,110205],{"class":43,"line":8121},[41,110198,32050],{"class":271},[41,110200,2112],{"class":54},[41,110202,101501],{"class":275},[41,110204,95789],{"class":58},[41,110206,3877],{"class":275},[41,110208,110209,110211,110213,110215,110217],{"class":43,"line":8148},[41,110210,101510],{"class":275},[41,110212,321],{"class":271},[41,110214,101515],{"class":275},[41,110216,101417],{"class":58},[41,110218,282],{"class":275},[41,110220,110221,110223,110225],{"class":43,"line":8153},[41,110222,101524],{"class":275},[41,110224,321],{"class":271},[41,110226,101529],{"class":275},[41,110228,110229],{"class":43,"line":8159},[41,110230,80],{"emptyLinePlaceholder":79},[41,110232,110233,110235,110237,110239,110241],{"class":43,"line":8171},[41,110234,105172],{"class":275},[41,110236,26],{"class":58},[41,110238,4581],{"class":275},[41,110240,321],{"class":271},[41,110242,110243],{"class":58}," 0.1\n",[41,110245,110246],{"class":43,"line":8183},[41,110247,105185],{"class":275},[41,110249,110250],{"class":43,"line":8195},[41,110251,80],{"emptyLinePlaceholder":79},[41,110253,110254,110257,110259],{"class":43,"line":9854},[41,110255,110256],{"class":275},"    total_reward ",[41,110258,321],{"class":271},[41,110260,104864],{"class":58},[41,110262,110263],{"class":43,"line":9879},[41,110264,80],{"emptyLinePlaceholder":79},[41,110266,110267,110269,110271,110273,110275,110277,110279],{"class":43,"line":9902},[41,110268,3339],{"class":271},[41,110270,31719],{"class":275},[41,110272,26146],{"class":271},[41,110274,32546],{"class":58},[41,110276,276],{"class":275},[41,110278,6548],{"class":58},[41,110280,30889],{"class":275},[41,110282,110283,110286,110288],{"class":43,"line":9926},[41,110284,110285],{"class":275},"        obs ",[41,110287,321],{"class":271},[41,110289,110290],{"class":275}," get_observation(data)\n",[41,110292,110293,110296,110298,110300,110302],{"class":43,"line":9931},[41,110294,110295],{"class":275},"        pole_angle ",[41,110297,321],{"class":271},[41,110299,110139],{"class":275},[41,110301,26],{"class":58},[41,110303,33349],{"class":275},[41,110305,110306,110309,110311,110313,110315],{"class":43,"line":9936},[41,110307,110308],{"class":275},"        pole_angular_velocity ",[41,110310,321],{"class":271},[41,110312,110139],{"class":275},[41,110314,345],{"class":58},[41,110316,33349],{"class":275},[41,110318,110319],{"class":43,"line":9941},[41,110320,80],{"emptyLinePlaceholder":79},[41,110322,110323,110326,110328,110331,110333,110335,110337,110339,110341],{"class":43,"line":9950},[41,110324,110325],{"class":275},"        action ",[41,110327,321],{"class":271},[41,110329,110330],{"class":58}," 2.0",[41,110332,6656],{"class":271},[41,110334,109923],{"class":275},[41,110336,754],{"class":271},[41,110338,61970],{"class":58},[41,110340,6656],{"class":271},[41,110342,110343],{"class":275}," pole_angular_velocity\n",[41,110345,110346,110348,110350,110352,110354,110356,110358,110360],{"class":43,"line":9955},[41,110347,110325],{"class":275},[41,110349,321],{"class":271},[41,110351,107550],{"class":275},[41,110353,805],{"class":271},[41,110355,102506],{"class":58},[41,110357,12573],{"class":275},[41,110359,102506],{"class":58},[41,110361,282],{"class":275},[41,110363,110364],{"class":43,"line":9961},[41,110365,80],{"emptyLinePlaceholder":79},[41,110367,110368,110370,110372,110374,110376],{"class":43,"line":9982},[41,110369,106720],{"class":275},[41,110371,465],{"class":58},[41,110373,4581],{"class":275},[41,110375,321],{"class":271},[41,110377,107573],{"class":275},[41,110379,110380],{"class":43,"line":9988},[41,110381,101619],{"class":275},[41,110383,110384],{"class":43,"line":10002},[41,110385,80],{"emptyLinePlaceholder":79},[41,110387,110388,110391,110393],{"class":43,"line":10008},[41,110389,110390],{"class":275},"        reward ",[41,110392,321],{"class":271},[41,110394,110395],{"class":275}," compute_reward(get_observation(data))\n",[41,110397,110398,110401,110403],{"class":43,"line":10035},[41,110399,110400],{"class":275},"        total_reward ",[41,110402,9615],{"class":271},[41,110404,110405],{"class":275}," reward\n",[41,110407,110408],{"class":43,"line":10044},[41,110409,80],{"emptyLinePlaceholder":79},[41,110411,110412,110414,110416,110418,110420,110422,110424],{"class":43,"line":10050},[41,110413,2635],{"class":271},[41,110415,31719],{"class":275},[41,110417,601],{"class":271},[41,110419,5892],{"class":58},[41,110421,101662],{"class":271},[41,110423,4231],{"class":58},[41,110425,3877],{"class":275},[41,110427,110428,110430,110432,110435,110438,110441,110444,110446,110449,110452,110454,110456,110458,110460,110463,110465],{"class":43,"line":10058},[41,110429,34753],{"class":58},[41,110431,276],{"class":275},[41,110433,110434],{"class":378},"\"step:\"",[41,110436,110437],{"class":275},", step, ",[41,110439,110440],{"class":378},"\"obs:\"",[41,110442,110443],{"class":275},", np.round(obs, ",[41,110445,345],{"class":58},[41,110447,110448],{"class":275},"), ",[41,110450,110451],{"class":378},"\"action:\"",[41,110453,12573],{"class":275},[41,110455,32121],{"class":58},[41,110457,276],{"class":275},[41,110459,315],{"class":58},[41,110461,110462],{"class":275},"(action), ",[41,110464,345],{"class":58},[41,110466,30600],{"class":275},[41,110468,110469],{"class":43,"line":10063},[41,110470,80],{"emptyLinePlaceholder":79},[41,110472,110473,110475,110477,110480,110482,110484,110487,110489],{"class":43,"line":16742},[41,110474,31402],{"class":58},[41,110476,276],{"class":275},[41,110478,110479],{"class":378},"\"total_reward:\"",[41,110481,12573],{"class":275},[41,110483,32121],{"class":58},[41,110485,110486],{"class":275},"(total_reward, ",[41,110488,345],{"class":58},[41,110490,30600],{"class":275},[41,110492,110493,110495,110497,110500,110503,110505],{"class":43,"line":16748},[41,110494,31402],{"class":58},[41,110496,276],{"class":275},[41,110498,110499],{"class":378},"\"final obs:\"",[41,110501,110502],{"class":275},", np.round(get_observation(data), ",[41,110504,345],{"class":58},[41,110506,30600],{"class":275},[41,110508,110509],{"class":43,"line":16771},[41,110510,80],{"emptyLinePlaceholder":79},[41,110512,110513],{"class":43,"line":16777},[41,110514,80],{"emptyLinePlaceholder":79},[41,110516,110517,110519,110521,110523,110525],{"class":43,"line":16800},[41,110518,1672],{"class":271},[41,110520,31323],{"class":58},[41,110522,101662],{"class":271},[41,110524,101665],{"class":378},[41,110526,3877],{"class":275},[41,110528,110529],{"class":43,"line":16814},[41,110530,101672],{"class":275},[20,110532,103673],{},[32,110534,110536],{"className":34,"code":110535,"language":36,"meta":37,"style":37},"touch ch6_cartpole.py\n",[24,110537,110538],{"__ignoreMap":37},[41,110539,110540,110542],{"class":43,"line":44},[41,110541,101386],{"class":54},[41,110543,110544],{"class":378}," ch6_cartpole.py\n",[20,110546,110547],{},"运行：",[32,110549,110551],{"className":34,"code":110550,"language":36,"meta":37,"style":37},"python ch6_cartpole.py\n",[24,110552,110553],{"__ignoreMap":37},[41,110554,110555,110557],{"class":43,"line":44},[41,110556,30483],{"class":54},[41,110558,110544],{"class":378},[241,110560,101675],{"id":101675},[20,110562,110563],{},"构造观测：",[32,110565,110567],{"className":30481,"code":110566,"language":30483,"meta":37,"style":37},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[24,110568,110569,110577],{"__ignoreMap":37},[41,110570,110571,110573,110575],{"class":43,"line":44},[41,110572,32050],{"class":271},[41,110574,110097],{"class":54},[41,110576,110100],{"class":275},[41,110578,110579,110581],{"class":43,"line":51},[41,110580,4228],{"class":271},[41,110582,110107],{"class":275},[20,110584,110585,110588,110589,110591,110592,110594],{},[24,110586,110587],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[24,110590,104133],{}," 2 维，",[24,110593,104463],{}," 2 维，所以 obs 是 4 维。",[20,110596,110597],{},"设置初始角度：",[32,110599,110601],{"className":30481,"code":110600,"language":30483,"meta":37,"style":37},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[24,110602,110603,110615],{"__ignoreMap":37},[41,110604,110605,110607,110609,110611,110613],{"class":43,"line":44},[41,110606,104802],{"class":275},[41,110608,26],{"class":58},[41,110610,4581],{"class":275},[41,110612,321],{"class":271},[41,110614,110243],{"class":58},[41,110616,110617],{"class":43,"line":51},[41,110618,104646],{"class":275},[20,110620,110621],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[20,110623,110624],{},"简单反馈控制：",[32,110626,110628],{"className":30481,"code":110627,"language":30483,"meta":37,"style":37},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[24,110629,110630,110650],{"__ignoreMap":37},[41,110631,110632,110634,110636,110638,110640,110642,110644,110646,110648],{"class":43,"line":44},[41,110633,107545],{"class":275},[41,110635,321],{"class":271},[41,110637,110330],{"class":58},[41,110639,6656],{"class":271},[41,110641,109923],{"class":275},[41,110643,754],{"class":271},[41,110645,61970],{"class":58},[41,110647,6656],{"class":271},[41,110649,110343],{"class":275},[41,110651,110652,110654,110656,110658,110660,110662,110664,110666],{"class":43,"line":51},[41,110653,107545],{"class":275},[41,110655,321],{"class":271},[41,110657,107550],{"class":275},[41,110659,805],{"class":271},[41,110661,102506],{"class":58},[41,110663,12573],{"class":275},[41,110665,102506],{"class":58},[41,110667,282],{"class":275},[20,110669,110670],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[20,110672,110673],{},"限制动作：",[32,110675,110677],{"className":30481,"code":110676,"language":30483,"meta":37,"style":37},"np.clip(action, -1.0, 1.0)\n",[24,110678,110679],{"__ignoreMap":37},[41,110680,110681,110684,110686,110688,110690,110692],{"class":43,"line":44},[41,110682,110683],{"class":275},"np.clip(action, ",[41,110685,805],{"class":271},[41,110687,102506],{"class":58},[41,110689,12573],{"class":275},[41,110691,102506],{"class":58},[41,110693,282],{"class":275},[20,110695,110696,110697,110700],{},"因为 XML 里 ",[24,110698,110699],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[241,110702,101811],{"id":101811},[32,110704,110705],{"className":30481,"code":110566,"language":30483,"meta":37,"style":37},[24,110706,110707,110715],{"__ignoreMap":37},[41,110708,110709,110711,110713],{"class":43,"line":44},[41,110710,32050],{"class":271},[41,110712,110097],{"class":54},[41,110714,110100],{"class":275},[41,110716,110717,110719],{"class":43,"line":51},[41,110718,4228],{"class":271},[41,110720,110107],{"class":275},[20,110722,110723,110724,110727,110728,110731,110732,110735],{},"这段定义了一个函数，用来获取当前观测。",[24,110725,110726],{},"data.qpos.copy()"," 是位置数组副本，",[24,110729,110730],{},"data.qvel.copy()"," 是速度数组副本。",[24,110733,110734],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[20,110737,110738],{},"在本章模型里：",[32,110740,110743],{"className":110741,"code":110742,"language":5325,"meta":37},[5323],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[24,110744,110742],{"__ignoreMap":37},[20,110746,110747],{},"所以返回的 obs 是：",[32,110749,110752],{"className":110750,"code":110751,"language":5325,"meta":37},[5323],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[24,110753,110751],{"__ignoreMap":37},[32,110755,110757],{"className":30481,"code":110756,"language":30483,"meta":37,"style":37},"def compute_reward(obs: np.ndarray) -> float:\n",[24,110758,110759],{"__ignoreMap":37},[41,110760,110761,110763,110765,110767,110769],{"class":43,"line":44},[41,110762,32050],{"class":271},[41,110764,110122],{"class":54},[41,110766,110125],{"class":275},[41,110768,315],{"class":58},[41,110770,3877],{"class":275},[20,110772,110773,110774,110777],{},"这行定义奖励函数。输入是观测 ",[24,110775,110776],{},"obs","，输出是一个浮点数奖励。",[32,110779,110781],{"className":30481,"code":110780,"language":30483,"meta":37,"style":37},"cart_x = obs[0]\npole_angle = obs[1]\n",[24,110782,110783,110796],{"__ignoreMap":37},[41,110784,110785,110788,110790,110792,110794],{"class":43,"line":44},[41,110786,110787],{"class":275},"cart_x ",[41,110789,321],{"class":271},[41,110791,110139],{"class":275},[41,110793,465],{"class":58},[41,110795,33349],{"class":275},[41,110797,110798,110801,110803,110805,110807],{"class":43,"line":51},[41,110799,110800],{"class":275},"pole_angle ",[41,110802,321],{"class":271},[41,110804,110139],{"class":275},[41,110806,26],{"class":58},[41,110808,33349],{"class":275},[20,110810,110811,110812,110815,110816,110819],{},"数组索引从 0 开始。",[24,110813,110814],{},"obs[0]"," 是第一个元素，也就是小车位置。",[24,110817,110818],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[32,110821,110822],{"className":30481,"code":109891,"language":30483,"meta":37,"style":37},[24,110823,110824],{"__ignoreMap":37},[41,110825,110826,110828,110830,110832,110834,110836,110838,110840,110842,110844,110846,110848,110850,110852],{"class":43,"line":44},[41,110827,17184],{"class":271},[41,110829,109900],{"class":58},[41,110831,276],{"class":275},[41,110833,102506],{"class":58},[41,110835,52374],{"class":271},[41,110837,109909],{"class":58},[41,110839,6656],{"class":271},[41,110841,109914],{"class":275},[41,110843,728],{"class":271},[41,110845,109914],{"class":275},[41,110847,805],{"class":271},[41,110849,109923],{"class":275},[41,110851,728],{"class":271},[41,110853,109928],{"class":275},[20,110855,110856,110857,110860,110861,110864],{},"这行计算奖励。",[24,110858,110859],{},"cart_x * cart_x"," 是小车位置的平方，",[24,110862,110863],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[32,110866,110868],{"className":30481,"code":110867,"language":30483,"meta":37,"style":37},"data.qpos[1] = 0.1\n",[24,110869,110870],{"__ignoreMap":37},[41,110871,110872,110874,110876,110878,110880],{"class":43,"line":44},[41,110873,104802],{"class":275},[41,110875,26],{"class":58},[41,110877,4581],{"class":275},[41,110879,321],{"class":271},[41,110881,110243],{"class":58},[20,110883,110884,110885,110887,110888,110890],{},"手动设置杆子的初始角度。因为 ",[24,110886,105559],{}," 是小车位置，",[24,110889,105562],{}," 是杆子角度，所以这里改的是杆子。",[32,110892,110893],{"className":30481,"code":104646,"language":30483,"meta":37,"style":37},[24,110894,110895],{"__ignoreMap":37},[41,110896,110897],{"class":43,"line":44},[41,110898,104646],{"class":275},[20,110900,105605,110901,110903],{},[24,110902,104133],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[32,110905,110907],{"className":30481,"code":110906,"language":30483,"meta":37,"style":37},"total_reward = 0.0\n",[24,110908,110909],{"__ignoreMap":37},[41,110910,110911,110914,110916],{"class":43,"line":44},[41,110912,110913],{"class":275},"total_reward ",[41,110915,321],{"class":271},[41,110917,104864],{"class":58},[20,110919,110920],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[32,110922,110924],{"className":30481,"code":110923,"language":30483,"meta":37,"style":37},"for step in range(1000):\n",[24,110925,110926],{"__ignoreMap":37},[41,110927,110928,110930,110932,110934,110936,110938,110940],{"class":43,"line":44},[41,110929,3163],{"class":271},[41,110931,31719],{"class":275},[41,110933,26146],{"class":271},[41,110935,32546],{"class":58},[41,110937,276],{"class":275},[41,110939,6548],{"class":58},[41,110941,30889],{"class":275},[20,110943,110944,110945,110947],{},"循环 1000 步。",[24,110946,107237],{}," 是当前步数，从 0 到 999。",[32,110949,110951],{"className":30481,"code":110950,"language":30483,"meta":37,"style":37},"obs = get_observation(data)\n",[24,110952,110953],{"__ignoreMap":37},[41,110954,110955,110958,110960],{"class":43,"line":44},[41,110956,110957],{"class":275},"obs ",[41,110959,321],{"class":271},[41,110961,110290],{"class":275},[20,110963,110964,110965,28488],{},"读取当前状态，保存到 ",[24,110966,110776],{},[32,110968,110970],{"className":30481,"code":110969,"language":30483,"meta":37,"style":37},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[24,110971,110972,110984],{"__ignoreMap":37},[41,110973,110974,110976,110978,110980,110982],{"class":43,"line":44},[41,110975,110800],{"class":275},[41,110977,321],{"class":271},[41,110979,110139],{"class":275},[41,110981,26],{"class":58},[41,110983,33349],{"class":275},[41,110985,110986,110989,110991,110993,110995],{"class":43,"line":51},[41,110987,110988],{"class":275},"pole_angular_velocity ",[41,110990,321],{"class":271},[41,110992,110139],{"class":275},[41,110994,345],{"class":58},[41,110996,33349],{"class":275},[20,110998,110999,111000,111003,111004,28488],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[24,111001,111002],{},"obs[3]","？因为 obs 的顺序是 ",[24,111005,111006],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[32,111008,111010],{"className":30481,"code":111009,"language":30483,"meta":37,"style":37},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[24,111011,111012],{"__ignoreMap":37},[41,111013,111014,111016,111018,111020,111022,111024,111026,111028,111030],{"class":43,"line":44},[41,111015,107545],{"class":275},[41,111017,321],{"class":271},[41,111019,110330],{"class":58},[41,111021,6656],{"class":271},[41,111023,109923],{"class":275},[41,111025,754],{"class":271},[41,111027,61970],{"class":58},[41,111029,6656],{"class":271},[41,111031,110343],{"class":275},[20,111033,111034,111035,101121,111037,111039],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[24,111036,105363],{},[24,111038,35432],{}," 是人为设置的系数，不是固定公式。",[32,111041,111043],{"className":30481,"code":111042,"language":30483,"meta":37,"style":37},"action = np.clip(action, -1.0, 1.0)\n",[24,111044,111045],{"__ignoreMap":37},[41,111046,111047,111049,111051,111053,111055,111057,111059,111061],{"class":43,"line":44},[41,111048,107545],{"class":275},[41,111050,321],{"class":271},[41,111052,107550],{"class":275},[41,111054,805],{"class":271},[41,111056,102506],{"class":58},[41,111058,12573],{"class":275},[41,111060,102506],{"class":58},[41,111062,282],{"class":275},[20,111064,111065],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[32,111067,111068],{"className":30481,"code":109876,"language":30483,"meta":37,"style":37},[24,111069,111070],{"__ignoreMap":37},[41,111071,111072,111074,111076,111078,111080],{"class":43,"line":44},[41,111073,105974],{"class":275},[41,111075,465],{"class":58},[41,111077,4581],{"class":275},[41,111079,321],{"class":271},[41,111081,107573],{"class":275},[20,111083,111084],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[32,111086,111087],{"className":30481,"code":104608,"language":30483,"meta":37,"style":37},[24,111088,111089],{"__ignoreMap":37},[41,111090,111091],{"class":43,"line":44},[41,111092,104608],{"class":275},[20,111094,111095,111096,111098],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[24,111097,106229],{}," 计算小车和杆子的下一刻状态。",[32,111100,111102],{"className":30481,"code":111101,"language":30483,"meta":37,"style":37},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[24,111103,111104,111113],{"__ignoreMap":37},[41,111105,111106,111109,111111],{"class":43,"line":44},[41,111107,111108],{"class":275},"reward ",[41,111110,321],{"class":271},[41,111112,110395],{"class":275},[41,111114,111115,111117,111119],{"class":43,"line":51},[41,111116,110913],{"class":275},[41,111118,9615],{"class":271},[41,111120,110405],{"class":275},[20,111122,111123,111124,111126,111127,111130,111131,28488],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[24,111125,9615],{}," 是简写，",[24,111128,111129],{},"total_reward += reward"," 等价于 ",[24,111132,111133],{},"total_reward = total_reward + reward",[32,111135,111137],{"className":30481,"code":111136,"language":30483,"meta":37,"style":37},"if step % 100 == 0:\n",[24,111138,111139],{"__ignoreMap":37},[41,111140,111141,111143,111145,111147,111149,111151,111153],{"class":43,"line":44},[41,111142,1672],{"class":271},[41,111144,31719],{"class":275},[41,111146,601],{"class":271},[41,111148,5892],{"class":58},[41,111150,101662],{"class":271},[41,111152,4231],{"class":58},[41,111154,3877],{"class":275},[20,111156,111157,111159,111160,111163],{},[24,111158,601],{}," 是取余数。",[24,111161,111162],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[32,111165,111167],{"className":30481,"code":111166,"language":30483,"meta":37,"style":37},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[24,111168,111169],{"__ignoreMap":37},[41,111170,111171,111173,111175,111177,111179,111181,111183,111185,111187,111189,111191,111193,111195,111197,111199,111201],{"class":43,"line":44},[41,111172,30518],{"class":58},[41,111174,276],{"class":275},[41,111176,110434],{"class":378},[41,111178,110437],{"class":275},[41,111180,110440],{"class":378},[41,111182,110443],{"class":275},[41,111184,345],{"class":58},[41,111186,110448],{"class":275},[41,111188,110451],{"class":378},[41,111190,12573],{"class":275},[41,111192,32121],{"class":58},[41,111194,276],{"class":275},[41,111196,315],{"class":58},[41,111198,110462],{"class":275},[41,111200,345],{"class":58},[41,111202,30600],{"class":275},[20,111204,111205,111206,111209,111210,111213],{},"打印当前步数、观测和动作。",[24,111207,111208],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[24,111211,111212],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[15,111215,102419],{"id":102418},[20,111217,111218],{},"观测向量:",[32,111220,111223],{"className":111221,"code":111222,"language":5325,"meta":37},[5323],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[24,111224,111222],{"__ignoreMap":37},[20,111226,111227],{},"控制器是教学用的简单线性反馈，不保证最优。",[20,111229,111230],{},"每隔 100 步会打印一次：",[32,111232,111235],{"className":111233,"code":111234,"language":5325,"meta":37},[5323],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[24,111236,111234],{"__ignoreMap":37},[20,111238,111239],{},"重点观察：",[224,111241,111242,111248,111253],{},[227,111243,111244,111247],{},[24,111245,111246],{},"pole_angle"," 是否越来越大。",[227,111249,111250,111252],{},[24,111251,109829],{}," 是否跑得太远。",[227,111254,111255,111256,82642,111258,28488],{},"action 是否经常被 clip 到 ",[24,111257,104018],{},[24,111259,26],{},[20,111261,111262],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[15,111264,102451],{"id":102450},[224,111266,111267,111273,111276,111282,111292,111298,111301],{},[227,111268,111269,111270,28488],{},"把初始角度改为 ",[24,111271,111272],{},"data.qpos[1] = 0.3",[227,111274,111275],{},"重新运行，观察控制是否变差。",[227,111277,111278,111279,111281],{},"把 actuator ",[24,111280,107170],{}," 改小。",[227,111283,111284,111285,111288,111289,28488],{},"打印 ",[24,111286,111287],{},"model.nq, model.nv, model.nu","，应为 ",[24,111290,111291],{},"2 2 1",[227,111293,111294,111295,111297],{},"把 reward 里的 ",[24,111296,110863],{}," 系数改大，观察总奖励变化。",[227,111299,111300],{},"把控制器改成反号，观察杆子是否更容易倒。",[227,111302,111303],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[15,111305,102556],{"id":102555},[241,111307,111308],{"id":111308},"杆子方向和预期不一致",[20,111310,102499,111311,111313,111314,111316],{},[24,111312,106342],{}," 和 capsule 的 ",[24,111315,103279],{},"，必要时用 viewer 可视化确认。",[241,111318,111319],{"id":111319},"控制器越控越倒",[20,111321,111322],{},"说明反馈符号可能反了，尝试:",[32,111324,111326],{"className":30481,"code":111325,"language":30483,"meta":37,"style":37},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[24,111327,111328],{"__ignoreMap":37},[41,111329,111330,111332,111334,111336,111338,111340,111342,111344,111346,111348],{"class":43,"line":44},[41,111331,107545],{"class":275},[41,111333,321],{"class":271},[41,111335,52374],{"class":271},[41,111337,105363],{"class":58},[41,111339,6656],{"class":271},[41,111341,109923],{"class":275},[41,111343,805],{"class":271},[41,111345,61970],{"class":58},[41,111347,6656],{"class":271},[41,111349,110343],{"class":275},[241,111351,111352],{"id":111352},"小车飞走",[20,111354,111355,111356,111358,111359,111362],{},"降低 ",[24,111357,107170],{}," 或缩小 ",[24,111360,111361],{},"action"," 的 clip 范围。",[241,111364,111366,111368],{"id":111365},"obs3-为什么是杆子角速度",[24,111367,111002],{}," 为什么是杆子角速度",[20,111370,111371],{},"因为这个模型里：",[32,111373,111376],{"className":111374,"code":111375,"language":5325,"meta":37},[5323],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[24,111377,111375],{"__ignoreMap":37},[20,111379,109850],{},[32,111381,111384],{"className":111382,"code":111383,"language":5325,"meta":37},[5323],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[24,111385,111383],{"__ignoreMap":37},[241,111387,111389],{"id":111388},"reward-变成负数是否错误","reward 变成负数是否错误",[20,111391,111392],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[15,111394,102710],{"id":102709},[20,111396,111397],{},"一个控制任务通常包含：",[224,111399,111400,111403,111411,111416,111419],{},[227,111401,111402],{},"模型：Cartpole 的 body、joint、actuator。",[227,111404,111405,111406,486,111408,111410],{},"观测：从 ",[24,111407,104133],{},[24,111409,104463],{}," 里取状态。",[227,111412,111413,111414,28488],{},"动作：写入 ",[24,111415,101179],{},[227,111417,111418],{},"奖励：根据任务目标打分。",[227,111420,111421],{},"循环：obs -> action -> step -> reward。",[20,111423,111424],{},"这就是后面 Gymnasium 环境的基本骨架。",[189,111426,104389],{},{"title":37,"searchDepth":51,"depth":51,"links":111428},[111429,111430,111431,111436,111440,111441,111442,111450],{"id":100749,"depth":51,"text":100750},{"id":100872,"depth":51,"text":100873},{"id":101147,"depth":51,"text":101148,"children":111432},[111433,111434,111435],{"id":109803,"depth":62,"text":109804},{"id":109868,"depth":62,"text":109869},{"id":109884,"depth":62,"text":109885},{"id":101355,"depth":51,"text":101356,"children":111437},[111438,111439],{"id":101675,"depth":62,"text":101675},{"id":101811,"depth":62,"text":101811},{"id":102418,"depth":51,"text":102419},{"id":102450,"depth":51,"text":102451},{"id":102555,"depth":51,"text":102556,"children":111443},[111444,111445,111446,111447,111449],{"id":111308,"depth":62,"text":111308},{"id":111319,"depth":62,"text":111319},{"id":111352,"depth":62,"text":111352},{"id":111365,"depth":62,"text":111448},"obs[3] 为什么是杆子角速度",{"id":111388,"depth":62,"text":111389},{"id":102709,"depth":51,"text":102710},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109539,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111457,"title":111458,"body":111459,"description":37,"extension":197,"meta":113473,"navigation":79,"path":113474,"seo":113475,"stem":113476,"__hash__":113477},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111460,"toc":113449},[111461,111464,111466,111469,111471,111488,111491,111494,111500,111503,111505,111507,111531,111533,111547,111549,111590,111592,111610,111612,111615,111621,111624,111652,111656,111662,111687,111690,111721,111728,111731,111734,111740,111743,111749,111752,111758,111762,111765,111790,111793,111795,112555,112557,112569,112571,112582,112584,112587,112604,112607,112609,112620,112623,112625,112671,112674,112687,112690,112772,112775,112777,112793,112803,112816,112819,112858,112868,112879,112889,112902,112905,112934,112937,112947,112950,112956,112973,112984,112986,112992,113009,113020,113041,113044,113056,113059,113080,113083,113091,113099,113116,113119,113188,113195,113203,113206,113219,113226,113228,113231,113237,113240,113243,113249,113255,113257,113297,113299,113305,113314,113317,113319,113339,113342,113345,113351,113355,113357,113384,113387,113390,113417,113423,113426,113429,113431,113434,113437,113443,113446],[10,111462,111458],{"id":111463},"_7控制任务reacher-机械臂到达目标",[15,111465,100750],{"id":100749},[20,111467,111468],{},"本章搭建一个二维两关节 reacher 任务。",[20,111470,104434],{},[224,111472,111473,111476,111479,111482,111485],{},[227,111474,111475],{},"两个 hinge joint",[227,111477,111478],{},"两个 motor actuator",[227,111480,111481],{},"site 作为末端点和目标点",[227,111483,111484],{},"根据末端和目标距离设计 reward",[227,111486,111487],{},"构造机械臂任务的基本形式",[20,111489,111490],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[20,111492,111493],{},"Reacher 任务可以理解为：",[32,111495,111498],{"className":111496,"code":111497,"language":5325,"meta":37},[5323],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[24,111499,111497],{"__ignoreMap":37},[20,111501,111502],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[15,111504,100873],{"id":100872},[20,111506,100876],{},[32,111508,111509],{"className":34,"code":104491,"language":36,"meta":37,"style":37},[24,111510,111511],{"__ignoreMap":37},[41,111512,111513,111515,111517,111519,111521,111523,111525,111527,111529],{"class":43,"line":44},[41,111514,24713],{"class":54},[41,111516,26418],{"class":378},[41,111518,23970],{"class":378},[41,111520,26503],{"class":58},[41,111522,104506],{"class":378},[41,111524,100901],{"class":378},[41,111526,102604],{"class":378},[41,111528,100917],{"class":378},[41,111530,104515],{"class":378},[20,111532,102922],{},[32,111534,111535],{"className":34,"code":101022,"language":36,"meta":37,"style":37},[24,111536,111537],{"__ignoreMap":37},[41,111538,111539,111541,111543,111545],{"class":43,"line":44},[41,111540,23967],{"class":54},[41,111542,23970],{"class":378},[41,111544,101033],{"class":378},[41,111546,101036],{"class":378},[20,111548,102939],{},[32,111550,111552],{"className":34,"code":111551,"language":36,"meta":37,"style":37},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[24,111553,111554,111571,111580],{"__ignoreMap":37},[41,111555,111556,111558,111560,111562,111565,111567,111569],{"class":43,"line":44},[41,111557,30433],{"class":54},[41,111559,29279],{"class":378},[41,111561,25218],{"class":58},[41,111563,111564],{"class":378}," mujoco-reacher",[41,111566,101078],{"class":378},[41,111568,101081],{"class":58},[41,111570,101084],{"class":58},[41,111572,111573,111575,111577],{"class":43,"line":51},[41,111574,30433],{"class":54},[41,111576,101091],{"class":378},[41,111578,111579],{"class":378}," mujoco-reacher\n",[41,111581,111582,111584,111586,111588],{"class":43,"line":62},[41,111583,23967],{"class":54},[41,111585,23970],{"class":378},[41,111587,101033],{"class":378},[41,111589,101036],{"class":378},[20,111591,101107],{},[224,111593,111594,111597,111600],{},[227,111595,111596],{},"本章使用低维状态，不使用图像输入。",[227,111598,111599],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[227,111601,111602,111603,486,111605,486,111607,111609],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[24,111604,104133],{},[24,111606,104463],{},[24,111608,103783],{}," 的方法一致。",[15,111611,101148],{"id":101147},[20,111613,111614],{},"Reacher 任务核心:",[32,111616,111619],{"className":111617,"code":111618,"language":5325,"meta":37},[5323],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[24,111620,111618],{"__ignoreMap":37},[20,111622,111623],{},"读取 site 世界坐标:",[32,111625,111627],{"className":30481,"code":111626,"language":30483,"meta":37,"style":37},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[24,111628,111629,111642],{"__ignoreMap":37},[41,111630,111631,111633,111635,111637,111640],{"class":43,"line":44},[41,111632,103737],{"class":275},[41,111634,321],{"class":271},[41,111636,103508],{"class":275},[41,111638,111639],{"class":378},"\"tip\"",[41,111641,282],{"class":275},[41,111643,111644,111647,111649],{"class":43,"line":51},[41,111645,111646],{"class":275},"tip_pos ",[41,111648,321],{"class":271},[41,111650,111651],{"class":275}," data.site_xpos[site_id]\n",[241,111653,111655],{"id":111654},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[20,111657,111658,111659,111661],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[24,111660,104133],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[32,111663,111665],{"className":30481,"code":111664,"language":30483,"meta":37,"style":37},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[24,111666,111667,111677],{"__ignoreMap":37},[41,111668,111669,111672,111674],{"class":43,"line":44},[41,111670,111671],{"class":275},"tip ",[41,111673,321],{"class":271},[41,111675,111676],{"class":275}," data.site_xpos[tip_site_id]\n",[41,111678,111679,111682,111684],{"class":43,"line":51},[41,111680,111681],{"class":275},"target ",[41,111683,321],{"class":271},[41,111685,111686],{"class":275}," data.site_xpos[target_site_id]\n",[20,111688,111689],{},"这样 reward 就很容易写：",[32,111691,111693],{"className":30481,"code":111692,"language":30483,"meta":37,"style":37},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[24,111694,111695,111710],{"__ignoreMap":37},[41,111696,111697,111700,111702,111705,111707],{"class":43,"line":44},[41,111698,111699],{"class":275},"dist ",[41,111701,321],{"class":271},[41,111703,111704],{"class":275}," np.linalg.norm(tip ",[41,111706,805],{"class":271},[41,111708,111709],{"class":275}," target)\n",[41,111711,111712,111714,111716,111718],{"class":43,"line":51},[41,111713,111108],{"class":275},[41,111715,321],{"class":271},[41,111717,52374],{"class":271},[41,111719,111720],{"class":275},"dist\n",[20,111722,111723,111724,111727],{},"距离越小，",[24,111725,111726],{},"-dist"," 越接近 0，奖励越高。",[241,111729,111730],{"id":111730},"两关节机械臂的状态",[20,111732,111733],{},"这个模型有两个 hinge joint：",[32,111735,111738],{"className":111736,"code":111737,"language":5325,"meta":37},[5323],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[24,111739,111737],{"__ignoreMap":37},[20,111741,111742],{},"再加上末端和目标位置：",[32,111744,111747],{"className":111745,"code":111746,"language":5325,"meta":37},[5323],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[24,111748,111746],{"__ignoreMap":37},[20,111750,111751],{},"总维度：",[32,111753,111756],{"className":111754,"code":111755,"language":5325,"meta":37},[5323],"2 + 2 + 3 + 3 = 10\n",[24,111757,111755],{"__ignoreMap":37},[241,111759,111761],{"id":111760},"为什么-gravity-是-0","为什么 gravity 是 0",[20,111763,111764],{},"本章把重力设为：",[32,111766,111768],{"className":53170,"code":111767,"language":53172,"meta":37,"style":37},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[24,111769,111770],{"__ignoreMap":37},[41,111771,111772,111774,111776,111778,111780,111782,111784,111786,111788],{"class":43,"line":44},[41,111773,1183],{"class":275},[41,111775,69269],{"class":51403},[41,111777,101297],{"class":54},[41,111779,321],{"class":275},[41,111781,101302],{"class":378},[41,111783,101305],{"class":54},[41,111785,321],{"class":275},[41,111787,103874],{"class":378},[41,111789,101247],{"class":275},[20,111791,111792],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[15,111794,101356],{"id":101355},[32,111796,111798],{"className":30481,"code":111797,"language":30483,"meta":37,"style":37},"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",[24,111799,111800,111806,111816,111820,111824,111832,111837,111842,111846,111850,111855,111860,111864,111869,111874,111879,111883,111888,111893,111898,111903,111907,111911,111915,111919,111923,111928,111933,111937,111941,111945,111949,111953,111968,111977,111989,112012,112019,112023,112027,112037,112051,112065,112072,112076,112080,112094,112106,112118,112131,112146,112163,112167,112171,112183,112195,112203,112211,112215,112231,112236,112249,112262,112277,112281,112316,112348,112352,112356,112365,112369,112385,112395,112406,112422,112438,112454,112470,112474,112492,112512,112531,112535,112539,112551],{"__ignoreMap":37},[41,111801,111802,111804],{"class":43,"line":44},[41,111803,30495],{"class":271},[41,111805,101404],{"class":275},[41,111807,111808,111810,111812,111814],{"class":43,"line":51},[41,111809,30495],{"class":271},[41,111811,31483],{"class":275},[41,111813,31486],{"class":271},[41,111815,31489],{"class":275},[41,111817,111818],{"class":43,"line":62},[41,111819,80],{"emptyLinePlaceholder":79},[41,111821,111822],{"class":43,"line":70},[41,111823,80],{"emptyLinePlaceholder":79},[41,111825,111826,111828,111830],{"class":43,"line":76},[41,111827,101417],{"class":58},[41,111829,13702],{"class":271},[41,111831,101422],{"class":378},[41,111833,111834],{"class":43,"line":83},[41,111835,111836],{"class":378},"\u003Cmujoco model=\"two_link_reacher\">\n",[41,111838,111839],{"class":43,"line":89},[41,111840,111841],{"class":378},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[41,111843,111844],{"class":43,"line":96},[41,111845,80],{"emptyLinePlaceholder":79},[41,111847,111848],{"class":43,"line":104},[41,111849,101441],{"class":378},[41,111851,111852],{"class":43,"line":176},[41,111853,111854],{"class":378},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[41,111856,111857],{"class":43,"line":184},[41,111858,111859],{"class":378},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[41,111861,111862],{"class":43,"line":1757},[41,111863,80],{"emptyLinePlaceholder":79},[41,111865,111866],{"class":43,"line":1763},[41,111867,111868],{"class":378},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[41,111870,111871],{"class":43,"line":1768},[41,111872,111873],{"class":378},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[41,111875,111876],{"class":43,"line":1782},[41,111877,111878],{"class":378},"      \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",[41,111880,111881],{"class":43,"line":1787},[41,111882,80],{"emptyLinePlaceholder":79},[41,111884,111885],{"class":43,"line":1793},[41,111886,111887],{"class":378},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[41,111889,111890],{"class":43,"line":1814},[41,111891,111892],{"class":378},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[41,111894,111895],{"class":43,"line":1819},[41,111896,111897],{"class":378},"        \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",[41,111899,111900],{"class":43,"line":1833},[41,111901,111902],{"class":378},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[41,111904,111905],{"class":43,"line":1838},[41,111906,106541],{"class":378},[41,111908,111909],{"class":43,"line":1867},[41,111910,101470],{"class":378},[41,111912,111913],{"class":43,"line":1872},[41,111914,101475],{"class":378},[41,111916,111917],{"class":43,"line":1889},[41,111918,80],{"emptyLinePlaceholder":79},[41,111920,111921],{"class":43,"line":1894},[41,111922,106558],{"class":378},[41,111924,111925],{"class":43,"line":1899},[41,111926,111927],{"class":378},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[41,111929,111930],{"class":43,"line":1904},[41,111931,111932],{"class":378},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[41,111934,111935],{"class":43,"line":1918},[41,111936,106568],{"class":378},[41,111938,111939],{"class":43,"line":1923},[41,111940,101480],{"class":378},[41,111942,111943],{"class":43,"line":2715},[41,111944,95801],{"class":378},[41,111946,111947],{"class":43,"line":2729},[41,111948,80],{"emptyLinePlaceholder":79},[41,111950,111951],{"class":43,"line":2737},[41,111952,80],{"emptyLinePlaceholder":79},[41,111954,111955,111957,111960,111963,111965],{"class":43,"line":2742},[41,111956,32050],{"class":271},[41,111958,111959],{"class":54}," site_position",[41,111961,111962],{"class":275},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[41,111964,1443],{"class":58},[41,111966,111967],{"class":275},") -> np.ndarray:\n",[41,111969,111970,111972,111974],{"class":43,"line":2748},[41,111971,103503],{"class":275},[41,111973,321],{"class":271},[41,111975,111976],{"class":275}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[41,111978,111979,111981,111983,111985,111987],{"class":43,"line":2754},[41,111980,3239],{"class":271},[41,111982,103552],{"class":275},[41,111984,1183],{"class":271},[41,111986,4231],{"class":58},[41,111988,3877],{"class":275},[41,111990,111991,111993,111995,111997,111999,112002,112004,112006,112008,112010],{"class":43,"line":2759},[41,111992,103535],{"class":271},[41,111994,103538],{"class":58},[41,111996,276],{"class":275},[41,111998,327],{"class":271},[41,112000,112001],{"class":378},"\"site not found: ",[41,112003,1169],{"class":58},[41,112005,79913],{"class":275},[41,112007,1219],{"class":58},[41,112009,524],{"class":378},[41,112011,282],{"class":275},[41,112013,112014,112016],{"class":43,"line":8086},[41,112015,4228],{"class":271},[41,112017,112018],{"class":275}," data.site_xpos[site_id].copy()\n",[41,112020,112021],{"class":43,"line":8110},[41,112022,80],{"emptyLinePlaceholder":79},[41,112024,112025],{"class":43,"line":8115},[41,112026,80],{"emptyLinePlaceholder":79},[41,112028,112029,112031,112034],{"class":43,"line":8121},[41,112030,32050],{"class":271},[41,112032,112033],{"class":54}," get_obs",[41,112035,112036],{"class":275},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[41,112038,112039,112042,112044,112047,112049],{"class":43,"line":8148},[41,112040,112041],{"class":275},"    tip ",[41,112043,321],{"class":271},[41,112045,112046],{"class":275}," site_position(model, data, ",[41,112048,111639],{"class":378},[41,112050,282],{"class":275},[41,112052,112053,112056,112058,112060,112063],{"class":43,"line":8153},[41,112054,112055],{"class":275},"    target ",[41,112057,321],{"class":271},[41,112059,112046],{"class":275},[41,112061,112062],{"class":378},"\"target\"",[41,112064,282],{"class":275},[41,112066,112067,112069],{"class":43,"line":8159},[41,112068,4228],{"class":271},[41,112070,112071],{"class":275}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[41,112073,112074],{"class":43,"line":8171},[41,112075,80],{"emptyLinePlaceholder":79},[41,112077,112078],{"class":43,"line":8183},[41,112079,80],{"emptyLinePlaceholder":79},[41,112081,112082,112084,112087,112090,112092],{"class":43,"line":8195},[41,112083,32050],{"class":271},[41,112085,112086],{"class":54}," reward",[41,112088,112089],{"class":275},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[41,112091,315],{"class":58},[41,112093,3877],{"class":275},[41,112095,112096,112098,112100,112102,112104],{"class":43,"line":9854},[41,112097,112041],{"class":275},[41,112099,321],{"class":271},[41,112101,112046],{"class":275},[41,112103,111639],{"class":378},[41,112105,282],{"class":275},[41,112107,112108,112110,112112,112114,112116],{"class":43,"line":9879},[41,112109,112055],{"class":275},[41,112111,321],{"class":271},[41,112113,112046],{"class":275},[41,112115,112062],{"class":378},[41,112117,282],{"class":275},[41,112119,112120,112123,112125,112127,112129],{"class":43,"line":9902},[41,112121,112122],{"class":275},"    dist ",[41,112124,321],{"class":271},[41,112126,111704],{"class":275},[41,112128,805],{"class":271},[41,112130,111709],{"class":275},[41,112132,112133,112136,112138,112141,112143],{"class":43,"line":9926},[41,112134,112135],{"class":275},"    control_cost ",[41,112137,321],{"class":271},[41,112139,112140],{"class":58}," 0.01",[41,112142,6656],{"class":271},[41,112144,112145],{"class":275}," np.sum(np.square(data.ctrl))\n",[41,112147,112148,112150,112152,112154,112156,112158,112160],{"class":43,"line":9931},[41,112149,4228],{"class":271},[41,112151,109900],{"class":58},[41,112153,276],{"class":275},[41,112155,805],{"class":271},[41,112157,111699],{"class":275},[41,112159,805],{"class":271},[41,112161,112162],{"class":275}," control_cost)\n",[41,112164,112165],{"class":43,"line":9936},[41,112166,80],{"emptyLinePlaceholder":79},[41,112168,112169],{"class":43,"line":9941},[41,112170,80],{"emptyLinePlaceholder":79},[41,112172,112173,112175,112177,112179,112181],{"class":43,"line":9950},[41,112174,32050],{"class":271},[41,112176,2112],{"class":54},[41,112178,101501],{"class":275},[41,112180,95789],{"class":58},[41,112182,3877],{"class":275},[41,112184,112185,112187,112189,112191,112193],{"class":43,"line":9955},[41,112186,101510],{"class":275},[41,112188,321],{"class":271},[41,112190,101515],{"class":275},[41,112192,101417],{"class":58},[41,112194,282],{"class":275},[41,112196,112197,112199,112201],{"class":43,"line":9961},[41,112198,101524],{"class":275},[41,112200,321],{"class":271},[41,112202,101529],{"class":275},[41,112204,112205,112207,112209],{"class":43,"line":9982},[41,112206,110256],{"class":275},[41,112208,321],{"class":271},[41,112210,104864],{"class":58},[41,112212,112213],{"class":43,"line":9988},[41,112214,80],{"emptyLinePlaceholder":79},[41,112216,112217,112219,112221,112223,112225,112227,112229],{"class":43,"line":10002},[41,112218,3339],{"class":271},[41,112220,31719],{"class":275},[41,112222,26146],{"class":271},[41,112224,32546],{"class":58},[41,112226,276],{"class":275},[41,112228,65177],{"class":58},[41,112230,30889],{"class":275},[41,112232,112233],{"class":43,"line":10008},[41,112234,112235],{"class":275},"        mujoco.mj_forward(model, data)\n",[41,112237,112238,112241,112243,112245,112247],{"class":43,"line":10035},[41,112239,112240],{"class":275},"        tip ",[41,112242,321],{"class":271},[41,112244,112046],{"class":275},[41,112246,111639],{"class":378},[41,112248,282],{"class":275},[41,112250,112251,112254,112256,112258,112260],{"class":43,"line":10044},[41,112252,112253],{"class":275},"        target ",[41,112255,321],{"class":271},[41,112257,112046],{"class":275},[41,112259,112062],{"class":378},[41,112261,282],{"class":275},[41,112263,112264,112267,112269,112272,112274],{"class":43,"line":10050},[41,112265,112266],{"class":275},"        error ",[41,112268,321],{"class":271},[41,112270,112271],{"class":275}," target ",[41,112273,805],{"class":271},[41,112275,112276],{"class":275}," tip\n",[41,112278,112279],{"class":43,"line":10058},[41,112280,80],{"emptyLinePlaceholder":79},[41,112282,112283,112285,112287,112289,112291,112294,112296,112298,112301,112303,112306,112308,112310,112312,112314],{"class":43,"line":10063},[41,112284,106720],{"class":275},[41,112286,465],{"class":58},[41,112288,4581],{"class":275},[41,112290,321],{"class":271},[41,112292,112293],{"class":275}," np.clip(",[41,112295,105363],{"class":58},[41,112297,6656],{"class":271},[41,112299,112300],{"class":275}," error[",[41,112302,351],{"class":58},[41,112304,112305],{"class":275},"], ",[41,112307,805],{"class":271},[41,112309,102506],{"class":58},[41,112311,12573],{"class":275},[41,112313,102506],{"class":58},[41,112315,282],{"class":275},[41,112317,112318,112320,112322,112324,112326,112328,112330,112332,112334,112336,112338,112340,112342,112344,112346],{"class":43,"line":16742},[41,112319,106720],{"class":275},[41,112321,26],{"class":58},[41,112323,4581],{"class":275},[41,112325,321],{"class":271},[41,112327,112293],{"class":275},[41,112329,105363],{"class":58},[41,112331,6656],{"class":271},[41,112333,112300],{"class":275},[41,112335,465],{"class":58},[41,112337,112305],{"class":275},[41,112339,805],{"class":271},[41,112341,102506],{"class":58},[41,112343,12573],{"class":275},[41,112345,102506],{"class":58},[41,112347,282],{"class":275},[41,112349,112350],{"class":43,"line":16748},[41,112351,80],{"emptyLinePlaceholder":79},[41,112353,112354],{"class":43,"line":16771},[41,112355,101619],{"class":275},[41,112357,112358,112360,112362],{"class":43,"line":16777},[41,112359,110400],{"class":275},[41,112361,9615],{"class":271},[41,112363,112364],{"class":275}," reward(model, data)\n",[41,112366,112367],{"class":43,"line":16800},[41,112368,80],{"emptyLinePlaceholder":79},[41,112370,112371,112373,112375,112377,112379,112381,112383],{"class":43,"line":16814},[41,112372,2635],{"class":271},[41,112374,31719],{"class":275},[41,112376,601],{"class":271},[41,112378,5892],{"class":58},[41,112380,101662],{"class":271},[41,112382,4231],{"class":58},[41,112384,3877],{"class":275},[41,112386,112387,112390,112392],{"class":43,"line":16834},[41,112388,112389],{"class":275},"            obs ",[41,112391,321],{"class":271},[41,112393,112394],{"class":275}," get_obs(model, data)\n",[41,112396,112397,112399,112401,112403],{"class":43,"line":16840},[41,112398,34753],{"class":58},[41,112400,276],{"class":275},[41,112402,110434],{"class":378},[41,112404,112405],{"class":275},", step)\n",[41,112407,112408,112410,112412,112415,112418,112420],{"class":43,"line":16851},[41,112409,34753],{"class":58},[41,112411,276],{"class":275},[41,112413,112414],{"class":378},"\"  tip:\"",[41,112416,112417],{"class":275},", np.round(tip, ",[41,112419,345],{"class":58},[41,112421,30600],{"class":275},[41,112423,112424,112426,112428,112431,112434,112436],{"class":43,"line":16874},[41,112425,34753],{"class":58},[41,112427,276],{"class":275},[41,112429,112430],{"class":378},"\"  target:\"",[41,112432,112433],{"class":275},", np.round(target, ",[41,112435,345],{"class":58},[41,112437,30600],{"class":275},[41,112439,112440,112442,112444,112447,112450,112452],{"class":43,"line":16896},[41,112441,34753],{"class":58},[41,112443,276],{"class":275},[41,112445,112446],{"class":378},"\"  ctrl:\"",[41,112448,112449],{"class":275},", np.round(data.ctrl.copy(), ",[41,112451,345],{"class":58},[41,112453,30600],{"class":275},[41,112455,112456,112458,112460,112463,112466,112468],{"class":43,"line":16901},[41,112457,34753],{"class":58},[41,112459,276],{"class":275},[41,112461,112462],{"class":378},"\"  obs_dim:\"",[41,112464,112465],{"class":275},", obs.shape[",[41,112467,465],{"class":58},[41,112469,4795],{"class":275},[41,112471,112472],{"class":43,"line":16907},[41,112473,80],{"emptyLinePlaceholder":79},[41,112475,112476,112478,112480,112482,112484,112486,112488,112490],{"class":43,"line":16921},[41,112477,31402],{"class":58},[41,112479,276],{"class":275},[41,112481,110479],{"class":378},[41,112483,12573],{"class":275},[41,112485,32121],{"class":58},[41,112487,110486],{"class":275},[41,112489,345],{"class":58},[41,112491,30600],{"class":275},[41,112493,112494,112496,112498,112501,112504,112506,112508,112510],{"class":43,"line":16934},[41,112495,31402],{"class":58},[41,112497,276],{"class":275},[41,112499,112500],{"class":378},"\"final tip:\"",[41,112502,112503],{"class":275},", np.round(site_position(model, data, ",[41,112505,111639],{"class":378},[41,112507,110448],{"class":275},[41,112509,345],{"class":58},[41,112511,30600],{"class":275},[41,112513,112514,112516,112518,112521,112523,112525,112527,112529],{"class":43,"line":16939},[41,112515,31402],{"class":58},[41,112517,276],{"class":275},[41,112519,112520],{"class":378},"\"target:\"",[41,112522,112503],{"class":275},[41,112524,112062],{"class":378},[41,112526,110448],{"class":275},[41,112528,345],{"class":58},[41,112530,30600],{"class":275},[41,112532,112533],{"class":43,"line":16953},[41,112534,80],{"emptyLinePlaceholder":79},[41,112536,112537],{"class":43,"line":16958},[41,112538,80],{"emptyLinePlaceholder":79},[41,112540,112541,112543,112545,112547,112549],{"class":43,"line":16964},[41,112542,1672],{"class":271},[41,112544,31323],{"class":58},[41,112546,101662],{"class":271},[41,112548,101665],{"class":378},[41,112550,3877],{"class":275},[41,112552,112553],{"class":43,"line":16969},[41,112554,101672],{"class":275},[20,112556,103673],{},[32,112558,112560],{"className":34,"code":112559,"language":36,"meta":37,"style":37},"touch ch7_reacher.py\n",[24,112561,112562],{"__ignoreMap":37},[41,112563,112564,112566],{"class":43,"line":44},[41,112565,101386],{"class":54},[41,112567,112568],{"class":378}," ch7_reacher.py\n",[20,112570,110547],{},[32,112572,112574],{"className":34,"code":112573,"language":36,"meta":37,"style":37},"python ch7_reacher.py\n",[24,112575,112576],{"__ignoreMap":37},[41,112577,112578,112580],{"class":43,"line":44},[41,112579,30483],{"class":54},[41,112581,112568],{"class":378},[241,112583,101675],{"id":101675},[20,112585,112586],{},"读取 site 坐标：",[32,112588,112590],{"className":30481,"code":112589,"language":30483,"meta":37,"style":37},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[24,112591,112592],{"__ignoreMap":37},[41,112593,112594,112596,112598,112600,112602],{"class":43,"line":44},[41,112595,32050],{"class":271},[41,112597,111959],{"class":54},[41,112599,111962],{"class":275},[41,112601,1443],{"class":58},[41,112603,111967],{"class":275},[20,112605,112606],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[20,112608,110563],{},[32,112610,112612],{"className":30481,"code":112611,"language":30483,"meta":37,"style":37},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[24,112613,112614],{"__ignoreMap":37},[41,112615,112616,112618],{"class":43,"line":44},[41,112617,17184],{"class":271},[41,112619,112071],{"class":275},[20,112621,112622],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[20,112624,109888],{},[32,112626,112628],{"className":30481,"code":112627,"language":30483,"meta":37,"style":37},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[24,112629,112630,112642,112655],{"__ignoreMap":37},[41,112631,112632,112634,112636,112638,112640],{"class":43,"line":44},[41,112633,111699],{"class":275},[41,112635,321],{"class":271},[41,112637,111704],{"class":275},[41,112639,805],{"class":271},[41,112641,111709],{"class":275},[41,112643,112644,112647,112649,112651,112653],{"class":43,"line":51},[41,112645,112646],{"class":275},"control_cost ",[41,112648,321],{"class":271},[41,112650,112140],{"class":58},[41,112652,6656],{"class":271},[41,112654,112145],{"class":275},[41,112656,112657,112659,112661,112663,112665,112667,112669],{"class":43,"line":62},[41,112658,17184],{"class":271},[41,112660,109900],{"class":58},[41,112662,276],{"class":275},[41,112664,805],{"class":271},[41,112666,111699],{"class":275},[41,112668,805],{"class":271},[41,112670,112162],{"class":275},[20,112672,112673],{},"奖励由两部分组成：",[224,112675,112676,112681],{},[227,112677,112678,112680],{},[24,112679,111726],{},"：末端离目标越远，奖励越低。",[227,112682,112683,112686],{},[24,112684,112685],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[20,112688,112689],{},"简单控制器：",[32,112691,112693],{"className":30481,"code":112692,"language":30483,"meta":37,"style":37},"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",[24,112694,112695,112708,112740],{"__ignoreMap":37},[41,112696,112697,112700,112702,112704,112706],{"class":43,"line":44},[41,112698,112699],{"class":275},"error ",[41,112701,321],{"class":271},[41,112703,112271],{"class":275},[41,112705,805],{"class":271},[41,112707,112276],{"class":275},[41,112709,112710,112712,112714,112716,112718,112720,112722,112724,112726,112728,112730,112732,112734,112736,112738],{"class":43,"line":51},[41,112711,105974],{"class":275},[41,112713,465],{"class":58},[41,112715,4581],{"class":275},[41,112717,321],{"class":271},[41,112719,112293],{"class":275},[41,112721,105363],{"class":58},[41,112723,6656],{"class":271},[41,112725,112300],{"class":275},[41,112727,351],{"class":58},[41,112729,112305],{"class":275},[41,112731,805],{"class":271},[41,112733,102506],{"class":58},[41,112735,12573],{"class":275},[41,112737,102506],{"class":58},[41,112739,282],{"class":275},[41,112741,112742,112744,112746,112748,112750,112752,112754,112756,112758,112760,112762,112764,112766,112768,112770],{"class":43,"line":62},[41,112743,105974],{"class":275},[41,112745,26],{"class":58},[41,112747,4581],{"class":275},[41,112749,321],{"class":271},[41,112751,112293],{"class":275},[41,112753,105363],{"class":58},[41,112755,6656],{"class":271},[41,112757,112300],{"class":275},[41,112759,465],{"class":58},[41,112761,112305],{"class":275},[41,112763,805],{"class":271},[41,112765,102506],{"class":58},[41,112767,12573],{"class":275},[41,112769,102506],{"class":58},[41,112771,282],{"class":275},[20,112773,112774],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[241,112776,101811],{"id":101811},[32,112778,112779],{"className":30481,"code":112589,"language":30483,"meta":37,"style":37},[24,112780,112781],{"__ignoreMap":37},[41,112782,112783,112785,112787,112789,112791],{"class":43,"line":44},[41,112784,32050],{"class":271},[41,112786,111959],{"class":54},[41,112788,111962],{"class":275},[41,112790,1443],{"class":58},[41,112792,111967],{"class":275},[20,112794,112795,112796,112798,112799,82642,112801,28488],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[24,112797,79913],{}," 是 site 的名字，比如 ",[24,112800,111639],{},[24,112802,112062],{},[32,112804,112806],{"className":30481,"code":112805,"language":30483,"meta":37,"style":37},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[24,112807,112808],{"__ignoreMap":37},[41,112809,112810,112812,112814],{"class":43,"line":44},[41,112811,103737],{"class":275},[41,112813,321],{"class":271},[41,112815,111976],{"class":275},[20,112817,112818],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[32,112820,112822],{"className":30481,"code":112821,"language":30483,"meta":37,"style":37},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[24,112823,112824,112836],{"__ignoreMap":37},[41,112825,112826,112828,112830,112832,112834],{"class":43,"line":44},[41,112827,1672],{"class":271},[41,112829,103552],{"class":275},[41,112831,1183],{"class":271},[41,112833,4231],{"class":58},[41,112835,3877],{"class":275},[41,112837,112838,112840,112842,112844,112846,112848,112850,112852,112854,112856],{"class":43,"line":51},[41,112839,103998],{"class":271},[41,112841,103538],{"class":58},[41,112843,276],{"class":275},[41,112845,327],{"class":271},[41,112847,112001],{"class":378},[41,112849,1169],{"class":58},[41,112851,79913],{"class":275},[41,112853,1219],{"class":58},[41,112855,524],{"class":378},[41,112857,282],{"class":275},[20,112859,112860,112861,112864,112865,112867],{},"如果 site 没找到，就主动报错。",[24,112862,112863],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[24,112866,79913],{}," 的值放进字符串里。",[32,112869,112871],{"className":30481,"code":112870,"language":30483,"meta":37,"style":37},"return data.site_xpos[site_id].copy()\n",[24,112872,112873],{"__ignoreMap":37},[41,112874,112875,112877],{"class":43,"line":44},[41,112876,17184],{"class":271},[41,112878,112018],{"class":275},[20,112880,112881,112882,112884,112885,112888],{},"返回这个 site 的世界坐标。",[24,112883,103783],{}," 里的每一行都是一个 site 的 ",[24,112886,112887],{},"(x, y, z)"," 坐标。",[32,112890,112892],{"className":30481,"code":112891,"language":30483,"meta":37,"style":37},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[24,112893,112894],{"__ignoreMap":37},[41,112895,112896,112898,112900],{"class":43,"line":44},[41,112897,32050],{"class":271},[41,112899,112033],{"class":54},[41,112901,112036],{"class":275},[20,112903,112904],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[32,112906,112908],{"className":30481,"code":112907,"language":30483,"meta":37,"style":37},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[24,112909,112910,112922],{"__ignoreMap":37},[41,112911,112912,112914,112916,112918,112920],{"class":43,"line":44},[41,112913,111671],{"class":275},[41,112915,321],{"class":271},[41,112917,112046],{"class":275},[41,112919,111639],{"class":378},[41,112921,282],{"class":275},[41,112923,112924,112926,112928,112930,112932],{"class":43,"line":51},[41,112925,111681],{"class":275},[41,112927,321],{"class":271},[41,112929,112046],{"class":275},[41,112931,112062],{"class":378},[41,112933,282],{"class":275},[20,112935,112936],{},"分别读取末端点和目标点的世界坐标。",[32,112938,112939],{"className":30481,"code":112611,"language":30483,"meta":37,"style":37},[24,112940,112941],{"__ignoreMap":37},[41,112942,112943,112945],{"class":43,"line":44},[41,112944,17184],{"class":271},[41,112946,112071],{"class":275},[20,112948,112949],{},"把四部分拼成一个观测数组：",[32,112951,112954],{"className":112952,"code":112953,"language":5325,"meta":37},[5323],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[24,112955,112953],{"__ignoreMap":37},[32,112957,112959],{"className":30481,"code":112958,"language":30483,"meta":37,"style":37},"dist = np.linalg.norm(tip - target)\n",[24,112960,112961],{"__ignoreMap":37},[41,112962,112963,112965,112967,112969,112971],{"class":43,"line":44},[41,112964,111699],{"class":275},[41,112966,321],{"class":271},[41,112968,111704],{"class":275},[41,112970,805],{"class":271},[41,112972,111709],{"class":275},[20,112974,112975,112976,112979,112980,112983],{},"计算 tip 到 target 的距离。",[24,112977,112978],{},"tip - target"," 得到一个三维向量，",[24,112981,112982],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[20,112985,14771],{},[32,112987,112990],{"className":112988,"code":112989,"language":5325,"meta":37},[5323],"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",[24,112991,112989],{"__ignoreMap":37},[32,112993,112995],{"className":30481,"code":112994,"language":30483,"meta":37,"style":37},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[24,112996,112997],{"__ignoreMap":37},[41,112998,112999,113001,113003,113005,113007],{"class":43,"line":44},[41,113000,112646],{"class":275},[41,113002,321],{"class":271},[41,113004,112140],{"class":58},[41,113006,6656],{"class":271},[41,113008,112145],{"class":275},[20,113010,113011,113012,113015,113016,113019],{},"计算动作惩罚。",[24,113013,113014],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[24,113017,113018],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[32,113021,113023],{"className":30481,"code":113022,"language":30483,"meta":37,"style":37},"return float(-dist - control_cost)\n",[24,113024,113025],{"__ignoreMap":37},[41,113026,113027,113029,113031,113033,113035,113037,113039],{"class":43,"line":44},[41,113028,17184],{"class":271},[41,113030,109900],{"class":58},[41,113032,276],{"class":275},[41,113034,805],{"class":271},[41,113036,111699],{"class":275},[41,113038,805],{"class":271},[41,113040,112162],{"class":275},[20,113042,113043],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[32,113045,113046],{"className":30481,"code":110906,"language":30483,"meta":37,"style":37},[24,113047,113048],{"__ignoreMap":37},[41,113049,113050,113052,113054],{"class":43,"line":44},[41,113051,110913],{"class":275},[41,113053,321],{"class":271},[41,113055,104864],{"class":58},[20,113057,113058],{},"累计奖励变量，记录整个运行过程的总分。",[32,113060,113062],{"className":30481,"code":113061,"language":30483,"meta":37,"style":37},"for step in range(500):\n",[24,113063,113064],{"__ignoreMap":37},[41,113065,113066,113068,113070,113072,113074,113076,113078],{"class":43,"line":44},[41,113067,3163],{"class":271},[41,113069,31719],{"class":275},[41,113071,26146],{"class":271},[41,113073,32546],{"class":58},[41,113075,276],{"class":275},[41,113077,65177],{"class":58},[41,113079,30889],{"class":275},[20,113081,113082],{},"运行 500 个控制步。",[32,113084,113085],{"className":30481,"code":104646,"language":30483,"meta":37,"style":37},[24,113086,113087],{"__ignoreMap":37},[41,113088,113089],{"class":43,"line":44},[41,113090,104646],{"class":275},[20,113092,113093,113094,101121,113096,113098],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[24,113095,103334],{},[24,113097,103337],{}," 是当前状态下的坐标。",[32,113100,113102],{"className":30481,"code":113101,"language":30483,"meta":37,"style":37},"error = target - tip\n",[24,113103,113104],{"__ignoreMap":37},[41,113105,113106,113108,113110,113112,113114],{"class":43,"line":44},[41,113107,112699],{"class":275},[41,113109,321],{"class":271},[41,113111,112271],{"class":275},[41,113113,805],{"class":271},[41,113115,112276],{"class":275},[20,113117,113118],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[32,113120,113122],{"className":30481,"code":113121,"language":30483,"meta":37,"style":37},"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",[24,113123,113124,113156],{"__ignoreMap":37},[41,113125,113126,113128,113130,113132,113134,113136,113138,113140,113142,113144,113146,113148,113150,113152,113154],{"class":43,"line":44},[41,113127,105974],{"class":275},[41,113129,465],{"class":58},[41,113131,4581],{"class":275},[41,113133,321],{"class":271},[41,113135,112293],{"class":275},[41,113137,105363],{"class":58},[41,113139,6656],{"class":271},[41,113141,112300],{"class":275},[41,113143,351],{"class":58},[41,113145,112305],{"class":275},[41,113147,805],{"class":271},[41,113149,102506],{"class":58},[41,113151,12573],{"class":275},[41,113153,102506],{"class":58},[41,113155,282],{"class":275},[41,113157,113158,113160,113162,113164,113166,113168,113170,113172,113174,113176,113178,113180,113182,113184,113186],{"class":43,"line":51},[41,113159,105974],{"class":275},[41,113161,26],{"class":58},[41,113163,4581],{"class":275},[41,113165,321],{"class":271},[41,113167,112293],{"class":275},[41,113169,105363],{"class":58},[41,113171,6656],{"class":271},[41,113173,112300],{"class":275},[41,113175,465],{"class":58},[41,113177,112305],{"class":275},[41,113179,805],{"class":271},[41,113181,102506],{"class":58},[41,113183,12573],{"class":275},[41,113185,102506],{"class":58},[41,113187,282],{"class":275},[20,113189,113190,113191,113194],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[24,113192,113193],{},"error -> ctrl -> step"," 的流程。",[32,113196,113197],{"className":30481,"code":104608,"language":30483,"meta":37,"style":37},[24,113198,113199],{"__ignoreMap":37},[41,113200,113201],{"class":43,"line":44},[41,113202,104608],{"class":275},[20,113204,113205],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[32,113207,113209],{"className":30481,"code":113208,"language":30483,"meta":37,"style":37},"obs = get_obs(model, data)\n",[24,113210,113211],{"__ignoreMap":37},[41,113212,113213,113215,113217],{"class":43,"line":44},[41,113214,110957],{"class":275},[41,113216,321],{"class":271},[41,113218,112394],{"class":275},[20,113220,113221,113222,113225],{},"读取最新观测。后面打印 ",[24,113223,113224],{},"obs.shape[0]","，用来确认观测维度是 10。",[15,113227,102419],{"id":102418},[20,113229,113230],{},"观测维度为:",[32,113232,113235],{"className":113233,"code":113234,"language":5325,"meta":37},[5323],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[24,113236,113234],{"__ignoreMap":37},[20,113238,113239],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[20,113241,113242],{},"程序每 100 步打印：",[32,113244,113247],{"className":113245,"code":113246,"language":5325,"meta":37},[5323],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[24,113248,113246],{"__ignoreMap":37},[20,113250,113251,113252,113254],{},"如果控制有效，你应该看到最终 ",[24,113253,103334],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[15,113256,102451],{"id":102450},[224,113258,113259,113262,113265,113271,113277,113284,113294],{},[227,113260,113261],{},"修改目标点位置。",[227,113263,113264],{},"重新运行，观察最终 tip 是否变化。",[227,113266,113267,113268,113270],{},"把 gravity 改成 ",[24,113269,102692],{},"，观察控制是否变差。",[227,113272,111284,113273,111288,113275,28488],{},[24,113274,102261],{},[24,113276,351],{},[227,113278,102514,113279,102517,113281,113283],{},[24,113280,110699],{},[24,113282,107410],{},"，观察机械臂是否更难移动。",[227,113285,102514,113286,82633,113288,102517,113290,113293],{},[24,113287,103337],{},[24,113289,104249],{},[24,113291,113292],{},"0.2 0 0.6","，观察 reward 和 final tip。",[227,113295,113296],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[15,113298,102556],{"id":102555},[241,113300,113302],{"id":113301},"site-not-found",[24,113303,113304],{},"site not found",[20,113306,113307,113308,101121,113311,28488],{},"检查 XML 中是否有 ",[24,113309,113310],{},"site name=\"tip\"",[24,113312,113313],{},"site name=\"target\"",[241,113315,113316],{"id":113316},"机械臂完全不动",[20,113318,102626],{},[224,113320,113321,113326,113329,113334],{},[227,113322,113323,113325],{},[24,113324,102261],{}," 是否为 2",[227,113327,113328],{},"actuator 是否引用正确 joint",[227,113330,113331,113333],{},[24,113332,101179],{}," 是否被赋值",[227,113335,113336,113337],{},"是否执行了 ",[24,113338,100788],{},[241,113340,113341],{"id":113341},"控制效果不好",[20,113343,113344],{},"正常。本章重点不是控制器最优，而是任务结构:",[32,113346,113349],{"className":113347,"code":113348,"language":5325,"meta":37},[5323],"obs → action → mj_step → reward → next_obs\n",[24,113350,113348],{"__ignoreMap":37},[241,113352,113354],{"id":113353},"tip-坐标不变化","tip 坐标不变化",[20,113356,102678],{},[224,113358,113359,113364,113372,113381],{},[227,113360,113361,113362,28488],{},"是否每步调用了 ",[24,113363,100788],{},[227,113365,113366,113367,101121,113369,28488],{},"是否写入了 ",[24,113368,106229],{},[24,113370,113371],{},"data.ctrl[1]",[227,113373,113374,113375,486,113378,28488],{},"actuator 是否正确引用 ",[24,113376,113377],{},"joint1",[24,113379,113380],{},"joint2",[227,113382,113383],{},"控制输入是否太小。",[241,113385,113386],{"id":113386},"目标点不会动",[20,113388,113389],{},"本章的 target 是固定 site：",[32,113391,113393],{"className":53170,"code":113392,"language":53172,"meta":37,"style":37},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[24,113394,113395],{"__ignoreMap":37},[41,113396,113397,113399,113401,113403,113405,113407,113409,113411,113414],{"class":43,"line":44},[41,113398,1183],{"class":275},[41,113400,103313],{"class":51403},[41,113402,15058],{"class":54},[41,113404,321],{"class":275},[41,113406,112062],{"class":378},[41,113408,101209],{"class":54},[41,113410,321],{"class":275},[41,113412,113413],{"class":378},"\"0.5 0 0.4\"",[41,113415,113416],{"class":275}," ...\u002F>\n",[20,113418,113419,113420,113422],{},"它直接挂在 ",[24,113421,101944],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[241,113424,113425],{"id":113425},"机械臂不像真实机械臂",[20,113427,113428],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[15,113430,102710],{"id":102709},[20,113432,113433],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[20,113435,113436],{},"核心公式：",[32,113438,113441],{"className":113439,"code":113440,"language":5325,"meta":37},[5323],"distance = ||tip - target||\nreward = -distance - action_cost\n",[24,113442,113440],{"__ignoreMap":37},[20,113444,113445],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[189,113447,113448],{},"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":37,"searchDepth":51,"depth":51,"links":113450},[113451,113452,113453,113458,113462,113463,113464,113472],{"id":100749,"depth":51,"text":100750},{"id":100872,"depth":51,"text":100873},{"id":101147,"depth":51,"text":101148,"children":113454},[113455,113456,113457],{"id":111654,"depth":62,"text":111655},{"id":111730,"depth":62,"text":111730},{"id":111760,"depth":62,"text":111761},{"id":101355,"depth":51,"text":101356,"children":113459},[113460,113461],{"id":101675,"depth":62,"text":101675},{"id":101811,"depth":62,"text":101811},{"id":102418,"depth":51,"text":102419},{"id":102450,"depth":51,"text":102451},{"id":102555,"depth":51,"text":102556,"children":113465},[113466,113467,113468,113469,113470,113471],{"id":113301,"depth":62,"text":113304},{"id":113316,"depth":62,"text":113316},{"id":113341,"depth":62,"text":113341},{"id":113353,"depth":62,"text":113354},{"id":113386,"depth":62,"text":113386},{"id":113425,"depth":62,"text":113425},{"id":102709,"depth":51,"text":102710},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111458,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113479,"title":113480,"body":113481,"description":37,"extension":197,"meta":116943,"navigation":79,"path":116944,"seo":116945,"stem":116946,"__hash__":116947},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113482,"toc":116914},[113483,113486,113488,113491,113494,113519,113522,113528,113531,113537,113539,113541,113565,113567,113585,113587,113630,113632,113659,113661,113664,113716,113719,113725,113734,113737,113775,113778,113817,113820,113828,113835,113838,113844,113846,113900,113907,113952,113955,113959,113975,113985,113987,115248,115250,115262,115264,115275,115277,115280,115301,115304,115307,115340,115346,115349,115382,115385,115388,115429,115434,115448,115451,115464,115469,115492,115494,115509,115519,115534,115541,115561,115576,115594,115597,115614,115622,115638,115644,115676,115689,115721,115731,115766,115780,115826,115840,115882,115893,115906,115912,115945,115948,115975,115985,116025,116035,116052,116059,116077,116080,116121,116134,116149,116152,116175,116178,116190,116193,116212,116217,116238,116241,116256,116259,116293,116305,116320,116323,116348,116351,116370,116373,116405,116408,116432,116438,116468,116475,116488,116491,116493,116495,116501,116504,116507,116519,116522,116524,116578,116580,116584,116590,116599,116602,116609,116611,116634,116637,116641,116643,116661,116667,116669,116702,116705,116711,116715,116718,116738,116743,116747,116754,116774,116779,116783,116786,116806,116809,116895,116899,116902,116908,116911],[10,113484,113480],{"id":113485},"_8gymnasium-风格强化学习接口基础",[15,113487,100750],{"id":100749},[20,113489,113490],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[20,113492,113493],{},"你将实现:",[32,113495,113497],{"className":30481,"code":113496,"language":30483,"meta":37,"style":37},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[24,113498,113499,113509],{"__ignoreMap":37},[41,113500,113501,113504,113506],{"class":43,"line":44},[41,113502,113503],{"class":275},"obs, info ",[41,113505,321],{"class":271},[41,113507,113508],{"class":275}," env.reset()\n",[41,113510,113511,113514,113516],{"class":43,"line":51},[41,113512,113513],{"class":275},"obs, reward, terminated, truncated, info ",[41,113515,321],{"class":271},[41,113517,113518],{"class":275}," env.step(action)\n",[20,113520,113521],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[20,113523,113524,113525,113527],{},"前面章节的代码都是“脚本式”的：在 ",[24,113526,102398],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[20,113529,113530],{},"可以先记住 Gymnasium 环境的核心交互：",[32,113532,113535],{"className":113533,"code":113534,"language":5325,"meta":37},[5323],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[24,113536,113534],{"__ignoreMap":37},[15,113538,100873],{"id":100872},[20,113540,100876],{},[32,113542,113543],{"className":34,"code":104491,"language":36,"meta":37,"style":37},[24,113544,113545],{"__ignoreMap":37},[41,113546,113547,113549,113551,113553,113555,113557,113559,113561,113563],{"class":43,"line":44},[41,113548,24713],{"class":54},[41,113550,26418],{"class":378},[41,113552,23970],{"class":378},[41,113554,26503],{"class":58},[41,113556,104506],{"class":378},[41,113558,100901],{"class":378},[41,113560,102604],{"class":378},[41,113562,100917],{"class":378},[41,113564,104515],{"class":378},[20,113566,102922],{},[32,113568,113570],{"className":34,"code":113569,"language":36,"meta":37,"style":37},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[24,113571,113572],{"__ignoreMap":37},[41,113573,113574,113576,113578,113580,113582],{"class":43,"line":44},[41,113575,23967],{"class":54},[41,113577,23970],{"class":378},[41,113579,101033],{"class":378},[41,113581,107814],{"class":378},[41,113583,113584],{"class":378}," gymnasium\n",[20,113586,102939],{},[32,113588,113590],{"className":34,"code":113589,"language":36,"meta":37,"style":37},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[24,113591,113592,113609,113618],{"__ignoreMap":37},[41,113593,113594,113596,113598,113600,113603,113605,113607],{"class":43,"line":44},[41,113595,30433],{"class":54},[41,113597,29279],{"class":378},[41,113599,25218],{"class":58},[41,113601,113602],{"class":378}," mujoco-gym-api",[41,113604,101078],{"class":378},[41,113606,101081],{"class":58},[41,113608,101084],{"class":58},[41,113610,113611,113613,113615],{"class":43,"line":51},[41,113612,30433],{"class":54},[41,113614,101091],{"class":378},[41,113616,113617],{"class":378}," mujoco-gym-api\n",[41,113619,113620,113622,113624,113626,113628],{"class":43,"line":62},[41,113621,23967],{"class":54},[41,113623,23970],{"class":378},[41,113625,101033],{"class":378},[41,113627,107814],{"class":378},[41,113629,113584],{"class":378},[20,113631,101107],{},[224,113633,113634,113644,113647,113653],{},[227,113635,113636,113637,113640,113641,28488],{},"本章使用 ",[24,113638,113639],{},"gymnasium","，不是旧版 ",[24,113642,113643],{},"gym",[227,113645,113646],{},"Gymnasium API 与旧 Gym API 有差异。",[227,113648,113649,113650,28488],{},"旧 Gym 常见返回值是 4 个: ",[24,113651,113652],{},"obs, reward, done, info",[227,113654,113655,113656,28488],{},"Gymnasium 返回值是 5 个: ",[24,113657,113658],{},"obs, reward, terminated, truncated, info",[15,113660,101148],{"id":101147},[20,113662,113663],{},"强化学习环境接口包含:",[411,113665,113666,113675],{},[414,113667,113668],{},[417,113669,113670,113673],{},[420,113671,113672],{"align":23874},"方法",[420,113674,102799],{"align":23874},[458,113676,113677,113687,113697,113707],{},[417,113678,113679,113684],{},[463,113680,113681],{"align":23874},[24,113682,113683],{},"reset()",[463,113685,113686],{"align":23874},"重置环境",[417,113688,113689,113694],{},[463,113690,113691],{"align":23874},[24,113692,113693],{},"step(action)",[463,113695,113696],{"align":23874},"执行动作",[417,113698,113699,113704],{},[463,113700,113701],{"align":23874},[24,113702,113703],{},"observation_space",[463,113705,113706],{"align":23874},"观测空间",[417,113708,113709,113714],{},[463,113710,113711],{"align":23874},[24,113712,113713],{},"action_space",[463,113715,23792],{"align":23874},[20,113717,113718],{},"一个最小环境需要完成:",[32,113720,113723],{"className":113721,"code":113722,"language":5325,"meta":37},[5323],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[24,113724,113722],{"__ignoreMap":37},[241,113726,113728,101121,113731,104741],{"id":113727},"terminated-和-truncated-的区别",[24,113729,113730],{},"terminated",[24,113732,113733],{},"truncated",[20,113735,113736],{},"Gymnasium 把“结束”拆成两个概念：",[411,113738,113739,113749],{},[414,113740,113741],{},[417,113742,113743,113745,113747],{},[420,113744,104677],{"align":23874},[420,113746,100803],{"align":23874},[420,113748,21325],{"align":23874},[458,113750,113751,113763],{},[417,113752,113753,113757,113760],{},[463,113754,113755],{"align":23874},[24,113756,113730],{},[463,113758,113759],{"align":23874},"任务自然结束",[463,113761,113762],{"align":23874},"机械臂到达目标、机器人摔倒",[417,113764,113765,113769,113772],{},[463,113766,113767],{"align":23874},[24,113768,113733],{},[463,113770,113771],{"align":23874},"因外部限制截断",[463,113773,113774],{"align":23874},"达到最大步数、时间限制",[20,113776,113777],{},"本章中：",[32,113779,113781],{"className":30481,"code":113780,"language":30483,"meta":37,"style":37},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[24,113782,113783,113798],{"__ignoreMap":37},[41,113784,113785,113788,113790,113793,113795],{"class":43,"line":44},[41,113786,113787],{"class":275},"terminated ",[41,113789,321],{"class":271},[41,113791,113792],{"class":275}," dist ",[41,113794,1183],{"class":271},[41,113796,113797],{"class":58}," 0.05\n",[41,113799,113800,113803,113805,113807,113810,113812,113814],{"class":43,"line":51},[41,113801,113802],{"class":275},"truncated ",[41,113804,321],{"class":271},[41,113806,38976],{"class":58},[41,113808,113809],{"class":275},".steps ",[41,113811,1850],{"class":271},[41,113813,38976],{"class":58},[41,113815,113816],{"class":275},".max_steps\n",[20,113818,113819],{},"也就是：",[224,113821,113822,113825],{},[227,113823,113824],{},"末端距离目标小于 0.05，任务成功结束。",[227,113826,113827],{},"步数超过上限，episode 被截断。",[241,113829,113831,101121,113833],{"id":113830},"observation_space-和-action_space",[24,113832,113703],{},[24,113834,113713],{},[20,113836,113837],{},"这两个对象告诉算法：",[32,113839,113842],{"className":113840,"code":113841,"language":5325,"meta":37},[5323],"观测长什么样\n动作允许多大\n",[24,113843,113841],{"__ignoreMap":37},[20,113845,14771],{},[32,113847,113849],{"className":30481,"code":113848,"language":30483,"meta":37,"style":37},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[24,113850,113851],{"__ignoreMap":37},[41,113852,113853,113855,113858,113860,113863,113866,113869,113871,113873,113876,113878,113880,113882,113884,113886,113888,113890,113893,113895,113897],{"class":43,"line":44},[41,113854,30926],{"class":58},[41,113856,113857],{"class":275},".action_space ",[41,113859,321],{"class":271},[41,113861,113862],{"class":275}," spaces.Box(",[41,113864,113865],{"class":5354},"low",[41,113867,113868],{"class":271},"=-",[41,113870,102506],{"class":58},[41,113872,12573],{"class":275},[41,113874,113875],{"class":5354},"high",[41,113877,321],{"class":271},[41,113879,102506],{"class":58},[41,113881,12573],{"class":275},[41,113883,96066],{"class":5354},[41,113885,321],{"class":271},[41,113887,276],{"class":275},[41,113889,351],{"class":58},[41,113891,113892],{"class":275},",), ",[41,113894,93603],{"class":5354},[41,113896,321],{"class":271},[41,113898,113899],{"class":275},"np.float32)\n",[20,113901,113902,113903,113906],{},"表示动作是 2 维数组，每个值都在 ",[24,113904,113905],{},"[-1, 1]"," 范围内。",[32,113908,113910],{"className":30481,"code":113909,"language":30483,"meta":37,"style":37},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[24,113911,113912],{"__ignoreMap":37},[41,113913,113914,113916,113919,113921,113923,113925,113927,113930,113932,113934,113936,113938,113940,113942,113944,113946,113948,113950],{"class":43,"line":44},[41,113915,30926],{"class":58},[41,113917,113918],{"class":275},".observation_space ",[41,113920,321],{"class":271},[41,113922,113862],{"class":275},[41,113924,113865],{"class":5354},[41,113926,113868],{"class":271},[41,113928,113929],{"class":275},"np.inf, ",[41,113931,113875],{"class":5354},[41,113933,321],{"class":271},[41,113935,113929],{"class":275},[41,113937,96066],{"class":5354},[41,113939,321],{"class":271},[41,113941,276],{"class":275},[41,113943,719],{"class":58},[41,113945,113892],{"class":275},[41,113947,93603],{"class":5354},[41,113949,321],{"class":271},[41,113951,113899],{"class":275},[20,113953,113954],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[241,113956,113958],{"id":113957},"frame_skip-是什么","frame_skip 是什么",[32,113960,113962],{"className":30481,"code":113961,"language":30483,"meta":37,"style":37},"self.frame_skip = 5\n",[24,113963,113964],{"__ignoreMap":37},[41,113965,113966,113968,113971,113973],{"class":43,"line":44},[41,113967,30926],{"class":58},[41,113969,113970],{"class":275},".frame_skip ",[41,113972,321],{"class":271},[41,113974,54530],{"class":58},[20,113976,113977,113978,113981,113982,113984],{},"表示外部调用一次 ",[24,113979,113980],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[24,113983,101318],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[15,113986,101356],{"id":101355},[32,113988,113990],{"className":30481,"code":113989,"language":30483,"meta":37,"style":37},"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",[24,113991,113992,114004,114010,114020,114031,114035,114039,114047,114052,114056,114060,114064,114068,114072,114076,114080,114085,114089,114093,114097,114102,114106,114110,114114,114118,114122,114126,114130,114134,114138,114142,114146,114150,114154,114172,114187,114191,114204,114214,114229,114246,114250,114271,114290,114315,114329,114333,114343,114355,114365,114369,114411,114449,114453,114463,114479,114494,114513,114520,114524,114537,114552,114567,114580,114599,114615,114619,114660,114675,114690,114694,114733,114744,114757,114761,114771,114780,114784,114794,114809,114827,114831,114842,114859,114872,114876,114886,114890,114901,114912,114916,114930,114944,114960,114964,114977,114994,115009,115016,115020,115024,115036,115046,115064,115076,115088,115092,115100,115116,115125,115134,115142,115184,115197,115202,115206,115224,115228,115232,115244],{"__ignoreMap":37},[41,113993,113994,113996,113999,114001],{"class":43,"line":44},[41,113995,30495],{"class":271},[41,113997,113998],{"class":275}," gymnasium ",[41,114000,31486],{"class":271},[41,114002,114003],{"class":275}," gym\n",[41,114005,114006,114008],{"class":43,"line":51},[41,114007,30495],{"class":271},[41,114009,101404],{"class":275},[41,114011,114012,114014,114016,114018],{"class":43,"line":62},[41,114013,30495],{"class":271},[41,114015,31483],{"class":275},[41,114017,31486],{"class":271},[41,114019,31489],{"class":275},[41,114021,114022,114024,114026,114028],{"class":43,"line":70},[41,114023,30840],{"class":271},[41,114025,113998],{"class":275},[41,114027,30495],{"class":271},[41,114029,114030],{"class":275}," spaces\n",[41,114032,114033],{"class":43,"line":76},[41,114034,80],{"emptyLinePlaceholder":79},[41,114036,114037],{"class":43,"line":83},[41,114038,80],{"emptyLinePlaceholder":79},[41,114040,114041,114043,114045],{"class":43,"line":89},[41,114042,101417],{"class":58},[41,114044,13702],{"class":271},[41,114046,101422],{"class":378},[41,114048,114049],{"class":43,"line":96},[41,114050,114051],{"class":378},"\u003Cmujoco model=\"gym_reacher\">\n",[41,114053,114054],{"class":43,"line":104},[41,114055,111841],{"class":378},[41,114057,114058],{"class":43,"line":176},[41,114059,80],{"emptyLinePlaceholder":79},[41,114061,114062],{"class":43,"line":184},[41,114063,101441],{"class":378},[41,114065,114066],{"class":43,"line":1757},[41,114067,111859],{"class":378},[41,114069,114070],{"class":43,"line":1763},[41,114071,80],{"emptyLinePlaceholder":79},[41,114073,114074],{"class":43,"line":1768},[41,114075,111868],{"class":378},[41,114077,114078],{"class":43,"line":1782},[41,114079,111873],{"class":378},[41,114081,114082],{"class":43,"line":1787},[41,114083,114084],{"class":378},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[41,114086,114087],{"class":43,"line":1793},[41,114088,80],{"emptyLinePlaceholder":79},[41,114090,114091],{"class":43,"line":1814},[41,114092,111887],{"class":378},[41,114094,114095],{"class":43,"line":1819},[41,114096,111892],{"class":378},[41,114098,114099],{"class":43,"line":1833},[41,114100,114101],{"class":378},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[41,114103,114104],{"class":43,"line":1838},[41,114105,111902],{"class":378},[41,114107,114108],{"class":43,"line":1867},[41,114109,106541],{"class":378},[41,114111,114112],{"class":43,"line":1872},[41,114113,101470],{"class":378},[41,114115,114116],{"class":43,"line":1889},[41,114117,101475],{"class":378},[41,114119,114120],{"class":43,"line":1894},[41,114121,80],{"emptyLinePlaceholder":79},[41,114123,114124],{"class":43,"line":1899},[41,114125,106558],{"class":378},[41,114127,114128],{"class":43,"line":1904},[41,114129,111927],{"class":378},[41,114131,114132],{"class":43,"line":1918},[41,114133,111932],{"class":378},[41,114135,114136],{"class":43,"line":1923},[41,114137,106568],{"class":378},[41,114139,114140],{"class":43,"line":2715},[41,114141,101480],{"class":378},[41,114143,114144],{"class":43,"line":2729},[41,114145,95801],{"class":378},[41,114147,114148],{"class":43,"line":2737},[41,114149,80],{"emptyLinePlaceholder":79},[41,114151,114152],{"class":43,"line":2742},[41,114153,80],{"emptyLinePlaceholder":79},[41,114155,114156,114158,114161,114163,114165,114167,114170],{"class":43,"line":2748},[41,114157,14832],{"class":271},[41,114159,114160],{"class":54}," ReacherEnv",[41,114162,276],{"class":275},[41,114164,113643],{"class":54},[41,114166,831],{"class":275},[41,114168,114169],{"class":54},"Env",[41,114171,30889],{"class":275},[41,114173,114174,114177,114179,114181,114184],{"class":43,"line":2754},[41,114175,114176],{"class":275},"    metadata ",[41,114178,321],{"class":271},[41,114180,4586],{"class":275},[41,114182,114183],{"class":378},"\"render_modes\"",[41,114185,114186],{"class":275},": []}\n",[41,114188,114189],{"class":43,"line":2759},[41,114190,80],{"emptyLinePlaceholder":79},[41,114192,114193,114195,114197,114200,114202],{"class":43,"line":8086},[41,114194,30904],{"class":271},[41,114196,30907],{"class":58},[41,114198,114199],{"class":275},"(self) -> ",[41,114201,95789],{"class":58},[41,114203,3877],{"class":275},[41,114205,114206,114208,114210,114212],{"class":43,"line":8110},[41,114207,30920],{"class":58},[41,114209,17399],{"class":275},[41,114211,30932],{"class":58},[41,114213,2115],{"class":275},[41,114215,114216,114218,114221,114223,114225,114227],{"class":43,"line":8115},[41,114217,30948],{"class":58},[41,114219,114220],{"class":275},".model ",[41,114222,321],{"class":271},[41,114224,101515],{"class":275},[41,114226,101417],{"class":58},[41,114228,282],{"class":275},[41,114230,114231,114233,114236,114238,114241,114243],{"class":43,"line":8121},[41,114232,30948],{"class":58},[41,114234,114235],{"class":275},".data ",[41,114237,321],{"class":271},[41,114239,114240],{"class":275}," mujoco.MjData(",[41,114242,30926],{"class":58},[41,114244,114245],{"class":275},".model)\n",[41,114247,114248],{"class":43,"line":8148},[41,114249,80],{"emptyLinePlaceholder":79},[41,114251,114252,114254,114257,114259,114262,114264,114267,114269],{"class":43,"line":8153},[41,114253,30948],{"class":58},[41,114255,114256],{"class":275},".tip_site_id ",[41,114258,321],{"class":271},[41,114260,114261],{"class":275}," mujoco.mj_name2id(",[41,114263,30926],{"class":58},[41,114265,114266],{"class":275},".model, mujoco.mjtObj.mjOBJ_SITE, ",[41,114268,111639],{"class":378},[41,114270,282],{"class":275},[41,114272,114273,114275,114278,114280,114282,114284,114286,114288],{"class":43,"line":8159},[41,114274,30948],{"class":58},[41,114276,114277],{"class":275},".target_site_id ",[41,114279,321],{"class":271},[41,114281,114261],{"class":275},[41,114283,30926],{"class":58},[41,114285,114266],{"class":275},[41,114287,112062],{"class":378},[41,114289,282],{"class":275},[41,114291,114292,114294,114296,114298,114300,114302,114305,114307,114309,114311,114313],{"class":43,"line":8171},[41,114293,2635],{"class":271},[41,114295,38976],{"class":58},[41,114297,114256],{"class":275},[41,114299,1183],{"class":271},[41,114301,4231],{"class":58},[41,114303,114304],{"class":271}," or",[41,114306,38976],{"class":58},[41,114308,114277],{"class":275},[41,114310,1183],{"class":271},[41,114312,4231],{"class":58},[41,114314,3877],{"class":275},[41,114316,114317,114320,114322,114324,114327],{"class":43,"line":8183},[41,114318,114319],{"class":271},"            raise",[41,114321,103538],{"class":58},[41,114323,276],{"class":275},[41,114325,114326],{"class":378},"\"required sites not found\"",[41,114328,282],{"class":275},[41,114330,114331],{"class":43,"line":8195},[41,114332,80],{"emptyLinePlaceholder":79},[41,114334,114335,114337,114339,114341],{"class":43,"line":9854},[41,114336,30948],{"class":58},[41,114338,113970],{"class":275},[41,114340,321],{"class":271},[41,114342,54530],{"class":58},[41,114344,114345,114347,114350,114352],{"class":43,"line":9879},[41,114346,30948],{"class":58},[41,114348,114349],{"class":275},".max_steps ",[41,114351,321],{"class":271},[41,114353,114354],{"class":58}," 200\n",[41,114356,114357,114359,114361,114363],{"class":43,"line":9902},[41,114358,30948],{"class":58},[41,114360,113809],{"class":275},[41,114362,321],{"class":271},[41,114364,47436],{"class":58},[41,114366,114367],{"class":43,"line":9926},[41,114368,80],{"emptyLinePlaceholder":79},[41,114370,114371,114373,114375,114377,114379,114381,114383,114385,114387,114389,114391,114393,114395,114397,114399,114401,114403,114405,114407,114409],{"class":43,"line":9931},[41,114372,30948],{"class":58},[41,114374,113857],{"class":275},[41,114376,321],{"class":271},[41,114378,113862],{"class":275},[41,114380,113865],{"class":5354},[41,114382,113868],{"class":271},[41,114384,102506],{"class":58},[41,114386,12573],{"class":275},[41,114388,113875],{"class":5354},[41,114390,321],{"class":271},[41,114392,102506],{"class":58},[41,114394,12573],{"class":275},[41,114396,96066],{"class":5354},[41,114398,321],{"class":271},[41,114400,276],{"class":275},[41,114402,351],{"class":58},[41,114404,113892],{"class":275},[41,114406,93603],{"class":5354},[41,114408,321],{"class":271},[41,114410,113899],{"class":275},[41,114412,114413,114415,114417,114419,114421,114423,114425,114427,114429,114431,114433,114435,114437,114439,114441,114443,114445,114447],{"class":43,"line":9936},[41,114414,30948],{"class":58},[41,114416,113918],{"class":275},[41,114418,321],{"class":271},[41,114420,113862],{"class":275},[41,114422,113865],{"class":5354},[41,114424,113868],{"class":271},[41,114426,113929],{"class":275},[41,114428,113875],{"class":5354},[41,114430,321],{"class":271},[41,114432,113929],{"class":275},[41,114434,96066],{"class":5354},[41,114436,321],{"class":271},[41,114438,276],{"class":275},[41,114440,719],{"class":58},[41,114442,113892],{"class":275},[41,114444,93603],{"class":5354},[41,114446,321],{"class":271},[41,114448,113899],{"class":275},[41,114450,114451],{"class":43,"line":9941},[41,114452,80],{"emptyLinePlaceholder":79},[41,114454,114455,114457,114460],{"class":43,"line":9950},[41,114456,30904],{"class":271},[41,114458,114459],{"class":54}," _get_obs",[41,114461,114462],{"class":275},"(self) -> np.ndarray:\n",[41,114464,114465,114467,114469,114471,114474,114476],{"class":43,"line":9955},[41,114466,112240],{"class":275},[41,114468,321],{"class":271},[41,114470,38976],{"class":58},[41,114472,114473],{"class":275},".data.site_xpos[",[41,114475,30926],{"class":58},[41,114477,114478],{"class":275},".tip_site_id].copy()\n",[41,114480,114481,114483,114485,114487,114489,114491],{"class":43,"line":9961},[41,114482,112253],{"class":275},[41,114484,321],{"class":271},[41,114486,38976],{"class":58},[41,114488,114473],{"class":275},[41,114490,30926],{"class":58},[41,114492,114493],{"class":275},".target_site_id].copy()\n",[41,114495,114496,114498,114500,114503,114505,114508,114510],{"class":43,"line":9982},[41,114497,110285],{"class":275},[41,114499,321],{"class":271},[41,114501,114502],{"class":275}," np.concatenate([",[41,114504,30926],{"class":58},[41,114506,114507],{"class":275},".data.qpos.copy(), ",[41,114509,30926],{"class":58},[41,114511,114512],{"class":275},".data.qvel.copy(), tip, target])\n",[41,114514,114515,114517],{"class":43,"line":9988},[41,114516,14890],{"class":271},[41,114518,114519],{"class":275}," obs.astype(np.float32)\n",[41,114521,114522],{"class":43,"line":10002},[41,114523,80],{"emptyLinePlaceholder":79},[41,114525,114526,114528,114531,114533,114535],{"class":43,"line":10008},[41,114527,30904],{"class":271},[41,114529,114530],{"class":54}," _get_reward",[41,114532,114199],{"class":275},[41,114534,315],{"class":58},[41,114536,3877],{"class":275},[41,114538,114539,114541,114543,114545,114547,114549],{"class":43,"line":10035},[41,114540,112240],{"class":275},[41,114542,321],{"class":271},[41,114544,38976],{"class":58},[41,114546,114473],{"class":275},[41,114548,30926],{"class":58},[41,114550,114551],{"class":275},".tip_site_id]\n",[41,114553,114554,114556,114558,114560,114562,114564],{"class":43,"line":10044},[41,114555,112253],{"class":275},[41,114557,321],{"class":271},[41,114559,38976],{"class":58},[41,114561,114473],{"class":275},[41,114563,30926],{"class":58},[41,114565,114566],{"class":275},".target_site_id]\n",[41,114568,114569,114572,114574,114576,114578],{"class":43,"line":10050},[41,114570,114571],{"class":275},"        dist ",[41,114573,321],{"class":271},[41,114575,111704],{"class":275},[41,114577,805],{"class":271},[41,114579,111709],{"class":275},[41,114581,114582,114585,114587,114589,114591,114594,114596],{"class":43,"line":10058},[41,114583,114584],{"class":275},"        control_cost ",[41,114586,321],{"class":271},[41,114588,112140],{"class":58},[41,114590,6656],{"class":271},[41,114592,114593],{"class":275}," np.sum(np.square(",[41,114595,30926],{"class":58},[41,114597,114598],{"class":275},".data.ctrl))\n",[41,114600,114601,114603,114605,114607,114609,114611,114613],{"class":43,"line":10063},[41,114602,14890],{"class":271},[41,114604,109900],{"class":58},[41,114606,276],{"class":275},[41,114608,805],{"class":271},[41,114610,111699],{"class":275},[41,114612,805],{"class":271},[41,114614,112162],{"class":275},[41,114616,114617],{"class":43,"line":16742},[41,114618,80],{"emptyLinePlaceholder":79},[41,114620,114621,114623,114626,114629,114631,114634,114636,114638,114640,114642,114644,114647,114650,114652,114654,114656,114658],{"class":43,"line":16748},[41,114622,30904],{"class":271},[41,114624,114625],{"class":54}," reset",[41,114627,114628],{"class":275},"(self, ",[41,114630,728],{"class":271},[41,114632,114633],{"class":275},", seed: ",[41,114635,279],{"class":58},[41,114637,25212],{"class":271},[41,114639,39036],{"class":58},[41,114641,13702],{"class":271},[41,114643,39036],{"class":58},[41,114645,114646],{"class":275},", options: ",[41,114648,114649],{"class":58},"dict",[41,114651,25212],{"class":271},[41,114653,39036],{"class":58},[41,114655,13702],{"class":271},[41,114657,39036],{"class":58},[41,114659,30889],{"class":275},[41,114661,114662,114664,114667,114670,114672],{"class":43,"line":16771},[41,114663,30920],{"class":58},[41,114665,114666],{"class":275},"().reset(",[41,114668,114669],{"class":5354},"seed",[41,114671,321],{"class":271},[41,114673,114674],{"class":275},"seed)\n",[41,114676,114677,114680,114682,114685,114687],{"class":43,"line":16777},[41,114678,114679],{"class":275},"        mujoco.mj_resetData(",[41,114681,30926],{"class":58},[41,114683,114684],{"class":275},".model, ",[41,114686,30926],{"class":58},[41,114688,114689],{"class":275},".data)\n",[41,114691,114692],{"class":43,"line":16800},[41,114693,80],{"emptyLinePlaceholder":79},[41,114695,114696,114698,114701,114703,114705,114708,114710,114712,114714,114716,114718,114720,114722,114724,114726,114728,114730],{"class":43,"line":16814},[41,114697,30948],{"class":58},[41,114699,114700],{"class":275},".data.qpos[:] ",[41,114702,321],{"class":271},[41,114704,38976],{"class":58},[41,114706,114707],{"class":275},".np_random.uniform(",[41,114709,113865],{"class":5354},[41,114711,113868],{"class":271},[41,114713,86313],{"class":58},[41,114715,12573],{"class":275},[41,114717,113875],{"class":5354},[41,114719,321],{"class":271},[41,114721,86313],{"class":58},[41,114723,12573],{"class":275},[41,114725,31599],{"class":5354},[41,114727,321],{"class":271},[41,114729,30926],{"class":58},[41,114731,114732],{"class":275},".model.nq)\n",[41,114734,114735,114737,114740,114742],{"class":43,"line":16834},[41,114736,30948],{"class":58},[41,114738,114739],{"class":275},".data.qvel[:] ",[41,114741,321],{"class":271},[41,114743,104864],{"class":58},[41,114745,114746,114749,114751,114753,114755],{"class":43,"line":16840},[41,114747,114748],{"class":275},"        mujoco.mj_forward(",[41,114750,30926],{"class":58},[41,114752,114684],{"class":275},[41,114754,30926],{"class":58},[41,114756,114689],{"class":275},[41,114758,114759],{"class":43,"line":16851},[41,114760,80],{"emptyLinePlaceholder":79},[41,114762,114763,114765,114767,114769],{"class":43,"line":16874},[41,114764,30948],{"class":58},[41,114766,113809],{"class":275},[41,114768,321],{"class":271},[41,114770,47436],{"class":58},[41,114772,114773,114775,114777],{"class":43,"line":16896},[41,114774,14890],{"class":271},[41,114776,38976],{"class":58},[41,114778,114779],{"class":275},"._get_obs(), {}\n",[41,114781,114782],{"class":43,"line":16901},[41,114783,80],{"emptyLinePlaceholder":79},[41,114785,114786,114788,114791],{"class":43,"line":16907},[41,114787,30904],{"class":271},[41,114789,114790],{"class":54}," step",[41,114792,114793],{"class":275},"(self, action):\n",[41,114795,114796,114798,114800,114803,114805,114807],{"class":43,"line":16921},[41,114797,110325],{"class":275},[41,114799,321],{"class":271},[41,114801,114802],{"class":275}," np.asarray(action, ",[41,114804,93603],{"class":5354},[41,114806,321],{"class":271},[41,114808,113899],{"class":275},[41,114810,114811,114813,114815,114817,114819,114822,114824],{"class":43,"line":16934},[41,114812,110325],{"class":275},[41,114814,321],{"class":271},[41,114816,107550],{"class":275},[41,114818,30926],{"class":58},[41,114820,114821],{"class":275},".action_space.low, ",[41,114823,30926],{"class":58},[41,114825,114826],{"class":275},".action_space.high)\n",[41,114828,114829],{"class":43,"line":16939},[41,114830,80],{"emptyLinePlaceholder":79},[41,114832,114833,114835,114838,114840],{"class":43,"line":16953},[41,114834,30948],{"class":58},[41,114836,114837],{"class":275},".data.ctrl[:] ",[41,114839,321],{"class":271},[41,114841,107573],{"class":275},[41,114843,114844,114846,114848,114850,114852,114854,114856],{"class":43,"line":16958},[41,114845,3541],{"class":271},[41,114847,101604],{"class":275},[41,114849,26146],{"class":271},[41,114851,32546],{"class":58},[41,114853,276],{"class":275},[41,114855,30926],{"class":58},[41,114857,114858],{"class":275},".frame_skip):\n",[41,114860,114861,114864,114866,114868,114870],{"class":43,"line":16964},[41,114862,114863],{"class":275},"            mujoco.mj_step(",[41,114865,30926],{"class":58},[41,114867,114684],{"class":275},[41,114869,30926],{"class":58},[41,114871,114689],{"class":275},[41,114873,114874],{"class":43,"line":16969},[41,114875,80],{"emptyLinePlaceholder":79},[41,114877,114878,114880,114882,114884],{"class":43,"line":16983},[41,114879,30948],{"class":58},[41,114881,113809],{"class":275},[41,114883,9615],{"class":271},[41,114885,55802],{"class":58},[41,114887,114888],{"class":43,"line":16988},[41,114889,80],{"emptyLinePlaceholder":79},[41,114891,114892,114894,114896,114898],{"class":43,"line":16993},[41,114893,110285],{"class":275},[41,114895,321],{"class":271},[41,114897,38976],{"class":58},[41,114899,114900],{"class":275},"._get_obs()\n",[41,114902,114903,114905,114907,114909],{"class":43,"line":17007},[41,114904,110390],{"class":275},[41,114906,321],{"class":271},[41,114908,38976],{"class":58},[41,114910,114911],{"class":275},"._get_reward()\n",[41,114913,114914],{"class":43,"line":17019},[41,114915,80],{"emptyLinePlaceholder":79},[41,114917,114918,114920,114922,114924,114926,114928],{"class":43,"line":17024},[41,114919,112240],{"class":275},[41,114921,321],{"class":271},[41,114923,38976],{"class":58},[41,114925,114473],{"class":275},[41,114927,30926],{"class":58},[41,114929,114551],{"class":275},[41,114931,114932,114934,114936,114938,114940,114942],{"class":43,"line":17037},[41,114933,112253],{"class":275},[41,114935,321],{"class":271},[41,114937,38976],{"class":58},[41,114939,114473],{"class":275},[41,114941,30926],{"class":58},[41,114943,114566],{"class":275},[41,114945,114946,114948,114950,114952,114955,114957],{"class":43,"line":17042},[41,114947,114571],{"class":275},[41,114949,321],{"class":271},[41,114951,109900],{"class":58},[41,114953,114954],{"class":275},"(np.linalg.norm(tip ",[41,114956,805],{"class":271},[41,114958,114959],{"class":275}," target))\n",[41,114961,114962],{"class":43,"line":17047},[41,114963,80],{"emptyLinePlaceholder":79},[41,114965,114966,114969,114971,114973,114975],{"class":43,"line":17052},[41,114967,114968],{"class":275},"        terminated ",[41,114970,321],{"class":271},[41,114972,113792],{"class":275},[41,114974,1183],{"class":271},[41,114976,113797],{"class":58},[41,114978,114979,114982,114984,114986,114988,114990,114992],{"class":43,"line":17065},[41,114980,114981],{"class":275},"        truncated ",[41,114983,321],{"class":271},[41,114985,38976],{"class":58},[41,114987,113809],{"class":275},[41,114989,1850],{"class":271},[41,114991,38976],{"class":58},[41,114993,113816],{"class":275},[41,114995,114996,114999,115001,115003,115006],{"class":43,"line":17070},[41,114997,114998],{"class":275},"        info ",[41,115000,321],{"class":271},[41,115002,4586],{"class":275},[41,115004,115005],{"class":378},"\"distance\"",[41,115007,115008],{"class":275},": dist}\n",[41,115010,115011,115013],{"class":43,"line":32736},[41,115012,14890],{"class":271},[41,115014,115015],{"class":275}," obs, reward, terminated, truncated, info\n",[41,115017,115018],{"class":43,"line":32742},[41,115019,80],{"emptyLinePlaceholder":79},[41,115021,115022],{"class":43,"line":32748},[41,115023,80],{"emptyLinePlaceholder":79},[41,115025,115026,115028,115030,115032,115034],{"class":43,"line":32754},[41,115027,32050],{"class":271},[41,115029,2112],{"class":54},[41,115031,101501],{"class":275},[41,115033,95789],{"class":58},[41,115035,3877],{"class":275},[41,115037,115038,115041,115043],{"class":43,"line":32760},[41,115039,115040],{"class":275},"    env ",[41,115042,321],{"class":271},[41,115044,115045],{"class":275}," ReacherEnv()\n",[41,115047,115048,115051,115053,115056,115058,115060,115062],{"class":43,"line":32771},[41,115049,115050],{"class":275},"    obs, info ",[41,115052,321],{"class":271},[41,115054,115055],{"class":275}," env.reset(",[41,115057,114669],{"class":5354},[41,115059,321],{"class":271},[41,115061,465],{"class":58},[41,115063,282],{"class":275},[41,115065,115066,115068,115070,115073],{"class":43,"line":32777},[41,115067,31402],{"class":58},[41,115069,276],{"class":275},[41,115071,115072],{"class":378},"\"initial obs shape:\"",[41,115074,115075],{"class":275},", obs.shape)\n",[41,115077,115078,115080,115082,115085],{"class":43,"line":32797},[41,115079,31402],{"class":58},[41,115081,276],{"class":275},[41,115083,115084],{"class":378},"\"initial info:\"",[41,115086,115087],{"class":275},", info)\n",[41,115089,115090],{"class":43,"line":32803},[41,115091,80],{"emptyLinePlaceholder":79},[41,115093,115094,115096,115098],{"class":43,"line":32814},[41,115095,110256],{"class":275},[41,115097,321],{"class":271},[41,115099,104864],{"class":58},[41,115101,115102,115104,115106,115108,115110,115112,115114],{"class":43,"line":32820},[41,115103,3339],{"class":271},[41,115105,31719],{"class":275},[41,115107,26146],{"class":271},[41,115109,32546],{"class":58},[41,115111,276],{"class":275},[41,115113,973],{"class":58},[41,115115,30889],{"class":275},[41,115117,115118,115120,115122],{"class":43,"line":32826},[41,115119,110325],{"class":275},[41,115121,321],{"class":271},[41,115123,115124],{"class":275}," env.action_space.sample()\n",[41,115126,115127,115130,115132],{"class":43,"line":32832},[41,115128,115129],{"class":275},"        obs, reward, terminated, truncated, info ",[41,115131,321],{"class":271},[41,115133,113518],{"class":275},[41,115135,115136,115138,115140],{"class":43,"line":32838},[41,115137,110400],{"class":275},[41,115139,9615],{"class":271},[41,115141,110405],{"class":275},[41,115143,115144,115146,115148,115150,115152,115155,115157,115159,115162,115164,115166,115169,115171,115173,115176,115178,115180,115182],{"class":43,"line":32844},[41,115145,32554],{"class":58},[41,115147,276],{"class":275},[41,115149,110434],{"class":378},[41,115151,110437],{"class":275},[41,115153,115154],{"class":378},"\"reward:\"",[41,115156,12573],{"class":275},[41,115158,32121],{"class":58},[41,115160,115161],{"class":275},"(reward, ",[41,115163,345],{"class":58},[41,115165,110448],{"class":275},[41,115167,115168],{"class":378},"\"distance:\"",[41,115170,12573],{"class":275},[41,115172,32121],{"class":58},[41,115174,115175],{"class":275},"(info[",[41,115177,115005],{"class":378},[41,115179,112305],{"class":275},[41,115181,345],{"class":58},[41,115183,30600],{"class":275},[41,115185,115186,115188,115191,115194],{"class":43,"line":32850},[41,115187,2635],{"class":271},[41,115189,115190],{"class":275}," terminated ",[41,115192,115193],{"class":271},"or",[41,115195,115196],{"class":275}," truncated:\n",[41,115198,115199],{"class":43,"line":32856},[41,115200,115201],{"class":271},"            break\n",[41,115203,115204],{"class":43,"line":32876},[41,115205,80],{"emptyLinePlaceholder":79},[41,115207,115208,115210,115212,115214,115216,115218,115220,115222],{"class":43,"line":32882},[41,115209,31402],{"class":58},[41,115211,276],{"class":275},[41,115213,110479],{"class":378},[41,115215,12573],{"class":275},[41,115217,32121],{"class":58},[41,115219,110486],{"class":275},[41,115221,345],{"class":58},[41,115223,30600],{"class":275},[41,115225,115226],{"class":43,"line":32898},[41,115227,80],{"emptyLinePlaceholder":79},[41,115229,115230],{"class":43,"line":32904},[41,115231,80],{"emptyLinePlaceholder":79},[41,115233,115234,115236,115238,115240,115242],{"class":43,"line":32918},[41,115235,1672],{"class":271},[41,115237,31323],{"class":58},[41,115239,101662],{"class":271},[41,115241,101665],{"class":378},[41,115243,3877],{"class":275},[41,115245,115246],{"class":43,"line":32924},[41,115247,101672],{"class":275},[20,115249,103673],{},[32,115251,115253],{"className":34,"code":115252,"language":36,"meta":37,"style":37},"touch ch8_gym_env.py\n",[24,115254,115255],{"__ignoreMap":37},[41,115256,115257,115259],{"class":43,"line":44},[41,115258,101386],{"class":54},[41,115260,115261],{"class":378}," ch8_gym_env.py\n",[20,115263,110547],{},[32,115265,115267],{"className":34,"code":115266,"language":36,"meta":37,"style":37},"python ch8_gym_env.py\n",[24,115268,115269],{"__ignoreMap":37},[41,115270,115271,115273],{"class":43,"line":44},[41,115272,30483],{"class":54},[41,115274,115261],{"class":378},[241,115276,101675],{"id":101675},[20,115278,115279],{},"继承 Gymnasium 环境：",[32,115281,115283],{"className":30481,"code":115282,"language":30483,"meta":37,"style":37},"class ReacherEnv(gym.Env):\n",[24,115284,115285],{"__ignoreMap":37},[41,115286,115287,115289,115291,115293,115295,115297,115299],{"class":43,"line":44},[41,115288,14832],{"class":271},[41,115290,114160],{"class":54},[41,115292,276],{"class":275},[41,115294,113643],{"class":54},[41,115296,831],{"class":275},[41,115298,114169],{"class":54},[41,115300,30889],{"class":275},[20,115302,115303],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[20,115305,115306],{},"初始化模型：",[32,115308,115310],{"className":30481,"code":115309,"language":30483,"meta":37,"style":37},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[24,115311,115312,115326],{"__ignoreMap":37},[41,115313,115314,115316,115318,115320,115322,115324],{"class":43,"line":44},[41,115315,30926],{"class":58},[41,115317,114220],{"class":275},[41,115319,321],{"class":271},[41,115321,101515],{"class":275},[41,115323,101417],{"class":58},[41,115325,282],{"class":275},[41,115327,115328,115330,115332,115334,115336,115338],{"class":43,"line":51},[41,115329,30926],{"class":58},[41,115331,114235],{"class":275},[41,115333,321],{"class":271},[41,115335,114240],{"class":275},[41,115337,30926],{"class":58},[41,115339,114245],{"class":275},[20,115341,115342,115343,115345],{},"这和前面章节一样，只是现在放到了类的 ",[24,115344,30932],{}," 里。",[20,115347,115348],{},"缓存 site ID：",[32,115350,115352],{"className":30481,"code":115351,"language":30483,"meta":37,"style":37},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[24,115353,115354,115368],{"__ignoreMap":37},[41,115355,115356,115358,115360,115362,115364,115366],{"class":43,"line":44},[41,115357,30926],{"class":58},[41,115359,114256],{"class":275},[41,115361,321],{"class":271},[41,115363,114261],{"class":275},[41,115365,89657],{"class":58},[41,115367,282],{"class":275},[41,115369,115370,115372,115374,115376,115378,115380],{"class":43,"line":51},[41,115371,30926],{"class":58},[41,115373,114277],{"class":275},[41,115375,321],{"class":271},[41,115377,114261],{"class":275},[41,115379,89657],{"class":58},[41,115381,282],{"class":275},[20,115383,115384],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[20,115386,115387],{},"reset：",[32,115389,115391],{"className":30481,"code":115390,"language":30483,"meta":37,"style":37},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[24,115392,115393],{"__ignoreMap":37},[41,115394,115395,115397,115399,115401,115403,115405,115407,115409,115411,115413,115415,115417,115419,115421,115423,115425,115427],{"class":43,"line":44},[41,115396,32050],{"class":271},[41,115398,114625],{"class":54},[41,115400,114628],{"class":275},[41,115402,728],{"class":271},[41,115404,114633],{"class":275},[41,115406,279],{"class":58},[41,115408,25212],{"class":271},[41,115410,39036],{"class":58},[41,115412,13702],{"class":271},[41,115414,39036],{"class":58},[41,115416,114646],{"class":275},[41,115418,114649],{"class":58},[41,115420,25212],{"class":271},[41,115422,39036],{"class":58},[41,115424,13702],{"class":271},[41,115426,39036],{"class":58},[41,115428,30889],{"class":275},[20,115430,115431,115433],{},[24,115432,70159],{}," 做四件事：",[224,115435,115436,115439,115442,115445],{},[227,115437,115438],{},"设置随机种子。",[227,115440,115441],{},"重置 MuJoCo data。",[227,115443,115444],{},"随机初始化关节角。",[227,115446,115447],{},"返回初始观测和 info。",[20,115449,115450],{},"step：",[32,115452,115454],{"className":30481,"code":115453,"language":30483,"meta":37,"style":37},"def step(self, action):\n",[24,115455,115456],{"__ignoreMap":37},[41,115457,115458,115460,115462],{"class":43,"line":44},[41,115459,32050],{"class":271},[41,115461,114790],{"class":54},[41,115463,114793],{"class":275},[20,115465,115466,115468],{},[24,115467,107237],{}," 做六件事：",[224,115470,115471,115474,115480,115483,115486,115489],{},[227,115472,115473],{},"检查并裁剪 action。",[227,115475,115476,115477,28488],{},"写入 ",[24,115478,115479],{},"self.data.ctrl",[227,115481,115482],{},"连续推进若干个 MuJoCo 物理步。",[227,115484,115485],{},"计算新观测。",[227,115487,115488],{},"计算奖励和结束条件。",[227,115490,115491],{},"返回 Gymnasium 标准五元组。",[241,115493,101811],{"id":101811},[32,115495,115497],{"className":30481,"code":115496,"language":30483,"meta":37,"style":37},"import gymnasium as gym\n",[24,115498,115499],{"__ignoreMap":37},[41,115500,115501,115503,115505,115507],{"class":43,"line":44},[41,115502,30495],{"class":271},[41,115504,113998],{"class":275},[41,115506,31486],{"class":271},[41,115508,114003],{"class":275},[20,115510,115511,115512,115514,115515,115518],{},"导入 Gymnasium，并起别名 ",[24,115513,113643],{},"。后面写 ",[24,115516,115517],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[32,115520,115522],{"className":30481,"code":115521,"language":30483,"meta":37,"style":37},"from gymnasium import spaces\n",[24,115523,115524],{"__ignoreMap":37},[41,115525,115526,115528,115530,115532],{"class":43,"line":44},[41,115527,30840],{"class":271},[41,115529,113998],{"class":275},[41,115531,30495],{"class":271},[41,115533,114030],{"class":275},[20,115535,115536,115537,115540],{},"导入空间定义工具。",[24,115538,115539],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[32,115542,115543],{"className":30481,"code":115282,"language":30483,"meta":37,"style":37},[24,115544,115545],{"__ignoreMap":37},[41,115546,115547,115549,115551,115553,115555,115557,115559],{"class":43,"line":44},[41,115548,14832],{"class":271},[41,115550,114160],{"class":54},[41,115552,276],{"class":275},[41,115554,113643],{"class":54},[41,115556,831],{"class":275},[41,115558,114169],{"class":54},[41,115560,30889],{"class":275},[20,115562,115563,115564,115567,115568,115570,115571,101121,115573,115575],{},"定义一个类，名字叫 ",[24,115565,115566],{},"ReacherEnv","。括号里的 ",[24,115569,115517],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[24,115572,70159],{},[24,115574,107237],{}," 这两个核心方法。",[32,115577,115579],{"className":30481,"code":115578,"language":30483,"meta":37,"style":37},"metadata = {\"render_modes\": []}\n",[24,115580,115581],{"__ignoreMap":37},[41,115582,115583,115586,115588,115590,115592],{"class":43,"line":44},[41,115584,115585],{"class":275},"metadata ",[41,115587,321],{"class":271},[41,115589,4586],{"class":275},[41,115591,114183],{"class":378},[41,115593,114186],{"class":275},[20,115595,115596],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[32,115598,115600],{"className":30481,"code":115599,"language":30483,"meta":37,"style":37},"def __init__(self) -> None:\n",[24,115601,115602],{"__ignoreMap":37},[41,115603,115604,115606,115608,115610,115612],{"class":43,"line":44},[41,115605,32050],{"class":271},[41,115607,30907],{"class":58},[41,115609,114199],{"class":275},[41,115611,95789],{"class":58},[41,115613,3877],{"class":275},[20,115615,115616,115618,115619,28488],{},[24,115617,30932],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[24,115620,115621],{},"env = ReacherEnv()",[32,115623,115625],{"className":30481,"code":115624,"language":30483,"meta":37,"style":37},"super().__init__()\n",[24,115626,115627],{"__ignoreMap":37},[41,115628,115629,115632,115634,115636],{"class":43,"line":44},[41,115630,115631],{"class":58},"super",[41,115633,17399],{"class":275},[41,115635,30932],{"class":58},[41,115637,2115],{"class":275},[20,115639,115640,115641,115643],{},"调用父类 ",[24,115642,115517],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[32,115645,115646],{"className":30481,"code":115309,"language":30483,"meta":37,"style":37},[24,115647,115648,115662],{"__ignoreMap":37},[41,115649,115650,115652,115654,115656,115658,115660],{"class":43,"line":44},[41,115651,30926],{"class":58},[41,115653,114220],{"class":275},[41,115655,321],{"class":271},[41,115657,101515],{"class":275},[41,115659,101417],{"class":58},[41,115661,282],{"class":275},[41,115663,115664,115666,115668,115670,115672,115674],{"class":43,"line":51},[41,115665,30926],{"class":58},[41,115667,114235],{"class":275},[41,115669,321],{"class":271},[41,115671,114240],{"class":275},[41,115673,30926],{"class":58},[41,115675,114245],{"class":275},[20,115677,115678,115679,115681,115682,101121,115685,115688],{},"把 MuJoCo 模型和状态保存到 ",[24,115680,30926],{}," 上。",[24,115683,115684],{},"self.model",[24,115686,115687],{},"self.data"," 表示这个环境对象自己的模型和状态。",[32,115690,115691],{"className":30481,"code":115351,"language":30483,"meta":37,"style":37},[24,115692,115693,115707],{"__ignoreMap":37},[41,115694,115695,115697,115699,115701,115703,115705],{"class":43,"line":44},[41,115696,30926],{"class":58},[41,115698,114256],{"class":275},[41,115700,321],{"class":271},[41,115702,114261],{"class":275},[41,115704,89657],{"class":58},[41,115706,282],{"class":275},[41,115708,115709,115711,115713,115715,115717,115719],{"class":43,"line":51},[41,115710,30926],{"class":58},[41,115712,114277],{"class":275},[41,115714,321],{"class":271},[41,115716,114261],{"class":275},[41,115718,89657],{"class":58},[41,115720,282],{"class":275},[20,115722,115723,115724,101121,115727,115730],{},"提前查好 tip 和 target 的 site ID。这样 ",[24,115725,115726],{},"_get_obs",[24,115728,115729],{},"_get_reward"," 里就不用每次按名字查找。",[32,115732,115734],{"className":30481,"code":115733,"language":30483,"meta":37,"style":37},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[24,115735,115736,115746,115756],{"__ignoreMap":37},[41,115737,115738,115740,115742,115744],{"class":43,"line":44},[41,115739,30926],{"class":58},[41,115741,113970],{"class":275},[41,115743,321],{"class":271},[41,115745,54530],{"class":58},[41,115747,115748,115750,115752,115754],{"class":43,"line":51},[41,115749,30926],{"class":58},[41,115751,114349],{"class":275},[41,115753,321],{"class":271},[41,115755,114354],{"class":58},[41,115757,115758,115760,115762,115764],{"class":43,"line":62},[41,115759,30926],{"class":58},[41,115761,113809],{"class":275},[41,115763,321],{"class":271},[41,115765,47436],{"class":58},[20,115767,115768,115771,115772,115775,115776,115779],{},[24,115769,115770],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[24,115773,115774],{},"max_steps"," 是一个 episode 最多运行多少步。",[24,115777,115778],{},"steps"," 记录当前 episode 已经走了多少步。",[32,115781,115782],{"className":30481,"code":113848,"language":30483,"meta":37,"style":37},[24,115783,115784],{"__ignoreMap":37},[41,115785,115786,115788,115790,115792,115794,115796,115798,115800,115802,115804,115806,115808,115810,115812,115814,115816,115818,115820,115822,115824],{"class":43,"line":44},[41,115787,30926],{"class":58},[41,115789,113857],{"class":275},[41,115791,321],{"class":271},[41,115793,113862],{"class":275},[41,115795,113865],{"class":5354},[41,115797,113868],{"class":271},[41,115799,102506],{"class":58},[41,115801,12573],{"class":275},[41,115803,113875],{"class":5354},[41,115805,321],{"class":271},[41,115807,102506],{"class":58},[41,115809,12573],{"class":275},[41,115811,96066],{"class":5354},[41,115813,321],{"class":271},[41,115815,276],{"class":275},[41,115817,351],{"class":58},[41,115819,113892],{"class":275},[41,115821,93603],{"class":5354},[41,115823,321],{"class":271},[41,115825,113899],{"class":275},[20,115827,115828,115829,115832,115833,101121,115836,115839],{},"定义动作空间。",[24,115830,115831],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[24,115834,115835],{},"low=-1.0",[24,115837,115838],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[32,115841,115842],{"className":30481,"code":113909,"language":30483,"meta":37,"style":37},[24,115843,115844],{"__ignoreMap":37},[41,115845,115846,115848,115850,115852,115854,115856,115858,115860,115862,115864,115866,115868,115870,115872,115874,115876,115878,115880],{"class":43,"line":44},[41,115847,30926],{"class":58},[41,115849,113918],{"class":275},[41,115851,321],{"class":271},[41,115853,113862],{"class":275},[41,115855,113865],{"class":5354},[41,115857,113868],{"class":271},[41,115859,113929],{"class":275},[41,115861,113875],{"class":5354},[41,115863,321],{"class":271},[41,115865,113929],{"class":275},[41,115867,96066],{"class":5354},[41,115869,321],{"class":271},[41,115871,276],{"class":275},[41,115873,719],{"class":58},[41,115875,113892],{"class":275},[41,115877,93603],{"class":5354},[41,115879,321],{"class":271},[41,115881,113899],{"class":275},[20,115883,115884,115885,115888,115889,115892],{},"定义观测空间。",[24,115886,115887],{},"shape=(10,)"," 表示观测是 10 个数。",[24,115890,115891],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[32,115894,115896],{"className":30481,"code":115895,"language":30483,"meta":37,"style":37},"def _get_obs(self) -> np.ndarray:\n",[24,115897,115898],{"__ignoreMap":37},[41,115899,115900,115902,115904],{"class":43,"line":44},[41,115901,32050],{"class":271},[41,115903,114459],{"class":54},[41,115905,114462],{"class":275},[20,115907,115908,115909,115911],{},"定义内部函数，用来生成观测。函数名前面的 ",[24,115910,1265],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[32,115913,115915],{"className":30481,"code":115914,"language":30483,"meta":37,"style":37},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[24,115916,115917,115931],{"__ignoreMap":37},[41,115918,115919,115921,115923,115925,115927,115929],{"class":43,"line":44},[41,115920,111671],{"class":275},[41,115922,321],{"class":271},[41,115924,38976],{"class":58},[41,115926,114473],{"class":275},[41,115928,30926],{"class":58},[41,115930,114478],{"class":275},[41,115932,115933,115935,115937,115939,115941,115943],{"class":43,"line":51},[41,115934,111681],{"class":275},[41,115936,321],{"class":271},[41,115938,38976],{"class":58},[41,115940,114473],{"class":275},[41,115942,30926],{"class":58},[41,115944,114493],{"class":275},[20,115946,115947],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[32,115949,115951],{"className":30481,"code":115950,"language":30483,"meta":37,"style":37},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[24,115952,115953,115969],{"__ignoreMap":37},[41,115954,115955,115957,115959,115961,115963,115965,115967],{"class":43,"line":44},[41,115956,110957],{"class":275},[41,115958,321],{"class":271},[41,115960,114502],{"class":275},[41,115962,30926],{"class":58},[41,115964,114507],{"class":275},[41,115966,30926],{"class":58},[41,115968,114512],{"class":275},[41,115970,115971,115973],{"class":43,"line":51},[41,115972,17184],{"class":271},[41,115974,114519],{"class":275},[20,115976,115977,115978,115981,115982,115984],{},"拼接观测，并转换成 ",[24,115979,115980],{},"float32","。很多强化学习库默认使用 ",[24,115983,115980],{},"，所以这里主动转换。",[32,115986,115987],{"className":30481,"code":115390,"language":30483,"meta":37,"style":37},[24,115988,115989],{"__ignoreMap":37},[41,115990,115991,115993,115995,115997,115999,116001,116003,116005,116007,116009,116011,116013,116015,116017,116019,116021,116023],{"class":43,"line":44},[41,115992,32050],{"class":271},[41,115994,114625],{"class":54},[41,115996,114628],{"class":275},[41,115998,728],{"class":271},[41,116000,114633],{"class":275},[41,116002,279],{"class":58},[41,116004,25212],{"class":271},[41,116006,39036],{"class":58},[41,116008,13702],{"class":271},[41,116010,39036],{"class":58},[41,116012,114646],{"class":275},[41,116014,114649],{"class":58},[41,116016,25212],{"class":271},[41,116018,39036],{"class":58},[41,116020,13702],{"class":271},[41,116022,39036],{"class":58},[41,116024,30889],{"class":275},[20,116026,116027,116028,116030,116031,116034],{},"定义 reset。",[24,116029,114669],{}," 用来控制随机数，保证实验可以复现。",[24,116032,116033],{},"options"," 用来接收额外配置，本章暂时不用。",[32,116036,116038],{"className":30481,"code":116037,"language":30483,"meta":37,"style":37},"super().reset(seed=seed)\n",[24,116039,116040],{"__ignoreMap":37},[41,116041,116042,116044,116046,116048,116050],{"class":43,"line":44},[41,116043,115631],{"class":58},[41,116045,114666],{"class":275},[41,116047,114669],{"class":5354},[41,116049,321],{"class":271},[41,116051,114674],{"class":275},[20,116053,116054,116055,116058],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[24,116056,116057],{},"self.np_random"," 生成可复现的随机数。",[32,116060,116062],{"className":30481,"code":116061,"language":30483,"meta":37,"style":37},"mujoco.mj_resetData(self.model, self.data)\n",[24,116063,116064],{"__ignoreMap":37},[41,116065,116066,116069,116071,116073,116075],{"class":43,"line":44},[41,116067,116068],{"class":275},"mujoco.mj_resetData(",[41,116070,30926],{"class":58},[41,116072,114684],{"class":275},[41,116074,30926],{"class":58},[41,116076,114689],{"class":275},[20,116078,116079],{},"把 MuJoCo 状态重置到默认状态。",[32,116081,116083],{"className":30481,"code":116082,"language":30483,"meta":37,"style":37},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[24,116084,116085],{"__ignoreMap":37},[41,116086,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105,116107,116109,116111,116113,116115,116117,116119],{"class":43,"line":44},[41,116088,30926],{"class":58},[41,116090,114700],{"class":275},[41,116092,321],{"class":271},[41,116094,38976],{"class":58},[41,116096,114707],{"class":275},[41,116098,113865],{"class":5354},[41,116100,113868],{"class":271},[41,116102,86313],{"class":58},[41,116104,12573],{"class":275},[41,116106,113875],{"class":5354},[41,116108,321],{"class":271},[41,116110,86313],{"class":58},[41,116112,12573],{"class":275},[41,116114,31599],{"class":5354},[41,116116,321],{"class":271},[41,116118,30926],{"class":58},[41,116120,114732],{"class":275},[20,116122,115444,116123,116126,116127,116130,116131,116133],{},[24,116124,116125],{},"[:]"," 表示修改整个数组。",[24,116128,116129],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[24,116132,102253],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[32,116135,116137],{"className":30481,"code":116136,"language":30483,"meta":37,"style":37},"self.data.qvel[:] = 0.0\n",[24,116138,116139],{"__ignoreMap":37},[41,116140,116141,116143,116145,116147],{"class":43,"line":44},[41,116142,30926],{"class":58},[41,116144,114739],{"class":275},[41,116146,321],{"class":271},[41,116148,104864],{"class":58},[20,116150,116151],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[32,116153,116155],{"className":30481,"code":116154,"language":30483,"meta":37,"style":37},"self.steps = 0\nreturn self._get_obs(), {}\n",[24,116156,116157,116167],{"__ignoreMap":37},[41,116158,116159,116161,116163,116165],{"class":43,"line":44},[41,116160,30926],{"class":58},[41,116162,113809],{"class":275},[41,116164,321],{"class":271},[41,116166,47436],{"class":58},[41,116168,116169,116171,116173],{"class":43,"line":51},[41,116170,17184],{"class":271},[41,116172,38976],{"class":58},[41,116174,114779],{"class":275},[20,116176,116177],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[32,116179,116180],{"className":30481,"code":115453,"language":30483,"meta":37,"style":37},[24,116181,116182],{"__ignoreMap":37},[41,116183,116184,116186,116188],{"class":43,"line":44},[41,116185,32050],{"class":271},[41,116187,114790],{"class":54},[41,116189,114793],{"class":275},[20,116191,116192],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[32,116194,116196],{"className":30481,"code":116195,"language":30483,"meta":37,"style":37},"action = np.asarray(action, dtype=np.float32)\n",[24,116197,116198],{"__ignoreMap":37},[41,116199,116200,116202,116204,116206,116208,116210],{"class":43,"line":44},[41,116201,107545],{"class":275},[41,116203,321],{"class":271},[41,116205,114802],{"class":275},[41,116207,93603],{"class":5354},[41,116209,321],{"class":271},[41,116211,113899],{"class":275},[20,116213,116214,116215,28488],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[24,116216,115980],{},[32,116218,116220],{"className":30481,"code":116219,"language":30483,"meta":37,"style":37},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[24,116221,116222],{"__ignoreMap":37},[41,116223,116224,116226,116228,116230,116232,116234,116236],{"class":43,"line":44},[41,116225,107545],{"class":275},[41,116227,321],{"class":271},[41,116229,107550],{"class":275},[41,116231,30926],{"class":58},[41,116233,114821],{"class":275},[41,116235,30926],{"class":58},[41,116237,114826],{"class":275},[20,116239,116240],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[32,116242,116244],{"className":30481,"code":116243,"language":30483,"meta":37,"style":37},"self.data.ctrl[:] = action\n",[24,116245,116246],{"__ignoreMap":37},[41,116247,116248,116250,116252,116254],{"class":43,"line":44},[41,116249,30926],{"class":58},[41,116251,114837],{"class":275},[41,116253,321],{"class":271},[41,116255,107573],{"class":275},[20,116257,116258],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[32,116260,116262],{"className":30481,"code":116261,"language":30483,"meta":37,"style":37},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[24,116263,116264,116280],{"__ignoreMap":37},[41,116265,116266,116268,116270,116272,116274,116276,116278],{"class":43,"line":44},[41,116267,3163],{"class":271},[41,116269,101604],{"class":275},[41,116271,26146],{"class":271},[41,116273,32546],{"class":58},[41,116275,276],{"class":275},[41,116277,30926],{"class":58},[41,116279,114858],{"class":275},[41,116281,116282,116285,116287,116289,116291],{"class":43,"line":51},[41,116283,116284],{"class":275},"    mujoco.mj_step(",[41,116286,30926],{"class":58},[41,116288,114684],{"class":275},[41,116290,30926],{"class":58},[41,116292,114689],{"class":275},[20,116294,116295,116296,116299,116300,116302,116303,28488],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[24,116297,116298],{},"frame_skip=5","，所以外部调用一次 ",[24,116301,113980],{},"，内部实际执行 5 次 ",[24,116304,101318],{},[32,116306,116308],{"className":30481,"code":116307,"language":30483,"meta":37,"style":37},"self.steps += 1\n",[24,116309,116310],{"__ignoreMap":37},[41,116311,116312,116314,116316,116318],{"class":43,"line":44},[41,116313,30926],{"class":58},[41,116315,113809],{"class":275},[41,116317,9615],{"class":271},[41,116319,55802],{"class":58},[20,116321,116322],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[32,116324,116326],{"className":30481,"code":116325,"language":30483,"meta":37,"style":37},"obs = self._get_obs()\nreward = self._get_reward()\n",[24,116327,116328,116338],{"__ignoreMap":37},[41,116329,116330,116332,116334,116336],{"class":43,"line":44},[41,116331,110957],{"class":275},[41,116333,321],{"class":271},[41,116335,38976],{"class":58},[41,116337,114900],{"class":275},[41,116339,116340,116342,116344,116346],{"class":43,"line":51},[41,116341,111108],{"class":275},[41,116343,321],{"class":271},[41,116345,38976],{"class":58},[41,116347,114911],{"class":275},[20,116349,116350],{},"计算新的观测和奖励。",[32,116352,116354],{"className":30481,"code":116353,"language":30483,"meta":37,"style":37},"dist = float(np.linalg.norm(tip - target))\n",[24,116355,116356],{"__ignoreMap":37},[41,116357,116358,116360,116362,116364,116366,116368],{"class":43,"line":44},[41,116359,111699],{"class":275},[41,116361,321],{"class":271},[41,116363,109900],{"class":58},[41,116365,114954],{"class":275},[41,116367,805],{"class":271},[41,116369,114959],{"class":275},[20,116371,116372],{},"计算末端到目标的距离，并转换成 Python float。",[32,116374,116375],{"className":30481,"code":113780,"language":30483,"meta":37,"style":37},[24,116376,116377,116389],{"__ignoreMap":37},[41,116378,116379,116381,116383,116385,116387],{"class":43,"line":44},[41,116380,113787],{"class":275},[41,116382,321],{"class":271},[41,116384,113792],{"class":275},[41,116386,1183],{"class":271},[41,116388,113797],{"class":58},[41,116390,116391,116393,116395,116397,116399,116401,116403],{"class":43,"line":51},[41,116392,113802],{"class":275},[41,116394,321],{"class":271},[41,116396,38976],{"class":58},[41,116398,113809],{"class":275},[41,116400,1850],{"class":271},[41,116402,38976],{"class":58},[41,116404,113816],{"class":275},[20,116406,116407],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[32,116409,116411],{"className":30481,"code":116410,"language":30483,"meta":37,"style":37},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[24,116412,116413,116426],{"__ignoreMap":37},[41,116414,116415,116418,116420,116422,116424],{"class":43,"line":44},[41,116416,116417],{"class":275},"info ",[41,116419,321],{"class":271},[41,116421,4586],{"class":275},[41,116423,115005],{"class":378},[41,116425,115008],{"class":275},[41,116427,116428,116430],{"class":43,"line":51},[41,116429,17184],{"class":271},[41,116431,115015],{"class":275},[20,116433,116434,116437],{},[24,116435,116436],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[32,116439,116441],{"className":30481,"code":116440,"language":30483,"meta":37,"style":37},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[24,116442,116443,116452],{"__ignoreMap":37},[41,116444,116445,116448,116450],{"class":43,"line":44},[41,116446,116447],{"class":275},"env ",[41,116449,321],{"class":271},[41,116451,115045],{"class":275},[41,116453,116454,116456,116458,116460,116462,116464,116466],{"class":43,"line":51},[41,116455,113503],{"class":275},[41,116457,321],{"class":271},[41,116459,115055],{"class":275},[41,116461,114669],{"class":5354},[41,116463,321],{"class":271},[41,116465,465],{"class":58},[41,116467,282],{"class":275},[20,116469,116470,116471,116474],{},"创建环境并重置。",[24,116472,116473],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[32,116476,116478],{"className":30481,"code":116477,"language":30483,"meta":37,"style":37},"action = env.action_space.sample()\n",[24,116479,116480],{"__ignoreMap":37},[41,116481,116482,116484,116486],{"class":43,"line":44},[41,116483,107545],{"class":275},[41,116485,321],{"class":271},[41,116487,115124],{"class":275},[20,116489,116490],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[15,116492,102419],{"id":102418},[20,116494,105587],{},[32,116496,116499],{"className":116497,"code":116498,"language":5325,"meta":37},[5323],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[24,116500,116498],{"__ignoreMap":37},[20,116502,116503],{},"这个环境已经具备强化学习环境的基本结构。",[20,116505,116506],{},"主函数里使用随机动作：",[32,116508,116509],{"className":30481,"code":116477,"language":30483,"meta":37,"style":37},[24,116510,116511],{"__ignoreMap":37},[41,116512,116513,116515,116517],{"class":43,"line":44},[41,116514,107545],{"class":275},[41,116516,321],{"class":271},[41,116518,115124],{"class":275},[20,116520,116521],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[15,116523,102451],{"id":102450},[224,116525,116526,116529,116535,116544,116553,116562,116568],{},[227,116527,116528],{},"运行程序。",[227,116530,116531,116532,28488],{},"确认 ",[24,116533,116534],{},"obs.shape == (10,)",[227,116536,111284,116537,116540,116541,28488],{},[24,116538,116539],{},"env.action_space","，应类似 ",[24,116542,116543],{},"Box(-1.0, 1.0, (2,), float32)",[227,116545,105688,116546,116549,116550,28488],{},[24,116547,116548],{},"self.max_steps = 10","，确认环境会更快 ",[24,116551,116552],{},"truncated=True",[227,116554,102514,116555,102517,116558,116561],{},[24,116556,116557],{},"terminated = dist \u003C 0.05",[24,116559,116560],{},"dist \u003C 0.2","，观察是否更容易结束。",[227,116563,102514,116564,116567],{},[24,116565,116566],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[227,116569,116570,116571,116573,116574,116577],{},"在 ",[24,116572,116436],{}," 里加入 ",[24,116575,116576],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[15,116579,102556],{"id":102555},[241,116581,116583],{"id":116582},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[20,116585,116586,116587,116589],{},"Gymnasium 的 ",[24,116588,107237],{}," 返回 5 个值:",[32,116591,116593],{"className":30481,"code":116592,"language":30483,"meta":37,"style":37},"obs, reward, terminated, truncated, info\n",[24,116594,116595],{"__ignoreMap":37},[41,116596,116597],{"class":43,"line":44},[41,116598,116592],{"class":275},[20,116600,116601],{},"不是旧 Gym 的 4 个值。",[241,116603,116605,116608],{"id":116604},"datactrl-action-维度错误",[24,116606,116607],{},"data.ctrl[:] = action"," 维度错误",[20,116610,102626],{},[32,116612,116614],{"className":30481,"code":116613,"language":30483,"meta":37,"style":37},"print(self.model.nu)\nprint(action.shape)\n",[24,116615,116616,116627],{"__ignoreMap":37},[41,116617,116618,116620,116622,116624],{"class":43,"line":44},[41,116619,30518],{"class":58},[41,116621,276],{"class":275},[41,116623,30926],{"class":58},[41,116625,116626],{"class":275},".model.nu)\n",[41,116628,116629,116631],{"class":43,"line":51},[41,116630,30518],{"class":58},[41,116632,116633],{"class":275},"(action.shape)\n",[20,116635,116636],{},"两者必须匹配。",[241,116638,116640],{"id":116639},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[20,116642,102565],{},[32,116644,116646],{"className":30481,"code":116645,"language":30483,"meta":37,"style":37},"mujoco.mj_forward(self.model, self.data)\n",[24,116647,116648],{"__ignoreMap":37},[41,116649,116650,116653,116655,116657,116659],{"class":43,"line":44},[41,116651,116652],{"class":275},"mujoco.mj_forward(",[41,116654,30926],{"class":58},[41,116656,114684],{"class":275},[41,116658,30926],{"class":58},[41,116660,114689],{"class":275},[241,116662,116664,116666],{"id":116663},"observation_space-维度和-obs-不一致",[24,116665,113703],{}," 维度和 obs 不一致",[20,116668,102678],{},[32,116670,116672],{"className":30481,"code":116671,"language":30483,"meta":37,"style":37},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[24,116673,116674,116684,116691],{"__ignoreMap":37},[41,116675,116676,116678,116680,116682],{"class":43,"line":44},[41,116677,110957],{"class":275},[41,116679,321],{"class":271},[41,116681,38976],{"class":58},[41,116683,114900],{"class":275},[41,116685,116686,116688],{"class":43,"line":51},[41,116687,30518],{"class":58},[41,116689,116690],{"class":275},"(obs.shape)\n",[41,116692,116693,116695,116697,116699],{"class":43,"line":62},[41,116694,30518],{"class":58},[41,116696,276],{"class":275},[41,116698,30926],{"class":58},[41,116700,116701],{"class":275},".observation_space.shape)\n",[20,116703,116704],{},"两者必须一致。本章观测是：",[32,116706,116709],{"className":116707,"code":116708,"language":5325,"meta":37},[5323],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[24,116710,116708],{"__ignoreMap":37},[241,116712,116714],{"id":116713},"action-超过范围","action 超过范围",[20,116716,116717],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[32,116719,116720],{"className":30481,"code":116219,"language":30483,"meta":37,"style":37},[24,116721,116722],{"__ignoreMap":37},[41,116723,116724,116726,116728,116730,116732,116734,116736],{"class":43,"line":44},[41,116725,107545],{"class":275},[41,116727,321],{"class":271},[41,116729,107550],{"class":275},[41,116731,30926],{"class":58},[41,116733,114821],{"class":275},[41,116735,30926],{"class":58},[41,116737,114826],{"class":275},[20,116739,116740,116741,28488],{},"这能避免无效动作直接写入 ",[24,116742,101179],{},[241,116744,116746],{"id":116745},"忘记返回-info","忘记返回 info",[20,116748,116586,116749,101121,116751,116753],{},[24,116750,70159],{},[24,116752,107237],{}," 都会返回 info：",[32,116755,116756],{"className":30481,"code":113496,"language":30483,"meta":37,"style":37},[24,116757,116758,116766],{"__ignoreMap":37},[41,116759,116760,116762,116764],{"class":43,"line":44},[41,116761,113503],{"class":275},[41,116763,321],{"class":271},[41,116765,113508],{"class":275},[41,116767,116768,116770,116772],{"class":43,"line":51},[41,116769,113513],{"class":275},[41,116771,321],{"class":271},[41,116773,113518],{"class":275},[20,116775,116776,116777,28488],{},"即使暂时没有额外信息，也返回 ",[24,116778,32562],{},[15,116780,116782],{"id":116781},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[20,116784,116785],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[224,116787,116788,116791,116794,116797,116800,116803],{},[227,116789,116790],{},"更稳定的 reward。",[227,116792,116793],{},"合理的 episode 长度。",[227,116795,116796],{},"可重复的随机目标采样。",[227,116798,116799],{},"render 接口。",[227,116801,116802],{},"环境注册代码。",[227,116804,116805],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[20,116807,116808],{},"如果只是自己写训练循环，最小形式是：",[32,116810,116812],{"className":30481,"code":116811,"language":30483,"meta":37,"style":37},"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",[24,116813,116814,116822,116838,116842,116858,116867,116876,116886],{"__ignoreMap":37},[41,116815,116816,116818,116820],{"class":43,"line":44},[41,116817,116447],{"class":275},[41,116819,321],{"class":271},[41,116821,115045],{"class":275},[41,116823,116824,116826,116828,116830,116832,116834,116836],{"class":43,"line":51},[41,116825,113503],{"class":275},[41,116827,321],{"class":271},[41,116829,115055],{"class":275},[41,116831,114669],{"class":5354},[41,116833,321],{"class":271},[41,116835,465],{"class":58},[41,116837,282],{"class":275},[41,116839,116840],{"class":43,"line":62},[41,116841,80],{"emptyLinePlaceholder":79},[41,116843,116844,116846,116848,116850,116852,116854,116856],{"class":43,"line":70},[41,116845,3163],{"class":271},[41,116847,101604],{"class":275},[41,116849,26146],{"class":271},[41,116851,32546],{"class":58},[41,116853,276],{"class":275},[41,116855,6548],{"class":58},[41,116857,30889],{"class":275},[41,116859,116860,116863,116865],{"class":43,"line":76},[41,116861,116862],{"class":275},"    action ",[41,116864,321],{"class":271},[41,116866,115124],{"class":275},[41,116868,116869,116872,116874],{"class":43,"line":83},[41,116870,116871],{"class":275},"    obs, reward, terminated, truncated, info ",[41,116873,321],{"class":271},[41,116875,113518],{"class":275},[41,116877,116878,116880,116882,116884],{"class":43,"line":89},[41,116879,3239],{"class":271},[41,116881,115190],{"class":275},[41,116883,115193],{"class":271},[41,116885,115196],{"class":275},[41,116887,116888,116891,116893],{"class":43,"line":96},[41,116889,116890],{"class":275},"        obs, info ",[41,116892,321],{"class":271},[41,116894,113508],{"class":275},[15,116896,116898],{"id":116897},"_9本章小结","9.本章小结",[20,116900,116901],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[32,116903,116906],{"className":116904,"code":116905,"language":5325,"meta":37},[5323],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[24,116907,116905],{"__ignoreMap":37},[20,116909,116910],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[189,116912,116913],{},"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":37,"searchDepth":51,"depth":51,"links":116915},[116916,116917,116918,116925,116929,116930,116931,116941,116942],{"id":100749,"depth":51,"text":100750},{"id":100872,"depth":51,"text":100873},{"id":101147,"depth":51,"text":101148,"children":116919},[116920,116922,116924],{"id":113727,"depth":62,"text":116921},"terminated 和 truncated 的区别",{"id":113830,"depth":62,"text":116923},"observation_space 和 action_space",{"id":113957,"depth":62,"text":113958},{"id":101355,"depth":51,"text":101356,"children":116926},[116927,116928],{"id":101675,"depth":62,"text":101675},{"id":101811,"depth":62,"text":101811},{"id":102418,"depth":51,"text":102419},{"id":102450,"depth":51,"text":102451},{"id":102555,"depth":51,"text":102556,"children":116932},[116933,116934,116936,116937,116939,116940],{"id":116582,"depth":62,"text":116583},{"id":116604,"depth":62,"text":116935},"data.ctrl[:] = action 维度错误",{"id":116639,"depth":62,"text":116640},{"id":116663,"depth":62,"text":116938},"observation_space 维度和 obs 不一致",{"id":116713,"depth":62,"text":116714},{"id":116745,"depth":62,"text":116746},{"id":116781,"depth":51,"text":116782},{"id":116897,"depth":51,"text":116898},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113480,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116949,"title":116950,"body":116951,"description":117374,"extension":197,"meta":117375,"navigation":79,"path":117376,"seo":117377,"stem":117378,"__hash__":117379},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116952,"toc":117364},[116953,116957,116960,116963,116983,116989,116995,117005,117008,117011,117031,117034,117038,117041,117047,117050,117064,117067,117070,117144,117147,117153,117156,117179,117182,117232,117235,117241,117244,117247,117250,117269,117272,117278,117281,117284,117287,117307,117310,117313,117316,117361],[10,116954,116956],{"id":116955},"mujoco-学习","MuJoCo 学习",[20,116958,116959],{},"初版",[20,116961,116962],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[224,116964,116965,116968,116971,116980],{},[227,116966,116967],{},"MuJoCo 模型文件在描述什么。",[227,116969,116970],{},"Python 代码怎样读取和推进仿真。",[227,116972,116973,486,116975,486,116977,116979],{},[24,116974,104133],{},[24,116976,104463],{},[24,116978,104466],{}," 这些数组为什么重要。",[227,116981,116982],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[20,116984,116985,116986,116988],{},"默认环境为 Fedora 44、Python >= 3.10、",[24,116987,101130],{}," 官方 Python bindings。",[20,116990,116991,116992,116994],{},"注意：本文禁止使用 ",[24,116993,101115],{},"。所有示例均使用：",[32,116996,116997],{"className":30481,"code":101681,"language":30483,"meta":37,"style":37},[24,116998,116999],{"__ignoreMap":37},[41,117000,117001,117003],{"class":43,"line":44},[41,117002,30495],{"class":271},[41,117004,101404],{"class":275},[15,117006,117007],{"id":117007},"适合谁阅读",[20,117009,117010],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[224,117012,117013,117016,117019,117022],{},[227,117014,117015],{},"没学过 MuJoCo，只会一点 Python。",[227,117017,117018],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[227,117020,117021],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[227,117023,117024,117025,117027,117028,117030],{},"以前接触过 ",[24,117026,101115],{},"，现在想迁移到官方 ",[24,117029,101124],{}," Python bindings。",[20,117032,117033],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[15,117035,117037],{"id":117036},"mujoco-到底是什么","MuJoCo 到底是什么",[20,117039,117040],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[32,117042,117045],{"className":117043,"code":117044,"language":5325,"meta":37},[5323],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[24,117046,117044],{"__ignoreMap":37},[20,117048,117049],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[224,117051,117052,117055,117058,117061],{},[227,117053,117054],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[227,117056,117057],{},"快速测试控制算法，不必一开始就上真实机器人。",[227,117059,117060],{},"生成强化学习环境。",[227,117062,117063],{},"采集状态、动作、图像、奖励等训练数据。",[15,117065,117066],{"id":117066},"学习前的心智模型",[20,117068,117069],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[411,117071,117072,117084],{},[414,117073,117074],{},[417,117075,117076,117079,117082],{},[420,117077,117078],{"align":23874},"部分",[420,117080,117081],{"align":23874},"负责什么",[420,117083,21325],{"align":23874},[458,117085,117086,117097,117109,117121,117133],{},[417,117087,117088,117091,117094],{},[463,117089,117090],{"align":23874},"MJCF XML",[463,117092,117093],{"align":23874},"定义世界和机器人结构",[463,117095,117096],{"align":23874},"地面、盒子、关节、电机、摄像头",[417,117098,117099,117103,117106],{},[463,117100,117101],{"align":23874},[24,117102,100812],{},[463,117104,117105],{"align":23874},"编译后的静态模型",[463,117107,117108],{"align":23874},"有几个关节、有几个电机、时间步长是多少",[417,117110,117111,117115,117118],{},[463,117112,117113],{"align":23874},[24,117114,100822],{},[463,117116,117117],{"align":23874},"运行中的动态状态",[463,117119,117120],{"align":23874},"当前时间、位置、速度、电机输入",[417,117122,117123,117127,117130],{},[463,117124,117125],{"align":23874},[24,117126,101318],{},[463,117128,117129],{"align":23874},"推进一步物理仿真",[463,117131,117132],{"align":23874},"根据重力、力、碰撞更新状态",[417,117134,117135,117138,117141],{},[463,117136,117137],{"align":23874},"Viewer \u002F Renderer",[463,117139,117140],{"align":23874},"把仿真显示出来",[463,117142,117143],{"align":23874},"打开窗口或保存图片",[20,117145,117146],{},"一句话总结：",[32,117148,117151],{"className":117149,"code":117150,"language":5325,"meta":37},[5323],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[24,117152,117150],{"__ignoreMap":37},[20,117154,117155],{},"参考来源：",[1280,117157,117158,117165,117172],{},[227,117159,117160,117161],{},"MuJoCo Python 官方文档：",[511,117162,117163],{"href":117163,"rel":117164},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24001],[227,117166,117167,117168],{},"MuJoCo XML Reference：",[511,117169,117170],{"href":117170,"rel":117171},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24001],[227,117173,117174,117175],{},"MuJoCo Overview：",[511,117176,117177],{"href":117177,"rel":117178},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24001],[15,117180,117181],{"id":117181},"章节目录",[224,117183,117184,117190,117196,117202,117208,117214,117220,117226],{},[227,117185,117186],{},[511,117187,117189],{"href":117188},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[227,117191,117192],{},[511,117193,117195],{"href":117194},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[227,117197,117198],{},[511,117199,117201],{"href":117200},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[227,117203,117204],{},[511,117205,117207],{"href":117206},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[227,117209,117210],{},[511,117211,117213],{"href":117212},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[227,117215,117216],{},[511,117217,117219],{"href":117218},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[227,117221,117222],{},[511,117223,117225],{"href":117224},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[227,117227,117228],{},[511,117229,117231],{"href":117230},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[15,117233,117234],{"id":117234},"推荐学习路线",[32,117236,117239],{"className":117237,"code":117238,"language":5325,"meta":37},[5323],"环境安装\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",[24,117240,117238],{"__ignoreMap":37},[20,117242,117243],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[15,117245,117246],{"id":117246},"建议的目录结构",[20,117248,117249],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[32,117251,117253],{"className":34,"code":117252,"language":36,"meta":37,"style":37},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[24,117254,117255,117263],{"__ignoreMap":37},[41,117256,117257,117259,117261],{"class":43,"line":44},[41,117258,101369],{"class":54},[41,117260,29319],{"class":58},[41,117262,101374],{"class":378},[41,117264,117265,117267],{"class":43,"line":51},[41,117266,101379],{"class":58},[41,117268,101374],{"class":378},[20,117270,117271],{},"每一章的代码都单独保存：",[32,117273,117276],{"className":117274,"code":117275,"language":5325,"meta":37},[5323],"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",[24,117277,117275],{"__ignoreMap":37},[20,117279,117280],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[15,117282,117283],{"id":117283},"学习方法",[20,117285,117286],{},"每章建议按这个顺序操作：",[224,117288,117289,117292,117295,117298,117301,117304],{},[227,117290,117291],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[227,117293,117294],{},"复制最小可运行代码，保存成指定文件。",[227,117296,117297],{},"运行代码，确认没有报错。",[227,117299,117300],{},"对照“运行结果说明”理解输出。",[227,117302,117303],{},"做“验证步骤”，主动改一两个参数。",[227,117305,117306],{},"遇到报错先看“常见错误与解决方案”。",[20,117308,117309],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[15,117311,117312],{"id":117312},"全局排错顺序",[20,117314,117315],{},"遇到问题时，按下面顺序查：",[224,117317,117318,117324,117330,117335,117338,117341,117348,117358],{},[227,117319,117320,117321],{},"Python 环境是否激活：",[24,117322,117323],{},"which python",[227,117325,117326,117327],{},"MuJoCo 是否能导入：",[24,117328,117329],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[227,117331,117332,117333],{},"是否误装了 ",[24,117334,101115],{},[227,117336,117337],{},"XML 标签是否闭合、属性是否拼写正确",[227,117339,117340],{},"actuator 引用的 joint 名字是否存在",[227,117342,117343,117345,117346],{},[24,117344,101179],{}," 的长度是否等于 ",[24,117347,102261],{},[227,117349,105688,117350,82642,117352,117354,117355],{},[24,117351,104133],{},[24,117353,104463],{}," 后是否调用了 ",[24,117356,117357],{},"mujoco.mj_forward",[227,117359,117360],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[189,117362,117363],{},"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":37,"searchDepth":51,"depth":51,"links":117365},[117366,117367,117368,117369,117370,117371,117372,117373],{"id":117007,"depth":51,"text":117007},{"id":117036,"depth":51,"text":117037},{"id":117066,"depth":51,"text":117066},{"id":117181,"depth":51,"text":117181},{"id":117234,"depth":51,"text":117234},{"id":117246,"depth":51,"text":117246},{"id":117283,"depth":51,"text":117283},{"id":117312,"depth":51,"text":117312},"仿真搭建。",{"category":23516},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116950,"description":117374},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117381,"title":117382,"body":117383,"description":196,"extension":197,"meta":117838,"navigation":79,"path":117839,"seo":117840,"stem":117841,"__hash__":117842},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117384,"toc":117836},[117385,117388,117391,117397,117833],[10,117386,117382],{"id":117387},"_1-最常用的基本操作更新",[20,117389,117390],{},"装linux系统教程：",[20,117392,117393],{},[511,117394,117395],{"href":117395,"rel":117396},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24001],[32,117398,117402],{"className":117399,"code":117400,"language":117401,"meta":37,"style":37},"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",[24,117403,117404,117409,117414,117423,117428,117437,117442,117462,117467,117478,117483,117492,117497,117525,117530,117549,117554,117573,117577,117582,117598,117602,117607,117637,117641,117646,117662,117666,117671,117686,117690,117695,117711,117715,117720,117732,117744,117748,117753,117770,117774,117779,117797,117801,117806,117815,117819,117824],{"__ignoreMap":37},[41,117405,117406],{"class":43,"line":44},[41,117407,117408],{"class":47},"#更新相关的知识\n",[41,117410,117411],{"class":43,"line":51},[41,117412,117413],{"class":47},"# 更新软件包列表（从服务器获取最新软件信息）\n",[41,117415,117416,117418,117421],{"class":43,"line":62},[41,117417,24713],{"class":54},[41,117419,117420],{"class":378}," apt",[41,117422,26345],{"class":378},[41,117424,117425],{"class":43,"line":70},[41,117426,117427],{"class":47},"# 升级所有可更新的软件包（不删除旧包）\n",[41,117429,117430,117432,117434],{"class":43,"line":76},[41,117431,24713],{"class":54},[41,117433,117420],{"class":378},[41,117435,117436],{"class":378}," upgrade\n",[41,117438,117439],{"class":43,"line":83},[41,117440,117441],{"class":47},"#更新和升级软件包\n",[41,117443,117444,117446,117448,117451,117453,117455,117457,117460],{"class":43,"line":89},[41,117445,24713],{"class":54},[41,117447,117420],{"class":378},[41,117449,117450],{"class":378}," update",[41,117452,26293],{"class":275},[41,117454,24713],{"class":54},[41,117456,117420],{"class":378},[41,117458,117459],{"class":378}," upgrade",[41,117461,101084],{"class":58},[41,117463,117464],{"class":43,"line":96},[41,117465,117466],{"class":47},"#列出可更新的软件包及版本信息\n",[41,117468,117469,117472,117475],{"class":43,"line":104},[41,117470,117471],{"class":54},"apt",[41,117473,117474],{"class":378}," list",[41,117476,117477],{"class":58}," --upgradable\n",[41,117479,117480],{"class":43,"line":176},[41,117481,117482],{"class":47},"#彻底升级（处理依赖关系，可能删除旧包）\n",[41,117484,117485,117487,117489],{"class":43,"line":184},[41,117486,24713],{"class":54},[41,117488,117420],{"class":378},[41,117490,117491],{"class":378}," full-upgrade\n",[41,117493,117494],{"class":43,"line":1757},[41,117495,117496],{"class":47},"#设置指定版本\n",[41,117498,117499,117501,117503,117505,117507,117510,117512,117514,117516,117518,117521,117523],{"class":43,"line":1763},[41,117500,24713],{"class":54},[41,117502,117420],{"class":378},[41,117504,23970],{"class":378},[41,117506,29005],{"class":271},[41,117508,117509],{"class":378},"package_nam",[41,117511,348],{"class":275},[41,117513,1233],{"class":271},[41,117515,321],{"class":378},[41,117517,1183],{"class":271},[41,117519,117520],{"class":378},"version_numbe",[41,117522,943],{"class":275},[41,117524,51410],{"class":271},[41,117526,117527],{"class":43,"line":1768},[41,117528,117529],{"class":47},"#只安装软件包不升级\n",[41,117531,117532,117534,117536,117538,117540,117542,117544,117546],{"class":43,"line":1782},[41,117533,24713],{"class":54},[41,117535,117420],{"class":378},[41,117537,23970],{"class":378},[41,117539,29005],{"class":271},[41,117541,117509],{"class":378},[41,117543,348],{"class":275},[41,117545,1233],{"class":271},[41,117547,117548],{"class":58}," --no-upgrade\n",[41,117550,117551],{"class":43,"line":1787},[41,117552,117553],{"class":47},"#只升级，不存在就不安装\n",[41,117555,117556,117558,117560,117562,117564,117566,117568,117570],{"class":43,"line":1793},[41,117557,24713],{"class":54},[41,117559,117420],{"class":378},[41,117561,23970],{"class":378},[41,117563,29005],{"class":271},[41,117565,117509],{"class":378},[41,117567,348],{"class":275},[41,117569,1233],{"class":271},[41,117571,117572],{"class":58}," --only-upgrade\n",[41,117574,117575],{"class":43,"line":1814},[41,117576,80],{"emptyLinePlaceholder":79},[41,117578,117579],{"class":43,"line":1819},[41,117580,117581],{"class":47},"#安装指定的软件命令\n",[41,117583,117584,117586,117588,117590,117592,117594,117596],{"class":43,"line":1833},[41,117585,24713],{"class":54},[41,117587,117420],{"class":378},[41,117589,23970],{"class":378},[41,117591,29005],{"class":271},[41,117593,117509],{"class":378},[41,117595,348],{"class":275},[41,117597,51410],{"class":271},[41,117599,117600],{"class":43,"line":1838},[41,117601,80],{"emptyLinePlaceholder":79},[41,117603,117604],{"class":43,"line":1867},[41,117605,117606],{"class":47},"#安装多个软件包\n",[41,117608,117609,117611,117613,117615,117617,117620,117623,117625,117627,117630,117632,117634],{"class":43,"line":1872},[41,117610,24713],{"class":54},[41,117612,117420],{"class":378},[41,117614,23970],{"class":378},[41,117616,29005],{"class":271},[41,117618,117619],{"class":378},"package_",[41,117621,117622],{"class":271},"1>",[41,117624,29005],{"class":271},[41,117626,117619],{"class":378},[41,117628,117629],{"class":271},"2>",[41,117631,29005],{"class":271},[41,117633,117619],{"class":378},[41,117635,117636],{"class":271},"3>\n",[41,117638,117639],{"class":43,"line":1889},[41,117640,80],{"emptyLinePlaceholder":79},[41,117642,117643],{"class":43,"line":1894},[41,117644,117645],{"class":47},"#更新指定的软件命令\n",[41,117647,117648,117650,117652,117654,117656,117658,117660],{"class":43,"line":1899},[41,117649,24713],{"class":54},[41,117651,117420],{"class":378},[41,117653,117450],{"class":378},[41,117655,29005],{"class":271},[41,117657,117509],{"class":378},[41,117659,348],{"class":275},[41,117661,51410],{"class":271},[41,117663,117664],{"class":43,"line":1904},[41,117665,80],{"emptyLinePlaceholder":79},[41,117667,117668],{"class":43,"line":1918},[41,117669,117670],{"class":47},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[41,117672,117673,117675,117678,117680,117682,117684],{"class":43,"line":1923},[41,117674,117471],{"class":54},[41,117676,117677],{"class":378}," show",[41,117679,29005],{"class":271},[41,117681,117509],{"class":378},[41,117683,348],{"class":275},[41,117685,51410],{"class":271},[41,117687,117688],{"class":43,"line":2715},[41,117689,80],{"emptyLinePlaceholder":79},[41,117691,117692],{"class":43,"line":2729},[41,117693,117694],{"class":47},"#删除软件包命令\n",[41,117696,117697,117699,117701,117703,117705,117707,117709],{"class":43,"line":2737},[41,117698,24713],{"class":54},[41,117700,117420],{"class":378},[41,117702,26182],{"class":378},[41,117704,29005],{"class":271},[41,117706,117509],{"class":378},[41,117708,348],{"class":275},[41,117710,51410],{"class":271},[41,117712,117713],{"class":43,"line":2742},[41,117714,80],{"emptyLinePlaceholder":79},[41,117716,117717],{"class":43,"line":2748},[41,117718,117719],{"class":47},"# 清理旧版本和缓存（释放磁盘空间）\n",[41,117721,117722,117724,117726,117729],{"class":43,"line":2754},[41,117723,24713],{"class":54},[41,117725,117420],{"class":378},[41,117727,117728],{"class":378}," autoremove",[41,117730,117731],{"class":47},"  # 删除不再需要的依赖和库文件\n",[41,117733,117734,117736,117738,117741],{"class":43,"line":2759},[41,117735,24713],{"class":54},[41,117737,117420],{"class":378},[41,117739,117740],{"class":378}," clean",[41,117742,117743],{"class":47},"       # 清理下载的缓存包\n",[41,117745,117746],{"class":43,"line":8086},[41,117747,80],{"emptyLinePlaceholder":79},[41,117749,117750],{"class":43,"line":8110},[41,117751,117752],{"class":47},"#移除软件包及配置文件\n",[41,117754,117755,117757,117759,117762,117764,117766,117768],{"class":43,"line":8115},[41,117756,24713],{"class":54},[41,117758,117420],{"class":378},[41,117760,117761],{"class":378}," purge",[41,117763,29005],{"class":271},[41,117765,117509],{"class":378},[41,117767,348],{"class":275},[41,117769,51410],{"class":271},[41,117771,117772],{"class":43,"line":8121},[41,117773,80],{"emptyLinePlaceholder":79},[41,117775,117776],{"class":43,"line":8148},[41,117777,117778],{"class":47},"#查找软件包命令\n",[41,117780,117781,117783,117785,117788,117790,117793,117795],{"class":43,"line":8153},[41,117782,24713],{"class":54},[41,117784,117420],{"class":378},[41,117786,117787],{"class":378}," search",[41,117789,29005],{"class":271},[41,117791,117792],{"class":378},"keywor",[41,117794,587],{"class":275},[41,117796,51410],{"class":271},[41,117798,117799],{"class":43,"line":8159},[41,117800,80],{"emptyLinePlaceholder":79},[41,117802,117803],{"class":43,"line":8171},[41,117804,117805],{"class":47},"#列出所有已安装的包\n",[41,117807,117808,117810,117812],{"class":43,"line":8183},[41,117809,117471],{"class":54},[41,117811,117474],{"class":378},[41,117813,117814],{"class":58}," --installed\n",[41,117816,117817],{"class":43,"line":8195},[41,117818,80],{"emptyLinePlaceholder":79},[41,117820,117821],{"class":43,"line":9854},[41,117822,117823],{"class":47},"#列出所有已安装的包的版本信息\n",[41,117825,117826,117828,117830],{"class":43,"line":9879},[41,117827,117471],{"class":54},[41,117829,117474],{"class":378},[41,117831,117832],{"class":58}," --all-versions\n",[189,117834,117835],{},"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":37,"searchDepth":51,"depth":51,"links":117837},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117382,"description":196},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117844,"title":117845,"body":117846,"description":196,"extension":197,"meta":118587,"navigation":79,"path":118588,"seo":118589,"stem":118590,"__hash__":118591},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117847,"toc":118574},[117848,117851,117855,117858,117864,117868,117872,117878,117883,117888,117893,117898,117903,117906,117909,117912,117915,117919,117922,117927,117930,117935,117938,117943,117950,117953,117956,117959,117962,117965,117976,117980,117984,117989,117994,117998,118003,118007,118012,118016,118020,118025,118028,118073,118078,118082,118086,118091,118097,118102,118112,118117,118127,118132,118137,118164,118168,118171,118176,118179,118204,118208,118213,118216,118221,118226,118246,118251,118254,118269,118273,118326,118329,118334,118338,118341,118356,118359,118362,118367,118371,118375,118378,118382,118386,118389,118394,118399,118403,118410,118418,118421,118428,118433,118438,118441,118446,118453,118458,118465,118469,118471,118476,118480,118483,118486,118491,118494,118499,118502,118507,118512,118517,118521,118526,118530,118571],[10,117849,117845],{"id":117850},"_2-linux装机教程",[15,117852,117854],{"id":117853},"_21-实体机","2.1 实体机",[20,117856,117857],{},"使用清华源：（Ubuntu24.04）",[20,117859,117860],{},[511,117861,117862],{"href":117862,"rel":117863},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24001],[15,117865,117867],{"id":117866},"_22-普通虚拟机","2.2 普通虚拟机",[241,117869,117871],{"id":117870},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[20,117873,117874],{},[511,117875,117876],{"href":117876,"rel":117877},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24001],[20,117879,117880],{},[1603,117881],{"alt":37,"src":117882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[20,117884,117885],{},[1603,117886],{"alt":37,"src":117887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[20,117889,117890],{},[1603,117891],{"alt":37,"src":117892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[20,117894,117895],{},[1603,117896],{"alt":37,"src":117897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[20,117899,117900],{},[1603,117901],{"alt":37,"src":117902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[20,117904,117905],{},"内存4G（4096MB）；",[20,117907,117908],{},"CPU给4个核；",[20,117910,117911],{},"硬盘动态分配60G；",[20,117913,117914],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[241,117916,117918],{"id":117917},"_222-安装ubuntu","2.2.2 安装Ubuntu",[20,117920,117921],{},"按照1.1的步骤下载Ubuntu",[20,117923,117924],{},[1603,117925],{"alt":37,"src":117926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[20,117928,117929],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[20,117931,117932],{},[1603,117933],{"alt":37,"src":117934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[20,117936,117937],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[20,117939,117940],{},[1603,117941],{"alt":37,"src":117942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[20,117944,117945,117946,117949],{},"选择“正常安装”(找不到都用Alt+F7)， ",[423,117947,117948],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[20,117951,117952],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[20,117954,117955],{},"将改动写入磁盘吗 继续",[20,117957,117958],{},"选择东八区（shanghai，大致在地图上点一下），继续",[20,117960,117961],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[20,117963,117964],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[20,117966,117967,117968,117971,117972,117975],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[423,117969,117970],{},"除了"," 选不发送系统信息与不升级之外， ",[423,117973,117974],{},"其它"," 都跳过或前进）",[241,117977,117979],{"id":117978},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22136,117981,117983],{"id":117982},"_2231-全屏","2.2.3.1 全屏",[20,117985,117986],{},[1603,117987],{"alt":37,"src":117988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[20,117990,117991],{},[1603,117992],{"alt":37,"src":117993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22136,117995,117997],{"id":117996},"_2232-文件交换","2.2.3.2 文件交换",[20,117999,118000],{},[1603,118001],{"alt":37,"src":118002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22136,118004,118006],{"id":118005},"_2233-新建文本文档","2.2.3.3 新建文本文档",[20,118008,118009],{},[1603,118010],{"alt":37,"src":118011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[15,118013,118015],{"id":118014},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[241,118017,118019],{"id":118018},"_231-简介与优缺点","2.3.1 简介与优缺点",[224,118021,118022],{},[227,118023,118024],{},"什么情况下推荐？",[20,118026,118027],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[224,118029,118030],{"start":51},[227,118031,118032,118033],{},"优缺点：",[224,118034,118035,118065],{},[227,118036,118037,118038],{},"优点：",[224,118039,118040,118043,118050,118053,118056,118059,118062],{},[227,118041,118042],{},"WSL2是最好的Linux发行版;(bushi)",[227,118044,118045,118046,118049],{},"性能损耗极低。且比在Windows上跑深度性能 ",[423,118047,118048],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[227,118051,118052],{},"非常方便调用USB设备，可以USB直通;",[227,118054,118055],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[227,118057,118058],{},"非常方便Win与WSL2互相传文件等协同操作;",[227,118060,118061],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[227,118063,118064],{},"非常方便使用Windows的VScode远程开发;",[227,118066,118067,118068],{},"缺点：",[224,118069,118070],{},[227,118071,118072],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[20,118074,118075],{},[1603,118076],{"alt":37,"src":118077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[241,118079,118081],{"id":118080},"_232-安装教程","2.3.2 安装教程",[22136,118083,118085],{"id":118084},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[224,118087,118088],{},[227,118089,118090],{},"方法一(图形界面)",[20,118092,118093,118094,24755],{},"用Win+R输入",[24,118095,118096],{},"appwiz.cpl",[20,118098,118099],{},[1603,118100],{"alt":37,"src":118101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[20,118103,118104,118105,118108,118109,26576],{},"点击OK进入 ",[423,118106,118107],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[423,118110,118111],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[20,118113,118114],{},[1603,118115],{"alt":37,"src":118116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[20,118118,118119,118120,101121,118123,118126],{},"选择 ",[423,118121,118122],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[423,118124,118125],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[20,118128,118129],{},[1603,118130],{"alt":37,"src":118131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[224,118133,118134],{"start":51},[227,118135,118136],{},"方法二(命令行)",[32,118138,118142],{"className":118139,"code":118140,"language":118141,"meta":37,"style":37},"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",[24,118143,118144,118149,118154,118159],{"__ignoreMap":37},[41,118145,118146],{"class":43,"line":44},[41,118147,118148],{},"# 开启 Linux 子系统\n",[41,118150,118151],{"class":43,"line":51},[41,118152,118153],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[41,118155,118156],{"class":43,"line":62},[41,118157,118158],{},"# 开启虚拟机平台\n",[41,118160,118161],{"class":43,"line":70},[41,118162,118163],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22136,118165,118167],{"id":118166},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[20,118169,118170],{},"用管理员权限打开powershell",[20,118172,118173],{},[1603,118174],{"alt":37,"src":118175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[20,118177,118178],{},"升级WSL并设置默认版本为WSL2",[32,118180,118182],{"className":118139,"code":118181,"language":118141,"meta":37,"style":37},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[24,118183,118184,118189,118194,118199],{"__ignoreMap":37},[41,118185,118186],{"class":43,"line":44},[41,118187,118188],{},"# 更新 wsl\n",[41,118190,118191],{"class":43,"line":51},[41,118192,118193],{},"wsl --update\n",[41,118195,118196],{"class":43,"line":62},[41,118197,118198],{},"# 将 wsl 版本设置为 wsl2\n",[41,118200,118201],{"class":43,"line":70},[41,118202,118203],{},"wsl --set-default-version 2\n",[22136,118205,118207],{"id":118206},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[224,118209,118210],{},[227,118211,118212],{},"方式一(商店下载)",[20,118214,118215],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[20,118217,118218],{},[1603,118219],{"alt":37,"src":118220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[224,118222,118223],{"start":51},[227,118224,118225],{},"方式二(命令行安装)",[32,118227,118229],{"className":118139,"code":118228,"language":118141,"meta":37,"style":37},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[24,118230,118231,118236,118241],{"__ignoreMap":37},[41,118232,118233],{"class":43,"line":44},[41,118234,118235],{},"# 列出可安装的 Linux 版本\n",[41,118237,118238],{"class":43,"line":51},[41,118239,118240],{},"#（需要科学手段）\n",[41,118242,118243],{"class":43,"line":62},[41,118244,118245],{},"wsl --list --online\n",[20,118247,118248],{},[1603,118249],{"alt":37,"src":118250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[20,118252,118253],{},"选择对应发行版并安装",[32,118255,118257],{"className":118139,"code":118256,"language":118141,"meta":37,"style":37},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[24,118258,118259,118264],{"__ignoreMap":37},[41,118260,118261],{"class":43,"line":44},[41,118262,118263],{},"# Ubuntu安装完毕后需要重启系统\n",[41,118265,118266],{"class":43,"line":51},[41,118267,118268],{},"wsl --install -d Ubuntu-24.04\n",[22136,118270,118272],{"id":118271},"_2324-查看系统状态","2.3.2.4 查看系统状态",[32,118274,118276],{"className":118139,"code":118275,"language":118141,"meta":37,"style":37},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[24,118277,118278,118283,118288,118293,118298,118302,118306,118311,118316,118321],{"__ignoreMap":37},[41,118279,118280],{"class":43,"line":44},[41,118281,118282],{},"# 查看 wsl\n",[41,118284,118285],{"class":43,"line":51},[41,118286,118287],{},"wsl -l\n",[41,118289,118290],{"class":43,"line":62},[41,118291,118292],{},"# 查看 wsl 运行版本或模式\n",[41,118294,118295],{"class":43,"line":70},[41,118296,118297],{},"wsl -l -v\n",[41,118299,118300],{"class":43,"line":76},[41,118301,80],{"emptyLinePlaceholder":79},[41,118303,118304],{"class":43,"line":83},[41,118305,80],{"emptyLinePlaceholder":79},[41,118307,118308],{"class":43,"line":89},[41,118309,118310],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[41,118312,118313],{"class":43,"line":96},[41,118314,118315],{},"wsl --set-version \u003Cdistro> 2\n",[41,118317,118318],{"class":43,"line":104},[41,118319,118320],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[41,118322,118323],{"class":43,"line":176},[41,118324,118325],{},"wsl --unregister \u003Cdistro>\n",[20,118327,118328],{},"输出Version为2即正常",[20,118330,118331],{},[1603,118332],{"alt":37,"src":118333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22136,118335,118337],{"id":118336},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[20,118339,118340],{},"直接在Powershell里输入wsl命令进入子系统",[32,118342,118344],{"className":118139,"code":118343,"language":118141,"meta":37,"style":37},"# 进入子系统\nwsl\n",[24,118345,118346,118351],{"__ignoreMap":37},[41,118347,118348],{"class":43,"line":44},[41,118349,118350],{},"# 进入子系统\n",[41,118352,118353],{"class":43,"line":51},[41,118354,118355],{},"wsl\n",[20,118357,118358],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[20,118360,118361],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[20,118363,118364],{},[1603,118365],{"alt":37,"src":118366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[241,118368,118370],{"id":118369},"_233-配置各种环境","2.3.3 配置各种环境",[22136,118372,118374],{"id":118373},"_2331-换源","2.3.3.1 换源",[20,118376,118377],{},"(同实体机LINUX，往下找教程)",[22136,118379,118381],{"id":118380},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23048,118383,118385],{"id":118384},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[20,118387,118388],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[20,118390,118391],{},[1603,118392],{"alt":37,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[20,118395,118396],{},[1603,118397],{"alt":37,"src":118398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23048,118400,118402],{"id":118401},"_23322-cuda","2.3.3.2.2 CUDA",[20,118404,118405,118406],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[511,118407,118408],{"href":118408,"rel":118409},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24001],[20,118411,118412,118415],{},[1603,118413],{"alt":37,"src":118414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1603,118416],{"alt":37,"src":118417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[20,118419,118420],{},"在下方的网站，选择合适的版本。",[20,118422,118423,118424],{},"WSL2 专属 CUDA 指南：",[511,118425,118426],{"href":118426,"rel":118427},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24001],[20,118429,118430],{},[423,118431,118432],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[20,118434,118435],{},[1603,118436],{"alt":37,"src":118437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[20,118439,118440],{},"挨行敲一遍",[20,118442,118443],{},[1603,118444],{"alt":37,"src":118445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[20,118447,118448,118449,118452],{},"敲完后，输入",[24,118450,118451],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[20,118454,118455],{},[1603,118456],{"alt":37,"src":118457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[20,118459,118460,118461,118464],{},"（请详看下方教程的",[423,118462,118463],{},"安装CUDA的配置环境来看","如何配置环境）",[23048,118466,118468],{"id":118467},"_23323-cudnn","2.3.3.2.3 cuDNN",[20,118470,118377],{},[20,118472,118473],{},[1603,118474],{"alt":37,"src":118475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22136,118477,118479],{"id":118478},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[20,118481,118482],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[20,118484,118485],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[20,118487,118488],{},[1603,118489],{"alt":37,"src":118490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[20,118492,118493],{},"连接WSL2",[20,118495,118496],{},[1603,118497],{"alt":37,"src":118498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[20,118500,118501],{},"远程开发成功。",[20,118503,118504],{},[1603,118505],{"alt":37,"src":118506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[20,118508,118509],{},[1603,118510],{"alt":37,"src":118511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[20,118513,118514],{},[1603,118515],{"alt":37,"src":118516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22136,118518,118520],{"id":118519},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[20,118522,118523],{},[1603,118524],{"alt":37,"src":118525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22136,118527,118529],{"id":118528},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[32,118531,118533],{"className":117399,"code":118532,"language":117401,"meta":37,"style":37},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[24,118534,118535,118543,118551,118562,118566],{"__ignoreMap":37},[41,118536,118537,118539,118541],{"class":43,"line":44},[41,118538,24713],{"class":54},[41,118540,117420],{"class":378},[41,118542,26345],{"class":378},[41,118544,118545,118547,118549],{"class":43,"line":51},[41,118546,24713],{"class":54},[41,118548,117420],{"class":378},[41,118550,117436],{"class":378},[41,118552,118553,118555,118557,118559],{"class":43,"line":62},[41,118554,24713],{"class":54},[41,118556,117420],{"class":378},[41,118558,23970],{"class":378},[41,118560,118561],{"class":378}," mesa-utils\n",[41,118563,118564],{"class":43,"line":70},[41,118565,80],{"emptyLinePlaceholder":79},[41,118567,118568],{"class":43,"line":76},[41,118569,118570],{"class":47},"#然后重启wsl2即可\n",[189,118572,118573],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":37,"searchDepth":51,"depth":51,"links":118575},[118576,118577,118582],{"id":117853,"depth":51,"text":117854},{"id":117866,"depth":51,"text":117867,"children":118578},[118579,118580,118581],{"id":117870,"depth":62,"text":117871},{"id":117917,"depth":62,"text":117918},{"id":117978,"depth":62,"text":117979},{"id":118014,"depth":51,"text":118015,"children":118583},[118584,118585,118586],{"id":118018,"depth":62,"text":118019},{"id":118080,"depth":62,"text":118081},{"id":118369,"depth":62,"text":118370},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117845,"description":196},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118593,"title":118594,"body":118595,"description":196,"extension":197,"meta":121531,"navigation":79,"path":121532,"seo":121533,"stem":121534,"__hash__":121535},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118596,"toc":121503},[118597,118600,118604,118610,118614,118620,118624,118812,118815,118820,118824,118828,118831,118834,118840,118845,118848,118851,118856,118889,118894,118898,118975,118978,118983,118987,118990,119029,119032,119041,119059,119064,119071,119188,119193,119196,119223,119228,119232,119241,119291,119298,119302,119305,119319,119326,119360,119365,119369,119392,119395,119400,119404,119407,119410,119413,119455,119459,119462,119465,119506,119510,119514,119517,119522,119527,119530,119553,119556,119564,119569,119572,119577,119582,119585,119590,119594,119599,119622,119627,119689,119697,119702,119707,119710,119715,119718,119723,119728,119746,119751,119757,119762,119776,119780,119783,119786,119789,119832,119835,119840,119941,119944,119949,119953,119957,119994,119998,120002,120006,120052,120056,120101,120105,120112,120120,120175,120178,120255,120258,120281,120285,120288,120293,120298,120306,120309,120314,120319,120324,120327,120332,120341,120344,120349,120352,120423,120428,120431,120436,120439,120444,120447,120452,120455,120460,120465,120468,120543,120546,120559,120564,120567,120581,120584,120613,120618,120647,120650,120655,120659,120664,120673,120676,120681,120684,120689,120692,120695,120700,120703,120708,120713,120716,120721,120724,120849,120854,120884,120887,120892,120897,120914,120917,120960,120963,120990,120995,121008,121151,121155,121160,121174,121177,121228,121231,121261,121264,121280,121285,121299,121302,121369,121374,121383,121388,121391,121403,121408,121415,121439,121442,121447,121450,121469,121474,121481,121493,121500],[10,118598,118594],{"id":118599},"_3-安装必备配置",[15,118601,118603],{"id":118602},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[32,118605,118608],{"className":118606,"code":118607,"language":5325},[5323],"  打开下方网站（注意，该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",[24,118609,118607],{"__ignoreMap":37},[241,118611,118613],{"id":118612},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[32,118615,118618],{"className":118616,"code":118617,"language":5325},[5323],"  输入以下命令\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",[24,118619,118617],{"__ignoreMap":37},[241,118621,118623],{"id":118622},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[32,118625,118629],{"className":118626,"code":118627,"language":118628,"meta":37,"style":37},"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",[24,118630,118631,118639,118650,118662,118676,118680,118690,118695,118699,118703,118708,118712,118724,118728,118733,118737,118748,118752,118768,118772,118783,118787,118792,118796,118804],{"__ignoreMap":37},[41,118632,118633,118635,118637],{"class":43,"line":44},[41,118634,24713],{"class":54},[41,118636,117420],{"class":378},[41,118638,26345],{"class":378},[41,118640,118641,118643,118645,118647],{"class":43,"line":51},[41,118642,24713],{"class":54},[41,118644,117420],{"class":378},[41,118646,23970],{"class":378},[41,118648,118649],{"class":378}," vim\n",[41,118651,118652,118654,118657,118659],{"class":43,"line":62},[41,118653,24713],{"class":54},[41,118655,118656],{"class":378}," rm",[41,118658,25428],{"class":58},[41,118660,118661],{"class":378}," \u002Fetc\u002Fapt\u002Fsources.list\n",[41,118663,118664,118666,118668,118670,118673],{"class":43,"line":70},[41,118665,24713],{"class":54},[41,118667,118656],{"class":378},[41,118669,25428],{"class":58},[41,118671,118672],{"class":378}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[41,118674,118675],{"class":58},"**\n",[41,118677,118678],{"class":43,"line":76},[41,118679,80],{"emptyLinePlaceholder":79},[41,118681,118682,118684,118687],{"class":43,"line":83},[41,118683,24713],{"class":54},[41,118685,118686],{"class":378}," vim",[41,118688,118689],{"class":378}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[41,118691,118692],{"class":43,"line":89},[41,118693,118694],{"class":378},"```\n",[41,118696,118697],{"class":43,"line":96},[41,118698,80],{"emptyLinePlaceholder":79},[41,118700,118701],{"class":43,"line":104},[41,118702,80],{"emptyLinePlaceholder":79},[41,118704,118705],{"class":43,"line":176},[41,118706,118707],{"class":54},"选择好Ubuntu版本后，复制下方的内容。\n",[41,118709,118710],{"class":43,"line":184},[41,118711,80],{"emptyLinePlaceholder":79},[41,118713,118714,118716,118719,118722],{"class":43,"line":1757},[41,118715,499],{"class":271},[41,118717,118718],{"class":378},"[](",[41,118720,118721],{"class":54},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[41,118723,282],{"class":378},[41,118725,118726],{"class":43,"line":1763},[41,118727,80],{"emptyLinePlaceholder":79},[41,118729,118730],{"class":43,"line":1768},[41,118731,118732],{"class":54},"粘贴进去\n",[41,118734,118735],{"class":43,"line":1782},[41,118736,80],{"emptyLinePlaceholder":79},[41,118738,118739,118741,118743,118746],{"class":43,"line":1787},[41,118740,499],{"class":271},[41,118742,118718],{"class":378},[41,118744,118745],{"class":54},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[41,118747,282],{"class":378},[41,118749,118750],{"class":43,"line":1793},[41,118751,80],{"emptyLinePlaceholder":79},[41,118753,118754,118757,118760,118763,118765],{"class":43,"line":1814},[41,118755,118756],{"class":54},"按一下ESC，然后英文冒号，输入",[41,118758,118759],{"class":378}," `",[41,118761,118762],{"class":54},":wq!",[41,118764,1245],{"class":378},[41,118766,118767],{"class":54},"然后回车\n",[41,118769,118770],{"class":43,"line":1819},[41,118771,80],{"emptyLinePlaceholder":79},[41,118773,118774,118776,118778,118781],{"class":43,"line":1833},[41,118775,499],{"class":271},[41,118777,118718],{"class":378},[41,118779,118780],{"class":54},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[41,118782,282],{"class":378},[41,118784,118785],{"class":43,"line":1838},[41,118786,80],{"emptyLinePlaceholder":79},[41,118788,118789],{"class":43,"line":1867},[41,118790,118791],{"class":54},"输入以下命令\n",[41,118793,118794],{"class":43,"line":1872},[41,118795,80],{"emptyLinePlaceholder":79},[41,118797,118798,118801],{"class":43,"line":1889},[41,118799,118800],{"class":378},"```",[41,118802,118803],{"class":54},"Bash\n",[41,118805,118806,118808,118810],{"class":43,"line":1894},[41,118807,24713],{"class":54},[41,118809,117420],{"class":378},[41,118811,26345],{"class":378},[20,118813,118814],{},"这里被替换成对应学校则成功",[20,118816,118817],{},[1603,118818],{"alt":37,"src":118819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[15,118821,118823],{"id":118822},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[241,118825,118827],{"id":118826},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[20,118829,118830],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[20,118832,118833],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[20,118835,118836],{},[511,118837,118838],{"href":118838,"rel":118839},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24001],[20,118841,118842],{},[1603,118843],{"alt":37,"src":118844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[20,118846,118847],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[20,118849,118850],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[20,118852,118853],{},[1603,118854],{"alt":37,"src":118855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[32,118857,118859],{"className":117399,"code":118858,"language":117401,"meta":37,"style":37},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[24,118860,118861,118866,118873,118878],{"__ignoreMap":37},[41,118862,118863],{"class":43,"line":44},[41,118864,118865],{"class":47},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[41,118867,118868,118870],{"class":43,"line":51},[41,118869,101379],{"class":58},[41,118871,118872],{"class":378}," ~\u002FDownloads\n",[41,118874,118875],{"class":43,"line":62},[41,118876,118877],{"class":47},"#下方chrome安装包名不一定是这个，根据名字来看\n",[41,118879,118880,118882,118884,118886],{"class":43,"line":70},[41,118881,24713],{"class":54},[41,118883,117420],{"class":378},[41,118885,23970],{"class":378},[41,118887,118888],{"class":378}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[20,118890,118891],{},[1603,118892],{"alt":37,"src":118893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[241,118895,118897],{"id":118896},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[32,118899,118901],{"className":117399,"code":118900,"language":117401,"meta":37,"style":37},"# 老版\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",[24,118902,118903,118908,118916,118927,118932,118936,118941,118951,118959,118970],{"__ignoreMap":37},[41,118904,118905],{"class":43,"line":44},[41,118906,118907],{"class":47},"# 老版\n",[41,118909,118910,118912,118914],{"class":43,"line":51},[41,118911,24713],{"class":54},[41,118913,117420],{"class":378},[41,118915,26345],{"class":378},[41,118917,118918,118920,118922,118924],{"class":43,"line":62},[41,118919,24713],{"class":54},[41,118921,117420],{"class":378},[41,118923,23970],{"class":378},[41,118925,118926],{"class":378}," neofetch\n",[41,118928,118929],{"class":43,"line":70},[41,118930,118931],{"class":54},"neofetch\n",[41,118933,118934],{"class":43,"line":76},[41,118935,80],{"emptyLinePlaceholder":79},[41,118937,118938],{"class":43,"line":83},[41,118939,118940],{"class":47},"# 新版\n",[41,118942,118943,118945,118948],{"class":43,"line":89},[41,118944,24713],{"class":54},[41,118946,118947],{"class":378}," add-apt-repository",[41,118949,118950],{"class":378}," ppa:zhangsongcui3371\u002Ffastfetch\n",[41,118952,118953,118955,118957],{"class":43,"line":96},[41,118954,24713],{"class":54},[41,118956,117420],{"class":378},[41,118958,26345],{"class":378},[41,118960,118961,118963,118965,118967],{"class":43,"line":104},[41,118962,24713],{"class":54},[41,118964,117420],{"class":378},[41,118966,23970],{"class":378},[41,118968,118969],{"class":378}," fastfetch\n",[41,118971,118972],{"class":43,"line":176},[41,118973,118974],{"class":54},"fastfetch\n",[20,118976,118977],{},"这里显示，一共有3162个debian的程序，7个snap程序",[20,118979,118980],{},[1603,118981],{"alt":37,"src":118982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[241,118984,118986],{"id":118985},"_323-移除snap应用","3.2.3 移除snap应用",[20,118988,118989],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[32,118991,118993],{"className":117399,"code":118992,"language":117401,"meta":37,"style":37},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[24,118994,118995,119007,119018],{"__ignoreMap":37},[41,118996,118997,118999,119001,119004],{"class":43,"line":44},[41,118998,24713],{"class":54},[41,119000,26616],{"class":378},[41,119002,119003],{"class":378}," disable",[41,119005,119006],{"class":378}," snapd.service\n",[41,119008,119009,119011,119013,119015],{"class":43,"line":51},[41,119010,24713],{"class":54},[41,119012,26616],{"class":378},[41,119014,119003],{"class":378},[41,119016,119017],{"class":378}," snapd.socket\n",[41,119019,119020,119022,119024,119026],{"class":43,"line":62},[41,119021,24713],{"class":54},[41,119023,26616],{"class":378},[41,119025,119003],{"class":378},[41,119027,119028],{"class":378}," snapd.seeded.service\n",[20,119030,119031],{},"然后查看snap应用列表",[20,119033,119034,119035,119040],{},"根据你安装的选择不同（最小安装或普通安装），有",[511,119036,119039],{"href":119037,"rel":119038},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24001],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[32,119042,119044],{"className":117399,"code":119043,"language":117401,"meta":37,"style":37},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[24,119045,119046,119051],{"__ignoreMap":37},[41,119047,119048],{"class":43,"line":44},[41,119049,119050],{"class":47},"# 查询当前系统上snap安装了哪些app\n",[41,119052,119053,119056],{"class":43,"line":51},[41,119054,119055],{"class":54},"snap",[41,119057,119058],{"class":378}," list\n",[20,119060,119061],{},[1603,119062],{"alt":37,"src":119063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[20,119065,119066,119067,119070],{},"卸载掉图中所有应用，按照 ",[423,119068,119069],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[32,119072,119074],{"className":117399,"code":119073,"language":117401,"meta":37,"style":37},"#移除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",[24,119075,119076,119081,119093,119098,119109,119114,119125,119130,119141,119146,119150,119155,119166,119177],{"__ignoreMap":37},[41,119077,119078],{"class":43,"line":44},[41,119079,119080],{"class":47},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[41,119082,119083,119085,119088,119090],{"class":43,"line":51},[41,119084,24713],{"class":54},[41,119086,119087],{"class":378}," snap",[41,119089,26182],{"class":378},[41,119091,119092],{"class":378}," snap-store\n",[41,119094,119095],{"class":43,"line":62},[41,119096,119097],{"class":47},"#移除firefox浏览器\n",[41,119099,119100,119102,119104,119106],{"class":43,"line":70},[41,119101,24713],{"class":54},[41,119103,119087],{"class":378},[41,119105,26182],{"class":378},[41,119107,119108],{"class":378}," firefox\n",[41,119110,119111],{"class":43,"line":76},[41,119112,119113],{"class":47},"#移除gnome-42-2204\n",[41,119115,119116,119118,119120,119122],{"class":43,"line":83},[41,119117,24713],{"class":54},[41,119119,119087],{"class":378},[41,119121,26182],{"class":378},[41,119123,119124],{"class":378}," gnome-42-2204\n",[41,119126,119127],{"class":43,"line":89},[41,119128,119129],{"class":47},"#移除gtk-common-themes\n",[41,119131,119132,119134,119136,119138],{"class":43,"line":96},[41,119133,24713],{"class":54},[41,119135,119087],{"class":378},[41,119137,26182],{"class":378},[41,119139,119140],{"class":378}," gtk-common-themes\n",[41,119142,119143],{"class":43,"line":104},[41,119144,119145],{"class":47},"#移除其它...\n",[41,119147,119148],{"class":43,"line":176},[41,119149,2812],{"class":275},[41,119151,119152],{"class":43,"line":184},[41,119153,119154],{"class":47},"#移除core22,bare以及snapd\n",[41,119156,119157,119159,119161,119163],{"class":43,"line":1757},[41,119158,24713],{"class":54},[41,119160,119087],{"class":378},[41,119162,26182],{"class":378},[41,119164,119165],{"class":378}," core22\n",[41,119167,119168,119170,119172,119174],{"class":43,"line":1763},[41,119169,24713],{"class":54},[41,119171,119087],{"class":378},[41,119173,26182],{"class":378},[41,119175,119176],{"class":378}," bare\n",[41,119178,119179,119181,119183,119185],{"class":43,"line":1768},[41,119180,24713],{"class":54},[41,119182,119087],{"class":378},[41,119184,26182],{"class":378},[41,119186,119187],{"class":378}," snapd\n",[20,119189,119190],{},[1603,119191],{"alt":37,"src":119192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[20,119194,119195],{},"输入以下命令查看是否还有snap包",[32,119197,119199],{"className":117399,"code":119198,"language":117401,"meta":37,"style":37},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[24,119200,119201,119207,119211,119215,119219],{"__ignoreMap":37},[41,119202,119203,119205],{"class":43,"line":44},[41,119204,119055],{"class":54},[41,119206,119058],{"class":378},[41,119208,119209],{"class":43,"line":51},[41,119210,118907],{"class":47},[41,119212,119213],{"class":43,"line":62},[41,119214,118931],{"class":54},[41,119216,119217],{"class":43,"line":70},[41,119218,118940],{"class":47},[41,119220,119221],{"class":43,"line":76},[41,119222,118974],{"class":54},[20,119224,119225],{},[1603,119226],{"alt":37,"src":119227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[241,119229,119231],{"id":119230},"_324-移除snap","3.2.4 移除snap",[20,119233,119234,119235,119240],{},"在删除掉",[511,119236,119239],{"href":119237,"rel":119238},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24001],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[32,119242,119244],{"className":117399,"code":119243,"language":117401,"meta":37,"style":37}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[24,119245,119246,119251,119264,119269,119280],{"__ignoreMap":37},[41,119247,119248],{"class":43,"line":44},[41,119249,119250],{"class":47}," #使用apt移除掉snap\n",[41,119252,119253,119255,119257,119259,119262],{"class":43,"line":51},[41,119254,24713],{"class":54},[41,119256,117420],{"class":378},[41,119258,117728],{"class":378},[41,119260,119261],{"class":58}," --purge",[41,119263,119187],{"class":378},[41,119265,119266],{"class":43,"line":62},[41,119267,119268],{"class":47},"#移除snapd的一些目录\n",[41,119270,119271,119273,119275,119277],{"class":43,"line":70},[41,119272,24713],{"class":54},[41,119274,118656],{"class":378},[41,119276,25428],{"class":58},[41,119278,119279],{"class":378}," \u002Fvar\u002Fcache\u002Fsnapd\n",[41,119281,119282,119284,119286,119288],{"class":43,"line":76},[41,119283,24713],{"class":54},[41,119285,118656],{"class":378},[41,119287,25428],{"class":58},[41,119289,119290],{"class":378}," ~\u002Fsnap\n",[20,119292,119293,119294,119297],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[24,119295,119296],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[241,119299,119301],{"id":119300},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[20,119303,119304],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[32,119306,119308],{"className":117399,"code":119307,"language":117401,"meta":37,"style":37},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[24,119309,119310],{"__ignoreMap":37},[41,119311,119312,119314,119316],{"class":43,"line":44},[41,119313,24713],{"class":54},[41,119315,118686],{"class":378},[41,119317,119318],{"class":378}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[20,119320,119321,119322,119325],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[24,119323,119324],{},":wq"," 回车",[32,119327,119329],{"className":117399,"code":119328,"language":117401,"meta":37,"style":37},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[24,119330,119331,119338,119352],{"__ignoreMap":37},[41,119332,119333,119336],{"class":43,"line":44},[41,119334,119335],{"class":54},"Package:",[41,119337,119187],{"class":378},[41,119339,119340,119343,119346,119349],{"class":43,"line":51},[41,119341,119342],{"class":54},"Pin:",[41,119344,119345],{"class":378}," release",[41,119347,119348],{"class":378}," a=",[41,119350,119351],{"class":58},"*\n",[41,119353,119354,119357],{"class":43,"line":62},[41,119355,119356],{"class":54},"Pin-Priority:",[41,119358,119359],{"class":58}," -10\n",[20,119361,119362],{},[1603,119363],{"alt":37,"src":119364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[241,119366,119368],{"id":119367},"_326-测试是否成功","3.2.6 测试是否成功",[32,119370,119372],{"className":117399,"code":119371,"language":117401,"meta":37,"style":37},"sudo apt update\nsudo apt install firefox\n",[24,119373,119374,119382],{"__ignoreMap":37},[41,119375,119376,119378,119380],{"class":43,"line":44},[41,119377,24713],{"class":54},[41,119379,117420],{"class":378},[41,119381,26345],{"class":378},[41,119383,119384,119386,119388,119390],{"class":43,"line":51},[41,119385,24713],{"class":54},[41,119387,117420],{"class":378},[41,119389,23970],{"class":378},[41,119391,119108],{"class":378},[20,119393,119394],{},"这里提示snapd无法被安装，就证明成功了",[20,119396,119397],{},[1603,119398],{"alt":37,"src":119399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[241,119401,119403],{"id":119402},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[20,119405,119406],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[20,119408,119409],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[20,119411,119412],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[32,119414,119416],{"className":117399,"code":119415,"language":117401,"meta":37,"style":37},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[24,119417,119418,119423,119432,119437,119445],{"__ignoreMap":37},[41,119419,119420],{"class":43,"line":44},[41,119421,119422],{"class":47},"# 添加Mozilla提供的源\n",[41,119424,119425,119427,119429],{"class":43,"line":51},[41,119426,24713],{"class":54},[41,119428,118947],{"class":378},[41,119430,119431],{"class":378}," ppa:mozillateam\u002Fppa\n",[41,119433,119434],{"class":43,"line":62},[41,119435,119436],{"class":47},"# 安装Firefox\n",[41,119438,119439,119441,119443],{"class":43,"line":70},[41,119440,24713],{"class":54},[41,119442,117420],{"class":378},[41,119444,26345],{"class":378},[41,119446,119447,119449,119451,119453],{"class":43,"line":76},[41,119448,24713],{"class":54},[41,119450,117420],{"class":378},[41,119452,23970],{"class":378},[41,119454,119108],{"class":378},[241,119456,119458],{"id":119457},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[20,119460,119461],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[20,119463,119464],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[32,119466,119468],{"className":117399,"code":119467,"language":117401,"meta":37,"style":37},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[24,119469,119470,119475,119485,119493,119497],{"__ignoreMap":37},[41,119471,119472],{"class":43,"line":44},[41,119473,119474],{"class":47},"#删掉禁止安装snap的配置文件\n",[41,119476,119477,119479,119481,119483],{"class":43,"line":51},[41,119478,24713],{"class":54},[41,119480,118656],{"class":378},[41,119482,25428],{"class":58},[41,119484,119318],{"class":378},[41,119486,119487,119489,119491],{"class":43,"line":62},[41,119488,24713],{"class":54},[41,119490,117420],{"class":378},[41,119492,26345],{"class":378},[41,119494,119495],{"class":43,"line":70},[41,119496,80],{"emptyLinePlaceholder":79},[41,119498,119499,119501,119503],{"class":43,"line":76},[41,119500,24713],{"class":54},[41,119502,117420],{"class":378},[41,119504,119505],{"class":378}," dist-update\n",[15,119507,119509],{"id":119508},"_33-中文输入法","3.3 中文输入法",[241,119511,119513],{"id":119512},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[20,119515,119516],{},"官网下载搜狗输入法",[20,119518,119519],{},[1603,119520],{"alt":37,"src":119521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[20,119523,119524],{},[1603,119525],{"alt":37,"src":119526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[20,119528,119529],{},"打开终端输入如下",[32,119531,119533],{"className":117399,"code":119532,"language":117401,"meta":37,"style":37},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[24,119534,119535,119542],{"__ignoreMap":37},[41,119536,119537,119539],{"class":43,"line":44},[41,119538,101379],{"class":58},[41,119540,119541],{"class":378}," ~\u002FDownloads\u002F\n",[41,119543,119544,119546,119548,119550],{"class":43,"line":51},[41,119545,24713],{"class":54},[41,119547,117420],{"class":378},[41,119549,23970],{"class":378},[41,119551,119552],{"class":378}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[20,119554,119555],{},"打开Fcitx",[20,119557,119558,119561],{},[1603,119559],{"alt":37,"src":119560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1603,119562],{"alt":37,"src":119563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[20,119565,119566],{},[1603,119567],{"alt":37,"src":119568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[20,119570,119571],{},"添加搜狗输入法",[20,119573,119574],{},[1603,119575],{"alt":37,"src":119576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[20,119578,119579],{},[1603,119580],{"alt":37,"src":119581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[20,119583,119584],{},"将搜狗输入法设置为唯一输入法",[20,119586,119587],{},[1603,119588],{"alt":37,"src":119589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[241,119591,119593],{"id":119592},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[224,119595,119596],{},[227,119597,119598],{},"卸载旧输入法",[32,119600,119602],{"className":118626,"code":119601,"language":118628,"meta":37,"style":37},"sudo apt purge fcitx* ibus*\n",[24,119603,119604],{"__ignoreMap":37},[41,119605,119606,119608,119610,119612,119615,119617,119620],{"class":43,"line":44},[41,119607,24713],{"class":54},[41,119609,117420],{"class":378},[41,119611,117761],{"class":378},[41,119613,119614],{"class":378}," fcitx",[41,119616,728],{"class":58},[41,119618,119619],{"class":378}," ibus",[41,119621,119351],{"class":58},[224,119623,119624],{"start":51},[227,119625,119626],{},"安装Fcitx5",[32,119628,119630],{"className":117399,"code":119629,"language":117401,"meta":37,"style":37},"# 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",[24,119631,119632,119637,119651,119655,119660,119669,119677],{"__ignoreMap":37},[41,119633,119634],{"class":43,"line":44},[41,119635,119636],{"class":47},"# Ubuntu22.04及以上、Debian12及以上\n",[41,119638,119639,119641,119643,119645,119648],{"class":43,"line":51},[41,119640,24713],{"class":54},[41,119642,117420],{"class":378},[41,119644,23970],{"class":378},[41,119646,119647],{"class":378}," fcitx5",[41,119649,119650],{"class":378}," fcitx5-chinese-addons\n",[41,119652,119653],{"class":43,"line":62},[41,119654,80],{"emptyLinePlaceholder":79},[41,119656,119657],{"class":43,"line":70},[41,119658,119659],{"class":47},"# Ubuntu20.04\n",[41,119661,119662,119664,119666],{"class":43,"line":76},[41,119663,24713],{"class":54},[41,119665,118947],{"class":378},[41,119667,119668],{"class":378}," ppa:zhsj\u002Ffcitx5\n",[41,119670,119671,119673,119675],{"class":43,"line":83},[41,119672,24713],{"class":54},[41,119674,117420],{"class":378},[41,119676,26345],{"class":378},[41,119678,119679,119681,119683,119685,119687],{"class":43,"line":89},[41,119680,24713],{"class":54},[41,119682,117420],{"class":378},[41,119684,23970],{"class":378},[41,119686,119647],{"class":378},[41,119688,119650],{"class":378},[224,119690,119691,119694],{"start":62},[227,119692,119693],{},"Reboot System",[227,119695,119696],{},"启动Fcitx5",[20,119698,119699],{},[1603,119700],{"alt":37,"src":119701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[224,119703,119704],{"start":76},[227,119705,119706],{},"修改一些设置",[20,119708,119709],{},"将Pinyin和Keyboard - English US加入到左边。",[20,119711,119712],{},[1603,119713],{"alt":37,"src":119714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[20,119716,119717],{},"添加快捷键以便于更好切换中英文",[20,119719,119720],{},[1603,119721],{"alt":37,"src":119722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[224,119724,119725],{"start":83},[227,119726,119727],{},"重启",[32,119729,119731],{"className":118626,"code":119730,"language":118628,"meta":37,"style":37},"sudo shutdown -r now\n",[24,119732,119733],{"__ignoreMap":37},[41,119734,119735,119737,119740,119743],{"class":43,"line":44},[41,119736,24713],{"class":54},[41,119738,119739],{"class":378}," shutdown",[41,119741,119742],{"class":58}," -r",[41,119744,119745],{"class":378}," now\n",[224,119747,119748],{"start":89},[227,119749,119750],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[20,119752,119753],{},[511,119754,119755],{"href":119755,"rel":119756},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24001],[224,119758,119759],{"start":96},[227,119760,119761],{},"再重启",[32,119763,119764],{"className":118626,"code":119730,"language":118628,"meta":37,"style":37},[24,119765,119766],{"__ignoreMap":37},[41,119767,119768,119770,119772,119774],{"class":43,"line":44},[41,119769,24713],{"class":54},[41,119771,119739],{"class":378},[41,119773,119742],{"class":58},[41,119775,119745],{"class":378},[15,119777,119779],{"id":119778},"_34-pip3源替换","3.4 pip3源替换",[20,119781,119782],{},"非Debian系发行版需要做。",[20,119784,119785],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[20,119787,119788],{},"使用dnf的系统也可能不用做。",[32,119790,119792],{"className":117399,"code":119791,"language":117401,"meta":37,"style":37},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[24,119793,119794,119799,119806,119811,119816],{"__ignoreMap":37},[41,119795,119796],{"class":43,"line":44},[41,119797,119798],{"class":47},"# 检查是否已安装 pip\n",[41,119800,119801,119804],{"class":43,"line":51},[41,119802,119803],{"class":54},"pip3",[41,119805,26396],{"class":58},[41,119807,119808],{"class":43,"line":62},[41,119809,119810],{"class":47},"# 如果未安装，先安装 pip3（见下方）\n",[41,119812,119813],{"class":43,"line":70},[41,119814,119815],{"class":47},"# 配置 pip 使用清华源\n",[41,119817,119818,119820,119823,119826,119829],{"class":43,"line":76},[41,119819,119803],{"class":54},[41,119821,119822],{"class":378}," config",[41,119824,119825],{"class":378}," set",[41,119827,119828],{"class":378}," global.index-url",[41,119830,119831],{"class":378}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[20,119833,119834],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[20,119836,119837],{},[1603,119838],{"alt":37,"src":119839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[32,119841,119843],{"className":117399,"code":119842,"language":117401,"meta":37,"style":37},"#安装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",[24,119844,119845,119850,119858,119869,119873,119878,119897,119901,119906,119918,119922,119927],{"__ignoreMap":37},[41,119846,119847],{"class":43,"line":44},[41,119848,119849],{"class":47},"#安装pip3\n",[41,119851,119852,119854,119856],{"class":43,"line":51},[41,119853,24713],{"class":54},[41,119855,117420],{"class":378},[41,119857,26345],{"class":378},[41,119859,119860,119862,119864,119866],{"class":43,"line":62},[41,119861,24713],{"class":54},[41,119863,26179],{"class":378},[41,119865,23970],{"class":378},[41,119867,119868],{"class":378}," python3-pip\n",[41,119870,119871],{"class":43,"line":70},[41,119872,80],{"emptyLinePlaceholder":79},[41,119874,119875],{"class":43,"line":76},[41,119876,119877],{"class":47},"#更新pip3\n",[41,119879,119880,119882,119884,119886,119888,119890,119893,119895],{"class":43,"line":83},[41,119881,100982],{"class":54},[41,119883,100985],{"class":58},[41,119885,101008],{"class":378},[41,119887,23970],{"class":378},[41,119889,26533],{"class":58},[41,119891,119892],{"class":378}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[41,119894,101013],{"class":58},[41,119896,101016],{"class":378},[41,119898,119899],{"class":43,"line":89},[41,119900,80],{"emptyLinePlaceholder":79},[41,119902,119903],{"class":43,"line":96},[41,119904,119905],{"class":47},"#设置pip源为清华源\n",[41,119907,119908,119910,119912,119914,119916],{"class":43,"line":104},[41,119909,119803],{"class":54},[41,119911,119822],{"class":378},[41,119913,119825],{"class":378},[41,119915,119828],{"class":378},[41,119917,119831],{"class":378},[41,119919,119920],{"class":43,"line":176},[41,119921,80],{"emptyLinePlaceholder":79},[41,119923,119924],{"class":43,"line":184},[41,119925,119926],{"class":47},"#测试\n",[41,119928,119929,119931,119933,119935,119937,119939],{"class":43,"line":1757},[41,119930,100982],{"class":54},[41,119932,100985],{"class":58},[41,119934,101008],{"class":378},[41,119936,23970],{"class":378},[41,119938,101013],{"class":58},[41,119940,101016],{"class":378},[20,119942,119943],{},"成功的话，会看到Looking后面是tsinghua字样。",[20,119945,119946],{},[1603,119947],{"alt":37,"src":119948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[15,119950,119952],{"id":119951},"_35-显卡驱动安装","3.5 显卡驱动安装",[241,119954,119956],{"id":119955},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[32,119958,119960],{"className":118626,"code":119959,"language":118628,"meta":37,"style":37},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[24,119961,119962,119967,119982,119987],{"__ignoreMap":37},[41,119963,119964],{"class":43,"line":44},[41,119965,119966],{"class":47},"# 如果是使用apt安装的驱动\n",[41,119968,119969,119971,119973,119975,119977,119980],{"class":43,"line":51},[41,119970,24713],{"class":54},[41,119972,26179],{"class":378},[41,119974,26182],{"class":378},[41,119976,119261],{"class":58},[41,119978,119979],{"class":378}," nvidia",[41,119981,119351],{"class":58},[41,119983,119984],{"class":43,"line":62},[41,119985,119986],{"class":47},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[41,119988,119989,119991],{"class":43,"line":70},[41,119990,24713],{"class":54},[41,119992,119993],{"class":378}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[241,119995,119997],{"id":119996},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22136,119999,120001],{"id":120000},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23048,120003,120005],{"id":120004},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[32,120007,120009],{"className":118626,"code":120008,"language":118628,"meta":37,"style":37},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[24,120010,120011,120016,120027,120032,120042,120047],{"__ignoreMap":37},[41,120012,120013],{"class":43,"line":44},[41,120014,120015],{"class":47},"# 安装英伟达驱动\n",[41,120017,120018,120020,120022,120024],{"class":43,"line":51},[41,120019,24713],{"class":54},[41,120021,117420],{"class":378},[41,120023,23970],{"class":378},[41,120025,120026],{"class":378}," nvidia-driver-版本号\n",[41,120028,120029],{"class":43,"line":62},[41,120030,120031],{"class":47},"# 重启 \n",[41,120033,120034,120036,120038,120040],{"class":43,"line":70},[41,120035,24713],{"class":54},[41,120037,119739],{"class":378},[41,120039,119742],{"class":58},[41,120041,119745],{"class":378},[41,120043,120044],{"class":43,"line":76},[41,120045,120046],{"class":47},"# 检查驱动是否安装成功\n",[41,120048,120049],{"class":43,"line":83},[41,120050,120051],{"class":54},"nvidia-smi\n",[23048,120053,120055],{"id":120054},"_35212-debian","3.5.2.1.2 Debian",[32,120057,120059],{"className":118626,"code":120058,"language":118628,"meta":37,"style":37},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[24,120060,120061,120065,120079,120083,120093,120097],{"__ignoreMap":37},[41,120062,120063],{"class":43,"line":44},[41,120064,120015],{"class":47},[41,120066,120067,120069,120071,120073,120076],{"class":43,"line":51},[41,120068,24713],{"class":54},[41,120070,117420],{"class":378},[41,120072,23970],{"class":378},[41,120074,120075],{"class":378}," nvidia-driver",[41,120077,120078],{"class":378}," nvidia-settings\n",[41,120080,120081],{"class":43,"line":62},[41,120082,120031],{"class":47},[41,120084,120085,120087,120089,120091],{"class":43,"line":70},[41,120086,24713],{"class":54},[41,120088,119739],{"class":378},[41,120090,119742],{"class":58},[41,120092,119745],{"class":378},[41,120094,120095],{"class":43,"line":76},[41,120096,120046],{"class":47},[41,120098,120099],{"class":43,"line":83},[41,120100,120051],{"class":54},[22136,120102,120104],{"id":120103},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[20,120106,120107,120108,120111],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[423,120109,120110],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[20,120113,120114,120115],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23691,120116,120117],{},[423,120118,120119],{},"（也可以不禁用桌面环境，直接进行下一步。）",[32,120121,120123],{"className":118626,"code":120122,"language":118628,"meta":37,"style":37},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[24,120124,120125,120130,120140,120145,120158,120163],{"__ignoreMap":37},[41,120126,120127],{"class":43,"line":44},[41,120128,120129],{"class":47},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[41,120131,120132,120134,120137],{"class":43,"line":51},[41,120133,24713],{"class":54},[41,120135,120136],{"class":378}," telinit",[41,120138,120139],{"class":58}," 3\n",[41,120141,120142],{"class":43,"line":62},[41,120143,120144],{"class":47},"# ubuntu 使用下方命令\n",[41,120146,120147,120149,120152,120155],{"class":43,"line":70},[41,120148,24713],{"class":54},[41,120150,120151],{"class":378}," service",[41,120153,120154],{"class":378}," lightdm",[41,120156,120157],{"class":378}," stop\n",[41,120159,120160],{"class":43,"line":76},[41,120161,120162],{"class":47},"# Fedora 使用下方命令\n",[41,120164,120165,120167,120169,120172],{"class":43,"line":83},[41,120166,24713],{"class":54},[41,120168,26616],{"class":378},[41,120170,120171],{"class":378}," isolate",[41,120173,120174],{"class":378}," multi-user.target\n",[20,120176,120177],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[32,120179,120181],{"className":118626,"code":120180,"language":118628,"meta":37,"style":37},"# 编译环境+准备工作\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",[24,120182,120183,120188,120199,120204,120211,120216,120228,120233,120240,120245],{"__ignoreMap":37},[41,120184,120185],{"class":43,"line":44},[41,120186,120187],{"class":47},"# 编译环境+准备工作\n",[41,120189,120190,120192,120194,120196],{"class":43,"line":51},[41,120191,24713],{"class":54},[41,120193,117420],{"class":378},[41,120195,23970],{"class":378},[41,120197,120198],{"class":378}," build-essential\n",[41,120200,120201],{"class":43,"line":62},[41,120202,120203],{"class":47},"# 进入到.run目录中\n",[41,120205,120206,120208],{"class":43,"line":70},[41,120207,101379],{"class":58},[41,120209,120210],{"class":378}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[41,120212,120213],{"class":43,"line":76},[41,120214,120215],{"class":47},"# 给驱动文件增加可执行权限：\n",[41,120217,120218,120220,120222,120225],{"class":43,"line":83},[41,120219,24713],{"class":54},[41,120221,24716],{"class":378},[41,120223,120224],{"class":378}," a+x",[41,120226,120227],{"class":378}," NVIDIA-Linux-x86_64-550.107.02.run\n",[41,120229,120230],{"class":43,"line":89},[41,120231,120232],{"class":47},"# 然后执行安装：\n",[41,120234,120235,120237],{"class":43,"line":96},[41,120236,24713],{"class":54},[41,120238,120239],{"class":378}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[41,120241,120242],{"class":43,"line":104},[41,120243,120244],{"class":47},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[41,120246,120247,120249,120252],{"class":43,"line":176},[41,120248,24713],{"class":54},[41,120250,120251],{"class":378}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[41,120253,120254],{"class":58},"  --no-opengl-files\n",[20,120256,120257],{},"安装完毕重启即可",[32,120259,120261],{"className":118626,"code":120260,"language":118628,"meta":37,"style":37},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[24,120262,120263,120267,120273,120277],{"__ignoreMap":37},[41,120264,120265],{"class":43,"line":44},[41,120266,120031],{"class":47},[41,120268,120269,120271],{"class":43,"line":51},[41,120270,24713],{"class":54},[41,120272,26750],{"class":378},[41,120274,120275],{"class":43,"line":62},[41,120276,120046],{"class":47},[41,120278,120279],{"class":43,"line":70},[41,120280,120051],{"class":54},[241,120282,120284],{"id":120283},"_353-安装cuda","3.5.3 安装CUDA",[20,120286,120287],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[20,120289,120290],{},[1603,120291],{"alt":37,"src":120292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[224,120294,120295],{},[227,120296,120297],{},"先查看显卡驱动所支持的最高CUDA版本",[32,120299,120300],{"className":118626,"code":120051,"language":118628,"meta":37,"style":37},[24,120301,120302],{"__ignoreMap":37},[41,120303,120304],{"class":43,"line":44},[41,120305,120051],{"class":54},[20,120307,120308],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[20,120310,120311],{},[1603,120312],{"alt":37,"src":120313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[224,120315,120316],{"start":51},[227,120317,120318],{},"下载CUDA并安装CUDA",[20,120320,118405,120321],{},[511,120322,118408],{"href":118408,"rel":120323},[24001],[20,120325,120326],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[20,120328,120329],{},[1603,120330],{"alt":37,"src":120331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[20,120333,120334,120335,120340],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[511,120336,120339],{"href":120337,"rel":120338},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24001],"Vinci机器人队单片机教程","）",[20,120342,120343],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[20,120345,120346],{},[1603,120347],{"alt":37,"src":120348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[20,120350,120351],{},"将最下方框框里的命令敲入终端",[32,120353,120355],{"className":118626,"code":120354,"language":118628,"meta":37,"style":37},"# 在当前文件夹下创建一个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",[24,120356,120357,120362,120371,120376,120383,120388,120396,120401,120412,120417],{"__ignoreMap":37},[41,120358,120359],{"class":43,"line":44},[41,120360,120361],{"class":47},"# 在当前文件夹下创建一个ttt的子文件夹\n",[41,120363,120364,120366,120368],{"class":43,"line":51},[41,120365,101369],{"class":54},[41,120367,29319],{"class":58},[41,120369,120370],{"class":378}," .\u002Fttt\n",[41,120372,120373],{"class":43,"line":62},[41,120374,120375],{"class":47},"# 进入ttt文件夹\n",[41,120377,120378,120380],{"class":43,"line":70},[41,120379,101379],{"class":58},[41,120381,120382],{"class":378}," ttt\n",[41,120384,120385],{"class":43,"line":76},[41,120386,120387],{"class":47},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[41,120389,120390,120393],{"class":43,"line":83},[41,120391,120392],{"class":54},"wget",[41,120394,120395],{"class":378}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[41,120397,120398],{"class":43,"line":89},[41,120399,120400],{"class":47},"# 给予权限\n",[41,120402,120403,120405,120407,120409],{"class":43,"line":96},[41,120404,24713],{"class":54},[41,120406,24716],{"class":378},[41,120408,120224],{"class":378},[41,120410,120411],{"class":378}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[41,120413,120414],{"class":43,"line":104},[41,120415,120416],{"class":47},"# 运行脚本\n",[41,120418,120419,120421],{"class":43,"line":176},[41,120420,24713],{"class":54},[41,120422,120411],{"class":378},[20,120424,120425],{},[1603,120426],{"alt":37,"src":120427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[20,120429,120430],{},"正在安装中：",[20,120432,120433],{},[1603,120434],{"alt":37,"src":120435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[20,120437,120438],{},"输入accept接受即可",[20,120440,120441],{},[1603,120442],{"alt":37,"src":120443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[20,120445,120446],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[20,120448,120449],{},[1603,120450],{"alt":37,"src":120451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[20,120453,120454],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[20,120456,120457],{},[1603,120458],{"alt":37,"src":120459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[224,120461,120462],{"start":62},[227,120463,120464],{},"配置环境",[20,120466,120467],{},"根据上方确认一下路径，比如我上面红色框起来的为",[32,120469,120471],{"className":118626,"code":120470,"language":118628,"meta":37,"style":37},"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",[24,120472,120473,120489,120504],{"__ignoreMap":37},[41,120474,120475,120478,120481,120484,120487],{"class":43,"line":44},[41,120476,120477],{"class":54},"Please",[41,120479,120480],{"class":378}," make",[41,120482,120483],{"class":378}," sure",[41,120485,120486],{"class":378}," that",[41,120488,2812],{"class":275},[41,120490,120491,120493,120496,120499,120502],{"class":43,"line":51},[41,120492,52374],{"class":54},[41,120494,120495],{"class":378},"   PATH",[41,120497,120498],{"class":378}," includes",[41,120500,120501],{"class":378}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[41,120503,2812],{"class":275},[41,120505,120506,120508,120511,120513,120516,120519,120521,120524,120527,120530,120533,120535,120538,120540],{"class":43,"line":62},[41,120507,52374],{"class":54},[41,120509,120510],{"class":378},"   LD_LIBRARY_PATH",[41,120512,120498],{"class":378},[41,120514,120515],{"class":378}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[41,120517,120518],{"class":378}," or,",[41,120520,5347],{"class":378},[41,120522,120523],{"class":378}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[41,120525,120526],{"class":378}," to",[41,120528,120529],{"class":378}," \u002Fetc\u002Fld.so.conf",[41,120531,120532],{"class":378}," and",[41,120534,27333],{"class":378},[41,120536,120537],{"class":378}," ldconfig",[41,120539,64707],{"class":378},[41,120541,120542],{"class":378}," root\n",[20,120544,120545],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[32,120547,120549],{"className":118626,"code":120548,"language":118628,"meta":37,"style":37},"which nvcc\n",[24,120550,120551],{"__ignoreMap":37},[41,120552,120553,120556],{"class":43,"line":44},[41,120554,120555],{"class":58},"which",[41,120557,120558],{"class":378}," nvcc\n",[20,120560,120561],{},[1603,120562],{"alt":37,"src":120563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[20,120565,120566],{},"所以我进行以下操作：",[32,120568,120570],{"className":118626,"code":120569,"language":118628,"meta":37,"style":37},"sudo vim ~\u002F.bashrc\n",[24,120571,120572],{"__ignoreMap":37},[41,120573,120574,120576,120578],{"class":43,"line":44},[41,120575,24713],{"class":54},[41,120577,118686],{"class":378},[41,120579,120580],{"class":378}," ~\u002F.bashrc\n",[20,120582,120583],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[32,120585,120587],{"className":118626,"code":120586,"language":118628,"meta":37,"style":37},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[24,120588,120589,120601],{"__ignoreMap":37},[41,120590,120591,120593,120596,120598],{"class":43,"line":44},[41,120592,25145],{"class":271},[41,120594,120595],{"class":275}," PATH",[41,120597,321],{"class":271},[41,120599,120600],{"class":275},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[41,120602,120603,120605,120608,120610],{"class":43,"line":51},[41,120604,25145],{"class":271},[41,120606,120607],{"class":275}," LD_LIBRARY_PATH",[41,120609,321],{"class":271},[41,120611,120612],{"class":275},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[20,120614,120615],{},[1603,120616],{"alt":37,"src":120617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[32,120619,120621],{"className":118626,"code":120620,"language":118628,"meta":37,"style":37},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[24,120622,120623,120628,120634,120639],{"__ignoreMap":37},[41,120624,120625],{"class":43,"line":44},[41,120626,120627],{"class":47},"# 刷新当前终端的环境变量\n",[41,120629,120630,120632],{"class":43,"line":51},[41,120631,100996],{"class":58},[41,120633,120580],{"class":378},[41,120635,120636],{"class":43,"line":62},[41,120637,120638],{"class":47},"# 验证CUDA是否安装成功\n",[41,120640,120641,120644],{"class":43,"line":70},[41,120642,120643],{"class":54},"nvcc",[41,120645,120646],{"class":58}," -V\n",[20,120648,120649],{},"出现下图这种则安装成功。",[20,120651,120652],{},[1603,120653],{"alt":37,"src":120654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[241,120656,120658],{"id":120657},"_354-安装cudnn","3.5.4 安装cuDNN",[224,120660,120661],{},[227,120662,120663],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[20,120665,120666,120667,120672],{},"前往 NVIDIA cuDNN 下载页面：",[511,120668,120671],{"href":120669,"rel":120670},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24001],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[20,120674,120675],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[20,120677,120678],{},[1603,120679],{"alt":37,"src":120680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[20,120682,120683],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[20,120685,120686],{},[1603,120687],{"alt":37,"src":120688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[20,120690,120691],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[20,120693,120694],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[20,120696,120697],{},[423,120698,120699],{},"我这里选择所有Linux X86_64最通用的办法：",[20,120701,120702],{},"下载好的：",[20,120704,120705],{},[1603,120706],{"alt":37,"src":120707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[224,120709,120710],{"start":51},[227,120711,120712],{},"安装cuDNN",[20,120714,120715],{},"找到该文件所在目录，并打开终端，cd到该目录。",[20,120717,120718],{},[1603,120719],{"alt":37,"src":120720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[20,120722,120723],{},"解压文件，并复制到对应位置完成安装",[32,120725,120727],{"className":118626,"code":120726,"language":118628,"meta":37,"style":37},"# 解压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",[24,120728,120729,120734,120745,120750,120757,120762,120778,120792,120797,120808,120817,120821,120837],{"__ignoreMap":37},[41,120730,120731],{"class":43,"line":44},[41,120732,120733],{"class":47},"# 解压cuDNN文件\n",[41,120735,120736,120739,120742],{"class":43,"line":51},[41,120737,120738],{"class":54},"tar",[41,120740,120741],{"class":58}," -xvf",[41,120743,120744],{"class":378}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[41,120746,120747],{"class":43,"line":62},[41,120748,120749],{"class":47},"# cd进文件夹\n",[41,120751,120752,120754],{"class":43,"line":70},[41,120753,101379],{"class":58},[41,120755,120756],{"class":378}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[41,120758,120759],{"class":43,"line":76},[41,120760,120761],{"class":47},"# 复制cuDNN文件到CUDA目录\n",[41,120763,120764,120766,120768,120771,120773,120776],{"class":43,"line":83},[41,120765,24713],{"class":54},[41,120767,27964],{"class":378},[41,120769,120770],{"class":378}," include\u002Fcudnn",[41,120772,728],{"class":58},[41,120774,120775],{"class":378},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[41,120777,2812],{"class":275},[41,120779,120780,120782,120784,120787,120789],{"class":43,"line":89},[41,120781,24713],{"class":54},[41,120783,27964],{"class":378},[41,120785,120786],{"class":378}," lib\u002Flibcudnn",[41,120788,728],{"class":58},[41,120790,120791],{"class":378},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[41,120793,120794],{"class":43,"line":96},[41,120795,120796],{"class":47},"# 对比一下有没有缺文件\n",[41,120798,120799,120801,120804,120806],{"class":43,"line":104},[41,120800,26864],{"class":54},[41,120802,120803],{"class":378}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[41,120805,728],{"class":58},[41,120807,2812],{"class":275},[41,120809,120810,120812,120815],{"class":43,"line":176},[41,120811,26864],{"class":54},[41,120813,120814],{"class":378}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[41,120816,119351],{"class":58},[41,120818,120819],{"class":43,"line":184},[41,120820,120400],{"class":47},[41,120822,120823,120825,120827,120830,120832,120834],{"class":43,"line":1757},[41,120824,24713],{"class":54},[41,120826,24716],{"class":378},[41,120828,120829],{"class":378}," a+r",[41,120831,120803],{"class":378},[41,120833,728],{"class":58},[41,120835,120836],{"class":275},"   \n",[41,120838,120839,120841,120843,120845,120847],{"class":43,"line":1763},[41,120840,24713],{"class":54},[41,120842,24716],{"class":378},[41,120844,120829],{"class":378},[41,120846,120814],{"class":378},[41,120848,119351],{"class":58},[224,120850,120851],{"start":62},[227,120852,120853],{},"检查是否安装成功",[32,120855,120857],{"className":118626,"code":120856,"language":118628,"meta":37,"style":37},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[24,120858,120859,120864],{"__ignoreMap":37},[41,120860,120861],{"class":43,"line":44},[41,120862,120863],{"class":47},"# 检查cuDNN版本命令\n",[41,120865,120866,120869,120872,120874,120876,120879,120882],{"class":43,"line":51},[41,120867,120868],{"class":54},"cat",[41,120870,120871],{"class":378}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[41,120873,25212],{"class":271},[41,120875,30339],{"class":54},[41,120877,120878],{"class":378}," CUDNN_MAJOR",[41,120880,120881],{"class":58}," -A",[41,120883,47826],{"class":58},[20,120885,120886],{},"出现下图这样的就是安装成功了",[20,120888,120889],{},[1603,120890],{"alt":37,"src":120891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[224,120893,120894],{"start":70},[227,120895,120896],{},"软链接(一般不需要)",[32,120898,120900],{"className":118626,"code":120899,"language":118628,"meta":37,"style":37},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[24,120901,120902,120907],{"__ignoreMap":37},[41,120903,120904],{"class":43,"line":44},[41,120905,120906],{"class":47},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[41,120908,120909,120911],{"class":43,"line":51},[41,120910,24713],{"class":54},[41,120912,120913],{"class":378}," ldconfig\n",[20,120915,120916],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[32,120918,120923],{"className":120919,"code":120920,"language":120921,"meta":120922,"style":37},"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",[24,120924,120925,120930,120935,120940,120945,120950,120955],{"__ignoreMap":37},[41,120926,120927],{"class":43,"line":44},[41,120928,120929],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[41,120931,120932],{"class":43,"line":51},[41,120933,120934],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[41,120936,120937],{"class":43,"line":62},[41,120938,120939],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[41,120941,120942],{"class":43,"line":70},[41,120943,120944],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[41,120946,120947],{"class":43,"line":76},[41,120948,120949],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[41,120951,120952],{"class":43,"line":83},[41,120953,120954],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[41,120956,120957],{"class":43,"line":89},[41,120958,120959],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[20,120961,120962],{},"运行下方的命令",[32,120964,120966],{"className":118626,"code":120965,"language":118628,"meta":37,"style":37},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[24,120967,120968,120973,120980,120985],{"__ignoreMap":37},[41,120969,120970],{"class":43,"line":44},[41,120971,120972],{"class":47},"# cd进入CUDA路径\n",[41,120974,120975,120977],{"class":43,"line":51},[41,120976,101379],{"class":58},[41,120978,120979],{"class":378}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[41,120981,120982],{"class":43,"line":62},[41,120983,120984],{"class":47}," # 查看本路径下的需要软链接的文件名\n",[41,120986,120987],{"class":43,"line":70},[41,120988,120989],{"class":54}," ls\n",[20,120991,120992],{},[1603,120993],{"alt":37,"src":120994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[20,120996,120997,120998,18548,121001,18548,121004,121007],{},"如上图，我需要将",[24,120999,121000],{},"libcudnn_xxx_xxxxx.so.8.9.7",[24,121002,121003],{},"libcudnn_xxx_xxxxx.so.8",[24,121005,121006],{},"libcudnn_xxx_xxxxx.so","软链接",[32,121009,121011],{"className":118626,"code":121010,"language":118628,"meta":37,"style":37},"# 创建符号链接。对于每个 .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",[24,121012,121013,121018,121034,121048,121062,121076,121090,121104,121118,121123,121129,121134],{"__ignoreMap":37},[41,121014,121015],{"class":43,"line":44},[41,121016,121017],{"class":47},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[41,121019,121020,121022,121025,121028,121031],{"class":43,"line":51},[41,121021,24713],{"class":54},[41,121023,121024],{"class":378}," ln",[41,121026,121027],{"class":58}," -sf",[41,121029,121030],{"class":378}," libcudnn_cnn_train.so.8.9.7",[41,121032,121033],{"class":378}," libcudnn_cnn_train.so.8\n",[41,121035,121036,121038,121040,121042,121045],{"class":43,"line":62},[41,121037,24713],{"class":54},[41,121039,121024],{"class":378},[41,121041,121027],{"class":58},[41,121043,121044],{"class":378}," libcudnn_adv_infer.so.8.9.7",[41,121046,121047],{"class":378}," libcudnn_adv_infer.so.8\n",[41,121049,121050,121052,121054,121056,121059],{"class":43,"line":70},[41,121051,24713],{"class":54},[41,121053,121024],{"class":378},[41,121055,121027],{"class":58},[41,121057,121058],{"class":378}," libcudnn_adv_train.so.8.9.7",[41,121060,121061],{"class":378}," libcudnn_adv_train.so.8\n",[41,121063,121064,121066,121068,121070,121073],{"class":43,"line":76},[41,121065,24713],{"class":54},[41,121067,121024],{"class":378},[41,121069,121027],{"class":58},[41,121071,121072],{"class":378}," libcudnn_cnn_infer.so.8.9.7",[41,121074,121075],{"class":378}," libcudnn_cnn_infer.so.8\n",[41,121077,121078,121080,121082,121084,121087],{"class":43,"line":83},[41,121079,24713],{"class":54},[41,121081,121024],{"class":378},[41,121083,121027],{"class":58},[41,121085,121086],{"class":378}," libcudnn.so.8.9.7",[41,121088,121089],{"class":378}," libcudnn.so.8\n",[41,121091,121092,121094,121096,121098,121101],{"class":43,"line":89},[41,121093,24713],{"class":54},[41,121095,121024],{"class":378},[41,121097,121027],{"class":58},[41,121099,121100],{"class":378}," libcudnn_ops_infer.so.8.9.7",[41,121102,121103],{"class":378}," libcudnn_ops_infer.so.8\n",[41,121105,121106,121108,121110,121112,121115],{"class":43,"line":96},[41,121107,24713],{"class":54},[41,121109,121024],{"class":378},[41,121111,121027],{"class":58},[41,121113,121114],{"class":378}," libcudnn_ops_train.so.8.9.7",[41,121116,121117],{"class":378}," libcudnn_ops_train.so.8\n",[41,121119,121120],{"class":43,"line":104},[41,121121,121122],{"class":47},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[41,121124,121125,121127],{"class":43,"line":176},[41,121126,24713],{"class":54},[41,121128,120913],{"class":378},[41,121130,121131],{"class":43,"line":184},[41,121132,121133],{"class":47},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[41,121135,121136,121138,121141,121144,121146,121149],{"class":43,"line":1757},[41,121137,26864],{"class":54},[41,121139,121140],{"class":58}," -l",[41,121142,121143],{"class":378}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[41,121145,728],{"class":58},[41,121147,121148],{"class":378},".so",[41,121150,119351],{"class":58},[241,121152,121154],{"id":121153},"_355-常见问题","3.5.5 常见问题",[224,121156,121157],{},[227,121158,121159],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[32,121161,121163],{"className":118626,"code":121162,"language":118628,"meta":37,"style":37},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[24,121164,121165],{"__ignoreMap":37},[41,121166,121167,121169,121171],{"class":43,"line":44},[41,121168,24713],{"class":54},[41,121170,118686],{"class":378},[41,121172,121173],{"class":378}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[20,121175,121176],{},"blacklist-nouveau.conf文件内容如下：",[32,121178,121180],{"className":118626,"code":121179,"language":118628,"meta":37,"style":37},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[24,121181,121182,121190,121197,121209,121219],{"__ignoreMap":37},[41,121183,121184,121187],{"class":43,"line":44},[41,121185,121186],{"class":54},"blacklist",[41,121188,121189],{"class":378}," nouveau\n",[41,121191,121192,121194],{"class":43,"line":51},[41,121193,121186],{"class":54},[41,121195,121196],{"class":378}," lbm-nouveau\n",[41,121198,121199,121201,121204,121207],{"class":43,"line":62},[41,121200,116033],{"class":54},[41,121202,121203],{"class":378}," nouveau",[41,121205,121206],{"class":378}," modeset=",[41,121208,3223],{"class":58},[41,121210,121211,121214,121216],{"class":43,"line":70},[41,121212,121213],{"class":58},"alias",[41,121215,121203],{"class":378},[41,121217,121218],{"class":378}," off\n",[41,121220,121221,121223,121226],{"class":43,"line":76},[41,121222,121213],{"class":58},[41,121224,121225],{"class":378}," lbm-nouveau",[41,121227,121218],{"class":378},[20,121229,121230],{},"接着运行下方命令",[32,121232,121234],{"className":118626,"code":121233,"language":118628,"meta":37,"style":37},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[24,121235,121236,121246,121251],{"__ignoreMap":37},[41,121237,121238,121240,121243],{"class":43,"line":44},[41,121239,24713],{"class":54},[41,121241,121242],{"class":378}," update-initramfs",[41,121244,121245],{"class":58}," -u\n",[41,121247,121248],{"class":43,"line":51},[41,121249,121250],{"class":54},"或者\n",[41,121252,121253,121255,121258],{"class":43,"line":62},[41,121254,24713],{"class":54},[41,121256,121257],{"class":378}," dracut",[41,121259,121260],{"class":58}," --force\n",[20,121262,121263],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[32,121265,121267],{"className":118626,"code":121266,"language":118628,"meta":37,"style":37},"lsmod | grep nouveau\n",[24,121268,121269],{"__ignoreMap":37},[41,121270,121271,121274,121276,121278],{"class":43,"line":44},[41,121272,121273],{"class":54},"lsmod",[41,121275,25212],{"class":271},[41,121277,30339],{"class":54},[41,121279,121189],{"class":378},[224,121281,121282],{"start":51},[227,121283,121284],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[32,121286,121288],{"className":118626,"code":121287,"language":118628,"meta":37,"style":37},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[24,121289,121290],{"__ignoreMap":37},[41,121291,121292,121294,121296],{"class":43,"line":44},[41,121293,24713],{"class":54},[41,121295,118686],{"class":378},[41,121297,121298],{"class":378}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[20,121300,121301],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[32,121303,121305],{"className":118626,"code":121304,"language":118628,"meta":37,"style":37},"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",[24,121306,121307,121315,121323,121331,121338,121346,121356,121364],{"__ignoreMap":37},[41,121308,121309,121312],{"class":43,"line":44},[41,121310,121311],{"class":54},"Section",[41,121313,121314],{"class":378}," \"OutputClass\"\n",[41,121316,121317,121320],{"class":43,"line":51},[41,121318,121319],{"class":54},"   Identifier",[41,121321,121322],{"class":378}," \"nvidia\"\n",[41,121324,121325,121328],{"class":43,"line":62},[41,121326,121327],{"class":54},"   MatchDriver",[41,121329,121330],{"class":378}," \"nvidia-drm\"\n",[41,121332,121333,121336],{"class":43,"line":70},[41,121334,121335],{"class":54},"   Driver",[41,121337,121322],{"class":378},[41,121339,121340,121343],{"class":43,"line":76},[41,121341,121342],{"class":54},"   Option",[41,121344,121345],{"class":378}," \"AllowEmptyInitialConfiguration\"\n",[41,121347,121348,121350,121353],{"class":43,"line":83},[41,121349,121342],{"class":54},[41,121351,121352],{"class":378}," \"PrimaryGPU\"",[41,121354,121355],{"class":378}," \"yes\"\n",[41,121357,121358,121361],{"class":43,"line":89},[41,121359,121360],{"class":54},"   ModulePath",[41,121362,121363],{"class":378}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[41,121365,121366],{"class":43,"line":96},[41,121367,121368],{"class":54},"EndSection\n",[224,121370,121371],{"start":62},[227,121372,121373],{},"安装N卡驱动提示错误",[32,121375,121377],{"className":120919,"code":121376,"language":120921,"meta":120922,"style":37},"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",[24,121378,121379],{"__ignoreMap":37},[41,121380,121381],{"class":43,"line":44},[41,121382,121376],{},[224,121384,121385],{},[227,121386,121387],{},"检查当前运行的内核版本：",[20,121389,121390],{},"运行以下命令以查看你当前正在使用的内核版本：",[32,121392,121394],{"className":117399,"code":121393,"language":117401,"meta":37,"style":37},"uname -r\n",[24,121395,121396],{"__ignoreMap":37},[41,121397,121398,121400],{"class":43,"line":44},[41,121399,70307],{"class":54},[41,121401,121402],{"class":58}," -r\n",[224,121404,121405],{"start":51},[227,121406,121407],{},"安装内核开发文件：",[20,121409,121410,121411,121414],{},"确保你已经安装了与当前内核版本相匹配的 ",[24,121412,121413],{},"kernel-devel"," 包。运行以下命令来安装：",[32,121416,121418],{"className":117399,"code":121417,"language":117401,"meta":37,"style":37},"sudo dnf install kernel-devel-$(uname -r)\n",[24,121419,121420],{"__ignoreMap":37},[41,121421,121422,121424,121426,121428,121431,121433,121435,121437],{"class":43,"line":44},[41,121423,24713],{"class":54},[41,121425,26418],{"class":378},[41,121427,23970],{"class":378},[41,121429,121430],{"class":378}," kernel-devel-",[41,121432,25202],{"class":275},[41,121434,70307],{"class":54},[41,121436,119742],{"class":58},[41,121438,282],{"class":275},[20,121440,121441],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[224,121443,121444],{"start":62},[227,121445,121446],{},"安装内核源代码（如果需要）：",[20,121448,121449],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[32,121451,121453],{"className":117399,"code":121452,"language":117401,"meta":37,"style":37},"sudo dnf install kernel-headers kernel-source\n",[24,121454,121455],{"__ignoreMap":37},[41,121456,121457,121459,121461,121463,121466],{"class":43,"line":44},[41,121458,24713],{"class":54},[41,121460,26418],{"class":378},[41,121462,23970],{"class":378},[41,121464,121465],{"class":378}," kernel-headers",[41,121467,121468],{"class":378}," kernel-source\n",[224,121470,121471],{"start":70},[227,121472,121473],{},"检查安装：",[20,121475,121476,121477,121480],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[24,121478,121479],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[32,121482,121484],{"className":117399,"code":121483,"language":117401,"meta":37,"style":37},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[24,121485,121486],{"__ignoreMap":37},[41,121487,121488,121490],{"class":43,"line":44},[41,121489,26864],{"class":54},[41,121491,121492],{"class":378}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[20,121494,121495,121496,121499],{},"如果仍然遇到问题，可以通过 ",[24,121497,121498],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[189,121501,121502],{},"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":37,"searchDepth":51,"depth":51,"links":121504},[121505,121509,121519,121523,121524],{"id":118602,"depth":51,"text":118603,"children":121506},[121507,121508],{"id":118612,"depth":62,"text":118613},{"id":118622,"depth":62,"text":118623},{"id":118822,"depth":51,"text":118823,"children":121510},[121511,121512,121513,121514,121515,121516,121517,121518],{"id":118826,"depth":62,"text":118827},{"id":118896,"depth":62,"text":118897},{"id":118985,"depth":62,"text":118986},{"id":119230,"depth":62,"text":119231},{"id":119300,"depth":62,"text":119301},{"id":119367,"depth":62,"text":119368},{"id":119402,"depth":62,"text":119403},{"id":119457,"depth":62,"text":119458},{"id":119508,"depth":51,"text":119509,"children":121520},[121521,121522],{"id":119512,"depth":62,"text":119513},{"id":119592,"depth":62,"text":119593},{"id":119778,"depth":51,"text":119779},{"id":119951,"depth":51,"text":119952,"children":121525},[121526,121527,121528,121529,121530],{"id":119955,"depth":62,"text":119956},{"id":119996,"depth":62,"text":119997},{"id":120283,"depth":62,"text":120284},{"id":120657,"depth":62,"text":120658},{"id":121153,"depth":62,"text":121154},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118594,"description":196},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121537,"title":121538,"body":121539,"description":196,"extension":197,"meta":121879,"navigation":79,"path":121880,"seo":121881,"stem":121882,"__hash__":121883},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121540,"toc":121877},[121541,121544,121549,121552,121798,121803,121806,121842,121845,121874],[10,121542,121538],{"id":121543},"_4-命令教程长期积累",[224,121545,121546],{},[227,121547,121548],{},"大多数命令",[20,121550,121551],{},"常用 Linux 命令速查：",[32,121553,121555],{"className":117399,"code":121554,"language":117401,"meta":37,"style":37},"# 文件与目录\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",[24,121556,121557,121562,121569,121576,121584,121591,121598,121606,121614,121621,121628,121636,121640,121645,121652,121660,121667,121671,121676,121683,121691,121699,121707,121715,121719,121724,121732,121739,121746,121754,121762,121766,121771,121780,121789],{"__ignoreMap":37},[41,121558,121559],{"class":43,"line":44},[41,121560,121561],{"class":47},"# 文件与目录\n",[41,121563,121564,121566],{"class":43,"line":51},[41,121565,26864],{"class":54},[41,121567,121568],{"class":47},"        # 列出目录内容\n",[41,121570,121571,121573],{"class":43,"line":62},[41,121572,101379],{"class":58},[41,121574,121575],{"class":47},"        # 切换目录\n",[41,121577,121578,121581],{"class":43,"line":70},[41,121579,121580],{"class":58},"pwd",[41,121582,121583],{"class":47},"       # 显示当前路径\n",[41,121585,121586,121588],{"class":43,"line":76},[41,121587,101369],{"class":54},[41,121589,121590],{"class":47},"     # 创建目录\n",[41,121592,121593,121595],{"class":43,"line":83},[41,121594,25425],{"class":54},[41,121596,121597],{"class":47},"        # 删除文件或目录\n",[41,121599,121600,121603],{"class":43,"line":89},[41,121601,121602],{"class":54},"cp",[41,121604,121605],{"class":47},"        # 复制文件或目录\n",[41,121607,121608,121611],{"class":43,"line":96},[41,121609,121610],{"class":54},"mv",[41,121612,121613],{"class":47},"        # 移动\u002F重命名文件或目录\n",[41,121615,121616,121618],{"class":43,"line":104},[41,121617,101386],{"class":54},[41,121619,121620],{"class":47},"     # 创建空文件\n",[41,121622,121623,121625],{"class":43,"line":176},[41,121624,120868],{"class":54},[41,121626,121627],{"class":47},"       # 查看文件内容\n",[41,121629,121630,121633],{"class":43,"line":184},[41,121631,121632],{"class":54},"head\u002Ftail",[41,121634,121635],{"class":47}," # 查看文件头部\u002F尾部\n",[41,121637,121638],{"class":43,"line":1757},[41,121639,80],{"emptyLinePlaceholder":79},[41,121641,121642],{"class":43,"line":1763},[41,121643,121644],{"class":47},"# 权限管理\n",[41,121646,121647,121649],{"class":43,"line":1768},[41,121648,24748],{"class":54},[41,121650,121651],{"class":47},"     # 修改文件权限\n",[41,121653,121654,121657],{"class":43,"line":1782},[41,121655,121656],{"class":54},"chown",[41,121658,121659],{"class":47},"     # 修改文件所有者\n",[41,121661,121662,121664],{"class":43,"line":1787},[41,121663,24713],{"class":54},[41,121665,121666],{"class":47},"      # 以管理员身份执行\n",[41,121668,121669],{"class":43,"line":1793},[41,121670,80],{"emptyLinePlaceholder":79},[41,121672,121673],{"class":43,"line":1814},[41,121674,121675],{"class":47},"# 系统信息\n",[41,121677,121678,121680],{"class":43,"line":1819},[41,121679,70307],{"class":54},[41,121681,121682],{"class":47},"     # 系统信息\n",[41,121684,121685,121688],{"class":43,"line":1833},[41,121686,121687],{"class":54},"df",[41,121689,121690],{"class":47},"        # 磁盘使用情况\n",[41,121692,121693,121696],{"class":43,"line":1838},[41,121694,121695],{"class":54},"free",[41,121697,121698],{"class":47},"      # 内存使用情况\n",[41,121700,121701,121704],{"class":43,"line":1867},[41,121702,121703],{"class":54},"top\u002Fhtop",[41,121705,121706],{"class":47},"  # 进程监控\n",[41,121708,121709,121712],{"class":43,"line":1872},[41,121710,121711],{"class":54},"ps",[41,121713,121714],{"class":47},"        # 查看进程\n",[41,121716,121717],{"class":43,"line":1889},[41,121718,80],{"emptyLinePlaceholder":79},[41,121720,121721],{"class":43,"line":1894},[41,121722,121723],{"class":47},"# 网络\n",[41,121725,121726,121729],{"class":43,"line":1899},[41,121727,121728],{"class":54},"ping",[41,121730,121731],{"class":47},"      # 测试网络连通性\n",[41,121733,121734,121736],{"class":43,"line":1904},[41,121735,26952],{"class":54},[41,121737,121738],{"class":47},"      # 发送 HTTP 请求\n",[41,121740,121741,121743],{"class":43,"line":1918},[41,121742,120392],{"class":54},[41,121744,121745],{"class":47},"      # 下载文件\n",[41,121747,121748,121751],{"class":43,"line":1923},[41,121749,121750],{"class":54},"ssh",[41,121752,121753],{"class":47},"       # 远程登录\n",[41,121755,121756,121759],{"class":43,"line":2715},[41,121757,121758],{"class":54},"scp",[41,121760,121761],{"class":47},"       # 远程文件传输\n",[41,121763,121764],{"class":43,"line":2729},[41,121765,80],{"emptyLinePlaceholder":79},[41,121767,121768],{"class":43,"line":2737},[41,121769,121770],{"class":47},"# 包管理（Debian\u002FUbuntu）\n",[41,121772,121773,121775,121777],{"class":43,"line":2742},[41,121774,117471],{"class":54},[41,121776,117450],{"class":378},[41,121778,121779],{"class":47},"   # 更新软件源\n",[41,121781,121782,121784,121786],{"class":43,"line":2748},[41,121783,117471],{"class":54},[41,121785,23970],{"class":378},[41,121787,121788],{"class":47},"  # 安装软件包\n",[41,121790,121791,121793,121795],{"class":43,"line":2754},[41,121792,117471],{"class":54},[41,121794,26182],{"class":378},[41,121796,121797],{"class":47},"   # 卸载软件包\n",[224,121799,121800],{"start":51},[227,121801,121802],{},"KDE Dolphin 以root打开",[20,121804,121805],{},"kde5",[32,121807,121809],{"className":117399,"code":121808,"language":117401,"meta":37,"style":37},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[24,121810,121811],{"__ignoreMap":37},[41,121812,121813,121816,121819,121822,121824,121826,121829,121832,121834,121837,121839],{"class":43,"line":44},[41,121814,121815],{"class":54},"pkexec",[41,121817,121818],{"class":378}," env",[41,121820,121821],{"class":378}," DISPLAY=",[41,121823,28246],{"class":275},[41,121825,28304],{"class":378},[41,121827,121828],{"class":275},"$XAUTHORITY ",[41,121830,121831],{"class":378},"KDE_SESSION_VERSION=",[41,121833,592],{"class":58},[41,121835,121836],{"class":378}," KDE_FULL_SESSION=",[41,121838,1503],{"class":58},[41,121840,121841],{"class":378}," dolphin\n",[20,121843,121844],{},"kde6",[32,121846,121848],{"className":117399,"code":121847,"language":117401,"meta":37,"style":37},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[24,121849,121850],{"__ignoreMap":37},[41,121851,121852,121854,121856,121858,121860,121862,121864,121866,121868,121870,121872],{"class":43,"line":44},[41,121853,121815],{"class":54},[41,121855,121818],{"class":378},[41,121857,121821],{"class":378},[41,121859,28246],{"class":275},[41,121861,28304],{"class":378},[41,121863,121828],{"class":275},[41,121865,121831],{"class":378},[41,121867,617],{"class":58},[41,121869,121836],{"class":378},[41,121871,1503],{"class":58},[41,121873,121841],{"class":378},[189,121875,121876],{},"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":37,"searchDepth":51,"depth":51,"links":121878},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121538,"description":196},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121885,"title":121886,"body":121887,"description":196,"extension":197,"meta":121901,"navigation":79,"path":121902,"seo":121903,"stem":121904,"__hash__":121905},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121888,"toc":121899},[121889,121892],[10,121890,121886],{"id":121891},"_5-各种环境配置",[20,121893,121894],{},[511,121895,121898],{"href":121896,"rel":121897},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24001],"电控组环境搭建大全",{"title":37,"searchDepth":51,"depth":51,"links":121900},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121886,"description":196},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121907,"title":121908,"body":121909,"description":196,"extension":197,"meta":122257,"navigation":79,"path":122258,"seo":122259,"stem":122260,"__hash__":122261},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121910,"toc":122249},[121911,121914,121918,121922,121926,121931,121938,121942,122235,122239,122246],[10,121912,121908],{"id":121913},"_6-拓展功能",[15,121915,121917],{"id":121916},"_61-wine","6.1 Wine",[15,121919,121921],{"id":121920},"_62-android","6.2 Android",[241,121923,121925],{"id":121924},"_621-i卡a卡","6.2.1 I卡、A卡",[224,121927,121928],{},[227,121929,121930],{},"Wayland-Waydroid(体验超级好)",[20,121932,121933,121934],{},"Waydroid 官网与安装指南：",[511,121935,121936],{"href":121936,"rel":121937},"https:\u002F\u002Fwaydro.id\u002F",[24001],[241,121939,121941],{"id":121940},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[224,121943,121944],{},[227,121945,121946,121947,121949,121950,121954,121956,121959,121964,122161],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53819,121948],{},"BlissOS 官网下载：",[511,121951,121952],{"href":121952,"rel":121953},"https:\u002F\u002Fblissos.org\u002F",[24001],[53819,121955],{},[1603,121957],{"alt":37,"src":121958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[224,121960,121961],{"start":62},[227,121962,121963],{},"比较推荐的配置",[32,121965,121967],{"className":117399,"code":121966,"language":117401,"meta":37,"style":37},"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",[24,121968,121969,121976,121986,121996,122006,122018,122028,122035,122045,122054,122063,122073,122083,122092,122102,122112,122124,122134,122143,122153],{"__ignoreMap":37},[41,121970,121971,121974],{"class":43,"line":44},[41,121972,121973],{"class":54},"qemu-system-x86_64",[41,121975,59],{"class":58},[41,121977,121978,121981,121984],{"class":43,"line":51},[41,121979,121980],{"class":58},"        -M",[41,121982,121983],{"class":378}," q35,vmport=off",[41,121985,59],{"class":58},[41,121987,121988,121991,121994],{"class":43,"line":62},[41,121989,121990],{"class":58},"        -accel",[41,121992,121993],{"class":378}," kvm",[41,121995,59],{"class":58},[41,121997,121998,122001,122004],{"class":43,"line":70},[41,121999,122000],{"class":58},"        -cpu",[41,122002,122003],{"class":378}," qemu64,+sse3,+sse4.2",[41,122005,59],{"class":58},[41,122007,122008,122011,122014,122016],{"class":43,"line":76},[41,122009,122010],{"class":58},"        -smp",[41,122012,122013],{"class":378}," 8,cores=",[41,122015,566],{"class":58},[41,122017,59],{"class":58},[41,122019,122020,122023,122026],{"class":43,"line":83},[41,122021,122022],{"class":58},"        -m",[41,122024,122025],{"class":378}," 6G",[41,122027,59],{"class":58},[41,122029,122030,122033],{"class":43,"line":89},[41,122031,122032],{"class":58},"        -usb",[41,122034,59],{"class":58},[41,122036,122037,122040,122043],{"class":43,"line":96},[41,122038,122039],{"class":58},"        -device",[41,122041,122042],{"class":378}," virtio-tablet",[41,122044,59],{"class":58},[41,122046,122047,122049,122052],{"class":43,"line":104},[41,122048,122039],{"class":58},[41,122050,122051],{"class":378}," virtio-keyboard",[41,122053,59],{"class":58},[41,122055,122056,122058,122061],{"class":43,"line":176},[41,122057,122039],{"class":58},[41,122059,122060],{"class":378}," usb-tablet",[41,122062,59],{"class":58},[41,122064,122065,122068,122071],{"class":43,"line":184},[41,122066,122067],{"class":58},"        -bios",[41,122069,122070],{"class":378}," OVMF-pure-efi64.fd",[41,122072,59],{"class":58},[41,122074,122075,122078,122081],{"class":43,"line":1757},[41,122076,122077],{"class":58},"        -net",[41,122079,122080],{"class":378}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[41,122082,59],{"class":58},[41,122084,122085,122087,122090],{"class":43,"line":1763},[41,122086,122077],{"class":58},[41,122088,122089],{"class":378}," nic,model=virtio",[41,122091,59],{"class":58},[41,122093,122094,122097,122100],{"class":43,"line":1768},[41,122095,122096],{"class":58},"        -audio",[41,122098,122099],{"class":378}," sdl,model=hda",[41,122101,59],{"class":58},[41,122103,122104,122107,122110],{"class":43,"line":1782},[41,122105,122106],{"class":58},"        -display",[41,122108,122109],{"class":378}," sdl,gl=on,show-cursor=on",[41,122111,59],{"class":58},[41,122113,122114,122116,122119,122122],{"class":43,"line":1787},[41,122115,122039],{"class":58},[41,122117,122118],{"class":378}," virtio-vga-gl,xres=1920,yres=",[41,122120,122121],{"class":58},"1080",[41,122123,59],{"class":58},[41,122125,122126,122129,122132],{"class":43,"line":1793},[41,122127,122128],{"class":58},"        -drive",[41,122130,122131],{"class":378}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[41,122133,59],{"class":58},[41,122135,122136,122138,122141],{"class":43,"line":1814},[41,122137,122128],{"class":58},[41,122139,122140],{"class":378}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[41,122142,59],{"class":58},[41,122144,122145,122148,122151],{"class":43,"line":1819},[41,122146,122147],{"class":58},"        -monitor",[41,122149,122150],{"class":378}," stdio",[41,122152,59],{"class":58},[41,122154,122155,122158],{"class":43,"line":1833},[41,122156,122157],{"class":58},"        -serial",[41,122159,122160],{"class":378}," none\n",[224,122162,122163],{"start":76},[227,122164,122165,122166],{},"常用操作：",[224,122167,122168,122171,122227],{},[227,122169,122170],{},"全屏：Ctrl+Alt+F",[227,122172,122173,122174,122179],{},"adb调试",[224,122175,122176],{},[227,122177,122178],{},"使Linux与Android用ADB连接。",[32,122180,122182],{"className":117399,"code":122181,"language":117401,"meta":37,"style":37},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[24,122183,122184,122189,122200,122205,122217,122222],{"__ignoreMap":37},[41,122185,122186],{"class":43,"line":44},[41,122187,122188],{"class":47},"# 连接安卓\n",[41,122190,122191,122194,122197],{"class":43,"line":51},[41,122192,122193],{"class":54},"adb",[41,122195,122196],{"class":378}," connect",[41,122198,122199],{"class":58}," 127.0.0.1\n",[41,122201,122202],{"class":43,"line":62},[41,122203,122204],{"class":47},"# 打开shell\n",[41,122206,122207,122209,122211,122214],{"class":43,"line":70},[41,122208,122193],{"class":54},[41,122210,26986],{"class":58},[41,122212,122213],{"class":378}," 127.0.0.1:5555",[41,122215,122216],{"class":378}," shell\n",[41,122218,122219],{"class":43,"line":76},[41,122220,122221],{"class":47},"# 使用root权限\n",[41,122223,122224],{"class":43,"line":83},[41,122225,122226],{"class":54},"su\n",[227,122228,122229,122230],{},"中文输入法",[224,122231,122232],{},[227,122233,122234],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[15,122236,122238],{"id":122237},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[20,122240,122241,122242],{},"rEFInd 官网与文档：",[511,122243,122244],{"href":122244,"rel":122245},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24001],[189,122247,122248],{},"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":37,"searchDepth":51,"depth":51,"links":122250},[122251,122252,122256],{"id":121916,"depth":51,"text":121917},{"id":121920,"depth":51,"text":121921,"children":122253},[122254,122255],{"id":121924,"depth":62,"text":121925},{"id":121940,"depth":62,"text":121941},{"id":122237,"depth":51,"text":122238},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121908,"description":196},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122263,"title":122264,"body":122265,"description":196,"extension":197,"meta":125564,"navigation":79,"path":125565,"seo":125566,"stem":125567,"__hash__":125568},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122266,"toc":125538},[122267,122270,122274,122277,122284,122534,122537,122609,122612,122616,122620,122625,122628,122631,122634,122639,122642,122645,122648,122653,122656,122661,122664,122667,122672,122675,122680,122683,122687,122691,122694,122699,122702,122716,122719,122722,122731,122734,122743,122746,122749,122758,122761,122770,122773,122776,122785,122788,122791,122806,122809,122812,122821,122826,122829,122832,122841,122844,122853,122856,122865,122868,122877,122882,122885,122893,122898,122901,122910,122913,122921,122926,122929,122938,122941,122944,122948,122951,122956,122959,122964,122978,122983,122988,122999,123004,123010,123015,123030,123035,123038,123043,123048,123053,123061,123066,123073,123078,123089,123094,123097,123101,123104,123107,123112,123115,123134,123139,123142,123151,123156,123159,123181,123184,123214,123217,123222,123225,123239,123244,123263,123266,123269,123274,123286,123291,123296,123299,123304,123307,123322,123325,123330,123335,123339,123344,123384,123387,123391,123397,123403,123408,123411,123418,123423,123430,123433,123436,123443,123457,123460,123520,123523,123537,123549,123552,123555,123558,123622,123625,123628,123631,123651,123654,123659,123666,123670,123673,123677,123682,123687,123691,123694,123697,123739,123744,123747,123769,123784,123786,123791,123803,123863,123865,123867,123921,123923,123925,123931,123936,123939,123944,123948,123951,124013,124018,124021,124023,124027,124039,124121,124123,124125,124179,124185,124187,124191,124196,124198,124203,124207,124227,124262,124266,124269,124272,124275,124282,124285,124297,124300,124315,124318,124337,124385,124388,124405,124408,124422,124427,124430,124439,124454,124466,124504,124509,124518,124523,124528,124554,124563,124567,124571,124576,124579,124583,124587,124592,124595,124600,124603,124608,124611,124616,124619,124623,124628,124631,124636,124639,124643,124648,124651,124656,124659,124664,124667,124671,124676,124679,124684,124687,124692,124695,124699,124704,124707,124712,124715,124720,124723,124728,124731,124736,124739,124744,124747,124751,124756,124759,124764,124771,124775,124780,124783,124788,124791,124795,124800,124803,124806,124809,124812,124815,124819,124822,124832,124837,124842,124864,124869,124874,124881,124885,124890,124893,124896,124901,124904,124907,124910,124913,124916,124919,124922,124925,124928,124931,124934,124937,124942,124947,124952,124957,124962,124967,124972,124975,124979,124982,124986,124991,124996,125001,125006,125010,125016,125024,125029,125032,125037,125052,125055,125060,125094,125109,125112,125167,125193,125205,125208,125217,125220,125235,125240,125243,125249,125254,125257,125262,125265,125270,125275,125282,125285,125300,125303,125338,125343,125351,125389,125392,125395,125400,125403,125408,125419,125453,125458,125461,125470,125475,125481,125484,125489,125498,125503,125506,125509,125514,125522,125525,125530,125535],[10,122268,122264],{"id":122269},"_7-其他操作",[15,122271,122273],{"id":122272},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[20,122275,122276],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[20,122278,122279,122280,122283],{},"进入工控机的硬盘目录，进入",[24,122281,122282],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[32,122285,122289],{"className":122286,"code":122287,"language":122288,"meta":37,"style":37},"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",[24,122290,122291,122299,122310,122317,122324,122336,122343,122355,122366,122377,122384,122391,122398,122410,122422,122429,122441,122453,122460,122472,122484,122496,122507,122514,122525],{"__ignoreMap":37},[41,122292,122293,122296],{"class":43,"line":44},[41,122294,122295],{"class":51403},"network",[41,122297,122298],{"class":275},": \n",[41,122300,122301,122304,122306,122308],{"class":43,"line":51},[41,122302,122303],{"class":51403},"  version",[41,122305,51540],{"class":275},[41,122307,351],{"class":58},[41,122309,2812],{"class":275},[41,122311,122312,122315],{"class":43,"line":62},[41,122313,122314],{"class":51403},"  wifis",[41,122316,122298],{"class":275},[41,122318,122319,122322],{"class":43,"line":70},[41,122320,122321],{"class":51403},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[41,122323,122298],{"class":275},[41,122325,122326,122329,122331,122334],{"class":43,"line":76},[41,122327,122328],{"class":51403},"      renderer",[41,122330,51540],{"class":275},[41,122332,122333],{"class":378},"NetworkManager",[41,122335,2812],{"class":275},[41,122337,122338,122341],{"class":43,"line":83},[41,122339,122340],{"class":51403},"      match",[41,122342,122298],{"class":275},[41,122344,122345,122348,122350,122353],{"class":43,"line":89},[41,122346,122347],{"class":51403},"        name",[41,122349,51540],{"class":275},[41,122351,122352],{"class":378},"\"wlan0\"",[41,122354,2812],{"class":275},[41,122356,122357,122360,122362,122364],{"class":43,"line":96},[41,122358,122359],{"class":51403},"      dhcp4",[41,122361,51540],{"class":275},[41,122363,1503],{"class":58},[41,122365,2812],{"class":275},[41,122367,122368,122371,122373,122375],{"class":43,"line":104},[41,122369,122370],{"class":51403},"      dhcp6",[41,122372,51540],{"class":275},[41,122374,1503],{"class":58},[41,122376,2812],{"class":275},[41,122378,122379,122382],{"class":43,"line":176},[41,122380,122381],{"class":51403},"      access-points",[41,122383,122298],{"class":275},[41,122385,122386,122389],{"class":43,"line":184},[41,122387,122388],{"class":378},"        \"EMIS_Vinci_Robocon_5G\"",[41,122390,122298],{"class":275},[41,122392,122393,122396],{"class":43,"line":1757},[41,122394,122395],{"class":51403},"          auth",[41,122397,122298],{"class":275},[41,122399,122400,122403,122405,122408],{"class":43,"line":1763},[41,122401,122402],{"class":51403},"            key-management",[41,122404,51540],{"class":275},[41,122406,122407],{"class":378},"\"psk\"",[41,122409,2812],{"class":275},[41,122411,122412,122415,122417,122420],{"class":43,"line":1768},[41,122413,122414],{"class":51403},"            password",[41,122416,51540],{"class":275},[41,122418,122419],{"class":378},"\"vinci666\"",[41,122421,2812],{"class":275},[41,122423,122424,122427],{"class":43,"line":1782},[41,122425,122426],{"class":51403},"          networkmanager",[41,122428,122298],{"class":275},[41,122430,122431,122434,122436,122439],{"class":43,"line":1787},[41,122432,122433],{"class":51403},"            uuid",[41,122435,51540],{"class":275},[41,122437,122438],{"class":378},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[41,122440,2812],{"class":275},[41,122442,122443,122446,122448,122451],{"class":43,"line":1793},[41,122444,122445],{"class":51403},"            name",[41,122447,51540],{"class":275},[41,122449,122450],{"class":378},"\"EMIS_Vinci_Robocon_5G\"",[41,122452,2812],{"class":275},[41,122454,122455,122458],{"class":43,"line":1814},[41,122456,122457],{"class":51403},"            passthrough",[41,122459,122298],{"class":275},[41,122461,122462,122465,122467,122470],{"class":43,"line":1819},[41,122463,122464],{"class":51403},"              wifi-security.auth-alg",[41,122466,51540],{"class":275},[41,122468,122469],{"class":378},"\"open\"",[41,122471,2812],{"class":275},[41,122473,122474,122477,122479,122482],{"class":43,"line":1833},[41,122475,122476],{"class":51403},"              ipv6.addr-gen-mode",[41,122478,51540],{"class":275},[41,122480,122481],{"class":378},"\"default\"",[41,122483,2812],{"class":275},[41,122485,122486,122489,122491,122494],{"class":43,"line":1838},[41,122487,122488],{"class":51403},"              ipv6.ip6-privacy",[41,122490,51540],{"class":275},[41,122492,122493],{"class":378},"\"-1\"",[41,122495,2812],{"class":275},[41,122497,122498,122501,122503,122505],{"class":43,"line":1867},[41,122499,122500],{"class":51403},"              proxy._",[41,122502,51540],{"class":275},[41,122504,7790],{"class":378},[41,122506,2812],{"class":275},[41,122508,122509,122512],{"class":43,"line":1872},[41,122510,122511],{"class":51403},"      networkmanager",[41,122513,122298],{"class":275},[41,122515,122516,122519,122521,122523],{"class":43,"line":1889},[41,122517,122518],{"class":51403},"        uuid",[41,122520,51540],{"class":275},[41,122522,122438],{"class":378},[41,122524,2812],{"class":275},[41,122526,122527,122529,122531],{"class":43,"line":1894},[41,122528,122347],{"class":51403},[41,122530,51540],{"class":275},[41,122532,122533],{"class":378},"\"EMIS_Vinci_Robocon_5G\"\n",[20,122535,122536],{},"将其改为新wifi的名和密码：",[32,122538,122540],{"className":122286,"code":122539,"language":122288,"meta":37,"style":37},"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",[24,122541,122542,122548,122557,122563,122570,122579,122587,122593,122599],{"__ignoreMap":37},[41,122543,122544,122546],{"class":43,"line":44},[41,122545,122295],{"class":51403},[41,122547,3877],{"class":275},[41,122549,122550,122552,122554],{"class":43,"line":51},[41,122551,122303],{"class":51403},[41,122553,51540],{"class":275},[41,122555,122556],{"class":58},"2\n",[41,122558,122559,122561],{"class":43,"line":62},[41,122560,122314],{"class":51403},[41,122562,3877],{"class":275},[41,122564,122565,122568],{"class":43,"line":70},[41,122566,122567],{"class":51403},"    wlan0",[41,122569,3877],{"class":275},[41,122571,122572,122574,122576],{"class":43,"line":76},[41,122573,122359],{"class":51403},[41,122575,51540],{"class":275},[41,122577,122578],{"class":58},"true\n",[41,122580,122581,122583,122585],{"class":43,"line":83},[41,122582,122370],{"class":51403},[41,122584,51540],{"class":275},[41,122586,122578],{"class":58},[41,122588,122589,122591],{"class":43,"line":89},[41,122590,122381],{"class":51403},[41,122592,3877],{"class":275},[41,122594,122595,122597],{"class":43,"line":96},[41,122596,122388],{"class":378},[41,122598,3877],{"class":275},[41,122600,122601,122604,122606],{"class":43,"line":104},[41,122602,122603],{"class":51403},"          password",[41,122605,51540],{"class":275},[41,122607,122608],{"class":378},"\"vinci666\"\n",[20,122610,122611],{},"工控机开机即可连上网。",[15,122613,122615],{"id":122614},"_72-ssh远程开发","7.2 SSH远程开发",[241,122617,122619],{"id":122618},"_721-环境准备","7.2.1 环境准备",[20,122621,122622],{},[423,122623,122624],{},"1.硬件准备",[20,122626,122627],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[20,122629,122630],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[20,122632,122633],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[20,122635,122636],{},[423,122637,122638],{},"2.设置固定IP",[20,122640,122641],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[20,122643,122644],{},"1.进入设置界面",[20,122646,122647],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[20,122649,122650],{},[1603,122651],{"alt":37,"src":122652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[20,122654,122655],{},"2.配置所连接的网络",[20,122657,122658],{},[1603,122659],{"alt":37,"src":122660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[20,122662,122663],{},"3.设置固定IP",[20,122665,122666],{},"查看当前IP地址。",[20,122668,122669],{},[1603,122670],{"alt":37,"src":122671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[20,122673,122674],{},"设置固定IP。",[20,122676,122677],{},[1603,122678],{"alt":37,"src":122679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[20,122681,122682],{},"至此，IP配置完毕。",[241,122684,122686],{"id":122685},"_722-环境搭建","7.2.2 环境搭建",[20,122688,122689],{},[423,122690,25856],{},[20,122692,122693],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[20,122695,122696],{},[423,122697,122698],{},"实现",[20,122700,122701],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[224,122703,122704,122707,122710,122713],{},[227,122705,122706],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[227,122708,122709],{},"远程主机启动SSH服务；",[227,122711,122712],{},"本地主机登陆远程主机；",[227,122714,122715],{},"实现数据传输。",[20,122717,122718],{},"1.安装SSH客户端与服务端",[20,122720,122721],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[32,122723,122725],{"className":120919,"code":122724,"language":120921,"meta":120922,"style":37}," sudo apt install openssh-server\n",[24,122726,122727],{"__ignoreMap":37},[41,122728,122729],{"class":43,"line":44},[41,122730,122724],{},[20,122732,122733],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[32,122735,122737],{"className":120919,"code":122736,"language":120921,"meta":120922,"style":37},"sudo apt install openssh-client\n",[24,122738,122739],{"__ignoreMap":37},[41,122740,122741],{"class":43,"line":44},[41,122742,122736],{},[20,122744,122745],{},"2.远程主机启动SSH服务",[20,122747,122748],{},"远程主机启动 ssh 服务命令如下：",[32,122750,122752],{"className":120919,"code":122751,"language":120921,"meta":120922,"style":37},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[24,122753,122754],{"__ignoreMap":37},[41,122755,122756],{"class":43,"line":44},[41,122757,122751],{},[20,122759,122760],{},"启动后可使用如下命令查看服务是否正常运行：",[32,122762,122764],{"className":120919,"code":122763,"language":120921,"meta":120922,"style":37},"ps -e | grep ssh\n",[24,122765,122766],{"__ignoreMap":37},[41,122767,122768],{"class":43,"line":44},[41,122769,122763],{},[20,122771,122772],{},"如果启动成功，会包含 sshd 程序。",[20,122774,122775],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[32,122777,122779],{"className":120919,"code":122778,"language":120921,"meta":120922,"style":37},"sudo systemctl enable ssh\n",[24,122780,122781],{"__ignoreMap":37},[41,122782,122783],{"class":43,"line":44},[41,122784,122778],{},[20,122786,122787],{},"3.本地远程登录",[20,122789,122790],{},"登录远程主机可以调用如下命令:",[32,122792,122794],{"className":117399,"code":122793,"language":117401,"meta":37,"style":37},"ssh -X 用户名@ip地址\n",[24,122795,122796],{"__ignoreMap":37},[41,122797,122798,122800,122803],{"class":43,"line":44},[41,122799,121750],{"class":54},[41,122801,122802],{"class":58}," -X",[41,122804,122805],{"class":378}," 用户名@ip地址\n",[20,122807,122808],{},"然后根据提示，录入登陆密码，即可成功登录。",[20,122810,122811],{},"如果退出，可以调用exit命令：",[32,122813,122815],{"className":120919,"code":122814,"language":120921,"meta":120922,"style":37},"exit\n",[24,122816,122817],{"__ignoreMap":37},[41,122818,122819],{"class":43,"line":44},[41,122820,122814],{},[20,122822,122823],{},[423,122824,122825],{},"4.实现数据传输",[20,122827,122828],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[20,122830,122831],{},"上传文件指令格式如下：",[32,122833,122835],{"className":120919,"code":122834,"language":120921,"meta":120922,"style":37},"scp 本地文件路径 账号@ip:路径\n",[24,122836,122837],{"__ignoreMap":37},[41,122838,122839],{"class":43,"line":44},[41,122840,122834],{},[20,122842,122843],{},"上传文件夹指令格式如下：",[32,122845,122847],{"className":120919,"code":122846,"language":120921,"meta":120922,"style":37},"scp -r 本地文件夹路径 账号@ip:路径\n",[24,122848,122849],{"__ignoreMap":37},[41,122850,122851],{"class":43,"line":44},[41,122852,122846],{},[20,122854,122855],{},"下载文件指令格式如下：",[32,122857,122859],{"className":120919,"code":122858,"language":120921,"meta":120922,"style":37},"scp 账号@ip:路径 本地文件夹路径\n",[24,122860,122861],{"__ignoreMap":37},[41,122862,122863],{"class":43,"line":44},[41,122864,122858],{},[20,122866,122867],{},"下载文件夹指令格式如下：",[32,122869,122871],{"className":120919,"code":122870,"language":120921,"meta":120922,"style":37},"scp -r 账号@ip:路径 本地文件夹路径\n",[24,122872,122873],{"__ignoreMap":37},[41,122874,122875],{"class":43,"line":44},[41,122876,122870],{},[20,122878,122879],{},[423,122880,122881],{},"优化",[20,122883,122884],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[224,122886,122887,122890],{},[227,122888,122889],{},"本地生成密钥对；",[227,122891,122892],{},"将公钥上传至远程主机。",[20,122894,122895],{},[423,122896,122897],{},"1.生成密钥对",[20,122899,122900],{},"本地客户端生成公私钥：（一路回车默认即可）",[32,122902,122904],{"className":120919,"code":122903,"language":120921,"meta":120922,"style":37},"ssh-keygen\n",[24,122905,122906],{"__ignoreMap":37},[41,122907,122908],{"class":43,"line":44},[41,122909,122903],{},[20,122911,122912],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[224,122914,122915,122918],{},[227,122916,122917],{},"id_rsa （私钥）；",[227,122919,122920],{},"id_rsa.pub (公钥)。",[20,122922,122923],{},[423,122924,122925],{},"2.公钥上传",[20,122927,122928],{},"上传指令如下：",[32,122930,122932],{"className":120919,"code":122931,"language":120921,"meta":120922,"style":37},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[24,122933,122934],{"__ignoreMap":37},[41,122935,122936],{"class":43,"line":44},[41,122937,122931],{},[20,122939,122940],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[20,122942,122943],{},"以后再远程登录就无需录入密码了。",[241,122945,122947],{"id":122946},"_723-使用vscode优化","7.2.3 使用VScode优化",[20,122949,122950],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[20,122952,122953],{},[423,122954,122955],{},"1.准备工作",[20,122957,122958],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[20,122960,122961],{},[423,122962,122963],{},"2.为VScode安装远程开发插件",[20,122965,122966,122967,122970,122971,122974,122975,28488],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[24,122968,122969],{},"扩展：商店","的搜索栏输入",[24,122972,122973],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[24,122976,122977],{},"安装",[20,122979,122980],{},[1603,122981],{"alt":37,"src":122982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[20,122984,122985],{},[423,122986,122987],{},"3.配置远程连接",[20,122989,122990,122991,122994,122995,122998],{},"步骤1：使用快捷键",[24,122992,122993],{},"ctrl + shift + p","打开命令输入窗口，并输入",[24,122996,122997],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[20,123000,123001],{},[1603,123002],{"alt":37,"src":123003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[20,123005,123006,123007,28488],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[24,123008,123009],{},"Add New SSH Host",[20,123011,123012],{},[1603,123013],{"alt":37,"src":123014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[20,123016,123017,123018,123021,123022,123025,123026,123029],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[24,123019,123020],{},"ssh +X ubuntu@192.168.43.164","，其中，",[24,123023,123024],{},"ubuntu","需要替换为你的登录用户名，",[24,123027,123028],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[20,123031,123032],{},[1603,123033],{"alt":37,"src":123034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[20,123036,123037],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[20,123039,123040],{},[1603,123041],{"alt":37,"src":123042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[20,123044,123045],{},[1603,123046],{"alt":37,"src":123047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[20,123049,123050],{},[423,123051,123052],{},"4.使用",[20,123054,123055,123056,122994,123058,123060],{},"步骤1：继续使用快捷键",[24,123057,122993],{},[24,123059,122997],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[20,123062,123063],{},[1603,123064],{"alt":37,"src":123065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[20,123067,123068,123069,123072],{},"或者，也可以点击侧边栏的",[24,123070,123071],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[20,123074,123075],{},[1603,123076],{"alt":37,"src":123077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[20,123079,123080,123081,123084,123085,123088],{},"步骤2：选择菜单栏的",[24,123082,123083],{},"文件","下的",[24,123086,123087],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[20,123090,123091],{},[1603,123092],{"alt":37,"src":123093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[20,123095,123096],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[15,123098,123100],{"id":123099},"_73-远程桌面","7.3 远程桌面",[20,123102,123103],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[20,123105,123106],{},"我们选择使用VNC来看。",[224,123108,123109],{},[227,123110,123111],{},"安装VNC服务器：",[20,123113,123114],{},"这里以TigerVNC为例进行安装：",[32,123116,123118],{"className":117399,"code":123117,"language":117401,"meta":37,"style":37},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[24,123119,123120],{"__ignoreMap":37},[41,123121,123122,123124,123126,123128,123131],{"class":43,"line":44},[41,123123,24713],{"class":54},[41,123125,117420],{"class":378},[41,123127,23970],{"class":378},[41,123129,123130],{"class":378}," tigervnc-standalone-server",[41,123132,123133],{"class":378}," tigervnc-common\n",[224,123135,123136],{"start":51},[227,123137,123138],{},"设置VNC密码：",[20,123140,123141],{},"为VNC用户设置密码，运行以下命令：",[32,123143,123145],{"className":117399,"code":123144,"language":117401,"meta":37,"style":37},"vncpasswd\n",[24,123146,123147],{"__ignoreMap":37},[41,123148,123149],{"class":43,"line":44},[41,123150,123144],{"class":54},[224,123152,123153],{"start":62},[227,123154,123155],{},"配置VNC启动脚本:",[20,123157,123158],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[32,123160,123162],{"className":117399,"code":123161,"language":117401,"meta":37,"style":37},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[24,123163,123164,123173],{"__ignoreMap":37},[41,123165,123166,123168,123170],{"class":43,"line":44},[41,123167,101369],{"class":54},[41,123169,29319],{"class":58},[41,123171,123172],{"class":378}," ~\u002F.vnc\n",[41,123174,123175,123178],{"class":43,"line":51},[41,123176,123177],{"class":54},"nano",[41,123179,123180],{"class":378}," ~\u002F.vnc\u002Fxstartup\n",[20,123182,123183],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[32,123185,123187],{"className":117399,"code":123186,"language":117401,"meta":37,"style":37},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[24,123188,123189,123194,123202,123209],{"__ignoreMap":37},[41,123190,123191],{"class":43,"line":44},[41,123192,123193],{"class":47},"#!\u002Fbin\u002Fsh\n",[41,123195,123196,123199],{"class":43,"line":51},[41,123197,123198],{"class":58},"unset",[41,123200,123201],{"class":378}," SESSION_MANAGER\n",[41,123203,123204,123206],{"class":43,"line":62},[41,123205,123198],{"class":58},[41,123207,123208],{"class":378}," DBUS_SESSION_BUS_ADDRESS\n",[41,123210,123211],{"class":43,"line":70},[41,123212,123213],{"class":54},"gnome-session\n",[20,123215,123216],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[224,123218,123219],{"start":70},[227,123220,123221],{},"给予执行权限：",[20,123223,123224],{},"为xstartup文件设置执行权限：",[32,123226,123228],{"className":117399,"code":123227,"language":117401,"meta":37,"style":37},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[24,123229,123230],{"__ignoreMap":37},[41,123231,123232,123234,123237],{"class":43,"line":44},[41,123233,24748],{"class":54},[41,123235,123236],{"class":378}," +x",[41,123238,123180],{"class":378},[224,123240,123241],{"start":76},[227,123242,123243],{},"启动VNC服务器：",[32,123245,123247],{"className":117399,"code":123246,"language":117401,"meta":37,"style":37},"vncserver -geometry 1920x1080 -localhost=0\n",[24,123248,123249],{"__ignoreMap":37},[41,123250,123251,123254,123257,123260],{"class":43,"line":44},[41,123252,123253],{"class":54},"vncserver",[41,123255,123256],{"class":58}," -geometry",[41,123258,123259],{"class":378}," 1920x1080",[41,123261,123262],{"class":58}," -localhost=0\n",[20,123264,123265],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[20,123267,123268],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[224,123270,123271],{"start":83},[227,123272,123273],{},"查看已开启的VNC服务器：",[32,123275,123277],{"className":117399,"code":123276,"language":117401,"meta":37,"style":37},"vncserver -list\n",[24,123278,123279],{"__ignoreMap":37},[41,123280,123281,123283],{"class":43,"line":44},[41,123282,123253],{"class":54},[41,123284,123285],{"class":58}," -list\n",[20,123287,123288],{},[1603,123289],{"alt":37,"src":123290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[224,123292,123293],{"start":89},[227,123294,123295],{},"连接到VNC服务器：",[20,123297,123298],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[224,123300,123301],{"start":96},[227,123302,123303],{},"停止VNC服务器：",[20,123305,123306],{},"如果需要停止VNC服务器，可以使用以下命令：",[32,123308,123310],{"className":117399,"code":123309,"language":117401,"meta":37,"style":37},"vncserver -kill :1\n",[24,123311,123312],{"__ignoreMap":37},[41,123313,123314,123316,123319],{"class":43,"line":44},[41,123315,123253],{"class":54},[41,123317,123318],{"class":58}," -kill",[41,123320,123321],{"class":378}," :1\n",[20,123323,123324],{},"将:1替换为你实际使用的显示编号。",[20,123326,123327],{},[1603,123328],{"alt":37,"src":123329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[20,123331,123332],{},[1603,123333],{"alt":37,"src":123334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[15,123336,123338],{"id":123337},"_74-usb端口设置","7.4 USB端口设置",[20,123340,123341],{},[423,123342,123343],{},"首先先配置好权限",[32,123345,123347],{"className":117399,"code":123346,"language":117401,"meta":37,"style":37},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[24,123348,123349,123354,123367,123374,123379],{"__ignoreMap":37},[41,123350,123351],{"class":43,"line":44},[41,123352,123353],{"class":47},"# 将用户权限提高\n",[41,123355,123356,123358,123360,123362,123365],{"class":43,"line":51},[41,123357,24713],{"class":54},[41,123359,26677],{"class":378},[41,123361,26680],{"class":58},[41,123363,123364],{"class":378}," dialout",[41,123366,26685],{"class":275},[41,123368,123369,123371],{"class":43,"line":62},[41,123370,26704],{"class":54},[41,123372,123373],{"class":378}," dialout\n",[41,123375,123376],{"class":43,"line":70},[41,123377,123378],{"class":47},"# 查看下面命令是否输出dialout（若输出才正常）\n",[41,123380,123381],{"class":43,"line":76},[41,123382,123383],{"class":54},"groups\n",[20,123385,123386],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[241,123388,123390],{"id":123389},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[20,123392,123393,123396],{},[423,123394,123395],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[20,123398,123399,123402],{},[423,123400,123401],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[20,123404,123405],{},[423,123406,123407],{},"流程如下：",[20,123409,123410],{},"（1）.查找设备idVendor和idProduct",[20,123412,123413,123414,123417],{},"接入两个USB设备，在终端调用指令",[24,123415,123416],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[20,123419,123420],{},[1603,123421],{"alt":37,"src":123422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[20,123424,123425,123426,123429],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[24,123427,123428],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[20,123431,123432],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[20,123434,123435],{},"（2）.编写映射规则",[20,123437,123438,123439,123442],{},"在",[24,123440,123441],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[32,123444,123446],{"className":117399,"code":123445,"language":117401,"meta":37,"style":37},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[24,123447,123448],{"__ignoreMap":37},[41,123449,123450,123452,123454],{"class":43,"line":44},[41,123451,24713],{"class":54},[41,123453,118686],{"class":378},[41,123455,123456],{"class":378}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[20,123458,123459],{},"输入如下内容：",[32,123461,123463],{"className":117399,"code":123462,"language":117401,"meta":37,"style":37},"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",[24,123464,123465,123495],{"__ignoreMap":37},[41,123466,123467,123470,123472,123475,123478,123481,123484,123486,123489,123492],{"class":43,"line":44},[41,123468,123469],{"class":275},"KERNEL",[41,123471,321],{"class":271},[41,123473,123474],{"class":378},"=\"ttyUSB*\",",[41,123476,123477],{"class":54}," ATTRS",[41,123479,123480],{"class":378},"{idVendor}==",[41,123482,123483],{"class":54},"\"10c4\"",[41,123485,651],{"class":54},[41,123487,123488],{"class":378}," ATTRS{idProduct}==\"ea60\",",[41,123490,123491],{"class":378}," MODE:=\"0777\",",[41,123493,123494],{"class":378}," SYMLINK+=\"mylidar\"\n",[41,123496,123497,123499,123501,123503,123505,123507,123510,123512,123515,123517],{"class":43,"line":51},[41,123498,123469],{"class":275},[41,123500,321],{"class":271},[41,123502,123474],{"class":378},[41,123504,123477],{"class":54},[41,123506,123480],{"class":378},[41,123508,123509],{"class":54},"\"1a86\"",[41,123511,651],{"class":54},[41,123513,123514],{"class":378}," ATTRS{idProduct}==\"7523\",",[41,123516,123491],{"class":378},[41,123518,123519],{"class":378}," SYMLINK+=\"mycar\"\n",[20,123521,123522],{},"代码解释：",[1280,123524,123525,123528,123531,123534],{},[227,123526,123527],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[227,123529,123530],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[227,123532,123533],{},"SYMLINK是符号连接，即绑定的别名；",[227,123535,123536],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[20,123538,123539,123540,123543,123546],{},"***小提示：***",[23691,123541,123542],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[24,123544,123545],{},"\u002Fetc\u002Fudev\u002Frule.d",[23691,123547,123548],{},"目录即可。",[20,123550,123551],{},"表格 还在加载中，请等待加载完成后再尝试复制",[20,123553,123554],{},"（3）.使规则生效",[20,123556,123557],{},"在终端下输入如下指令：",[32,123559,123561],{"className":117399,"code":123560,"language":117401,"meta":37,"style":37},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[24,123562,123563,123568,123580,123591,123595,123600,123613],{"__ignoreMap":37},[41,123564,123565],{"class":43,"line":44},[41,123566,123567],{"class":47},"# Ubuntu用下方命令\n",[41,123569,123570,123572,123574,123577],{"class":43,"line":51},[41,123571,24713],{"class":54},[41,123573,120151],{"class":378},[41,123575,123576],{"class":378}," udev",[41,123578,123579],{"class":378}," reload\n",[41,123581,123582,123584,123586,123588],{"class":43,"line":62},[41,123583,24713],{"class":54},[41,123585,120151],{"class":378},[41,123587,123576],{"class":378},[41,123589,123590],{"class":378}," restart\n",[41,123592,123593],{"class":43,"line":70},[41,123594,80],{"emptyLinePlaceholder":79},[41,123596,123597],{"class":43,"line":76},[41,123598,123599],{"class":47},"#Fedora用下方命令\n",[41,123601,123602,123604,123607,123610],{"class":43,"line":83},[41,123603,24713],{"class":54},[41,123605,123606],{"class":378}," udevadm",[41,123608,123609],{"class":378}," control",[41,123611,123612],{"class":58}," --reload\n",[41,123614,123615,123617,123619],{"class":43,"line":89},[41,123616,24713],{"class":54},[41,123618,123606],{"class":378},[41,123620,123621],{"class":378}," trigger\n",[20,123623,123624],{},"再重新插拔设备即可。",[20,123626,123627],{},"（4）.测试",[20,123629,123630],{},"终端下输入如下指令",[32,123632,123634],{"className":117399,"code":123633,"language":117401,"meta":37,"style":37},"ll \u002Fdev | grep ttyUSB\n",[24,123635,123636],{"__ignoreMap":37},[41,123637,123638,123641,123644,123646,123648],{"class":43,"line":44},[41,123639,123640],{"class":54},"ll",[41,123642,123643],{"class":378}," \u002Fdev",[41,123645,25212],{"class":271},[41,123647,30339],{"class":54},[41,123649,123650],{"class":378}," ttyUSB\n",[20,123652,123653],{},"运行结果如下：",[20,123655,123656],{},[1603,123657],{"alt":37,"src":123658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[20,123660,123661,123662,123665],{},"也可以多次插拔USB设备，会发现设备端口",[24,123663,123664],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[20,123667,123668],{},[423,123669,118067],{},[20,123671,123672],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[241,123674,123676],{"id":123675},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[20,123678,123679,123681],{},[423,123680,123395],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[20,123683,123684,123686],{},[423,123685,123401],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[20,123688,123689],{},[423,123690,123407],{},[20,123692,123693],{},"（1）.查看所连接的主机USB接口的KERNELS",[20,123695,123696],{},"调用如下指令查看第一台雷达的USB信息：",[32,123698,123700],{"className":117399,"code":123699,"language":117401,"meta":37,"style":37},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[24,123701,123702,123722],{"__ignoreMap":37},[41,123703,123704,123707,123709,123712,123715,123717,123719],{"class":43,"line":44},[41,123705,123706],{"class":54},"udevadm",[41,123708,69924],{"class":378},[41,123710,123711],{"class":58}," --attribute-walk",[41,123713,123714],{"class":58}," --name=\u002Fdev\u002FttyUSB0",[41,123716,25212],{"class":271},[41,123718,30339],{"class":54},[41,123720,123721],{"class":378}," KERNELS\n",[41,123723,123724,123726,123728,123730,123733,123735,123737],{"class":43,"line":51},[41,123725,123706],{"class":54},[41,123727,69924],{"class":378},[41,123729,123711],{"class":58},[41,123731,123732],{"class":58}," --name=\u002Fdev\u002FttyACM0",[41,123734,25212],{"class":271},[41,123736,30339],{"class":54},[41,123738,123721],{"class":378},[20,123740,123741],{},[1603,123742],{"alt":37,"src":123743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[20,123745,123746],{},"调用如下指令查看第二台雷达的USB信息：",[32,123748,123750],{"className":117399,"code":123749,"language":117401,"meta":37,"style":37},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[24,123751,123752],{"__ignoreMap":37},[41,123753,123754,123756,123758,123760,123763,123765,123767],{"class":43,"line":44},[41,123755,123706],{"class":54},[41,123757,69924],{"class":378},[41,123759,123711],{"class":58},[41,123761,123762],{"class":58}," --name=\u002Fdev\u002FttyUSB1",[41,123764,25212],{"class":271},[41,123766,30339],{"class":54},[41,123768,123721],{"class":378},[20,123770,123771,123772,123775,123776,123779,123780,123783],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[24,123773,123774],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[24,123777,123778],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[423,123781,123782],{},"唯一性标识","”。",[20,123785,123435],{},[20,123787,123438,123788,123790],{},[24,123789,123441],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[32,123792,123793],{"className":117399,"code":123445,"language":117401,"meta":37,"style":37},[24,123794,123795],{"__ignoreMap":37},[41,123796,123797,123799,123801],{"class":43,"line":44},[41,123798,24713],{"class":54},[41,123800,118686],{"class":378},[41,123802,123456],{"class":378},[32,123804,123806],{"className":117399,"code":123805,"language":117401,"meta":37,"style":37},"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",[24,123807,123808,123837],{"__ignoreMap":37},[41,123809,123810,123812,123814,123816,123819,123821,123824,123827,123829,123832,123834],{"class":43,"line":44},[41,123811,123469],{"class":275},[41,123813,321],{"class":271},[41,123815,123474],{"class":378},[41,123817,123818],{"class":275}," KERNELS",[41,123820,321],{"class":271},[41,123822,123823],{"class":378},"=\"1-1.3:1.0\",",[41,123825,123826],{"class":54}," MODE:",[41,123828,321],{"class":378},[41,123830,123831],{"class":54},"\"0777\"",[41,123833,651],{"class":54},[41,123835,123836],{"class":378}," SYMLINK+=\"rplidar_front\"\n",[41,123838,123839,123841,123843,123845,123847,123849,123852,123854,123856,123858,123860],{"class":43,"line":51},[41,123840,123469],{"class":275},[41,123842,321],{"class":271},[41,123844,123474],{"class":378},[41,123846,123818],{"class":275},[41,123848,321],{"class":271},[41,123850,123851],{"class":378},"=\"1-1.4:1.0\",",[41,123853,123826],{"class":54},[41,123855,321],{"class":378},[41,123857,123831],{"class":54},[41,123859,651],{"class":54},[41,123861,123862],{"class":378}," SYMLINK+=\"rplidar_back\"\n",[20,123864,123554],{},[20,123866,123557],{},[32,123868,123869],{"className":117399,"code":123560,"language":117401,"meta":37,"style":37},[24,123870,123871,123875,123885,123895,123899,123903,123913],{"__ignoreMap":37},[41,123872,123873],{"class":43,"line":44},[41,123874,123567],{"class":47},[41,123876,123877,123879,123881,123883],{"class":43,"line":51},[41,123878,24713],{"class":54},[41,123880,120151],{"class":378},[41,123882,123576],{"class":378},[41,123884,123579],{"class":378},[41,123886,123887,123889,123891,123893],{"class":43,"line":62},[41,123888,24713],{"class":54},[41,123890,120151],{"class":378},[41,123892,123576],{"class":378},[41,123894,123590],{"class":378},[41,123896,123897],{"class":43,"line":70},[41,123898,80],{"emptyLinePlaceholder":79},[41,123900,123901],{"class":43,"line":76},[41,123902,123599],{"class":47},[41,123904,123905,123907,123909,123911],{"class":43,"line":83},[41,123906,24713],{"class":54},[41,123908,123606],{"class":378},[41,123910,123609],{"class":378},[41,123912,123612],{"class":58},[41,123914,123915,123917,123919],{"class":43,"line":89},[41,123916,24713],{"class":54},[41,123918,123606],{"class":378},[41,123920,123621],{"class":378},[20,123922,123624],{},[20,123924,123627],{},[20,123926,123630,123927,123930],{},[24,123928,123929],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[20,123932,123933],{},[1603,123934],{"alt":37,"src":123935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[20,123937,123938],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[20,123940,123941,123943],{},[423,123942,118067],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[241,123945,123947],{"id":123946},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[20,123949,123950],{},"（1）.查看所连接的主机USB接口的信息",[32,123952,123954],{"className":117399,"code":123953,"language":117401,"meta":37,"style":37},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[24,123955,123956,123986],{"__ignoreMap":37},[41,123957,123958,123960,123962,123965,123967,123969,123971,123973,123976,123979,123981,123984],{"class":43,"line":44},[41,123959,123706],{"class":54},[41,123961,69924],{"class":378},[41,123963,123964],{"class":58}," -a",[41,123966,29319],{"class":58},[41,123968,28525],{"class":275},[41,123970,123706],{"class":54},[41,123972,69924],{"class":378},[41,123974,123975],{"class":58}," -q",[41,123977,123978],{"class":378}," path",[41,123980,25218],{"class":58},[41,123982,123983],{"class":378}," \u002Fdev\u002FttyACM0",[41,123985,282],{"class":275},[41,123987,123988,123990,123992,123994,123996,123998,124000,124002,124004,124006,124008,124011],{"class":43,"line":51},[41,123989,123706],{"class":54},[41,123991,69924],{"class":378},[41,123993,123964],{"class":58},[41,123995,29319],{"class":58},[41,123997,28525],{"class":275},[41,123999,123706],{"class":54},[41,124001,69924],{"class":378},[41,124003,123975],{"class":58},[41,124005,123978],{"class":378},[41,124007,25218],{"class":58},[41,124009,124010],{"class":378}," \u002Fdev\u002FttyUSB0",[41,124012,282],{"class":275},[20,124014,124015],{},[1603,124016],{"alt":37,"src":124017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[20,124019,124020],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[20,124022,123435],{},[20,124024,123438,124025,123790],{},[24,124026,123441],{},[32,124028,124029],{"className":117399,"code":123445,"language":117401,"meta":37,"style":37},[24,124030,124031],{"__ignoreMap":37},[41,124032,124033,124035,124037],{"class":43,"line":44},[41,124034,24713],{"class":54},[41,124036,118686],{"class":378},[41,124038,123456],{"class":378},[32,124040,124042],{"className":117399,"code":124041,"language":117401,"meta":37,"style":37},"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",[24,124043,124044,124072,124098],{"__ignoreMap":37},[41,124045,124046,124048,124050,124053,124055,124057,124059,124061,124064,124067,124069],{"class":43,"line":44},[41,124047,123469],{"class":275},[41,124049,321],{"class":271},[41,124051,124052],{"class":378},"=\"ttyACM*\",",[41,124054,123477],{"class":54},[41,124056,123480],{"class":378},[41,124058,123509],{"class":54},[41,124060,651],{"class":54},[41,124062,124063],{"class":378}," ATTRS{idProduct}==\"55d4\",",[41,124065,124066],{"class":378}," ATTRS{serial}==\"0001\",",[41,124068,123491],{"class":378},[41,124070,124071],{"class":378}," SYMLINK+=\"ttyACM_MCU\"\n",[41,124073,124074,124076,124078,124080,124082,124084,124086,124088,124090,124093,124095],{"class":43,"line":51},[41,124075,123469],{"class":275},[41,124077,321],{"class":271},[41,124079,124052],{"class":378},[41,124081,123477],{"class":54},[41,124083,123480],{"class":378},[41,124085,123509],{"class":54},[41,124087,651],{"class":54},[41,124089,124063],{"class":378},[41,124091,124092],{"class":378}," ATTRS{serial}==\"0002\",",[41,124094,123491],{"class":378},[41,124096,124097],{"class":378}," SYMLINK+=\"ttyACM_Lidar\"\n",[41,124099,124100,124102,124104,124106,124108,124110,124112,124114,124116,124118],{"class":43,"line":62},[41,124101,123469],{"class":275},[41,124103,321],{"class":271},[41,124105,123474],{"class":378},[41,124107,123477],{"class":54},[41,124109,123480],{"class":378},[41,124111,123509],{"class":54},[41,124113,651],{"class":54},[41,124115,123514],{"class":378},[41,124117,123491],{"class":378},[41,124119,124120],{"class":378}," SYMLINK+=\"ttyUSB_IMU\"\n",[20,124122,123554],{},[20,124124,123557],{},[32,124126,124127],{"className":117399,"code":123560,"language":117401,"meta":37,"style":37},[24,124128,124129,124133,124143,124153,124157,124161,124171],{"__ignoreMap":37},[41,124130,124131],{"class":43,"line":44},[41,124132,123567],{"class":47},[41,124134,124135,124137,124139,124141],{"class":43,"line":51},[41,124136,24713],{"class":54},[41,124138,120151],{"class":378},[41,124140,123576],{"class":378},[41,124142,123579],{"class":378},[41,124144,124145,124147,124149,124151],{"class":43,"line":62},[41,124146,24713],{"class":54},[41,124148,120151],{"class":378},[41,124150,123576],{"class":378},[41,124152,123590],{"class":378},[41,124154,124155],{"class":43,"line":70},[41,124156,80],{"emptyLinePlaceholder":79},[41,124158,124159],{"class":43,"line":76},[41,124160,123599],{"class":47},[41,124162,124163,124165,124167,124169],{"class":43,"line":83},[41,124164,24713],{"class":54},[41,124166,123606],{"class":378},[41,124168,123609],{"class":378},[41,124170,123612],{"class":58},[41,124172,124173,124175,124177],{"class":43,"line":89},[41,124174,24713],{"class":54},[41,124176,123606],{"class":378},[41,124178,123621],{"class":378},[20,124180,124181,124182],{},"再重新插拔设备即可，或者 ",[423,124183,124184],{},"直接重启系统。",[20,124186,123627],{},[20,124188,123630,124189,123930],{},[24,124190,123929],{},[20,124192,124193],{},[1603,124194],{"alt":37,"src":124195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[20,124197,123938],{},[20,124199,124200,124202],{},[423,124201,118067],{}," 一些设备可能没有串口号等。",[241,124204,124206],{"id":124205},"_744-其他注意事项","7.4.4 其他注意事项",[20,124208,124209,124210,124212,124213,124216,124217,18548,124220,124223,124224,124226],{},"并非所有的USB设备端口号都是",[24,124211,123664],{},"的格式，比如Arduino的端口号可能是",[24,124214,124215],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[24,124218,124219],{},"videon",[24,124221,124222],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[24,124225,124219],{},"端口，绑定时需要关联的也是该接口。",[20,124228,124229,124230,124233,124234,124237,124238,124240,124241,124244,124245,124248,124249,124252,124253,124252,124256,124252,124259,28488],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[24,124231,124232],{},"KERNEL==\"ttyUSB*\"","修改为",[24,124235,124236],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[24,124239,124232],{},"修改为类似于",[24,124242,124243],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[24,124246,124247],{},"video[0,2,4,6]","表示可以绑定的端口为",[24,124250,124251],{},"video0","或",[24,124254,124255],{},"video2",[24,124257,124258],{},"video4",[24,124260,124261],{},"video6",[15,124263,124265],{"id":124264},"_75-挂载内网网页","7.5 挂载内网网页",[20,124267,124268],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[20,124270,124271],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[20,124273,124274],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[20,124276,124277,124278],{},"Termux 下载地址（F-Droid）：",[511,124279,124280],{"href":124280,"rel":124281},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24001],[20,124283,124284],{},"首先打开app后，先更新软件缓存：",[32,124286,124288],{"className":117399,"code":124287,"language":117401,"meta":37,"style":37},"pkg update\n",[24,124289,124290],{"__ignoreMap":37},[41,124291,124292,124295],{"class":43,"line":44},[41,124293,124294],{"class":54},"pkg",[41,124296,26345],{"class":378},[20,124298,124299],{},"然后换源",[32,124301,124303],{"className":117399,"code":124302,"language":117401,"meta":37,"style":37},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[24,124304,124305],{"__ignoreMap":37},[41,124306,124307,124309,124312],{"class":43,"line":44},[41,124308,123177],{"class":54},[41,124310,124311],{"class":275}," $PREFIX",[41,124313,124314],{"class":378},"\u002Fetc\u002Fapt\u002Fsources.list\n",[20,124316,124317],{},"将该文件内容替换为下面：",[32,124319,124321],{"className":117399,"code":124320,"language":117401,"meta":37,"style":37},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[24,124322,124323],{"__ignoreMap":37},[41,124324,124325,124328,124331,124334],{"class":43,"line":44},[41,124326,124327],{"class":54},"deb",[41,124329,124330],{"class":378}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[41,124332,124333],{"class":378}," stable",[41,124335,124336],{"class":378}," main\n",[1280,124338,124339,124366],{},[227,124340,124341,124342,124344,124345],{},"如果你使用的是",[24,124343,123177],{},"编辑器：",[1280,124346,124347,124354,124360],{},[227,124348,124349,124350,124353],{},"按 ",[24,124351,124352],{},"Ctrl+O"," 保存文件。",[227,124355,124349,124356,124359],{},[24,124357,124358],{},"Enter"," 确认文件名。",[227,124361,124349,124362,124365],{},[24,124363,124364],{},"Ctrl+X"," 退出编辑器。",[227,124367,124341,124368,124344,124371],{},[24,124369,124370],{},"vim",[1280,124372,124373,124379],{},[227,124374,124349,124375,124378],{},[24,124376,124377],{},"Esc"," 退出编辑模式。",[227,124380,124381,124382,124384],{},"输入 ",[24,124383,119324],{}," 保存并退出。",[20,124386,124387],{},"接下来重新更新软件源：",[32,124389,124391],{"className":117399,"code":124390,"language":117401,"meta":37,"style":37},"pkg update && pkg upgrade\n",[24,124392,124393],{"__ignoreMap":37},[41,124394,124395,124397,124399,124401,124403],{"class":43,"line":44},[41,124396,124294],{"class":54},[41,124398,117450],{"class":378},[41,124400,26293],{"class":275},[41,124402,124294],{"class":54},[41,124404,117436],{"class":378},[20,124406,124407],{},"安装python：",[32,124409,124411],{"className":117399,"code":124410,"language":117401,"meta":37,"style":37},"pkg install python\n",[24,124412,124413],{"__ignoreMap":37},[41,124414,124415,124417,124419],{"class":43,"line":44},[41,124416,124294],{"class":54},[41,124418,23970],{"class":378},[41,124420,124421],{"class":378}," python\n",[20,124423,124424,26576],{},[423,124425,124426],{},"通过Termux访问设备存储",[20,124428,124429],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[32,124431,124433],{"className":117399,"code":124432,"language":117401,"meta":37,"style":37},"termux-setup-storage\n",[24,124434,124435],{"__ignoreMap":37},[41,124436,124437],{"class":43,"line":44},[41,124438,124432],{"class":54},[224,124440,124441],{},[227,124442,124443,26576,124446],{},[423,124444,124445],{},"进入HTML文件所在的目录",[224,124447,124448],{},[227,124449,124450,124451,124453],{},"使用",[24,124452,101379],{},"命令进入HTML文件所在的目录：",[32,124455,124457],{"className":117399,"code":124456,"language":117401,"meta":37,"style":37},"cd ~\u002Fyour_html_folder\n",[24,124458,124459],{"__ignoreMap":37},[41,124460,124461,124463],{"class":43,"line":44},[41,124462,101379],{"class":58},[41,124464,124465],{"class":378}," ~\u002Fyour_html_folder\n",[224,124467,124468],{"start":51},[227,124469,124470,26576,124473,124478,124495],{},[423,124471,124472],{},"启动Python HTTP服务器",[224,124474,124475],{},[227,124476,124477],{},"运行以下命令启动一个简单的HTTP服务器：",[32,124479,124481],{"className":117399,"code":124480,"language":117401,"meta":37,"style":37},"python -m http.server 8000\n",[24,124482,124483],{"__ignoreMap":37},[41,124484,124485,124487,124489,124492],{"class":43,"line":44},[41,124486,30483],{"class":54},[41,124488,100985],{"class":58},[41,124490,124491],{"class":378}," http.server",[41,124493,124494],{"class":58}," 8000\n",[224,124496,124497],{"start":62},[227,124498,124499,124500,124503],{},"这会在端口",[24,124501,124502],{},"8000","上启动一个Web服务器。",[1280,124505,124506],{},[227,124507,124508],{},"启动服务器后，Termux会显示日志信息，例如：",[32,124510,124512],{"className":120919,"code":124511,"language":120921,"meta":120922,"style":37},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[24,124513,124514],{"__ignoreMap":37},[41,124515,124516],{"class":43,"line":44},[41,124517,124511],{},[1280,124519,124520],{},[227,124521,124522],{},"这表示服务器已成功启动。",[20,124524,124525],{},[423,124526,124527],{},"在浏览器中访问HTML文件",[224,124529,124530],{},[227,124531,124532,26576,124535,124540],{},[423,124533,124534],{},"在同一设备上访问",[224,124536,124537],{},[227,124538,124539],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[32,124541,124544],{"className":124542,"code":124543,"language":71767,"meta":37,"style":37},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[24,124545,124546],{"__ignoreMap":37},[41,124547,124548,124551],{"class":43,"line":44},[41,124549,124550],{"class":275},"http:",[41,124552,124553],{"class":47},"\u002F\u002Flocalhost:8000\n",[1280,124555,124556],{},[227,124557,124558,124559,124562],{},"如果HTML文件中有",[24,124560,124561],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[15,124564,124566],{"id":124565},"_76-linux重点知识","7.6 Linux重点知识",[241,124568,124570],{"id":124569},"_761-关于点的说明","7.6.1 关于点的说明",[20,124572,124573],{},[1603,124574],{"alt":37,"src":124575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[20,124577,124578],{},"一点本目录，两点上目录",[241,124580,124582],{"id":124581},"_762-目录","7.6.2 目录",[22136,124584,124586],{"id":124585},"_7621-系统启动必须","7.6.2.1 系统启动必须",[20,124588,124589],{},[423,124590,124591],{},"\u002Fboot:",[20,124593,124594],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[20,124596,124597],{},[423,124598,124599],{},"\u002Fetc:",[20,124601,124602],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[20,124604,124605],{},[423,124606,124607],{},"\u002Flib：",[20,124609,124610],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[20,124612,124613],{},[423,124614,124615],{},"\u002Fsys:",[20,124617,124618],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22136,124620,124622],{"id":124621},"_7622-指令集合","7.6.2.2 指令集合",[20,124624,124625],{},[423,124626,124627],{},"\u002Fbin:",[20,124629,124630],{},"为二进制文件的缩写，存放最经常使用的命令",[20,124632,124633],{},[423,124634,124635],{},"\u002Fsbin:",[20,124637,124638],{},"只有系统管理员才能使用的程序和指令",[22136,124640,124642],{"id":124641},"_7623-外部文件管理","7.6.2.3 外部文件管理",[20,124644,124645],{},[423,124646,124647],{},"\u002Fdev:",[20,124649,124650],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[20,124652,124653],{},[423,124654,124655],{},"\u002Fmedia:",[20,124657,124658],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[20,124660,124661],{},[423,124662,124663],{},"\u002Fmnt:",[20,124665,124666],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22136,124668,124670],{"id":124669},"_7624-临时文件","7.6.2.4 临时文件",[20,124672,124673],{},[423,124674,124675],{},"\u002Frun:",[20,124677,124678],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[20,124680,124681],{},[423,124682,124683],{},"\u002Flost+found:",[20,124685,124686],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[20,124688,124689],{},[423,124690,124691],{},"\u002Ftmp:",[20,124693,124694],{},"这个目录是用来存放一些临时文件的",[22136,124696,124698],{"id":124697},"_7625-账户","7.6.2.5 账户",[20,124700,124701],{},[423,124702,124703],{},"\u002Froot：",[20,124705,124706],{},"系统管理员的用户主目录",[20,124708,124709,26576],{},[423,124710,124711],{},"\u002Fhome",[20,124713,124714],{},"用户的主目录，以用户的账号命名的",[20,124716,124717,26576],{},[423,124718,124719],{},"\u002Fusr",[20,124721,124722],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[20,124724,124725],{},[423,124726,124727],{},"\u002Fusr\u002Fbin：",[20,124729,124730],{},"系统用户使用的应用程序与指令",[20,124732,124733],{},[423,124734,124735],{},"\u002Fusr\u002Fsbin：",[20,124737,124738],{},"超级用户使用的比较高级的管理程序和系统守护程序",[20,124740,124741],{},[423,124742,124743],{},"\u002Fusr\u002Fsrc：",[20,124745,124746],{},"内核源代码默认的放置目录",[22136,124748,124750],{"id":124749},"_7626-运行过程要用","7.6.2.6 运行过程要用",[20,124752,124753],{},[423,124754,124755],{},"\u002Fvar：",[20,124757,124758],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[20,124760,124761],{},[423,124762,124763],{},"\u002Fproc:",[20,124765,124766,124767,124770],{},"管理 ",[423,124768,124769],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22136,124772,124774],{"id":124773},"_7627-扩展用的","7.6.2.7 扩展用的",[20,124776,124777],{},[423,124778,124779],{},"\u002Fopt:",[20,124781,124782],{},"默认是空的，我们安装额外软件可以放在这个里面",[20,124784,124785],{},[423,124786,124787],{},"\u002Fsrv:",[20,124789,124790],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[241,124792,124794],{"id":124793},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[20,124796,124797],{},[1603,124798],{"alt":37,"src":124799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[20,124801,124802],{},"windows-->linux:",[20,124804,124805],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[20,124807,124808],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[20,124810,124811],{},"linux传输文件到windows",[20,124813,124814],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[241,124816,124818],{"id":124817},"_764-易忘知识","7.6.4 易忘知识",[20,124820,124821],{},"操作系统内核查看",[32,124823,124824],{"className":117399,"code":121393,"language":117401,"meta":37,"style":37},[24,124825,124826],{"__ignoreMap":37},[41,124827,124828,124830],{"class":43,"line":44},[41,124829,70307],{"class":54},[41,124831,121402],{"class":58},[20,124833,124834],{},[1603,124835],{"alt":37,"src":124836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[20,124838,124839],{},[1603,124840],{"alt":37,"src":124841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[32,124843,124845],{"className":117399,"code":124844,"language":117401,"meta":37,"style":37},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[24,124846,124847,124859],{"__ignoreMap":37},[41,124848,124849,124851,124854,124857],{"class":43,"line":44},[41,124850,121610],{"class":54},[41,124852,124853],{"class":378}," mvtest",[41,124855,124856],{"class":378}," mvtest2",[41,124858,2812],{"class":275},[41,124860,124861],{"class":43,"line":51},[41,124862,124863],{"class":54},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[20,124865,124866],{},[1603,124867],{"alt":37,"src":124868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[20,124870,124871],{},[1603,124872],{"alt":37,"src":124873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[20,124875,124876,124877,124880],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[24,124878,124879],{},"du -a"," 可以快速查看磁盘使用细节。",[241,124882,124884],{"id":124883},"_765-vim","7.6.5 Vim",[20,124886,124887],{},[1603,124888],{"alt":37,"src":124889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[20,124891,124892],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[20,124894,124895],{},"一开始进去为命令模式，此时点击输入的字母为命令",[20,124897,124898],{},[423,124899,124900],{},"1.命令模式：",[20,124902,124903],{},"i 切换到输入模式，在光标当前位置开始输入文本",[20,124905,124906],{},"x 删除当前光标所在处的字符",[20,124908,124909],{},"：切换到底线命令模式，以在最底一行输入命令",[20,124911,124912],{},"a 进行插入模式，在光标下一个位置输入文本",[20,124914,124915],{},"o 在当前的下方插入一个新行，并进入插入模式",[20,124917,124918],{},"0 在当前行的上方插入一个新行，并进入插入模式",[20,124920,124921],{},"dd 剪切当前行",[20,124923,124924],{},"yy 复制当前行",[20,124926,124927],{},"p 粘贴剪贴板内容到光标下方",[20,124929,124930],{},"P 粘贴剪贴板内容到光标上方",[20,124932,124933],{},"u 撤销上一次操作",[20,124935,124936],{},"ctrl+r 重做上一次操作",[20,124938,124939,124941],{},[1068,124940],{}," 保存文件",[20,124943,124944,124946],{},[918,124945],{}," 退出Vim编辑器",[20,124948,124949,124951],{},[918,124950],{},"! 强制退出Vim编辑器，不保存修改",[20,124953,124954],{},[423,124955,124956],{},"2.输入模式：",[20,124958,124959],{},[1603,124960],{"alt":37,"src":124961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[20,124963,124964],{},[423,124965,124966],{},"3.底线命令模式：",[20,124968,124969],{},[1603,124970],{"alt":37,"src":124971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[20,124973,124974],{},"按下esc可以退出底线命令模式",[241,124976,124978],{"id":124977},"_766-apt","7.6.6 apt",[20,124980,124981],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[241,124983,124985],{"id":124984},"_767-home与root的区别","7.6.7 home与root的区别",[20,124987,124988],{},[1603,124989],{"alt":37,"src":124990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[20,124992,124993],{},[1603,124994],{"alt":37,"src":124995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[20,124997,124998],{},[1603,124999],{"alt":37,"src":125000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[20,125002,125003],{},[1603,125004],{"alt":37,"src":125005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[241,125007,125009],{"id":125008},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[20,125011,125012],{},[511,125013,125014],{"href":125014,"rel":125015},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24001],[224,125017,125018,125021],{},[227,125019,125020],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[227,125022,125023],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[20,125025,125026],{},[1603,125027],{"alt":37,"src":125028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[20,125030,125031],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[20,125033,125034],{},[1603,125035],{"alt":37,"src":125036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[32,125038,125040],{"className":120919,"code":125039,"language":120921,"meta":120922,"style":37},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[24,125041,125042,125047],{"__ignoreMap":37},[41,125043,125044],{"class":43,"line":44},[41,125045,125046],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[41,125048,125049],{"class":43,"line":51},[41,125050,125051],{},".\u002Fpycharm.sh\n",[20,125053,125054],{},"3️⃣创建.desktop文件",[20,125056,125057],{},[423,125058,125059],{},"原理：",[1280,125061,125062,125072],{},[227,125063,125064,125065,125071],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[423,125066,125067,125070],{},[24,125068,125069],{},".desktop"," 文件"," 来识别应用。",[227,125073,125074,125076,125077],{},[24,125075,125069],{}," 文件相当于一个“应用注册表”，告诉系统：",[1280,125078,125079,125082,125085,125088,125091],{},[227,125080,125081],{},"应用名字（Name）",[227,125083,125084],{},"图标（Icon）",[227,125086,125087],{},"执行命令（Exec）",[227,125089,125090],{},"分类（Categories）",[227,125092,125093],{},"是否需要终端（Terminal）",[32,125095,125097],{"className":120919,"code":125096,"language":120921,"meta":120922,"style":37},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[24,125098,125099,125104],{"__ignoreMap":37},[41,125100,125101],{"class":43,"line":44},[41,125102,125103],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[41,125105,125106],{"class":43,"line":51},[41,125107,125108],{},"nano pycharm.desktop\n",[20,125110,125111],{},"nano是一个命令行下的编辑器，也可以使用vim",[32,125113,125115],{"className":120919,"code":125114,"language":120921,"meta":120922,"style":37},"[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",[24,125116,125117,125122,125127,125132,125137,125142,125147,125152,125157,125162],{"__ignoreMap":37},[41,125118,125119],{"class":43,"line":44},[41,125120,125121],{},"[Desktop Entry]\n",[41,125123,125124],{"class":43,"line":51},[41,125125,125126],{},"Version=1.0\n",[41,125128,125129],{"class":43,"line":62},[41,125130,125131],{},"Type=Application\n",[41,125133,125134],{"class":43,"line":70},[41,125135,125136],{},"Name=PyCharm\n",[41,125138,125139],{"class":43,"line":76},[41,125140,125141],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[41,125143,125144],{"class":43,"line":83},[41,125145,125146],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[41,125148,125149],{"class":43,"line":89},[41,125150,125151],{},"Comment=JetBrains PyCharm IDE\n",[41,125153,125154],{"class":43,"line":96},[41,125155,125156],{},"Categories=Development;IDE;\n",[41,125158,125159],{"class":43,"line":104},[41,125160,125161],{},"Terminal=false\n",[41,125163,125164],{"class":43,"line":176},[41,125165,125166],{},"StartupWMClass=jetbrains-pycharm\n",[1280,125168,125169,125175,125181,125187],{},[227,125170,125171,125174],{},[24,125172,125173],{},"Exec"," → 点击图标时执行的命令",[227,125176,125177,125180],{},[24,125178,125179],{},"Icon"," → 显示在菜单和桌面上的图标",[227,125182,125183,125186],{},[24,125184,125185],{},"Terminal=false"," → 不打开终端",[227,125188,125189,125192],{},[24,125190,125191],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125194,125195,125196],"blockquote",{},[20,125197,125198,125199,125201,125202],{},"可以理解成 ",[24,125200,125069],{}," 文件是 Linux 的 ",[423,125203,125204],{},"快捷方式配置文件",[20,125206,125207],{},"4️⃣设置可执行权限",[32,125209,125211],{"className":120919,"code":125210,"language":120921,"meta":120922,"style":37},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[24,125212,125213],{"__ignoreMap":37},[41,125214,125215],{"class":43,"line":44},[41,125216,125210],{},[20,125218,125219],{},"5️⃣桌面图标启动的话如下：",[32,125221,125223],{"className":120919,"code":125222,"language":120921,"meta":120922,"style":37},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[24,125224,125225,125230],{"__ignoreMap":37},[41,125226,125227],{"class":43,"line":44},[41,125228,125229],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[41,125231,125232],{"class":43,"line":51},[41,125233,125234],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[224,125236,125237],{"start":62},[227,125238,125239],{},"下载Appimage文件实现软件的安装",[20,125241,125242],{},"1️⃣先下载appimage",[20,125244,125245],{},[511,125246,125247],{"href":125247,"rel":125248},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24001],[20,125250,125251],{},[1603,125252],{"alt":37,"src":125253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[20,125255,125256],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[20,125258,125259],{},[1603,125260],{"alt":37,"src":125261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[20,125263,125264],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[20,125266,125267],{},[1603,125268],{"alt":37,"src":125269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[20,125271,125272],{},[1603,125273],{"alt":37,"src":125274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[20,125276,125277,125278,125281],{},"3️⃣给他们放在",[24,125279,125280],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[20,125283,125284],{},"4️⃣给软件执行权限",[32,125286,125288],{"className":120919,"code":125287,"language":120921,"meta":120922,"style":37},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[24,125289,125290,125295],{"__ignoreMap":37},[41,125291,125292],{"class":43,"line":44},[41,125293,125294],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[41,125296,125297],{"class":43,"line":51},[41,125298,125299],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[20,125301,125302],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[32,125304,125306],{"className":117399,"code":125305,"language":117401,"meta":37,"style":37},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[24,125307,125308,125315,125322,125328],{"__ignoreMap":37},[41,125309,125310,125312],{"class":43,"line":44},[41,125311,101379],{"class":58},[41,125313,125314],{"class":378}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[41,125316,125317,125319],{"class":43,"line":51},[41,125318,101386],{"class":54},[41,125320,125321],{"class":378}," .\u002Fqqmusic.desktop\n",[41,125323,125324,125326],{"class":43,"line":62},[41,125325,124370],{"class":54},[41,125327,125321],{"class":378},[41,125329,125330,125332,125334,125336],{"class":43,"line":70},[41,125331,24713],{"class":54},[41,125333,24716],{"class":378},[41,125335,123236],{"class":378},[41,125337,125321],{"class":378},[20,125339,125340,125342],{},[24,125341,101386],{},"：一个 Linux 命令，主要功能是：",[1280,125344,125345,125348],{},[227,125346,125347],{},"如果文件不存在，就创建一个新的空文件",[227,125349,125350],{},"如果文件已存在，就更新该文件的最后修改时间",[32,125352,125354],{"className":120919,"code":125353,"language":120921,"meta":120922,"style":37},"[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",[24,125355,125356,125360,125365,125370,125375,125379,125384],{"__ignoreMap":37},[41,125357,125358],{"class":43,"line":44},[41,125359,125121],{},[41,125361,125362],{"class":43,"line":51},[41,125363,125364],{},"Name=QQ音乐\n",[41,125366,125367],{"class":43,"line":62},[41,125368,125369],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[41,125371,125372],{"class":43,"line":70},[41,125373,125374],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[41,125376,125377],{"class":43,"line":76},[41,125378,125131],{},[41,125380,125381],{"class":43,"line":83},[41,125382,125383],{},"Categories=Audio;Music;Player;\n",[41,125385,125386],{"class":43,"line":89},[41,125387,125388],{},"Comment=QQ Music Client for Linux\n",[20,125390,125391],{},"将文件复制进去",[20,125393,125394],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[20,125396,125397],{},[1603,125398],{"alt":37,"src":125399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[20,125401,125402],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[20,125404,125405],{},[1603,125406],{"alt":37,"src":125407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[20,125409,125410,125411,125414,125415,125418],{},"如果你用的不是KDE，那么也可以直接修改",[24,125412,125413],{},"qqmuic.desktop","：在exec的末尾加上",[24,125416,125417],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[32,125420,125422],{"className":120919,"code":125421,"language":120921,"meta":120922,"style":37},"[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",[24,125423,125424,125428,125432,125437,125441,125445,125449],{"__ignoreMap":37},[41,125425,125426],{"class":43,"line":44},[41,125427,125121],{},[41,125429,125430],{"class":43,"line":51},[41,125431,125364],{},[41,125433,125434],{"class":43,"line":62},[41,125435,125436],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[41,125438,125439],{"class":43,"line":70},[41,125440,125374],{},[41,125442,125443],{"class":43,"line":76},[41,125444,125131],{},[41,125446,125447],{"class":43,"line":83},[41,125448,125383],{},[41,125450,125451],{"class":43,"line":89},[41,125452,125388],{},[20,125454,125455],{},[1603,125456],{"alt":37,"src":125457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[20,125459,125460],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[32,125462,125464],{"className":120919,"code":125463,"language":120921,"meta":120922,"style":37},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[24,125465,125466],{"__ignoreMap":37},[41,125467,125468],{"class":43,"line":44},[41,125469,125463],{},[224,125471,125472],{"start":70},[227,125473,125474],{},"去Flathub上安装软件",[20,125476,125477],{},[511,125478,125479],{"href":125479,"rel":125480},"https:\u002F\u002Fflathub.org\u002F",[24001],[20,125482,125483],{},"1️⃣去上面的官网搜索软件+下载软件",[20,125485,125486],{},[1603,125487],{"alt":37,"src":125488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[32,125490,125492],{"className":120919,"code":125491,"language":120921,"meta":120922,"style":37},"flatpak install flathub com.obsproject.Studio\n",[24,125493,125494],{"__ignoreMap":37},[41,125495,125496],{"class":43,"line":44},[41,125497,125491],{},[20,125499,125500],{},[1603,125501],{"alt":37,"src":125502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[20,125504,125505],{},"2️⃣运行软件",[20,125507,125508],{},"a.官方方式：",[20,125510,125511],{},[1603,125512],{"alt":37,"src":125513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[32,125515,125516],{"className":120919,"code":125491,"language":120921,"meta":120922,"style":37},[24,125517,125518],{"__ignoreMap":37},[41,125519,125520],{"class":43,"line":44},[41,125521,125491],{},[20,125523,125524],{},"b.当普通软件运行：",[20,125526,125527],{},[1603,125528],{"alt":37,"src":125529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[20,125531,125532],{},[1603,125533],{"alt":37,"src":125534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[189,125536,125537],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":37,"searchDepth":51,"depth":51,"links":125539},[125540,125541,125546,125547,125553,125554],{"id":122272,"depth":51,"text":122273},{"id":122614,"depth":51,"text":122615,"children":125542},[125543,125544,125545],{"id":122618,"depth":62,"text":122619},{"id":122685,"depth":62,"text":122686},{"id":122946,"depth":62,"text":122947},{"id":123099,"depth":51,"text":123100},{"id":123337,"depth":51,"text":123338,"children":125548},[125549,125550,125551,125552],{"id":123389,"depth":62,"text":123390},{"id":123675,"depth":62,"text":123676},{"id":123946,"depth":62,"text":123947},{"id":124205,"depth":62,"text":124206},{"id":124264,"depth":51,"text":124265},{"id":124565,"depth":51,"text":124566,"children":125555},[125556,125557,125558,125559,125560,125561,125562,125563],{"id":124569,"depth":62,"text":124570},{"id":124581,"depth":62,"text":124582},{"id":124793,"depth":62,"text":124794},{"id":124817,"depth":62,"text":124818},{"id":124883,"depth":62,"text":124884},{"id":124977,"depth":62,"text":124978},{"id":124984,"depth":62,"text":124985},{"id":125008,"depth":62,"text":125009},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122264,"description":196},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125570,"title":125571,"body":125572,"description":196,"extension":197,"meta":125576,"navigation":79,"path":125577,"seo":125578,"stem":125579,"__hash__":125580},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125573,"toc":125574},[],{"title":37,"searchDepth":51,"depth":51,"links":125575},[],{"category":30366},"\u002Fwiki\u002F2025-01-27-linux",{"title":125571,"description":196},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125582,"title":125583,"body":125584,"description":125588,"extension":197,"meta":125979,"navigation":79,"path":125980,"seo":125981,"stem":125982,"__hash__":125983},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125585,"toc":125977},[125586,125589,125593,125610,125613,125666,125670,125672,125712,125721,125725,125728,125969,125974],[20,125587,125588],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125590,125592],{"id":125591},"_1ubuntu环境配置","1.Ubuntu环境配置",[224,125594,125595,125598,125601,125604,125607],{},[227,125596,125597],{},"ubuntu环境换源",[227,125599,125600],{},"安装cuda",[227,125602,125603],{},"安装miniconda",[227,125605,125606],{},"安装pytorch",[227,125608,125609],{},"安装genesis",[20,125611,125612],{},"参考链接：",[32,125614,125616],{"className":34,"code":125615,"language":36,"meta":37,"style":37},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[24,125617,125618],{"__ignoreMap":37},[41,125619,125620,125623,125626,125629,125631,125634,125637,125639,125642,125645,125647,125650,125653,125655,125658,125661,125663],{"class":43,"line":44},[41,125621,125622],{"class":54},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[41,125624,125625],{"class":378},"=blogdetail",[41,125627,125628],{"class":275},"&sharetype",[41,125630,321],{"class":271},[41,125632,125633],{"class":378},"blogdetail",[41,125635,125636],{"class":275},"&sharerId",[41,125638,321],{"class":271},[41,125640,125641],{"class":378},"144728092",[41,125643,125644],{"class":275},"&sharerefer",[41,125646,321],{"class":271},[41,125648,125649],{"class":378},"PC",[41,125651,125652],{"class":275},"&sharesource",[41,125654,321],{"class":271},[41,125656,125657],{"class":378},"qq_69379513",[41,125659,125660],{"class":275},"&sharefrom",[41,125662,321],{"class":271},[41,125664,125665],{"class":378},"from_link\n",[10,125667,125669],{"id":125668},"_2genesis-报错issue","2.Genesis 报错issue",[20,125671,125612],{},[32,125673,125674],{"className":34,"code":125615,"language":36,"meta":37,"style":37},[24,125675,125676],{"__ignoreMap":37},[41,125677,125678,125680,125682,125684,125686,125688,125690,125692,125694,125696,125698,125700,125702,125704,125706,125708,125710],{"class":43,"line":44},[41,125679,125622],{"class":54},[41,125681,125625],{"class":378},[41,125683,125628],{"class":275},[41,125685,321],{"class":271},[41,125687,125633],{"class":378},[41,125689,125636],{"class":275},[41,125691,321],{"class":271},[41,125693,125641],{"class":378},[41,125695,125644],{"class":275},[41,125697,321],{"class":271},[41,125699,125649],{"class":378},[41,125701,125652],{"class":275},[41,125703,321],{"class":271},[41,125705,125657],{"class":378},[41,125707,125660],{"class":275},[41,125709,321],{"class":271},[41,125711,125665],{"class":378},[32,125713,125715],{"className":34,"code":125714,"language":36,"meta":37,"style":37},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[24,125716,125717],{"__ignoreMap":37},[41,125718,125719],{"class":43,"line":44},[41,125720,125714],{"class":54},[10,125722,125724],{"id":125723},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[20,125726,125727],{},"hello_robot.py",[32,125729,125731],{"className":30481,"code":125730,"language":30483,"meta":37,"style":37},"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",[24,125732,125733,125739,125754,125758,125770,125782,125786,125799,125803,125822,125832,125842,125856,125860,125864,125869,125873,125883,125890,125904,125911,125921,125926,125930,125948,125953,125957,125964],{"__ignoreMap":37},[41,125734,125735,125737],{"class":43,"line":44},[41,125736,30495],{"class":271},[41,125738,45408],{"class":275},[41,125740,125741,125744,125747,125749,125751],{"class":43,"line":51},[41,125742,125743],{"class":275},"os.environ[",[41,125745,125746],{"class":378},"'PYOPENGL_PLATFORM'",[41,125748,4581],{"class":275},[41,125750,321],{"class":271},[41,125752,125753],{"class":378}," 'glx'\n",[41,125755,125756],{"class":43,"line":62},[41,125757,80],{"emptyLinePlaceholder":79},[41,125759,125760,125762,125765,125767],{"class":43,"line":70},[41,125761,30495],{"class":271},[41,125763,125764],{"class":275}," genesis ",[41,125766,31486],{"class":271},[41,125768,125769],{"class":275}," gs\n",[41,125771,125772,125774,125777,125779],{"class":43,"line":76},[41,125773,30840],{"class":271},[41,125775,125776],{"class":275}," pynput ",[41,125778,30495],{"class":271},[41,125780,125781],{"class":275}," keyboard\n",[41,125783,125784],{"class":43,"line":83},[41,125785,80],{"emptyLinePlaceholder":79},[41,125787,125788,125791,125794,125796],{"class":43,"line":89},[41,125789,125790],{"class":275},"gs.init(",[41,125792,125793],{"class":5354},"backend",[41,125795,321],{"class":271},[41,125797,125798],{"class":275},"gs.gpu)\n",[41,125800,125801],{"class":43,"line":96},[41,125802,80],{"emptyLinePlaceholder":79},[41,125804,125805,125808,125810,125813,125816,125818,125820],{"class":43,"line":104},[41,125806,125807],{"class":275},"scene ",[41,125809,321],{"class":271},[41,125811,125812],{"class":275}," gs.Scene(",[41,125814,125815],{"class":5354},"show_viewer",[41,125817,321],{"class":271},[41,125819,31579],{"class":58},[41,125821,282],{"class":275},[41,125823,125824,125827,125829],{"class":43,"line":176},[41,125825,125826],{"class":275},"plane ",[41,125828,321],{"class":271},[41,125830,125831],{"class":275}," scene.add_entity(gs.morphs.Plane())\n",[41,125833,125834,125837,125839],{"class":43,"line":184},[41,125835,125836],{"class":275},"franka ",[41,125838,321],{"class":271},[41,125840,125841],{"class":275}," scene.add_entity(\n",[41,125843,125844,125847,125849,125851,125854],{"class":43,"line":1757},[41,125845,125846],{"class":275},"    gs.morphs.MJCF(",[41,125848,45457],{"class":5354},[41,125850,321],{"class":271},[41,125852,125853],{"class":378},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[41,125855,38150],{"class":275},[41,125857,125858],{"class":43,"line":1763},[41,125859,282],{"class":275},[41,125861,125862],{"class":43,"line":1768},[41,125863,80],{"emptyLinePlaceholder":79},[41,125865,125866],{"class":43,"line":1782},[41,125867,125868],{"class":275},"scene.build()\n",[41,125870,125871],{"class":43,"line":1787},[41,125872,80],{"emptyLinePlaceholder":79},[41,125874,125875,125877,125880],{"class":43,"line":1793},[41,125876,32050],{"class":271},[41,125878,125879],{"class":54}," on_press",[41,125881,125882],{"class":275},"(key):\n",[41,125884,125885,125888],{"class":43,"line":1814},[41,125886,125887],{"class":271},"    try",[41,125889,3877],{"class":275},[41,125891,125892,125894,125897,125899,125902],{"class":43,"line":1819},[41,125893,2635],{"class":271},[41,125895,125896],{"class":275}," key.char ",[41,125898,3087],{"class":271},[41,125900,125901],{"class":378}," 'q'",[41,125903,3877],{"class":275},[41,125905,125906,125908],{"class":43,"line":1833},[41,125907,15870],{"class":271},[41,125909,125910],{"class":58}," False\n",[41,125912,125913,125916,125919],{"class":43,"line":1838},[41,125914,125915],{"class":271},"    except",[41,125917,125918],{"class":58}," AttributeError",[41,125920,3877],{"class":275},[41,125922,125923],{"class":43,"line":1867},[41,125924,125925],{"class":271},"        pass\n",[41,125927,125928],{"class":43,"line":1872},[41,125929,80],{"emptyLinePlaceholder":79},[41,125931,125932,125935,125937,125940,125943,125945],{"class":43,"line":1889},[41,125933,125934],{"class":275},"listener ",[41,125936,321],{"class":271},[41,125938,125939],{"class":275}," keyboard.Listener(",[41,125941,125942],{"class":5354},"on_press",[41,125944,321],{"class":271},[41,125946,125947],{"class":275},"on_press)\n",[41,125949,125950],{"class":43,"line":1894},[41,125951,125952],{"class":275},"listener.start()\n",[41,125954,125955],{"class":43,"line":1899},[41,125956,80],{"emptyLinePlaceholder":79},[41,125958,125959,125961],{"class":43,"line":1904},[41,125960,108766],{"class":271},[41,125962,125963],{"class":275}," listener.running:\n",[41,125965,125966],{"class":43,"line":1918},[41,125967,125968],{"class":275},"    scene.step()\n",[20,125970,125971],{},[1603,125972],{"alt":37,"src":125973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[189,125975,125976],{},"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":37,"searchDepth":51,"depth":51,"links":125978},[],{"category":23516},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125583,"description":125588},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125985,"title":125986,"body":125987,"description":196,"extension":197,"meta":126002,"navigation":79,"path":126003,"seo":126004,"stem":126005,"__hash__":126006},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125988,"toc":125999},[125989,125992,125996],[10,125990,125986],{"id":125991},"_1-基础知识",[15,125993,125995],{"id":125994},"_11-js的组成","1.1 js的组成",[20,125997,125998],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":37,"searchDepth":51,"depth":51,"links":126000},[126001],{"id":125994,"depth":51,"text":125995},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125986,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126008,"title":126009,"body":126010,"description":196,"extension":197,"meta":126149,"navigation":79,"path":126150,"seo":126151,"stem":126152,"__hash__":126153},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126011,"toc":126137},[126012,126015,126019,126022,126026,126036,126040,126043,126046,126049,126053,126060,126066,126070,126076,126087,126091,126094,126098,126101,126105,126108,126112,126115,126119,126122,126125,126128,126131,126134],[10,126013,126009],{"id":126014},"_2-vscode必备内容",[15,126016,126018],{"id":126017},"_21-标签分类","2.1 标签分类",[20,126020,126021],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[15,126023,126025],{"id":126024},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[20,126027,126028,126029,126031,126032,126035],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[24,126030,499],{}," 然后按 ",[24,126033,126034],{},"Tab","，快速自动生成基本结构。",[15,126037,126039],{"id":126038},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[20,126041,126042],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[20,126044,126045],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[20,126047,126048],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[15,126050,126052],{"id":126051},"_24-视图缩放","2.4 视图缩放",[20,126054,126055,126056,126059],{},"缩放视图 ",[24,126057,126058],{},"ctrl+"," 可实现代码增大。",[20,126061,126062,126065],{},[24,126063,126064],{},"ctrl-"," 可实现代码减小。",[15,126067,126069],{"id":126068},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[20,126071,126072,126073,28488],{},"VSCode 新建文件快捷键为 ",[24,126074,126075],{},"ctrl+N",[20,126077,126078,126079,126082,126083,126086],{},"保存快捷键为 ",[24,126080,126081],{},"ctrl+S","，将文本保存为 ",[24,126084,126085],{},".html"," 文件。",[15,126088,126090],{"id":126089},"_26-auto-rename-tag","2.6 Auto Rename Tag",[20,126092,126093],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[15,126095,126097],{"id":126096},"_27-vscode-icons","2.7 vscode-icons",[20,126099,126100],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[15,126102,126104],{"id":126103},"_28-easy-less","2.8 Easy LESS",[20,126106,126107],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[15,126109,126111],{"id":126110},"_29-会了吧插件","2.9 会了吧插件",[20,126113,126114],{},"会了吧插件可以展示代码中英语单词的意思。",[15,126116,126118],{"id":126117},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[20,126120,126121],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[20,126123,126124],{},"②选定多个相同的单词:ctrl+D",[20,126126,126127],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[20,126129,126130],{},"④全局替换某些单词:ctrl+h",[20,126132,126133],{},"⑤快速定位到某一行:ctrl+g",[20,126135,126136],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":37,"searchDepth":51,"depth":51,"links":126138},[126139,126140,126141,126142,126143,126144,126145,126146,126147,126148],{"id":126017,"depth":51,"text":126018},{"id":126024,"depth":51,"text":126025},{"id":126038,"depth":51,"text":126039},{"id":126051,"depth":51,"text":126052},{"id":126068,"depth":51,"text":126069},{"id":126089,"depth":51,"text":126090},{"id":126096,"depth":51,"text":126097},{"id":126103,"depth":51,"text":126104},{"id":126110,"depth":51,"text":126111},{"id":126117,"depth":51,"text":126118},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126009,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126155,"title":126156,"body":126157,"description":196,"extension":197,"meta":126316,"navigation":79,"path":126317,"seo":126318,"stem":126319,"__hash__":126320},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126158,"toc":126308},[126159,126162,126166,126176,126182,126188,126192,126201,126205,126210,126213,126216,126220,126223,126233,126242,126251,126260,126270,126277,126282,126287,126300],[10,126160,126156],{"id":126161},"_3-html文本与容器标签",[15,126163,126165],{"id":126164},"_31-标题标签","3.1 标题标签",[20,126167,126168,126171,126172,126175],{},[24,126169,126170],{},"\u003Ch1>","我是一级标签",[24,126173,126174],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[20,126177,126178,126171,126180],{},[24,126179,126170],{},[24,126181,126174],{},[20,126183,123438,126184,126187],{},[24,126185,126186],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[15,126189,126191],{"id":126190},"_32-段落标签","3.2 段落标签",[20,126193,126194,126197,126198],{},[24,126195,126196],{},"\u003Cp>","....",[24,126199,126200],{},"\u003C\u002Fp>",[15,126202,126204],{"id":126203},"_33-换行标签","3.3 换行标签",[20,126206,126207],{},[24,126208,126209],{},"\u003Cbr \u002F>",[20,126211,126212],{},"具有强制换行的作用",[20,126214,126215],{},"单标签",[15,126217,126219],{"id":126218},"_34-文本格式化标签","3.4 文本格式化标签",[20,126221,126222],{},"提供粗体、斜体和下划线等效果",[20,126224,126225,126226,82642,126229,126232],{},"加粗：",[24,126227,126228],{},"\u003Cstrong>...\u003C\u002Fstrong>",[24,126230,126231],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[20,126234,126235,126236,82642,126239,126232],{},"斜体：",[24,126237,126238],{},"\u003Cem>...\u003C\u002Fem>",[24,126240,126241],{},"\u003Ci>...\u003C\u002Fi>",[20,126243,126244,126245,82642,126248,126232],{},"删除线：",[24,126246,126247],{},"\u003Cdel>...\u003C\u002Fdel>",[24,126249,126250],{},"\u003Cs>...\u003C\u002Fs>",[20,126252,126253,126254,82642,126257,126232],{},"下划线：",[24,126255,126256],{},"\u003Cins>...\u003C\u002Fins>",[24,126258,126259],{},"\u003Cu>...\u003C\u002Fu>",[15,126261,126263,126264,18548,126267,102796],{"id":126262},"_35-div和span标签","3.5 ",[24,126265,126266],{},"\u003Cdiv>",[24,126268,126269],{},"\u003Cspan>",[20,126271,126272,101121,126274,126276],{},[24,126273,126266],{},[24,126275,126269],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[20,126278,126279],{},[24,126280,126281],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[20,126283,126284],{},[24,126285,126286],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[20,126288,126289,126290,126292,126293,126295,126296,126299],{},"两者特点：①",[24,126291,126266],{}," 标签用来布局，但一行通常只放一个 ",[24,126294,126266],{},"。可以理解为一个大盒子，独占一行，在 ",[24,126297,126298],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[20,126301,77352,126302,126304,126305,126307],{},[24,126303,126269],{}," 标签也可用于布局，一行可以放多个 ",[24,126306,126269],{},"，可理解为小盒子。",{"title":37,"searchDepth":51,"depth":51,"links":126309},[126310,126311,126312,126313,126314],{"id":126164,"depth":51,"text":126165},{"id":126190,"depth":51,"text":126191},{"id":126203,"depth":51,"text":126204},{"id":126218,"depth":51,"text":126219},{"id":126262,"depth":51,"text":126315},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126156,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126322,"title":126323,"body":126324,"description":196,"extension":197,"meta":126521,"navigation":79,"path":126522,"seo":126523,"stem":126524,"__hash__":126525},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126325,"toc":126513},[126326,126329,126333,126336,126342,126349,126355,126361,126364,126367,126370,126373,126376,126379,126382,126386,126389,126392,126395,126401,126407,126413,126420,126424,126430,126436,126439,126442,126448,126454,126460,126463,126466,126470,126473,126483,126489,126493,126502,126506,126509],[10,126327,126323],{"id":126328},"_4-html图像与链接",[15,126330,126332],{"id":126331},"_41-图像标签","4.1 图像标签",[20,126334,126335],{},"（1）标签",[20,126337,126338,126341],{},[24,126339,126340],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[20,126343,126344,126345,126348],{},"src是",[24,126346,126347],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[20,126350,126351,126352],{},"alt:文本，替换文本。图像不能显示的文字 ",[24,126353,126354],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[20,126356,126357,126358],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[24,126359,126360],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[20,126362,126363],{},"width:像素，设置图像的宽度",[20,126365,126366],{},"height:像素，设置图像的高度",[20,126368,126369],{},"border：像素，设置图像的边框粗细",[20,126371,126372],{},"（2）图像标签属性的注意点：",[20,126374,126375],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[20,126377,126378],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[20,126380,126381],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[15,126383,126385],{"id":126384},"_42-路径注意要点","4.2 路径注意要点：",[20,126387,126388],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[20,126390,126391],{},"（2）根目录：就是打开文件夹的第一层根目录",[20,126393,126394],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[20,126396,126397,126398],{},"①同一级路径：图像文件位于HTML文件同一级，如",[24,126399,126400],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[20,126402,126403,126404],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[24,126405,126406],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[20,126408,126409,126410],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[24,126411,126412],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[20,126414,126415,126416,524],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[511,126417,126418],{"href":126418,"rel":126419},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24001],[15,126421,126423],{"id":126422},"_43-超链接标签","4.3 超链接标签",[20,126425,126426,126429],{},[24,126427,126428],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[20,126431,126432,126433],{},"①语法格式：",[24,126434,126435],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[20,126437,126438],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[20,126440,126441],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[20,126443,126444,126445],{},"③链接分类：外部链接：",[24,126446,126447],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[20,126449,126450,126451],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[24,126452,126453],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[20,126455,126456,126457],{},"空链接：如果当时没有确定链接目标时，",[24,126458,126459],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[20,126461,126462],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[20,126464,126465],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[15,126467,126469],{"id":126468},"_44-锚点链接","4.4 锚点链接",[20,126471,126472],{},"点我们点击链接，可以快速定位到页面中的某个位置",[20,126474,126475,126476,126479,126480],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[24,126477,126478],{},"\u003Ca href=\"#two\">","第二级",[24,126481,126482],{},"\u003C\u002Fa>",[20,126484,126485,126486],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[24,126487,126488],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[15,126490,126492],{"id":126491},"_45-注释标签","4.5 注释标签",[20,126494,126495,126498,126499],{},[24,126496,126497],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[24,126500,126501],{},"ctrl+\u002F",[15,126503,126505],{"id":126504},"_46-特殊字符","4.6 特殊字符",[20,126507,126508],{},"可以实现添加多个空格",[1603,126510],{"style":126511,"src":126512},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":37,"searchDepth":51,"depth":51,"links":126514},[126515,126516,126517,126518,126519,126520],{"id":126331,"depth":51,"text":126332},{"id":126384,"depth":51,"text":126385},{"id":126422,"depth":51,"text":126423},{"id":126468,"depth":51,"text":126469},{"id":126491,"depth":51,"text":126492},{"id":126504,"depth":51,"text":126505},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126323,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126527,"title":126528,"body":126529,"description":196,"extension":197,"meta":126822,"navigation":79,"path":126823,"seo":126824,"stem":126825,"__hash__":126826},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126530,"toc":126813},[126531,126534,126538,126541,126544,126547,126550,126553,126556,126559,126562,126565,126585,126591,126595,126598,126601,126604,126607,126610,126613,126617,126620,126623,126626,126629,126642,126647,126650,126653,126668,126671,126674,126677,126680,126683,126687,126690,126697,126700,126703,126706,126709,126712,126718,126721,126724,126730,126733,126736,126739,126745,126748,126751,126765,126772,126775,126778,126785,126794,126797,126800,126803,126807,126810],[10,126532,126528],{"id":126533},"_5-html表格列表与表单",[15,126535,126537],{"id":126536},"_51-表格标签","5.1 表格标签",[20,126539,126540],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[20,126542,126543],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[20,126545,126546],{},"②表格基本语法：",[1603,126548],{"style":126511,"src":126549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[20,126551,126552],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1603,126554],{"style":126511,"src":126555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[20,126557,126558],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1603,126560],{"style":126511,"src":126561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[20,126563,126564],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[20,126566,126567,126570,126571,126573,126574,126577,126578,126580,126581,126584],{},[24,126568,126569],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[24,126572,126569],{},"内部必须拥有",[24,126575,126576],{},"\u003Ctr>","标签，一般位于第一行，",[24,126579,126569],{},"比",[24,126582,126583],{},"\u003Cth>","范围广",[20,126586,126587,126590],{},[24,126588,126589],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[15,126592,126594],{"id":126593},"_52-合并单元格","5.2 合并单元格",[20,126596,126597],{},"（1）合并单元格方式：",[20,126599,126600],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[20,126602,126603],{},"②跨列合并：colspan=\"合并单元格的个数\"",[20,126605,126606],{},"（2）目标单元格：",[20,126608,126609],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[20,126611,126612],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[15,126614,126616],{"id":126615},"_53-列表标签","5.3 列表标签",[20,126618,126619],{},"（1）分类：无序列表、有序列表、自定义列表",[20,126621,126622],{},"①无序列表：",[1603,126624],{"style":126511,"src":126625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[20,126627,126628],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[20,126630,126631,126634,126635,126638,126639,126641],{},[24,126632,126633],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[24,126636,126637],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[24,126640,126633],{},"中输入其他标签或文字是不对的",[20,126643,126644,126646],{},[24,126645,126637],{},"之间相当于一个容器，可以容纳所有元素",[20,126648,126649],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[20,126651,126652],{},"在css中去除前边的小圆点采用如下代码:",[32,126654,126658],{"className":126655,"code":126656,"language":126657,"meta":37,"style":37},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[24,126659,126660],{"__ignoreMap":37},[41,126661,126662,126665],{"class":43,"line":44},[41,126663,126664],{"class":51403},"list-style",[41,126666,126667],{"class":275},": none;\n",[20,126669,126670],{},"②有序列表：",[1603,126672],{"style":126511,"src":126673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[20,126675,126676],{},"③自定义列表：",[1603,126678],{"style":126511,"src":126679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1603,126681],{"style":126511,"src":126682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[15,126684,126686],{"id":126685},"_54-表单标签","5.4 表单标签",[20,126688,126689],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[20,126691,126692,126693,126696],{},"（1）表单域：包含单元素的区域，",[24,126694,126695],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1603,126698],{"style":126511,"src":126699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[20,126701,126702],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[20,126704,126705],{},"表单元素提交必须有name属性",[20,126707,126708],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[20,126710,126711],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[20,126713,77329,126714,126717],{},[24,126715,126716],{},"\u003Cinput>","输入表单元素",[1603,126719],{"style":126511,"src":126720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1603,126722],{"style":126511,"src":126723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[20,126725,126726,126727],{},"单选按钮：",[24,126728,126729],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1603,126731],{"style":126511,"src":126732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[20,126734,126735],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1603,126737],{"style":126511,"src":126738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[20,126740,126741,126744],{},[423,126742,126743],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[20,126746,126747],{},"②select下拉表单元素：可以节约页面控件",[1603,126749],{"style":126511,"src":126750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[20,126752,126753,13933,126755,126758,126759,126761,126762,126764],{},[423,126754,305],{},[24,126756,126757],{},"\u003Cselect>","中至少包含一对",[24,126760,102817],{},"；在",[24,126763,102817],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[20,126766,126767,126768,126771],{},"③",[24,126769,126770],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1603,126773],{"style":126511,"src":126774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[20,126776,126777],{},"3行20列",[15,126779,126781,126782,102796],{"id":126780},"_55-lable标签","5.5 ",[24,126783,126784],{},"\u003Clable>",[20,126786,126787,126788,126790,126791,126793],{},"它不是表单标签，但常常与表单标签搭配使用，",[24,126789,126784],{},"标签用于绑定一个表单标签，当点击",[24,126792,126784],{},"标签内的文本",[20,126795,126796],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1603,126798],{"style":126511,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1603,126801],{"style":126511,"src":126802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[15,126804,126806],{"id":126805},"_56-实例","5.6 实例",[1603,126808],{"style":126511,"src":126809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[189,126811,126812],{},"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":37,"searchDepth":51,"depth":51,"links":126814},[126815,126816,126817,126818,126819,126821],{"id":126536,"depth":51,"text":126537},{"id":126593,"depth":51,"text":126594},{"id":126615,"depth":51,"text":126616},{"id":126685,"depth":51,"text":126686},{"id":126780,"depth":51,"text":126820},"5.5 \u003Clable>标签",{"id":126805,"depth":51,"text":126806},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126528,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126828,"title":126829,"body":126830,"description":196,"extension":197,"meta":127379,"navigation":79,"path":127380,"seo":127381,"stem":127382,"__hash__":127383},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126831,"toc":127354},[126832,126835,126839,126842,126845,126849,126852,126855,126858,126861,126864,126867,126870,126874,126877,126881,126884,126887,126890,126894,126897,126900,126903,126909,126912,126915,126918,126921,126924,126927,126930,126963,126967,126970,126973,126976,126980,126983,126986,126989,126992,126995,126999,127002,127005,127008,127012,127015,127019,127022,127026,127029,127034,127038,127041,127045,127048,127051,127054,127057,127084,127087,127091,127094,127097,127102,127105,127108,127112,127115,127120,127123,127126,127129,127133,127136,127139,127142,127146,127149,127152,127155,127159,127163,127166,127206,127209,127213,127220,127223,127227,127230,127276,127280,127283,127286,127289,127317,127321,127324,127351],[10,126833,126829],{"id":126834},"_6-css语法与文本样式",[15,126836,126838],{"id":126837},"_61-css语法规范","6.1 css语法规范",[20,126840,126841],{},"由两部分组成，选择器及一条或多条声明",[1603,126843],{"style":126511,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[20,126846,126847],{},[423,126848,305],{},[20,126850,126851],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[20,126853,126854],{},"②属性与属性值以“键值对”的形式出现",[20,126856,126857],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[20,126859,126860],{},"④属性和属性值之间用英文“;”分开",[1603,126862],{"style":126511,"src":126863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1603,126865],{"style":126511,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1603,126868],{"style":126511,"src":126869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[15,126871,126873],{"id":126872},"_62-css选择器","6.2 css选择器",[20,126875,126876],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[241,126878,126880],{"id":126879},"_621-标签选择器","6.2.1 标签选择器",[20,126882,126883],{},"①优点：能快速为页面中同类型的标签统一设置样式",[20,126885,126886],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1603,126888],{"style":126511,"src":126889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[241,126891,126893],{"id":126892},"_622-类选择器","6.2.2 类选择器",[20,126895,126896],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[20,126898,126899],{},"②样例",[1603,126901],{"style":126511,"src":126902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[20,126904,126905,126906,126908],{},"③ ",[423,126907,126743],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[20,126910,126911],{},"可以理解为给这个标签起了个名字，来表示；",[20,126913,126914],{},"长名称或词组可以使用横线来为选择器命名；",[20,126916,126917],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[20,126919,126920],{},"命名要有意义；",[1603,126922],{"style":126511,"src":126923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[20,126925,126926],{},"类选择器也可以指定特殊的元素p.center{}",[20,126928,126929],{},"p.center和.center都对",[32,126931,126933],{"className":126655,"code":126932,"language":126657,"meta":37,"style":37},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[24,126934,126935,126940,126949,126959],{"__ignoreMap":37},[41,126936,126937],{"class":43,"line":44},[41,126938,126939],{"class":47},"\u002F* 类选择器指定特殊元素 *\u002F\n",[41,126941,126942,126944,126947],{"class":43,"line":51},[41,126943,20],{"class":51403},[41,126945,126946],{"class":54},".center",[41,126948,15710],{"class":275},[41,126950,126951,126953,126955,126957],{"class":43,"line":62},[41,126952,70629],{"class":58},[41,126954,51540],{"class":275},[41,126956,51695],{"class":58},[41,126958,1434],{"class":275},[41,126960,126961],{"class":43,"line":70},[41,126962,1706],{"class":275},[241,126964,126966],{"id":126965},"_623-多类名使用","6.2.3 多类名使用",[20,126968,126969],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1603,126971],{"style":126511,"src":126972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[20,126974,126975],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[241,126977,126979],{"id":126978},"_624-id选择器","6.2.4 id选择器",[20,126981,126982],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[20,126984,126985],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1603,126987],{"style":126511,"src":126988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[20,126990,126991],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[20,126993,126994],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[241,126996,126998],{"id":126997},"_625-通配符选择器","6.2.5 通配符选择器",[20,127000,127001],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[20,127003,127004],{},"* {",[20,127006,127007],{},"color=\"red\"}",[241,127009,127011],{"id":127010},"_626-总结","6.2.6 总结",[1603,127013],{"style":126511,"src":127014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[15,127016,127018],{"id":127017},"_63-css字体属性","6.3 css字体属性",[20,127020,127021],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[241,127023,127025],{"id":127024},"_631-字体系列","6.3.1 字体系列",[20,127027,127028],{},"font-family: '宋体';",[20,127030,127031,127033],{},[423,127032,305],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[241,127035,127037],{"id":127036},"_632-字体大小","6.3.2 字体大小",[20,127039,127040],{},"font-size: 20px",[20,127042,127043,26576],{},[423,127044,126743],{},[20,127046,127047],{},"①px（像素）大小是网页的最常用单位",[20,127049,127050],{},"②谷歌浏览器默认为16px",[20,127052,127053],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[20,127055,127056],{},"④可以给body指定整个页面的大小：会自动引用",[32,127058,127060],{"className":126655,"code":127059,"language":126657,"meta":37,"style":37},"body {\n  font-size: 16px;\n}\n",[24,127061,127062,127068,127080],{"__ignoreMap":37},[41,127063,127064,127066],{"class":43,"line":44},[41,127065,51903],{"class":51403},[41,127067,15710],{"class":275},[41,127069,127070,127072,127074,127076,127078],{"class":43,"line":51},[41,127071,70729],{"class":58},[41,127073,51540],{"class":275},[41,127075,874],{"class":58},[41,127077,51595],{"class":271},[41,127079,1434],{"class":275},[41,127081,127082],{"class":43,"line":62},[41,127083,1706],{"class":275},[20,127085,127086],{},"⑤标题标签比较特殊，需要单独指定大小",[241,127088,127090],{"id":127089},"_633-字体粗细","6.3.3 字体粗细",[20,127092,127093],{},"font-weight: bold;",[20,127095,127096],{},"font-weight: 100；",[20,127098,127099,127101],{},[423,127100,305],{}," ①粗体文字变细：尽量别用normal，多用数字",[20,127103,127104],{},"font-weight= 400;",[20,127106,127107],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[241,127109,127111],{"id":127110},"_634-文字样式","6.3.4 文字样式",[20,127113,127114],{},"font-style: normal；",[20,127116,127117,26576],{},[423,127118,127119],{},"属性值",[20,127121,127122],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[20,127124,127125],{},"②italic：浏览器会显示斜体的字体样式",[1603,127127],{"style":126511,"src":127128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[241,127130,127132],{"id":127131},"_635-字体符合属性","6.3.5 字体符合属性",[1603,127134],{"style":126511,"src":127135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1603,127137],{"style":126511,"src":127138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[20,127140,127141],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[20,127143,127144,26576],{},[423,127145,126743],{},[20,127147,127148],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[20,127150,127151],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[20,127153,127154],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[15,127156,127158],{"id":127157},"_64-css-test文本属性","6.4 css test文本属性",[241,127160,127162],{"id":127161},"_641-文本颜色","6.4.1 文本颜色",[20,127164,127165],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[32,127167,127169],{"className":126655,"code":127168,"language":126657,"meta":37,"style":37},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[24,127170,127171,127176,127182,127192,127197,127202],{"__ignoreMap":37},[41,127172,127173],{"class":43,"line":44},[41,127174,127175],{"class":47},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[41,127177,127178,127180],{"class":43,"line":51},[41,127179,20],{"class":51403},[41,127181,15710],{"class":275},[41,127183,127184,127186,127188,127190],{"class":43,"line":62},[41,127185,71008],{"class":58},[41,127187,51540],{"class":275},[41,127189,57524],{"class":58},[41,127191,1434],{"class":275},[41,127193,127194],{"class":43,"line":70},[41,127195,127196],{"class":47},"  \u002F* color: #ff0000; *\u002F\n",[41,127198,127199],{"class":43,"line":76},[41,127200,127201],{"class":47},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[41,127203,127204],{"class":43,"line":83},[41,127205,1706],{"class":275},[1603,127207],{"style":126511,"src":127208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[241,127210,127212],{"id":127211},"_642-对齐文本","6.4.2 对齐文本",[20,127214,127215,127216,127219],{},"text-align属于用于设置元素内文本内容的 ",[423,127217,127218],{},"水平对齐"," 方式",[20,127221,127222],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[241,127224,127226],{"id":127225},"_643-装饰文本","6.4.3 装饰文本",[20,127228,127229],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[32,127231,127233],{"className":126655,"code":127232,"language":126657,"meta":37,"style":37},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[24,127234,127235,127241,127251,127255,127261,127272],{"__ignoreMap":37},[41,127236,127237,127239],{"class":43,"line":44},[41,127238,511],{"class":51403},[41,127240,15710],{"class":275},[41,127242,127243,127245,127247,127249],{"class":43,"line":51},[41,127244,70605],{"class":58},[41,127246,51540],{"class":275},[41,127248,54840],{"class":58},[41,127250,1434],{"class":275},[41,127252,127253],{"class":43,"line":62},[41,127254,1706],{"class":275},[41,127256,127257,127259],{"class":43,"line":70},[41,127258,20],{"class":51403},[41,127260,15710],{"class":275},[41,127262,127263,127265,127267,127270],{"class":43,"line":76},[41,127264,70605],{"class":58},[41,127266,51540],{"class":275},[41,127268,127269],{"class":58},"underline",[41,127271,1434],{"class":275},[41,127273,127274],{"class":43,"line":83},[41,127275,1706],{"class":275},[241,127277,127279],{"id":127278},"_644-文本缩进","6.4.4 文本缩进",[20,127281,127282],{},"实现文本的第一行首行缩进自己指定的距离",[20,127284,127285],{},"20px往右边走；-20px往左边走",[20,127287,127288],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[32,127290,127292],{"className":126655,"code":127291,"language":126657,"meta":37,"style":37},"p {\n  text-indent: 2em;\n}\n",[24,127293,127294,127300,127313],{"__ignoreMap":37},[41,127295,127296,127298],{"class":43,"line":44},[41,127297,20],{"class":51403},[41,127299,15710],{"class":275},[41,127301,127302,127305,127307,127309,127311],{"class":43,"line":51},[41,127303,127304],{"class":58},"  text-indent",[41,127306,51540],{"class":275},[41,127308,351],{"class":58},[41,127310,23691],{"class":271},[41,127312,1434],{"class":275},[41,127314,127315],{"class":43,"line":62},[41,127316,1706],{"class":275},[241,127318,127320],{"id":127319},"_645-行间距","6.4.5 行间距",[20,127322,127323],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[32,127325,127327],{"className":126655,"code":127326,"language":126657,"meta":37,"style":37},"p {\n  line-height: 1.6;\n}\n",[24,127328,127329,127335,127347],{"__ignoreMap":37},[41,127330,127331,127333],{"class":43,"line":44},[41,127332,20],{"class":51403},[41,127334,15710],{"class":275},[41,127336,127337,127340,127342,127345],{"class":43,"line":51},[41,127338,127339],{"class":58},"  line-height",[41,127341,51540],{"class":275},[41,127343,127344],{"class":58},"1.6",[41,127346,1434],{"class":275},[41,127348,127349],{"class":43,"line":62},[41,127350,1706],{"class":275},[189,127352,127353],{},"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":37,"searchDepth":51,"depth":51,"links":127355},[127356,127357,127365,127372],{"id":126837,"depth":51,"text":126838},{"id":126872,"depth":51,"text":126873,"children":127358},[127359,127360,127361,127362,127363,127364],{"id":126879,"depth":62,"text":126880},{"id":126892,"depth":62,"text":126893},{"id":126965,"depth":62,"text":126966},{"id":126978,"depth":62,"text":126979},{"id":126997,"depth":62,"text":126998},{"id":127010,"depth":62,"text":127011},{"id":127017,"depth":51,"text":127018,"children":127366},[127367,127368,127369,127370,127371],{"id":127024,"depth":62,"text":127025},{"id":127036,"depth":62,"text":127037},{"id":127089,"depth":62,"text":127090},{"id":127110,"depth":62,"text":127111},{"id":127131,"depth":62,"text":127132},{"id":127157,"depth":51,"text":127158,"children":127373},[127374,127375,127376,127377,127378],{"id":127161,"depth":62,"text":127162},{"id":127211,"depth":62,"text":127212},{"id":127225,"depth":62,"text":127226},{"id":127278,"depth":62,"text":127279},{"id":127319,"depth":62,"text":127320},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126829,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127385,"title":127386,"body":127387,"description":196,"extension":197,"meta":128036,"navigation":79,"path":128037,"seo":128038,"stem":128039,"__hash__":128040},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127388,"toc":128017},[127389,127392,127396,127400,127460,127464,127474,127477,127480,127484,127509,127513,127516,127519,127522,127525,127528,127532,127535,127538,127580,127583,127609,127615,127618,127622,127626,127632,127635,127638,127641,127644,127647,127650,127695,127699,127702,127705,127709,127713,127742,127745,127750,127753,127756,127759,127762,127766,127770,127773,127775,127778,127782,127785,127789,127792,127795,127798,127802,127806,127812,127822,127825,127828,127831,127834,127837,127960,127968,127976,128014],[10,127390,127386],{"id":127391},"_7-css引入方式与选择器进阶",[15,127393,127395],{"id":127394},"_71-css引入方式","7.1 css引入方式",[241,127397,127399],{"id":127398},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[32,127401,127405],{"className":127402,"code":127403,"language":127404,"meta":37,"style":37},"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",[24,127406,127407,127415,127422,127434,127447,127452],{"__ignoreMap":37},[41,127408,127409,127411,127413],{"class":43,"line":44},[41,127410,1183],{"class":275},[41,127412,189],{"class":51403},[41,127414,51410],{"class":275},[41,127416,127417,127420],{"class":43,"line":51},[41,127418,127419],{"class":51403},"  h1",[41,127421,15710],{"class":275},[41,127423,127424,127427,127429,127432],{"class":43,"line":62},[41,127425,127426],{"class":58},"    color",[41,127428,51540],{"class":275},[41,127430,127431],{"class":58},"blue",[41,127433,1434],{"class":275},[41,127435,127436,127439,127441,127443,127445],{"class":43,"line":70},[41,127437,127438],{"class":58},"    font-size",[41,127440,51540],{"class":275},[41,127442,1073],{"class":58},[41,127444,51595],{"class":271},[41,127446,1434],{"class":275},[41,127448,127449],{"class":43,"line":76},[41,127450,127451],{"class":275},"  }\n",[41,127453,127454,127456,127458],{"class":43,"line":83},[41,127455,51888],{"class":275},[41,127457,189],{"class":51403},[41,127459,51410],{"class":275},[20,127461,127462,26576],{},[423,127463,126743],{},[20,127465,77329,127466,127469,127470,127473],{},[24,127467,127468],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[24,127471,127472],{},"\u003Chead>","标签中",[20,127475,127476],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[20,127478,127479],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[241,127481,127483],{"id":127482},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[32,127485,127487],{"className":127402,"code":127486,"language":127404,"meta":37,"style":37},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[24,127488,127489],{"__ignoreMap":37},[41,127490,127491,127493,127495,127497,127499,127502,127505,127507],{"class":43,"line":44},[41,127492,1183],{"class":275},[41,127494,20],{"class":51403},[41,127496,62729],{"class":54},[41,127498,321],{"class":275},[41,127500,127501],{"class":378},"\"color: red; font-size: 16px;\"",[41,127503,127504],{"class":275},">这是一个段落\u003C\u002F",[41,127506,20],{"class":51403},[41,127508,51410],{"class":275},[20,127510,127511,26576],{},[423,127512,126743],{},[20,127514,127515],{},"①style其实就是标签的属性",[20,127517,127518],{},"②在双引号中间，写法要符合css规范",[20,127520,127521],{},"③可以控制当前的标签设置样式",[20,127523,127524],{},"④书写繁琐，简单时才用",[20,127526,127527],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[241,127529,127531],{"id":127530},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[20,127533,127534],{},"使用最多，单独建一个css文件，然后html引用",[20,127536,127537],{},"①css文件部分： style.css",[32,127539,127541],{"className":126655,"code":127540,"language":126657,"meta":37,"style":37},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[24,127542,127543,127548,127554,127564,127576],{"__ignoreMap":37},[41,127544,127545],{"class":43,"line":44},[41,127546,127547],{"class":47},"\u002F* style.css *\u002F\n",[41,127549,127550,127552],{"class":43,"line":51},[41,127551,10],{"class":51403},[41,127553,15710],{"class":275},[41,127555,127556,127558,127560,127562],{"class":43,"line":62},[41,127557,71008],{"class":58},[41,127559,51540],{"class":275},[41,127561,127431],{"class":58},[41,127563,1434],{"class":275},[41,127565,127566,127568,127570,127572,127574],{"class":43,"line":70},[41,127567,70729],{"class":58},[41,127569,51540],{"class":275},[41,127571,1073],{"class":58},[41,127573,51595],{"class":271},[41,127575,1434],{"class":275},[41,127577,127578],{"class":43,"line":76},[41,127579,1706],{"class":275},[20,127581,127582],{},"②html部分",[32,127584,127586],{"className":127402,"code":127585,"language":127404,"meta":37,"style":37},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[24,127587,127588],{"__ignoreMap":37},[41,127589,127590,127592,127594,127596,127598,127600,127602,127604,127607],{"class":43,"line":44},[41,127591,1183],{"class":275},[41,127593,69108],{"class":51403},[41,127595,69111],{"class":54},[41,127597,321],{"class":275},[41,127599,69116],{"class":378},[41,127601,61160],{"class":54},[41,127603,321],{"class":275},[41,127605,127606],{"class":378},"\"style.css\"",[41,127608,51410],{"class":275},[20,127610,127611,127614],{},[24,127612,127613],{},"\u003Chr>","水平线标签（但是不常用！）",[20,127616,127617],{},"ctrl+0回到页面原来大小",[15,127619,127621],{"id":127620},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[241,127623,127625],{"id":127624},"_721-快速生成html","7.2.1 快速生成html",[20,127627,127628,127629],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[24,127630,127631],{},"\u003Cdiv>``\u003C\u002Fdiv>",[20,127633,127634],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[20,127636,127637],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[20,127639,127640],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[20,127642,127643],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[20,127645,127646],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[20,127648,127649],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[32,127651,127653],{"className":127402,"code":127652,"language":127404,"meta":37,"style":37},"\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",[24,127654,127655,127660,127665,127670,127675,127680,127685,127690],{"__ignoreMap":37},[41,127656,127657],{"class":43,"line":44},[41,127658,127659],{"class":47},"\u003C!-- Emmet 语法示例 -->\n",[41,127661,127662],{"class":43,"line":51},[41,127663,127664],{"class":47},"\u003C!-- div*3        → 生成3个div -->\n",[41,127666,127667],{"class":43,"line":62},[41,127668,127669],{"class":47},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[41,127671,127672],{"class":43,"line":70},[41,127673,127674],{"class":47},"\u003C!-- div+p        → 兄弟div和p -->\n",[41,127676,127677],{"class":43,"line":76},[41,127678,127679],{"class":47},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[41,127681,127682],{"class":43,"line":83},[41,127683,127684],{"class":47},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[41,127686,127687],{"class":43,"line":89},[41,127688,127689],{"class":47},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[41,127691,127692],{"class":43,"line":96},[41,127693,127694],{"class":47},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[241,127696,127698],{"id":127697},"_722-快速生成css","7.2.2 快速生成css",[20,127700,127701],{},"简写开头",[20,127703,127704],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[15,127706,127708],{"id":127707},"_73-css复合选择器","7.3 css复合选择器",[241,127710,127712],{"id":127711},"_731-后代选择器","7.3.1 后代选择器",[32,127714,127716],{"className":126655,"code":127715,"language":126657,"meta":37,"style":37},".parent .child {\n  color: blue;\n}\n",[24,127717,127718,127728,127738],{"__ignoreMap":37},[41,127719,127720,127723,127726],{"class":43,"line":44},[41,127721,127722],{"class":54},".parent",[41,127724,127725],{"class":54}," .child",[41,127727,15710],{"class":275},[41,127729,127730,127732,127734,127736],{"class":43,"line":51},[41,127731,71008],{"class":58},[41,127733,51540],{"class":275},[41,127735,127431],{"class":58},[41,127737,1434],{"class":275},[41,127739,127740],{"class":43,"line":62},[41,127741,1706],{"class":275},[20,127743,127744],{},"元素1 元素2 {样式声明}",[20,127746,127747],{},[423,127748,127749],{},"注意点:",[20,127751,127752],{},"①元素1和元素2中间用空格隔开",[20,127754,127755],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[20,127757,127758],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[20,127760,127761],{},"④元素1和元素2可以是任意基础选择器",[241,127763,127765],{"id":127764},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[20,127767,127768],{},[423,127769,127749],{},[20,127771,127772],{},"①元素1和元素2中间用大于号隔开",[20,127774,127755],{},[20,127776,127777],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[241,127779,127781],{"id":127780},"_733-并集选择器","7.3.3 并集选择器",[20,127783,127784],{},"元素1，元素2 {样式声明}",[20,127786,127787],{},[423,127788,127749],{},[20,127790,127791],{},"①元素1和元素2中间用逗号隔开",[20,127793,127794],{},"②逗号可以理解为和的意思",[20,127796,127797],{},"③并集选择器通常用于集体声明",[241,127799,127801],{"id":127800},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[20,127803,127804],{},[423,127805,127749],{},[20,127807,127808,127809,127811],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69108,127810],{},"－:visited－:hover－:active。",[20,127813,127814,127815,127818,127819,25843],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127816,127817],"hover",{}," 、 ",[127820,127821],"first-child",{},[20,127823,127824],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[20,127826,127827],{},"link对没访问的进行设置",[20,127829,127830],{},"vistied对已访问的进行改变",[20,127832,127833],{},"hover鼠标经过就会变",[20,127835,127836],{},"active常按(点)就会变",[32,127838,127840],{"className":126655,"code":127839,"language":126657,"meta":37,"style":37},"\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",[24,127841,127842,127847,127856,127866,127876,127880,127889,127900,127904,127912,127922,127932,127936,127945,127956],{"__ignoreMap":37},[41,127843,127844],{"class":43,"line":44},[41,127845,127846],{"class":47},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[41,127848,127849,127851,127854],{"class":43,"line":51},[41,127850,511],{"class":51403},[41,127852,127853],{"class":54},":link",[41,127855,15710],{"class":275},[41,127857,127858,127860,127862,127864],{"class":43,"line":62},[41,127859,71008],{"class":58},[41,127861,51540],{"class":275},[41,127863,62472],{"class":58},[41,127865,1434],{"class":275},[41,127867,127868,127870,127872,127874],{"class":43,"line":70},[41,127869,70605],{"class":58},[41,127871,51540],{"class":275},[41,127873,54840],{"class":58},[41,127875,1434],{"class":275},[41,127877,127878],{"class":43,"line":76},[41,127879,1706],{"class":275},[41,127881,127882,127884,127887],{"class":43,"line":83},[41,127883,511],{"class":51403},[41,127885,127886],{"class":54},":visited",[41,127888,15710],{"class":275},[41,127890,127891,127893,127895,127898],{"class":43,"line":89},[41,127892,71008],{"class":58},[41,127894,51540],{"class":275},[41,127896,127897],{"class":58},"purple",[41,127899,1434],{"class":275},[41,127901,127902],{"class":43,"line":96},[41,127903,1706],{"class":275},[41,127905,127906,127908,127910],{"class":43,"line":104},[41,127907,511],{"class":51403},[41,127909,61043],{"class":54},[41,127911,15710],{"class":275},[41,127913,127914,127916,127918,127920],{"class":43,"line":176},[41,127915,71008],{"class":58},[41,127917,51540],{"class":275},[41,127919,54992],{"class":58},[41,127921,1434],{"class":275},[41,127923,127924,127926,127928,127930],{"class":43,"line":184},[41,127925,70605],{"class":58},[41,127927,51540],{"class":275},[41,127929,127269],{"class":58},[41,127931,1434],{"class":275},[41,127933,127934],{"class":43,"line":1757},[41,127935,1706],{"class":275},[41,127937,127938,127940,127943],{"class":43,"line":1763},[41,127939,511],{"class":51403},[41,127941,127942],{"class":54},":active",[41,127944,15710],{"class":275},[41,127946,127947,127949,127951,127954],{"class":43,"line":1768},[41,127948,71008],{"class":58},[41,127950,51540],{"class":275},[41,127952,127953],{"class":58},"green",[41,127955,1434],{"class":275},[41,127957,127958],{"class":43,"line":1782},[41,127959,1706],{"class":275},[241,127961,127963,127964,127967],{"id":127962},"_735-伪类选择器","7.3.5 ",[127965,127966],"focus",{},"伪类选择器",[20,127969,127970,127972,127973,127975],{},[127965,127971],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[24,127974,126716],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[32,127977,127979],{"className":126655,"code":127978,"language":126657,"meta":37,"style":37},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[24,127980,127981,127989,128000,128010],{"__ignoreMap":37},[41,127982,127983,127985,127987],{"class":43,"line":44},[41,127984,53924],{"class":51403},[41,127986,62003],{"class":54},[41,127988,15710],{"class":275},[41,127990,127991,127994,127996,127998],{"class":43,"line":51},[41,127992,127993],{"class":58},"  border-color",[41,127995,51540],{"class":275},[41,127997,54992],{"class":58},[41,127999,1434],{"class":275},[41,128001,128002,128004,128006,128008],{"class":43,"line":62},[41,128003,70901],{"class":58},[41,128005,51540],{"class":275},[41,128007,54840],{"class":58},[41,128009,1434],{"class":275},[41,128011,128012],{"class":43,"line":70},[41,128013,1706],{"class":275},[189,128015,128016],{},"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":37,"searchDepth":51,"depth":51,"links":128018},[128019,128024,128028],{"id":127394,"depth":51,"text":127395,"children":128020},[128021,128022,128023],{"id":127398,"depth":62,"text":127399},{"id":127482,"depth":62,"text":127483},{"id":127530,"depth":62,"text":127531},{"id":127620,"depth":51,"text":127621,"children":128025},[128026,128027],{"id":127624,"depth":62,"text":127625},{"id":127697,"depth":62,"text":127698},{"id":127707,"depth":51,"text":127708,"children":128029},[128030,128031,128032,128033,128034],{"id":127711,"depth":62,"text":127712},{"id":127764,"depth":62,"text":127765},{"id":127780,"depth":62,"text":127781},{"id":127800,"depth":62,"text":127801},{"id":127962,"depth":62,"text":128035},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127386,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128042,"title":128043,"body":128044,"description":196,"extension":197,"meta":129967,"navigation":79,"path":129968,"seo":129969,"stem":129970,"__hash__":129971},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128045,"toc":129941},[128046,128049,128053,128062,128066,128092,128097,128100,128103,128106,128109,128113,128116,128126,128134,128138,128173,128178,128181,128184,128187,128190,128194,128197,128206,128210,128223,128228,128231,128234,128237,128241,128244,128248,128251,128306,128309,128340,128343,128397,128401,128404,128570,128693,128696,128699,128702,128705,128709,128712,128716,128719,128722,128726,128729,128760,128787,128815,128818,128822,128848,128891,128895,128989,128992,129019,129022,129025,129028,129031,129034,129037,129040,129043,129046,129050,129107,129134,129138,129186,129190,129231,129233,129236,129239,129242,129245,129249,129341,129344,129347,129350,129354,129477,129678,129682,129686,129689,129692,129695,129699,129702,129705,129730,129733,129736,129739,129742,129745,129749,129757,129819,129822,129880,129883,129886,129889,129892,129895,129898,129901,129938],[10,128047,128043],{"id":128048},"_8-css显示模式与背景特性",[15,128050,128052],{"id":128051},"_81-css元素显示模式","8.1 css元素显示模式",[20,128054,128055,128056,128058,128059,128061],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[24,128057,126266],{},"自己占一行，比如一行可以放多个",[24,128060,126269],{},"，HTML 元素一般分为块元素和行内元素两种类型",[241,128063,128065],{"id":128064},"_811-块元素","8.1.1 块元素",[20,128067,128068,128069,128071,128072,486,128075,486,128077,486,128079,486,128082,486,128085,128088,128089,128091],{},"常见的块元素有",[24,128070,126170],{},"~",[24,128073,128074],{},"\u003Ch6>",[24,128076,126196],{},[24,128078,126266],{},[24,128080,128081],{},"\u003Cul>",[24,128083,128084],{},"\u003Col>",[24,128086,128087],{},"\u003Cli>","等，其中 ",[24,128090,126266],{}," 标签是最典型的块元素",[20,128093,128094],{},[423,128095,128096],{},"块级元素的特点：",[20,128098,128099],{},"① 比较霸道，自己独占一行。",[20,128101,128102],{},"② 高度，宽度、外边距以及内边距都可以控制。",[20,128104,128105],{},"③ 宽度默认是容器（父级宽度）的100%。",[20,128107,128108],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[20,128110,128111],{},[423,128112,305],{},[20,128114,128115],{},"①文字类的元素内不能使用块级元素",[20,128117,77352,128118,128120,128121,128123,128124],{},[24,128119,126196],{}," 标签主要用于存放文字，因此 ",[24,128122,126196],{}," 里面不能放块级元素，特别是不能放",[24,128125,126266],{},[20,128127,128128,128129,128071,128131,128133],{},"⑥同理， ",[24,128130,126170],{},[24,128132,128074],{},"等都是文字类块级标签，里面也不能放其他块级元素",[241,128135,128137],{"id":128136},"_812-行内元素","8.1.2 行内元素",[20,128139,128140,128141,486,128143,486,128146,486,128149,486,128152,486,128155,486,128158,486,128161,486,128164,486,128167,128169,128170,128172],{},"常见的行内元素有 ",[24,128142,126428],{},[24,128144,128145],{},"\u003Cstrong>",[24,128147,128148],{},"\u003Cb>",[24,128150,128151],{},"\u003Cem>",[24,128153,128154],{},"\u003Ci>",[24,128156,128157],{},"\u003Cdel>",[24,128159,128160],{},"\u003Cs>",[24,128162,128163],{},"\u003Cins>",[24,128165,128166],{},"\u003Cu>",[24,128168,126269],{}," 等，其中 ",[24,128171,126269],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[20,128174,128175],{},[423,128176,128177],{},"特点：",[20,128179,128180],{},"① 相邻行内元素在一行上，一行可以显示多个。",[20,128182,128183],{},"② 高、宽直接设置是无效的。",[20,128185,128186],{},"③ 默认宽度就是它本身内容的宽度。",[20,128188,128189],{},"④ 行内元素只能容纳文本或其他行内元素。",[20,128191,128192],{},[423,128193,305],{},[20,128195,128196],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[20,128198,128199,128200,128202,128203,128205],{},"②特殊情况链接 ",[24,128201,126428],{}," 里面可以放块级元素，但是给 ",[24,128204,126428],{}," 转换一下块级模式最安全",[241,128207,128209],{"id":128208},"_813-行内块元素","8.1.3 行内块元素",[20,128211,128212,128213,486,128216,486,128219,128222],{},"在行内元素中有几个特殊的标签 —— ",[24,128214,128215],{},"\u003Cimg \u002F>",[24,128217,128218],{},"\u003Cinput \u002F>",[24,128220,128221],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[20,128224,128225],{},[423,128226,128227],{},"行内块元素的特点：",[20,128229,128230],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[20,128232,128233],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[20,128235,128236],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[241,128238,128240],{"id":128239},"_814-总结","8.1.4 总结",[1603,128242],{"style":126511,"src":128243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[241,128245,128247],{"id":128246},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[20,128249,128250],{},"①转换为块元素：display:block;",[32,128252,128254],{"className":126655,"code":128253,"language":126657,"meta":37,"style":37},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[24,128255,128256,128261,128267,128278,128290,128302],{"__ignoreMap":37},[41,128257,128258],{"class":43,"line":44},[41,128259,128260],{"class":47},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[41,128262,128263,128265],{"class":43,"line":51},[41,128264,511],{"class":51403},[41,128266,15710],{"class":275},[41,128268,128269,128272,128274,128276],{"class":43,"line":62},[41,128270,128271],{"class":58},"  display",[41,128273,51540],{"class":275},[41,128275,60972],{"class":58},[41,128277,1434],{"class":275},[41,128279,128280,128282,128284,128286,128288],{"class":43,"line":70},[41,128281,70671],{"class":58},[41,128283,51540],{"class":275},[41,128285,584],{"class":58},[41,128287,51595],{"class":271},[41,128289,1434],{"class":275},[41,128291,128292,128294,128296,128298,128300],{"class":43,"line":76},[41,128293,70891],{"class":58},[41,128295,51540],{"class":275},[41,128297,674],{"class":58},[41,128299,51595],{"class":271},[41,128301,1434],{"class":275},[41,128303,128304],{"class":43,"line":83},[41,128305,1706],{"class":275},[20,128307,128308],{},"②转换为行内元素：display:inline;",[32,128310,128312],{"className":126655,"code":128311,"language":126657,"meta":37,"style":37},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[24,128313,128314,128319,128325,128336],{"__ignoreMap":37},[41,128315,128316],{"class":43,"line":44},[41,128317,128318],{"class":47},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[41,128320,128321,128323],{"class":43,"line":51},[41,128322,51714],{"class":51403},[41,128324,15710],{"class":275},[41,128326,128327,128329,128331,128334],{"class":43,"line":62},[41,128328,128271],{"class":58},[41,128330,51540],{"class":275},[41,128332,128333],{"class":58},"inline",[41,128335,1434],{"class":275},[41,128337,128338],{"class":43,"line":70},[41,128339,1706],{"class":275},[20,128341,128342],{},"③转换为行内块：display:inline-block;",[32,128344,128346],{"className":126655,"code":128345,"language":126657,"meta":37,"style":37},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[24,128347,128348,128353,128359,128369,128381,128393],{"__ignoreMap":37},[41,128349,128350],{"class":43,"line":44},[41,128351,128352],{"class":47},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[41,128354,128355,128357],{"class":43,"line":51},[41,128356,41],{"class":51403},[41,128358,15710],{"class":275},[41,128360,128361,128363,128365,128367],{"class":43,"line":62},[41,128362,128271],{"class":58},[41,128364,51540],{"class":275},[41,128366,72486],{"class":58},[41,128368,1434],{"class":275},[41,128370,128371,128373,128375,128377,128379],{"class":43,"line":70},[41,128372,70671],{"class":58},[41,128374,51540],{"class":275},[41,128376,885],{"class":58},[41,128378,51595],{"class":271},[41,128380,1434],{"class":275},[41,128382,128383,128385,128387,128389,128391],{"class":43,"line":76},[41,128384,70891],{"class":58},[41,128386,51540],{"class":275},[41,128388,1224],{"class":58},[41,128390,51595],{"class":271},[41,128392,1434],{"class":275},[41,128394,128395],{"class":43,"line":83},[41,128396,1706],{"class":275},[241,128398,128400],{"id":128399},"_816-小米侧边栏","8.1.6 小米侧边栏",[1603,128402],{"style":126511,"src":128403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[32,128405,128407],{"className":127402,"code":128406,"language":127404,"meta":37,"style":37},"\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",[24,128408,128409,128414,128429,128448,128467,128486,128505,128524,128543,128562],{"__ignoreMap":37},[41,128410,128411],{"class":43,"line":44},[41,128412,128413],{"class":47},"\u003C!-- 小米侧边栏案例 -->\n",[41,128415,128416,128418,128420,128422,128424,128427],{"class":43,"line":51},[41,128417,1183],{"class":275},[41,128419,51714],{"class":51403},[41,128421,53589],{"class":54},[41,128423,321],{"class":275},[41,128425,128426],{"class":378},"\"sidebar\"",[41,128428,51410],{"class":275},[41,128430,128431,128433,128435,128437,128439,128441,128444,128446],{"class":43,"line":62},[41,128432,52247],{"class":275},[41,128434,511],{"class":51403},[41,128436,61160],{"class":54},[41,128438,321],{"class":275},[41,128440,61165],{"class":378},[41,128442,128443],{"class":275},">手机 电话卡\u003C\u002F",[41,128445,511],{"class":51403},[41,128447,51410],{"class":275},[41,128449,128450,128452,128454,128456,128458,128460,128463,128465],{"class":43,"line":70},[41,128451,52247],{"class":275},[41,128453,511],{"class":51403},[41,128455,61160],{"class":54},[41,128457,321],{"class":275},[41,128459,61165],{"class":378},[41,128461,128462],{"class":275},">电视 盒子\u003C\u002F",[41,128464,511],{"class":51403},[41,128466,51410],{"class":275},[41,128468,128469,128471,128473,128475,128477,128479,128482,128484],{"class":43,"line":76},[41,128470,52247],{"class":275},[41,128472,511],{"class":51403},[41,128474,61160],{"class":54},[41,128476,321],{"class":275},[41,128478,61165],{"class":378},[41,128480,128481],{"class":275},">笔记本 平板\u003C\u002F",[41,128483,511],{"class":51403},[41,128485,51410],{"class":275},[41,128487,128488,128490,128492,128494,128496,128498,128501,128503],{"class":43,"line":83},[41,128489,52247],{"class":275},[41,128491,511],{"class":51403},[41,128493,61160],{"class":54},[41,128495,321],{"class":275},[41,128497,61165],{"class":378},[41,128499,128500],{"class":275},">出行 穿戴\u003C\u002F",[41,128502,511],{"class":51403},[41,128504,51410],{"class":275},[41,128506,128507,128509,128511,128513,128515,128517,128520,128522],{"class":43,"line":89},[41,128508,52247],{"class":275},[41,128510,511],{"class":51403},[41,128512,61160],{"class":54},[41,128514,321],{"class":275},[41,128516,61165],{"class":378},[41,128518,128519],{"class":275},">智能 路由器\u003C\u002F",[41,128521,511],{"class":51403},[41,128523,51410],{"class":275},[41,128525,128526,128528,128530,128532,128534,128536,128539,128541],{"class":43,"line":96},[41,128527,52247],{"class":275},[41,128529,511],{"class":51403},[41,128531,61160],{"class":54},[41,128533,321],{"class":275},[41,128535,61165],{"class":378},[41,128537,128538],{"class":275},">健康 儿童\u003C\u002F",[41,128540,511],{"class":51403},[41,128542,51410],{"class":275},[41,128544,128545,128547,128549,128551,128553,128555,128558,128560],{"class":43,"line":104},[41,128546,52247],{"class":275},[41,128548,511],{"class":51403},[41,128550,61160],{"class":54},[41,128552,321],{"class":275},[41,128554,61165],{"class":378},[41,128556,128557],{"class":275},">耳机 音响\u003C\u002F",[41,128559,511],{"class":51403},[41,128561,51410],{"class":275},[41,128563,128564,128566,128568],{"class":43,"line":176},[41,128565,51888],{"class":275},[41,128567,51714],{"class":51403},[41,128569,51410],{"class":275},[32,128571,128573],{"className":126655,"code":128572,"language":126657,"meta":37,"style":37},".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",[24,128574,128575,128584,128594,128607,128619,128631,128643,128653,128664,128668,128678,128689],{"__ignoreMap":37},[41,128576,128577,128580,128582],{"class":43,"line":44},[41,128578,128579],{"class":54},".sidebar",[41,128581,1539],{"class":51403},[41,128583,15710],{"class":275},[41,128585,128586,128588,128590,128592],{"class":43,"line":51},[41,128587,128271],{"class":58},[41,128589,51540],{"class":275},[41,128591,60972],{"class":58},[41,128593,1434],{"class":275},[41,128595,128596,128598,128600,128603,128605],{"class":43,"line":62},[41,128597,70671],{"class":58},[41,128599,51540],{"class":275},[41,128601,128602],{"class":58},"234",[41,128604,51595],{"class":271},[41,128606,1434],{"class":275},[41,128608,128609,128611,128613,128615,128617],{"class":43,"line":70},[41,128610,70891],{"class":58},[41,128612,51540],{"class":275},[41,128614,725],{"class":58},[41,128616,51595],{"class":271},[41,128618,1434],{"class":275},[41,128620,128621,128623,128625,128627,128629],{"class":43,"line":76},[41,128622,127339],{"class":58},[41,128624,51540],{"class":275},[41,128626,725],{"class":58},[41,128628,51595],{"class":271},[41,128630,1434],{"class":275},[41,128632,128633,128635,128637,128639,128641],{"class":43,"line":83},[41,128634,70926],{"class":58},[41,128636,51540],{"class":275},[41,128638,1224],{"class":58},[41,128640,51595],{"class":271},[41,128642,1434],{"class":275},[41,128644,128645,128647,128649,128651],{"class":43,"line":89},[41,128646,71008],{"class":58},[41,128648,51540],{"class":275},[41,128650,60945],{"class":58},[41,128652,1434],{"class":275},[41,128654,128655,128657,128659,128662],{"class":43,"line":96},[41,128656,70981],{"class":58},[41,128658,51540],{"class":275},[41,128660,128661],{"class":58},"#55585a",[41,128663,1434],{"class":275},[41,128665,128666],{"class":43,"line":104},[41,128667,1706],{"class":275},[41,128669,128670,128672,128674,128676],{"class":43,"line":176},[41,128671,128579],{"class":54},[41,128673,1539],{"class":51403},[41,128675,61043],{"class":54},[41,128677,15710],{"class":275},[41,128679,128680,128682,128684,128687],{"class":43,"line":184},[41,128681,70981],{"class":58},[41,128683,51540],{"class":275},[41,128685,128686],{"class":58},"#ff6700",[41,128688,1434],{"class":275},[41,128690,128691],{"class":43,"line":1757},[41,128692,1706],{"class":275},[1603,128694],{"style":126511,"src":128695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[20,128697,128698],{},"行高=盒子高度：实现文字的垂直居中",[20,128700,128701],{},"原理讲解：",[1603,128703],{"style":126511,"src":128704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[15,128706,128708],{"id":128707},"_82-css背景","8.2 css背景",[20,128710,128711],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[241,128713,128715],{"id":128714},"_821-背景颜色","8.2.1 背景颜色",[20,128717,128718],{},"background-color:颜色值;",[20,128720,128721],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[241,128723,128725],{"id":128724},"_822-背景图片","8.2.2 背景图片",[20,128727,128728],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[32,128730,128732],{"className":126655,"code":128731,"language":126657,"meta":37,"style":37},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[24,128733,128734,128740,128756],{"__ignoreMap":37},[41,128735,128736,128738],{"class":43,"line":44},[41,128737,51714],{"class":51403},[41,128739,15710],{"class":275},[41,128741,128742,128745,128747,128749,128751,128754],{"class":43,"line":51},[41,128743,128744],{"class":58},"  background-image",[41,128746,51540],{"class":275},[41,128748,61829],{"class":58},[41,128750,276],{"class":275},[41,128752,128753],{"class":5354},"images\u002Fbg.png",[41,128755,2857],{"class":275},[41,128757,128758],{"class":43,"line":62},[41,128759,1706],{"class":275},[411,128761,128762,128771],{},[414,128763,128764],{},[417,128765,128766,128769],{},[420,128767,128768],{"align":23874},"参数值",[420,128770,102799],{"align":23874},[458,128772,128773,128780],{},[417,128774,128775,128777],{},[463,128776,54840],{"align":23874},[463,128778,128779],{"align":23874},"无背景图（默认的）",[417,128781,128782,128784],{},[463,128783,61829],{"align":23874},[463,128785,128786],{"align":23874},"使用绝对或相对地址指定背景图像",[32,128788,128789],{"className":126655,"code":128731,"language":126657,"meta":37,"style":37},[24,128790,128791,128797,128811],{"__ignoreMap":37},[41,128792,128793,128795],{"class":43,"line":44},[41,128794,51714],{"class":51403},[41,128796,15710],{"class":275},[41,128798,128799,128801,128803,128805,128807,128809],{"class":43,"line":51},[41,128800,128744],{"class":58},[41,128802,51540],{"class":275},[41,128804,61829],{"class":58},[41,128806,276],{"class":275},[41,128808,128753],{"class":5354},[41,128810,2857],{"class":275},[41,128812,128813],{"class":43,"line":62},[41,128814,1706],{"class":275},[20,128816,128817],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[241,128819,128821],{"id":128820},"_823-背景平铺","8.2.3 背景平铺",[32,128823,128825],{"className":126655,"code":128824,"language":126657,"meta":37,"style":37},"div {\n  background-repeat: no-repeat;\n}\n",[24,128826,128827,128833,128844],{"__ignoreMap":37},[41,128828,128829,128831],{"class":43,"line":44},[41,128830,51714],{"class":51403},[41,128832,15710],{"class":275},[41,128834,128835,128838,128840,128842],{"class":43,"line":51},[41,128836,128837],{"class":58},"  background-repeat",[41,128839,51540],{"class":275},[41,128841,61839],{"class":58},[41,128843,1434],{"class":275},[41,128845,128846],{"class":43,"line":62},[41,128847,1706],{"class":275},[411,128849,128850,128858],{},[414,128851,128852],{},[417,128853,128854,128856],{},[420,128855,128768],{"align":23874},[420,128857,102799],{"align":23874},[458,128859,128860,128868,128875,128883],{},[417,128861,128862,128865],{},[463,128863,128864],{"align":23874},"repeat",[463,128866,128867],{"align":23874},"背景图像在纵向和横向上平铺（默认的）",[417,128869,128870,128872],{},[463,128871,61839],{"align":23874},[463,128873,128874],{"align":23874},"背景图像不平铺",[417,128876,128877,128880],{},[463,128878,128879],{"align":23874},"repeat-x",[463,128881,128882],{"align":23874},"背景图像在横向上平铺",[417,128884,128885,128888],{},[463,128886,128887],{"align":23874},"repeat-y",[463,128889,128890],{"align":23874},"背景图像在纵向平铺",[241,128892,128894],{"id":128893},"_824-背景图片位置","8.2.4 背景图片位置",[32,128896,128898],{"className":126655,"code":128897,"language":126657,"meta":37,"style":37},"\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",[24,128899,128900,128905,128911,128925,128929,128934,128940,128956,128960,128965,128971,128985],{"__ignoreMap":37},[41,128901,128902],{"class":43,"line":44},[41,128903,128904],{"class":47},"\u002F* 方位名词 *\u002F\n",[41,128906,128907,128909],{"class":43,"line":51},[41,128908,51714],{"class":51403},[41,128910,15710],{"class":275},[41,128912,128913,128916,128918,128920,128923],{"class":43,"line":62},[41,128914,128915],{"class":58},"  background-position",[41,128917,51540],{"class":275},[41,128919,51695],{"class":58},[41,128921,128922],{"class":58}," top",[41,128924,1434],{"class":275},[41,128926,128927],{"class":43,"line":70},[41,128928,1706],{"class":275},[41,128930,128931],{"class":43,"line":76},[41,128932,128933],{"class":47},"\u002F* 精确单位 *\u002F\n",[41,128935,128936,128938],{"class":43,"line":83},[41,128937,51714],{"class":51403},[41,128939,15710],{"class":275},[41,128941,128942,128944,128946,128948,128950,128952,128954],{"class":43,"line":89},[41,128943,128915],{"class":58},[41,128945,51540],{"class":275},[41,128947,973],{"class":58},[41,128949,51595],{"class":271},[41,128951,57607],{"class":58},[41,128953,51595],{"class":271},[41,128955,1434],{"class":275},[41,128957,128958],{"class":43,"line":96},[41,128959,1706],{"class":275},[41,128961,128962],{"class":43,"line":104},[41,128963,128964],{"class":47},"\u002F* 混合单位 *\u002F\n",[41,128966,128967,128969],{"class":43,"line":176},[41,128968,51714],{"class":51403},[41,128970,15710],{"class":275},[41,128972,128973,128975,128977,128979,128981,128983],{"class":43,"line":184},[41,128974,128915],{"class":58},[41,128976,51540],{"class":275},[41,128978,973],{"class":58},[41,128980,51595],{"class":271},[41,128982,17282],{"class":58},[41,128984,1434],{"class":275},[41,128986,128987],{"class":43,"line":1757},[41,128988,1706],{"class":275},[20,128990,128991],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[411,128993,128994,129002],{},[414,128995,128996],{},[417,128997,128998,129000],{},[420,128999,128768],{"align":23874},[420,129001,25972],{"align":23874},[458,129003,129004,129011],{},[417,129005,129006,129008],{},[463,129007,52071],{"align":23874},[463,129009,129010],{"align":23874},"百分数|由浮点数和单位标识符组成的长度值",[417,129012,129013,129016],{},[463,129014,129015],{"align":23874},"position",[463,129017,129018],{"align":23874},"top|center|bottom|left|center|right 方位名词",[20,129020,129021],{},"其他说明：",[20,129023,129024],{},"①参数是方位名词",[20,129026,129027],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[20,129029,129030],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[20,129032,129033],{},"②参数是精确单位",[20,129035,129036],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[20,129038,129039],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[20,129041,129042],{},"③参数是混合单位",[20,129044,129045],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[241,129047,129049],{"id":129048},"_825-背景图片固定","8.2.5 背景图片固定",[32,129051,129053],{"className":126655,"code":129052,"language":126657,"meta":37,"style":37},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[24,129054,129055,129060,129066,129078,129082,129087,129093,129103],{"__ignoreMap":37},[41,129056,129057],{"class":43,"line":44},[41,129058,129059],{"class":47},"\u002F* 背景滚动（默认） *\u002F\n",[41,129061,129062,129064],{"class":43,"line":51},[41,129063,51714],{"class":51403},[41,129065,15710],{"class":275},[41,129067,129068,129071,129073,129076],{"class":43,"line":62},[41,129069,129070],{"class":58},"  background-attachment",[41,129072,51540],{"class":275},[41,129074,129075],{"class":58},"scroll",[41,129077,1434],{"class":275},[41,129079,129080],{"class":43,"line":70},[41,129081,1706],{"class":275},[41,129083,129084],{"class":43,"line":76},[41,129085,129086],{"class":47},"\u002F* 背景固定 *\u002F\n",[41,129088,129089,129091],{"class":43,"line":83},[41,129090,51714],{"class":51403},[41,129092,15710],{"class":275},[41,129094,129095,129097,129099,129101],{"class":43,"line":89},[41,129096,129070],{"class":58},[41,129098,51540],{"class":275},[41,129100,86336],{"class":58},[41,129102,1434],{"class":275},[41,129104,129105],{"class":43,"line":96},[41,129106,1706],{"class":275},[411,129108,129109,129118],{},[414,129110,129111],{},[417,129112,129113,129116],{},[420,129114,129115],{"align":23874},"参数",[420,129117,102799],{"align":23874},[458,129119,129120,129127],{},[417,129121,129122,129124],{},[463,129123,129075],{"align":23874},[463,129125,129126],{"align":23874},"背景图像是随对象内容滚动",[417,129128,129129,129131],{},[463,129130,86336],{"align":23874},[463,129132,129133],{"align":23874},"背景图像固定",[241,129135,129137],{"id":129136},"_826-背景样式合写","8.2.6 背景样式合写",[32,129139,129141],{"className":126655,"code":129140,"language":126657,"meta":37,"style":37},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[24,129142,129143,129148,129154,129182],{"__ignoreMap":37},[41,129144,129145],{"class":43,"line":44},[41,129146,129147],{"class":47},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[41,129149,129150,129152],{"class":43,"line":51},[41,129151,51714],{"class":51403},[41,129153,15710],{"class":275},[41,129155,129156,129158,129160,129162,129165,129167,129169,129171,129173,129176,129178,129180],{"class":43,"line":62},[41,129157,70714],{"class":58},[41,129159,51540],{"class":275},[41,129161,60945],{"class":58},[41,129163,129164],{"class":58}," url",[41,129166,276],{"class":275},[41,129168,128753],{"class":5354},[41,129170,13852],{"class":275},[41,129172,61839],{"class":58},[41,129174,129175],{"class":58}," fixed",[41,129177,17282],{"class":58},[41,129179,128922],{"class":58},[41,129181,1434],{"class":275},[41,129183,129184],{"class":43,"line":70},[41,129185,1706],{"class":275},[241,129187,129189],{"id":129188},"_827-背景色半透明","8.2.7 背景色半透明",[32,129191,129193],{"className":126655,"code":129192,"language":126657,"meta":37,"style":37},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[24,129194,129195,129201,129227],{"__ignoreMap":37},[41,129196,129197,129199],{"class":43,"line":44},[41,129198,51714],{"class":51403},[41,129200,15710],{"class":275},[41,129202,129203,129205,129207,129209,129211,129213,129215,129217,129219,129221,129223,129225],{"class":43,"line":51},[41,129204,70714],{"class":58},[41,129206,51540],{"class":275},[41,129208,55213],{"class":58},[41,129210,276],{"class":275},[41,129212,465],{"class":58},[41,129214,12573],{"class":275},[41,129216,465],{"class":58},[41,129218,12573],{"class":275},[41,129220,465],{"class":58},[41,129222,12573],{"class":275},[41,129224,100624],{"class":58},[41,129226,2857],{"class":275},[41,129228,129229],{"class":43,"line":62},[41,129230,1706],{"class":275},[20,129232,99499],{},[20,129234,129235],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[20,129237,129238],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[20,129240,129241],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[20,129243,129244],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[241,129246,129248],{"id":129247},"_828-总结","8.2.8 总结",[411,129250,129251,129262],{},[414,129252,129253],{},[417,129254,129255,129258,129260],{},[420,129256,129257],{"align":23874},"属性",[420,129259,102799],{"align":23874},[420,129261,426],{"align":23874},[458,129263,129264,129275,129286,129297,129308,129319,129330],{},[417,129265,129266,129269,129272],{},[463,129267,129268],{"align":23874},"background-color",[463,129270,129271],{"align":23874},"背景颜色",[463,129273,129274],{"align":23874},"预定义的颜色值\u002F十六进制\u002FRGB代码",[417,129276,129277,129280,129283],{},[463,129278,129279],{"align":23874},"background-image",[463,129281,129282],{"align":23874},"背景图片",[463,129284,129285],{"align":23874},"url(图片路径)",[417,129287,129288,129291,129294],{},[463,129289,129290],{"align":23874},"background-repeat",[463,129292,129293],{"align":23874},"是否平铺",[463,129295,129296],{"align":23874},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[417,129298,129299,129302,129305],{},[463,129300,129301],{"align":23874},"background-position",[463,129303,129304],{"align":23874},"背景位置",[463,129306,129307],{"align":23874},"length\u002Fposition 分别是x和y坐标",[417,129309,129310,129313,129316],{},[463,129311,129312],{"align":23874},"background-attachment",[463,129314,129315],{"align":23874},"背景附着",[463,129317,129318],{"align":23874},"scroll(背景滚动) \u002Ffixed (背景固定)",[417,129320,129321,129324,129327],{},[463,129322,129323],{"align":23874},"背景简写",[463,129325,129326],{"align":23874},"书写更简单",[463,129328,129329],{"align":23874},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[417,129331,129332,129335,129338],{},[463,129333,129334],{"align":23874},"背景半透明",[463,129336,129337],{"align":23874},"背景颜色半透明",[463,129339,129340],{"align":23874},"background: rgba(0,0,0.3); 后面必须是4个值",[20,129342,129343],{},"颜色渐变：",[1603,129345],{"style":126511,"src":129346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1603,129348],{"style":126511,"src":129349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[241,129351,129353],{"id":129352},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[32,129355,129357],{"className":127402,"code":129356,"language":127404,"meta":37,"style":37},"\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",[24,129358,129359,129374,129393,129412,129431,129450,129469],{"__ignoreMap":37},[41,129360,129361,129363,129365,129367,129369,129372],{"class":43,"line":44},[41,129362,1183],{"class":275},[41,129364,51714],{"class":51403},[41,129366,53589],{"class":54},[41,129368,321],{"class":275},[41,129370,129371],{"class":378},"\"nav\"",[41,129373,51410],{"class":275},[41,129375,129376,129378,129380,129382,129384,129386,129389,129391],{"class":43,"line":51},[41,129377,52247],{"class":275},[41,129379,511],{"class":51403},[41,129381,61160],{"class":54},[41,129383,321],{"class":275},[41,129385,61165],{"class":378},[41,129387,129388],{"class":275},">五彩导航1\u003C\u002F",[41,129390,511],{"class":51403},[41,129392,51410],{"class":275},[41,129394,129395,129397,129399,129401,129403,129405,129408,129410],{"class":43,"line":62},[41,129396,52247],{"class":275},[41,129398,511],{"class":51403},[41,129400,61160],{"class":54},[41,129402,321],{"class":275},[41,129404,61165],{"class":378},[41,129406,129407],{"class":275},">五彩导航2\u003C\u002F",[41,129409,511],{"class":51403},[41,129411,51410],{"class":275},[41,129413,129414,129416,129418,129420,129422,129424,129427,129429],{"class":43,"line":70},[41,129415,52247],{"class":275},[41,129417,511],{"class":51403},[41,129419,61160],{"class":54},[41,129421,321],{"class":275},[41,129423,61165],{"class":378},[41,129425,129426],{"class":275},">五彩导航3\u003C\u002F",[41,129428,511],{"class":51403},[41,129430,51410],{"class":275},[41,129432,129433,129435,129437,129439,129441,129443,129446,129448],{"class":43,"line":76},[41,129434,52247],{"class":275},[41,129436,511],{"class":51403},[41,129438,61160],{"class":54},[41,129440,321],{"class":275},[41,129442,61165],{"class":378},[41,129444,129445],{"class":275},">五彩导航4\u003C\u002F",[41,129447,511],{"class":51403},[41,129449,51410],{"class":275},[41,129451,129452,129454,129456,129458,129460,129462,129465,129467],{"class":43,"line":83},[41,129453,52247],{"class":275},[41,129455,511],{"class":51403},[41,129457,61160],{"class":54},[41,129459,321],{"class":275},[41,129461,61165],{"class":378},[41,129463,129464],{"class":275},">五彩导航5\u003C\u002F",[41,129466,511],{"class":51403},[41,129468,51410],{"class":275},[41,129470,129471,129473,129475],{"class":43,"line":89},[41,129472,51888],{"class":275},[41,129474,51714],{"class":51403},[41,129476,51410],{"class":275},[32,129478,129480],{"className":126655,"code":129479,"language":126657,"meta":37,"style":37},".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",[24,129481,129482,129491,129501,129513,129525,129535,129547,129557,129561,129586,129609,129632,129655],{"__ignoreMap":37},[41,129483,129484,129487,129489],{"class":43,"line":44},[41,129485,129486],{"class":54},".nav",[41,129488,1539],{"class":51403},[41,129490,15710],{"class":275},[41,129492,129493,129495,129497,129499],{"class":43,"line":51},[41,129494,128271],{"class":58},[41,129496,51540],{"class":275},[41,129498,72486],{"class":58},[41,129500,1434],{"class":275},[41,129502,129503,129505,129507,129509,129511],{"class":43,"line":62},[41,129504,70671],{"class":58},[41,129506,51540],{"class":275},[41,129508,1090],{"class":58},[41,129510,51595],{"class":271},[41,129512,1434],{"class":275},[41,129514,129515,129517,129519,129521,129523],{"class":43,"line":70},[41,129516,70891],{"class":58},[41,129518,51540],{"class":275},[41,129520,1129],{"class":58},[41,129522,51595],{"class":271},[41,129524,1434],{"class":275},[41,129526,129527,129529,129531,129533],{"class":43,"line":76},[41,129528,70629],{"class":58},[41,129530,51540],{"class":275},[41,129532,51695],{"class":58},[41,129534,1434],{"class":275},[41,129536,129537,129539,129541,129543,129545],{"class":43,"line":83},[41,129538,127339],{"class":58},[41,129540,51540],{"class":275},[41,129542,1129],{"class":58},[41,129544,51595],{"class":271},[41,129546,1434],{"class":275},[41,129548,129549,129551,129553,129555],{"class":43,"line":89},[41,129550,71008],{"class":58},[41,129552,51540],{"class":275},[41,129554,60945],{"class":58},[41,129556,1434],{"class":275},[41,129558,129559],{"class":43,"line":96},[41,129560,1706],{"class":275},[41,129562,129563,129565,129567,129570,129572,129574,129577,129579,129581,129583],{"class":43,"line":104},[41,129564,129486],{"class":54},[41,129566,1539],{"class":51403},[41,129568,129569],{"class":54},":nth-child",[41,129571,276],{"class":275},[41,129573,26],{"class":58},[41,129575,129576],{"class":275},") { ",[41,129578,129268],{"class":58},[41,129580,51540],{"class":275},[41,129582,128686],{"class":58},[41,129584,129585],{"class":275},"; }\n",[41,129587,129588,129590,129592,129594,129596,129598,129600,129602,129604,129607],{"class":43,"line":176},[41,129589,129486],{"class":54},[41,129591,1539],{"class":51403},[41,129593,129569],{"class":54},[41,129595,276],{"class":275},[41,129597,351],{"class":58},[41,129599,129576],{"class":275},[41,129601,129268],{"class":58},[41,129603,51540],{"class":275},[41,129605,129606],{"class":58},"#ff0000",[41,129608,129585],{"class":275},[41,129610,129611,129613,129615,129617,129619,129621,129623,129625,129627,129630],{"class":43,"line":184},[41,129612,129486],{"class":54},[41,129614,1539],{"class":51403},[41,129616,129569],{"class":54},[41,129618,276],{"class":275},[41,129620,345],{"class":58},[41,129622,129576],{"class":275},[41,129624,129268],{"class":58},[41,129626,51540],{"class":275},[41,129628,129629],{"class":58},"#00a4ff",[41,129631,129585],{"class":275},[41,129633,129634,129636,129638,129640,129642,129644,129646,129648,129650,129653],{"class":43,"line":1757},[41,129635,129486],{"class":54},[41,129637,1539],{"class":51403},[41,129639,129569],{"class":54},[41,129641,276],{"class":275},[41,129643,566],{"class":58},[41,129645,129576],{"class":275},[41,129647,129268],{"class":58},[41,129649,51540],{"class":275},[41,129651,129652],{"class":58},"#ff00ff",[41,129654,129585],{"class":275},[41,129656,129657,129659,129661,129663,129665,129667,129669,129671,129673,129676],{"class":43,"line":1763},[41,129658,129486],{"class":54},[41,129660,1539],{"class":51403},[41,129662,129569],{"class":54},[41,129664,276],{"class":275},[41,129666,592],{"class":58},[41,129668,129576],{"class":275},[41,129670,129268],{"class":58},[41,129672,51540],{"class":275},[41,129674,129675],{"class":58},"#00ff00",[41,129677,129585],{"class":275},[15,129679,129681],{"id":129680},"_83-css三大特性","8.3 css三大特性",[241,129683,129685],{"id":129684},"_831-层叠性","8.3.1 层叠性",[20,129687,129688],{},"为了解决样式冲突问题",[20,129690,129691],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[20,129693,129694],{},"   ②样式不冲突，不会层叠",[241,129696,129698],{"id":129697},"_832-继承性","8.3.2 继承性",[20,129700,129701],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[20,129703,129704],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[32,129706,129708],{"className":126655,"code":129707,"language":126657,"meta":37,"style":37},"p {\n  color: #333;\n}\n",[24,129709,129710,129716,129726],{"__ignoreMap":37},[41,129711,129712,129714],{"class":43,"line":44},[41,129713,20],{"class":51403},[41,129715,15710],{"class":275},[41,129717,129718,129720,129722,129724],{"class":43,"line":51},[41,129719,71008],{"class":58},[41,129721,51540],{"class":275},[41,129723,62472],{"class":58},[41,129725,1434],{"class":275},[41,129727,129728],{"class":43,"line":62},[41,129729,1706],{"class":275},[1603,129731],{"style":126511,"src":129732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[20,129734,129735],{},"解释：①行高可以跟单位也可以不跟单位",[20,129737,129738],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[20,129740,129741],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[20,129743,129744],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[241,129746,129748],{"id":129747},"_833-优先级","8.3.3 优先级",[224,129750,129751,129754],{},[227,129752,129753],{},"选择器相同，则执行层叠性",[227,129755,129756],{},"选择器不同，则根据选择器权重执行",[411,129758,129759,129769],{},[414,129760,129761],{},[417,129762,129763,129766],{},[420,129764,129765],{"align":23874},"选择器",[420,129767,129768],{"align":23874},"选择器权重",[458,129770,129771,129779,129787,129795,129803,129811],{},[417,129772,129773,129776],{},[463,129774,129775],{"align":23874},"继承 或者*",[463,129777,129778],{"align":23874},"0，0，0，0",[417,129780,129781,129784],{},[463,129782,129783],{"align":23874},"标签选择器",[463,129785,129786],{"align":23874},"0，0，0，1",[417,129788,129789,129792],{},[463,129790,129791],{"align":23874},"类选择器，伪类选择器",[463,129793,129794],{"align":23874},"0，0，1，0",[417,129796,129797,129800],{},[463,129798,129799],{"align":23874},"ID选择器",[463,129801,129802],{"align":23874},"0，1，0，0",[417,129804,129805,129808],{},[463,129806,129807],{"align":23874},"行内样式",[463,129809,129810],{"align":23874},"1，0，0，0",[417,129812,129813,129816],{},[463,129814,129815],{"align":23874},"！important",[463,129817,129818],{"align":23874},"无穷大",[20,129820,129821],{},"! important用法：",[32,129823,129825],{"className":126655,"code":129824,"language":126657,"meta":37,"style":37},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[24,129826,129827,129832,129838,129851,129855,129860,129866,129876],{"__ignoreMap":37},[41,129828,129829],{"class":43,"line":44},[41,129830,129831],{"class":47},"\u002F* !important 拥有最高优先级 *\u002F\n",[41,129833,129834,129836],{"class":43,"line":51},[41,129835,51714],{"class":51403},[41,129837,15710],{"class":275},[41,129839,129840,129842,129844,129846,129849],{"class":43,"line":62},[41,129841,71008],{"class":58},[41,129843,51540],{"class":275},[41,129845,51748],{"class":58},[41,129847,129848],{"class":271}," !important",[41,129850,1434],{"class":275},[41,129852,129853],{"class":43,"line":70},[41,129854,1706],{"class":275},[41,129856,129857],{"class":43,"line":76},[41,129858,129859],{"class":47},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[41,129861,129862,129864],{"class":43,"line":83},[41,129863,51714],{"class":51403},[41,129865,15710],{"class":275},[41,129867,129868,129870,129872,129874],{"class":43,"line":89},[41,129869,71008],{"class":58},[41,129871,51540],{"class":275},[41,129873,57524],{"class":58},[41,129875,1434],{"class":275},[41,129877,129878],{"class":43,"line":96},[41,129879,1706],{"class":275},[20,129881,129882],{},"优先级注意点：",[20,129884,129885],{},"①权重是有4组数字组成,但是不会有进位",[20,129887,129888],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[20,129890,129891],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[20,129893,129894],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[20,129896,129897],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[20,129899,129900],{},"⑥复合选择器",[411,129902,129903,129913],{},[414,129904,129905],{},[417,129906,129907,129910],{},[420,129908,129909],{"align":23874},"div ul li",[420,129911,129912],{"align":23874},"0,0,0,3",[458,129914,129915,129923,129931],{},[417,129916,129917,129920],{},[463,129918,129919],{"align":23874},".nav ul li",[463,129921,129922],{"align":23874},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[417,129924,129925,129928],{},[463,129926,129927],{"align":23874},"a:hover",[463,129929,129930],{"align":23874},"0,0,1,1",[417,129932,129933,129936],{},[463,129934,129935],{"align":23874},".nav a",[463,129937,129930],{"align":23874},[189,129939,129940],{},"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":37,"searchDepth":51,"depth":51,"links":129942},[129943,129951,129962],{"id":128051,"depth":51,"text":128052,"children":129944},[129945,129946,129947,129948,129949,129950],{"id":128064,"depth":62,"text":128065},{"id":128136,"depth":62,"text":128137},{"id":128208,"depth":62,"text":128209},{"id":128239,"depth":62,"text":128240},{"id":128246,"depth":62,"text":128247},{"id":128399,"depth":62,"text":128400},{"id":128707,"depth":51,"text":128708,"children":129952},[129953,129954,129955,129956,129957,129958,129959,129960,129961],{"id":128714,"depth":62,"text":128715},{"id":128724,"depth":62,"text":128725},{"id":128820,"depth":62,"text":128821},{"id":128893,"depth":62,"text":128894},{"id":129048,"depth":62,"text":129049},{"id":129136,"depth":62,"text":129137},{"id":129188,"depth":62,"text":129189},{"id":129247,"depth":62,"text":129248},{"id":129352,"depth":62,"text":129353},{"id":129680,"depth":51,"text":129681,"children":129963},[129964,129965,129966],{"id":129684,"depth":62,"text":129685},{"id":129697,"depth":62,"text":129698},{"id":129747,"depth":62,"text":129748},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128043,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129973,"title":129974,"body":129975,"description":196,"extension":197,"meta":131565,"navigation":79,"path":131566,"seo":131567,"stem":131568,"__hash__":131569},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129976,"toc":131544},[129977,129980,129984,129987,129990,129993,129996,129999,130002,130005,130009,130017,130054,130090,130093,130107,130112,130146,130149,130242,130247,130250,130280,130283,130288,130296,130300,130307,130353,130397,130402,130405,130408,130411,130414,130417,130420,130422,130425,130429,130434,130478,130483,130486,130489,130526,130531,130534,130537,130540,130543,130575,130578,130581,130584,130616,130619,130622,130625,130629,130632,130664,130667,130671,130691,130694,130702,130705,130709,130714,130717,130749,130754,130757,130795,130799,130804,130807,130810,130841,130844,130861,130866,130918,130978,130983,131037,131075,131079,131083,131086,131090,131098,131101,131103,131114,131119,131167,131201,131204,131207,131210,131213,131257,131260,131263,131266,131269,131272,131275,131319,131322,131325,131328,131331,131334,131337,131343,131346,131390,131393,131396,131399,131402,131405,131449,131452,131454,131457,131461,131465,131503,131507,131510,131513,131517,131525,131529,131532,131535,131538,131541],[10,129978,129974],{"id":129979},"_9-css盒模型浮动与切图",[15,129981,129983],{"id":129982},"_91-盒子模型","9.1 盒子模型",[20,129985,129986],{},"利用盒子来设计网页",[20,129988,129989],{},"盒子包含：边框、外边距、内边距、实际内容",[20,129991,129992],{},"网页布局设置：",[20,129994,129995],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[20,129997,129998],{},"②利用css设置好盒子样式，然后摆放到相应位置",[20,130000,130001],{},"③往盒子里装内容",[1603,130003],{"style":126511,"src":130004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[241,130006,130008],{"id":130007},"_911-边框border","9.1.1 边框（border）",[224,130010,130011,130014],{},[227,130012,130013],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[227,130015,130016],{},"语法",[32,130018,130020],{"className":126655,"code":130019,"language":126657,"meta":37,"style":37},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[24,130021,130022,130027,130033,130050],{"__ignoreMap":37},[41,130023,130024],{"class":43,"line":44},[41,130025,130026],{"class":47},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[41,130028,130029,130031],{"class":43,"line":51},[41,130030,51714],{"class":51403},[41,130032,15710],{"class":275},[41,130034,130035,130037,130039,130041,130043,130045,130048],{"class":43,"line":62},[41,130036,70999],{"class":58},[41,130038,51540],{"class":275},[41,130040,26],{"class":58},[41,130042,51595],{"class":271},[41,130044,51624],{"class":58},[41,130046,130047],{"class":58}," #ccc",[41,130049,1434],{"class":275},[41,130051,130052],{"class":43,"line":70},[41,130053,1706],{"class":275},[411,130055,130056,130064],{},[414,130057,130058],{},[417,130059,130060,130062],{},[420,130061,129257],{"align":23874},[420,130063,102799],{"align":23874},[458,130065,130066,130074,130082],{},[417,130067,130068,130071],{},[463,130069,130070],{"align":23874},"border-width",[463,130072,130073],{"align":23874},"定义边框粗细，单位是px",[417,130075,130076,130079],{},[463,130077,130078],{"align":23874},"border-style",[463,130080,130081],{"align":23874},"边框的样式",[417,130083,130084,130087],{},[463,130085,130086],{"align":23874},"border-color",[463,130088,130089],{"align":23874},"边框的颜色",[20,130091,130092],{},"边框样式 border-style 可以设置如下值：",[1280,130094,130095,130098,130101,130104],{},[227,130096,130097],{},"none：没有边框即忽略所有边框的宽度（默认值）",[227,130099,130100],{},"solid：边框为单实线(最为常用的)",[227,130102,130103],{},"dashed：边框为虚线",[227,130105,130106],{},"dotted：边框为点线",[224,130108,130109],{"start":62},[227,130110,130111],{},"边框的合写分写",[32,130113,130114],{"className":126655,"code":130019,"language":126657,"meta":37,"style":37},[24,130115,130116,130120,130126,130142],{"__ignoreMap":37},[41,130117,130118],{"class":43,"line":44},[41,130119,130026],{"class":47},[41,130121,130122,130124],{"class":43,"line":51},[41,130123,51714],{"class":51403},[41,130125,15710],{"class":275},[41,130127,130128,130130,130132,130134,130136,130138,130140],{"class":43,"line":62},[41,130129,70999],{"class":58},[41,130131,51540],{"class":275},[41,130133,26],{"class":58},[41,130135,51595],{"class":271},[41,130137,51624],{"class":58},[41,130139,130047],{"class":58},[41,130141,1434],{"class":275},[41,130143,130144],{"class":43,"line":70},[41,130145,1706],{"class":275},[20,130147,130148],{},"边框分开写法：",[32,130150,130152],{"className":126655,"code":130151,"language":126657,"meta":37,"style":37},"\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",[24,130153,130154,130159,130165,130183,130201,130220,130238],{"__ignoreMap":37},[41,130155,130156],{"class":43,"line":44},[41,130157,130158],{"class":47},"\u002F* 边框分开写法 *\u002F\n",[41,130160,130161,130163],{"class":43,"line":51},[41,130162,51714],{"class":51403},[41,130164,15710],{"class":275},[41,130166,130167,130170,130172,130174,130176,130178,130181],{"class":43,"line":62},[41,130168,130169],{"class":58},"  border-top",[41,130171,51540],{"class":275},[41,130173,26],{"class":58},[41,130175,51595],{"class":271},[41,130177,51624],{"class":58},[41,130179,130180],{"class":58}," #000",[41,130182,1434],{"class":275},[41,130184,130185,130188,130190,130192,130194,130196,130199],{"class":43,"line":70},[41,130186,130187],{"class":58},"  border-right",[41,130189,51540],{"class":275},[41,130191,351],{"class":58},[41,130193,51595],{"class":271},[41,130195,62344],{"class":58},[41,130197,130198],{"class":58}," #333",[41,130200,1434],{"class":275},[41,130202,130203,130206,130208,130210,130212,130215,130218],{"class":43,"line":76},[41,130204,130205],{"class":58},"  border-bottom",[41,130207,51540],{"class":275},[41,130209,345],{"class":58},[41,130211,51595],{"class":271},[41,130213,130214],{"class":58}," dotted",[41,130216,130217],{"class":58}," #666",[41,130219,1434],{"class":275},[41,130221,130222,130225,130227,130229,130231,130233,130236],{"class":43,"line":83},[41,130223,130224],{"class":58},"  border-left",[41,130226,51540],{"class":275},[41,130228,26],{"class":58},[41,130230,51595],{"class":271},[41,130232,51624],{"class":58},[41,130234,130235],{"class":58}," #999",[41,130237,1434],{"class":275},[41,130239,130240],{"class":43,"line":89},[41,130241,1706],{"class":275},[224,130243,130244],{"start":70},[227,130245,130246],{},"表格的细线边框",[20,130248,130249],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[32,130251,130253],{"className":126655,"code":130252,"language":126657,"meta":37,"style":37},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[24,130254,130255,130260,130266,130276],{"__ignoreMap":37},[41,130256,130257],{"class":43,"line":44},[41,130258,130259],{"class":47},"\u002F* 表格细线边框合并 *\u002F\n",[41,130261,130262,130264],{"class":43,"line":51},[41,130263,411],{"class":51403},[41,130265,15710],{"class":275},[41,130267,130268,130270,130272,130274],{"class":43,"line":62},[41,130269,70681],{"class":58},[41,130271,51540],{"class":275},[41,130273,65138],{"class":58},[41,130275,1434],{"class":275},[41,130277,130278],{"class":43,"line":70},[41,130279,1706],{"class":275},[20,130281,130282],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[224,130284,130285],{"start":76},[227,130286,130287],{},"解决边框额外增加盒子的实际大小的方法：",[1280,130289,130290,130293],{},[227,130291,130292],{},"测量盒子大小的时候,不量边框",[227,130294,130295],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[241,130297,130299],{"id":130298},"_912-内边距","9.1.2 内边距",[224,130301,130302,130305],{},[227,130303,130304],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[227,130306,130016],{},[411,130308,130309,130319],{},[414,130310,130311],{},[417,130312,130313,130316],{},[420,130314,130315],{"align":23874},"值的个数",[420,130317,130318],{"align":23874},"表达意思",[458,130320,130321,130329,130337,130345],{},[417,130322,130323,130326],{},[463,130324,130325],{"align":23874},"padding: 5px;",[463,130327,130328],{"align":23874},"1个值，代表上下左右都有5个元素",[417,130330,130331,130334],{},[463,130332,130333],{"align":23874},"padding: 5px 10px;",[463,130335,130336],{"align":23874},"2个值，代表上下内边距为5像素，左右内边距为10像素",[417,130338,130339,130342],{},[463,130340,130341],{"align":23874},"padding: 5px 10px 20px;",[463,130343,130344],{"align":23874},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[417,130346,130347,130350],{},[463,130348,130349],{"align":23874},"padding: 5px 10px 20px 30px;",[463,130351,130352],{"align":23874},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[411,130354,130355,130363],{},[414,130356,130357],{},[417,130358,130359,130361],{},[420,130360,129257],{"align":23874},[420,130362,102799],{"align":23874},[458,130364,130365,130373,130381,130389],{},[417,130366,130367,130370],{},[463,130368,130369],{"align":23874},"padding-left",[463,130371,130372],{"align":23874},"左内边距",[417,130374,130375,130378],{},[463,130376,130377],{"align":23874},"padding-right",[463,130379,130380],{"align":23874},"右内边距",[417,130382,130383,130386],{},[463,130384,130385],{"align":23874},"padding-top",[463,130387,130388],{"align":23874},"上内边距",[417,130390,130391,130394],{},[463,130392,130393],{"align":23874},"padding-bottom",[463,130395,130396],{"align":23874},"下内边距",[224,130398,130399],{"start":62},[227,130400,130401],{},"内边距会影响盒子的实际大小",[20,130403,130404],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[20,130406,130407],{},"①内容和边框有了距离，添加了内边距",[20,130409,130410],{},"②padding影响了盒子实际大小",[20,130412,130413],{},"内边距对盒子大小的影响：",[20,130415,130416],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[20,130418,130419],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[20,130421,95323],{},[20,130423,130424],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[241,130426,130428],{"id":130427},"_913-外边距","9.1.3 外边距",[224,130430,130431],{},[227,130432,130433],{},"控制盒子与盒子之间的距离",[411,130435,130436,130444],{},[414,130437,130438],{},[417,130439,130440,130442],{},[420,130441,129257],{"align":23874},[420,130443,102799],{"align":23874},[458,130445,130446,130454,130462,130470],{},[417,130447,130448,130451],{},[463,130449,130450],{"align":23874},"margin-left",[463,130452,130453],{"align":23874},"左外边距",[417,130455,130456,130459],{},[463,130457,130458],{"align":23874},"margin-right",[463,130460,130461],{"align":23874},"右外边距",[417,130463,130464,130467],{},[463,130465,130466],{"align":23874},"margin-top",[463,130468,130469],{"align":23874},"上外边距",[417,130471,130472,130475],{},[463,130473,130474],{"align":23874},"margin-bottom",[463,130476,130477],{"align":23874},"下外边距",[224,130479,130480],{"start":51},[227,130481,130482],{},"外边距可以让块级盒子水平居中的两个条件：",[20,130484,130485],{},"①盒子必须指定了宽度（width）",[20,130487,130488],{},"②盒子左右的外边距都设置为 auto",[32,130490,130492],{"className":126655,"code":130491,"language":126657,"meta":37,"style":37},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[24,130493,130494,130499,130506,130522],{"__ignoreMap":37},[41,130495,130496],{"class":43,"line":44},[41,130497,130498],{"class":47},"\u002F* margin 复合写法（同上） *\u002F\n",[41,130500,130501,130504],{"class":43,"line":51},[41,130502,130503],{"class":54},".box",[41,130505,15710],{"class":275},[41,130507,130508,130510,130512,130514,130516,130519],{"class":43,"line":62},[41,130509,70573],{"class":58},[41,130511,51540],{"class":275},[41,130513,465],{"class":58},[41,130515,51659],{"class":58},[41,130517,130518],{"class":275},";  ",[41,130520,130521],{"class":47},"\u002F* 块级盒子水平居中 *\u002F\n",[41,130523,130524],{"class":43,"line":70},[41,130525,1706],{"class":275},[224,130527,130528],{"start":62},[227,130529,130530],{},"外边距塌陷问题",[20,130532,130533],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1603,130535],{"style":126511,"src":130536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[20,130538,130539],{},"解决方案：",[20,130541,130542],{},"①可以为父亲元素定义上边距",[32,130544,130545],{"className":126655,"code":130491,"language":126657,"meta":37,"style":37},[24,130546,130547,130551,130557,130571],{"__ignoreMap":37},[41,130548,130549],{"class":43,"line":44},[41,130550,130498],{"class":47},[41,130552,130553,130555],{"class":43,"line":51},[41,130554,130503],{"class":54},[41,130556,15710],{"class":275},[41,130558,130559,130561,130563,130565,130567,130569],{"class":43,"line":62},[41,130560,70573],{"class":58},[41,130562,51540],{"class":275},[41,130564,465],{"class":58},[41,130566,51659],{"class":58},[41,130568,130518],{"class":275},[41,130570,130521],{"class":47},[41,130572,130573],{"class":43,"line":70},[41,130574,1706],{"class":275},[20,130576,130577],{},"②可以为父亲元素定义上内边距",[20,130579,130580],{},"③可以为父亲元素添加overflow:hidden",[1603,130582],{"style":126511,"src":130583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[32,130585,130586],{"className":126655,"code":130491,"language":126657,"meta":37,"style":37},[24,130587,130588,130592,130598,130612],{"__ignoreMap":37},[41,130589,130590],{"class":43,"line":44},[41,130591,130498],{"class":47},[41,130593,130594,130596],{"class":43,"line":51},[41,130595,130503],{"class":54},[41,130597,15710],{"class":275},[41,130599,130600,130602,130604,130606,130608,130610],{"class":43,"line":62},[41,130601,70573],{"class":58},[41,130603,51540],{"class":275},[41,130605,465],{"class":58},[41,130607,51659],{"class":58},[41,130609,130518],{"class":275},[41,130611,130521],{"class":47},[41,130613,130614],{"class":43,"line":70},[41,130615,1706],{"class":275},[1603,130617],{"style":126511,"src":130618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[20,130620,130621],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[20,130623,130624],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[241,130626,130628],{"id":130627},"_914-清除内外边距","9.1.4 清除内外边距",[20,130630,130631],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[32,130633,130634],{"className":126655,"code":130491,"language":126657,"meta":37,"style":37},[24,130635,130636,130640,130646,130660],{"__ignoreMap":37},[41,130637,130638],{"class":43,"line":44},[41,130639,130498],{"class":47},[41,130641,130642,130644],{"class":43,"line":51},[41,130643,130503],{"class":54},[41,130645,15710],{"class":275},[41,130647,130648,130650,130652,130654,130656,130658],{"class":43,"line":62},[41,130649,70573],{"class":58},[41,130651,51540],{"class":275},[41,130653,465],{"class":58},[41,130655,51659],{"class":58},[41,130657,130518],{"class":275},[41,130659,130521],{"class":47},[41,130661,130662],{"class":43,"line":70},[41,130663,1706],{"class":275},[20,130665,130666],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[241,130668,130670],{"id":130669},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1280,130672,130673,130676,130679,130682,130685,130688],{},[227,130674,130675],{},"文件→打开 ：可以打开我们要测量的图片",[227,130677,130678],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[227,130680,130681],{},"右击标尺，把里面的单位改为像素",[227,130683,130684],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[227,130686,130687],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[227,130689,130690],{},"用选区拖动 可以测量大小",[1603,130692],{"style":126511,"src":130693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1280,130695,130696,130699],{},[227,130697,130698],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[227,130700,130701],{},"吸管取色工具",[1603,130703],{"style":126511,"src":130704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[241,130706,130708],{"id":130707},"_916-案例","9.1.6 案例",[224,130710,130711],{},[227,130712,130713],{},"小米商品",[1603,130715],{"style":126511,"src":130716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[32,130718,130719],{"className":126655,"code":130491,"language":126657,"meta":37,"style":37},[24,130720,130721,130725,130731,130745],{"__ignoreMap":37},[41,130722,130723],{"class":43,"line":44},[41,130724,130498],{"class":47},[41,130726,130727,130729],{"class":43,"line":51},[41,130728,130503],{"class":54},[41,130730,15710],{"class":275},[41,130732,130733,130735,130737,130739,130741,130743],{"class":43,"line":62},[41,130734,70573],{"class":58},[41,130736,51540],{"class":275},[41,130738,465],{"class":58},[41,130740,51659],{"class":58},[41,130742,130518],{"class":275},[41,130744,130521],{"class":47},[41,130746,130747],{"class":43,"line":70},[41,130748,1706],{"class":275},[224,130750,130751],{"start":51},[227,130752,130753],{},"快报模块",[1603,130755],{"style":126511,"src":130756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[32,130758,130760],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[24,130761,130762,130767,130782,130787],{"__ignoreMap":37},[41,130763,130764],{"class":43,"line":44},[41,130765,130766],{"class":47},"\u003C!-- HTML 代码示例 -->\n",[41,130768,130769,130771,130773,130775,130777,130780],{"class":43,"line":51},[41,130770,1183],{"class":275},[41,130772,51714],{"class":51403},[41,130774,53589],{"class":54},[41,130776,321],{"class":275},[41,130778,130779],{"class":378},"\"example\"",[41,130781,51410],{"class":275},[41,130783,130784],{"class":43,"line":62},[41,130785,130786],{"class":275},"  示例内容\n",[41,130788,130789,130791,130793],{"class":43,"line":70},[41,130790,51888],{"class":275},[41,130792,51714],{"class":51403},[41,130794,51410],{"class":275},[241,130796,130798],{"id":130797},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[224,130800,130801],{},[227,130802,130803],{},"圆角边框",[20,130805,130806],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1603,130808],{"style":126511,"src":130809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[32,130811,130813],{"className":126655,"code":130812,"language":126657,"meta":37,"style":37},"div {\n  border: 1px solid #ccc;\n}\n",[24,130814,130815,130821,130837],{"__ignoreMap":37},[41,130816,130817,130819],{"class":43,"line":44},[41,130818,51714],{"class":51403},[41,130820,15710],{"class":275},[41,130822,130823,130825,130827,130829,130831,130833,130835],{"class":43,"line":51},[41,130824,70999],{"class":58},[41,130826,51540],{"class":275},[41,130828,26],{"class":58},[41,130830,51595],{"class":271},[41,130832,51624],{"class":58},[41,130834,130047],{"class":58},[41,130836,1434],{"class":275},[41,130838,130839],{"class":43,"line":62},[41,130840,1706],{"class":275},[20,130842,130843],{},"解释:",[1280,130845,130846,130849,130852,130855,130858],{},[227,130847,130848],{},"参数值可以为数值或百分比的形式",[227,130850,130851],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[227,130853,130854],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[227,130856,130857],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[227,130859,130860],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[224,130862,130863],{"start":51},[227,130864,130865],{},"盒子阴影",[32,130867,130869],{"className":126655,"code":130868,"language":126657,"meta":37,"style":37},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[24,130870,130871,130877,130914],{"__ignoreMap":37},[41,130872,130873,130875],{"class":43,"line":44},[41,130874,51714],{"class":51403},[41,130876,15710],{"class":275},[41,130878,130879,130882,130884,130886,130888,130890,130892,130894,130896,130898,130900,130902,130904,130906,130908,130910,130912],{"class":43,"line":51},[41,130880,130881],{"class":58},"  box-shadow",[41,130883,51540],{"class":275},[41,130885,465],{"class":58},[41,130887,14893],{"class":58},[41,130889,51595],{"class":271},[41,130891,2177],{"class":58},[41,130893,51595],{"class":271},[41,130895,78870],{"class":58},[41,130897,276],{"class":275},[41,130899,465],{"class":58},[41,130901,12573],{"class":275},[41,130903,465],{"class":58},[41,130905,12573],{"class":275},[41,130907,465],{"class":58},[41,130909,12573],{"class":275},[41,130911,86313],{"class":58},[41,130913,2857],{"class":275},[41,130915,130916],{"class":43,"line":62},[41,130917,1706],{"class":275},[411,130919,130920,130928],{},[414,130921,130922],{},[417,130923,130924,130926],{},[420,130925,426],{"align":23874},[420,130927,27592],{"align":23874},[458,130929,130930,130938,130946,130954,130962,130970],{},[417,130931,130932,130935],{},[463,130933,130934],{"align":23874},"h-shadow",[463,130936,130937],{"align":23874},"必需,水平阴影的位置,允许负值",[417,130939,130940,130943],{},[463,130941,130942],{"align":23874},"v-shadow",[463,130944,130945],{"align":23874},"必需,垂直阴影的位置,允许负值",[417,130947,130948,130951],{},[463,130949,130950],{"align":23874},"blur",[463,130952,130953],{"align":23874},"可选,模糊距离,就是影子的虚实",[417,130955,130956,130959],{},[463,130957,130958],{"align":23874},"spread",[463,130960,130961],{"align":23874},"可选,阴影尺寸",[417,130963,130964,130967],{},[463,130965,130966],{"align":23874},"color",[463,130968,130969],{"align":23874},"可选,阴影的颜色",[417,130971,130972,130975],{},[463,130973,130974],{"align":23874},"inset",[463,130976,130977],{"align":23874},"可选,将外部阴影(outset)改为内部阴影",[224,130979,130980],{"start":62},[227,130981,130982],{},"文字阴影",[32,130984,130986],{"className":126655,"code":130985,"language":126657,"meta":37,"style":37},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[24,130987,130988,130994,131033],{"__ignoreMap":37},[41,130989,130990,130992],{"class":43,"line":44},[41,130991,20],{"class":51403},[41,130993,15710],{"class":275},[41,130995,130996,130999,131001,131003,131005,131007,131009,131011,131013,131015,131017,131019,131021,131023,131025,131027,131029,131031],{"class":43,"line":51},[41,130997,130998],{"class":58},"  text-shadow",[41,131000,51540],{"class":275},[41,131002,26],{"class":58},[41,131004,51595],{"class":271},[41,131006,25221],{"class":58},[41,131008,51595],{"class":271},[41,131010,14893],{"class":58},[41,131012,51595],{"class":271},[41,131014,78870],{"class":58},[41,131016,276],{"class":275},[41,131018,465],{"class":58},[41,131020,12573],{"class":275},[41,131022,465],{"class":58},[41,131024,12573],{"class":275},[41,131026,465],{"class":58},[41,131028,12573],{"class":275},[41,131030,100624],{"class":58},[41,131032,2857],{"class":275},[41,131034,131035],{"class":43,"line":62},[41,131036,1706],{"class":275},[411,131038,131039,131047],{},[414,131040,131041],{},[417,131042,131043,131045],{},[420,131044,426],{"align":23874},[420,131046,27592],{"align":23874},[458,131048,131049,131055,131062,131069],{},[417,131050,131051,131053],{},[463,131052,130934],{"align":23874},[463,131054,130937],{"align":23874},[417,131056,131057,131059],{},[463,131058,130942],{"align":23874},[463,131060,131061],{"align":23874},"必需,垂直阴影位置,允许负值",[417,131063,131064,131066],{},[463,131065,130950],{"align":23874},[463,131067,131068],{"align":23874},"可选,模糊的距离",[417,131070,131071,131073],{},[463,131072,130966],{"align":23874},[463,131074,130969],{"align":23874},[15,131076,131078],{"id":131077},"_92-浮动","9.2 浮动",[241,131080,131082],{"id":131081},"_921-浮动介绍","9.2.1 浮动介绍",[20,131084,131085],{},"在16.2中详细介绍",[241,131087,131089],{"id":131088},"_922-清除浮动","9.2.2 清除浮动",[224,131091,131092,131095],{},[227,131093,131094],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[227,131096,131097],{},"清除浮动的本质",[20,131099,131100],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[20,131102,9163],{},[1280,131104,131105,131108,131111],{},[227,131106,131107],{},"如果父盒子本身有高度，则不需要清除浮动",[227,131109,131110],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[227,131112,131113],{},"父级有了高度，就不会影响下面的标准流了",[224,131115,131116],{"start":62},[227,131117,131118],{},"清除浮动样式",[32,131120,131122],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[24,131123,131124,131131,131142,131146,131153,131163],{"__ignoreMap":37},[41,131125,131126,131129],{"class":43,"line":44},[41,131127,131128],{"class":54},".left",[41,131130,15710],{"class":275},[41,131132,131133,131136,131138,131140],{"class":43,"line":51},[41,131134,131135],{"class":58},"  float",[41,131137,51540],{"class":275},[41,131139,23874],{"class":58},[41,131141,1434],{"class":275},[41,131143,131144],{"class":43,"line":62},[41,131145,1706],{"class":275},[41,131147,131148,131151],{"class":43,"line":70},[41,131149,131150],{"class":54},".right",[41,131152,15710],{"class":275},[41,131154,131155,131157,131159,131161],{"class":43,"line":76},[41,131156,131135],{"class":58},[41,131158,51540],{"class":275},[41,131160,72625],{"class":58},[41,131162,1434],{"class":275},[41,131164,131165],{"class":43,"line":83},[41,131166,1706],{"class":275},[411,131168,131169,131177],{},[414,131170,131171],{},[417,131172,131173,131175],{},[420,131174,127119],{"align":23874},[420,131176,27592],{"align":23874},[458,131178,131179,131186,131193],{},[417,131180,131181,131183],{},[463,131182,23874],{"align":23874},[463,131184,131185],{"align":23874},"不允许左侧有浮动元素（清除左侧浮动的影响）",[417,131187,131188,131190],{},[463,131189,72625],{"align":23874},[463,131191,131192],{"align":23874},"不允许右侧有浮动元素（清除右侧浮动的影响）",[417,131194,131195,131198],{},[463,131196,131197],{"align":23874},"both",[463,131199,131200],{"align":23874},"同时清除左右侧浮动的影响",[20,131202,131203],{},"法一",[20,131205,131206],{},"额外标签法也称为隔墙法",[20,131208,131209],{},"使用方式：",[20,131211,131212],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[32,131214,131215],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},[24,131216,131217,131223,131233,131237,131243,131253],{"__ignoreMap":37},[41,131218,131219,131221],{"class":43,"line":44},[41,131220,131128],{"class":54},[41,131222,15710],{"class":275},[41,131224,131225,131227,131229,131231],{"class":43,"line":51},[41,131226,131135],{"class":58},[41,131228,51540],{"class":275},[41,131230,23874],{"class":58},[41,131232,1434],{"class":275},[41,131234,131235],{"class":43,"line":62},[41,131236,1706],{"class":275},[41,131238,131239,131241],{"class":43,"line":70},[41,131240,131150],{"class":54},[41,131242,15710],{"class":275},[41,131244,131245,131247,131249,131251],{"class":43,"line":76},[41,131246,131135],{"class":58},[41,131248,51540],{"class":275},[41,131250,72625],{"class":58},[41,131252,1434],{"class":275},[41,131254,131255],{"class":43,"line":83},[41,131256,1706],{"class":275},[20,131258,131259],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[20,131261,131262],{},"优点： 通俗易懂，书写方便",[20,131264,131265],{},"缺点： 添加许多无意义的标签，结构化较差",[20,131267,131268],{},"注意： 要求这个新的空标签必须是块级元素。",[20,131270,131271],{},"法二",[20,131273,131274],{},"父级添加overflow属性",[32,131276,131277],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},[24,131278,131279,131285,131295,131299,131305,131315],{"__ignoreMap":37},[41,131280,131281,131283],{"class":43,"line":44},[41,131282,131128],{"class":54},[41,131284,15710],{"class":275},[41,131286,131287,131289,131291,131293],{"class":43,"line":51},[41,131288,131135],{"class":58},[41,131290,51540],{"class":275},[41,131292,23874],{"class":58},[41,131294,1434],{"class":275},[41,131296,131297],{"class":43,"line":62},[41,131298,1706],{"class":275},[41,131300,131301,131303],{"class":43,"line":70},[41,131302,131150],{"class":54},[41,131304,15710],{"class":275},[41,131306,131307,131309,131311,131313],{"class":43,"line":76},[41,131308,131135],{"class":58},[41,131310,51540],{"class":275},[41,131312,72625],{"class":58},[41,131314,1434],{"class":275},[41,131316,131317],{"class":43,"line":83},[41,131318,1706],{"class":275},[20,131320,131321],{},"overflow: hidden;",[20,131323,131324],{},"优点：代码简洁",[20,131326,131327],{},"缺点：无法显示溢出的部分",[20,131329,131330],{},"注意：是给父元素添加代码",[20,131332,131333],{},"法三",[20,131335,131336],{},"父级添加after伪元素",[20,131338,131339,131342],{},[131340,131341],"after",{}," 方式是额外标签法的升级版",[20,131344,131345],{},"使用的时候复制就可以",[32,131347,131348],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},[24,131349,131350,131356,131366,131370,131376,131386],{"__ignoreMap":37},[41,131351,131352,131354],{"class":43,"line":44},[41,131353,131128],{"class":54},[41,131355,15710],{"class":275},[41,131357,131358,131360,131362,131364],{"class":43,"line":51},[41,131359,131135],{"class":58},[41,131361,51540],{"class":275},[41,131363,23874],{"class":58},[41,131365,1434],{"class":275},[41,131367,131368],{"class":43,"line":62},[41,131369,1706],{"class":275},[41,131371,131372,131374],{"class":43,"line":70},[41,131373,131150],{"class":54},[41,131375,15710],{"class":275},[41,131377,131378,131380,131382,131384],{"class":43,"line":76},[41,131379,131135],{"class":58},[41,131381,51540],{"class":275},[41,131383,72625],{"class":58},[41,131385,1434],{"class":275},[41,131387,131388],{"class":43,"line":83},[41,131389,1706],{"class":275},[20,131391,131392],{},"优点：没有增加标签，结构更简单",[20,131394,131395],{},"缺点：照顾低版本浏览器",[20,131397,131398],{},"代表网站： 百度、淘宝网、网易等",[20,131400,131401],{},"法四",[20,131403,131404],{},"父级添加双伪元素",[32,131406,131407],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},[24,131408,131409,131415,131425,131429,131435,131445],{"__ignoreMap":37},[41,131410,131411,131413],{"class":43,"line":44},[41,131412,131128],{"class":54},[41,131414,15710],{"class":275},[41,131416,131417,131419,131421,131423],{"class":43,"line":51},[41,131418,131135],{"class":58},[41,131420,51540],{"class":275},[41,131422,23874],{"class":58},[41,131424,1434],{"class":275},[41,131426,131427],{"class":43,"line":62},[41,131428,1706],{"class":275},[41,131430,131431,131433],{"class":43,"line":70},[41,131432,131150],{"class":54},[41,131434,15710],{"class":275},[41,131436,131437,131439,131441,131443],{"class":43,"line":76},[41,131438,131135],{"class":58},[41,131440,51540],{"class":275},[41,131442,72625],{"class":58},[41,131444,1434],{"class":275},[41,131446,131447],{"class":43,"line":83},[41,131448,1706],{"class":275},[20,131450,131451],{},"优点：代码更简洁",[20,131453,131395],{},[20,131455,131456],{},"代表网站：小米、腾讯等",[15,131458,131460],{"id":131459},"_93-ps切图","9.3 PS切图",[241,131462,131464],{"id":131463},"_931-常见图片格式","9.3.1 常见图片格式",[411,131466,131467,131477],{},[414,131468,131469],{},[417,131470,131471,131474],{},[420,131472,131473],{"align":23874},"jpg图像格式",[420,131475,131476],{"align":23874},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[458,131478,131479,131487,131495],{},[417,131480,131481,131484],{},[463,131482,131483],{"align":23874},"gif图像格式",[463,131485,131486],{"align":23874},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[417,131488,131489,131492],{},[463,131490,131491],{"align":23874},"png图像格式",[463,131493,131494],{"align":23874},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[417,131496,131497,131500],{},[463,131498,131499],{"align":23874},"PSD图像格式",[463,131501,131502],{"align":23874},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[241,131504,131506],{"id":131505},"_932-图层切图","9.3.2 图层切图",[20,131508,131509],{},"最简单的切图方式：右击图层 → 导出 → 切片",[20,131511,131512],{},"按住shift选中两个图层->图层菜单->合并图层",[241,131514,131516],{"id":131515},"_933-切片切图","9.3.3 切片切图",[1280,131518,131519,131522],{},[227,131520,131521],{},"利用切片工具手动划出",[227,131523,131524],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[241,131526,131528],{"id":131527},"_934-切图步骤","9.3.4 切图步骤",[20,131530,131531],{},"用切片工具选中：",[1603,131533],{"style":126511,"src":131534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[20,131536,131537],{},"文件 -> 导出",[1603,131539],{"style":126511,"src":131540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[189,131542,131543],{},"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":37,"searchDepth":51,"depth":51,"links":131545},[131546,131555,131559],{"id":129982,"depth":51,"text":129983,"children":131547},[131548,131549,131550,131551,131552,131553,131554],{"id":130007,"depth":62,"text":130008},{"id":130298,"depth":62,"text":130299},{"id":130427,"depth":62,"text":130428},{"id":130627,"depth":62,"text":130628},{"id":130669,"depth":62,"text":130670},{"id":130707,"depth":62,"text":130708},{"id":130797,"depth":62,"text":130798},{"id":131077,"depth":51,"text":131078,"children":131556},[131557,131558],{"id":131081,"depth":62,"text":131082},{"id":131088,"depth":62,"text":131089},{"id":131459,"depth":51,"text":131460,"children":131560},[131561,131562,131563,131564],{"id":131463,"depth":62,"text":131464},{"id":131505,"depth":62,"text":131506},{"id":131515,"depth":62,"text":131516},{"id":131527,"depth":62,"text":131528},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129974,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131571,"title":131572,"body":131573,"description":196,"extension":197,"meta":132214,"navigation":79,"path":132215,"seo":132216,"stem":132217,"__hash__":132218},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131574,"toc":132202},[131575,131578,131582,131608,131642,131646,131650,131653,131695,131702,131712,131720,131722,131725,131728,131731,131738,131752,131756,131759,131788,131792,131795,131809,131813,131816,131844,131848,131851,131877,131881,131886,131919,131924,131952,131956,131973,132019,132024,132068,132085,132192,132200],[10,131576,131572],{"id":131577},"_10-css规范与学成在线案例",[15,131579,131581],{"id":131580},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[224,131583,131584,131590,131596,131602],{},[227,131585,131586,131589],{},[423,131587,131588],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[227,131591,131592,131595],{},[423,131593,131594],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[227,131597,131598,131601],{},[423,131599,131600],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[227,131603,131604,131607],{},[423,131605,131606],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[32,131609,131610],{"className":126655,"code":130019,"language":126657,"meta":37,"style":37},[24,131611,131612,131616,131622,131638],{"__ignoreMap":37},[41,131613,131614],{"class":43,"line":44},[41,131615,130026],{"class":47},[41,131617,131618,131620],{"class":43,"line":51},[41,131619,51714],{"class":51403},[41,131621,15710],{"class":275},[41,131623,131624,131626,131628,131630,131632,131634,131636],{"class":43,"line":62},[41,131625,70999],{"class":58},[41,131627,51540],{"class":275},[41,131629,26],{"class":58},[41,131631,51595],{"class":271},[41,131633,51624],{"class":58},[41,131635,130047],{"class":58},[41,131637,1434],{"class":275},[41,131639,131640],{"class":43,"line":70},[41,131641,1706],{"class":275},[15,131643,131645],{"id":131644},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[241,131647,131649],{"id":131648},"_1021-header头部制作","10.2.1 header头部制作",[1603,131651],{"style":126511,"src":131652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1280,131654,131655,131662,131669,131675,131682,131689],{},[227,131656,131657,131658,131661],{},"1号是版心盒子 ",[423,131659,131660],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[227,131663,131664,131665,131668],{},"版心盒子 里面包含 2号盒子 ",[423,131666,131667],{},"logo"," 图标",[227,131670,131671,131672,131674],{},"版心盒子 里面包含 3号盒子 ",[423,131673,53816],{}," 导航栏",[227,131676,131677,131678,131681],{},"版心盒子 里面包含 4号盒子 ",[423,131679,131680],{},"search"," 搜索框",[227,131683,131684,131685,131688],{},"版心盒子 里面包含 5号盒子 ",[423,131686,131687],{},"user"," 个人信息",[227,131690,131691,131692],{},"注意，要求里面的 ",[423,131693,131694],{},"4个子盒子 必须都浮动",[224,131696,131697],{},[227,131698,131699],{},[423,131700,131701],{},"导航栏注意点:",[20,131703,131704,131705,131708,131709],{},"实际开发中， ",[423,131706,131707],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[423,131710,131711],{},"用 li 包含链接(li+a)的做法",[1280,131713,131714,131717],{},[227,131715,131716],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[227,131718,131719],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[20,131721,9163],{},[20,131723,131724],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[20,131726,131727],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[20,131729,131730],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[224,131732,131733],{"start":51},[227,131734,131735],{},[423,131736,131737],{},"4号盒子search的细节：",[1280,131739,131740,131743,131746],{},[227,131741,131742],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[227,131744,131745],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[227,131747,131748,131751],{},[24,131749,131750],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[241,131753,131755],{"id":131754},"_1022-banner制作","10.2.2 banner制作",[1603,131757],{"style":126511,"src":131758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1280,131760,131761,131768,131774,131781],{},[227,131762,131763,131764,131767],{},"1号盒子是通栏的大盒子 ",[423,131765,131766],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[227,131769,131770,131771,131773],{},"2号盒子是版心 ",[423,131772,1068],{}," ， 要水平居中对齐",[227,131775,131776,131777,131780],{},"3号盒子版心内，左对齐 ",[423,131778,131779],{},"subnav"," 侧导航栏",[227,131782,131783,131784,131787],{},"4号盒子版心内，右对齐 ",[423,131785,131786],{},"course"," 课程",[241,131789,131791],{"id":131790},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1603,131793],{"style":126511,"src":131794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1280,131796,131797,131800,131803,131806],{},[227,131798,131799],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[227,131801,131802],{},"1号盒子是标题 H3 左侧浮动",[227,131804,131805],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[227,131807,131808],{},"3号盒子 右浮动 mod 修改",[241,131810,131812],{"id":131811},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1603,131814],{"style":126511,"src":131815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1280,131817,131818,131824,131831,131838,131841],{},[227,131819,131820,131821,131823],{},"1号盒子为最大的盒子 ",[423,131822,53817],{}," 版心水平居中对齐",[227,131825,131826,131827,131830],{},"2号盒子为上面部分 ",[423,131828,131829],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[227,131832,131833,131834,131837],{},"3号盒子为底下部分 ",[423,131835,131836],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[227,131839,131840],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[227,131842,131843],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[241,131845,131847],{"id":131846},"_1025-底部模块制作","10.2.5 底部模块制作",[1603,131849],{"style":126511,"src":131850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1280,131852,131853,131860,131863,131870],{},[227,131854,131855,131856,131859],{},"1号盒子通栏大盒子 底部 ",[423,131857,131858],{},"footer"," 给高度 底色是白色",[227,131861,131862],{},"2号盒子版心水平居中",[227,131864,131865,131866,131869],{},"3号盒子版权 ",[423,131867,131868],{},"copyright"," 左对齐",[227,131871,131872,131873,131876],{},"4号盒子 链接组 ",[423,131874,131875],{},"links"," 右对齐",[241,131878,131880],{"id":131879},"_1026-代码模块","10.2.6 代码模块",[224,131882,131883],{},[227,131884,131885],{},"html部分",[32,131887,131889],{"className":127402,"code":131888,"language":127404,"meta":37,"style":37},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[24,131890,131891],{"__ignoreMap":37},[41,131892,131893,131895,131897,131899,131901,131904,131907,131909,131912,131915,131917],{"class":43,"line":44},[41,131894,1183],{"class":275},[41,131896,511],{"class":51403},[41,131898,61160],{"class":54},[41,131900,321],{"class":275},[41,131902,131903],{"class":378},"\"https:\u002F\u002Fexample.com\"",[41,131905,131906],{"class":54}," target",[41,131908,321],{"class":275},[41,131910,131911],{"class":378},"\"_blank\"",[41,131913,131914],{"class":275},">链接文字\u003C\u002F",[41,131916,511],{"class":51403},[41,131918,51410],{"class":275},[224,131920,131921],{"start":51},[227,131922,131923],{},"css部分",[32,131925,131926],{"className":127402,"code":131888,"language":127404,"meta":37,"style":37},[24,131927,131928],{"__ignoreMap":37},[41,131929,131930,131932,131934,131936,131938,131940,131942,131944,131946,131948,131950],{"class":43,"line":44},[41,131931,1183],{"class":275},[41,131933,511],{"class":51403},[41,131935,61160],{"class":54},[41,131937,321],{"class":275},[41,131939,131903],{"class":378},[41,131941,131906],{"class":54},[41,131943,321],{"class":275},[41,131945,131911],{"class":378},[41,131947,131914],{"class":275},[41,131949,511],{"class":51403},[41,131951,51410],{"class":275},[241,131953,131955],{"id":131954},"_1027-收获","10.2.7 收获",[224,131957,131958,131961,131964,131967,131970],{},[227,131959,131960],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[227,131962,131963],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[227,131965,131966],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[227,131968,131969],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[227,131971,131972],{},"遗忘代码",[32,131974,131976],{"className":126655,"code":131975,"language":126657,"meta":37,"style":37},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[24,131977,131978,132000,132005,132015],{"__ignoreMap":37},[41,131979,131980,131982,131984,131986,131988,131990,131992,131994,131996,131998],{"class":43,"line":44},[41,131981,51714],{"class":51403},[41,131983,12573],{"class":275},[41,131985,20],{"class":51403},[41,131987,12573],{"class":275},[41,131989,10],{"class":51403},[41,131991,12573],{"class":275},[41,131993,1280],{"class":51403},[41,131995,12573],{"class":275},[41,131997,227],{"class":51403},[41,131999,15710],{"class":275},[41,132001,132002],{"class":43,"line":51},[41,132003,132004],{"class":47},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[41,132006,132007,132009,132011,132013],{"class":43,"line":62},[41,132008,128271],{"class":58},[41,132010,51540],{"class":275},[41,132012,60972],{"class":58},[41,132014,1434],{"class":275},[41,132016,132017],{"class":43,"line":70},[41,132018,1706],{"class":275},[224,132020,132021],{"start":83},[227,132022,132023],{},"html引css的程序",[32,132025,132026],{"className":126655,"code":131975,"language":126657,"meta":37,"style":37},[24,132027,132028,132050,132054,132064],{"__ignoreMap":37},[41,132029,132030,132032,132034,132036,132038,132040,132042,132044,132046,132048],{"class":43,"line":44},[41,132031,51714],{"class":51403},[41,132033,12573],{"class":275},[41,132035,20],{"class":51403},[41,132037,12573],{"class":275},[41,132039,10],{"class":51403},[41,132041,12573],{"class":275},[41,132043,1280],{"class":51403},[41,132045,12573],{"class":275},[41,132047,227],{"class":51403},[41,132049,15710],{"class":275},[41,132051,132052],{"class":43,"line":51},[41,132053,132004],{"class":47},[41,132055,132056,132058,132060,132062],{"class":43,"line":62},[41,132057,128271],{"class":58},[41,132059,51540],{"class":275},[41,132061,60972],{"class":58},[41,132063,1434],{"class":275},[41,132065,132066],{"class":43,"line":70},[41,132067,1706],{"class":275},[224,132069,132070,132073,132076,132079,132082],{"start":89},[227,132071,132072],{},"浮动的盒子不会有外边距合并问题",[227,132074,132075],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[227,132077,132078],{},"ctrl+g快速定位行；shift+alt多个光标",[227,132080,132081],{},"学习上方各个模块的选择器起名方法，以后就这样用",[227,132083,132084],{},"在写选择器时尽量写全一些，例如",[32,132086,132088],{"className":126655,"code":132087,"language":126657,"meta":37,"style":37},"\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",[24,132089,132090,132095,132111,132116,132131,132136,132151,132156,132171,132176],{"__ignoreMap":37},[41,132091,132092],{"class":43,"line":44},[41,132093,132094],{"class":47},"\u002F* 静态定位（默认） *\u002F\n",[41,132096,132097,132100,132102,132104,132106,132109],{"class":43,"line":51},[41,132098,132099],{"class":54},".static",[41,132101,79910],{"class":275},[41,132103,129015],{"class":58},[41,132105,51540],{"class":275},[41,132107,132108],{"class":58},"static",[41,132110,129585],{"class":275},[41,132112,132113],{"class":43,"line":62},[41,132114,132115],{"class":47},"\u002F* 相对定位 *\u002F\n",[41,132117,132118,132121,132123,132125,132127,132129],{"class":43,"line":70},[41,132119,132120],{"class":54},".relative",[41,132122,79910],{"class":275},[41,132124,129015],{"class":58},[41,132126,51540],{"class":275},[41,132128,54867],{"class":58},[41,132130,129585],{"class":275},[41,132132,132133],{"class":43,"line":76},[41,132134,132135],{"class":47},"\u002F* 绝对定位 *\u002F\n",[41,132137,132138,132141,132143,132145,132147,132149],{"class":43,"line":83},[41,132139,132140],{"class":54},".absolute",[41,132142,79910],{"class":275},[41,132144,129015],{"class":58},[41,132146,51540],{"class":275},[41,132148,54934],{"class":58},[41,132150,129585],{"class":275},[41,132152,132153],{"class":43,"line":89},[41,132154,132155],{"class":47},"\u002F* 固定定位 *\u002F\n",[41,132157,132158,132161,132163,132165,132167,132169],{"class":43,"line":96},[41,132159,132160],{"class":54},".fixed",[41,132162,79910],{"class":275},[41,132164,129015],{"class":58},[41,132166,51540],{"class":275},[41,132168,86336],{"class":58},[41,132170,129585],{"class":275},[41,132172,132173],{"class":43,"line":104},[41,132174,132175],{"class":47},"\u002F* 粘性定位 *\u002F\n",[41,132177,132178,132181,132183,132185,132187,132190],{"class":43,"line":176},[41,132179,132180],{"class":54},".sticky",[41,132182,79910],{"class":275},[41,132184,129015],{"class":58},[41,132186,51540],{"class":275},[41,132188,132189],{"class":58},"sticky",[41,132191,129585],{"class":275},[224,132193,132194,132197],{"start":1757},[227,132195,132196],{},"一定要用好注释",[227,132198,132199],{},"浮动的盒子不会有外边距合并的问题",[189,132201,131543],{},{"title":37,"searchDepth":51,"depth":51,"links":132203},[132204,132205],{"id":131580,"depth":51,"text":131581},{"id":131644,"depth":51,"text":131645,"children":132206},[132207,132208,132209,132210,132211,132212,132213],{"id":131648,"depth":62,"text":131649},{"id":131754,"depth":62,"text":131755},{"id":131790,"depth":62,"text":131791},{"id":131811,"depth":62,"text":131812},{"id":131846,"depth":62,"text":131847},{"id":131879,"depth":62,"text":131880},{"id":131954,"depth":62,"text":131955},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131572,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132220,"title":132221,"body":132222,"description":196,"extension":197,"meta":133708,"navigation":79,"path":133709,"seo":133710,"stem":133711,"__hash__":133712},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132223,"toc":133700},[132224,132227,132231,132235,132246,132250,132267,132311,132344,132347,132364,132367,132370,132414,132418,132422,132425,132428,132432,132435,132446,132509,132550,132553,132568,132622,132630,132633,132644,132698,132724,132727,132740,132794,132826,132880,132903,132957,132960,132963,132970,133024,133045,133099,133102,133105,133190,133198,133255,133278,133282,133285,133303,133307,133326,133380,133418,133422,133425,133428,133450,133454,133462,133465,133470,133481,133484,133488,133502,133546,133549,133553,133556,133561,133587,133592,133669,133672,133676,133679,133682,133685,133688,133691,133694,133697],[10,132225,132221],{"id":132226},"_11-传统布局与定位体系",[15,132228,132230],{"id":132229},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[241,132232,132234],{"id":132233},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1280,132236,132237,132240,132243],{},[227,132238,132239],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[227,132241,132242],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[227,132244,132245],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[241,132247,132249],{"id":132248},"_1112-浮动","11.1.2 浮动",[1280,132251,132252,132255,132258,132261,132264],{},[227,132253,132254],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[227,132256,132257],{},"浮动可以改变元素标签默认的排列方式",[227,132259,132260],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[227,132262,132263],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[227,132265,132266],{},"在使用行内块转换时盒子之间是有空隙的",[32,132268,132269],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},[24,132270,132271,132277,132287,132291,132297,132307],{"__ignoreMap":37},[41,132272,132273,132275],{"class":43,"line":44},[41,132274,131128],{"class":54},[41,132276,15710],{"class":275},[41,132278,132279,132281,132283,132285],{"class":43,"line":51},[41,132280,131135],{"class":58},[41,132282,51540],{"class":275},[41,132284,23874],{"class":58},[41,132286,1434],{"class":275},[41,132288,132289],{"class":43,"line":62},[41,132290,1706],{"class":275},[41,132292,132293,132295],{"class":43,"line":70},[41,132294,131150],{"class":54},[41,132296,15710],{"class":275},[41,132298,132299,132301,132303,132305],{"class":43,"line":76},[41,132300,131135],{"class":58},[41,132302,51540],{"class":275},[41,132304,72625],{"class":58},[41,132306,1434],{"class":275},[41,132308,132309],{"class":43,"line":83},[41,132310,1706],{"class":275},[411,132312,132313,132321],{},[414,132314,132315],{},[417,132316,132317,132319],{},[420,132318,127119],{"align":23874},[420,132320,27592],{"align":23874},[458,132322,132323,132330,132337],{},[417,132324,132325,132327],{},[463,132326,54840],{"align":23874},[463,132328,132329],{"align":23874},"元素不浮动（默认值）",[417,132331,132332,132334],{},[463,132333,23874],{"align":23874},[463,132335,132336],{"align":23874},"元素向左浮动",[417,132338,132339,132341],{},[463,132340,72625],{"align":23874},[463,132342,132343],{"align":23874},"元素向右浮动",[20,132345,132346],{},"浮动重点：",[1280,132348,132349,132352,132355,132358,132361],{},[227,132350,132351],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[227,132353,132354],{},"浮动的元素会一行内显示并且元素顶部对齐",[227,132356,132357],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[227,132359,132360],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[227,132362,132363],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[20,132365,132366],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[20,132368,132369],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[32,132371,132372],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},[24,132373,132374,132380,132390,132394,132400,132410],{"__ignoreMap":37},[41,132375,132376,132378],{"class":43,"line":44},[41,132377,131128],{"class":54},[41,132379,15710],{"class":275},[41,132381,132382,132384,132386,132388],{"class":43,"line":51},[41,132383,131135],{"class":58},[41,132385,51540],{"class":275},[41,132387,23874],{"class":58},[41,132389,1434],{"class":275},[41,132391,132392],{"class":43,"line":62},[41,132393,1706],{"class":275},[41,132395,132396,132398],{"class":43,"line":70},[41,132397,131150],{"class":54},[41,132399,15710],{"class":275},[41,132401,132402,132404,132406,132408],{"class":43,"line":76},[41,132403,131135],{"class":58},[41,132405,51540],{"class":275},[41,132407,72625],{"class":58},[41,132409,1434],{"class":275},[41,132411,132412],{"class":43,"line":83},[41,132413,1706],{"class":275},[241,132415,132417],{"id":132416},"_1113-定位","11.1.3 定位",[22136,132419,132421],{"id":132420},"_11131-使用场景","11.1.3.1 使用场景",[20,132423,132424],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[20,132426,132427],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22136,132429,132431],{"id":132430},"_11132-定位组成","11.1.3.2 定位组成",[20,132433,132434],{},"定位 = 定位模式 + 边偏移",[224,132436,132437],{},[227,132438,132439,132442,132443],{},[423,132440,132441],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[423,132444,132445],{},"定位模式",[32,132447,132449],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[24,132450,132451,132457,132471,132488,132505],{"__ignoreMap":37},[41,132452,132453,132455],{"class":43,"line":44},[41,132454,130503],{"class":54},[41,132456,15710],{"class":275},[41,132458,132459,132462,132464,132466,132468],{"class":43,"line":51},[41,132460,132461],{"class":58},"  position",[41,132463,51540],{"class":275},[41,132465,54867],{"class":58},[41,132467,130518],{"class":275},[41,132469,132470],{"class":47},"\u002F* 定位模式 *\u002F\n",[41,132472,132473,132476,132478,132480,132482,132485],{"class":43,"line":62},[41,132474,132475],{"class":58},"  top",[41,132477,51540],{"class":275},[41,132479,719],{"class":58},[41,132481,51595],{"class":271},[41,132483,132484],{"class":275},";           ",[41,132486,132487],{"class":47},"\u002F* 边偏移：上 *\u002F\n",[41,132489,132490,132493,132495,132497,132499,132502],{"class":43,"line":70},[41,132491,132492],{"class":58},"  left",[41,132494,51540],{"class":275},[41,132496,973],{"class":58},[41,132498,51595],{"class":271},[41,132500,132501],{"class":275},";          ",[41,132503,132504],{"class":47},"\u002F* 边偏移：左 *\u002F\n",[41,132506,132507],{"class":43,"line":76},[41,132508,1706],{"class":275},[411,132510,132511,132520],{},[414,132512,132513],{},[417,132514,132515,132517],{},[420,132516,426],{"align":23874},[420,132518,132519],{"align":23874},"语义",[458,132521,132522,132529,132536,132543],{},[417,132523,132524,132526],{},[463,132525,132108],{"align":23874},[463,132527,132528],{"align":23874},"静态定位",[417,132530,132531,132533],{},[463,132532,54867],{"align":23874},[463,132534,132535],{"align":23874},"相对定位",[417,132537,132538,132540],{},[463,132539,54934],{"align":23874},[463,132541,132542],{"align":23874},"绝对定位",[417,132544,132545,132547],{},[463,132546,86336],{"align":23874},[463,132548,132549],{"align":23874},"固定定位",[20,132551,132552],{},"（1）静态定位：",[1280,132554,132555,132566],{},[227,132556,132557,132558,132561,132562,132565],{},"静态定位是元素的 ",[423,132559,132560],{},"默认定位方式"," ， ",[423,132563,132564],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[227,132567,5319],{},[32,132569,132570],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},[24,132571,132572,132578,132590,132604,132618],{"__ignoreMap":37},[41,132573,132574,132576],{"class":43,"line":44},[41,132575,130503],{"class":54},[41,132577,15710],{"class":275},[41,132579,132580,132582,132584,132586,132588],{"class":43,"line":51},[41,132581,132461],{"class":58},[41,132583,51540],{"class":275},[41,132585,54867],{"class":58},[41,132587,130518],{"class":275},[41,132589,132470],{"class":47},[41,132591,132592,132594,132596,132598,132600,132602],{"class":43,"line":62},[41,132593,132475],{"class":58},[41,132595,51540],{"class":275},[41,132597,719],{"class":58},[41,132599,51595],{"class":271},[41,132601,132484],{"class":275},[41,132603,132487],{"class":47},[41,132605,132606,132608,132610,132612,132614,132616],{"class":43,"line":70},[41,132607,132492],{"class":58},[41,132609,51540],{"class":275},[41,132611,973],{"class":58},[41,132613,51595],{"class":271},[41,132615,132501],{"class":275},[41,132617,132504],{"class":47},[41,132619,132620],{"class":43,"line":76},[41,132621,1706],{"class":275},[1280,132623,132624,132627],{},[227,132625,132626],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[227,132628,132629],{},"静态定位在布局时我们几乎不用的",[20,132631,132632],{},"（2）相对定位",[1280,132634,132635,132642],{},[227,132636,132637,132638,132641],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[423,132639,132640],{},"原来的位置"," 来说的（自恋型）",[227,132643,5319],{},[32,132645,132646],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},[24,132647,132648,132654,132666,132680,132694],{"__ignoreMap":37},[41,132649,132650,132652],{"class":43,"line":44},[41,132651,130503],{"class":54},[41,132653,15710],{"class":275},[41,132655,132656,132658,132660,132662,132664],{"class":43,"line":51},[41,132657,132461],{"class":58},[41,132659,51540],{"class":275},[41,132661,54867],{"class":58},[41,132663,130518],{"class":275},[41,132665,132470],{"class":47},[41,132667,132668,132670,132672,132674,132676,132678],{"class":43,"line":62},[41,132669,132475],{"class":58},[41,132671,51540],{"class":275},[41,132673,719],{"class":58},[41,132675,51595],{"class":271},[41,132677,132484],{"class":275},[41,132679,132487],{"class":47},[41,132681,132682,132684,132686,132688,132690,132692],{"class":43,"line":70},[41,132683,132492],{"class":58},[41,132685,51540],{"class":275},[41,132687,973],{"class":58},[41,132689,51595],{"class":271},[41,132691,132501],{"class":275},[41,132693,132504],{"class":47},[41,132695,132696],{"class":43,"line":76},[41,132697,1706],{"class":275},[1280,132699,132700],{},[227,132701,132702,132703,132705,132706,132708,132709,132712,132713,132716,132717,132719,132720,132723],{},"相对定位的特点：",[53819,132704],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53819,132707],{},"  ② ",[423,132710,132711],{},"原来"," 在标准流的 ",[423,132714,132715],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53819,132718],{},"  ③因此， ",[423,132721,132722],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[20,132725,132726],{},"（3）绝对定位",[1280,132728,132729,132738],{},[227,132730,132731,132733,132734,132737],{},[423,132732,132542],{}," 是元素在移动位置的时候，是相对于它 ",[423,132735,132736],{},"祖先元素"," 来说的（拼爹型）",[227,132739,5319],{},[32,132741,132742],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},[24,132743,132744,132750,132762,132776,132790],{"__ignoreMap":37},[41,132745,132746,132748],{"class":43,"line":44},[41,132747,130503],{"class":54},[41,132749,15710],{"class":275},[41,132751,132752,132754,132756,132758,132760],{"class":43,"line":51},[41,132753,132461],{"class":58},[41,132755,51540],{"class":275},[41,132757,54867],{"class":58},[41,132759,130518],{"class":275},[41,132761,132470],{"class":47},[41,132763,132764,132766,132768,132770,132772,132774],{"class":43,"line":62},[41,132765,132475],{"class":58},[41,132767,51540],{"class":275},[41,132769,719],{"class":58},[41,132771,51595],{"class":271},[41,132773,132484],{"class":275},[41,132775,132487],{"class":47},[41,132777,132778,132780,132782,132784,132786,132788],{"class":43,"line":70},[41,132779,132492],{"class":58},[41,132781,51540],{"class":275},[41,132783,973],{"class":58},[41,132785,51595],{"class":271},[41,132787,132501],{"class":275},[41,132789,132504],{"class":47},[41,132791,132792],{"class":43,"line":76},[41,132793,1706],{"class":275},[1280,132795,132796,132811,132820,132823],{},[227,132797,132798,132799,132801,132802,132804,132805,132807,132808,132810],{},"绝对定位的特点：",[53819,132800],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53819,132803],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53819,132806],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53819,132809],{},"  (4)固定定位",[227,132812,132813,132815,132816,132819],{},[423,132814,132549],{}," 是元素 ",[423,132817,132818],{},"固定于浏览器可视区的位置"," 。（认死理型）",[227,132821,132822],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[227,132824,132825],{},"语法:",[32,132827,132828],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},[24,132829,132830,132836,132848,132862,132876],{"__ignoreMap":37},[41,132831,132832,132834],{"class":43,"line":44},[41,132833,130503],{"class":54},[41,132835,15710],{"class":275},[41,132837,132838,132840,132842,132844,132846],{"class":43,"line":51},[41,132839,132461],{"class":58},[41,132841,51540],{"class":275},[41,132843,54867],{"class":58},[41,132845,130518],{"class":275},[41,132847,132470],{"class":47},[41,132849,132850,132852,132854,132856,132858,132860],{"class":43,"line":62},[41,132851,132475],{"class":58},[41,132853,51540],{"class":275},[41,132855,719],{"class":58},[41,132857,51595],{"class":271},[41,132859,132484],{"class":275},[41,132861,132487],{"class":47},[41,132863,132864,132866,132868,132870,132872,132874],{"class":43,"line":70},[41,132865,132492],{"class":58},[41,132867,51540],{"class":275},[41,132869,973],{"class":58},[41,132871,51595],{"class":271},[41,132873,132501],{"class":275},[41,132875,132504],{"class":47},[41,132877,132878],{"class":43,"line":76},[41,132879,1706],{"class":275},[1280,132881,132882,132891],{},[227,132883,132884,132885,132887,132888,132890],{},"特点:",[53819,132886],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53819,132889],{},"  ②固定定位不再占有原先的位置,完全脱标",[227,132892,132893,132894,132896,132897,132899,132900,132902],{},"固定在版心位置的方法:",[53819,132895],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53819,132898],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53819,132901],{},"  实例：",[32,132904,132905],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},[24,132906,132907,132913,132925,132939,132953],{"__ignoreMap":37},[41,132908,132909,132911],{"class":43,"line":44},[41,132910,130503],{"class":54},[41,132912,15710],{"class":275},[41,132914,132915,132917,132919,132921,132923],{"class":43,"line":51},[41,132916,132461],{"class":58},[41,132918,51540],{"class":275},[41,132920,54867],{"class":58},[41,132922,130518],{"class":275},[41,132924,132470],{"class":47},[41,132926,132927,132929,132931,132933,132935,132937],{"class":43,"line":62},[41,132928,132475],{"class":58},[41,132930,51540],{"class":275},[41,132932,719],{"class":58},[41,132934,51595],{"class":271},[41,132936,132484],{"class":275},[41,132938,132487],{"class":47},[41,132940,132941,132943,132945,132947,132949,132951],{"class":43,"line":70},[41,132942,132492],{"class":58},[41,132944,51540],{"class":275},[41,132946,973],{"class":58},[41,132948,51595],{"class":271},[41,132950,132501],{"class":275},[41,132952,132504],{"class":47},[41,132954,132955],{"class":43,"line":76},[41,132956,1706],{"class":275},[1603,132958],{"style":126511,"src":132959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[20,132961,132962],{},"(5)粘性定位",[1280,132964,132965,132968],{},[227,132966,132967],{},"粘性定位可以被认为是相对定位和固定定位的混合",[227,132969,5319],{},[32,132971,132972],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},[24,132973,132974,132980,132992,133006,133020],{"__ignoreMap":37},[41,132975,132976,132978],{"class":43,"line":44},[41,132977,130503],{"class":54},[41,132979,15710],{"class":275},[41,132981,132982,132984,132986,132988,132990],{"class":43,"line":51},[41,132983,132461],{"class":58},[41,132985,51540],{"class":275},[41,132987,54867],{"class":58},[41,132989,130518],{"class":275},[41,132991,132470],{"class":47},[41,132993,132994,132996,132998,133000,133002,133004],{"class":43,"line":62},[41,132995,132475],{"class":58},[41,132997,51540],{"class":275},[41,132999,719],{"class":58},[41,133001,51595],{"class":271},[41,133003,132484],{"class":275},[41,133005,132487],{"class":47},[41,133007,133008,133010,133012,133014,133016,133018],{"class":43,"line":70},[41,133009,132492],{"class":58},[41,133011,51540],{"class":275},[41,133013,973],{"class":58},[41,133015,51595],{"class":271},[41,133017,132501],{"class":275},[41,133019,132504],{"class":47},[41,133021,133022],{"class":43,"line":76},[41,133023,1706],{"class":275},[1280,133025,133026],{},[227,133027,133028,133029,133031,133032,133034,133035,133037,133038,133041,133042,133044],{},"粘性定位的特点：",[53819,133030],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53819,133033],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53819,133036],{},"  ③必须添加 top 、left、right、bottom ",[423,133039,133040],{},"其中一个"," 才有效",[53819,133043],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[32,133046,133047],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},[24,133048,133049,133055,133067,133081,133095],{"__ignoreMap":37},[41,133050,133051,133053],{"class":43,"line":44},[41,133052,130503],{"class":54},[41,133054,15710],{"class":275},[41,133056,133057,133059,133061,133063,133065],{"class":43,"line":51},[41,133058,132461],{"class":58},[41,133060,51540],{"class":275},[41,133062,54867],{"class":58},[41,133064,130518],{"class":275},[41,133066,132470],{"class":47},[41,133068,133069,133071,133073,133075,133077,133079],{"class":43,"line":62},[41,133070,132475],{"class":58},[41,133072,51540],{"class":275},[41,133074,719],{"class":58},[41,133076,51595],{"class":271},[41,133078,132484],{"class":275},[41,133080,132487],{"class":47},[41,133082,133083,133085,133087,133089,133091,133093],{"class":43,"line":70},[41,133084,132492],{"class":58},[41,133086,51540],{"class":275},[41,133088,973],{"class":58},[41,133090,51595],{"class":271},[41,133092,132501],{"class":275},[41,133094,132504],{"class":47},[41,133096,133097],{"class":43,"line":76},[41,133098,1706],{"class":275},[1603,133100],{"style":126511,"src":133101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[20,133103,133104],{},"(6)总结",[411,133106,133107,133122],{},[414,133108,133109],{},[417,133110,133111,133113,133116,133119],{},[420,133112,132445],{"align":23874},[420,133114,133115],{"align":23874},"是否脱标",[420,133117,133118],{"align":23874},"移动位置",[420,133120,133121],{"align":23874},"是否常用",[458,133123,133124,133137,133151,133165,133178],{},[417,133125,133126,133129,133131,133134],{},[463,133127,133128],{"align":23874},"Static 静态定位",[463,133130,104781],{"align":23874},[463,133132,133133],{"align":23874},"不能使用边偏移",[463,133135,133136],{"align":23874},"很少",[417,133138,133139,133142,133145,133148],{},[463,133140,133141],{"align":23874},"Relative 相对定位",[463,133143,133144],{"align":23874},"否(占有位置)",[463,133146,133147],{"align":23874},"相对于自身位置移动",[463,133149,133150],{"align":23874},"基本单独使用",[417,133152,133153,133156,133159,133162],{},[463,133154,133155],{"align":23874},"Absolute 绝对定位",[463,133157,133158],{"align":23874},"是(不占有位置)",[463,133160,133161],{"align":23874},"带有定位的父级",[463,133163,133164],{"align":23874},"要和定位父级元素搭配使用",[417,133166,133167,133170,133172,133175],{},[463,133168,133169],{"align":23874},"Fixed 固定定位",[463,133171,133158],{"align":23874},[463,133173,133174],{"align":23874},"浏览器可视区",[463,133176,133177],{"align":23874},"单独使用,不需要父级",[417,133179,133180,133183,133185,133187],{},[463,133181,133182],{"align":23874},"Sticky 粘性定位",[463,133184,133144],{"align":23874},[463,133186,133174],{"align":23874},[463,133188,133189],{"align":23874},"当前阶段少",[224,133191,133192],{"start":51},[227,133193,133194,133197],{},[423,133195,133196],{},"边偏移"," 则决定了该元素的最终位置",[411,133199,133200,133211],{},[414,133201,133202],{},[417,133203,133204,133207,133209],{},[420,133205,133206],{"align":23874},"边偏移属性",[420,133208,27595],{"align":23874},[420,133210,27592],{"align":23874},[458,133212,133213,133224,133235,133245],{},[417,133214,133215,133218,133221],{},[463,133216,133217],{"align":23874},"top",[463,133219,133220],{"align":23874},"top: 80px;",[463,133222,133223],{"align":23874},"顶端偏移量，定义元素相对于父元素上边线的距离",[417,133225,133226,133229,133232],{},[463,133227,133228],{"align":23874},"bottom",[463,133230,133231],{"align":23874},"bottom: 80px ;",[463,133233,133234],{"align":23874},"底部偏移量，定义元素相对于其父元素下边线的距离",[417,133236,133237,133239,133242],{},[463,133238,23874],{"align":23874},[463,133240,133241],{"align":23874},"left: 80px ;",[463,133243,133244],{"align":23874},"左侧偏移量，定义元素相对于其父元素左边线的距离",[417,133246,133247,133249,133252],{},[463,133248,72625],{"align":23874},[463,133250,133251],{"align":23874},"right: 80px ;",[463,133253,133254],{"align":23874},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1280,133256,133257],{},[227,133258,9163,133259,133261,133262,133264,133265,133267,133268,133271,133272,133274,133275,133277],{},[53819,133260],{},"  ① ",[423,133263,133196],{}," 需要和 ",[423,133266,132445],{}," 联合使用， ",[423,133269,133270],{},"单独使用无效"," ；",[53819,133273],{},"  ②top和bottom不要同时使用",[53819,133276],{},"  ③left和right不要同时使用",[22136,133279,133281],{"id":133280},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[20,133283,133284],{},"子级是绝对定位的话，父级要用相对定位",[1280,133286,133287,133290,133293,133296],{},[227,133288,133289],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[227,133291,133292],{},"父盒子需要加定位限制子盒子在父盒子内显示",[227,133294,133295],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[227,133297,133298,133299,133302],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[423,133300,133301],{},"子绝父绝"," 也会遇到",[22136,133304,133306],{"id":133305},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1280,133308,133309,133324],{},[227,133310,133311,133312,133315,133316,133319,133320,133323],{},"在使用 ",[423,133313,133314],{},"定位"," 布局时，可能会 ",[423,133317,133318],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[423,133321,133322],{},"z-index"," 来控制盒子的前后次序 (z轴)",[227,133325,5319],{},[32,133327,133328],{"className":126655,"code":132448,"language":126657,"meta":37,"style":37},[24,133329,133330,133336,133348,133362,133376],{"__ignoreMap":37},[41,133331,133332,133334],{"class":43,"line":44},[41,133333,130503],{"class":54},[41,133335,15710],{"class":275},[41,133337,133338,133340,133342,133344,133346],{"class":43,"line":51},[41,133339,132461],{"class":58},[41,133341,51540],{"class":275},[41,133343,54867],{"class":58},[41,133345,130518],{"class":275},[41,133347,132470],{"class":47},[41,133349,133350,133352,133354,133356,133358,133360],{"class":43,"line":62},[41,133351,132475],{"class":58},[41,133353,51540],{"class":275},[41,133355,719],{"class":58},[41,133357,51595],{"class":271},[41,133359,132484],{"class":275},[41,133361,132487],{"class":47},[41,133363,133364,133366,133368,133370,133372,133374],{"class":43,"line":70},[41,133365,132492],{"class":58},[41,133367,51540],{"class":275},[41,133369,973],{"class":58},[41,133371,51595],{"class":271},[41,133373,132501],{"class":275},[41,133375,132504],{"class":47},[41,133377,133378],{"class":43,"line":76},[41,133379,1706],{"class":275},[1280,133381,133382],{},[227,133383,133384,133385,133261,133387,133389,133390,127818,133393,82642,133396,133398,133399,133401,133402,133405,133406,133271,133409,133411,133412,133415,133417],{},"z-index的特性",[53819,133386],{},[423,133388,127119],{}," ： ",[423,133391,133392],{},"正整数",[423,133394,133395],{},"负整数",[423,133397,465],{}," ，默认值是 0，数值越大，盒子越靠上；",[53819,133400],{},"  ②如果 ",[423,133403,133404],{},"属性值相同"," ，则按照书写顺序， ",[423,133407,133408],{},"后来居上",[53819,133410],{},"  ③数字后面 ",[423,133413,133414],{},"不能加单位",[53819,133416],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22136,133419,133421],{"id":133420},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[20,133423,133424],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[20,133426,133427],{},"方法:",[1280,133429,133430,133440],{},[227,133431,133432,133433,133436,133437],{},"left: 50%; 让 ",[423,133434,133435],{},"盒子的左侧"," 移动到 ",[423,133438,133439],{},"父级元素的水平中心位置",[227,133441,133442,133443,133446,133447],{},"margin-left: -100px; 让盒子 ",[423,133444,133445],{},"向左"," 移动 ",[423,133448,133449],{},"自身宽度的一半",[22136,133451,133453],{"id":133452},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[224,133455,133456,133459],{},[227,133457,133458],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[227,133460,133461],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[20,133463,133464],{},"也就是说绝对定位和固定定位和浮动类似",[224,133466,133467],{"start":62},[227,133468,133469],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1280,133471,133472,133475,133478],{},[227,133473,133474],{},"可以用inline-block 转换为行内块",[227,133476,133477],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[227,133479,133480],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[20,133482,133483],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22136,133485,133487],{"id":133486},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[224,133489,133490,133493,133496,133499],{},[227,133491,133492],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[227,133494,133495],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[227,133497,133498],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[227,133500,133501],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[32,133503,133504],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},[24,133505,133506,133512,133522,133526,133532,133542],{"__ignoreMap":37},[41,133507,133508,133510],{"class":43,"line":44},[41,133509,131128],{"class":54},[41,133511,15710],{"class":275},[41,133513,133514,133516,133518,133520],{"class":43,"line":51},[41,133515,131135],{"class":58},[41,133517,51540],{"class":275},[41,133519,23874],{"class":58},[41,133521,1434],{"class":275},[41,133523,133524],{"class":43,"line":62},[41,133525,1706],{"class":275},[41,133527,133528,133530],{"class":43,"line":70},[41,133529,131150],{"class":54},[41,133531,15710],{"class":275},[41,133533,133534,133536,133538,133540],{"class":43,"line":76},[41,133535,131135],{"class":58},[41,133537,51540],{"class":275},[41,133539,72625],{"class":58},[41,133541,1434],{"class":275},[41,133543,133544],{"class":43,"line":83},[41,133545,1706],{"class":275},[1603,133547],{"style":126511,"src":133548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22136,133550,133552],{"id":133551},"_11138-轮播图","11.1.3.8 轮播图",[1603,133554],{"style":126511,"src":133555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[224,133557,133558],{},[227,133559,133560],{},"制作顺序:",[1280,133562,133563,133566,133569,133578],{},[227,133564,133565],{},"大盒子我们类名为： tb-promo 淘宝广告",[227,133567,133568],{},"里面先放一张图片",[227,133570,133571,133572,133574,133575,133577],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53819,133573],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53819,133576],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[227,133579,133580,133581,133583,133584,133586],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53819,133582],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53819,133585],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[224,133588,133589],{"start":51},[227,133590,133591],{},"代码模块",[32,133593,133595],{"className":126655,"code":133594,"language":126657,"meta":37,"style":37},"\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",[24,133596,133597,133602,133609,133619,133629,133639,133643,133648,133655,133665],{"__ignoreMap":37},[41,133598,133599],{"class":43,"line":44},[41,133600,133601],{"class":47},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[41,133603,133604,133607],{"class":43,"line":51},[41,133605,133606],{"class":54},".son",[41,133608,15710],{"class":275},[41,133610,133611,133613,133615,133617],{"class":43,"line":62},[41,133612,132461],{"class":58},[41,133614,51540],{"class":275},[41,133616,54934],{"class":58},[41,133618,1434],{"class":275},[41,133620,133621,133623,133625,133627],{"class":43,"line":70},[41,133622,132475],{"class":58},[41,133624,51540],{"class":275},[41,133626,465],{"class":58},[41,133628,1434],{"class":275},[41,133630,133631,133633,133635,133637],{"class":43,"line":76},[41,133632,132492],{"class":58},[41,133634,51540],{"class":275},[41,133636,465],{"class":58},[41,133638,1434],{"class":275},[41,133640,133641],{"class":43,"line":83},[41,133642,1706],{"class":275},[41,133644,133645],{"class":43,"line":89},[41,133646,133647],{"class":47},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[41,133649,133650,133653],{"class":43,"line":96},[41,133651,133652],{"class":54},".father",[41,133654,15710],{"class":275},[41,133656,133657,133659,133661,133663],{"class":43,"line":104},[41,133658,132461],{"class":58},[41,133660,51540],{"class":275},[41,133662,54867],{"class":58},[41,133664,1434],{"class":275},[41,133666,133667],{"class":43,"line":176},[41,133668,1706],{"class":275},[20,133670,133671],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[241,133673,133675],{"id":133674},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1603,133677],{"style":126511,"src":133678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[20,133680,133681],{},"✨ 黄金口诀：",[20,133683,133684],{},"\"TOP正下负上，LEFT正右负左\"",[20,133686,133687],{},"\"RIGHT正左负右，BOTTOM正上负下",[20,133689,133690],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[20,133692,133693],{},"✨ 简单记：",[20,133695,133696],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[189,133698,133699],{},"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":37,"searchDepth":51,"depth":51,"links":133701},[133702],{"id":132229,"depth":51,"text":132230,"children":133703},[133704,133705,133706,133707],{"id":132233,"depth":62,"text":132234},{"id":132248,"depth":62,"text":132249},{"id":132416,"depth":62,"text":132417},{"id":133674,"depth":62,"text":133675},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132221,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133714,"title":133715,"body":133716,"description":196,"extension":197,"meta":135139,"navigation":79,"path":135140,"seo":135141,"stem":135142,"__hash__":135143},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133717,"toc":135118},[133718,133721,133725,133733,133737,133742,133750,133762,133766,133771,133779,133790,133794,133799,133840,133848,133852,133855,133858,133861,133955,133958,134052,134055,134149,134152,134155,134190,134193,134196,134226,134229,134232,134235,134238,134241,134244,134247,134317,134320,134324,134328,134369,134373,134379,134382,134385,134389,134392,134395,134398,134479,134482,134485,134489,134493,134496,134499,134502,134505,134508,134514,134523,134527,134546,134550,134560,134563,134566,134569,134572,134575,134578,134581,134584,134593,134597,134606,134609,134614,134667,134672,134838,134841,134844,134849,134852,134855,134858,134861,134866,135014,135017,135020,135025,135028,135033,135067,135070,135073,135077,135080,135087,135090,135093,135096,135099,135102,135105,135108,135112,135115],[10,133719,133715],{"id":133720},"_12-显示隐藏与图形资源",[15,133722,133724],{"id":133723},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1280,133726,133727,133730],{},[227,133728,133729],{},"目的:让一个元素在页面中消失或者显示出来",[227,133731,133732],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[241,133734,133736],{"id":133735},"_1211-display-显示","12.1.1 display 显示",[224,133738,133739],{},[227,133740,133741],{},"display 设置或检索对象是否及如何显示",[1280,133743,133744,133747],{},[227,133745,133746],{},"display: none;隐藏对象",[227,133748,133749],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[224,133751,133752,133759],{"start":51},[227,133753,133754,133755,133758],{},"特点： display 隐藏元素后， ",[423,133756,133757],{},"不再占"," 有原来的位置",[227,133760,133761],{},"在js中使用非常的广泛",[241,133763,133765],{"id":133764},"_1212-visibility可见性","12.1.2 visibility可见性",[224,133767,133768],{},[227,133769,133770],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1280,133772,133773,133776],{},[227,133774,133775],{},"visibility： visible；元素可见",[227,133777,133778],{},"visibility：hidden；元素隐藏",[224,133780,133781,133784,133787],{"start":51},[227,133782,133783],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[227,133785,133786],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[227,133788,133789],{},"隐藏后继续占有原有位置",[241,133791,133793],{"id":133792},"_1213-overflow溢出","12.1.3 overflow溢出",[1280,133795,133796],{},[227,133797,133798],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[411,133800,133801,133809],{},[414,133802,133803],{},[417,133804,133805,133807],{},[420,133806,127119],{"align":23874},[420,133808,27592],{"align":23874},[458,133810,133811,133819,133826,133833],{},[417,133812,133813,133816],{},[463,133814,133815],{"align":23874},"visible",[463,133817,133818],{"align":23874},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[417,133820,133821,133823],{},[463,133822,61817],{"align":23874},[463,133824,133825],{"align":23874},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[417,133827,133828,133830],{},[463,133829,129075],{"align":23874},[463,133831,133832],{"align":23874},"不管超出内容否，总是显示滚动条",[417,133834,133835,133837],{},[463,133836,72766],{"align":23874},[463,133838,133839],{"align":23874},"超出自动显示滚动条，不超出不显示滚动条",[1280,133841,133842,133845],{},[227,133843,133844],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[227,133846,133847],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[241,133849,133851],{"id":133850},"_1214-案例收获","12.1.4 案例收获",[1603,133853],{"style":126511,"src":133854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[20,133856,133857],{},"问题：没做出来动态效果，使用hover没实现",[20,133859,133860],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[32,133862,133863],{"className":126655,"code":132087,"language":126657,"meta":37,"style":37},[24,133864,133865,133869,133883,133887,133901,133905,133919,133923,133937,133941],{"__ignoreMap":37},[41,133866,133867],{"class":43,"line":44},[41,133868,132094],{"class":47},[41,133870,133871,133873,133875,133877,133879,133881],{"class":43,"line":51},[41,133872,132099],{"class":54},[41,133874,79910],{"class":275},[41,133876,129015],{"class":58},[41,133878,51540],{"class":275},[41,133880,132108],{"class":58},[41,133882,129585],{"class":275},[41,133884,133885],{"class":43,"line":62},[41,133886,132115],{"class":47},[41,133888,133889,133891,133893,133895,133897,133899],{"class":43,"line":70},[41,133890,132120],{"class":54},[41,133892,79910],{"class":275},[41,133894,129015],{"class":58},[41,133896,51540],{"class":275},[41,133898,54867],{"class":58},[41,133900,129585],{"class":275},[41,133902,133903],{"class":43,"line":76},[41,133904,132135],{"class":47},[41,133906,133907,133909,133911,133913,133915,133917],{"class":43,"line":83},[41,133908,132140],{"class":54},[41,133910,79910],{"class":275},[41,133912,129015],{"class":58},[41,133914,51540],{"class":275},[41,133916,54934],{"class":58},[41,133918,129585],{"class":275},[41,133920,133921],{"class":43,"line":89},[41,133922,132155],{"class":47},[41,133924,133925,133927,133929,133931,133933,133935],{"class":43,"line":96},[41,133926,132160],{"class":54},[41,133928,79910],{"class":275},[41,133930,129015],{"class":58},[41,133932,51540],{"class":275},[41,133934,86336],{"class":58},[41,133936,129585],{"class":275},[41,133938,133939],{"class":43,"line":104},[41,133940,132175],{"class":47},[41,133942,133943,133945,133947,133949,133951,133953],{"class":43,"line":176},[41,133944,132180],{"class":54},[41,133946,79910],{"class":275},[41,133948,129015],{"class":58},[41,133950,51540],{"class":275},[41,133952,132189],{"class":58},[41,133954,129585],{"class":275},[20,133956,133957],{},"完整代码：",[32,133959,133960],{"className":126655,"code":132087,"language":126657,"meta":37,"style":37},[24,133961,133962,133966,133980,133984,133998,134002,134016,134020,134034,134038],{"__ignoreMap":37},[41,133963,133964],{"class":43,"line":44},[41,133965,132094],{"class":47},[41,133967,133968,133970,133972,133974,133976,133978],{"class":43,"line":51},[41,133969,132099],{"class":54},[41,133971,79910],{"class":275},[41,133973,129015],{"class":58},[41,133975,51540],{"class":275},[41,133977,132108],{"class":58},[41,133979,129585],{"class":275},[41,133981,133982],{"class":43,"line":62},[41,133983,132115],{"class":47},[41,133985,133986,133988,133990,133992,133994,133996],{"class":43,"line":70},[41,133987,132120],{"class":54},[41,133989,79910],{"class":275},[41,133991,129015],{"class":58},[41,133993,51540],{"class":275},[41,133995,54867],{"class":58},[41,133997,129585],{"class":275},[41,133999,134000],{"class":43,"line":76},[41,134001,132135],{"class":47},[41,134003,134004,134006,134008,134010,134012,134014],{"class":43,"line":83},[41,134005,132140],{"class":54},[41,134007,79910],{"class":275},[41,134009,129015],{"class":58},[41,134011,51540],{"class":275},[41,134013,54934],{"class":58},[41,134015,129585],{"class":275},[41,134017,134018],{"class":43,"line":89},[41,134019,132155],{"class":47},[41,134021,134022,134024,134026,134028,134030,134032],{"class":43,"line":96},[41,134023,132160],{"class":54},[41,134025,79910],{"class":275},[41,134027,129015],{"class":58},[41,134029,51540],{"class":275},[41,134031,86336],{"class":58},[41,134033,129585],{"class":275},[41,134035,134036],{"class":43,"line":104},[41,134037,132175],{"class":47},[41,134039,134040,134042,134044,134046,134048,134050],{"class":43,"line":176},[41,134041,132180],{"class":54},[41,134043,79910],{"class":275},[41,134045,129015],{"class":58},[41,134047,51540],{"class":275},[41,134049,132189],{"class":58},[41,134051,129585],{"class":275},[20,134053,134054],{},"分布思路重点详解：",[32,134056,134057],{"className":126655,"code":132087,"language":126657,"meta":37,"style":37},[24,134058,134059,134063,134077,134081,134095,134099,134113,134117,134131,134135],{"__ignoreMap":37},[41,134060,134061],{"class":43,"line":44},[41,134062,132094],{"class":47},[41,134064,134065,134067,134069,134071,134073,134075],{"class":43,"line":51},[41,134066,132099],{"class":54},[41,134068,79910],{"class":275},[41,134070,129015],{"class":58},[41,134072,51540],{"class":275},[41,134074,132108],{"class":58},[41,134076,129585],{"class":275},[41,134078,134079],{"class":43,"line":62},[41,134080,132115],{"class":47},[41,134082,134083,134085,134087,134089,134091,134093],{"class":43,"line":70},[41,134084,132120],{"class":54},[41,134086,79910],{"class":275},[41,134088,129015],{"class":58},[41,134090,51540],{"class":275},[41,134092,54867],{"class":58},[41,134094,129585],{"class":275},[41,134096,134097],{"class":43,"line":76},[41,134098,132135],{"class":47},[41,134100,134101,134103,134105,134107,134109,134111],{"class":43,"line":83},[41,134102,132140],{"class":54},[41,134104,79910],{"class":275},[41,134106,129015],{"class":58},[41,134108,51540],{"class":275},[41,134110,54934],{"class":58},[41,134112,129585],{"class":275},[41,134114,134115],{"class":43,"line":89},[41,134116,132155],{"class":47},[41,134118,134119,134121,134123,134125,134127,134129],{"class":43,"line":96},[41,134120,132160],{"class":54},[41,134122,79910],{"class":275},[41,134124,129015],{"class":58},[41,134126,51540],{"class":275},[41,134128,86336],{"class":58},[41,134130,129585],{"class":275},[41,134132,134133],{"class":43,"line":104},[41,134134,132175],{"class":47},[41,134136,134137,134139,134141,134143,134145,134147],{"class":43,"line":176},[41,134138,132180],{"class":54},[41,134140,79910],{"class":275},[41,134142,129015],{"class":58},[41,134144,51540],{"class":275},[41,134146,132189],{"class":58},[41,134148,129585],{"class":275},[1603,134150],{"style":126511,"src":134151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[20,134153,134154],{},"图片太大，盒子太小，此时需要修改图片的大小",[32,134156,134158],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[24,134159,134160],{"__ignoreMap":37},[41,134161,134162,134164,134166,134168,134170,134173,134175,134177,134180,134183,134185,134188],{"class":43,"line":44},[41,134163,1183],{"class":275},[41,134165,1603],{"class":51403},[41,134167,55342],{"class":54},[41,134169,321],{"class":275},[41,134171,134172],{"class":378},"\"images\u002Fpic.jpg\"",[41,134174,55350],{"class":54},[41,134176,321],{"class":275},[41,134178,134179],{"class":378},"\"描述文字\"",[41,134181,134182],{"class":54}," title",[41,134184,321],{"class":275},[41,134186,134187],{"class":378},"\"悬停提示\"",[41,134189,51410],{"class":275},[1603,134191],{"style":126511,"src":134192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[20,134194,134195],{},"制造遮罩层",[32,134197,134198],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,134199,134200],{"__ignoreMap":37},[41,134201,134202,134204,134206,134208,134210,134212,134214,134216,134218,134220,134222,134224],{"class":43,"line":44},[41,134203,1183],{"class":275},[41,134205,1603],{"class":51403},[41,134207,55342],{"class":54},[41,134209,321],{"class":275},[41,134211,134172],{"class":378},[41,134213,55350],{"class":54},[41,134215,321],{"class":275},[41,134217,134179],{"class":378},[41,134219,134182],{"class":54},[41,134221,321],{"class":275},[41,134223,134187],{"class":378},[41,134225,51410],{"class":275},[20,134227,134228],{},"此时是这样的为标准流",[1603,134230],{"style":126511,"src":134231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[20,134233,134234],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[20,134236,134237],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[20,134239,134240],{},"让他在中间，用center(background-position)",[20,134242,134243],{},"将需要变的尽可能放到一个盒子中",[20,134245,134246],{},"放大盒子上内部盒子发生变化",[32,134248,134250],{"className":126655,"code":134249,"language":126657,"meta":37,"style":37},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[24,134251,134252,134258,134268,134272,134279,134289,134301,134313],{"__ignoreMap":37},[41,134253,134254,134256],{"class":43,"line":44},[41,134255,127722],{"class":54},[41,134257,15710],{"class":275},[41,134259,134260,134262,134264,134266],{"class":43,"line":51},[41,134261,132461],{"class":58},[41,134263,51540],{"class":275},[41,134265,54867],{"class":58},[41,134267,1434],{"class":275},[41,134269,134270],{"class":43,"line":62},[41,134271,1706],{"class":275},[41,134273,134274,134277],{"class":43,"line":70},[41,134275,134276],{"class":54},".child",[41,134278,15710],{"class":275},[41,134280,134281,134283,134285,134287],{"class":43,"line":76},[41,134282,132461],{"class":58},[41,134284,51540],{"class":275},[41,134286,54934],{"class":58},[41,134288,1434],{"class":275},[41,134290,134291,134293,134295,134297,134299],{"class":43,"line":83},[41,134292,132475],{"class":58},[41,134294,51540],{"class":275},[41,134296,929],{"class":58},[41,134298,601],{"class":271},[41,134300,1434],{"class":275},[41,134302,134303,134305,134307,134309,134311],{"class":43,"line":89},[41,134304,132492],{"class":58},[41,134306,51540],{"class":275},[41,134308,929],{"class":58},[41,134310,601],{"class":271},[41,134312,1434],{"class":275},[41,134314,134315],{"class":43,"line":96},[41,134316,1706],{"class":275},[20,134318,134319],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[15,134321,134323],{"id":134322},"_122-精灵图","12.2 精灵图",[241,134325,134327],{"id":134326},"_1221-理解","12.2.1 理解",[224,134329,134330,134348],{},[227,134331,134332,134333,132561,134336,134339,134340,134343,134344,134347],{},"目的： ",[423,134334,134335],{},"为了有效地减少服务器接收和发送请求的次数",[423,134337,134338],{},"提高"," 页面的 ",[423,134341,134342],{},"加载速度"," ，出现了 ",[423,134345,134346],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[227,134349,134350,134351,134353,134354,134356,134357,134359,134360,134362,134363,134365,134366,134368],{},"使用精灵图核心：",[53819,134352],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53819,134355],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53819,134358],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53819,134361],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53819,134364],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53819,134367],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[241,134370,134372],{"id":134371},"_1222-扒图","12.2.2 扒图",[32,134374,134377],{"className":134375,"code":134376,"language":5325},[5323],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[24,134378,134376],{"__ignoreMap":37},[1603,134380],{"style":126511,"src":134381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1603,134383],{"style":126511,"src":134384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[241,134386,134388],{"id":134387},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1603,134390],{"style":126511,"src":134391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[20,134393,134394],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1603,134396],{"style":126511,"src":134397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[32,134399,134401],{"className":126655,"code":134400,"language":126657,"meta":37,"style":37},"\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",[24,134402,134403,134408,134415,134427,134439,134458,134475],{"__ignoreMap":37},[41,134404,134405],{"class":43,"line":44},[41,134406,134407],{"class":47},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[41,134409,134410,134413],{"class":43,"line":51},[41,134411,134412],{"class":54},".icon",[41,134414,15710],{"class":275},[41,134416,134417,134419,134421,134423,134425],{"class":43,"line":62},[41,134418,70671],{"class":58},[41,134420,51540],{"class":275},[41,134422,973],{"class":58},[41,134424,51595],{"class":271},[41,134426,1434],{"class":275},[41,134428,134429,134431,134433,134435,134437],{"class":43,"line":70},[41,134430,70891],{"class":58},[41,134432,51540],{"class":275},[41,134434,973],{"class":58},[41,134436,51595],{"class":271},[41,134438,1434],{"class":275},[41,134440,134441,134443,134445,134447,134449,134452,134454,134456],{"class":43,"line":76},[41,134442,70714],{"class":58},[41,134444,51540],{"class":275},[41,134446,61829],{"class":58},[41,134448,276],{"class":275},[41,134450,134451],{"class":5354},"sprites.png",[41,134453,13852],{"class":275},[41,134455,61839],{"class":58},[41,134457,1434],{"class":275},[41,134459,134460,134462,134464,134466,134468,134471,134473],{"class":43,"line":83},[41,134461,128915],{"class":58},[41,134463,51540],{"class":275},[41,134465,51866],{"class":58},[41,134467,51595],{"class":271},[41,134469,134470],{"class":58}," -20",[41,134472,51595],{"class":271},[41,134474,1434],{"class":275},[41,134476,134477],{"class":43,"line":89},[41,134478,1706],{"class":275},[1603,134480],{"style":126511,"src":134481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[20,134483,134484],{},"在前端中坐标轴的正方向是右和下",[15,134486,134488],{"id":134487},"_123-字体图标","12.3 字体图标",[241,134490,134492],{"id":134491},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[20,134494,134495],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[20,134497,134498],{},"精灵图是有诸多优点的，但是缺点很明显。",[20,134500,134501],{},"1.图片文件还是比较大的。",[20,134503,134504],{},"2.图片本身放大和缩小会失真。",[20,134506,134507],{},"3.一旦图片制作完毕想要更换非常复杂。",[20,134509,134510,134511,25843],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[423,134512,134513],{},"字体图标 iconfont",[20,134515,134516,134519,134520,28488],{},[423,134517,134518],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[423,134521,134522],{},"展示的是图标，本质属于字体",[241,134524,134526],{"id":134525},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1280,134528,134529,134534,134537,134540,134543],{},[227,134530,134531,134533],{},[423,134532,25979],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[227,134535,134536],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[227,134538,134539],{},"兼容性：几乎支持所有的浏览器，请放心使用",[227,134541,134542],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[227,134544,134545],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[241,134547,134549],{"id":134548},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1280,134551,134552],{},[227,134553,134554,134555],{},"icomoon字体库：",[511,134556,134559],{"href":134557,"rel":134558},"http:\u002F\u002Ficomoon.io\u002F",[24001],"http:\u002F\u002Ficomoon.io",[20,134561,134562],{},"进去之后点icomoon app",[1603,134564],{"style":126511,"src":134565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[20,134567,134568],{},"可以对其编辑：",[1603,134570],{"style":126511,"src":134571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[20,134573,134574],{},"生成字体：",[1603,134576],{"style":126511,"src":134577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[20,134579,134580],{},"下载：",[1603,134582],{"style":126511,"src":134583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1280,134585,134586],{},[227,134587,134588,134589],{},"阿里iconfont字体库： ",[511,134590,134591],{"href":134591,"rel":134592},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24001],[241,134594,134596],{"id":134595},"_1234-字体图标的引入","12.3.4 字体图标的引入",[224,134598,134599],{},[227,134600,134601,134602,134605],{},"把下载包里面的 ",[423,134603,134604],{},"fonts"," 文件夹放入页面根目录下",[1603,134607],{"style":126511,"src":134608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[224,134610,134611],{"start":51},[227,134612,134613],{},"字体文件格式",[411,134615,134616,134625],{},[414,134617,134618],{},[417,134619,134620,134623],{},[420,134621,134622],{"align":23874},"格式",[420,134624,23878],{"align":23874},[458,134626,134627,134637,134647,134657],{},[417,134628,134629,134634],{},[463,134630,134631],{"align":23874},[423,134632,134633],{},".ttf",[463,134635,134636],{"align":23874},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[417,134638,134639,134644],{},[463,134640,134641],{"align":23874},[423,134642,134643],{},".woff",[463,134645,134646],{"align":23874},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[417,134648,134649,134654],{},[463,134650,134651],{"align":23874},[423,134652,134653],{},".eot",[463,134655,134656],{"align":23874},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[417,134658,134659,134664],{},[463,134660,134661],{"align":23874},[423,134662,134663],{},"svg",[463,134665,134666],{"align":23874},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[224,134668,134669],{"start":62},[227,134670,134671],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[32,134673,134675],{"className":126655,"code":134674,"language":126657,"meta":37,"style":37},"\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",[24,134676,134677,134682,134689,134701,134717,134742,134763,134783,134803,134807,134813,134823,134834],{"__ignoreMap":37},[41,134678,134679],{"class":43,"line":44},[41,134680,134681],{"class":47},"\u002F* 引入字体图标 *\u002F\n",[41,134683,134684,134687],{"class":43,"line":51},[41,134685,134686],{"class":271},"@font-face",[41,134688,15710],{"class":275},[41,134690,134691,134694,134696,134699],{"class":43,"line":62},[41,134692,134693],{"class":58},"  font-family",[41,134695,51540],{"class":275},[41,134697,134698],{"class":378},"'icomoon'",[41,134700,1434],{"class":275},[41,134702,134703,134706,134708,134710,134712,134715],{"class":43,"line":70},[41,134704,134705],{"class":58},"  src",[41,134707,51540],{"class":275},[41,134709,61829],{"class":58},[41,134711,276],{"class":275},[41,134713,134714],{"class":378},"'fonts\u002Ficomoon.eot'",[41,134716,2857],{"class":275},[41,134718,134719,134721,134723,134725,134727,134730,134732,134735,134737,134740],{"class":43,"line":76},[41,134720,134705],{"class":58},[41,134722,51540],{"class":275},[41,134724,61829],{"class":58},[41,134726,276],{"class":275},[41,134728,134729],{"class":378},"'fonts\u002Ficomoon.eot?#iefix'",[41,134731,13852],{"class":275},[41,134733,134734],{"class":58},"format",[41,134736,276],{"class":275},[41,134738,134739],{"class":378},"'embedded-opentype'",[41,134741,38150],{"class":275},[41,134743,134744,134747,134749,134752,134754,134756,134758,134761],{"class":43,"line":83},[41,134745,134746],{"class":58},"       url",[41,134748,276],{"class":275},[41,134750,134751],{"class":378},"'fonts\u002Ficomoon.woff'",[41,134753,13852],{"class":275},[41,134755,134734],{"class":58},[41,134757,276],{"class":275},[41,134759,134760],{"class":378},"'woff'",[41,134762,38150],{"class":275},[41,134764,134765,134767,134769,134772,134774,134776,134778,134781],{"class":43,"line":89},[41,134766,134746],{"class":58},[41,134768,276],{"class":275},[41,134770,134771],{"class":378},"'fonts\u002Ficomoon.ttf'",[41,134773,13852],{"class":275},[41,134775,134734],{"class":58},[41,134777,276],{"class":275},[41,134779,134780],{"class":378},"'truetype'",[41,134782,38150],{"class":275},[41,134784,134785,134787,134789,134792,134794,134796,134798,134801],{"class":43,"line":96},[41,134786,134746],{"class":58},[41,134788,276],{"class":275},[41,134790,134791],{"class":378},"'fonts\u002Ficomoon.svg#icomoon'",[41,134793,13852],{"class":275},[41,134795,134734],{"class":58},[41,134797,276],{"class":275},[41,134799,134800],{"class":378},"'svg'",[41,134802,2857],{"class":275},[41,134804,134805],{"class":43,"line":104},[41,134806,1706],{"class":275},[41,134808,134809,134811],{"class":43,"line":176},[41,134810,134412],{"class":54},[41,134812,15710],{"class":275},[41,134814,134815,134817,134819,134821],{"class":43,"line":184},[41,134816,134693],{"class":58},[41,134818,51540],{"class":275},[41,134820,134698],{"class":378},[41,134822,1434],{"class":275},[41,134824,134825,134828,134830,134832],{"class":43,"line":1757},[41,134826,134827],{"class":58},"  font-style",[41,134829,51540],{"class":275},[41,134831,63944],{"class":58},[41,134833,1434],{"class":275},[41,134835,134836],{"class":43,"line":1763},[41,134837,1706],{"class":275},[20,134839,134840],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1603,134842],{"style":126511,"src":134843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[224,134845,134846],{"start":70},[227,134847,134848],{},"添加字体",[1603,134850],{"style":126511,"src":134851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[20,134853,134854],{},"复制：",[1603,134856],{"style":126511,"src":134857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[20,134859,134860],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[224,134862,134863],{"start":76},[227,134864,134865],{},"代码展示：",[32,134867,134868],{"className":126655,"code":134674,"language":126657,"meta":37,"style":37},[24,134869,134870,134874,134880,134890,134904,134926,134944,134962,134980,134984,134990,135000,135010],{"__ignoreMap":37},[41,134871,134872],{"class":43,"line":44},[41,134873,134681],{"class":47},[41,134875,134876,134878],{"class":43,"line":51},[41,134877,134686],{"class":271},[41,134879,15710],{"class":275},[41,134881,134882,134884,134886,134888],{"class":43,"line":62},[41,134883,134693],{"class":58},[41,134885,51540],{"class":275},[41,134887,134698],{"class":378},[41,134889,1434],{"class":275},[41,134891,134892,134894,134896,134898,134900,134902],{"class":43,"line":70},[41,134893,134705],{"class":58},[41,134895,51540],{"class":275},[41,134897,61829],{"class":58},[41,134899,276],{"class":275},[41,134901,134714],{"class":378},[41,134903,2857],{"class":275},[41,134905,134906,134908,134910,134912,134914,134916,134918,134920,134922,134924],{"class":43,"line":76},[41,134907,134705],{"class":58},[41,134909,51540],{"class":275},[41,134911,61829],{"class":58},[41,134913,276],{"class":275},[41,134915,134729],{"class":378},[41,134917,13852],{"class":275},[41,134919,134734],{"class":58},[41,134921,276],{"class":275},[41,134923,134739],{"class":378},[41,134925,38150],{"class":275},[41,134927,134928,134930,134932,134934,134936,134938,134940,134942],{"class":43,"line":83},[41,134929,134746],{"class":58},[41,134931,276],{"class":275},[41,134933,134751],{"class":378},[41,134935,13852],{"class":275},[41,134937,134734],{"class":58},[41,134939,276],{"class":275},[41,134941,134760],{"class":378},[41,134943,38150],{"class":275},[41,134945,134946,134948,134950,134952,134954,134956,134958,134960],{"class":43,"line":89},[41,134947,134746],{"class":58},[41,134949,276],{"class":275},[41,134951,134771],{"class":378},[41,134953,13852],{"class":275},[41,134955,134734],{"class":58},[41,134957,276],{"class":275},[41,134959,134780],{"class":378},[41,134961,38150],{"class":275},[41,134963,134964,134966,134968,134970,134972,134974,134976,134978],{"class":43,"line":96},[41,134965,134746],{"class":58},[41,134967,276],{"class":275},[41,134969,134791],{"class":378},[41,134971,13852],{"class":275},[41,134973,134734],{"class":58},[41,134975,276],{"class":275},[41,134977,134800],{"class":378},[41,134979,2857],{"class":275},[41,134981,134982],{"class":43,"line":104},[41,134983,1706],{"class":275},[41,134985,134986,134988],{"class":43,"line":176},[41,134987,134412],{"class":54},[41,134989,15710],{"class":275},[41,134991,134992,134994,134996,134998],{"class":43,"line":184},[41,134993,134693],{"class":58},[41,134995,51540],{"class":275},[41,134997,134698],{"class":378},[41,134999,1434],{"class":275},[41,135001,135002,135004,135006,135008],{"class":43,"line":1757},[41,135003,134827],{"class":58},[41,135005,51540],{"class":275},[41,135007,63944],{"class":58},[41,135009,1434],{"class":275},[41,135011,135012],{"class":43,"line":1763},[41,135013,1706],{"class":275},[1603,135015],{"style":126511,"src":135016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[20,135018,135019],{},"更加细节展示：",[224,135021,135022],{},[227,135023,135024],{},"html 标签内添加小图标",[1603,135026],{"style":126511,"src":135027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[224,135029,135030],{"start":51},[227,135031,135032],{},"给标签定义字体",[32,135034,135035],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,135036,135037,135041,135055,135059],{"__ignoreMap":37},[41,135038,135039],{"class":43,"line":44},[41,135040,130766],{"class":47},[41,135042,135043,135045,135047,135049,135051,135053],{"class":43,"line":51},[41,135044,1183],{"class":275},[41,135046,51714],{"class":51403},[41,135048,53589],{"class":54},[41,135050,321],{"class":275},[41,135052,130779],{"class":378},[41,135054,51410],{"class":275},[41,135056,135057],{"class":43,"line":62},[41,135058,130786],{"class":275},[41,135060,135061,135063,135065],{"class":43,"line":70},[41,135062,51888],{"class":275},[41,135064,51714],{"class":51403},[41,135066,51410],{"class":275},[20,135068,135069],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1603,135071],{"style":126511,"src":135072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[241,135074,135076],{"id":135075},"_1235-字体图标的追加","12.3.5 字体图标的追加",[20,135078,135079],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[20,135081,135082,135083,135086],{},"把压缩包里面的 ",[423,135084,135085],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[20,135088,135089],{},"打开网站，点下方：",[1603,135091],{"style":126511,"src":135092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1603,135094],{"style":126511,"src":135095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1603,135097],{"style":126511,"src":135098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[20,135100,135101],{},"点yes重新加载",[20,135103,135104],{},"然后重复之前的操作就可以实现了",[20,135106,135107],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[241,135109,135111],{"id":135110},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1603,135113],{"style":126511,"src":135114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[189,135116,135117],{},"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":37,"searchDepth":51,"depth":51,"links":135119},[135120,135126,135131],{"id":133723,"depth":51,"text":133724,"children":135121},[135122,135123,135124,135125],{"id":133735,"depth":62,"text":133736},{"id":133764,"depth":62,"text":133765},{"id":133792,"depth":62,"text":133793},{"id":133850,"depth":62,"text":133851},{"id":134322,"depth":51,"text":134323,"children":135127},[135128,135129,135130],{"id":134326,"depth":62,"text":134327},{"id":134371,"depth":62,"text":134372},{"id":134387,"depth":62,"text":134388},{"id":134487,"depth":51,"text":134488,"children":135132},[135133,135134,135135,135136,135137,135138],{"id":134491,"depth":62,"text":134492},{"id":134525,"depth":62,"text":134526},{"id":134548,"depth":62,"text":134549},{"id":134595,"depth":62,"text":134596},{"id":135075,"depth":62,"text":135076},{"id":135110,"depth":62,"text":135111},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133715,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135145,"title":135146,"body":135147,"description":196,"extension":197,"meta":136374,"navigation":79,"path":136375,"seo":136376,"stem":136377,"__hash__":136378},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135148,"toc":136355},[135149,135152,135156,135159,135173,135241,135271,135274,135278,135282,135384,135431,135435,135438,135441,135475,135478,135481,135484,135487,135490,135493,135496,135498,135501,135504,135507,135510,135513,135516,135519,135547,135550,135554,135557,135564,135567,135570,135596,135599,135603,135606,135609,135616,135620,135623,135625,135657,135660,135663,135675,135681,135684,135687,135690,135692,135696,135699,135702,135705,135750,135754,135756,135759,135766,135808,135811,135815,135820,135834,135838,135841,135844,135847,135850,135853,135887,135890,135893,135947,135950,135953,135956,135959,136011,136014,136017,136066,136070,136072,136075,136078,136081,136084,136087,136145,136148,136154,136157,136160,136192,136195,136199,136203,136206,136238,136242,136245,136289,136293,136296,136299,136302,136305,136308,136311,136314,136316,136319,136321,136324,136327,136330,136333,136338,136341,136343,136346,136349,136352],[10,135150,135146],{"id":135151},"_13-界面样式与布局技巧",[15,135153,135155],{"id":135154},"_131-css三角","13.1 css三角",[20,135157,135158],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1280,135160,135161,135164,135167,135170],{},[227,135162,135163],{},"用css 边框可以模拟三角效果",[227,135165,135166],{},"宽度高度为0",[227,135168,135169],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[227,135171,135172],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[32,135174,135176],{"className":126655,"code":135175,"language":126657,"meta":37,"style":37},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[24,135177,135178,135183,135190,135200,135210,135226,135237],{"__ignoreMap":37},[41,135179,135180],{"class":43,"line":44},[41,135181,135182],{"class":47},"\u002F* CSS 实现三角形 *\u002F\n",[41,135184,135185,135188],{"class":43,"line":51},[41,135186,135187],{"class":54},".triangle",[41,135189,15710],{"class":275},[41,135191,135192,135194,135196,135198],{"class":43,"line":62},[41,135193,70671],{"class":58},[41,135195,51540],{"class":275},[41,135197,465],{"class":58},[41,135199,1434],{"class":275},[41,135201,135202,135204,135206,135208],{"class":43,"line":70},[41,135203,70891],{"class":58},[41,135205,51540],{"class":275},[41,135207,465],{"class":58},[41,135209,1434],{"class":275},[41,135211,135212,135214,135216,135218,135220,135222,135224],{"class":43,"line":76},[41,135213,70999],{"class":58},[41,135215,51540],{"class":275},[41,135217,719],{"class":58},[41,135219,51595],{"class":271},[41,135221,51624],{"class":58},[41,135223,64094],{"class":58},[41,135225,1434],{"class":275},[41,135227,135228,135231,135233,135235],{"class":43,"line":83},[41,135229,135230],{"class":58},"  border-bottom-color",[41,135232,51540],{"class":275},[41,135234,62472],{"class":58},[41,135236,1434],{"class":275},[41,135238,135239],{"class":43,"line":89},[41,135240,1706],{"class":275},[32,135242,135243],{"className":126655,"code":130812,"language":126657,"meta":37,"style":37},[24,135244,135245,135251,135267],{"__ignoreMap":37},[41,135246,135247,135249],{"class":43,"line":44},[41,135248,51714],{"class":51403},[41,135250,15710],{"class":275},[41,135252,135253,135255,135257,135259,135261,135263,135265],{"class":43,"line":51},[41,135254,70999],{"class":58},[41,135256,51540],{"class":275},[41,135258,26],{"class":58},[41,135260,51595],{"class":271},[41,135262,51624],{"class":58},[41,135264,130047],{"class":58},[41,135266,1434],{"class":275},[41,135268,135269],{"class":43,"line":62},[41,135270,1706],{"class":275},[1603,135272],{"style":126511,"src":135273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[15,135275,135277],{"id":135276},"_132-css用户界面样式","13.2 css用户界面样式",[241,135279,135281],{"id":135280},"_1321-鼠标样式","13.2.1 鼠标样式",[32,135283,135285],{"className":126655,"code":135284,"language":126657,"meta":37,"style":37},"\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",[24,135286,135287,135292,135311,135329,135348,135365],{"__ignoreMap":37},[41,135288,135289],{"class":43,"line":44},[41,135290,135291],{"class":47},"\u002F* 鼠标样式 *\u002F\n",[41,135293,135294,135296,135298,135301,135303,135305,135308],{"class":43,"line":51},[41,135295,51714],{"class":51403},[41,135297,79910],{"class":275},[41,135299,135300],{"class":58},"cursor",[41,135302,51540],{"class":275},[41,135304,62133],{"class":58},[41,135306,135307],{"class":275},"; }   ",[41,135309,135310],{"class":47},"\u002F* 手型 *\u002F\n",[41,135312,135313,135315,135317,135319,135321,135324,135326],{"class":43,"line":62},[41,135314,51714],{"class":51403},[41,135316,79910],{"class":275},[41,135318,135300],{"class":58},[41,135320,51540],{"class":275},[41,135322,135323],{"class":58},"default",[41,135325,135307],{"class":275},[41,135327,135328],{"class":47},"\u002F* 默认 *\u002F\n",[41,135330,135331,135333,135335,135337,135339,135342,135345],{"class":43,"line":70},[41,135332,51714],{"class":51403},[41,135334,79910],{"class":275},[41,135336,135300],{"class":58},[41,135338,51540],{"class":275},[41,135340,135341],{"class":58},"move",[41,135343,135344],{"class":275},"; }      ",[41,135346,135347],{"class":47},"\u002F* 移动 *\u002F\n",[41,135349,135350,135352,135354,135356,135358,135360,135362],{"class":43,"line":76},[41,135351,51714],{"class":51403},[41,135353,79910],{"class":275},[41,135355,135300],{"class":58},[41,135357,51540],{"class":275},[41,135359,5325],{"class":58},[41,135361,135344],{"class":275},[41,135363,135364],{"class":47},"\u002F* 文本 *\u002F\n",[41,135366,135367,135369,135371,135373,135375,135378,135381],{"class":43,"line":83},[41,135368,51714],{"class":51403},[41,135370,79910],{"class":275},[41,135372,135300],{"class":58},[41,135374,51540],{"class":275},[41,135376,135377],{"class":58},"not-allowed",[41,135379,135380],{"class":275},"; } ",[41,135382,135383],{"class":47},"\u002F* 禁止 *\u002F\n",[411,135385,135386,135394],{},[414,135387,135388],{},[417,135389,135390,135392],{},[420,135391,127119],{"align":23874},[420,135393,27592],{"align":23874},[458,135395,135396,135403,135410,135417,135424],{},[417,135397,135398,135400],{},[463,135399,135323],{"align":23874},[463,135401,135402],{"align":23874},"小白 默认",[417,135404,135405,135407],{},[463,135406,62133],{"align":23874},[463,135408,135409],{"align":23874},"小手",[417,135411,135412,135414],{},[463,135413,135341],{"align":23874},[463,135415,135416],{"align":23874},"移动",[417,135418,135419,135421],{},[463,135420,5325],{"align":23874},[463,135422,135423],{"align":23874},"文本",[417,135425,135426,135428],{},[463,135427,135377],{"align":23874},[463,135429,135430],{"align":23874},"禁止",[241,135432,135434],{"id":135433},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[20,135436,135437],{},"去除表单轮廓线",[20,135439,135440],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[32,135442,135443],{"className":126655,"code":130019,"language":126657,"meta":37,"style":37},[24,135444,135445,135449,135455,135471],{"__ignoreMap":37},[41,135446,135447],{"class":43,"line":44},[41,135448,130026],{"class":47},[41,135450,135451,135453],{"class":43,"line":51},[41,135452,51714],{"class":51403},[41,135454,15710],{"class":275},[41,135456,135457,135459,135461,135463,135465,135467,135469],{"class":43,"line":62},[41,135458,70999],{"class":58},[41,135460,51540],{"class":275},[41,135462,26],{"class":58},[41,135464,51595],{"class":271},[41,135466,51624],{"class":58},[41,135468,130047],{"class":58},[41,135470,1434],{"class":275},[41,135472,135473],{"class":43,"line":70},[41,135474,1706],{"class":275},[20,135476,135477],{},"文本域：",[1603,135479],{"style":126511,"src":135480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[20,135482,135483],{},"此时会有一个空白区域",[1603,135485],{"style":126511,"src":135486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[20,135488,135489],{},"写在同一行就不会出现这个问题",[1603,135491],{"style":126511,"src":135492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[20,135494,135495],{},"文本域是行内块元素，一定记住！！！",[20,135497,98336],{},[1603,135499],{"style":126511,"src":135500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[20,135502,135503],{},"文本域尽量放在一行",[20,135505,135506],{},"知识回顾：cols是列，rols是行",[1603,135508],{"style":126511,"src":135509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[20,135511,135512],{},"它可以进行拖动，显然这是我们不愿意看到的",[1603,135514],{"style":126511,"src":135515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[20,135517,135518],{},"使用resize进行解决",[32,135520,135522],{"className":126655,"code":135521,"language":126657,"meta":37,"style":37},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[24,135523,135524,135530,135543],{"__ignoreMap":37},[41,135525,135526,135528],{"class":43,"line":44},[41,135527,53924],{"class":51403},[41,135529,15710],{"class":275},[41,135531,135532,135534,135536,135538,135540],{"class":43,"line":51},[41,135533,70901],{"class":58},[41,135535,51540],{"class":275},[41,135537,54840],{"class":58},[41,135539,130518],{"class":275},[41,135541,135542],{"class":47},"\u002F* 取消表单轮廓线 *\u002F\n",[41,135544,135545],{"class":43,"line":62},[41,135546,1706],{"class":275},[20,135548,135549],{},"此时就无法通过右下方实现拖动了",[241,135551,135553],{"id":135552},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[20,135555,135556],{},"实现一个盒子中的文字和图片对齐",[20,135558,135559,135560,135563],{},"用于设置一个元素的 ",[423,135561,135562],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[20,135565,135566],{},"图片和文字默认是基线对齐",[1603,135568],{"style":126511,"src":135569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[32,135571,135572],{"className":126655,"code":135521,"language":126657,"meta":37,"style":37},[24,135573,135574,135580,135592],{"__ignoreMap":37},[41,135575,135576,135578],{"class":43,"line":44},[41,135577,53924],{"class":51403},[41,135579,15710],{"class":275},[41,135581,135582,135584,135586,135588,135590],{"class":43,"line":51},[41,135583,70901],{"class":58},[41,135585,51540],{"class":275},[41,135587,54840],{"class":58},[41,135589,130518],{"class":275},[41,135591,135542],{"class":47},[41,135593,135594],{"class":43,"line":62},[41,135595,1706],{"class":275},[1603,135597],{"style":126511,"src":135598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22136,135600,135602],{"id":135601},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[20,135604,135605],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1603,135607],{"style":126511,"src":135608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[20,135610,135611,135612,135615],{},"此时可以给图片、表单这些行内块元素的 ",[423,135613,135614],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22136,135617,135619],{"id":135618},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[20,135621,135622],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[20,135624,14771],{},[32,135626,135628],{"className":126655,"code":135627,"language":126657,"meta":37,"style":37},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[24,135629,135630,135635,135641,135653],{"__ignoreMap":37},[41,135631,135632],{"class":43,"line":44},[41,135633,135634],{"class":47},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[41,135636,135637,135639],{"class":43,"line":51},[41,135638,1603],{"class":51403},[41,135640,15710],{"class":275},[41,135642,135643,135646,135648,135651],{"class":43,"line":62},[41,135644,135645],{"class":58},"  vertical-align",[41,135647,51540],{"class":275},[41,135649,135650],{"class":58},"middle",[41,135652,1434],{"class":275},[41,135654,135655],{"class":43,"line":70},[41,135656,1706],{"class":275},[1603,135658],{"style":126511,"src":135659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[20,135661,135662],{},"主要解决方法有两种：",[224,135664,135665],{},[227,135666,135667,135670,135671,135674],{},[423,135668,135669],{},"给图片"," 添加 ",[423,135672,135673],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[20,135676,135677,135678],{},"2.把图片转换为块级元素 ",[423,135679,135680],{},"display: block",[20,135682,135683],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[20,135685,135686],{},"img {",[20,135688,135689],{},"vertical-align:middle;",[20,135691,1219],{},[241,135693,135695],{"id":135694},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[20,135697,135698],{},"效果：",[1603,135700],{"style":126511,"src":135701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[20,135703,135704],{},"单行文本溢出显示省略号--必须满足三个条件：",[32,135706,135708],{"className":126655,"code":135707,"language":126657,"meta":37,"style":37},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[24,135709,135710,135715,135721,135731,135736,135746],{"__ignoreMap":37},[41,135711,135712],{"class":43,"line":44},[41,135713,135714],{"class":47},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[41,135716,135717,135719],{"class":43,"line":51},[41,135718,1603],{"class":51403},[41,135720,15710],{"class":275},[41,135722,135723,135725,135727,135729],{"class":43,"line":62},[41,135724,135645],{"class":58},[41,135726,51540],{"class":275},[41,135728,135650],{"class":58},[41,135730,1434],{"class":275},[41,135732,135733],{"class":43,"line":70},[41,135734,135735],{"class":47},"  \u002F* 或 *\u002F\n",[41,135737,135738,135740,135742,135744],{"class":43,"line":76},[41,135739,128271],{"class":58},[41,135741,51540],{"class":275},[41,135743,60972],{"class":58},[41,135745,1434],{"class":275},[41,135747,135748],{"class":43,"line":83},[41,135749,1706],{"class":275},[241,135751,135753],{"id":135752},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[20,135755,135698],{},[1603,135757],{"style":126511,"src":135758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[20,135760,135761,135762,135765],{},"多行文本溢出显示省略号， ",[423,135763,135764],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[32,135767,135768],{"className":126655,"code":135707,"language":126657,"meta":37,"style":37},[24,135769,135770,135774,135780,135790,135794,135804],{"__ignoreMap":37},[41,135771,135772],{"class":43,"line":44},[41,135773,135714],{"class":47},[41,135775,135776,135778],{"class":43,"line":51},[41,135777,1603],{"class":51403},[41,135779,15710],{"class":275},[41,135781,135782,135784,135786,135788],{"class":43,"line":62},[41,135783,135645],{"class":58},[41,135785,51540],{"class":275},[41,135787,135650],{"class":58},[41,135789,1434],{"class":275},[41,135791,135792],{"class":43,"line":70},[41,135793,135735],{"class":47},[41,135795,135796,135798,135800,135802],{"class":43,"line":76},[41,135797,128271],{"class":58},[41,135799,51540],{"class":275},[41,135801,60972],{"class":58},[41,135803,1434],{"class":275},[41,135805,135806],{"class":43,"line":83},[41,135807,1706],{"class":275},[20,135809,135810],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[15,135812,135814],{"id":135813},"_133-常见布局技巧","13.3 常见布局技巧",[20,135816,135817],{},[423,135818,135819],{},"巧妙利用一个技术更快更好的布局：",[224,135821,135822,135825,135828,135831],{},[227,135823,135824],{},"margin负值的运用",[227,135826,135827],{},"文字围绕浮动元素",[227,135829,135830],{},"行内块的巧妙运用",[227,135832,135833],{},"CSS三角强化",[241,135835,135837],{"id":135836},"_1331-margin负值的运用","13.3.1 margin负值的运用",[20,135839,135840],{},"应用场景：",[1603,135842],{"style":126511,"src":135843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1603,135845],{"style":126511,"src":135846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[20,135848,135849],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[20,135851,135852],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[32,135854,135855],{"className":126655,"code":130019,"language":126657,"meta":37,"style":37},[24,135856,135857,135861,135867,135883],{"__ignoreMap":37},[41,135858,135859],{"class":43,"line":44},[41,135860,130026],{"class":47},[41,135862,135863,135865],{"class":43,"line":51},[41,135864,51714],{"class":51403},[41,135866,15710],{"class":275},[41,135868,135869,135871,135873,135875,135877,135879,135881],{"class":43,"line":62},[41,135870,70999],{"class":58},[41,135872,51540],{"class":275},[41,135874,26],{"class":58},[41,135876,51595],{"class":271},[41,135878,51624],{"class":58},[41,135880,130047],{"class":58},[41,135882,1434],{"class":275},[41,135884,135885],{"class":43,"line":70},[41,135886,1706],{"class":275},[1603,135888],{"style":126511,"src":135889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[20,135891,135892],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[32,135894,135896],{"className":126655,"code":135895,"language":126657,"meta":37,"style":37},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[24,135897,135898,135903,135909,135919,135931,135943],{"__ignoreMap":37},[41,135899,135900],{"class":43,"line":44},[41,135901,135902],{"class":47},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[41,135904,135905,135907],{"class":43,"line":51},[41,135906,130503],{"class":54},[41,135908,15710],{"class":275},[41,135910,135911,135913,135915,135917],{"class":43,"line":62},[41,135912,132461],{"class":58},[41,135914,51540],{"class":275},[41,135916,54867],{"class":58},[41,135918,1434],{"class":275},[41,135920,135921,135923,135925,135927,135929],{"class":43,"line":70},[41,135922,132475],{"class":58},[41,135924,51540],{"class":275},[41,135926,719],{"class":58},[41,135928,51595],{"class":271},[41,135930,1434],{"class":275},[41,135932,135933,135935,135937,135939,135941],{"class":43,"line":76},[41,135934,132492],{"class":58},[41,135936,51540],{"class":275},[41,135938,973],{"class":58},[41,135940,51595],{"class":271},[41,135942,1434],{"class":275},[41,135944,135945],{"class":43,"line":83},[41,135946,1706],{"class":275},[20,135948,135949],{},"加上上述代码会发现：",[1603,135951],{"style":126511,"src":135952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[20,135954,135955],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[20,135957,135958],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[32,135960,135961],{"className":126655,"code":135895,"language":126657,"meta":37,"style":37},[24,135962,135963,135967,135973,135983,135995,136007],{"__ignoreMap":37},[41,135964,135965],{"class":43,"line":44},[41,135966,135902],{"class":47},[41,135968,135969,135971],{"class":43,"line":51},[41,135970,130503],{"class":54},[41,135972,15710],{"class":275},[41,135974,135975,135977,135979,135981],{"class":43,"line":62},[41,135976,132461],{"class":58},[41,135978,51540],{"class":275},[41,135980,54867],{"class":58},[41,135982,1434],{"class":275},[41,135984,135985,135987,135989,135991,135993],{"class":43,"line":70},[41,135986,132475],{"class":58},[41,135988,51540],{"class":275},[41,135990,719],{"class":58},[41,135992,51595],{"class":271},[41,135994,1434],{"class":275},[41,135996,135997,135999,136001,136003,136005],{"class":43,"line":76},[41,135998,132492],{"class":58},[41,136000,51540],{"class":275},[41,136002,973],{"class":58},[41,136004,51595],{"class":271},[41,136006,1434],{"class":275},[41,136008,136009],{"class":43,"line":83},[41,136010,1706],{"class":275},[20,136012,136013],{},"解决方式2：",[20,136015,136016],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[32,136018,136020],{"className":126655,"code":136019,"language":126657,"meta":37,"style":37},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[24,136021,136022,136028,136038,136050,136062],{"__ignoreMap":37},[41,136023,136024,136026],{"class":43,"line":44},[41,136025,51714],{"class":51403},[41,136027,15710],{"class":275},[41,136029,136030,136032,136034,136036],{"class":43,"line":51},[41,136031,132461],{"class":58},[41,136033,51540],{"class":275},[41,136035,54867],{"class":58},[41,136037,1434],{"class":275},[41,136039,136040,136042,136044,136046,136048],{"class":43,"line":62},[41,136041,132475],{"class":58},[41,136043,51540],{"class":275},[41,136045,719],{"class":58},[41,136047,51595],{"class":271},[41,136049,1434],{"class":275},[41,136051,136052,136054,136056,136058,136060],{"class":43,"line":70},[41,136053,132492],{"class":58},[41,136055,51540],{"class":275},[41,136057,973],{"class":58},[41,136059,51595],{"class":271},[41,136061,1434],{"class":275},[41,136063,136064],{"class":43,"line":76},[41,136065,1706],{"class":275},[241,136067,136069],{"id":136068},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[20,136071,135840],{},[1603,136073],{"style":126511,"src":136074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[20,136076,136077],{},"实现结构图：",[1603,136079],{"style":126511,"src":136080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[20,136082,136083],{},"巧妙运用浮动元素不会压住文字的特性",[20,136085,136086],{},"代码显示：",[32,136088,136090],{"className":126655,"code":136089,"language":126657,"meta":37,"style":37},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[24,136091,136092,136098,136108,136112,136117,136121,136127,136141],{"__ignoreMap":37},[41,136093,136094,136096],{"class":43,"line":44},[41,136095,130503],{"class":54},[41,136097,15710],{"class":275},[41,136099,136100,136102,136104,136106],{"class":43,"line":51},[41,136101,131135],{"class":58},[41,136103,51540],{"class":275},[41,136105,23874],{"class":58},[41,136107,1434],{"class":275},[41,136109,136110],{"class":43,"line":62},[41,136111,1706],{"class":275},[41,136113,136114],{"class":43,"line":70},[41,136115,136116],{"class":275},"```Css\n",[41,136118,136119],{"class":43,"line":76},[41,136120,130498],{"class":47},[41,136122,136123,136125],{"class":43,"line":83},[41,136124,130503],{"class":54},[41,136126,15710],{"class":275},[41,136128,136129,136131,136133,136135,136137,136139],{"class":43,"line":89},[41,136130,70573],{"class":58},[41,136132,51540],{"class":275},[41,136134,465],{"class":58},[41,136136,51659],{"class":58},[41,136138,130518],{"class":275},[41,136140,130521],{"class":47},[41,136142,136143],{"class":43,"line":96},[41,136144,1706],{"class":275},[20,136146,136147],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[32,136149,136152],{"className":136150,"code":136151,"language":5325},[5323],"\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",[24,136153,136151],{"__ignoreMap":37},[1603,136155],{"style":126511,"src":136156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[20,136158,136159],{},"最终展示结果：",[32,136161,136162],{"className":126655,"code":130491,"language":126657,"meta":37,"style":37},[24,136163,136164,136168,136174,136188],{"__ignoreMap":37},[41,136165,136166],{"class":43,"line":44},[41,136167,130498],{"class":47},[41,136169,136170,136172],{"class":43,"line":51},[41,136171,130503],{"class":54},[41,136173,15710],{"class":275},[41,136175,136176,136178,136180,136182,136184,136186],{"class":43,"line":62},[41,136177,70573],{"class":58},[41,136179,51540],{"class":275},[41,136181,465],{"class":58},[41,136183,51659],{"class":58},[41,136185,130518],{"class":275},[41,136187,130521],{"class":47},[41,136189,136190],{"class":43,"line":70},[41,136191,1706],{"class":275},[1603,136193],{"style":126511,"src":136194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[15,136196,136198],{"id":136197},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[241,136200,136202],{"id":136201},"_1341-原理","13.4.1 原理",[1603,136204],{"style":126511,"src":136205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[32,136207,136208],{"className":126655,"code":130491,"language":126657,"meta":37,"style":37},[24,136209,136210,136214,136220,136234],{"__ignoreMap":37},[41,136211,136212],{"class":43,"line":44},[41,136213,130498],{"class":47},[41,136215,136216,136218],{"class":43,"line":51},[41,136217,130503],{"class":54},[41,136219,15710],{"class":275},[41,136221,136222,136224,136226,136228,136230,136232],{"class":43,"line":62},[41,136223,70573],{"class":58},[41,136225,51540],{"class":275},[41,136227,465],{"class":58},[41,136229,51659],{"class":58},[41,136231,130518],{"class":275},[41,136233,130521],{"class":47},[41,136235,136236],{"class":43,"line":70},[41,136237,1706],{"class":275},[241,136239,136241],{"id":136240},"_1342-实例","13.4.2 实例",[1603,136243],{"style":126511,"src":136244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[32,136246,136247],{"className":126655,"code":131121,"language":126657,"meta":37,"style":37},[24,136248,136249,136255,136265,136269,136275,136285],{"__ignoreMap":37},[41,136250,136251,136253],{"class":43,"line":44},[41,136252,131128],{"class":54},[41,136254,15710],{"class":275},[41,136256,136257,136259,136261,136263],{"class":43,"line":51},[41,136258,131135],{"class":58},[41,136260,51540],{"class":275},[41,136262,23874],{"class":58},[41,136264,1434],{"class":275},[41,136266,136267],{"class":43,"line":62},[41,136268,1706],{"class":275},[41,136270,136271,136273],{"class":43,"line":70},[41,136272,131150],{"class":54},[41,136274,15710],{"class":275},[41,136276,136277,136279,136281,136283],{"class":43,"line":76},[41,136278,131135],{"class":58},[41,136280,51540],{"class":275},[41,136282,72625],{"class":58},[41,136284,1434],{"class":275},[41,136286,136287],{"class":43,"line":83},[41,136288,1706],{"class":275},[15,136290,136292],{"id":136291},"_135-css的初始化","13.5 css的初始化",[20,136294,136295],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[20,136297,136298],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[20,136300,136301],{},"每个网页都必须首先进行 CSS初始化。",[20,136303,136304],{},"这里我们以 京东CSS初始化代码为例。",[20,136306,136307],{},"在网页右键查看网页源代码",[20,136309,136310],{},"找到css的link引入语句",[20,136312,136313],{},"然后ctrl+f 输入body",[20,136315,77329],{},[1603,136317],{"style":126511,"src":136318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[20,136320,77352],{},[1603,136322],{"style":126511,"src":136323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[20,136325,136326],{},"③打开了网页上传压缩的代码",[1603,136328],{"style":126511,"src":136329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[20,136331,136332],{},"④从body前可以查看这个网页的初始化代码",[20,136334,136335],{},[423,136336,136337],{},"Unicode编码字体：",[20,136339,136340],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[20,136342,83310],{},[20,136344,136345],{},"黑体 \\9ED1\\4F53",[20,136347,136348],{},"宋体 \\5B8B\\4F53",[20,136350,136351],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[189,136353,136354],{},"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":37,"searchDepth":51,"depth":51,"links":136356},[136357,136358,136365,136369,136373],{"id":135154,"depth":51,"text":135155},{"id":135276,"depth":51,"text":135277,"children":136359},[136360,136361,136362,136363,136364],{"id":135280,"depth":62,"text":135281},{"id":135433,"depth":62,"text":135434},{"id":135552,"depth":62,"text":135553},{"id":135694,"depth":62,"text":135695},{"id":135752,"depth":62,"text":135753},{"id":135813,"depth":51,"text":135814,"children":136366},[136367,136368],{"id":135836,"depth":62,"text":135837},{"id":136068,"depth":62,"text":136069},{"id":136197,"depth":51,"text":136198,"children":136370},[136371,136372],{"id":136201,"depth":62,"text":136202},{"id":136240,"depth":62,"text":136241},{"id":136291,"depth":51,"text":136292},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135146,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136380,"title":136381,"body":136382,"description":196,"extension":197,"meta":138068,"navigation":79,"path":138069,"seo":138070,"stem":138071,"__hash__":138072},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136383,"toc":138057},[136384,136387,136391,136395,136398,136405,136408,136411,136449,136452,136454,136468,136472,136481,136485,136490,136493,136496,136499,136534,136539,136542,136572,136575,136580,136583,136586,136616,136619,136673,136676,136680,136685,136697,136700,136704,136734,136737,136742,136745,136775,136778,136782,136799,136803,136807,136810,136843,136846,136850,136853,136856,136859,136862,136865,136976,136979,136982,136985,137087,137090,137094,137098,137102,137105,137145,137148,137150,137166,137170,137173,137178,137259,137262,137265,137391,137396,137399,137407,137410,137415,137500,137503,137507,137510,137513,137517,137537,137542,137626,137629,137634,137637,137640,137718,137721,137724,137727,137730,137733,137738,137741,137744,137816,137819,137824,137827,137924,137927,137933,137936,137939,137942,137945,137948,137951,137954,137957,137961,137966,137969,138002,138007,138010,138051,138054],[10,136385,136381],{"id":136386},"_14-html5与css3新特性",[15,136388,136390],{"id":136389},"_141-html5的新特性","14.1 HTML5的新特性",[241,136392,136394],{"id":136393},"_1411-基本标签","14.1.1 基本标签",[20,136396,136397],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[20,136399,136400,136401,136404],{},"这些新特性都有兼容性问题，基本是 ",[423,136402,136403],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[20,136406,136407],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[20,136409,136410],{},"现在使用的是新特性：",[1280,136412,136413,136419,136425,136431,136437,136443],{},[227,136414,136415,136418],{},[24,136416,136417],{},"\u003Cheader>"," 头部标签",[227,136420,136421,136424],{},[24,136422,136423],{},"\u003Cnav>"," 导航标签",[227,136426,136427,136430],{},[24,136428,136429],{},"\u003Carticle>"," 内容标签",[227,136432,136433,136436],{},[24,136434,136435],{},"\u003Csection>"," 定义文档某个区域",[227,136438,136439,136442],{},[24,136440,136441],{},"\u003Caside>"," 侧边栏标签",[227,136444,136445,136448],{},[24,136446,136447],{},"\u003Cfooter>"," 尾部标签",[1603,136450],{"style":126511,"src":136451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[20,136453,305],{},[1280,136455,136456,136459,136462,136465],{},[227,136457,136458],{},"这种语义化标准主要是针对搜索引擎的",[227,136460,136461],{},"这些标签页面中可以经常使用",[227,136463,136464],{},"在IE9中，需要把这些元素转换为块级元素",[227,136466,136467],{},"移动端更喜欢使用这些标签",[241,136469,136471],{"id":136470},"_1412-多媒体标签","14.1.2 多媒体标签",[20,136473,136474,136475,136477,136478,136480],{},"音频 ",[423,136476,28277],{}," 和视频 ",[423,136479,28286],{}," 两个标签",[22136,136482,136484],{"id":136483},"_14121-视频标签-video","14.1.2.1 视频标签- video",[224,136486,136487],{},[227,136488,136489],{},"支持格式：",[1603,136491],{"style":126511,"src":136492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[20,136494,136495],{},"尽量使用MP4，兼容性好",[20,136497,136498],{},"用MP4就可以",[32,136500,136502],{"className":127402,"code":136501,"language":127404,"meta":37,"style":37},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[24,136503,136504],{"__ignoreMap":37},[41,136505,136506,136508,136510,136512,136514,136517,136519,136522,136525,136528,136530,136532],{"class":43,"line":44},[41,136507,1183],{"class":275},[41,136509,28286],{"class":51403},[41,136511,55342],{"class":54},[41,136513,321],{"class":275},[41,136515,136516],{"class":378},"\"movie.mp4\"",[41,136518,92526],{"class":54},[41,136520,136521],{"class":54}," autoplay",[41,136523,136524],{"class":54}," muted",[41,136526,136527],{"class":54}," loop",[41,136529,55417],{"class":275},[41,136531,28286],{"class":51403},[41,136533,51410],{"class":275},[224,136535,136536],{"start":51},[227,136537,136538],{},"兼容写法",[20,136540,136541],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[32,136543,136544],{"className":127402,"code":136501,"language":127404,"meta":37,"style":37},[24,136545,136546],{"__ignoreMap":37},[41,136547,136548,136550,136552,136554,136556,136558,136560,136562,136564,136566,136568,136570],{"class":43,"line":44},[41,136549,1183],{"class":275},[41,136551,28286],{"class":51403},[41,136553,55342],{"class":54},[41,136555,321],{"class":275},[41,136557,136516],{"class":378},[41,136559,92526],{"class":54},[41,136561,136521],{"class":54},[41,136563,136524],{"class":54},[41,136565,136527],{"class":54},[41,136567,55417],{"class":275},[41,136569,28286],{"class":51403},[41,136571,51410],{"class":275},[20,136573,136574],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[224,136576,136577],{"start":62},[227,136578,136579],{},"video常用属性",[1603,136581],{"style":126511,"src":136582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[20,136584,136585],{},"poster属性后面是跟的等待加载图片的地址",[32,136587,136588],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,136589,136590],{"__ignoreMap":37},[41,136591,136592,136594,136596,136598,136600,136602,136604,136606,136608,136610,136612,136614],{"class":43,"line":44},[41,136593,1183],{"class":275},[41,136595,1603],{"class":51403},[41,136597,55342],{"class":54},[41,136599,321],{"class":275},[41,136601,134172],{"class":378},[41,136603,55350],{"class":54},[41,136605,321],{"class":275},[41,136607,134179],{"class":378},[41,136609,134182],{"class":54},[41,136611,321],{"class":275},[41,136613,134187],{"class":378},[41,136615,51410],{"class":275},[20,136617,136618],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[32,136620,136622],{"className":126655,"code":136621,"language":126657,"meta":37,"style":37},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[24,136623,136624,136629,136635,136659,136664,136669],{"__ignoreMap":37},[41,136625,136626],{"class":43,"line":44},[41,136627,136628],{"class":47},"\u002F* 2D 位移 *\u002F\n",[41,136630,136631,136633],{"class":43,"line":51},[41,136632,51714],{"class":51403},[41,136634,15710],{"class":275},[41,136636,136637,136640,136642,136645,136647,136649,136651,136653,136655,136657],{"class":43,"line":62},[41,136638,136639],{"class":58},"  transform",[41,136641,51540],{"class":275},[41,136643,136644],{"class":58},"translate",[41,136646,276],{"class":275},[41,136648,584],{"class":58},[41,136650,51595],{"class":271},[41,136652,12573],{"class":275},[41,136654,929],{"class":58},[41,136656,51595],{"class":271},[41,136658,2857],{"class":275},[41,136660,136661],{"class":43,"line":70},[41,136662,136663],{"class":47},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[41,136665,136666],{"class":43,"line":76},[41,136667,136668],{"class":47},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[41,136670,136671],{"class":43,"line":83},[41,136672,1706],{"class":275},[20,136674,136675],{},"muted:自动静音属性",[22136,136677,136679],{"id":136678},"_14122-音频标签audio","14.1.2.2 音频标签audio",[224,136681,136682],{},[227,136683,136684],{},"基本使用",[20,136686,136687,136688,136693,136694],{},"当前 ",[423,136689,136690],{},[24,136691,136692],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[423,136695,136696],{},"mp3格式",[1603,136698],{"style":126511,"src":136699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[224,136701,136702],{"start":51},[227,136703,136538],{},[32,136705,136706],{"className":127402,"code":136501,"language":127404,"meta":37,"style":37},[24,136707,136708],{"__ignoreMap":37},[41,136709,136710,136712,136714,136716,136718,136720,136722,136724,136726,136728,136730,136732],{"class":43,"line":44},[41,136711,1183],{"class":275},[41,136713,28286],{"class":51403},[41,136715,55342],{"class":54},[41,136717,321],{"class":275},[41,136719,136516],{"class":378},[41,136721,92526],{"class":54},[41,136723,136521],{"class":54},[41,136725,136524],{"class":54},[41,136727,136527],{"class":54},[41,136729,55417],{"class":275},[41,136731,28286],{"class":51403},[41,136733,51410],{"class":275},[20,136735,136736],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[224,136738,136739],{"start":62},[227,136740,136741],{},"常用属性",[1603,136743],{"style":126511,"src":136744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[32,136746,136747],{"className":127402,"code":136501,"language":127404,"meta":37,"style":37},[24,136748,136749],{"__ignoreMap":37},[41,136750,136751,136753,136755,136757,136759,136761,136763,136765,136767,136769,136771,136773],{"class":43,"line":44},[41,136752,1183],{"class":275},[41,136754,28286],{"class":51403},[41,136756,55342],{"class":54},[41,136758,321],{"class":275},[41,136760,136516],{"class":378},[41,136762,92526],{"class":54},[41,136764,136521],{"class":54},[41,136766,136524],{"class":54},[41,136768,136527],{"class":54},[41,136770,55417],{"class":275},[41,136772,28286],{"class":51403},[41,136774,51410],{"class":275},[20,136776,136777],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22136,136779,136781],{"id":136780},"_14123-总结","14.1.2.3 总结",[1280,136783,136784,136787,136790,136793,136796],{},[227,136785,136786],{},"音频标签和视频标签使用方式基本一致",[227,136788,136789],{},"浏览器支持情况不同",[227,136791,136792],{},"谷歌浏览器把音频和视频自动播放禁止了",[227,136794,136795],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[227,136797,136798],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[241,136800,136802],{"id":136801},"_1413-表单元素","14.1.3 表单元素",[22136,136804,136806],{"id":136805},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1603,136808],{"style":126511,"src":136809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[32,136811,136813],{"className":127402,"code":136812,"language":127404,"meta":37,"style":37},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[24,136814,136815],{"__ignoreMap":37},[41,136816,136817,136819,136821,136823,136825,136827,136829,136831,136834,136836,136838,136841],{"class":43,"line":44},[41,136818,1183],{"class":275},[41,136820,53924],{"class":51403},[41,136822,53927],{"class":54},[41,136824,321],{"class":275},[41,136826,62802],{"class":378},[41,136828,15058],{"class":54},[41,136830,321],{"class":275},[41,136832,136833],{"class":378},"\"username\"",[41,136835,61123],{"class":54},[41,136837,321],{"class":275},[41,136839,136840],{"class":378},"\"请输入用户名\"",[41,136842,51410],{"class":275},[1603,136844],{"style":126511,"src":136845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22136,136847,136849],{"id":136848},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1603,136851],{"style":126511,"src":136852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[20,136854,136855],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[20,136857,136858],{},"快捷操作：",[1603,136860],{"style":126511,"src":136861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[20,136863,136864],{},"例子1：",[32,136866,136868],{"className":127402,"code":136867,"language":127404,"meta":37,"style":37},"\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",[24,136869,136870,136893,136920,136949,136968],{"__ignoreMap":37},[41,136871,136872,136874,136876,136878,136880,136883,136886,136888,136891],{"class":43,"line":44},[41,136873,1183],{"class":275},[41,136875,66728],{"class":51403},[41,136877,66731],{"class":54},[41,136879,321],{"class":275},[41,136881,136882],{"class":378},"\"\u002Fsubmit\"",[41,136884,136885],{"class":54}," method",[41,136887,321],{"class":275},[41,136889,136890],{"class":378},"\"post\"",[41,136892,51410],{"class":275},[41,136894,136895,136897,136899,136901,136903,136905,136907,136909,136911,136913,136915,136918],{"class":43,"line":51},[41,136896,52247],{"class":275},[41,136898,53924],{"class":51403},[41,136900,53927],{"class":54},[41,136902,321],{"class":275},[41,136904,62802],{"class":378},[41,136906,15058],{"class":54},[41,136908,321],{"class":275},[41,136910,136833],{"class":378},[41,136912,61123],{"class":54},[41,136914,321],{"class":275},[41,136916,136917],{"class":378},"\"用户名\"",[41,136919,51410],{"class":275},[41,136921,136922,136924,136926,136928,136930,136933,136935,136937,136940,136942,136944,136947],{"class":43,"line":62},[41,136923,52247],{"class":275},[41,136925,53924],{"class":51403},[41,136927,53927],{"class":54},[41,136929,321],{"class":275},[41,136931,136932],{"class":378},"\"password\"",[41,136934,15058],{"class":54},[41,136936,321],{"class":275},[41,136938,136939],{"class":378},"\"pwd\"",[41,136941,61123],{"class":54},[41,136943,321],{"class":275},[41,136945,136946],{"class":378},"\"密码\"",[41,136948,51410],{"class":275},[41,136950,136951,136953,136955,136957,136959,136961,136964,136966],{"class":43,"line":70},[41,136952,52247],{"class":275},[41,136954,53990],{"class":51403},[41,136956,53927],{"class":54},[41,136958,321],{"class":275},[41,136960,66751],{"class":378},[41,136962,136963],{"class":275},">提交\u003C\u002F",[41,136965,53990],{"class":51403},[41,136967,51410],{"class":275},[41,136969,136970,136972,136974],{"class":43,"line":76},[41,136971,51888],{"class":275},[41,136973,66728],{"class":51403},[41,136975,51410],{"class":275},[1603,136977],{"style":126511,"src":136978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[20,136980,136981],{},"value是表单域的内容",[20,136983,136984],{},"例子2：",[32,136986,136987],{"className":127402,"code":136867,"language":127404,"meta":37,"style":37},[24,136988,136989,137009,137035,137061,137079],{"__ignoreMap":37},[41,136990,136991,136993,136995,136997,136999,137001,137003,137005,137007],{"class":43,"line":44},[41,136992,1183],{"class":275},[41,136994,66728],{"class":51403},[41,136996,66731],{"class":54},[41,136998,321],{"class":275},[41,137000,136882],{"class":378},[41,137002,136885],{"class":54},[41,137004,321],{"class":275},[41,137006,136890],{"class":378},[41,137008,51410],{"class":275},[41,137010,137011,137013,137015,137017,137019,137021,137023,137025,137027,137029,137031,137033],{"class":43,"line":51},[41,137012,52247],{"class":275},[41,137014,53924],{"class":51403},[41,137016,53927],{"class":54},[41,137018,321],{"class":275},[41,137020,62802],{"class":378},[41,137022,15058],{"class":54},[41,137024,321],{"class":275},[41,137026,136833],{"class":378},[41,137028,61123],{"class":54},[41,137030,321],{"class":275},[41,137032,136917],{"class":378},[41,137034,51410],{"class":275},[41,137036,137037,137039,137041,137043,137045,137047,137049,137051,137053,137055,137057,137059],{"class":43,"line":62},[41,137038,52247],{"class":275},[41,137040,53924],{"class":51403},[41,137042,53927],{"class":54},[41,137044,321],{"class":275},[41,137046,136932],{"class":378},[41,137048,15058],{"class":54},[41,137050,321],{"class":275},[41,137052,136939],{"class":378},[41,137054,61123],{"class":54},[41,137056,321],{"class":275},[41,137058,136946],{"class":378},[41,137060,51410],{"class":275},[41,137062,137063,137065,137067,137069,137071,137073,137075,137077],{"class":43,"line":70},[41,137064,52247],{"class":275},[41,137066,53990],{"class":51403},[41,137068,53927],{"class":54},[41,137070,321],{"class":275},[41,137072,66751],{"class":378},[41,137074,136963],{"class":275},[41,137076,53990],{"class":51403},[41,137078,51410],{"class":275},[41,137080,137081,137083,137085],{"class":43,"line":76},[41,137082,51888],{"class":275},[41,137084,66728],{"class":51403},[41,137086,51410],{"class":275},[1603,137088],{"style":126511,"src":137089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[15,137091,137093],{"id":137092},"_142-css新特性","14.2 CSS新特性",[241,137095,137097],{"id":137096},"_1421-新增选择器","14.2.1 新增选择器",[22136,137099,137101],{"id":137100},"_14211-属性选择器","14.2.1.1 属性选择器",[1603,137103],{"style":126511,"src":137104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[32,137106,137108],{"className":126655,"code":137107,"language":126657,"meta":37,"style":37},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[24,137109,137110,137125,137141],{"__ignoreMap":37},[41,137111,137112,137114,137116,137118,137120,137122],{"class":43,"line":44},[41,137113,53924],{"class":51403},[41,137115,1163],{"class":275},[41,137117,103210],{"class":54},[41,137119,321],{"class":271},[41,137121,62802],{"class":378},[41,137123,137124],{"class":275},"] {\n",[41,137126,137127,137129,137131,137133,137135,137137,137139],{"class":43,"line":51},[41,137128,70999],{"class":58},[41,137130,51540],{"class":275},[41,137132,26],{"class":58},[41,137134,51595],{"class":271},[41,137136,51624],{"class":58},[41,137138,130235],{"class":58},[41,137140,1434],{"class":275},[41,137142,137143],{"class":43,"line":62},[41,137144,1706],{"class":275},[1603,137146],{"style":126511,"src":137147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[20,137149,305],{},[1280,137151,137152,137155,137158,137161],{},[227,137153,137154],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[227,137156,137157],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[227,137159,137160],{},"属性选择器也可以选择出来自定义的属性",[227,137162,137163,137165],{},[423,137164,9163],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22136,137167,137169],{"id":137168},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1603,137171],{"style":126511,"src":137172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[224,137174,137175],{},[227,137176,137177],{},"fist-child",[32,137179,137181],{"className":126655,"code":137180,"language":126657,"meta":37,"style":37},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[24,137182,137183,137188,137203,137223,137241],{"__ignoreMap":37},[41,137184,137185],{"class":43,"line":44},[41,137186,137187],{"class":47},"\u002F* 属性选择器 *\u002F\n",[41,137189,137190,137192,137194,137196,137198,137200],{"class":43,"line":51},[41,137191,53924],{"class":51403},[41,137193,1163],{"class":275},[41,137195,103210],{"class":54},[41,137197,321],{"class":271},[41,137199,62802],{"class":378},[41,137201,137202],{"class":275},"] { }\n",[41,137204,137205,137207,137209,137211,137214,137217,137220],{"class":43,"line":62},[41,137206,53924],{"class":51403},[41,137208,1163],{"class":275},[41,137210,14832],{"class":54},[41,137212,137213],{"class":271},"^=",[41,137215,137216],{"class":378},"\"icon\"",[41,137218,137219],{"class":275},"] { }  ",[41,137221,137222],{"class":47},"\u002F* 以 icon 开头 *\u002F\n",[41,137224,137225,137227,137229,137231,137234,137236,137238],{"class":43,"line":70},[41,137226,53924],{"class":51403},[41,137228,1163],{"class":275},[41,137230,14832],{"class":54},[41,137232,137233],{"class":271},"$=",[41,137235,137216],{"class":378},[41,137237,137219],{"class":275},[41,137239,137240],{"class":47},"\u002F* 以 icon 结尾 *\u002F\n",[41,137242,137243,137245,137247,137249,137252,137254,137256],{"class":43,"line":76},[41,137244,53924],{"class":51403},[41,137246,1163],{"class":275},[41,137248,14832],{"class":54},[41,137250,137251],{"class":271},"*=",[41,137253,137216],{"class":378},[41,137255,137219],{"class":275},[41,137257,137258],{"class":47},"\u002F* 包含 icon *\u002F\n",[20,137260,137261],{},"ul的第一个儿子文本为红色",[20,137263,137264],{},"一定要在冒号前加空格，不然就是选中所有的了",[32,137266,137268],{"className":126655,"code":137267,"language":126657,"meta":37,"style":37},".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",[24,137269,137270,137276,137286,137290,137294,137299,137312,137325,137341,137358,137375],{"__ignoreMap":37},[41,137271,137272,137274],{"class":43,"line":44},[41,137273,126946],{"class":54},[41,137275,15710],{"class":275},[41,137277,137278,137280,137282,137284],{"class":43,"line":51},[41,137279,71008],{"class":58},[41,137281,51540],{"class":275},[41,137283,57524],{"class":58},[41,137285,1434],{"class":275},[41,137287,137288],{"class":43,"line":62},[41,137289,1706],{"class":275},[41,137291,137292],{"class":43,"line":70},[41,137293,136116],{"class":275},[41,137295,137296],{"class":43,"line":76},[41,137297,137298],{"class":47},"\u002F* 结构伪类选择器 *\u002F\n",[41,137300,137301,137303,137306,137309],{"class":43,"line":83},[41,137302,227],{"class":51403},[41,137304,137305],{"class":54},":first-child",[41,137307,137308],{"class":275}," { }           ",[41,137310,137311],{"class":47},"\u002F* 第一个 *\u002F\n",[41,137313,137314,137316,137319,137322],{"class":43,"line":89},[41,137315,227],{"class":51403},[41,137317,137318],{"class":54},":last-child",[41,137320,137321],{"class":275}," { }            ",[41,137323,137324],{"class":47},"\u002F* 最后一个 *\u002F\n",[41,137326,137327,137329,137331,137333,137335,137338],{"class":43,"line":96},[41,137328,227],{"class":51403},[41,137330,129569],{"class":54},[41,137332,276],{"class":275},[41,137334,351],{"class":58},[41,137336,137337],{"class":275},") { }          ",[41,137339,137340],{"class":47},"\u002F* 第2个 *\u002F\n",[41,137342,137343,137345,137347,137349,137352,137355],{"class":43,"line":104},[41,137344,227],{"class":51403},[41,137346,129569],{"class":54},[41,137348,276],{"class":275},[41,137350,137351],{"class":58},"2n",[41,137353,137354],{"class":275},") { }         ",[41,137356,137357],{"class":47},"\u002F* 偶数 *\u002F\n",[41,137359,137360,137362,137364,137366,137369,137372],{"class":43,"line":176},[41,137361,227],{"class":51403},[41,137363,129569],{"class":54},[41,137365,276],{"class":275},[41,137367,137368],{"class":58},"2n+1",[41,137370,137371],{"class":275},") { }       ",[41,137373,137374],{"class":47},"\u002F* 奇数 *\u002F\n",[41,137376,137377,137379,137381,137383,137386,137388],{"class":43,"line":184},[41,137378,227],{"class":51403},[41,137380,129569],{"class":54},[41,137382,276],{"class":275},[41,137384,137385],{"class":58},"-n+3",[41,137387,137371],{"class":275},[41,137389,137390],{"class":47},"\u002F* 前3个 *\u002F\n",[51714,137392,137395],{"className":137393},[137394],"example","\n  示例内容\n",[20,137397,137398],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1280,137400,137401],{},[227,137402,137403,137406],{},[24,137404,137405],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[20,137408,137409],{},"也就是说它选择的是熊大",[224,137411,137412],{"start":83},[227,137413,137414],{},"权重",[32,137416,137418],{"className":126655,"code":137417,"language":126657,"meta":37,"style":37},"\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",[24,137419,137420,137424,137434,137444,137458,137472,137486],{"__ignoreMap":37},[41,137421,137422],{"class":43,"line":44},[41,137423,137298],{"class":47},[41,137425,137426,137428,137430,137432],{"class":43,"line":51},[41,137427,227],{"class":51403},[41,137429,137305],{"class":54},[41,137431,137308],{"class":275},[41,137433,137311],{"class":47},[41,137435,137436,137438,137440,137442],{"class":43,"line":62},[41,137437,227],{"class":51403},[41,137439,137318],{"class":54},[41,137441,137321],{"class":275},[41,137443,137324],{"class":47},[41,137445,137446,137448,137450,137452,137454,137456],{"class":43,"line":70},[41,137447,227],{"class":51403},[41,137449,129569],{"class":54},[41,137451,276],{"class":275},[41,137453,351],{"class":58},[41,137455,137337],{"class":275},[41,137457,137340],{"class":47},[41,137459,137460,137462,137464,137466,137468,137470],{"class":43,"line":76},[41,137461,227],{"class":51403},[41,137463,129569],{"class":54},[41,137465,276],{"class":275},[41,137467,137351],{"class":58},[41,137469,137354],{"class":275},[41,137471,137357],{"class":47},[41,137473,137474,137476,137478,137480,137482,137484],{"class":43,"line":83},[41,137475,227],{"class":51403},[41,137477,129569],{"class":54},[41,137479,276],{"class":275},[41,137481,137368],{"class":58},[41,137483,137371],{"class":275},[41,137485,137374],{"class":47},[41,137487,137488,137490,137492,137494,137496,137498],{"class":43,"line":89},[41,137489,227],{"class":51403},[41,137491,129569],{"class":54},[41,137493,276],{"class":275},[41,137495,137385],{"class":58},[41,137497,137371],{"class":275},[41,137499,137390],{"class":47},[20,137501,137502],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22136,137504,137506],{"id":137505},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[20,137508,137509],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1603,137511],{"style":126511,"src":137512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[224,137514,137515],{},[227,137516,305],{},[1280,137518,137519,137522,137525,137528,137531,137534],{},[227,137520,137521],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[227,137523,137524],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[227,137526,137527],{},"语法： element::before {}",[227,137529,137530],{},"before 和 after 必须有 content 属性",[227,137532,137533],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[227,137535,137536],{},"伪元素选择器和标签选择器一样，权重为 1",[224,137538,137539],{"start":51},[227,137540,137541],{},"实例",[32,137543,137544],{"className":126655,"code":137417,"language":126657,"meta":37,"style":37},[24,137545,137546,137550,137560,137570,137584,137598,137612],{"__ignoreMap":37},[41,137547,137548],{"class":43,"line":44},[41,137549,137298],{"class":47},[41,137551,137552,137554,137556,137558],{"class":43,"line":51},[41,137553,227],{"class":51403},[41,137555,137305],{"class":54},[41,137557,137308],{"class":275},[41,137559,137311],{"class":47},[41,137561,137562,137564,137566,137568],{"class":43,"line":62},[41,137563,227],{"class":51403},[41,137565,137318],{"class":54},[41,137567,137321],{"class":275},[41,137569,137324],{"class":47},[41,137571,137572,137574,137576,137578,137580,137582],{"class":43,"line":70},[41,137573,227],{"class":51403},[41,137575,129569],{"class":54},[41,137577,276],{"class":275},[41,137579,351],{"class":58},[41,137581,137337],{"class":275},[41,137583,137340],{"class":47},[41,137585,137586,137588,137590,137592,137594,137596],{"class":43,"line":76},[41,137587,227],{"class":51403},[41,137589,129569],{"class":54},[41,137591,276],{"class":275},[41,137593,137351],{"class":58},[41,137595,137354],{"class":275},[41,137597,137357],{"class":47},[41,137599,137600,137602,137604,137606,137608,137610],{"class":43,"line":83},[41,137601,227],{"class":51403},[41,137603,129569],{"class":54},[41,137605,276],{"class":275},[41,137607,137368],{"class":58},[41,137609,137371],{"class":275},[41,137611,137374],{"class":47},[41,137613,137614,137616,137618,137620,137622,137624],{"class":43,"line":89},[41,137615,227],{"class":51403},[41,137617,129569],{"class":54},[41,137619,276],{"class":275},[41,137621,137385],{"class":58},[41,137623,137371],{"class":275},[41,137625,137390],{"class":47},[1603,137627],{"style":126511,"src":137628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[224,137630,137631],{"start":62},[227,137632,137633],{},"使用场景1",[1603,137635],{"style":126511,"src":137636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[20,137638,137639],{},"不需要再加盒子来整红色那部分了",[32,137641,137643],{"className":126655,"code":137642,"language":126657,"meta":37,"style":37},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[24,137644,137645,137650,137659,137670,137680,137684,137693,137704,137714],{"__ignoreMap":37},[41,137646,137647],{"class":43,"line":44},[41,137648,137649],{"class":47},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[41,137651,137652,137654,137657],{"class":43,"line":51},[41,137653,51714],{"class":51403},[41,137655,137656],{"class":54},"::before",[41,137658,15710],{"class":275},[41,137660,137661,137664,137666,137668],{"class":43,"line":62},[41,137662,137663],{"class":58},"  content",[41,137665,51540],{"class":275},[41,137667,7790],{"class":378},[41,137669,1434],{"class":275},[41,137671,137672,137674,137676,137678],{"class":43,"line":70},[41,137673,128271],{"class":58},[41,137675,51540],{"class":275},[41,137677,60972],{"class":58},[41,137679,1434],{"class":275},[41,137681,137682],{"class":43,"line":76},[41,137683,1706],{"class":275},[41,137685,137686,137688,137691],{"class":43,"line":83},[41,137687,51714],{"class":51403},[41,137689,137690],{"class":54},"::after",[41,137692,15710],{"class":275},[41,137694,137695,137697,137699,137702],{"class":43,"line":89},[41,137696,137663],{"class":58},[41,137698,51540],{"class":275},[41,137700,137701],{"class":378},"\"→\"",[41,137703,1434],{"class":275},[41,137705,137706,137708,137710,137712],{"class":43,"line":96},[41,137707,71008],{"class":58},[41,137709,51540],{"class":275},[41,137711,62173],{"class":58},[41,137713,1434],{"class":275},[41,137715,137716],{"class":43,"line":104},[41,137717,1706],{"class":275},[1603,137719],{"style":126511,"src":137720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[20,137722,137723],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1603,137725],{"style":126511,"src":137726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[20,137728,137729],{},"但是在引用时需要先转义一下",[20,137731,137732],{},"content='\\e930'",[224,137734,137735],{"start":70},[227,137736,137737],{},"使用场景2",[20,137739,137740],{},"仿土豆效果",[20,137742,137743],{},"通过使用伪元素选择器可以减少body中盒子的数量",[32,137745,137746],{"className":126655,"code":137642,"language":126657,"meta":37,"style":37},[24,137747,137748,137752,137760,137770,137780,137784,137792,137802,137812],{"__ignoreMap":37},[41,137749,137750],{"class":43,"line":44},[41,137751,137649],{"class":47},[41,137753,137754,137756,137758],{"class":43,"line":51},[41,137755,51714],{"class":51403},[41,137757,137656],{"class":54},[41,137759,15710],{"class":275},[41,137761,137762,137764,137766,137768],{"class":43,"line":62},[41,137763,137663],{"class":58},[41,137765,51540],{"class":275},[41,137767,7790],{"class":378},[41,137769,1434],{"class":275},[41,137771,137772,137774,137776,137778],{"class":43,"line":70},[41,137773,128271],{"class":58},[41,137775,51540],{"class":275},[41,137777,60972],{"class":58},[41,137779,1434],{"class":275},[41,137781,137782],{"class":43,"line":76},[41,137783,1706],{"class":275},[41,137785,137786,137788,137790],{"class":43,"line":83},[41,137787,51714],{"class":51403},[41,137789,137690],{"class":54},[41,137791,15710],{"class":275},[41,137793,137794,137796,137798,137800],{"class":43,"line":89},[41,137795,137663],{"class":58},[41,137797,51540],{"class":275},[41,137799,137701],{"class":378},[41,137801,1434],{"class":275},[41,137803,137804,137806,137808,137810],{"class":43,"line":96},[41,137805,71008],{"class":58},[41,137807,51540],{"class":275},[41,137809,62173],{"class":58},[41,137811,1434],{"class":275},[41,137813,137814],{"class":43,"line":104},[41,137815,1706],{"class":275},[1603,137817],{"style":126511,"src":137818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[224,137820,137821],{"start":76},[227,137822,137823],{},"使用场景3",[20,137825,137826],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[32,137828,137830],{"className":126655,"code":137829,"language":126657,"meta":37,"style":37},".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",[24,137831,137832,137838,137848,137852,137856,137860,137868,137878,137888,137892,137900,137910,137920],{"__ignoreMap":37},[41,137833,137834,137836],{"class":43,"line":44},[41,137835,130503],{"class":54},[41,137837,15710],{"class":275},[41,137839,137840,137842,137844,137846],{"class":43,"line":51},[41,137841,131135],{"class":58},[41,137843,51540],{"class":275},[41,137845,23874],{"class":58},[41,137847,1434],{"class":275},[41,137849,137850],{"class":43,"line":62},[41,137851,1706],{"class":275},[41,137853,137854],{"class":43,"line":70},[41,137855,136116],{"class":275},[41,137857,137858],{"class":43,"line":76},[41,137859,137649],{"class":47},[41,137861,137862,137864,137866],{"class":43,"line":83},[41,137863,51714],{"class":51403},[41,137865,137656],{"class":54},[41,137867,15710],{"class":275},[41,137869,137870,137872,137874,137876],{"class":43,"line":89},[41,137871,137663],{"class":58},[41,137873,51540],{"class":275},[41,137875,7790],{"class":378},[41,137877,1434],{"class":275},[41,137879,137880,137882,137884,137886],{"class":43,"line":96},[41,137881,128271],{"class":58},[41,137883,51540],{"class":275},[41,137885,60972],{"class":58},[41,137887,1434],{"class":275},[41,137889,137890],{"class":43,"line":104},[41,137891,1706],{"class":275},[41,137893,137894,137896,137898],{"class":43,"line":176},[41,137895,51714],{"class":51403},[41,137897,137690],{"class":54},[41,137899,15710],{"class":275},[41,137901,137902,137904,137906,137908],{"class":43,"line":184},[41,137903,137663],{"class":58},[41,137905,51540],{"class":275},[41,137907,137701],{"class":378},[41,137909,1434],{"class":275},[41,137911,137912,137914,137916,137918],{"class":43,"line":1757},[41,137913,71008],{"class":58},[41,137915,51540],{"class":275},[41,137917,62173],{"class":58},[41,137919,1434],{"class":275},[41,137921,137922],{"class":43,"line":1763},[41,137923,1706],{"class":275},[20,137925,137926],{},"div {\nmargin: 0 auto;\n}",[32,137928,137931],{"className":137929,"code":137930,"language":5325},[5323],"\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",[24,137932,137930],{"__ignoreMap":37},[20,137934,137935],{},"如果想让多个元素都发生变化",[20,137937,137938],{},"不能如下操作：",[20,137940,137941],{},"transition: width 2s ease 0.5s;",[20,137943,137944],{},"transition: height 2s ease 0.5s;不对！！！",[20,137946,137947],{},"上方会样式冲突，导致不显示任何过渡效果",[20,137949,137950],{},"使用如下：加逗号隔开",[20,137952,137953],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[20,137955,137956],{},"transition all 2s ease;",[241,137958,137960],{"id":137959},"_1426-过渡练习","14.2.6 过渡练习",[224,137962,137963],{},[227,137964,137965],{},"进度条",[1603,137967],{"style":126511,"src":137968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[32,137970,137972],{"className":126655,"code":137971,"language":126657,"meta":37,"style":37},"div {\n  transition: all 0.3s ease;\n}\n",[24,137973,137974,137980,137998],{"__ignoreMap":37},[41,137975,137976,137978],{"class":43,"line":44},[41,137977,51714],{"class":51403},[41,137979,15710],{"class":275},[41,137981,137982,137985,137987,137989,137992,137994,137996],{"class":43,"line":51},[41,137983,137984],{"class":58},"  transition",[41,137986,51540],{"class":275},[41,137988,28224],{"class":58},[41,137990,137991],{"class":58}," 0.3",[41,137993,968],{"class":271},[41,137995,78783],{"class":58},[41,137997,1434],{"class":275},[41,137999,138000],{"class":43,"line":62},[41,138001,1706],{"class":275},[224,138003,138004],{"start":51},[227,138005,138006],{},"小米logo",[20,138008,138009],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[32,138011,138013],{"className":126655,"code":138012,"language":126657,"meta":37,"style":37},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[24,138014,138015,138020,138026,138042,138047],{"__ignoreMap":37},[41,138016,138017],{"class":43,"line":44},[41,138018,138019],{"class":47},"\u002F* CSS3 过渡 *\u002F\n",[41,138021,138022,138024],{"class":43,"line":51},[41,138023,51714],{"class":51403},[41,138025,15710],{"class":275},[41,138027,138028,138030,138032,138034,138036,138038,138040],{"class":43,"line":62},[41,138029,137984],{"class":58},[41,138031,51540],{"class":275},[41,138033,28224],{"class":58},[41,138035,137991],{"class":58},[41,138037,968],{"class":271},[41,138039,78783],{"class":58},[41,138041,1434],{"class":275},[41,138043,138044],{"class":43,"line":70},[41,138045,138046],{"class":47},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[41,138048,138049],{"class":43,"line":76},[41,138050,1706],{"class":275},[20,138052,138053],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[189,138055,138056],{},"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":37,"searchDepth":51,"depth":51,"links":138058},[138059,138064],{"id":136389,"depth":51,"text":136390,"children":138060},[138061,138062,138063],{"id":136393,"depth":62,"text":136394},{"id":136470,"depth":62,"text":136471},{"id":136801,"depth":62,"text":136802},{"id":137092,"depth":51,"text":137093,"children":138065},[138066,138067],{"id":137096,"depth":62,"text":137097},{"id":137959,"depth":62,"text":137960},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136381,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138074,"title":138075,"body":138076,"description":196,"extension":197,"meta":139820,"navigation":79,"path":139821,"seo":139822,"stem":139823,"__hash__":139824},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138077,"toc":139801},[138078,138081,138085,138088,138094,138100,138104,138106,138109,138112,138115,138118,138121,138124,138127,138131,138135,138138,138141,138144,138148,138151,138154,138159,138162,138165,138168,138172,138175,138184,138187,138190,138194,138197,138200,138205,138212,138226,138234,138241,138246,138249,138252,138255,138262,138266,138272,138278,138281,138284,138289,138295,138297,138305,138310,138313,138319,138321,138326,138331,138334,138336,138341,138344,138349,138354,138388,138392,138396,138399,138403,138406,138492,138495,138532,138535,138571,138575,138580,138593,138647,138649,138677,138679,138707,138713,138727,138729,138773,138775,138819,138822,138829,138840,138842,138869,138871,138897,138904,138920,138922,139016,139018,139112,139119,139122,139127,139133,139207,139210,139212,139248,139250,139286,139289,139296,139315,139318,139321,139323,139348,139350,139374,139377,139380,139410,139414,139417,139480,139482,139548,139550,139614,139617,139649,139651,139677,139679,139705,139708,139739,139741,139767,139769,139795,139798],[10,138079,138075],{"id":138080},"_15-品优购项目上篇-搭建与公共模块",[15,138082,138084],{"id":138083},"_151-项目规划","15.1 项目规划",[1603,138086],{"style":126511,"src":138087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[20,138089,138090,138093],{},[423,138091,138092],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[20,138095,138096,138099],{},[423,138097,138098],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[15,138101,138103],{"id":138102},"_152-项目介绍","15.2 项目介绍",[20,138105,138092],{},[1603,138107],{"style":126511,"src":138108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[20,138110,138111],{},"主页：",[1603,138113],{"style":126511,"src":138114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[20,138116,138117],{},"列表页：",[1603,138119],{"style":126511,"src":138120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[20,138122,138123],{},"注册页：",[1603,138125],{"style":126511,"src":138126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[15,138128,138130],{"id":138129},"_153-项目搭建工作","15.3 项目搭建工作",[241,138132,138134],{"id":138133},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1603,138136],{"style":126511,"src":138137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[20,138139,138140],{},"经常更换的图片要放到upload文件夹中",[20,138142,138143],{},"不经常换的放到images文件夹中",[241,138145,138147],{"id":138146},"_1532-创建文件如下","15.3.2 创建文件如下",[1603,138149],{"style":126511,"src":138150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1603,138152],{"style":126511,"src":138153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[20,138155,138156],{},[423,138157,138158],{},"初始化样式：",[20,138160,138161],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[20,138163,138164],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[20,138166,138167],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[241,138169,138171],{"id":138170},"_1533-项目模块化开发","15.3.3 项目模块化开发",[20,138173,138174],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[20,138176,138177,138178,138183],{},"这里最典型的应用就是 ",[423,138179,138180],{},[24,138181,138182],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1603,138185],{"style":126511,"src":138186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[20,138188,138189],{},"通过link方法来引入",[241,138191,138193],{"id":138192},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1603,138195],{"style":126511,"src":138196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[20,138198,138199],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[224,138201,138202],{},[227,138203,138204],{},"制作favicon图标",[20,138206,138207,138208,138211],{},"①把品优购图标切成 ",[24,138209,138210],{},"png"," 图片",[20,138213,138214,138215,138217,138218,138221,138222],{},"②把 ",[24,138216,138210],{}," 图片转换为 ",[24,138219,138220],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[511,138223,138224],{"href":138224,"rel":138225},"http:\u002F\u002Fwww.bitbug.net\u002F",[24001],[224,138227,138228,138231],{"start":51},[227,138229,138230],{},"favicon图标放到网站根目录下",[227,138232,138233],{},"HTML页面引入favicon",[20,138235,138236,138237,138240],{},"在html 页面里面的 ",[24,138238,138239],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[20,138242,138243],{},[24,138244,138245],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[20,138247,138248],{},"复制这行代码或者在生成这个的网站进行复制",[1603,138250],{"style":126511,"src":138251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[20,138253,138254],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[20,138256,138257,138258],{},"例如:",[511,138259,138260],{"href":138260,"rel":138261},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24001],[241,138263,138265],{"id":138264},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[20,138267,138268,138271],{},[423,138269,138270],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[20,138273,138274,138277],{},[423,138275,138276],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[20,138279,138280],{},"页面必须有三个标签用来符合 SEO 优化",[1603,138282],{"style":126511,"src":138283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[224,138285,138286],{},[227,138287,138288],{},"title网站标题",[20,138290,138291,138294],{},[423,138292,138293],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[20,138296,68893],{},[1280,138298,138299,138302],{},[227,138300,138301],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[227,138303,138304],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[224,138306,138307],{"start":51},[227,138308,138309],{},"description网站描述",[20,138311,138312],{},"简要说明我们网站主要是做什么的",[20,138314,138315,138318],{},[423,138316,138317],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[20,138320,68893],{},[20,138322,138323],{},[24,138324,138325],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[224,138327,138328],{"start":62},[227,138329,138330],{},"keywords关键词",[20,138332,138333],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[20,138335,68893],{},[20,138337,138338],{},[24,138339,138340],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[20,138342,138343],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[20,138345,138346],{},[423,138347,138348],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[224,138350,138351],{"start":70},[227,138352,138353],{},"代码总结",[32,138355,138356],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,138357,138358,138362,138376,138380],{"__ignoreMap":37},[41,138359,138360],{"class":43,"line":44},[41,138361,130766],{"class":47},[41,138363,138364,138366,138368,138370,138372,138374],{"class":43,"line":51},[41,138365,1183],{"class":275},[41,138367,51714],{"class":51403},[41,138369,53589],{"class":54},[41,138371,321],{"class":275},[41,138373,130779],{"class":378},[41,138375,51410],{"class":275},[41,138377,138378],{"class":43,"line":62},[41,138379,130786],{"class":275},[41,138381,138382,138384,138386],{"class":43,"line":70},[41,138383,51888],{"class":275},[41,138385,51714],{"class":51403},[41,138387,51410],{"class":275},[15,138389,138391],{"id":138390},"_154-项目公共部分制作","15.4 项目公共部分制作",[241,138393,138395],{"id":138394},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1603,138397],{"style":126511,"src":138398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[241,138400,138402],{"id":138401},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[20,138404,138405],{},"布局思路：",[1280,138407,138408,138411,138414,138436,138469],{},[227,138409,138410],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[227,138412,138413],{},"里面包含版心的盒子",[227,138415,138416,138417],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1280,138418,138419,138427,138433],{},[227,138420,138421,138422,21638,138424,138426],{},"1 号盒子 里面包含一个",[24,138423,1280],{},[24,138425,1280],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[227,138428,138429,138430,138432],{},"里面的内容是水平排列，所以需要给",[24,138431,227],{},"设置浮动",[227,138434,138435],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[227,138437,138438,138439],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1280,138440,138441,138455,138460],{},[227,138442,138443,138444,21638,138446,138448,138449,138451,138452,138454],{},"2 号盒子 里面包含一个",[24,138445,1280],{},[24,138447,1280],{},"包裹",[24,138450,227],{},"，中间的",[24,138453,1194],{},"可以用样式去设置，也可以用字符 |",[227,138456,138457,138458,138432],{},"里面内容水平排列，给",[24,138459,227],{},[227,138461,138462,138463,138465,138466,138468],{},"找到里面所有偶数的 ",[24,138464,227],{}," 设置样式（偶数的 ",[24,138467,227],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[227,138470,138471,138472],{},"需要用到字体图标",[1280,138473,138474,138480,138483,138486,138489],{},[227,138475,138476,138477],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[24,138478,138479],{},"arrow-icon",[227,138481,138482],{},"先要引入字体图片的资源",[227,138484,138485],{},"在样式里面利用 font-face 来进行声明",[227,138487,138488],{},"在伪元素的 content属性设置 图标的编码",[227,138490,138491],{},"给伪元素设置font-family属性",[20,138493,138494],{},"结构实例代码：",[32,138496,138498],{"className":126655,"code":138497,"language":126657,"meta":37,"style":37},"div::before {\n  content: \"\";\n  display: block;\n}\n",[24,138499,138500,138508,138518,138528],{"__ignoreMap":37},[41,138501,138502,138504,138506],{"class":43,"line":44},[41,138503,51714],{"class":51403},[41,138505,137656],{"class":54},[41,138507,15710],{"class":275},[41,138509,138510,138512,138514,138516],{"class":43,"line":51},[41,138511,137663],{"class":58},[41,138513,51540],{"class":275},[41,138515,7790],{"class":378},[41,138517,1434],{"class":275},[41,138519,138520,138522,138524,138526],{"class":43,"line":62},[41,138521,128271],{"class":58},[41,138523,51540],{"class":275},[41,138525,60972],{"class":58},[41,138527,1434],{"class":275},[41,138529,138530],{"class":43,"line":70},[41,138531,1706],{"class":275},[20,138533,138534],{},"样式实例代码：",[32,138536,138537],{"className":126655,"code":138497,"language":126657,"meta":37,"style":37},[24,138538,138539,138547,138557,138567],{"__ignoreMap":37},[41,138540,138541,138543,138545],{"class":43,"line":44},[41,138542,51714],{"class":51403},[41,138544,137656],{"class":54},[41,138546,15710],{"class":275},[41,138548,138549,138551,138553,138555],{"class":43,"line":51},[41,138550,137663],{"class":58},[41,138552,51540],{"class":275},[41,138554,7790],{"class":378},[41,138556,1434],{"class":275},[41,138558,138559,138561,138563,138565],{"class":43,"line":62},[41,138560,128271],{"class":58},[41,138562,51540],{"class":275},[41,138564,60972],{"class":58},[41,138566,1434],{"class":275},[41,138568,138569],{"class":43,"line":70},[41,138570,1706],{"class":275},[241,138572,138574],{"id":138573},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1280,138576,138577],{},[227,138578,138579],{},"header 盒子必须要有高度",[20,138581,138582,138583,138585,138586],{},"1 号盒子是 ",[24,138584,131667],{}," 标志定位，在正常开发过程中， ",[423,138587,138588,138589,138592],{},"logo的布局其实是有讲究的，需要进行 ",[24,138590,138591],{},"logoSEO","的优化 （★★★）",[1280,138594,138595,138603,138611,138638],{},[227,138596,138597,138599,138600,138602],{},[24,138598,131667],{}," 里面首先放一个 ",[24,138601,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[227,138604,138605,138607,138608,138610],{},[24,138606,10],{}," 里面再放一个链接，可以返回首页的，把 ",[24,138609,131667],{}," 的背景图片给链接即可",[227,138612,138613,138614],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1280,138615,138616,138631],{},[227,138617,138618,138619,138622,138623,138626,138627,138630],{},"方法1：",[24,138620,138621],{},"text-indent"," 移到盒子外面（",[24,138624,138625],{},"text-indent: -9999px",") ，然后 ",[24,138628,138629],{},"overflow:hidden"," ，淘宝的做法",[227,138632,138633,138634,138637],{},"方法2：直接给 ",[24,138635,138636],{},"font-size: 0;"," 就看不到文字了，京东的做法",[227,138639,138640,138641,138643,138644,138646],{},"最后给链接一个 ",[24,138642,51510],{}," 属性，这样鼠标放到 ",[24,138645,131667],{}," 上就可以看到提示文字了",[20,138648,138494],{},[32,138650,138651],{"className":127402,"code":131888,"language":127404,"meta":37,"style":37},[24,138652,138653],{"__ignoreMap":37},[41,138654,138655,138657,138659,138661,138663,138665,138667,138669,138671,138673,138675],{"class":43,"line":44},[41,138656,1183],{"class":275},[41,138658,511],{"class":51403},[41,138660,61160],{"class":54},[41,138662,321],{"class":275},[41,138664,131903],{"class":378},[41,138666,131906],{"class":54},[41,138668,321],{"class":275},[41,138670,131911],{"class":378},[41,138672,131914],{"class":275},[41,138674,511],{"class":51403},[41,138676,51410],{"class":275},[20,138678,138534],{},[32,138680,138681],{"className":127402,"code":131888,"language":127404,"meta":37,"style":37},[24,138682,138683],{"__ignoreMap":37},[41,138684,138685,138687,138689,138691,138693,138695,138697,138699,138701,138703,138705],{"class":43,"line":44},[41,138686,1183],{"class":275},[41,138688,511],{"class":51403},[41,138690,61160],{"class":54},[41,138692,321],{"class":275},[41,138694,131903],{"class":378},[41,138696,131906],{"class":54},[41,138698,321],{"class":275},[41,138700,131911],{"class":378},[41,138702,131914],{"class":275},[41,138704,511],{"class":51403},[41,138706,51410],{"class":275},[20,138708,138709,138710,138712],{},"2 号盒子是 ",[24,138711,131680],{}," 搜索模块定位",[1280,138714,138715,138718,138721,138724],{},[227,138716,138717],{},"search盒子利用定位的方式放在对应的位置",[227,138719,138720],{},"search盒子设置绝对定位，header盒子设置相对定位",[227,138722,138723],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[227,138725,138726],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[20,138728,138494],{},[32,138730,138731],{"className":126655,"code":131975,"language":126657,"meta":37,"style":37},[24,138732,138733,138755,138759,138769],{"__ignoreMap":37},[41,138734,138735,138737,138739,138741,138743,138745,138747,138749,138751,138753],{"class":43,"line":44},[41,138736,51714],{"class":51403},[41,138738,12573],{"class":275},[41,138740,20],{"class":51403},[41,138742,12573],{"class":275},[41,138744,10],{"class":51403},[41,138746,12573],{"class":275},[41,138748,1280],{"class":51403},[41,138750,12573],{"class":275},[41,138752,227],{"class":51403},[41,138754,15710],{"class":275},[41,138756,138757],{"class":43,"line":51},[41,138758,132004],{"class":47},[41,138760,138761,138763,138765,138767],{"class":43,"line":62},[41,138762,128271],{"class":58},[41,138764,51540],{"class":275},[41,138766,60972],{"class":58},[41,138768,1434],{"class":275},[41,138770,138771],{"class":43,"line":70},[41,138772,1706],{"class":275},[20,138774,138534],{},[32,138776,138777],{"className":126655,"code":131975,"language":126657,"meta":37,"style":37},[24,138778,138779,138801,138805,138815],{"__ignoreMap":37},[41,138780,138781,138783,138785,138787,138789,138791,138793,138795,138797,138799],{"class":43,"line":44},[41,138782,51714],{"class":51403},[41,138784,12573],{"class":275},[41,138786,20],{"class":51403},[41,138788,12573],{"class":275},[41,138790,10],{"class":51403},[41,138792,12573],{"class":275},[41,138794,1280],{"class":51403},[41,138796,12573],{"class":275},[41,138798,227],{"class":51403},[41,138800,15710],{"class":275},[41,138802,138803],{"class":43,"line":51},[41,138804,132004],{"class":47},[41,138806,138807,138809,138811,138813],{"class":43,"line":62},[41,138808,128271],{"class":58},[41,138810,51540],{"class":275},[41,138812,60972],{"class":58},[41,138814,1434],{"class":275},[41,138816,138817],{"class":43,"line":70},[41,138818,1706],{"class":275},[20,138820,138821],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[20,138823,138824,138825,138828],{},"3 号盒子是 ",[24,138826,138827],{},"hotwords"," 热词模块定位",[1280,138830,138831,138834,138837],{},[227,138832,138833],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[227,138835,138836],{},"给里面所有的a标签设置 左右10px的外边距",[227,138838,138839],{},"给第一个a标签设置文字变红色（#c81623）",[20,138841,138494],{},[32,138843,138845],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},"div {\n  margin: 0 auto;\n}\n",[24,138846,138847,138853,138865],{"__ignoreMap":37},[41,138848,138849,138851],{"class":43,"line":44},[41,138850,51714],{"class":51403},[41,138852,15710],{"class":275},[41,138854,138855,138857,138859,138861,138863],{"class":43,"line":51},[41,138856,70573],{"class":58},[41,138858,51540],{"class":275},[41,138860,465],{"class":58},[41,138862,51659],{"class":58},[41,138864,1434],{"class":275},[41,138866,138867],{"class":43,"line":62},[41,138868,1706],{"class":275},[20,138870,138534],{},[32,138872,138873],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},[24,138874,138875,138881,138893],{"__ignoreMap":37},[41,138876,138877,138879],{"class":43,"line":44},[41,138878,51714],{"class":51403},[41,138880,15710],{"class":275},[41,138882,138883,138885,138887,138889,138891],{"class":43,"line":51},[41,138884,70573],{"class":58},[41,138886,51540],{"class":275},[41,138888,465],{"class":58},[41,138890,51659],{"class":58},[41,138892,1434],{"class":275},[41,138894,138895],{"class":43,"line":62},[41,138896,1706],{"class":275},[20,138898,138899,138900,138903],{},"4 号盒子是 ",[24,138901,138902],{},"shopcar"," 购物车模块",[1280,138905,138906,138911,138914,138917],{},[227,138907,123438,138908,138910],{},[24,138909,138902],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[227,138912,138913],{},"count 统计部分用绝对定位做",[227,138915,138916],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[227,138918,138919],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[20,138921,138494],{},[32,138923,138924],{"className":126655,"code":132087,"language":126657,"meta":37,"style":37},[24,138925,138926,138930,138944,138948,138962,138966,138980,138984,138998,139002],{"__ignoreMap":37},[41,138927,138928],{"class":43,"line":44},[41,138929,132094],{"class":47},[41,138931,138932,138934,138936,138938,138940,138942],{"class":43,"line":51},[41,138933,132099],{"class":54},[41,138935,79910],{"class":275},[41,138937,129015],{"class":58},[41,138939,51540],{"class":275},[41,138941,132108],{"class":58},[41,138943,129585],{"class":275},[41,138945,138946],{"class":43,"line":62},[41,138947,132115],{"class":47},[41,138949,138950,138952,138954,138956,138958,138960],{"class":43,"line":70},[41,138951,132120],{"class":54},[41,138953,79910],{"class":275},[41,138955,129015],{"class":58},[41,138957,51540],{"class":275},[41,138959,54867],{"class":58},[41,138961,129585],{"class":275},[41,138963,138964],{"class":43,"line":76},[41,138965,132135],{"class":47},[41,138967,138968,138970,138972,138974,138976,138978],{"class":43,"line":83},[41,138969,132140],{"class":54},[41,138971,79910],{"class":275},[41,138973,129015],{"class":58},[41,138975,51540],{"class":275},[41,138977,54934],{"class":58},[41,138979,129585],{"class":275},[41,138981,138982],{"class":43,"line":89},[41,138983,132155],{"class":47},[41,138985,138986,138988,138990,138992,138994,138996],{"class":43,"line":96},[41,138987,132160],{"class":54},[41,138989,79910],{"class":275},[41,138991,129015],{"class":58},[41,138993,51540],{"class":275},[41,138995,86336],{"class":58},[41,138997,129585],{"class":275},[41,138999,139000],{"class":43,"line":104},[41,139001,132175],{"class":47},[41,139003,139004,139006,139008,139010,139012,139014],{"class":43,"line":176},[41,139005,132180],{"class":54},[41,139007,79910],{"class":275},[41,139009,129015],{"class":58},[41,139011,51540],{"class":275},[41,139013,132189],{"class":58},[41,139015,129585],{"class":275},[20,139017,138534],{},[32,139019,139020],{"className":126655,"code":132087,"language":126657,"meta":37,"style":37},[24,139021,139022,139026,139040,139044,139058,139062,139076,139080,139094,139098],{"__ignoreMap":37},[41,139023,139024],{"class":43,"line":44},[41,139025,132094],{"class":47},[41,139027,139028,139030,139032,139034,139036,139038],{"class":43,"line":51},[41,139029,132099],{"class":54},[41,139031,79910],{"class":275},[41,139033,129015],{"class":58},[41,139035,51540],{"class":275},[41,139037,132108],{"class":58},[41,139039,129585],{"class":275},[41,139041,139042],{"class":43,"line":62},[41,139043,132115],{"class":47},[41,139045,139046,139048,139050,139052,139054,139056],{"class":43,"line":70},[41,139047,132120],{"class":54},[41,139049,79910],{"class":275},[41,139051,129015],{"class":58},[41,139053,51540],{"class":275},[41,139055,54867],{"class":58},[41,139057,129585],{"class":275},[41,139059,139060],{"class":43,"line":76},[41,139061,132135],{"class":47},[41,139063,139064,139066,139068,139070,139072,139074],{"class":43,"line":83},[41,139065,132140],{"class":54},[41,139067,79910],{"class":275},[41,139069,129015],{"class":58},[41,139071,51540],{"class":275},[41,139073,54934],{"class":58},[41,139075,129585],{"class":275},[41,139077,139078],{"class":43,"line":89},[41,139079,132155],{"class":47},[41,139081,139082,139084,139086,139088,139090,139092],{"class":43,"line":96},[41,139083,132160],{"class":54},[41,139085,79910],{"class":275},[41,139087,129015],{"class":58},[41,139089,51540],{"class":275},[41,139091,86336],{"class":58},[41,139093,129585],{"class":275},[41,139095,139096],{"class":43,"line":104},[41,139097,132175],{"class":47},[41,139099,139100,139102,139104,139106,139108,139110],{"class":43,"line":176},[41,139101,132180],{"class":54},[41,139103,79910],{"class":275},[41,139105,129015],{"class":58},[41,139107,51540],{"class":275},[41,139109,132189],{"class":58},[41,139111,129585],{"class":275},[241,139113,139115,139116,139118],{"id":139114},"_1544-nav导航模块制作","15.4.4 ",[24,139117,53816],{},"导航模块制作",[1603,139120],{"style":126511,"src":139121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[20,139123,139124,139126],{},[24,139125,53816],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[20,139128,139129,139130],{},"1 号盒子左侧浮动，",[24,139131,139132],{},"dropdown",[1280,139134,139135,139145,139153,139159,139167,139177,139185,139196],{},[227,139136,139137,139138,101121,139141,139144],{},"1号盒子有讲究，根据相关性 里面包含 ",[24,139139,139140],{},".dt",[24,139142,139143],{},".dd"," 两个盒子",[227,139146,139147,139149,139150,139152],{},[24,139148,139140],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[24,139151,139143],{}," 挤到下面去了",[227,139154,139155,139156,139158],{},"给 ",[24,139157,139143],{}," 盒子设置宽度 和 高度，以及背景颜色",[227,139160,139155,139161,139163,139164,120340],{},[24,139162,139143],{}," 盒子里面定义 无序列表 （",[24,139165,139166],{},"ul > li > a",[227,139168,139169,139170,139172,139173,139176],{},"每个 ",[24,139171,227],{}," 都有一个高度（",[24,139174,139175],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[227,139178,139155,139179,139181,139182,120340],{},[24,139180,227],{}," 里面的a设置文字大小（",[24,139183,139184],{},"14px",[227,139186,139155,139187,139189,139190,139192,139193,139195],{},[24,139188,227],{}," 设置 ",[24,139191,127816],{},"，当鼠标移入的时候，让",[24,139194,227],{},"的背景变成白色，让里面的文字变成红色",[227,139197,139198,139200,139201,139203,139204,139206],{},[24,139199,227],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[24,139202,227],{},"的右侧，那么给",[24,139205,227],{},"设置相对定位",[20,139208,139209],{},"一定要注意相关性",[20,139211,138494],{},[32,139213,139214],{"className":126655,"code":138497,"language":126657,"meta":37,"style":37},[24,139215,139216,139224,139234,139244],{"__ignoreMap":37},[41,139217,139218,139220,139222],{"class":43,"line":44},[41,139219,51714],{"class":51403},[41,139221,137656],{"class":54},[41,139223,15710],{"class":275},[41,139225,139226,139228,139230,139232],{"class":43,"line":51},[41,139227,137663],{"class":58},[41,139229,51540],{"class":275},[41,139231,7790],{"class":378},[41,139233,1434],{"class":275},[41,139235,139236,139238,139240,139242],{"class":43,"line":62},[41,139237,128271],{"class":58},[41,139239,51540],{"class":275},[41,139241,60972],{"class":58},[41,139243,1434],{"class":275},[41,139245,139246],{"class":43,"line":70},[41,139247,1706],{"class":275},[20,139249,138534],{},[32,139251,139252],{"className":126655,"code":138497,"language":126657,"meta":37,"style":37},[24,139253,139254,139262,139272,139282],{"__ignoreMap":37},[41,139255,139256,139258,139260],{"class":43,"line":44},[41,139257,51714],{"class":51403},[41,139259,137656],{"class":54},[41,139261,15710],{"class":275},[41,139263,139264,139266,139268,139270],{"class":43,"line":51},[41,139265,137663],{"class":58},[41,139267,51540],{"class":275},[41,139269,7790],{"class":378},[41,139271,1434],{"class":275},[41,139273,139274,139276,139278,139280],{"class":43,"line":62},[41,139275,128271],{"class":58},[41,139277,51540],{"class":275},[41,139279,60972],{"class":58},[41,139281,1434],{"class":275},[41,139283,139284],{"class":43,"line":70},[41,139285,1706],{"class":275},[20,139287,139288],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[20,139290,139291,139292,139295],{},"2 号盒子左侧浮动，",[24,139293,139294],{},"navitems"," 导航栏组",[1280,139297,139298,139303,139312],{},[227,139299,139300,139301],{},"里面结构是 ",[24,139302,139166],{},[227,139304,139305,139306,139308,139309,139311],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[24,139307,511],{},"左右的",[24,139310,30986],{},"把两侧撑开",[227,139313,139314],{},"让文字垂直居中（行高等于高度）",[1603,139316],{"style":126511,"src":139317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[20,139319,139320],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[20,139322,138494],{},[32,139324,139326],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},".box {\n  float: left;\n}\n",[24,139327,139328,139334,139344],{"__ignoreMap":37},[41,139329,139330,139332],{"class":43,"line":44},[41,139331,130503],{"class":54},[41,139333,15710],{"class":275},[41,139335,139336,139338,139340,139342],{"class":43,"line":51},[41,139337,131135],{"class":58},[41,139339,51540],{"class":275},[41,139341,23874],{"class":58},[41,139343,1434],{"class":275},[41,139345,139346],{"class":43,"line":62},[41,139347,1706],{"class":275},[20,139349,138534],{},[32,139351,139352],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,139353,139354,139360,139370],{"__ignoreMap":37},[41,139355,139356,139358],{"class":43,"line":44},[41,139357,130503],{"class":54},[41,139359,15710],{"class":275},[41,139361,139362,139364,139366,139368],{"class":43,"line":51},[41,139363,131135],{"class":58},[41,139365,51540],{"class":275},[41,139367,23874],{"class":58},[41,139369,1434],{"class":275},[41,139371,139372],{"class":43,"line":62},[41,139373,1706],{"class":275},[20,139375,139376],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1603,139378],{"style":126511,"src":139379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[32,139381,139382],{"className":126655,"code":130812,"language":126657,"meta":37,"style":37},[24,139383,139384,139390,139406],{"__ignoreMap":37},[41,139385,139386,139388],{"class":43,"line":44},[41,139387,51714],{"class":51403},[41,139389,15710],{"class":275},[41,139391,139392,139394,139396,139398,139400,139402,139404],{"class":43,"line":51},[41,139393,70999],{"class":58},[41,139395,51540],{"class":275},[41,139397,26],{"class":58},[41,139399,51595],{"class":271},[41,139401,51624],{"class":58},[41,139403,130047],{"class":58},[41,139405,1434],{"class":275},[41,139407,139408],{"class":43,"line":62},[41,139409,1706],{"class":275},[241,139411,139413],{"id":139412},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1603,139415],{"style":126511,"src":139416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1280,139418,139419,139424,139429],{},[227,139420,139421,139423],{},[24,139422,131858],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[227,139425,139426,139428],{},[24,139427,131858],{}," 里面有一个大的版心",[227,139430,139431,139432,139435,139436],{},"版心里面包含 1 号盒子，",[24,139433,139434],{},"mod_service"," 是服务模块，mod 是模块的意思",[1280,139437,139438,139443,139456,139472,139477],{},[227,139439,139155,139440,139442],{},[24,139441,139434],{}," 设置高度（80px）和下边框",[227,139444,139445,139446,139449,139450,139452,139453,139455],{},"在里面定义 ",[24,139447,139448],{},"ul > li"," ,每个",[24,139451,227],{}," 宽度是300px 高度是 50px，给每个",[24,139454,227],{},"设置35px的左内边距",[227,139457,139458,139459,139461,139462,139464,139465,139467,139468,18548,139470,120340],{},"在每个",[24,139460,227],{},"里面，放一个 ",[24,139463,23048],{},"（里面放图标），一个",[24,139466,51714],{},"（里面放",[24,139469,51714],{},[24,139471,20],{},[227,139473,139155,139474,139476],{},[24,139475,23048],{},"设置浮动，让h5与这个div左右排列",[227,139478,139479],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[20,139481,138494],{},[32,139483,139485],{"className":126655,"code":139484,"language":126657,"meta":37,"style":37},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[24,139486,139487,139493,139505,139517,139544],{"__ignoreMap":37},[41,139488,139489,139491],{"class":43,"line":44},[41,139490,134412],{"class":54},[41,139492,15710],{"class":275},[41,139494,139495,139497,139499,139501,139503],{"class":43,"line":51},[41,139496,70671],{"class":58},[41,139498,51540],{"class":275},[41,139500,973],{"class":58},[41,139502,51595],{"class":271},[41,139504,1434],{"class":275},[41,139506,139507,139509,139511,139513,139515],{"class":43,"line":62},[41,139508,70891],{"class":58},[41,139510,51540],{"class":275},[41,139512,973],{"class":58},[41,139514,51595],{"class":271},[41,139516,1434],{"class":275},[41,139518,139519,139521,139523,139525,139527,139529,139531,139533,139536,139538,139540,139542],{"class":43,"line":70},[41,139520,70714],{"class":58},[41,139522,51540],{"class":275},[41,139524,61829],{"class":58},[41,139526,276],{"class":275},[41,139528,134451],{"class":5354},[41,139530,13852],{"class":275},[41,139532,61839],{"class":58},[41,139534,139535],{"class":58}," -10",[41,139537,51595],{"class":271},[41,139539,134470],{"class":58},[41,139541,51595],{"class":271},[41,139543,1434],{"class":275},[41,139545,139546],{"class":43,"line":76},[41,139547,1706],{"class":275},[20,139549,138534],{},[32,139551,139552],{"className":126655,"code":139484,"language":126657,"meta":37,"style":37},[24,139553,139554,139560,139572,139584,139610],{"__ignoreMap":37},[41,139555,139556,139558],{"class":43,"line":44},[41,139557,134412],{"class":54},[41,139559,15710],{"class":275},[41,139561,139562,139564,139566,139568,139570],{"class":43,"line":51},[41,139563,70671],{"class":58},[41,139565,51540],{"class":275},[41,139567,973],{"class":58},[41,139569,51595],{"class":271},[41,139571,1434],{"class":275},[41,139573,139574,139576,139578,139580,139582],{"class":43,"line":62},[41,139575,70891],{"class":58},[41,139577,51540],{"class":275},[41,139579,973],{"class":58},[41,139581,51595],{"class":271},[41,139583,1434],{"class":275},[41,139585,139586,139588,139590,139592,139594,139596,139598,139600,139602,139604,139606,139608],{"class":43,"line":70},[41,139587,70714],{"class":58},[41,139589,51540],{"class":275},[41,139591,61829],{"class":58},[41,139593,276],{"class":275},[41,139595,134451],{"class":5354},[41,139597,13852],{"class":275},[41,139599,61839],{"class":58},[41,139601,139535],{"class":58},[41,139603,51595],{"class":271},[41,139605,134470],{"class":58},[41,139607,51595],{"class":271},[41,139609,1434],{"class":275},[41,139611,139612],{"class":43,"line":76},[41,139613,1706],{"class":275},[20,139615,139616],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1280,139618,139619,139622,139628,139634,139646],{},[227,139620,139621],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[227,139623,139624,139625,120340],{},"里面的布局利用 自定义列表来实现（",[24,139626,139627],{},"dl > dt + dd",[227,139629,139155,139630,139633],{},[24,139631,139632],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[227,139635,139155,139636,139639,139640,18548,139642,139645],{},[24,139637,139638],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[24,139641,139638],{},[24,139643,139644],{},"dd","之间有些距离",[227,139647,139648],{},"最后一个 dl 结构和样式不一样，需要单独设置",[20,139650,138494],{},[32,139652,139653],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},[24,139654,139655,139661,139673],{"__ignoreMap":37},[41,139656,139657,139659],{"class":43,"line":44},[41,139658,51714],{"class":51403},[41,139660,15710],{"class":275},[41,139662,139663,139665,139667,139669,139671],{"class":43,"line":51},[41,139664,70573],{"class":58},[41,139666,51540],{"class":275},[41,139668,465],{"class":58},[41,139670,51659],{"class":58},[41,139672,1434],{"class":275},[41,139674,139675],{"class":43,"line":62},[41,139676,1706],{"class":275},[20,139678,138534],{},[32,139680,139681],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},[24,139682,139683,139689,139701],{"__ignoreMap":37},[41,139684,139685,139687],{"class":43,"line":44},[41,139686,51714],{"class":51403},[41,139688,15710],{"class":275},[41,139690,139691,139693,139695,139697,139699],{"class":43,"line":51},[41,139692,70573],{"class":58},[41,139694,51540],{"class":275},[41,139696,465],{"class":58},[41,139698,51659],{"class":58},[41,139700,1434],{"class":275},[41,139702,139703],{"class":43,"line":62},[41,139704,1706],{"class":275},[20,139706,139707],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1280,139709,139710,139719,139722,139733],{},[227,139711,139712,139713,139715,139716,139718],{},"分为上下两块，上面是 ",[24,139714,131875],{}," 友情链接，下面是 ",[24,139717,131868],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[227,139720,139721],{},"把内容分别复制到相应模块中",[227,139723,139155,139724,139726,139727,139729,139730,139732],{},[24,139725,131875],{}," 设置 15px 的下外边距，给",[24,139728,131875],{}," 里面 的 ",[24,139731,511],{}," 标签设置 左右 3px 的外边距",[227,139734,139735,139736,139738],{},"给",[24,139737,131868],{}," 设置 20px 的行高",[20,139740,138494],{},[32,139742,139743],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},[24,139744,139745,139751,139763],{"__ignoreMap":37},[41,139746,139747,139749],{"class":43,"line":44},[41,139748,51714],{"class":51403},[41,139750,15710],{"class":275},[41,139752,139753,139755,139757,139759,139761],{"class":43,"line":51},[41,139754,70573],{"class":58},[41,139756,51540],{"class":275},[41,139758,465],{"class":58},[41,139760,51659],{"class":58},[41,139762,1434],{"class":275},[41,139764,139765],{"class":43,"line":62},[41,139766,1706],{"class":275},[20,139768,138534],{},[32,139770,139771],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},[24,139772,139773,139779,139791],{"__ignoreMap":37},[41,139774,139775,139777],{"class":43,"line":44},[41,139776,51714],{"class":51403},[41,139778,15710],{"class":275},[41,139780,139781,139783,139785,139787,139789],{"class":43,"line":51},[41,139782,70573],{"class":58},[41,139784,51540],{"class":275},[41,139786,465],{"class":58},[41,139788,51659],{"class":58},[41,139790,1434],{"class":275},[41,139792,139793],{"class":43,"line":62},[41,139794,1706],{"class":275},[20,139796,139797],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[189,139799,139800],{},"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":37,"searchDepth":51,"depth":51,"links":139802},[139803,139804,139805,139812],{"id":138083,"depth":51,"text":138084},{"id":138102,"depth":51,"text":138103},{"id":138129,"depth":51,"text":138130,"children":139806},[139807,139808,139809,139810,139811],{"id":138133,"depth":62,"text":138134},{"id":138146,"depth":62,"text":138147},{"id":138170,"depth":62,"text":138171},{"id":138192,"depth":62,"text":138193},{"id":138264,"depth":62,"text":138265},{"id":138390,"depth":51,"text":138391,"children":139813},[139814,139815,139816,139817,139819],{"id":138394,"depth":62,"text":138395},{"id":138401,"depth":62,"text":138402},{"id":138573,"depth":62,"text":138574},{"id":139114,"depth":62,"text":139818},"15.4.4 nav导航模块制作",{"id":139412,"depth":62,"text":139413},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138075,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139826,"title":139827,"body":139828,"description":196,"extension":197,"meta":142230,"navigation":79,"path":142231,"seo":142232,"stem":142233,"__hash__":142234},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139829,"toc":142207},[139830,139833,139837,139841,139853,139856,139859,139862,139873,139875,139899,139901,139925,139930,139933,139935,139971,139973,140009,140012,140017,140020,140023,140026,140056,140063,140066,140076,140078,140112,140115,140149,140155,140172,140174,140210,140212,140248,140253,140278,140280,140306,140308,140332,140339,140342,140406,140408,140450,140452,140492,140499,140504,140506,140536,140538,140568,140572,140575,140582,140594,140596,140622,140624,140648,140651,140653,140677,140683,140693,140695,140725,140727,140757,140764,140805,140807,140843,140845,140881,140885,140888,140891,140894,140900,140905,140908,140931,140934,140958,140961,140985,140990,140993,140996,140999,141002,141005,141079,141081,141111,141113,141143,141146,141149,141181,141185,141189,141203,141212,141215,141220,141222,141316,141318,141412,141435,141437,141461,141463,141487,141494,141497,141507,141509,141533,141538,141546,141548,141578,141583,141623,141625,141651,141653,141679,141683,141686,141691,141694,141698,141706,141713,141721,141723,141753,141755,141785,141793,141796,141799,141801,141831,141833,141863,141866,141871,141873,141897,141899,141923,141926,142011,142013,142037,142039,142063,142067,142069,142093,142095,142129,142133,142147,142150,142155,142158,142163,142166,142196,142204],[10,139831,139827],{"id":139832},"_16-品优购项目下篇-主体与页面开发",[15,139834,139836],{"id":139835},"_161-项目主体模块制作","16.1 项目主体模块制作",[241,139838,139840],{"id":139839},"_1611-首页制作","16.1.1 首页制作",[20,139842,139843,139845,139846,139848,139849,139852],{},[423,139844,102161],{}," 主体模块是 ",[423,139847,74161],{}," 里面专有的，注意需要新的样式文件 ",[423,139850,139851],{},"index.css，"," 就不要写在common.css中了",[1603,139854],{"style":126511,"src":139855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1603,139857],{"style":126511,"src":139858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[20,139860,139861],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1280,139863,139864,139867,139870],{},[227,139865,139866],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[227,139868,139869],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[227,139871,139872],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[20,139874,138494],{},[32,139876,139877],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,139878,139879,139885,139895],{"__ignoreMap":37},[41,139880,139881,139883],{"class":43,"line":44},[41,139882,130503],{"class":54},[41,139884,15710],{"class":275},[41,139886,139887,139889,139891,139893],{"class":43,"line":51},[41,139888,131135],{"class":58},[41,139890,51540],{"class":275},[41,139892,23874],{"class":58},[41,139894,1434],{"class":275},[41,139896,139897],{"class":43,"line":62},[41,139898,1706],{"class":275},[20,139900,138534],{},[32,139902,139903],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,139904,139905,139911,139921],{"__ignoreMap":37},[41,139906,139907,139909],{"class":43,"line":44},[41,139908,130503],{"class":54},[41,139910,15710],{"class":275},[41,139912,139913,139915,139917,139919],{"class":43,"line":51},[41,139914,131135],{"class":58},[41,139916,51540],{"class":275},[41,139918,23874],{"class":58},[41,139920,1434],{"class":275},[41,139922,139923],{"class":43,"line":62},[41,139924,1706],{"class":275},[224,139926,139927],{},[227,139928,139929],{},"左侧focus模块制作",[1603,139931],{"style":126511,"src":139932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[20,139934,138494],{},[32,139936,139937],{"className":126655,"code":127978,"language":126657,"meta":37,"style":37},[24,139938,139939,139947,139957,139967],{"__ignoreMap":37},[41,139940,139941,139943,139945],{"class":43,"line":44},[41,139942,53924],{"class":51403},[41,139944,62003],{"class":54},[41,139946,15710],{"class":275},[41,139948,139949,139951,139953,139955],{"class":43,"line":51},[41,139950,127993],{"class":58},[41,139952,51540],{"class":275},[41,139954,54992],{"class":58},[41,139956,1434],{"class":275},[41,139958,139959,139961,139963,139965],{"class":43,"line":62},[41,139960,70901],{"class":58},[41,139962,51540],{"class":275},[41,139964,54840],{"class":58},[41,139966,1434],{"class":275},[41,139968,139969],{"class":43,"line":70},[41,139970,1706],{"class":275},[20,139972,138534],{},[32,139974,139975],{"className":126655,"code":127978,"language":126657,"meta":37,"style":37},[24,139976,139977,139985,139995,140005],{"__ignoreMap":37},[41,139978,139979,139981,139983],{"class":43,"line":44},[41,139980,53924],{"class":51403},[41,139982,62003],{"class":54},[41,139984,15710],{"class":275},[41,139986,139987,139989,139991,139993],{"class":43,"line":51},[41,139988,127993],{"class":58},[41,139990,51540],{"class":275},[41,139992,54992],{"class":58},[41,139994,1434],{"class":275},[41,139996,139997,139999,140001,140003],{"class":43,"line":62},[41,139998,70901],{"class":58},[41,140000,51540],{"class":275},[41,140002,54840],{"class":58},[41,140004,1434],{"class":275},[41,140006,140007],{"class":43,"line":70},[41,140008,1706],{"class":275},[20,140010,140011],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[224,140013,140014],{"start":51},[227,140015,140016],{},"右侧newsflash模块制作",[1603,140018],{"style":126511,"src":140019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[20,140021,140022],{},"右侧的模块 分为上中下三个盒子",[20,140024,140025],{},"结构代码：",[32,140027,140028],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,140029,140030],{"__ignoreMap":37},[41,140031,140032,140034,140036,140038,140040,140042,140044,140046,140048,140050,140052,140054],{"class":43,"line":44},[41,140033,1183],{"class":275},[41,140035,1603],{"class":51403},[41,140037,55342],{"class":54},[41,140039,321],{"class":275},[41,140041,134172],{"class":378},[41,140043,55350],{"class":54},[41,140045,321],{"class":275},[41,140047,134179],{"class":378},[41,140049,134182],{"class":54},[41,140051,321],{"class":275},[41,140053,134187],{"class":378},[41,140055,51410],{"class":275},[20,140057,140058,140059,140062],{},"1 号盒子为 ",[24,140060,140061],{},"news"," 新闻模块 高度为 165px",[1603,140064],{"style":126511,"src":140065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[20,140067,140068,140069,140072,140073],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[24,140070,140071],{},"news-hd","，下面是 ",[24,140074,140075],{},"news-bd",[20,140077,140025],{},[32,140079,140080],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,140081,140082,140086,140100,140104],{"__ignoreMap":37},[41,140083,140084],{"class":43,"line":44},[41,140085,130766],{"class":47},[41,140087,140088,140090,140092,140094,140096,140098],{"class":43,"line":51},[41,140089,1183],{"class":275},[41,140091,51714],{"class":51403},[41,140093,53589],{"class":54},[41,140095,321],{"class":275},[41,140097,130779],{"class":378},[41,140099,51410],{"class":275},[41,140101,140102],{"class":43,"line":62},[41,140103,130786],{"class":275},[41,140105,140106,140108,140110],{"class":43,"line":70},[41,140107,51888],{"class":275},[41,140109,51714],{"class":51403},[41,140111,51410],{"class":275},[20,140113,140114],{},"样式代码：",[32,140116,140117],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,140118,140119,140123,140137,140141],{"__ignoreMap":37},[41,140120,140121],{"class":43,"line":44},[41,140122,130766],{"class":47},[41,140124,140125,140127,140129,140131,140133,140135],{"class":43,"line":51},[41,140126,1183],{"class":275},[41,140128,51714],{"class":51403},[41,140130,53589],{"class":54},[41,140132,321],{"class":275},[41,140134,130779],{"class":378},[41,140136,51410],{"class":275},[41,140138,140139],{"class":43,"line":62},[41,140140,130786],{"class":275},[41,140142,140143,140145,140147],{"class":43,"line":70},[41,140144,51888],{"class":275},[41,140146,51714],{"class":51403},[41,140148,51410],{"class":275},[20,140150,140151,140152,140154],{},"上面是",[24,140153,140071],{},"，设置高度是 33px，设置下边框",[1280,140156,140157,140163],{},[227,140158,140159,140160,140162],{},"里面放一个",[24,140161,23048],{}," 标题",[227,140164,140165,140166,140168,140169,140171],{},"放一个a",[24,140167,102796],{},"，内容是 更多，然后让 ",[24,140170,511],{}," 进行右浮动，三角用伪元素设置字体图标就好",[20,140173,140025],{},[32,140175,140176],{"className":126655,"code":138497,"language":126657,"meta":37,"style":37},[24,140177,140178,140186,140196,140206],{"__ignoreMap":37},[41,140179,140180,140182,140184],{"class":43,"line":44},[41,140181,51714],{"class":51403},[41,140183,137656],{"class":54},[41,140185,15710],{"class":275},[41,140187,140188,140190,140192,140194],{"class":43,"line":51},[41,140189,137663],{"class":58},[41,140191,51540],{"class":275},[41,140193,7790],{"class":378},[41,140195,1434],{"class":275},[41,140197,140198,140200,140202,140204],{"class":43,"line":62},[41,140199,128271],{"class":58},[41,140201,51540],{"class":275},[41,140203,60972],{"class":58},[41,140205,1434],{"class":275},[41,140207,140208],{"class":43,"line":70},[41,140209,1706],{"class":275},[20,140211,140114],{},[32,140213,140214],{"className":126655,"code":138497,"language":126657,"meta":37,"style":37},[24,140215,140216,140224,140234,140244],{"__ignoreMap":37},[41,140217,140218,140220,140222],{"class":43,"line":44},[41,140219,51714],{"class":51403},[41,140221,137656],{"class":54},[41,140223,15710],{"class":275},[41,140225,140226,140228,140230,140232],{"class":43,"line":51},[41,140227,137663],{"class":58},[41,140229,51540],{"class":275},[41,140231,7790],{"class":378},[41,140233,1434],{"class":275},[41,140235,140236,140238,140240,140242],{"class":43,"line":62},[41,140237,128271],{"class":58},[41,140239,51540],{"class":275},[41,140241,60972],{"class":58},[41,140243,1434],{"class":275},[41,140245,140246],{"class":43,"line":70},[41,140247,1706],{"class":275},[20,140249,140250,140251],{},"下面是",[24,140252,140075],{},[1280,140254,140255,140263],{},[227,140256,140257,140258,101121,140260,140262],{},"里面包含 ",[24,140259,1280],{},[24,140261,227],{}," 还有链接",[227,140264,139735,140265,140267,140268,140270,140271,140274,140275],{},[24,140266,227],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[24,140269,131321],{}," 2.设置 ",[24,140272,140273],{},"white-space: nowrap;"," 3. 设置 ",[24,140276,140277],{},"text-overflow: ellipsis;",[20,140279,140025],{},[32,140281,140283],{"className":126655,"code":140282,"language":126657,"meta":37,"style":37},"div {\n  overflow: hidden;\n}\n",[24,140284,140285,140291,140302],{"__ignoreMap":37},[41,140286,140287,140289],{"class":43,"line":44},[41,140288,51714],{"class":51403},[41,140290,15710],{"class":275},[41,140292,140293,140296,140298,140300],{"class":43,"line":51},[41,140294,140295],{"class":58},"  overflow",[41,140297,51540],{"class":275},[41,140299,61817],{"class":58},[41,140301,1434],{"class":275},[41,140303,140304],{"class":43,"line":62},[41,140305,1706],{"class":275},[20,140307,140114],{},[32,140309,140310],{"className":126655,"code":140282,"language":126657,"meta":37,"style":37},[24,140311,140312,140318,140328],{"__ignoreMap":37},[41,140313,140314,140316],{"class":43,"line":44},[41,140315,51714],{"class":51403},[41,140317,15710],{"class":275},[41,140319,140320,140322,140324,140326],{"class":43,"line":51},[41,140321,140295],{"class":58},[41,140323,51540],{"class":275},[41,140325,61817],{"class":58},[41,140327,1434],{"class":275},[41,140329,140330],{"class":43,"line":62},[41,140331,1706],{"class":275},[20,140333,140334,140335,140338],{},"2 号盒子为 ",[24,140336,140337],{},"lifeservice"," 生活服务模块 高度为 209px",[1603,140340],{"style":126511,"src":140341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1280,140343,140344,140347,140357,140381,140392],{},[227,140345,140346],{},"设置边框（左右下边框）",[227,140348,140349,140350,140353,140354,140356],{},"里面的内容 是 ",[24,140351,140352],{},"ul > 12*li","，给",[24,140355,227],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[227,140358,140359,140360],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1280,140361,140362,140367,140376],{},[227,140363,140364,140366],{},[24,140365,140337],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[227,140368,140369,140370,140372,140373,140375],{},"可以让 ",[24,140371,140337],{}," 里面的 ",[24,140374,1280],{}," 宽度为 252，就可以装的下 4 个 小 li",[227,140377,140378,140380],{},[24,140379,140337],{}," 盒子 overflow 隐藏多余的部分就可以了",[227,140382,116570,140383,140385,140386,140388,140389,140391],{},[24,140384,227],{}," 里面放一个 ",[24,140387,714],{},"（里面放图标），下面的文本用 ",[24,140390,20],{}," 标签包裹",[227,140393,139155,140394,140396,140397,140399,140400,139189,140402,140405],{},[24,140395,714],{}," 设置 24px宽和28px的高（注意 ",[24,140398,714],{}," 是行内元素， 转成行内块），给 ",[24,140401,227],{},[24,140403,140404],{},"text-align:center"," 让里面内容居中显示",[20,140407,140025],{},[32,140409,140411],{"className":126655,"code":140410,"language":126657,"meta":37,"style":37},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[24,140412,140413,140431,140436,140446],{"__ignoreMap":37},[41,140414,140415,140417,140419,140421,140423,140425,140427,140429],{"class":43,"line":44},[41,140416,41],{"class":51403},[41,140418,12573],{"class":275},[41,140420,511],{"class":51403},[41,140422,12573],{"class":275},[41,140424,23691],{"class":51403},[41,140426,12573],{"class":275},[41,140428,423],{"class":51403},[41,140430,15710],{"class":275},[41,140432,140433],{"class":43,"line":51},[41,140434,140435],{"class":47},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[41,140437,140438,140440,140442,140444],{"class":43,"line":62},[41,140439,128271],{"class":58},[41,140441,51540],{"class":275},[41,140443,128333],{"class":58},[41,140445,1434],{"class":275},[41,140447,140448],{"class":43,"line":70},[41,140449,1706],{"class":275},[20,140451,140114],{},[32,140453,140454],{"className":126655,"code":140410,"language":126657,"meta":37,"style":37},[24,140455,140456,140474,140478,140488],{"__ignoreMap":37},[41,140457,140458,140460,140462,140464,140466,140468,140470,140472],{"class":43,"line":44},[41,140459,41],{"class":51403},[41,140461,12573],{"class":275},[41,140463,511],{"class":51403},[41,140465,12573],{"class":275},[41,140467,23691],{"class":51403},[41,140469,12573],{"class":275},[41,140471,423],{"class":51403},[41,140473,15710],{"class":275},[41,140475,140476],{"class":43,"line":51},[41,140477,140435],{"class":47},[41,140479,140480,140482,140484,140486],{"class":43,"line":62},[41,140481,128271],{"class":58},[41,140483,51540],{"class":275},[41,140485,128333],{"class":58},[41,140487,1434],{"class":275},[41,140489,140490],{"class":43,"line":70},[41,140491,1706],{"class":275},[20,140493,140494,140495,140498],{},"3 号盒子为 ",[24,140496,140497],{},"bargain"," 特价商品",[1280,140500,140501],{},[227,140502,140503],{},"这个比较简单，直接插入一张图片即可",[20,140505,140025],{},[32,140507,140508],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,140509,140510],{"__ignoreMap":37},[41,140511,140512,140514,140516,140518,140520,140522,140524,140526,140528,140530,140532,140534],{"class":43,"line":44},[41,140513,1183],{"class":275},[41,140515,1603],{"class":51403},[41,140517,55342],{"class":54},[41,140519,321],{"class":275},[41,140521,134172],{"class":378},[41,140523,55350],{"class":54},[41,140525,321],{"class":275},[41,140527,134179],{"class":378},[41,140529,134182],{"class":54},[41,140531,321],{"class":275},[41,140533,134187],{"class":378},[41,140535,51410],{"class":275},[20,140537,140114],{},[32,140539,140540],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,140541,140542],{"__ignoreMap":37},[41,140543,140544,140546,140548,140550,140552,140554,140556,140558,140560,140562,140564,140566],{"class":43,"line":44},[41,140545,1183],{"class":275},[41,140547,1603],{"class":51403},[41,140549,55342],{"class":54},[41,140551,321],{"class":275},[41,140553,134172],{"class":378},[41,140555,55350],{"class":54},[41,140557,321],{"class":275},[41,140559,134179],{"class":378},[41,140561,134182],{"class":54},[41,140563,321],{"class":275},[41,140565,134187],{"class":378},[41,140567,51410],{"class":275},[241,140569,140571],{"id":140570},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1603,140573],{"style":126511,"src":140574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[20,140576,140577,140578,140581],{},"大盒子 ",[24,140579,140580],{},"recom"," 推荐模块 recommend",[1280,140583,140584],{},[227,140585,140586,140587,140589,140590,140593],{},"给这个 ",[24,140588,140580],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[24,140591,140592],{},"#ebebeb","），设置距离上边 12px",[20,140595,140025],{},[32,140597,140599],{"className":126655,"code":140598,"language":126657,"meta":37,"style":37},"div {\n  background-color: #f0f0f0;\n}\n",[24,140600,140601,140607,140618],{"__ignoreMap":37},[41,140602,140603,140605],{"class":43,"line":44},[41,140604,51714],{"class":51403},[41,140606,15710],{"class":275},[41,140608,140609,140611,140613,140616],{"class":43,"line":51},[41,140610,70981],{"class":58},[41,140612,51540],{"class":275},[41,140614,140615],{"class":58},"#f0f0f0",[41,140617,1434],{"class":275},[41,140619,140620],{"class":43,"line":62},[41,140621,1706],{"class":275},[20,140623,140114],{},[32,140625,140626],{"className":126655,"code":140598,"language":126657,"meta":37,"style":37},[24,140627,140628,140634,140644],{"__ignoreMap":37},[41,140629,140630,140632],{"class":43,"line":44},[41,140631,51714],{"class":51403},[41,140633,15710],{"class":275},[41,140635,140636,140638,140640,140642],{"class":43,"line":51},[41,140637,70981],{"class":58},[41,140639,51540],{"class":275},[41,140641,140615],{"class":58},[41,140643,1434],{"class":275},[41,140645,140646],{"class":43,"line":62},[41,140647,1706],{"class":275},[20,140649,140650],{},"里面包含 2 个盒子， 浮动即可",[20,140652,140025],{},[32,140654,140655],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,140656,140657,140663,140673],{"__ignoreMap":37},[41,140658,140659,140661],{"class":43,"line":44},[41,140660,130503],{"class":54},[41,140662,15710],{"class":275},[41,140664,140665,140667,140669,140671],{"class":43,"line":51},[41,140666,131135],{"class":58},[41,140668,51540],{"class":275},[41,140670,23874],{"class":58},[41,140672,1434],{"class":275},[41,140674,140675],{"class":43,"line":62},[41,140676,1706],{"class":275},[20,140678,140679,140680],{},"1 号盒子 ",[24,140681,140682],{},"recom_hd",[1280,140684,140685,140688],{},[227,140686,140687],{},"设置宽度205px，高度163px",[227,140689,140159,140690,140692],{},[24,140691,1603],{},"标签，插入图片即可",[20,140694,140025],{},[32,140696,140697],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,140698,140699],{"__ignoreMap":37},[41,140700,140701,140703,140705,140707,140709,140711,140713,140715,140717,140719,140721,140723],{"class":43,"line":44},[41,140702,1183],{"class":275},[41,140704,1603],{"class":51403},[41,140706,55342],{"class":54},[41,140708,321],{"class":275},[41,140710,134172],{"class":378},[41,140712,55350],{"class":54},[41,140714,321],{"class":275},[41,140716,134179],{"class":378},[41,140718,134182],{"class":54},[41,140720,321],{"class":275},[41,140722,134187],{"class":378},[41,140724,51410],{"class":275},[20,140726,140114],{},[32,140728,140729],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,140730,140731],{"__ignoreMap":37},[41,140732,140733,140735,140737,140739,140741,140743,140745,140747,140749,140751,140753,140755],{"class":43,"line":44},[41,140734,1183],{"class":275},[41,140736,1603],{"class":51403},[41,140738,55342],{"class":54},[41,140740,321],{"class":275},[41,140742,134172],{"class":378},[41,140744,55350],{"class":54},[41,140746,321],{"class":275},[41,140748,134179],{"class":378},[41,140750,134182],{"class":54},[41,140752,321],{"class":275},[41,140754,134187],{"class":378},[41,140756,51410],{"class":275},[20,140758,140759,140760,140763],{},"2 号盒子 ",[24,140761,140762],{},"recom_bd"," ，注意里面的小竖线",[1280,140765,140766,140777,140780,140785,140790],{},[227,140767,140768,140769,140771,140772,140774,140775],{},"右侧结构里面放 ",[24,140770,1280],{}," 包含 4个 ",[24,140773,227],{},"，每个li里面包含一个",[24,140776,1603],{},[227,140778,140779],{},"直接利用切片工具把里面的内容当成一张图片",[227,140781,139155,140782,140784],{},[24,140783,227],{}," 设置浮动",[227,140786,139155,140787,140789],{},[24,140788,1603],{}," 设置宽高，宽度 248px，高度 163px",[227,140791,140792,140793,140353,140796,140798,140799,140801,140802],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[24,140794,140795],{},"top 10px",[24,140797,227],{},"设置相对定位（注意，最后一个",[24,140800,227],{},"不用设置伪元素），可以利用 ",[24,140803,140804],{},"nth-child(-n+3){...}",[20,140806,140025],{},[32,140808,140809],{"className":126655,"code":138497,"language":126657,"meta":37,"style":37},[24,140810,140811,140819,140829,140839],{"__ignoreMap":37},[41,140812,140813,140815,140817],{"class":43,"line":44},[41,140814,51714],{"class":51403},[41,140816,137656],{"class":54},[41,140818,15710],{"class":275},[41,140820,140821,140823,140825,140827],{"class":43,"line":51},[41,140822,137663],{"class":58},[41,140824,51540],{"class":275},[41,140826,7790],{"class":378},[41,140828,1434],{"class":275},[41,140830,140831,140833,140835,140837],{"class":43,"line":62},[41,140832,128271],{"class":58},[41,140834,51540],{"class":275},[41,140836,60972],{"class":58},[41,140838,1434],{"class":275},[41,140840,140841],{"class":43,"line":70},[41,140842,1706],{"class":275},[20,140844,140114],{},[32,140846,140847],{"className":126655,"code":138497,"language":126657,"meta":37,"style":37},[24,140848,140849,140857,140867,140877],{"__ignoreMap":37},[41,140850,140851,140853,140855],{"class":43,"line":44},[41,140852,51714],{"class":51403},[41,140854,137656],{"class":54},[41,140856,15710],{"class":275},[41,140858,140859,140861,140863,140865],{"class":43,"line":51},[41,140860,137663],{"class":58},[41,140862,51540],{"class":275},[41,140864,7790],{"class":378},[41,140866,1434],{"class":275},[41,140868,140869,140871,140873,140875],{"class":43,"line":62},[41,140870,128271],{"class":58},[41,140872,51540],{"class":275},[41,140874,60972],{"class":58},[41,140876,1434],{"class":275},[41,140878,140879],{"class":43,"line":70},[41,140880,1706],{"class":275},[241,140882,140884],{"id":140883},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1603,140886],{"style":126511,"src":140887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[20,140889,140890],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[20,140892,140893],{},"第一楼是家用电器模块： 里面包含两个盒子",[20,140895,140896,140899],{},[24,140897,140898],{},"box_hd"," 制作",[20,140901,140679,140902,140904],{},[24,140903,140898],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1603,140906],{"style":126511,"src":140907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1280,140909,140910,140915,140920,140923],{},[227,140911,140912,140914],{},[24,140913,140898],{}," 给 30px 的高度，2个像素的下边框",[227,140916,140917,140918],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[24,140919,139166],{},[227,140921,140922],{},"左侧盒左浮动，右侧盒子右浮动",[227,140924,140925,140927,140928,140930],{},[24,140926,511],{},"标签之间的距离用左右的",[24,140929,30986],{},"撑开即可",[20,140932,140933],{},"结构代码",[32,140935,140936],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,140937,140938,140944,140954],{"__ignoreMap":37},[41,140939,140940,140942],{"class":43,"line":44},[41,140941,130503],{"class":54},[41,140943,15710],{"class":275},[41,140945,140946,140948,140950,140952],{"class":43,"line":51},[41,140947,131135],{"class":58},[41,140949,51540],{"class":275},[41,140951,23874],{"class":58},[41,140953,1434],{"class":275},[41,140955,140956],{"class":43,"line":62},[41,140957,1706],{"class":275},[20,140959,140960],{},"样式代码",[32,140962,140963],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,140964,140965,140971,140981],{"__ignoreMap":37},[41,140966,140967,140969],{"class":43,"line":44},[41,140968,130503],{"class":54},[41,140970,15710],{"class":275},[41,140972,140973,140975,140977,140979],{"class":43,"line":51},[41,140974,131135],{"class":58},[41,140976,51540],{"class":275},[41,140978,23874],{"class":58},[41,140980,1434],{"class":275},[41,140982,140983],{"class":43,"line":62},[41,140984,1706],{"class":275},[20,140986,140987,140899],{},[24,140988,140989],{},"box_bd",[20,140991,140992],{},"2 号盒子 box_bd，不要给高度",[1603,140994],{"style":126511,"src":140995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[20,140997,140998],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[20,141000,141001],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[20,141003,141004],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1280,141006,141007,141019,141035],{},[227,141008,141009,141011,141012,141015,141016,141018],{},[24,141010,140989],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[24,141013,141014],{},"tab_content","，在",[24,141017,141014],{}," 里面包裹tab选项卡对应的内容",[227,141020,141021,141022,141025,141026,141028,141029,141031,141032,141034],{},"内容被一个大盒子包裹（",[24,141023,141024],{},"tab_list_item","），里面是 ",[24,141027,1280],{}," 包裹 5个 ",[24,141030,227],{},"，每个",[24,141033,227],{},"设置对应的宽度，然后设置浮动",[227,141036,141037,141038,141040,141041,141043,141044],{},"而这5个",[24,141039,227],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[24,141042,227],{},"设置",[1280,141045,141046,141064,141067],{},[227,141047,141048,141049,141051,141052,141054,141055,141057,141058,141060,141061,141063],{},"第一个小 ",[24,141050,227],{}," 分为上下结构，上面是 ",[24,141053,1280],{}," 包裹 ",[24,141056,227],{}," ，",[24,141059,227],{},"里面包裹 ",[24,141062,511],{},"，下面插入一张图片",[227,141065,141066],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[227,141068,141069,141070,141072,141073,141075,141076,141078],{},"后面的小 ",[24,141071,227],{}," 里面先放一个",[24,141074,511],{},"标签，然后在",[24,141077,511],{},"标签里面插入图片即可",[20,141080,140933],{},[32,141082,141083],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,141084,141085],{"__ignoreMap":37},[41,141086,141087,141089,141091,141093,141095,141097,141099,141101,141103,141105,141107,141109],{"class":43,"line":44},[41,141088,1183],{"class":275},[41,141090,1603],{"class":51403},[41,141092,55342],{"class":54},[41,141094,321],{"class":275},[41,141096,134172],{"class":378},[41,141098,55350],{"class":54},[41,141100,321],{"class":275},[41,141102,134179],{"class":378},[41,141104,134182],{"class":54},[41,141106,321],{"class":275},[41,141108,134187],{"class":378},[41,141110,51410],{"class":275},[20,141112,140960],{},[32,141114,141115],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,141116,141117],{"__ignoreMap":37},[41,141118,141119,141121,141123,141125,141127,141129,141131,141133,141135,141137,141139,141141],{"class":43,"line":44},[41,141120,1183],{"class":275},[41,141122,1603],{"class":51403},[41,141124,55342],{"class":54},[41,141126,321],{"class":275},[41,141128,134172],{"class":378},[41,141130,55350],{"class":54},[41,141132,321],{"class":275},[41,141134,134179],{"class":378},[41,141136,134182],{"class":54},[41,141138,321],{"class":275},[41,141140,134187],{"class":378},[41,141142,51410],{"class":275},[20,141144,141145],{},"tab栏切换需求！！！！！！介绍：",[1603,141147],{"style":126511,"src":141148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1280,141150,141151,141159,141165,141168],{},[227,141152,141153,141156,141157],{},[24,141154,141155],{},"tab","栏的布局是 ",[24,141158,139166],{},[227,141160,141161,141162,141164],{},"有多少个",[24,141163,141155],{},"选项卡，那么对应就有多少个内容",[227,141166,141167],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[227,141169,141170,141171,141174,141175,141177,141178,141180],{},"等后面我们学习了",[24,141172,141173],{},"js","之后，我们就会配合",[24,141176,141173],{},"来实现，",[24,141179,141155],{},"栏的切换",[15,141182,141184],{"id":141183},"_162-列表制作","16.2 列表制作",[241,141186,141188],{"id":141187},"_1621-准备工作","16.2.1 准备工作",[1280,141190,141191,141194,141197,141200],{},[227,141192,141193],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[227,141195,141196],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[227,141198,141199],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[227,141201,141202],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[241,141204,141206,141207,101121,141209,141211],{"id":141205},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[24,141208,131660],{},[24,141210,53816],{}," 修改",[1603,141213],{"style":126511,"src":141214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1280,141216,141217],{},[227,141218,141219],{},"秒杀盒子 sk（ second kill ） 定位即可",[20,141221,140025],{},[32,141223,141224],{"className":126655,"code":132087,"language":126657,"meta":37,"style":37},[24,141225,141226,141230,141244,141248,141262,141266,141280,141284,141298,141302],{"__ignoreMap":37},[41,141227,141228],{"class":43,"line":44},[41,141229,132094],{"class":47},[41,141231,141232,141234,141236,141238,141240,141242],{"class":43,"line":51},[41,141233,132099],{"class":54},[41,141235,79910],{"class":275},[41,141237,129015],{"class":58},[41,141239,51540],{"class":275},[41,141241,132108],{"class":58},[41,141243,129585],{"class":275},[41,141245,141246],{"class":43,"line":62},[41,141247,132115],{"class":47},[41,141249,141250,141252,141254,141256,141258,141260],{"class":43,"line":70},[41,141251,132120],{"class":54},[41,141253,79910],{"class":275},[41,141255,129015],{"class":58},[41,141257,51540],{"class":275},[41,141259,54867],{"class":58},[41,141261,129585],{"class":275},[41,141263,141264],{"class":43,"line":76},[41,141265,132135],{"class":47},[41,141267,141268,141270,141272,141274,141276,141278],{"class":43,"line":83},[41,141269,132140],{"class":54},[41,141271,79910],{"class":275},[41,141273,129015],{"class":58},[41,141275,51540],{"class":275},[41,141277,54934],{"class":58},[41,141279,129585],{"class":275},[41,141281,141282],{"class":43,"line":89},[41,141283,132155],{"class":47},[41,141285,141286,141288,141290,141292,141294,141296],{"class":43,"line":96},[41,141287,132160],{"class":54},[41,141289,79910],{"class":275},[41,141291,129015],{"class":58},[41,141293,51540],{"class":275},[41,141295,86336],{"class":58},[41,141297,129585],{"class":275},[41,141299,141300],{"class":43,"line":104},[41,141301,132175],{"class":47},[41,141303,141304,141306,141308,141310,141312,141314],{"class":43,"line":176},[41,141305,132180],{"class":54},[41,141307,79910],{"class":275},[41,141309,129015],{"class":58},[41,141311,51540],{"class":275},[41,141313,132189],{"class":58},[41,141315,129585],{"class":275},[20,141317,140114],{},[32,141319,141320],{"className":126655,"code":132087,"language":126657,"meta":37,"style":37},[24,141321,141322,141326,141340,141344,141358,141362,141376,141380,141394,141398],{"__ignoreMap":37},[41,141323,141324],{"class":43,"line":44},[41,141325,132094],{"class":47},[41,141327,141328,141330,141332,141334,141336,141338],{"class":43,"line":51},[41,141329,132099],{"class":54},[41,141331,79910],{"class":275},[41,141333,129015],{"class":58},[41,141335,51540],{"class":275},[41,141337,132108],{"class":58},[41,141339,129585],{"class":275},[41,141341,141342],{"class":43,"line":62},[41,141343,132115],{"class":47},[41,141345,141346,141348,141350,141352,141354,141356],{"class":43,"line":70},[41,141347,132120],{"class":54},[41,141349,79910],{"class":275},[41,141351,129015],{"class":58},[41,141353,51540],{"class":275},[41,141355,54867],{"class":58},[41,141357,129585],{"class":275},[41,141359,141360],{"class":43,"line":76},[41,141361,132135],{"class":47},[41,141363,141364,141366,141368,141370,141372,141374],{"class":43,"line":83},[41,141365,132140],{"class":54},[41,141367,79910],{"class":275},[41,141369,129015],{"class":58},[41,141371,51540],{"class":275},[41,141373,54934],{"class":58},[41,141375,129585],{"class":275},[41,141377,141378],{"class":43,"line":89},[41,141379,132155],{"class":47},[41,141381,141382,141384,141386,141388,141390,141392],{"class":43,"line":96},[41,141383,132160],{"class":54},[41,141385,79910],{"class":275},[41,141387,129015],{"class":58},[41,141389,51540],{"class":275},[41,141391,86336],{"class":58},[41,141393,129585],{"class":275},[41,141395,141396],{"class":43,"line":104},[41,141397,132175],{"class":47},[41,141399,141400,141402,141404,141406,141408,141410],{"class":43,"line":176},[41,141401,132180],{"class":54},[41,141403,79910],{"class":275},[41,141405,129015],{"class":58},[41,141407,51540],{"class":275},[41,141409,132189],{"class":58},[41,141411,129585],{"class":275},[1280,141413,141414,141425],{},[227,141415,141416,141417,141420,141421,101121,141423],{},"1 号盒子左侧浮动 ",[24,141418,141419],{},"sk_list"," 里面包含 ",[24,141422,1280],{},[24,141424,227],{},[227,141426,141427,141428,141420,141431,101121,141433],{},"2 号盒子左侧浮动 ",[24,141429,141430],{},"sk_con",[24,141432,1280],{},[24,141434,227],{},[20,141436,140025],{},[32,141438,141439],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,141440,141441,141447,141457],{"__ignoreMap":37},[41,141442,141443,141445],{"class":43,"line":44},[41,141444,130503],{"class":54},[41,141446,15710],{"class":275},[41,141448,141449,141451,141453,141455],{"class":43,"line":51},[41,141450,131135],{"class":58},[41,141452,51540],{"class":275},[41,141454,23874],{"class":58},[41,141456,1434],{"class":275},[41,141458,141459],{"class":43,"line":62},[41,141460,1706],{"class":275},[20,141462,140114],{},[32,141464,141465],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,141466,141467,141473,141483],{"__ignoreMap":37},[41,141468,141469,141471],{"class":43,"line":44},[41,141470,130503],{"class":54},[41,141472,15710],{"class":275},[41,141474,141475,141477,141479,141481],{"class":43,"line":51},[41,141476,131135],{"class":58},[41,141478,51540],{"class":275},[41,141480,23874],{"class":58},[41,141482,1434],{"class":275},[41,141484,141485],{"class":43,"line":62},[41,141486,1706],{"class":275},[241,141488,141490,141491],{"id":141489},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[24,141492,141493],{},"sk_container",[1603,141495],{"style":126511,"src":141496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1280,141498,141499,141504],{},[227,141500,140679,141501,141503],{},[24,141502,141493],{}," 给宽度 1200，不要给高度",[227,141505,141506],{},"一定不要忘记清除浮动",[20,141508,140025],{},[32,141510,141511],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,141512,141513,141519,141529],{"__ignoreMap":37},[41,141514,141515,141517],{"class":43,"line":44},[41,141516,130503],{"class":54},[41,141518,15710],{"class":275},[41,141520,141521,141523,141525,141527],{"class":43,"line":51},[41,141522,131135],{"class":58},[41,141524,51540],{"class":275},[41,141526,23874],{"class":58},[41,141528,1434],{"class":275},[41,141530,141531],{"class":43,"line":62},[41,141532,1706],{"class":275},[224,141534,141535],{},[227,141536,141537],{},"sk_hd制作",[1280,141539,141540],{},[227,141541,140759,141542,141545],{},[24,141543,141544],{},"sk_hd"," ，插入图片即可",[20,141547,140025],{},[32,141549,141550],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,141551,141552],{"__ignoreMap":37},[41,141553,141554,141556,141558,141560,141562,141564,141566,141568,141570,141572,141574,141576],{"class":43,"line":44},[41,141555,1183],{"class":275},[41,141557,1603],{"class":51403},[41,141559,55342],{"class":54},[41,141561,321],{"class":275},[41,141563,134172],{"class":378},[41,141565,55350],{"class":54},[41,141567,321],{"class":275},[41,141569,134179],{"class":378},[41,141571,134182],{"class":54},[41,141573,321],{"class":275},[41,141575,134187],{"class":378},[41,141577,51410],{"class":275},[224,141579,141580],{"start":51},[227,141581,141582],{},"sk_bd制作",[1280,141584,141585],{},[227,141586,141587,141588,141591,141592,101121,141594,141596],{},"3 号盒子 ",[24,141589,141590],{},"sk_bd"," ，里面包含很多的 ",[24,141593,1280],{},[24,141595,227],{},[1280,141597,141598,141607],{},[227,141599,141600,141601,141603,141604,141606],{},"当鼠标移入到 ",[24,141602,227],{}," 上面的时候显示红色的边框，在这里先给 ",[24,141605,227],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[227,141608,141609,141610,141612,141613,141615,141616,141619,141620,141622],{},"由于给每个 ",[24,141611,227],{}," 都设置了外边距，导致一行的最后一个 ",[24,141614,227],{}," 掉了下来，在这里我们利用 ",[24,141617,141618],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[24,141621,227],{},"，去掉外边距就好了",[20,141624,140025],{},[32,141626,141627],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},[24,141628,141629,141635,141647],{"__ignoreMap":37},[41,141630,141631,141633],{"class":43,"line":44},[41,141632,51714],{"class":51403},[41,141634,15710],{"class":275},[41,141636,141637,141639,141641,141643,141645],{"class":43,"line":51},[41,141638,70573],{"class":58},[41,141640,51540],{"class":275},[41,141642,465],{"class":58},[41,141644,51659],{"class":58},[41,141646,1434],{"class":275},[41,141648,141649],{"class":43,"line":62},[41,141650,1706],{"class":275},[20,141652,140114],{},[32,141654,141655],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},[24,141656,141657,141663,141675],{"__ignoreMap":37},[41,141658,141659,141661],{"class":43,"line":44},[41,141660,51714],{"class":51403},[41,141662,15710],{"class":275},[41,141664,141665,141667,141669,141671,141673],{"class":43,"line":51},[41,141666,70573],{"class":58},[41,141668,51540],{"class":275},[41,141670,465],{"class":58},[41,141672,51659],{"class":58},[41,141674,1434],{"class":275},[41,141676,141677],{"class":43,"line":62},[41,141678,1706],{"class":275},[15,141680,141682],{"id":141681},"_163-注册页面制作","16.3 注册页面制作",[1603,141684],{"style":126511,"src":141685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[20,141687,141688,141690],{},[423,141689,9163],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1603,141692],{"style":126511,"src":141693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[241,141695,141697],{"id":141696},"_1631-准备工作","16.3.1 准备工作",[1280,141699,141700,141703],{},[227,141701,141702],{},"创建register.html，引入 base.css，引入favicon图标",[227,141704,141705],{},"创建register.css ，在html页面进行引入",[241,141707,141709,141710,141712],{"id":141708},"_1632-header-头部实现","16.3.2 ",[24,141711,131660],{}," 头部实现",[1280,141714,141715,141718],{},[227,141716,141717],{},"整个内容用 版心 进行包裹",[227,141719,141720],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[20,141722,140025],{},[32,141724,141725],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,141726,141727],{"__ignoreMap":37},[41,141728,141729,141731,141733,141735,141737,141739,141741,141743,141745,141747,141749,141751],{"class":43,"line":44},[41,141730,1183],{"class":275},[41,141732,1603],{"class":51403},[41,141734,55342],{"class":54},[41,141736,321],{"class":275},[41,141738,134172],{"class":378},[41,141740,55350],{"class":54},[41,141742,321],{"class":275},[41,141744,134179],{"class":378},[41,141746,134182],{"class":54},[41,141748,321],{"class":275},[41,141750,134187],{"class":378},[41,141752,51410],{"class":275},[20,141754,140114],{},[32,141756,141757],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,141758,141759],{"__ignoreMap":37},[41,141760,141761,141763,141765,141767,141769,141771,141773,141775,141777,141779,141781,141783],{"class":43,"line":44},[41,141762,1183],{"class":275},[41,141764,1603],{"class":51403},[41,141766,55342],{"class":54},[41,141768,321],{"class":275},[41,141770,134172],{"class":378},[41,141772,55350],{"class":54},[41,141774,321],{"class":275},[41,141776,134179],{"class":378},[41,141778,134182],{"class":54},[41,141780,321],{"class":275},[41,141782,134187],{"class":378},[41,141784,51410],{"class":275},[241,141786,141788,141789,141792],{"id":141787},"_1633-registerarea-主体模块实现","16.3.3 ",[24,141790,141791],{},"registerarea"," 主体模块实现",[1603,141794],{"style":126511,"src":141795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[20,141797,141798],{},"整个大盒子 高度为 522px，设置4个边框",[20,141800,140025],{},[32,141802,141803],{"className":126655,"code":130812,"language":126657,"meta":37,"style":37},[24,141804,141805,141811,141827],{"__ignoreMap":37},[41,141806,141807,141809],{"class":43,"line":44},[41,141808,51714],{"class":51403},[41,141810,15710],{"class":275},[41,141812,141813,141815,141817,141819,141821,141823,141825],{"class":43,"line":51},[41,141814,70999],{"class":58},[41,141816,51540],{"class":275},[41,141818,26],{"class":58},[41,141820,51595],{"class":271},[41,141822,51624],{"class":58},[41,141824,130047],{"class":58},[41,141826,1434],{"class":275},[41,141828,141829],{"class":43,"line":62},[41,141830,1706],{"class":275},[20,141832,140114],{},[32,141834,141835],{"className":126655,"code":130812,"language":126657,"meta":37,"style":37},[24,141836,141837,141843,141859],{"__ignoreMap":37},[41,141838,141839,141841],{"class":43,"line":44},[41,141840,51714],{"class":51403},[41,141842,15710],{"class":275},[41,141844,141845,141847,141849,141851,141853,141855,141857],{"class":43,"line":51},[41,141846,70999],{"class":58},[41,141848,51540],{"class":275},[41,141850,26],{"class":58},[41,141852,51595],{"class":271},[41,141854,51624],{"class":58},[41,141856,130047],{"class":58},[41,141858,1434],{"class":275},[41,141860,141861],{"class":43,"line":62},[41,141862,1706],{"class":275},[20,141864,141865],{},"1号盒子 是一个 h3 标签，放标题",[1280,141867,141868],{},[227,141869,141870],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[20,141872,140025],{},[32,141874,141875],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,141876,141877,141883,141893],{"__ignoreMap":37},[41,141878,141879,141881],{"class":43,"line":44},[41,141880,130503],{"class":54},[41,141882,15710],{"class":275},[41,141884,141885,141887,141889,141891],{"class":43,"line":51},[41,141886,131135],{"class":58},[41,141888,51540],{"class":275},[41,141890,23874],{"class":58},[41,141892,1434],{"class":275},[41,141894,141895],{"class":43,"line":62},[41,141896,1706],{"class":275},[20,141898,140114],{},[32,141900,141901],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,141902,141903,141909,141919],{"__ignoreMap":37},[41,141904,141905,141907],{"class":43,"line":44},[41,141906,130503],{"class":54},[41,141908,15710],{"class":275},[41,141910,141911,141913,141915,141917],{"class":43,"line":51},[41,141912,131135],{"class":58},[41,141914,51540],{"class":275},[41,141916,23874],{"class":58},[41,141918,1434],{"class":275},[41,141920,141921],{"class":43,"line":62},[41,141922,1706],{"class":275},[20,141924,141925],{},"2号盒子 里面放注册的内容",[1280,141927,141928,141931,141940,141954,141967,141970,141973,141991,142005],{},[227,141929,141930],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[227,141932,141933,141934,141936,141937,141939],{},"里面的内容利用 ",[24,141935,1280],{}," 包含 ",[24,141938,227],{}," 来实现的（不需要用表格）",[227,141941,139169,141942,141944,141945,141947,141948,141950,141951,141953],{},[24,141943,227],{}," 里面，左侧放 ",[24,141946,33711],{}," 标签， 中间放",[24,141949,53924],{}," 标签， 右侧放 ",[24,141952,41],{}," 提示信息",[227,141955,141956,141957,141959,141960,141962,141963,141966],{},"左侧 ",[24,141958,33711],{},"里面的文字都是右对齐，我们可以给",[24,141961,33711],{},"设置一个宽度（88px），然后利用",[24,141964,141965],{},"text-align"," 来设置右对齐",[227,141968,141969],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[227,141971,141972],{},"右侧 span修饰一下文字颜色",[227,141974,141975,141976],{},"提示信息的样式优化",[1280,141977,141978,141981,141984],{},[227,141979,141980],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[227,141982,141983],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[227,141985,141986,141987,141990],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[24,141988,141989],{},"vertical-algin"," 来设置 图片与文字对齐方式",[227,141992,141993,141994],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1280,141995,141996,142002],{},[227,141997,141998,141999,142001],{},"设置 ",[24,142000,23691],{}," 的 左右 12px 的内边距，设置一下文字颜色",[227,142003,142004],{},"分别设置 背景颜色",[227,142006,142007,142008,142010],{},"同意协议 和 完成注册 都是用 ",[24,142009,227],{}," 进行包裹",[20,142012,140025],{},[32,142014,142015],{"className":126655,"code":140598,"language":126657,"meta":37,"style":37},[24,142016,142017,142023,142033],{"__ignoreMap":37},[41,142018,142019,142021],{"class":43,"line":44},[41,142020,51714],{"class":51403},[41,142022,15710],{"class":275},[41,142024,142025,142027,142029,142031],{"class":43,"line":51},[41,142026,70981],{"class":58},[41,142028,51540],{"class":275},[41,142030,140615],{"class":58},[41,142032,1434],{"class":275},[41,142034,142035],{"class":43,"line":62},[41,142036,1706],{"class":275},[20,142038,140114],{},[32,142040,142041],{"className":126655,"code":140598,"language":126657,"meta":37,"style":37},[24,142042,142043,142049,142059],{"__ignoreMap":37},[41,142044,142045,142047],{"class":43,"line":44},[41,142046,51714],{"class":51403},[41,142048,15710],{"class":275},[41,142050,142051,142053,142055,142057],{"class":43,"line":51},[41,142052,70981],{"class":58},[41,142054,51540],{"class":275},[41,142056,140615],{"class":58},[41,142058,1434],{"class":275},[41,142060,142061],{"class":43,"line":62},[41,142062,1706],{"class":275},[241,142064,142066],{"id":142065},"_1634-底部实现","16.3.4 底部实现",[20,142068,140025],{},[32,142070,142071],{"className":126655,"code":140598,"language":126657,"meta":37,"style":37},[24,142072,142073,142079,142089],{"__ignoreMap":37},[41,142074,142075,142077],{"class":43,"line":44},[41,142076,51714],{"class":51403},[41,142078,15710],{"class":275},[41,142080,142081,142083,142085,142087],{"class":43,"line":51},[41,142082,70981],{"class":58},[41,142084,51540],{"class":275},[41,142086,140615],{"class":58},[41,142088,1434],{"class":275},[41,142090,142091],{"class":43,"line":62},[41,142092,1706],{"class":275},[20,142094,140114],{},[32,142096,142097],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,142098,142099,142103,142117,142121],{"__ignoreMap":37},[41,142100,142101],{"class":43,"line":44},[41,142102,130766],{"class":47},[41,142104,142105,142107,142109,142111,142113,142115],{"class":43,"line":51},[41,142106,1183],{"class":275},[41,142108,51714],{"class":51403},[41,142110,53589],{"class":54},[41,142112,321],{"class":275},[41,142114,130779],{"class":378},[41,142116,51410],{"class":275},[41,142118,142119],{"class":43,"line":62},[41,142120,130786],{"class":275},[41,142122,142123,142125,142127],{"class":43,"line":70},[41,142124,51888],{"class":275},[41,142126,51714],{"class":51403},[41,142128,51410],{"class":275},[15,142130,142132],{"id":142131},"_164-项目总结","16.4 项目总结",[224,142134,142135,142138,142141,142144],{},[227,142136,142137],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[227,142139,142140],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[227,142142,142143],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[227,142145,142146],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1603,142148],{"style":126511,"src":142149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[224,142151,142152],{"start":76},[227,142153,142154],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1603,142156],{"style":126511,"src":142157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[224,142159,142160],{"start":83},[227,142161,142162],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1603,142164],{"style":126511,"src":142165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[32,142167,142168],{"className":127402,"code":136812,"language":127404,"meta":37,"style":37},[24,142169,142170],{"__ignoreMap":37},[41,142171,142172,142174,142176,142178,142180,142182,142184,142186,142188,142190,142192,142194],{"class":43,"line":44},[41,142173,1183],{"class":275},[41,142175,53924],{"class":51403},[41,142177,53927],{"class":54},[41,142179,321],{"class":275},[41,142181,62802],{"class":378},[41,142183,15058],{"class":54},[41,142185,321],{"class":275},[41,142187,136833],{"class":378},[41,142189,61123],{"class":54},[41,142191,321],{"class":275},[41,142193,136840],{"class":378},[41,142195,51410],{"class":275},[224,142197,142198,142201],{"start":89},[227,142199,142200],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[227,142202,142203],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[189,142205,142206],{},"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":37,"searchDepth":51,"depth":51,"links":142208},[142209,142214,142221,142229],{"id":139835,"depth":51,"text":139836,"children":142210},[142211,142212,142213],{"id":139839,"depth":62,"text":139840},{"id":140570,"depth":62,"text":140571},{"id":140883,"depth":62,"text":140884},{"id":141183,"depth":51,"text":141184,"children":142215},[142216,142217,142219],{"id":141187,"depth":62,"text":141188},{"id":141205,"depth":62,"text":142218},"16.2.2 列表页 header 和 nav 修改",{"id":141489,"depth":62,"text":142220},"16.2.3 列表页主体 sk_container",{"id":141681,"depth":51,"text":141682,"children":142222},[142223,142224,142226,142228],{"id":141696,"depth":62,"text":141697},{"id":141708,"depth":62,"text":142225},"16.3.2 header 头部实现",{"id":141787,"depth":62,"text":142227},"16.3.3 registerarea 主体模块实现",{"id":142065,"depth":62,"text":142066},{"id":142131,"depth":51,"text":142132},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139827,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142236,"title":142237,"body":142238,"description":196,"extension":197,"meta":142346,"navigation":79,"path":142347,"seo":142348,"stem":142349,"__hash__":142350},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142239,"toc":142341},[142240,142243,142247,142250,142253,142262,142271,142275,142280,142287,142305,142308,142311,142314,142317,142320,142323,142326,142329,142332,142335,142338],[10,142241,142237],{"id":142242},"_17-web服务器与网站发布",[15,142244,142246],{"id":142245},"_171-web服务器","17.1 Web服务器",[20,142248,142249],{},"把自己网站上传到服务器上，可以让其他人访问",[1603,142251],{"style":126511,"src":142252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[20,142254,142255,142258,142259],{},[423,142256,142257],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[423,142260,142261],{},"Web 服务器等",[20,142263,142264,142265,101121,142268,25843],{},"根据服务器在网络中所在的位置不同，又可分为 ",[423,142266,142267],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[423,142269,142270],{},"远程服务器",[241,142272,142274],{"id":142273},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[20,142276,142277],{},[423,142278,142279],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[20,142281,142282,142283],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[511,142284,142285],{"href":142285,"rel":142286},"http:\u002F\u002Ffree.3v.do\u002F",[24001],[1280,142288,142289,142292,142295,142302],{},[227,142290,142291],{},"去免费空间网站注册账号。",[227,142293,142294],{},"记录下主机名、用户名、密码、域名。",[227,142296,142297,142298,142301],{},"利用 ",[24,142299,142300],{},"utftp"," 软件 上传网站到远程服务器",[227,142303,142304],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[20,142306,142307],{},"使用软件上传，对上传软件文件进行解压",[1603,142309],{"style":126511,"src":142310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1603,142312],{"style":126511,"src":142313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[20,142315,142316],{},"输入刚刚申请的服务器账号信息：",[1603,142318],{"style":126511,"src":142319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1603,142321],{"style":126511,"src":142322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1603,142324],{"style":126511,"src":142325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1603,142327],{"style":126511,"src":142328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[20,142330,142331],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1603,142333],{"style":126511,"src":142334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[20,142336,142337],{},"浏览器输入域名即可访问",[20,142339,142340],{},"首页一定必须是index",{"title":37,"searchDepth":51,"depth":51,"links":142342},[142343],{"id":142245,"depth":51,"text":142246,"children":142344},[142345],{"id":142273,"depth":62,"text":142274},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142237,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142352,"title":142353,"body":142354,"description":196,"extension":197,"meta":143281,"navigation":79,"path":143282,"seo":143283,"stem":143284,"__hash__":143285},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142355,"toc":143264},[142356,142359,142363,142366,142369,142380,142383,142387,142391,142396,142399,142402,142405,142408,142412,142438,142442,142446,142449,142452,142456,142489,142493,142496,142499,142563,142567,142571,142574,142577,142580,142584,142629,142633,142636,142666,142670,142674,142677,142680,142684,142687,142756,142759,142867,142869,142875,142879,142882,142885,142981,142984,142988,143012,143016,143019,143023,143026,143030,143033,143036,143039,143042,143046,143049,143052,143056,143060,143063,143066,143069,143072,143076,143079,143083,143086,143089,143134,143138,143142,143145,143148,143151,143183,143187,143190,143224,143228,143231,143261],[10,142357,142353],{"id":142358},"_18-2d动画与3d转换",[15,142360,142362],{"id":142361},"_181-css3-2d转换","18.1 CSS3 2D转换",[20,142364,142365],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[20,142367,142368],{},"转换（transform）你可以简单理解为变形",[1280,142370,142371,142374,142377],{},[227,142372,142373],{},"移动：translate",[227,142375,142376],{},"旋转：rotate",[227,142378,142379],{},"缩放：scale",[1603,142381],{"style":126511,"src":142382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[241,142384,142386],{"id":142385},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22136,142388,142390],{"id":142389},"_18111-translate介绍","18.1.1.1 translate介绍",[20,142392,142393,142394],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[423,142395,133314],{},[1603,142397],{"style":126511,"src":142398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[20,142400,142401],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[20,142403,142404],{},"对于行内元素无效",[20,142406,142407],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22136,142409,142411],{"id":142410},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[32,142413,142414],{"className":126655,"code":138844,"language":126657,"meta":37,"style":37},[24,142415,142416,142422,142434],{"__ignoreMap":37},[41,142417,142418,142420],{"class":43,"line":44},[41,142419,51714],{"class":51403},[41,142421,15710],{"class":275},[41,142423,142424,142426,142428,142430,142432],{"class":43,"line":51},[41,142425,70573],{"class":58},[41,142427,51540],{"class":275},[41,142429,465],{"class":58},[41,142431,51659],{"class":58},[41,142433,1434],{"class":275},[41,142435,142436],{"class":43,"line":62},[41,142437,1706],{"class":275},[241,142439,142441],{"id":142440},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22136,142443,142445],{"id":142444},"_18121-rotate介绍","18.1.2.1 rotate介绍",[20,142447,142448],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1603,142450],{"style":126511,"src":142451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22136,142453,142455],{"id":142454},"_18122-旋转效果","18.1.2.2 旋转效果",[32,142457,142459],{"className":126655,"code":142458,"language":126657,"meta":37,"style":37},"div {\n  transform: rotate(45deg);\n}\n",[24,142460,142461,142467,142485],{"__ignoreMap":37},[41,142462,142463,142465],{"class":43,"line":44},[41,142464,51714],{"class":51403},[41,142466,15710],{"class":275},[41,142468,142469,142471,142473,142476,142478,142480,142483],{"class":43,"line":51},[41,142470,136639],{"class":58},[41,142472,51540],{"class":275},[41,142474,142475],{"class":58},"rotate",[41,142477,276],{"class":275},[41,142479,802],{"class":58},[41,142481,142482],{"class":271},"deg",[41,142484,2857],{"class":275},[41,142486,142487],{"class":43,"line":62},[41,142488,1706],{"class":275},[22136,142490,142492],{"id":142491},"_18123-三角做法","18.1.2.3 三角做法",[20,142494,142495],{},"该下标当经过最外层大盒子时会实现向上反转",[1603,142497],{"style":126511,"src":142498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[32,142500,142501],{"className":126655,"code":135175,"language":126657,"meta":37,"style":37},[24,142502,142503,142507,142513,142523,142533,142549,142559],{"__ignoreMap":37},[41,142504,142505],{"class":43,"line":44},[41,142506,135182],{"class":47},[41,142508,142509,142511],{"class":43,"line":51},[41,142510,135187],{"class":54},[41,142512,15710],{"class":275},[41,142514,142515,142517,142519,142521],{"class":43,"line":62},[41,142516,70671],{"class":58},[41,142518,51540],{"class":275},[41,142520,465],{"class":58},[41,142522,1434],{"class":275},[41,142524,142525,142527,142529,142531],{"class":43,"line":70},[41,142526,70891],{"class":58},[41,142528,51540],{"class":275},[41,142530,465],{"class":58},[41,142532,1434],{"class":275},[41,142534,142535,142537,142539,142541,142543,142545,142547],{"class":43,"line":76},[41,142536,70999],{"class":58},[41,142538,51540],{"class":275},[41,142540,719],{"class":58},[41,142542,51595],{"class":271},[41,142544,51624],{"class":58},[41,142546,64094],{"class":58},[41,142548,1434],{"class":275},[41,142550,142551,142553,142555,142557],{"class":43,"line":83},[41,142552,135230],{"class":58},[41,142554,51540],{"class":275},[41,142556,62472],{"class":58},[41,142558,1434],{"class":275},[41,142560,142561],{"class":43,"line":89},[41,142562,1706],{"class":275},[241,142564,142566],{"id":142565},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22136,142568,142570],{"id":142569},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[20,142572,142573],{},"设置中心点",[1603,142575],{"style":126511,"src":142576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[20,142578,142579],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22136,142581,142583],{"id":142582},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[32,142585,142587],{"className":126655,"code":142586,"language":126657,"meta":37,"style":37},"\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",[24,142588,142589,142594,142600,142615,142620,142625],{"__ignoreMap":37},[41,142590,142591],{"class":43,"line":44},[41,142592,142593],{"class":47},"\u002F* 转换中心点 *\u002F\n",[41,142595,142596,142598],{"class":43,"line":51},[41,142597,51714],{"class":51403},[41,142599,15710],{"class":275},[41,142601,142602,142605,142607,142609,142611,142613],{"class":43,"line":62},[41,142603,142604],{"class":58},"  transform-origin",[41,142606,51540],{"class":275},[41,142608,51695],{"class":58},[41,142610,17282],{"class":58},[41,142612,130518],{"class":275},[41,142614,135328],{"class":47},[41,142616,142617],{"class":43,"line":70},[41,142618,142619],{"class":47},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[41,142621,142622],{"class":43,"line":76},[41,142623,142624],{"class":47},"  \u002F* transform-origin: left top; *\u002F\n",[41,142626,142627],{"class":43,"line":83},[41,142628,1706],{"class":275},[22136,142630,142632],{"id":142631},"_18133-旋转案例","18.1.3.3 旋转案例",[1603,142634],{"style":126511,"src":142635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[32,142637,142638],{"className":126655,"code":142458,"language":126657,"meta":37,"style":37},[24,142639,142640,142646,142662],{"__ignoreMap":37},[41,142641,142642,142644],{"class":43,"line":44},[41,142643,51714],{"class":51403},[41,142645,15710],{"class":275},[41,142647,142648,142650,142652,142654,142656,142658,142660],{"class":43,"line":51},[41,142649,136639],{"class":58},[41,142651,51540],{"class":275},[41,142653,142475],{"class":58},[41,142655,276],{"class":275},[41,142657,802],{"class":58},[41,142659,142482],{"class":271},[41,142661,2857],{"class":275},[41,142663,142664],{"class":43,"line":62},[41,142665,1706],{"class":275},[241,142667,142669],{"id":142668},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22136,142671,142673],{"id":142672},"_18141-scale介绍","18.1.4.1 scale介绍",[20,142675,142676],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1603,142678],{"style":126511,"src":142679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22136,142681,142683],{"id":142682},"_18142-分页按钮","18.1.4.2 分页按钮",[1603,142685],{"style":126511,"src":142686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[32,142688,142690],{"className":126655,"code":142689,"language":126657,"meta":37,"style":37},"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",[24,142691,142692,142698,142714,142718,142722,142727,142733,142747,142752],{"__ignoreMap":37},[41,142693,142694,142696],{"class":43,"line":44},[41,142695,51714],{"class":51403},[41,142697,15710],{"class":275},[41,142699,142700,142702,142704,142707,142709,142712],{"class":43,"line":51},[41,142701,136639],{"class":58},[41,142703,51540],{"class":275},[41,142705,142706],{"class":58},"scale",[41,142708,276],{"class":275},[41,142710,142711],{"class":58},"1.2",[41,142713,2857],{"class":275},[41,142715,142716],{"class":43,"line":62},[41,142717,1706],{"class":275},[41,142719,142720],{"class":43,"line":70},[41,142721,136116],{"class":275},[41,142723,142724],{"class":43,"line":76},[41,142725,142726],{"class":47},"\u002F* 2D 缩放 *\u002F\n",[41,142728,142729,142731],{"class":43,"line":83},[41,142730,51714],{"class":51403},[41,142732,15710],{"class":275},[41,142734,142735,142737,142739,142741,142743,142745],{"class":43,"line":89},[41,142736,136639],{"class":58},[41,142738,51540],{"class":275},[41,142740,142706],{"class":58},[41,142742,276],{"class":275},[41,142744,142711],{"class":58},[41,142746,2857],{"class":275},[41,142748,142749],{"class":43,"line":96},[41,142750,142751],{"class":47},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[41,142753,142754],{"class":43,"line":104},[41,142755,1706],{"class":275},[20,142757,142758],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[32,142760,142762],{"className":126655,"code":142761,"language":126657,"meta":37,"style":37},"\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",[24,142763,142764,142769,142779,142800,142821,142825,142830,142836,142863],{"__ignoreMap":37},[41,142765,142766],{"class":43,"line":44},[41,142767,142768],{"class":47},"\u002F* 定义动画 *\u002F\n",[41,142770,142771,142774,142777],{"class":43,"line":51},[41,142772,142773],{"class":271},"@keyframes",[41,142775,142776],{"class":5354}," move",[41,142778,15710],{"class":275},[41,142780,142781,142784,142786,142788,142790,142793,142795,142797],{"class":43,"line":62},[41,142782,142783],{"class":54},"  0%",[41,142785,79910],{"class":275},[41,142787,48237],{"class":58},[41,142789,51540],{"class":275},[41,142791,142792],{"class":58},"translateX",[41,142794,276],{"class":275},[41,142796,465],{"class":58},[41,142798,142799],{"class":275},"); }\n",[41,142801,142802,142805,142807,142809,142811,142813,142815,142817,142819],{"class":43,"line":70},[41,142803,142804],{"class":54},"  100%",[41,142806,79910],{"class":275},[41,142808,48237],{"class":58},[41,142810,51540],{"class":275},[41,142812,142792],{"class":58},[41,142814,276],{"class":275},[41,142816,584],{"class":58},[41,142818,51595],{"class":271},[41,142820,142799],{"class":275},[41,142822,142823],{"class":43,"line":76},[41,142824,1706],{"class":275},[41,142826,142827],{"class":43,"line":83},[41,142828,142829],{"class":47},"\u002F* 调用动画 *\u002F\n",[41,142831,142832,142834],{"class":43,"line":89},[41,142833,51714],{"class":51403},[41,142835,15710],{"class":275},[41,142837,142838,142841,142843,142845,142847,142849,142851,142853,142855,142858,142861],{"class":43,"line":96},[41,142839,142840],{"class":58},"  animation",[41,142842,51540],{"class":275},[41,142844,135341],{"class":58},[41,142846,25221],{"class":58},[41,142848,968],{"class":271},[41,142850,78783],{"class":58},[41,142852,4231],{"class":58},[41,142854,968],{"class":271},[41,142856,142857],{"class":58}," infinite",[41,142859,142860],{"class":58}," alternate",[41,142862,1434],{"class":275},[41,142864,142865],{"class":43,"line":104},[41,142866,1706],{"class":275},[20,142868,142758],{},[32,142870,142873],{"className":142871,"code":142872,"language":5325},[5323],"\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",[24,142874,142872],{"__ignoreMap":37},[22136,142876,142878],{"id":142877},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[20,142880,142881],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1603,142883],{"style":126511,"src":142884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[32,142886,142887],{"className":126655,"code":142761,"language":126657,"meta":37,"style":37},[24,142888,142889,142893,142901,142919,142939,142943,142947,142953,142977],{"__ignoreMap":37},[41,142890,142891],{"class":43,"line":44},[41,142892,142768],{"class":47},[41,142894,142895,142897,142899],{"class":43,"line":51},[41,142896,142773],{"class":271},[41,142898,142776],{"class":5354},[41,142900,15710],{"class":275},[41,142902,142903,142905,142907,142909,142911,142913,142915,142917],{"class":43,"line":62},[41,142904,142783],{"class":54},[41,142906,79910],{"class":275},[41,142908,48237],{"class":58},[41,142910,51540],{"class":275},[41,142912,142792],{"class":58},[41,142914,276],{"class":275},[41,142916,465],{"class":58},[41,142918,142799],{"class":275},[41,142920,142921,142923,142925,142927,142929,142931,142933,142935,142937],{"class":43,"line":70},[41,142922,142804],{"class":54},[41,142924,79910],{"class":275},[41,142926,48237],{"class":58},[41,142928,51540],{"class":275},[41,142930,142792],{"class":58},[41,142932,276],{"class":275},[41,142934,584],{"class":58},[41,142936,51595],{"class":271},[41,142938,142799],{"class":275},[41,142940,142941],{"class":43,"line":76},[41,142942,1706],{"class":275},[41,142944,142945],{"class":43,"line":83},[41,142946,142829],{"class":47},[41,142948,142949,142951],{"class":43,"line":89},[41,142950,51714],{"class":51403},[41,142952,15710],{"class":275},[41,142954,142955,142957,142959,142961,142963,142965,142967,142969,142971,142973,142975],{"class":43,"line":96},[41,142956,142840],{"class":58},[41,142958,51540],{"class":275},[41,142960,135341],{"class":58},[41,142962,25221],{"class":58},[41,142964,968],{"class":271},[41,142966,78783],{"class":58},[41,142968,4231],{"class":58},[41,142970,968],{"class":271},[41,142972,142857],{"class":58},[41,142974,142860],{"class":58},[41,142976,1434],{"class":275},[41,142978,142979],{"class":43,"line":104},[41,142980,1706],{"class":275},[20,142982,142983],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[241,142985,142987],{"id":142986},"_1823-知识点回顾","18.2.3 知识点回顾",[32,142989,142990],{"className":126655,"code":128824,"language":126657,"meta":37,"style":37},[24,142991,142992,142998,143008],{"__ignoreMap":37},[41,142993,142994,142996],{"class":43,"line":44},[41,142995,51714],{"class":51403},[41,142997,15710],{"class":275},[41,142999,143000,143002,143004,143006],{"class":43,"line":51},[41,143001,128837],{"class":58},[41,143003,51540],{"class":275},[41,143005,61839],{"class":58},[41,143007,1434],{"class":275},[41,143009,143010],{"class":43,"line":62},[41,143011,1706],{"class":275},[15,143013,143015],{"id":143014},"_183-3d-转换","18.3 3D 转换",[20,143017,143018],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[241,143020,143022],{"id":143021},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1603,143024],{"style":126511,"src":143025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[241,143027,143029],{"id":143028},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1603,143031],{"style":126511,"src":143032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[20,143034,143035],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[20,143037,143038],{},"translate3d的效果需要搭配透视perspective来使用",[1603,143040],{"style":126511,"src":143041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[241,143043,143045],{"id":143044},"_1833-透视-perspective","18.3.3 透视 perspective",[1603,143047],{"style":126511,"src":143048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[20,143050,143051],{},"透视写在父盒子上，单位为像素",[241,143053,143055],{"id":143054},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22136,143057,143059],{"id":143058},"_18341-分开解释","18.3.4.1 分开解释",[1603,143061],{"style":126511,"src":143062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1603,143064],{"style":126511,"src":143065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1603,143067],{"style":126511,"src":143068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[20,143070,143071],{},"总结来说就是左手原则",[22136,143073,143075],{"id":143074},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1603,143077],{"style":126511,"src":143078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[241,143080,143082],{"id":143081},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1603,143084],{"style":126511,"src":143085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1603,143087],{"style":126511,"src":143088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[32,143090,143092],{"className":126655,"code":143091,"language":126657,"meta":37,"style":37},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[24,143093,143094,143100,143113,143130],{"__ignoreMap":37},[41,143095,143096,143098],{"class":43,"line":44},[41,143097,51714],{"class":51403},[41,143099,15710],{"class":275},[41,143101,143102,143105,143107,143109,143111],{"class":43,"line":51},[41,143103,143104],{"class":58},"  perspective",[41,143106,51540],{"class":275},[41,143108,65177],{"class":58},[41,143110,51595],{"class":271},[41,143112,1434],{"class":275},[41,143114,143115,143117,143119,143122,143124,143126,143128],{"class":43,"line":62},[41,143116,136639],{"class":58},[41,143118,51540],{"class":275},[41,143120,143121],{"class":58},"rotateX",[41,143123,276],{"class":275},[41,143125,802],{"class":58},[41,143127,142482],{"class":271},[41,143129,2857],{"class":275},[41,143131,143132],{"class":43,"line":70},[41,143133,1706],{"class":275},[241,143135,143137],{"id":143136},"_1836-案例","18.3.6 案例",[22136,143139,143141],{"id":143140},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1603,143143],{"style":126511,"src":143144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1603,143146],{"style":126511,"src":143147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1603,143149],{"style":126511,"src":143150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[32,143152,143154],{"className":126655,"code":143153,"language":126657,"meta":37,"style":37},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[24,143155,143156,143161,143167,143179],{"__ignoreMap":37},[41,143157,143158],{"class":43,"line":44},[41,143159,143160],{"class":47},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[41,143162,143163,143165],{"class":43,"line":51},[41,143164,133652],{"class":54},[41,143166,15710],{"class":275},[41,143168,143169,143171,143173,143175,143177],{"class":43,"line":62},[41,143170,143104],{"class":58},[41,143172,51540],{"class":275},[41,143174,65177],{"class":58},[41,143176,51595],{"class":271},[41,143178,1434],{"class":275},[41,143180,143181],{"class":43,"line":70},[41,143182,1706],{"class":275},[22136,143184,143186],{"id":143185},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1603,143188],{"style":126511,"src":143189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[32,143191,143192],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,143193,143194,143198,143212,143216],{"__ignoreMap":37},[41,143195,143196],{"class":43,"line":44},[41,143197,130766],{"class":47},[41,143199,143200,143202,143204,143206,143208,143210],{"class":43,"line":51},[41,143201,1183],{"class":275},[41,143203,51714],{"class":51403},[41,143205,53589],{"class":54},[41,143207,321],{"class":275},[41,143209,130779],{"class":378},[41,143211,51410],{"class":275},[41,143213,143214],{"class":43,"line":62},[41,143215,130786],{"class":275},[41,143217,143218,143220,143222],{"class":43,"line":70},[41,143219,51888],{"class":275},[41,143221,51714],{"class":51403},[41,143223,51410],{"class":275},[22136,143225,143227],{"id":143226},"_18363-旋转木马","18.3.6.3 旋转木马",[1603,143229],{"style":126511,"src":143230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[32,143232,143233],{"className":126655,"code":142458,"language":126657,"meta":37,"style":37},[24,143234,143235,143241,143257],{"__ignoreMap":37},[41,143236,143237,143239],{"class":43,"line":44},[41,143238,51714],{"class":51403},[41,143240,15710],{"class":275},[41,143242,143243,143245,143247,143249,143251,143253,143255],{"class":43,"line":51},[41,143244,136639],{"class":58},[41,143246,51540],{"class":275},[41,143248,142475],{"class":58},[41,143250,276],{"class":275},[41,143252,802],{"class":58},[41,143254,142482],{"class":271},[41,143256,2857],{"class":275},[41,143258,143259],{"class":43,"line":62},[41,143260,1706],{"class":275},[189,143262,143263],{},"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":37,"searchDepth":51,"depth":51,"links":143265},[143266,143273],{"id":142361,"depth":51,"text":142362,"children":143267},[143268,143269,143270,143271,143272],{"id":142385,"depth":62,"text":142386},{"id":142440,"depth":62,"text":142441},{"id":142565,"depth":62,"text":142566},{"id":142668,"depth":62,"text":142669},{"id":142986,"depth":62,"text":142987},{"id":143014,"depth":51,"text":143015,"children":143274},[143275,143276,143277,143278,143279,143280],{"id":143021,"depth":62,"text":143022},{"id":143028,"depth":62,"text":143029},{"id":143044,"depth":62,"text":143045},{"id":143054,"depth":62,"text":143055},{"id":143081,"depth":62,"text":143082},{"id":143136,"depth":62,"text":143137},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142353,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143287,"title":143288,"body":143289,"description":196,"extension":197,"meta":143492,"navigation":79,"path":143493,"seo":143494,"stem":143495,"__hash__":143496},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143290,"toc":143481},[143291,143294,143298,143301,143304,143308,143311,143314,143317,143321,143324,143328,143331,143335,143338,143342,143356,143360,143385,143388,143391,143408,143412,143416,143419,143422,143426,143429,143432,143450,143454,143457,143471,143475,143478],[10,143292,143288],{"id":143293},"_19-移动端基础-前缀现状与视口",[15,143295,143297],{"id":143296},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1603,143299],{"style":126511,"src":143300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[20,143302,143303],{},"意思就是加个前缀，增加兼容性",[15,143305,143307],{"id":143306},"_192-移动端现状认识","19.2 移动端现状认识",[1603,143309],{"style":126511,"src":143310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[20,143312,143313],{},"调试方法：",[1603,143315],{"style":126511,"src":143316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[15,143318,143320],{"id":143319},"_193-视口","19.3 视口",[20,143322,143323],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[241,143325,143327],{"id":143326},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1603,143329],{"style":126511,"src":143330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[241,143332,143334],{"id":143333},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1603,143336],{"style":126511,"src":143337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[241,143339,143341],{"id":143340},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1280,143343,143344,143347,143350,143353],{},[227,143345,143346],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[227,143348,143349],{},"理想视口，对设备来讲，是最理想的视口尺寸",[227,143351,143352],{},"需要手动添写meta视口标签通知浏览器操作",[227,143354,143355],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[241,143357,143359],{"id":143358},"_1934-meta视口标签","19.3.4 meta视口标签",[32,143361,143363],{"className":127402,"code":143362,"language":127404,"meta":37,"style":37},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[24,143364,143365],{"__ignoreMap":37},[41,143366,143367,143369,143371,143373,143375,143377,143379,143381,143383],{"class":43,"line":44},[41,143368,1183],{"class":275},[41,143370,51447],{"class":51403},[41,143372,15058],{"class":54},[41,143374,321],{"class":275},[41,143376,51494],{"class":378},[41,143378,51474],{"class":54},[41,143380,321],{"class":275},[41,143382,51501],{"class":378},[41,143384,51410],{"class":275},[1603,143386],{"style":126511,"src":143387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[20,143389,143390],{},"标准视口设置：",[224,143392,143393,143396,143399,143402,143405],{},[227,143394,143395],{},"视口宽度和设备保持一致",[227,143397,143398],{},"视口的默认缩放比例1.0",[227,143400,143401],{},"不允许用户自行缩放",[227,143403,143404],{},"最大允许的缩放比例1.0",[227,143406,143407],{},"最小允许的缩放比例1.0",[241,143409,143411],{"id":143410},"_1935-二倍图","19.3.5 二倍图",[22136,143413,143415],{"id":143414},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1603,143417],{"style":126511,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1603,143420],{"style":126511,"src":143421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22136,143423,143425],{"id":143424},"_19352-多倍图","19.3.5.2 多倍图",[1603,143427],{"style":126511,"src":143428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[20,143430,143431],{},"二倍图法，代码如下：",[32,143433,143435],{"className":126655,"code":143434,"language":126657,"meta":37,"style":37},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[24,143436,143437,143442],{"__ignoreMap":37},[41,143438,143439],{"class":43,"line":44},[41,143440,143441],{"class":47},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[41,143443,143444,143447],{"class":43,"line":51},[41,143445,143446],{"class":51403},"background-size",[41,143448,143449],{"class":275},": 50% 50%;\n",[22136,143451,143453],{"id":143452},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1603,143455],{"style":126511,"src":143456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[224,143458,143459,143462,143465,143468],{},[227,143460,143461],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[227,143463,143464],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[227,143466,143467],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[227,143469,143470],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22136,143472,143474],{"id":143473},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1603,143476],{"style":126511,"src":143477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[189,143479,143480],{},"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":37,"searchDepth":51,"depth":51,"links":143482},[143483,143484,143485],{"id":143296,"depth":51,"text":143297},{"id":143306,"depth":51,"text":143307},{"id":143319,"depth":51,"text":143320,"children":143486},[143487,143488,143489,143490,143491],{"id":143326,"depth":62,"text":143327},{"id":143333,"depth":62,"text":143334},{"id":143340,"depth":62,"text":143341},{"id":143358,"depth":62,"text":143359},{"id":143410,"depth":62,"text":143411},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143288,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143498,"title":143499,"body":143500,"description":196,"extension":197,"meta":144377,"navigation":79,"path":144378,"seo":144379,"stem":144380,"__hash__":144381},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143501,"toc":144361},[143502,143505,143509,143516,143519,143526,143529,143534,143537,143541,143545,143552,143555,143558,143562,143565,143568,143571,143574,143577,143581,143584,143588,143590,143593,143596,143599,143602,143604,143607,143609,143639,143641,143671,143675,143678,143682,143685,143702,143705,143708,143784,143786,143789,143792,143795,143798,143800,143803,143806,143810,143832,143835,143838,143842,143845,143851,143854,143858,143861,143864,143868,143871,143874,143877,143881,143884,143887,143890,143893,143897,143900,143904,143911,143914,143917,143920,143923,143933,143936,143939,143946,143949,143953,143956,143959,143963,143966,143969,143972,144017,144020,144023,144026,144028,144157,144159,144197,144200,144203,144205,144323,144325,144359],[10,143503,143499],{"id":143504},"_20-移动端布局实战上篇",[15,143506,143508],{"id":143507},"_201-移动端主流方案","20.1 移动端主流方案",[224,143510,143511],{},[227,143512,143513],{},[423,143514,143515],{},"单独移动端页面（主流）",[1603,143517],{"style":126511,"src":143518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[224,143520,143521],{"start":51},[227,143522,143523],{},[423,143524,143525],{},"响应式兼容PC移动端",[1603,143527],{"style":126511,"src":143528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[224,143530,143531],{"start":62},[227,143532,143533],{},"两种页面选型布局方式",[1603,143535],{"style":126511,"src":143536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[15,143538,143540],{"id":143539},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[241,143542,143544],{"id":143543},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[20,143546,143547,143548],{},"官网地址： ",[511,143549,143550],{"href":143550,"rel":143551},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24001],[1603,143553],{"style":126511,"src":143554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1603,143556],{"style":126511,"src":143557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[241,143559,143561],{"id":143560},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1603,143563],{"style":126511,"src":143564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1603,143566],{"style":126511,"src":143567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[20,143569,143570],{},"去除高亮：",[20,143572,143573],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[20,143575,143576],{},"-webkit- tap-highlight-color: transparent;",[15,143578,143580],{"id":143579},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1603,143582],{"style":126511,"src":143583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[15,143585,143587],{"id":143586},"_204-流式布局案例","20.4 流式布局案例",[20,143589,305],{},[20,143591,143592],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[20,143594,143595],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[20,143597,143598],{},"图片格式：",[1603,143600],{"style":126511,"src":143601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[20,143603,135698],{},[1603,143605],{"style":126511,"src":143606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[20,143608,140025],{},[32,143610,143611],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,143612,143613],{"__ignoreMap":37},[41,143614,143615,143617,143619,143621,143623,143625,143627,143629,143631,143633,143635,143637],{"class":43,"line":44},[41,143616,1183],{"class":275},[41,143618,1603],{"class":51403},[41,143620,55342],{"class":54},[41,143622,321],{"class":275},[41,143624,134172],{"class":378},[41,143626,55350],{"class":54},[41,143628,321],{"class":275},[41,143630,134179],{"class":378},[41,143632,134182],{"class":54},[41,143634,321],{"class":275},[41,143636,134187],{"class":378},[41,143638,51410],{"class":275},[20,143640,140114],{},[32,143642,143643],{"className":127402,"code":134157,"language":127404,"meta":37,"style":37},[24,143644,143645],{"__ignoreMap":37},[41,143646,143647,143649,143651,143653,143655,143657,143659,143661,143663,143665,143667,143669],{"class":43,"line":44},[41,143648,1183],{"class":275},[41,143650,1603],{"class":51403},[41,143652,55342],{"class":54},[41,143654,321],{"class":275},[41,143656,134172],{"class":378},[41,143658,55350],{"class":54},[41,143660,321],{"class":275},[41,143662,134179],{"class":378},[41,143664,134182],{"class":54},[41,143666,321],{"class":275},[41,143668,134187],{"class":378},[41,143670,51410],{"class":275},[15,143672,143674],{"id":143673},"_205-flex布局","20.5 flex布局",[1603,143676],{"style":126511,"src":143677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[241,143679,143681],{"id":143680},"_2051-布局原理","20.5.1 布局原理",[20,143683,143684],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1280,143686,143687,143690,143693,143696,143699],{},[227,143688,143689],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[227,143691,143692],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[227,143694,143695],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[227,143697,143698],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[227,143700,143701],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[20,143703,143704],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[20,143706,143707],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[32,143709,143711],{"className":126655,"code":143710,"language":126657,"meta":37,"style":37},"\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",[24,143712,143713,143718,143725,143735,143747,143758,143769,143780],{"__ignoreMap":37},[41,143714,143715],{"class":43,"line":44},[41,143716,143717],{"class":47},"\u002F* Flex 弹性布局 *\u002F\n",[41,143719,143720,143723],{"class":43,"line":51},[41,143721,143722],{"class":54},".container",[41,143724,15710],{"class":275},[41,143726,143727,143729,143731,143733],{"class":43,"line":62},[41,143728,128271],{"class":58},[41,143730,51540],{"class":275},[41,143732,51580],{"class":58},[41,143734,1434],{"class":275},[41,143736,143737,143740,143742,143745],{"class":43,"line":70},[41,143738,143739],{"class":58},"  flex-direction",[41,143741,51540],{"class":275},[41,143743,143744],{"class":58},"row",[41,143746,1434],{"class":275},[41,143748,143749,143752,143754,143756],{"class":43,"line":76},[41,143750,143751],{"class":58},"  justify-content",[41,143753,51540],{"class":275},[41,143755,51771],{"class":58},[41,143757,1434],{"class":275},[41,143759,143760,143763,143765,143767],{"class":43,"line":83},[41,143761,143762],{"class":58},"  align-items",[41,143764,51540],{"class":275},[41,143766,51695],{"class":58},[41,143768,1434],{"class":275},[41,143770,143771,143774,143776,143778],{"class":43,"line":89},[41,143772,143773],{"class":58},"  flex-wrap",[41,143775,51540],{"class":275},[41,143777,78713],{"class":58},[41,143779,1434],{"class":275},[41,143781,143782],{"class":43,"line":96},[41,143783,1706],{"class":275},[20,143785,70556],{},[20,143787,143788],{},".form-item .male-label {",[20,143790,143791],{},"   margin-right: 20px;",[20,143793,143794],{},"   display: inline-flex;",[20,143796,143797],{},"   align-items: center;",[20,143799,1219],{},[1603,143801],{"style":126511,"src":143802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1603,143804],{"style":126511,"src":143805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[241,143807,143809],{"id":143808},"_2052-常见父项属性","20.5.2 常见父项属性",[224,143811,143812,143815,143818,143821,143824,143827,143830],{},[227,143813,143814],{},"flex-direction：设置主轴的方向",[227,143816,143817],{},"justify-content：设置主轴上的子元素排列方式",[227,143819,143820],{},"flex-wrap：设置子元素是否换行",[227,143822,143823],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[227,143825,143826],{},"align-items：设置侧轴上的子元素排列方式（单行）",[227,143828,143829],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[227,143831,143814],{},[1603,143833],{"style":126511,"src":143834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1603,143836],{"style":126511,"src":143837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[224,143839,143840],{"start":51},[227,143841,143817],{},[1603,143843],{"style":126511,"src":143844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[20,143846,143847,143850],{},[24,143848,143849],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[20,143852,143853],{},"跟着主轴走",[224,143855,143856],{"start":62},[227,143857,143820],{},[1603,143859],{"style":126511,"src":143860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[20,143862,143863],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[224,143865,143866],{"start":70},[227,143867,143823],{},[1603,143869],{"style":126511,"src":143870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[20,143872,143873],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[20,143875,143876],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[224,143878,143879],{"start":76},[227,143880,143826],{},[1603,143882],{"style":126511,"src":143883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[20,143885,143886],{},"align-items与align-content之间的区别：",[20,143888,143889],{},"单找items，多找content",[1603,143891],{"style":126511,"src":143892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[224,143894,143895],{"start":83},[227,143896,143829],{},[1603,143898],{"style":126511,"src":143899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[241,143901,143903],{"id":143902},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[224,143905,143906],{},[227,143907,143908],{},[423,143909,143910],{},"flex 属性",[20,143912,143913],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1603,143915],{"style":126511,"src":143916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[20,143918,143919],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[20,143921,143922],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[224,143924,143925],{"start":51},[227,143926,143927,13933,143930],{},[423,143928,143929],{},"align-self",[423,143931,143932],{},"控制子项自己在侧轴上的排列方式",[1603,143934],{"style":126511,"src":143935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[20,143937,143938],{},"单个子盒子在父盒子侧轴上的排列方式",[224,143940,143941],{"start":62},[227,143942,143943,143945],{},[423,143944,95400],{}," 属性定义项目的排列顺序",[1603,143947],{"style":126511,"src":143948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[241,143950,143952],{"id":143951},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1603,143954],{"style":126511,"src":143955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[20,143957,143958],{},"必须要添加浏览器的私有前缀",[241,143960,143962],{"id":143961},"_2055-携程网首页案例","20.5.5 携程网首页案例",[20,143964,143965],{},"学到最重要的知识：",[20,143967,143968],{},"flex处理这样的布局思路",[1603,143970],{"style":126511,"src":143971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[32,143973,143975],{"className":126655,"code":143974,"language":126657,"meta":37,"style":37},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[24,143976,143977,143983,143993,144003,144013],{"__ignoreMap":37},[41,143978,143979,143981],{"class":43,"line":44},[41,143980,143722],{"class":54},[41,143982,15710],{"class":275},[41,143984,143985,143987,143989,143991],{"class":43,"line":51},[41,143986,128271],{"class":58},[41,143988,51540],{"class":275},[41,143990,51580],{"class":58},[41,143992,1434],{"class":275},[41,143994,143995,143997,143999,144001],{"class":43,"line":62},[41,143996,143751],{"class":58},[41,143998,51540],{"class":275},[41,144000,51695],{"class":58},[41,144002,1434],{"class":275},[41,144004,144005,144007,144009,144011],{"class":43,"line":70},[41,144006,143762],{"class":58},[41,144008,51540],{"class":275},[41,144010,51695],{"class":58},[41,144012,1434],{"class":275},[41,144014,144015],{"class":43,"line":76},[41,144016,1706],{"class":275},[20,144018,144019],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[20,144021,144022],{},"使用属性选择器",[1603,144024],{"style":126511,"src":144025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[20,144027,68992],{},[32,144029,144031],{"className":127402,"code":144030,"language":127404,"meta":37,"style":37},"\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",[24,144032,144033,144038,144052,144057,144077,144082,144101,144106,144125,144130,144149],{"__ignoreMap":37},[41,144034,144035],{"class":43,"line":44},[41,144036,144037],{"class":47},"\u003C!-- 携程网移动端案例结构 -->\n",[41,144039,144040,144042,144044,144046,144048,144050],{"class":43,"line":51},[41,144041,1183],{"class":275},[41,144043,51714],{"class":51403},[41,144045,53589],{"class":54},[41,144047,321],{"class":275},[41,144049,92426],{"class":378},[41,144051,51410],{"class":275},[41,144053,144054],{"class":43,"line":62},[41,144055,144056],{"class":47},"  \u003C!-- 搜索栏 -->\n",[41,144058,144059,144061,144063,144065,144067,144070,144073,144075],{"class":43,"line":70},[41,144060,52247],{"class":275},[41,144062,51714],{"class":51403},[41,144064,53589],{"class":54},[41,144066,321],{"class":275},[41,144068,144069],{"class":378},"\"search-index\"",[41,144071,144072],{"class":275},">...\u003C\u002F",[41,144074,51714],{"class":51403},[41,144076,51410],{"class":275},[41,144078,144079],{"class":43,"line":76},[41,144080,144081],{"class":47},"  \u003C!-- 焦点图 -->\n",[41,144083,144084,144086,144088,144090,144092,144095,144097,144099],{"class":43,"line":83},[41,144085,52247],{"class":275},[41,144087,51714],{"class":51403},[41,144089,53589],{"class":54},[41,144091,321],{"class":275},[41,144093,144094],{"class":378},"\"focus\"",[41,144096,144072],{"class":275},[41,144098,51714],{"class":51403},[41,144100,51410],{"class":275},[41,144102,144103],{"class":43,"line":89},[41,144104,144105],{"class":47},"  \u003C!-- 主导航 -->\n",[41,144107,144108,144110,144112,144114,144116,144119,144121,144123],{"class":43,"line":96},[41,144109,52247],{"class":275},[41,144111,51714],{"class":51403},[41,144113,53589],{"class":54},[41,144115,321],{"class":275},[41,144117,144118],{"class":378},"\"local-nav\"",[41,144120,144072],{"class":275},[41,144122,51714],{"class":51403},[41,144124,51410],{"class":275},[41,144126,144127],{"class":43,"line":104},[41,144128,144129],{"class":47},"  \u003C!-- 子导航 -->\n",[41,144131,144132,144134,144136,144138,144140,144143,144145,144147],{"class":43,"line":176},[41,144133,52247],{"class":275},[41,144135,51714],{"class":51403},[41,144137,53589],{"class":54},[41,144139,321],{"class":275},[41,144141,144142],{"class":378},"\"nav-common\"",[41,144144,144072],{"class":275},[41,144146,51714],{"class":51403},[41,144148,51410],{"class":275},[41,144150,144151,144153,144155],{"class":43,"line":184},[41,144152,51888],{"class":275},[41,144154,51714],{"class":51403},[41,144156,51410],{"class":275},[20,144158,70556],{},[32,144160,144161],{"className":126655,"code":137107,"language":126657,"meta":37,"style":37},[24,144162,144163,144177,144193],{"__ignoreMap":37},[41,144164,144165,144167,144169,144171,144173,144175],{"class":43,"line":44},[41,144166,53924],{"class":51403},[41,144168,1163],{"class":275},[41,144170,103210],{"class":54},[41,144172,321],{"class":271},[41,144174,62802],{"class":378},[41,144176,137124],{"class":275},[41,144178,144179,144181,144183,144185,144187,144189,144191],{"class":43,"line":51},[41,144180,70999],{"class":58},[41,144182,51540],{"class":275},[41,144184,26],{"class":58},[41,144186,51595],{"class":271},[41,144188,51624],{"class":58},[41,144190,130235],{"class":58},[41,144192,1434],{"class":275},[41,144194,144195],{"class":43,"line":62},[41,144196,1706],{"class":275},[20,144198,144199],{},"总代码和效果展示：",[1603,144201],{"style":126511,"src":144202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[20,144204,68992],{},[32,144206,144207],{"className":127402,"code":144030,"language":127404,"meta":37,"style":37},[24,144208,144209,144213,144227,144231,144249,144253,144271,144275,144293,144297,144315],{"__ignoreMap":37},[41,144210,144211],{"class":43,"line":44},[41,144212,144037],{"class":47},[41,144214,144215,144217,144219,144221,144223,144225],{"class":43,"line":51},[41,144216,1183],{"class":275},[41,144218,51714],{"class":51403},[41,144220,53589],{"class":54},[41,144222,321],{"class":275},[41,144224,92426],{"class":378},[41,144226,51410],{"class":275},[41,144228,144229],{"class":43,"line":62},[41,144230,144056],{"class":47},[41,144232,144233,144235,144237,144239,144241,144243,144245,144247],{"class":43,"line":70},[41,144234,52247],{"class":275},[41,144236,51714],{"class":51403},[41,144238,53589],{"class":54},[41,144240,321],{"class":275},[41,144242,144069],{"class":378},[41,144244,144072],{"class":275},[41,144246,51714],{"class":51403},[41,144248,51410],{"class":275},[41,144250,144251],{"class":43,"line":76},[41,144252,144081],{"class":47},[41,144254,144255,144257,144259,144261,144263,144265,144267,144269],{"class":43,"line":83},[41,144256,52247],{"class":275},[41,144258,51714],{"class":51403},[41,144260,53589],{"class":54},[41,144262,321],{"class":275},[41,144264,144094],{"class":378},[41,144266,144072],{"class":275},[41,144268,51714],{"class":51403},[41,144270,51410],{"class":275},[41,144272,144273],{"class":43,"line":89},[41,144274,144105],{"class":47},[41,144276,144277,144279,144281,144283,144285,144287,144289,144291],{"class":43,"line":96},[41,144278,52247],{"class":275},[41,144280,51714],{"class":51403},[41,144282,53589],{"class":54},[41,144284,321],{"class":275},[41,144286,144118],{"class":378},[41,144288,144072],{"class":275},[41,144290,51714],{"class":51403},[41,144292,51410],{"class":275},[41,144294,144295],{"class":43,"line":104},[41,144296,144129],{"class":47},[41,144298,144299,144301,144303,144305,144307,144309,144311,144313],{"class":43,"line":176},[41,144300,52247],{"class":275},[41,144302,51714],{"class":51403},[41,144304,53589],{"class":54},[41,144306,321],{"class":275},[41,144308,144142],{"class":378},[41,144310,144072],{"class":275},[41,144312,51714],{"class":51403},[41,144314,51410],{"class":275},[41,144316,144317,144319,144321],{"class":43,"line":184},[41,144318,51888],{"class":275},[41,144320,51714],{"class":51403},[41,144322,51410],{"class":275},[20,144324,70556],{},[32,144326,144327],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,144328,144329,144333,144347,144351],{"__ignoreMap":37},[41,144330,144331],{"class":43,"line":44},[41,144332,130766],{"class":47},[41,144334,144335,144337,144339,144341,144343,144345],{"class":43,"line":51},[41,144336,1183],{"class":275},[41,144338,51714],{"class":51403},[41,144340,53589],{"class":54},[41,144342,321],{"class":275},[41,144344,130779],{"class":378},[41,144346,51410],{"class":275},[41,144348,144349],{"class":43,"line":62},[41,144350,130786],{"class":275},[41,144352,144353,144355,144357],{"class":43,"line":70},[41,144354,51888],{"class":275},[41,144356,51714],{"class":51403},[41,144358,51410],{"class":275},[189,144360,138056],{},{"title":37,"searchDepth":51,"depth":51,"links":144362},[144363,144364,144368,144369,144370],{"id":143507,"depth":51,"text":143508},{"id":143539,"depth":51,"text":143540,"children":144365},[144366,144367],{"id":143543,"depth":62,"text":143544},{"id":143560,"depth":62,"text":143561},{"id":143579,"depth":51,"text":143580},{"id":143586,"depth":51,"text":143587},{"id":143673,"depth":51,"text":143674,"children":144371},[144372,144373,144374,144375,144376],{"id":143680,"depth":62,"text":143681},{"id":143808,"depth":62,"text":143809},{"id":143902,"depth":62,"text":143903},{"id":143951,"depth":62,"text":143952},{"id":143961,"depth":62,"text":143962},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143499,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144383,"title":144384,"body":144385,"description":196,"extension":197,"meta":145612,"navigation":79,"path":145613,"seo":145614,"stem":145615,"__hash__":145616},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144386,"toc":145590},[144387,144390,144394,144398,144401,144404,144408,144413,144416,144419,144422,144425,144428,144485,144488,144493,144496,144499,144503,144514,144518,144521,144524,144531,144536,144540,144543,144549,144552,144556,144559,144566,144569,144572,144579,144582,144589,144592,144595,144602,144605,144608,144610,144627,144631,144634,144637,144640,144644,144647,144650,144653,144656,144659,144662,144664,144667,144670,144732,144735,144845,144852,144858,144861,144864,144868,144871,144875,144880,144883,144890,144893,144899,144904,144907,144910,144913,144916,144919,144922,144925,144928,144984,144986,145012,145016,145019,145022,145025,145033,145036,145039,145043,145099,145102,145106,145112,145123,145126,145131,145134,145137,145143,145146,145149,145152,145155,145158,145161,145164,145167,145192,145198,145201,145204,145207,145210,145213,145216,145221,145224,145227,145230,145238,145241,145248,145251,145254,145256,145280,145282,145285,145288,145291,145294,145297,145300,145303,145337,145340,145343,145377,145384,145387,145390,145393,145396,145399,145402,145409,145412,145415,145418,145421,145428,145431,145434,145441,145444,145447,145451,145454,145457,145460,145463,145466,145469,145472,145475,145477,145501,145503,145527,145531,145542,145545,145548,145551,145554,145557,145560,145563,145566,145569,145572,145575,145578,145581,145584,145587],[10,144388,144384],{"id":144389},"_21-移动端布局实战下篇",[15,144391,144393],{"id":144392},"_211-rem适配布局","21.1 rem适配布局",[241,144395,144397],{"id":144396},"_2111-rem单位","21.1.1 rem单位",[1603,144399],{"style":126511,"src":144400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[20,144402,144403],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[241,144405,144407],{"id":144406},"_2112-媒体查询","21.1.2 媒体查询",[224,144409,144410],{},[227,144411,144412],{},"参数介绍",[1603,144414],{"style":126511,"src":144415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1603,144417],{"style":126511,"src":144418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1603,144420],{"style":126511,"src":144421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1603,144423],{"style":126511,"src":144424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1603,144426],{"style":126511,"src":144427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[32,144429,144431],{"className":126655,"code":144430,"language":126657,"meta":37,"style":37},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[24,144432,144433,144438,144457,144464,144477,144481],{"__ignoreMap":37},[41,144434,144435],{"class":43,"line":44},[41,144436,144437],{"class":47},"\u002F* 媒体查询 *\u002F\n",[41,144439,144440,144443,144445,144448,144450,144453,144455],{"class":43,"line":51},[41,144441,144442],{"class":271},"@media",[41,144444,1798],{"class":275},[41,144446,144447],{"class":58},"max-width",[41,144449,51540],{"class":275},[41,144451,144452],{"class":58},"768",[41,144454,51595],{"class":271},[41,144456,12580],{"class":275},[41,144458,144459,144462],{"class":43,"line":62},[41,144460,144461],{"class":54},"  .container",[41,144463,15710],{"class":275},[41,144465,144466,144469,144471,144473,144475],{"class":43,"line":70},[41,144467,144468],{"class":58},"    width",[41,144470,51540],{"class":275},[41,144472,584],{"class":58},[41,144474,601],{"class":271},[41,144476,1434],{"class":275},[41,144478,144479],{"class":43,"line":76},[41,144480,127451],{"class":275},[41,144482,144483],{"class":43,"line":83},[41,144484,1706],{"class":275},[20,144486,144487],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[224,144489,144490],{"start":51},[227,144491,144492],{},"引入资源",[1603,144494],{"style":126511,"src":144495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[20,144497,144498],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[241,144500,144502],{"id":144501},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1280,144504,144505,144508,144511],{},[227,144506,144507],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[227,144509,144510],{},"媒体查询可以根据不同设备宽度来修改样式",[227,144512,144513],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[15,144515,144517],{"id":144516},"_212-less基础","21.2 Less基础",[20,144519,144520],{},"css冗余度较高，不利于复用，没有很好的计算能力",[20,144522,144523],{},"Less可以解决该问题，它是css的扩展语言",[20,144525,144526,144527],{},"Less中文网址： ",[511,144528,144529],{"href":144529,"rel":144530},"http:\u002F\u002Flesscss.cn\u002F",[24001],[20,144532,144533],{},[423,144534,144535],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[241,144537,144539],{"id":144538},"_2121-less安装","21.2.1 less安装",[20,144541,144542],{},"如果使用vscode，则无需进行下方安装步骤",[20,144544,144545],{},[511,144546,144547],{"href":144547,"rel":144548},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24001],[1603,144550],{"style":126511,"src":144551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[241,144553,144555],{"id":144554},"_2122-less使用","21.2.2 less使用",[20,144557,144558],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[224,144560,144561],{},[227,144562,144563],{},[423,144564,144565],{},"Less 变量",[1603,144567],{"style":126511,"src":144568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1603,144570],{"style":126511,"src":144571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[224,144573,144574],{"start":51},[227,144575,144576],{},[423,144577,144578],{},"Less 编译",[1603,144580],{"style":126511,"src":144581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[224,144583,144584],{"start":62},[227,144585,144586],{},[423,144587,144588],{},"Less 嵌套",[1603,144590],{"style":126511,"src":144591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1603,144593],{"style":126511,"src":144594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[224,144596,144597],{"start":70},[227,144598,144599],{},[423,144600,144601],{},"Less 运算",[1603,144603],{"style":126511,"src":144604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[20,144606,144607],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[20,144609,305],{},[1280,144611,144612,144615,144618,144621,144624],{},[227,144613,144614],{},"乘号（*）和除号（\u002F）的写法",[227,144616,144617],{},"运算符中间左右有个空格隔开 1px + 5",[227,144619,144620],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[227,144622,144623],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[227,144625,144626],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[15,144628,144630],{"id":144629},"_213-rem-适配方案","21.3 rem 适配方案",[20,144632,144633],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[20,144635,144636],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1603,144638],{"style":126511,"src":144639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[241,144641,144643],{"id":144642},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[20,144645,144646],{},"rem + 媒体查询 + less 技术",[1603,144648],{"style":126511,"src":144649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[20,144651,144652],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[20,144654,144655],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1603,144657],{"style":126511,"src":144658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[20,144660,144661],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[20,144663,14771],{},[1603,144665],{"style":126511,"src":144666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[20,144668,144669],{},"index.html:",[32,144671,144673],{"className":126655,"code":144672,"language":126657,"meta":37,"style":37},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[24,144674,144675,144680,144686,144702,144706,144712,144728],{"__ignoreMap":37},[41,144676,144677],{"class":43,"line":44},[41,144678,144679],{"class":47},"\u002F* rem 适配方案 *\u002F\n",[41,144681,144682,144684],{"class":43,"line":51},[41,144683,50738],{"class":51403},[41,144685,15710],{"class":275},[41,144687,144688,144690,144692,144695,144697,144699],{"class":43,"line":62},[41,144689,70729],{"class":58},[41,144691,51540],{"class":275},[41,144693,144694],{"class":58},"62.5",[41,144696,601],{"class":271},[41,144698,130518],{"class":275},[41,144700,144701],{"class":47},"\u002F* 1rem = 10px *\u002F\n",[41,144703,144704],{"class":43,"line":70},[41,144705,1706],{"class":275},[41,144707,144708,144710],{"class":43,"line":76},[41,144709,130503],{"class":54},[41,144711,15710],{"class":275},[41,144713,144714,144716,144718,144720,144723,144725],{"class":43,"line":83},[41,144715,70671],{"class":58},[41,144717,51540],{"class":275},[41,144719,719],{"class":58},[41,144721,144722],{"class":271},"rem",[41,144724,130518],{"class":275},[41,144726,144727],{"class":47},"\u002F* 100px *\u002F\n",[41,144729,144730],{"class":43,"line":89},[41,144731,1706],{"class":275},[20,144733,144734],{},"common.less",[32,144736,144738],{"className":126655,"code":144737,"language":126657,"meta":37,"style":37},"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",[24,144739,144740,144746,144761,144765,144771,144785,144789,144793,144797,144803,144817,144821,144827,144841],{"__ignoreMap":37},[41,144741,144742,144744],{"class":43,"line":44},[41,144743,50738],{"class":51403},[41,144745,15710],{"class":275},[41,144747,144748,144750,144752,144754,144756,144758],{"class":43,"line":51},[41,144749,70729],{"class":58},[41,144751,51540],{"class":275},[41,144753,144694],{"class":58},[41,144755,601],{"class":271},[41,144757,26170],{"class":275},[41,144759,144760],{"class":47},"\u002F* 10px *\u002F\n",[41,144762,144763],{"class":43,"line":62},[41,144764,1706],{"class":275},[41,144766,144767,144769],{"class":43,"line":70},[41,144768,51714],{"class":51403},[41,144770,15710],{"class":275},[41,144772,144773,144775,144777,144779,144781,144783],{"class":43,"line":76},[41,144774,70671],{"class":58},[41,144776,51540],{"class":275},[41,144778,719],{"class":58},[41,144780,144722],{"class":271},[41,144782,26170],{"class":275},[41,144784,144727],{"class":47},[41,144786,144787],{"class":43,"line":83},[41,144788,1706],{"class":275},[41,144790,144791],{"class":43,"line":89},[41,144792,136116],{"class":275},[41,144794,144795],{"class":43,"line":96},[41,144796,144679],{"class":47},[41,144798,144799,144801],{"class":43,"line":104},[41,144800,50738],{"class":51403},[41,144802,15710],{"class":275},[41,144804,144805,144807,144809,144811,144813,144815],{"class":43,"line":176},[41,144806,70729],{"class":58},[41,144808,51540],{"class":275},[41,144810,144694],{"class":58},[41,144812,601],{"class":271},[41,144814,130518],{"class":275},[41,144816,144701],{"class":47},[41,144818,144819],{"class":43,"line":184},[41,144820,1706],{"class":275},[41,144822,144823,144825],{"class":43,"line":1757},[41,144824,130503],{"class":54},[41,144826,15710],{"class":275},[41,144828,144829,144831,144833,144835,144837,144839],{"class":43,"line":1763},[41,144830,70671],{"class":58},[41,144832,51540],{"class":275},[41,144834,719],{"class":58},[41,144836,144722],{"class":271},[41,144838,130518],{"class":275},[41,144840,144727],{"class":47},[41,144842,144843],{"class":43,"line":1768},[41,144844,1706],{"class":275},[20,144846,144847,144848,144851],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23691,144849,144850],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[32,144853,144856],{"className":144854,"code":144855,"language":5325},[5323],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[24,144857,144855],{"__ignoreMap":37},[20,144859,144860],{},"less保存时会自动变成.css文件",[20,144862,144863],{},"好好搞懂上述代码写法",[241,144865,144867],{"id":144866},"_2132-样式导入样式","21.3.2 样式导入样式",[1603,144869],{"style":126511,"src":144870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[241,144872,144874],{"id":144873},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[224,144876,144877],{},[227,144878,144879],{},"准备工作",[1603,144881],{"style":126511,"src":144882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[20,144884,144885,144886],{},"github地址：",[511,144887,144888],{"href":144888,"rel":144889},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24001],[20,144891,144892],{},"下载之后，将index.js文件拖到项目中就可以了",[20,144894,144895,144896],{},"js文件引入到index.html中使用的是",[24,144897,144898],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[224,144900,144901],{"start":51},[227,144902,144903],{},"vscode插件",[1603,144905],{"style":126511,"src":144906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[20,144908,144909],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[20,144911,144912],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1603,144914],{"style":126511,"src":144915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[20,144917,144918],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1603,144920],{"style":126511,"src":144921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[20,144923,144924],{},"修改成75就可以，alt+z为快捷键",[20,144926,144927],{},"index.css：",[32,144929,144930],{"className":126655,"code":144672,"language":126657,"meta":37,"style":37},[24,144931,144932,144936,144942,144956,144960,144966,144980],{"__ignoreMap":37},[41,144933,144934],{"class":43,"line":44},[41,144935,144679],{"class":47},[41,144937,144938,144940],{"class":43,"line":51},[41,144939,50738],{"class":51403},[41,144941,15710],{"class":275},[41,144943,144944,144946,144948,144950,144952,144954],{"class":43,"line":62},[41,144945,70729],{"class":58},[41,144947,51540],{"class":275},[41,144949,144694],{"class":58},[41,144951,601],{"class":271},[41,144953,130518],{"class":275},[41,144955,144701],{"class":47},[41,144957,144958],{"class":43,"line":70},[41,144959,1706],{"class":275},[41,144961,144962,144964],{"class":43,"line":76},[41,144963,130503],{"class":54},[41,144965,15710],{"class":275},[41,144967,144968,144970,144972,144974,144976,144978],{"class":43,"line":83},[41,144969,70671],{"class":58},[41,144971,51540],{"class":275},[41,144973,719],{"class":58},[41,144975,144722],{"class":271},[41,144977,130518],{"class":275},[41,144979,144727],{"class":47},[41,144981,144982],{"class":43,"line":89},[41,144983,1706],{"class":275},[20,144985,144669],{},[32,144987,144988],{"className":126655,"code":127059,"language":126657,"meta":37,"style":37},[24,144989,144990,144996,145008],{"__ignoreMap":37},[41,144991,144992,144994],{"class":43,"line":44},[41,144993,51903],{"class":51403},[41,144995,15710],{"class":275},[41,144997,144998,145000,145002,145004,145006],{"class":43,"line":51},[41,144999,70729],{"class":58},[41,145001,51540],{"class":275},[41,145003,874],{"class":58},[41,145005,51595],{"class":271},[41,145007,1434],{"class":275},[41,145009,145010],{"class":43,"line":62},[41,145011,1706],{"class":275},[15,145013,145015],{"id":145014},"_214-响应式开发","21.4 响应式开发",[20,145017,145018],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1603,145020],{"style":126511,"src":145021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[20,145023,145024],{},"做法：",[1280,145026,145027,145030],{},[227,145028,145029],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[227,145031,145032],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1603,145034],{"style":126511,"src":145035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[20,145037,145038],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[241,145040,145042],{"id":145041},"_2141-简单代码示范","21.4.1 简单代码示范",[32,145044,145045],{"className":126655,"code":144672,"language":126657,"meta":37,"style":37},[24,145046,145047,145051,145057,145071,145075,145081,145095],{"__ignoreMap":37},[41,145048,145049],{"class":43,"line":44},[41,145050,144679],{"class":47},[41,145052,145053,145055],{"class":43,"line":51},[41,145054,50738],{"class":51403},[41,145056,15710],{"class":275},[41,145058,145059,145061,145063,145065,145067,145069],{"class":43,"line":62},[41,145060,70729],{"class":58},[41,145062,51540],{"class":275},[41,145064,144694],{"class":58},[41,145066,601],{"class":271},[41,145068,130518],{"class":275},[41,145070,144701],{"class":47},[41,145072,145073],{"class":43,"line":70},[41,145074,1706],{"class":275},[41,145076,145077,145079],{"class":43,"line":76},[41,145078,130503],{"class":54},[41,145080,15710],{"class":275},[41,145082,145083,145085,145087,145089,145091,145093],{"class":43,"line":83},[41,145084,70671],{"class":58},[41,145086,51540],{"class":275},[41,145088,719],{"class":58},[41,145090,144722],{"class":271},[41,145092,130518],{"class":275},[41,145094,144727],{"class":47},[41,145096,145097],{"class":43,"line":89},[41,145098,1706],{"class":275},[20,145100,145101],{},"父盒子一般命名为container",[241,145103,145105],{"id":145104},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[20,145107,145108,145109],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[423,145110,145111],{},"使得 Web 开发更加快捷",[1280,145113,145114],{},[227,145115,145116,145117],{},"官网：",[423,145118,145119],{},[511,145120,145121],{"href":145121,"rel":145122},"http:\u002F\u002Fgetbootstrap.com\u002F",[24001],[20,145124,145125],{},"可以直接去官网拿现成的东西",[224,145127,145128],{},[227,145129,145130],{},"Bootstrap的使用",[20,145132,145133],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[20,145135,145136],{},"Bootstrap 使用四步曲：",[20,145138,145139,145142],{},[423,145140,145141],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1603,145144],{"style":126511,"src":145145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[20,145147,145148],{},"打开Bootstrap官网，然后下载",[1603,145150],{"style":126511,"src":145151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1603,145153],{"style":126511,"src":145154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[20,145156,145157],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[20,145159,145160],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[20,145162,145163],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1603,145165],{"style":126511,"src":145166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[32,145168,145170],{"className":126655,"code":145169,"language":126657,"meta":37,"style":37},".center {\n  color: red;\n}\n",[24,145171,145172,145178,145188],{"__ignoreMap":37},[41,145173,145174,145176],{"class":43,"line":44},[41,145175,126946],{"class":54},[41,145177,15710],{"class":275},[41,145179,145180,145182,145184,145186],{"class":43,"line":51},[41,145181,71008],{"class":58},[41,145183,51540],{"class":275},[41,145185,57524],{"class":58},[41,145187,1434],{"class":275},[41,145189,145190],{"class":43,"line":62},[41,145191,1706],{"class":275},[20,145193,145194,145197],{},[24,145195,145196],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1603,145199],{"style":126511,"src":145200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1603,145202],{"style":126511,"src":145203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1603,145205],{"style":126511,"src":145206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[20,145208,145209],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1603,145211],{"style":126511,"src":145212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[20,145214,145215],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[224,145217,145218],{"start":51},[227,145219,145220],{},"布局容器",[1603,145222],{"style":126511,"src":145223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[20,145225,145226],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[20,145228,145229],{},"container-fluid用于移动式布局比较方便",[224,145231,145232],{"start":62},[227,145233,145234,145235],{},"bootstrap ",[423,145236,145237],{},"栅格系统原理",[1603,145239],{"style":126511,"src":145240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[224,145242,145243],{"start":70},[227,145244,145245],{},[423,145246,145247],{},"栅格选项参数",[1603,145249],{"style":126511,"src":145250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[20,145252,145253],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[20,145255,14771],{},[32,145257,145258],{"className":126655,"code":145169,"language":126657,"meta":37,"style":37},[24,145259,145260,145266,145276],{"__ignoreMap":37},[41,145261,145262,145264],{"class":43,"line":44},[41,145263,126946],{"class":54},[41,145265,15710],{"class":275},[41,145267,145268,145270,145272,145274],{"class":43,"line":51},[41,145269,71008],{"class":58},[41,145271,51540],{"class":275},[41,145273,57524],{"class":58},[41,145275,1434],{"class":275},[41,145277,145278],{"class":43,"line":62},[41,145279,1706],{"class":275},[20,145281,135698],{},[1603,145283],{"style":126511,"src":145284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[20,145286,145287],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[20,145289,145290],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[20,145292,145293],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[20,145295,145296],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[20,145298,145299],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[20,145301,145302],{},"汇总展示说明：",[32,145304,145305],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,145306,145307,145311,145325,145329],{"__ignoreMap":37},[41,145308,145309],{"class":43,"line":44},[41,145310,130766],{"class":47},[41,145312,145313,145315,145317,145319,145321,145323],{"class":43,"line":51},[41,145314,1183],{"class":275},[41,145316,51714],{"class":51403},[41,145318,53589],{"class":54},[41,145320,321],{"class":275},[41,145322,130779],{"class":378},[41,145324,51410],{"class":275},[41,145326,145327],{"class":43,"line":62},[41,145328,130786],{"class":275},[41,145330,145331,145333,145335],{"class":43,"line":70},[41,145332,51888],{"class":275},[41,145334,51714],{"class":51403},[41,145336,51410],{"class":275},[1603,145338],{"style":126511,"src":145339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[20,145341,145342],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[32,145344,145345],{"className":127402,"code":130759,"language":127404,"meta":37,"style":37},[24,145346,145347,145351,145365,145369],{"__ignoreMap":37},[41,145348,145349],{"class":43,"line":44},[41,145350,130766],{"class":47},[41,145352,145353,145355,145357,145359,145361,145363],{"class":43,"line":51},[41,145354,1183],{"class":275},[41,145356,51714],{"class":51403},[41,145358,53589],{"class":54},[41,145360,321],{"class":275},[41,145362,130779],{"class":378},[41,145364,51410],{"class":275},[41,145366,145367],{"class":43,"line":62},[41,145368,130786],{"class":275},[41,145370,145371,145373,145375],{"class":43,"line":70},[41,145372,51888],{"class":275},[41,145374,51714],{"class":51403},[41,145376,51410],{"class":275},[224,145378,145379],{"start":76},[227,145380,145381],{},[423,145382,145383],{},"列嵌套",[1603,145385],{"style":126511,"src":145386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[20,145388,145389],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[20,145391,145392],{},"没加row内部这样：",[1603,145394],{"style":126511,"src":145395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[20,145397,145398],{},"加上row之后内部为：",[1603,145400],{"style":126511,"src":145401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[224,145403,145404],{"start":83},[227,145405,145406],{},[423,145407,145408],{},"列偏移",[1603,145410],{"style":126511,"src":145411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[20,145413,145414],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[20,145416,145417],{},"要加偏移量，即偏移份数",[20,145419,145420],{},"偏移的份数=12-两个盒子的份数",[224,145422,145423],{"start":89},[227,145424,145425],{},[423,145426,145427],{},"列排序",[1603,145429],{"style":126511,"src":145430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[20,145432,145433],{},"pull拉左；push推右",[224,145435,145436],{"start":96},[227,145437,145438],{},[423,145439,145440],{},"响应式工具",[1603,145442],{"style":126511,"src":145443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[20,145445,145446],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[241,145448,145450],{"id":145449},"_2143-响应式小项目","21.4.3 响应式小项目",[20,145452,145453],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[20,145455,145456],{},"ul {",[20,145458,145459],{},"list-style: none;",[20,145461,145462],{},"margin:0;",[20,145464,145465],{},"padding:0; }",[1603,145467],{"style":126511,"src":145468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1603,145470],{"style":126511,"src":145471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[20,145473,145474],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[20,145476,68992],{},[32,145478,145479],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,145480,145481,145487,145497],{"__ignoreMap":37},[41,145482,145483,145485],{"class":43,"line":44},[41,145484,130503],{"class":54},[41,145486,15710],{"class":275},[41,145488,145489,145491,145493,145495],{"class":43,"line":51},[41,145490,131135],{"class":58},[41,145492,51540],{"class":275},[41,145494,23874],{"class":58},[41,145496,1434],{"class":275},[41,145498,145499],{"class":43,"line":62},[41,145500,1706],{"class":275},[20,145502,70556],{},[32,145504,145505],{"className":126655,"code":139325,"language":126657,"meta":37,"style":37},[24,145506,145507,145513,145523],{"__ignoreMap":37},[41,145508,145509,145511],{"class":43,"line":44},[41,145510,130503],{"class":54},[41,145512,15710],{"class":275},[41,145514,145515,145517,145519,145521],{"class":43,"line":51},[41,145516,131135],{"class":58},[41,145518,51540],{"class":275},[41,145520,23874],{"class":58},[41,145522,1434],{"class":275},[41,145524,145525],{"class":43,"line":62},[41,145526,1706],{"class":275},[15,145528,145530],{"id":145529},"_215-swiper-插件使用","21.5 swiper 插件使用",[1280,145532,145533,145536,145539],{},[227,145534,145535],{},"下载需要的css和js文件html页面中 引入相关文件",[227,145537,145538],{},"官网找到类似案例，复制html结构，css样式 js 语法",[227,145540,145541],{},"根据需求定制修改模块",[1603,145543],{"style":126511,"src":145544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[20,145546,145547],{},"解压后将这两部分放到项目中",[1603,145549],{"style":126511,"src":145550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[20,145552,145553],{},"这个插件可以帮助我们实现轮播图效果",[20,145555,145556],{},"用法：",[1603,145558],{"style":126511,"src":145559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[20,145561,145562],{},"找到自己喜欢的",[1603,145564],{"style":126511,"src":145565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[20,145567,145568],{},"右键，查看网页源代码",[1603,145570],{"style":126511,"src":145571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[20,145573,145574],{},"复制人家的结构内容",[20,145576,145577],{},"然后去看API文档：",[1603,145579],{"style":126511,"src":145580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[20,145582,145583],{},"可以看看如何修改样式",[20,145585,145586],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[189,145588,145589],{},"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":37,"searchDepth":51,"depth":51,"links":145591},[145592,145597,145601,145606,145611],{"id":144392,"depth":51,"text":144393,"children":145593},[145594,145595,145596],{"id":144396,"depth":62,"text":144397},{"id":144406,"depth":62,"text":144407},{"id":144501,"depth":62,"text":144502},{"id":144516,"depth":51,"text":144517,"children":145598},[145599,145600],{"id":144538,"depth":62,"text":144539},{"id":144554,"depth":62,"text":144555},{"id":144629,"depth":51,"text":144630,"children":145602},[145603,145604,145605],{"id":144642,"depth":62,"text":144643},{"id":144866,"depth":62,"text":144867},{"id":144873,"depth":62,"text":144874},{"id":145014,"depth":51,"text":145015,"children":145607},[145608,145609,145610],{"id":145041,"depth":62,"text":145042},{"id":145104,"depth":62,"text":145105},{"id":145449,"depth":62,"text":145450},{"id":145529,"depth":51,"text":145530},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144384,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145618,"title":145619,"body":145620,"description":196,"extension":197,"meta":145840,"navigation":79,"path":145841,"seo":145842,"stem":145843,"__hash__":145844},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145621,"toc":145836},[145622,145625,145629,145632,145647,145652,145655,145660,145695,145700,145712,145717,145730,145735,145752,145757,145777,145782,145800,145803,145806,145809,145812,145816,145819,145822,145825,145828,145831,145834],[10,145623,145619],{"id":145624},"_22-代码提交与新型相对单位",[15,145626,145628],{"id":145627},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[20,145630,145631],{},"法1：",[224,145633,145634,145641,145644],{},[227,145635,145636,145637],{},"登录网站注册：",[511,145638,145639],{"href":145639,"rel":145640},"https:\u002F\u002Fgitee.com\u002F",[24001],[227,145642,145643],{},"码云创建新的仓库",[227,145645,145646],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1280,145648,145649],{},[227,145650,145651],{},"在网站根目录右键-- Git Bash Here",[1603,145653],{"style":126511,"src":145654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1280,145656,145657],{},[227,145658,145659],{},"如果是第一次利用git提交，请配置好全局选项",[32,145661,145663],{"className":117399,"code":145662,"language":117401,"meta":37,"style":37},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[24,145664,145665,145681],{"__ignoreMap":37},[41,145666,145667,145670,145672,145675,145678],{"class":43,"line":44},[41,145668,145669],{"class":54},"git",[41,145671,119822],{"class":378},[41,145673,145674],{"class":58}," --global",[41,145676,145677],{"class":378}," user.name",[41,145679,145680],{"class":378}," \"你的名字\"\n",[41,145682,145683,145685,145687,145689,145692],{"class":43,"line":51},[41,145684,145669],{"class":54},[41,145686,119822],{"class":378},[41,145688,145674],{"class":58},[41,145690,145691],{"class":378}," user.email",[41,145693,145694],{"class":378}," \"你的邮箱\"\n",[1280,145696,145697],{},[227,145698,145699],{},"初始化仓库",[32,145701,145703],{"className":117399,"code":145702,"language":117401,"meta":37,"style":37},"git init\n",[24,145704,145705],{"__ignoreMap":37},[41,145706,145707,145709],{"class":43,"line":44},[41,145708,145669],{"class":54},[41,145710,145711],{"class":378}," init\n",[1280,145713,145714],{},[227,145715,145716],{},"把本地文件放到暂存区",[32,145718,145720],{"className":117399,"code":145719,"language":117401,"meta":37,"style":37},"git add .\n",[24,145721,145722],{"__ignoreMap":37},[41,145723,145724,145726,145728],{"class":43,"line":44},[41,145725,145669],{"class":54},[41,145727,5347],{"class":378},[41,145729,28844],{"class":378},[1280,145731,145732],{},[227,145733,145734],{},"把本地文件放到本地仓库里面",[32,145736,145738],{"className":117399,"code":145737,"language":117401,"meta":37,"style":37},"git commit -m \"first commit\"\n",[24,145739,145740],{"__ignoreMap":37},[41,145741,145742,145744,145747,145749],{"class":43,"line":44},[41,145743,145669],{"class":54},[41,145745,145746],{"class":378}," commit",[41,145748,100985],{"class":58},[41,145750,145751],{"class":378}," \"first commit\"\n",[1280,145753,145754],{},[227,145755,145756],{},"链接远程仓库",[32,145758,145760],{"className":117399,"code":145759,"language":117401,"meta":37,"style":37},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[24,145761,145762],{"__ignoreMap":37},[41,145763,145764,145766,145769,145771,145774],{"class":43,"line":44},[41,145765,145669],{"class":54},[41,145767,145768],{"class":378}," remote",[41,145770,5347],{"class":378},[41,145772,145773],{"class":378}," origin",[41,145775,145776],{"class":378}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1280,145778,145779],{},[227,145780,145781],{},"把本地仓库的文件推送到远程仓库 push",[32,145783,145785],{"className":117399,"code":145784,"language":117401,"meta":37,"style":37},"git push -u origin master\n",[24,145786,145787],{"__ignoreMap":37},[41,145788,145789,145791,145793,145795,145797],{"class":43,"line":44},[41,145790,145669],{"class":54},[41,145792,29119],{"class":378},[41,145794,28393],{"class":58},[41,145796,145773],{"class":378},[41,145798,145799],{"class":378}," master\n",[1603,145801],{"style":126511,"src":145802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[20,145804,145805],{},"上方方法暂未实现，后边学完git后在整",[20,145807,145808],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1603,145810],{"style":126511,"src":145811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[15,145813,145815],{"id":145814},"_222-新型相对单位","22.2 新型相对单位",[1603,145817],{"style":126511,"src":145818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1603,145820],{"style":126511,"src":145821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[20,145823,145824],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[20,145826,145827],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1603,145829],{"style":126511,"src":145830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[20,145832,145833],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[189,145835,24094],{},{"title":37,"searchDepth":51,"depth":51,"links":145837},[145838,145839],{"id":145627,"depth":51,"text":145628},{"id":145814,"depth":51,"text":145815},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145619,"description":196},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145846,"title":145847,"body":145848,"description":145852,"extension":197,"meta":145853,"navigation":79,"path":145854,"seo":145855,"stem":145856,"__hash__":145857},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145849,"toc":145850},[],{"title":37,"searchDepth":51,"depth":51,"links":145851},[],"自己正经开始学编程的第一门语言！",{"category":92942},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145847,"description":145852},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145859,"title":145860,"body":145861,"description":196,"extension":197,"meta":147008,"navigation":79,"path":147009,"seo":147010,"stem":147011,"__hash__":147012},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145862,"toc":146984},[145863,145866,145870,145873,145876,145901,145904,145910,145914,145917,145944,145947,145987,145990,146002,146005,146011,146015,146019,146046,146063,146070,146074,146077,146103,146106,146110,146113,146153,146156,146173,146179,146183,146188,146232,146235,146253,146256,146324,146328,146335,146338,146353,146356,146365,146368,146379,146382,146391,146394,146411,146414,146429,146433,146437,146440,146442,146462,146466,146469,146472,146483,146486,146492,146496,146502,146529,146532,146544,146547,146558,146561,146567,146571,146577,146627,146630,146672,146675,146708,146711,146745,146749,146752,146772,146775,146811,146814,146827,146831,146835,146841,146844,146857,146861,146864,146870,146873,146877,146880,146883,146932,146936,146952,146958,146965,146971,146981],[10,145864,145860],{"id":145865},"_1-python环境与第一个程序",[15,145867,145869],{"id":145868},"_11-什么是python","1.1 什么是Python",[20,145871,145872],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[20,145874,145875],{},"理解 Python 时抓住三个关键词：",[224,145877,145878,145881,145884],{},[227,145879,145880],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[227,145882,145883],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[227,145885,145886,145887,486,145890,486,145893,486,145896,486,145898,28488],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[24,145888,145889],{},"os",[24,145891,145892],{},"sys",[24,145894,145895],{},"json",[24,145897,57963],{},[24,145899,145900],{},"datetime",[20,145902,145903],{},"Python 程序的运行链路：",[32,145905,145908],{"className":145906,"code":145907,"language":5325,"meta":37},[5323],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[24,145909,145907],{"__ignoreMap":37},[15,145911,145913],{"id":145912},"_12-python解释器","1.2 Python解释器",[20,145915,145916],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[32,145918,145920],{"className":34,"code":145919,"language":36,"meta":37,"style":37},"python --version\npython3 --version\npython\npython3\n",[24,145921,145922,145928,145934,145939],{"__ignoreMap":37},[41,145923,145924,145926],{"class":43,"line":44},[41,145925,30483],{"class":54},[41,145927,26396],{"class":58},[41,145929,145930,145932],{"class":43,"line":51},[41,145931,100982],{"class":54},[41,145933,26396],{"class":58},[41,145935,145936],{"class":43,"line":62},[41,145937,145938],{"class":54},"python\n",[41,145940,145941],{"class":43,"line":70},[41,145942,145943],{"class":54},"python3\n",[20,145945,145946],{},"进入交互模式后，可以直接输入表达式：",[32,145948,145950],{"className":30481,"code":145949,"language":30483,"meta":37,"style":37},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[24,145951,145952,145963,145968,145982],{"__ignoreMap":37},[41,145953,145954,145957,145959,145961],{"class":43,"line":44},[41,145955,145956],{"class":271},">>>",[41,145958,25221],{"class":58},[41,145960,45669],{"class":271},[41,145962,47826],{"class":58},[41,145964,145965],{"class":43,"line":51},[41,145966,145967],{"class":58},"3\n",[41,145969,145970,145972,145975,145977,145980],{"class":43,"line":62},[41,145971,145956],{"class":271},[41,145973,145974],{"class":58}," print",[41,145976,276],{"class":275},[41,145978,145979],{"class":378},"\"hello python\"",[41,145981,282],{"class":275},[41,145983,145984],{"class":43,"line":70},[41,145985,145986],{"class":275},"hello python\n",[20,145988,145989],{},"退出交互模式：",[32,145991,145993],{"className":30481,"code":145992,"language":30483,"meta":37,"style":37},"exit()\n",[24,145994,145995],{"__ignoreMap":37},[41,145996,145997,146000],{"class":43,"line":44},[41,145998,145999],{"class":58},"exit",[41,146001,2115],{"class":275},[20,146003,146004],{},"或使用快捷键：",[32,146006,146009],{"className":146007,"code":146008,"language":5325,"meta":37},[5323],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[24,146010,146008],{"__ignoreMap":37},[15,146012,146014],{"id":146013},"_13-安装python","1.3 安装Python",[241,146016,146018],{"id":146017},"_131-windows安装","1.3.1 Windows安装",[224,146020,146021,146028,146031,146037,146043],{},[227,146022,146023,146024],{},"打开 Python 官网：",[511,146025,146026],{"href":146026,"rel":146027},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24001],[227,146029,146030],{},"下载 Windows Installer。",[227,146032,146033,146034,28488],{},"安装时勾选 ",[24,146035,146036],{},"Add Python to PATH",[227,146038,146039,146040,28488],{},"点击 ",[24,146041,146042],{},"Install Now",[227,146044,146045],{},"安装完成后打开命令提示符验证：",[32,146047,146049],{"className":34,"code":146048,"language":36,"meta":37,"style":37},"python --version\npip --version\n",[24,146050,146051,146057],{"__ignoreMap":37},[41,146052,146053,146055],{"class":43,"line":44},[41,146054,30483],{"class":54},[41,146056,26396],{"class":58},[41,146058,146059,146061],{"class":43,"line":51},[41,146060,23967],{"class":54},[41,146062,26396],{"class":58},[20,146064,146065,146066,146069],{},"如果提示 ",[24,146067,146068],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[241,146071,146073],{"id":146072},"_132-macos安装","1.3.2 macOS安装",[20,146075,146076],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[32,146078,146080],{"className":34,"code":146079,"language":36,"meta":37,"style":37},"brew install python\npython3 --version\npip3 --version\n",[24,146081,146082,146091,146097],{"__ignoreMap":37},[41,146083,146084,146087,146089],{"class":43,"line":44},[41,146085,146086],{"class":54},"brew",[41,146088,23970],{"class":378},[41,146090,124421],{"class":378},[41,146092,146093,146095],{"class":43,"line":51},[41,146094,100982],{"class":54},[41,146096,26396],{"class":58},[41,146098,146099,146101],{"class":43,"line":62},[41,146100,119803],{"class":54},[41,146102,26396],{"class":58},[20,146104,146105],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[241,146107,146109],{"id":146108},"_133-linux安装","1.3.3 Linux安装",[20,146111,146112],{},"Ubuntu\u002FDebian：",[32,146114,146116],{"className":34,"code":146115,"language":36,"meta":37,"style":37},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[24,146117,146118,146126,146141,146147],{"__ignoreMap":37},[41,146119,146120,146122,146124],{"class":43,"line":44},[41,146121,24713],{"class":54},[41,146123,117420],{"class":378},[41,146125,26345],{"class":378},[41,146127,146128,146130,146132,146134,146136,146138],{"class":43,"line":51},[41,146129,24713],{"class":54},[41,146131,117420],{"class":378},[41,146133,23970],{"class":378},[41,146135,104506],{"class":378},[41,146137,100901],{"class":378},[41,146139,146140],{"class":378}," python3-venv\n",[41,146142,146143,146145],{"class":43,"line":62},[41,146144,100982],{"class":54},[41,146146,26396],{"class":58},[41,146148,146149,146151],{"class":43,"line":70},[41,146150,119803],{"class":54},[41,146152,26396],{"class":58},[20,146154,146155],{},"Fedora：",[32,146157,146159],{"className":34,"code":146158,"language":36,"meta":37,"style":37},"sudo dnf install python3 python3-pip\n",[24,146160,146161],{"__ignoreMap":37},[41,146162,146163,146165,146167,146169,146171],{"class":43,"line":44},[41,146164,24713],{"class":54},[41,146166,26418],{"class":378},[41,146168,23970],{"class":378},[41,146170,104506],{"class":378},[41,146172,119868],{"class":378},[20,146174,146175,146176,146178],{},"Linux 上通常使用 ",[24,146177,100982],{}," 命令，避免和系统旧版本 Python 冲突。",[15,146180,146182],{"id":146181},"_14-pip包管理器","1.4 pip包管理器",[20,146184,146185,146187],{},[24,146186,23967],{}," 用来安装第三方库。",[32,146189,146191],{"className":34,"code":146190,"language":36,"meta":37,"style":37},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[24,146192,146193,146202,146211,146219,146225],{"__ignoreMap":37},[41,146194,146195,146197,146199],{"class":43,"line":44},[41,146196,23967],{"class":54},[41,146198,23970],{"class":378},[41,146200,146201],{"class":378}," requests\n",[41,146203,146204,146206,146209],{"class":43,"line":51},[41,146205,23967],{"class":54},[41,146207,146208],{"class":378}," uninstall",[41,146210,146201],{"class":378},[41,146212,146213,146215,146217],{"class":43,"line":62},[41,146214,23967],{"class":54},[41,146216,117677],{"class":378},[41,146218,146201],{"class":378},[41,146220,146221,146223],{"class":43,"line":70},[41,146222,23967],{"class":54},[41,146224,119058],{"class":378},[41,146226,146227,146229],{"class":43,"line":76},[41,146228,23967],{"class":54},[41,146230,146231],{"class":378}," freeze\n",[20,146233,146234],{},"国内网络较慢时可以临时使用镜像：",[32,146236,146238],{"className":34,"code":146237,"language":36,"meta":37,"style":37},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[24,146239,146240],{"__ignoreMap":37},[41,146241,146242,146244,146246,146249,146251],{"class":43,"line":44},[41,146243,23967],{"class":54},[41,146245,23970],{"class":378},[41,146247,146248],{"class":378}," requests",[41,146250,26533],{"class":58},[41,146252,119831],{"class":378},[20,146254,146255],{},"常见第三方库：",[411,146257,146258,146267],{},[414,146259,146260],{},[417,146261,146262,146265],{},[420,146263,146264],{},"库",[420,146266,102799],{},[458,146268,146269,146277,146284,146292,146300,146308,146316],{},[417,146270,146271,146274],{},[463,146272,146273],{},"requests",[463,146275,146276],{},"网络请求",[417,146278,146279,146281],{},[463,146280,100729],{},[463,146282,146283],{},"数值计算",[417,146285,146286,146289],{},[463,146287,146288],{},"pandas",[463,146290,146291],{},"表格数据处理",[417,146293,146294,146297],{},[463,146295,146296],{},"matplotlib",[463,146298,146299],{},"绘图",[417,146301,146302,146305],{},[463,146303,146304],{},"pyecharts",[463,146306,146307],{},"ECharts 图表",[417,146309,146310,146313],{},[463,146311,146312],{},"flask",[463,146314,146315],{},"Web 后端",[417,146317,146318,146321],{},[463,146319,146320],{},"pytest",[463,146322,146323],{},"自动化测试",[15,146325,146327],{"id":146326},"_15-虚拟环境","1.5 虚拟环境",[20,146329,146330,146331,146334],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[24,146332,146333],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[20,146336,146337],{},"创建虚拟环境：",[32,146339,146341],{"className":34,"code":146340,"language":36,"meta":37,"style":37},"python -m venv .venv\n",[24,146342,146343],{"__ignoreMap":37},[41,146344,146345,146347,146349,146351],{"class":43,"line":44},[41,146346,30483],{"class":54},[41,146348,100985],{"class":58},[41,146350,100988],{"class":378},[41,146352,100991],{"class":378},[20,146354,146355],{},"Windows 激活：",[32,146357,146359],{"className":34,"code":146358,"language":36,"meta":37,"style":37},".venv\\Scripts\\activate\n",[24,146360,146361],{"__ignoreMap":37},[41,146362,146363],{"class":43,"line":44},[41,146364,146358],{"class":54},[20,146366,146367],{},"macOS\u002FLinux 激活：",[32,146369,146371],{"className":34,"code":146370,"language":36,"meta":37,"style":37},"source .venv\u002Fbin\u002Factivate\n",[24,146372,146373],{"__ignoreMap":37},[41,146374,146375,146377],{"class":43,"line":44},[41,146376,100996],{"class":58},[41,146378,100999],{"class":378},[20,146380,146381],{},"退出虚拟环境：",[32,146383,146385],{"className":34,"code":146384,"language":36,"meta":37,"style":37},"deactivate\n",[24,146386,146387],{"__ignoreMap":37},[41,146388,146389],{"class":43,"line":44},[41,146390,146384],{"class":54},[20,146392,146393],{},"保存依赖：",[32,146395,146397],{"className":34,"code":146396,"language":36,"meta":37,"style":37},"pip freeze > requirements.txt\n",[24,146398,146399],{"__ignoreMap":37},[41,146400,146401,146403,146406,146408],{"class":43,"line":44},[41,146402,23967],{"class":54},[41,146404,146405],{"class":378}," freeze",[41,146407,26325],{"class":271},[41,146409,146410],{"class":378}," requirements.txt\n",[20,146412,146413],{},"安装依赖：",[32,146415,146417],{"className":34,"code":146416,"language":36,"meta":37,"style":37},"pip install -r requirements.txt\n",[24,146418,146419],{"__ignoreMap":37},[41,146420,146421,146423,146425,146427],{"class":43,"line":44},[41,146422,23967],{"class":54},[41,146424,23970],{"class":378},[41,146426,119742],{"class":58},[41,146428,146410],{"class":378},[15,146430,146432],{"id":146431},"_16-开发工具","1.6 开发工具",[241,146434,146436],{"id":146435},"_161-pycharm","1.6.1 PyCharm",[20,146438,146439],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[20,146441,122165],{},[224,146443,146444,146447,146450,146456,146459],{},[227,146445,146446],{},"New Project：创建项目。",[227,146448,146449],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[227,146451,146452,146453,126086],{},"New Python File：创建 ",[24,146454,146455],{},".py",[227,146457,146458],{},"Run：运行当前文件。",[227,146460,146461],{},"Debug：断点调试。",[241,146463,146465],{"id":146464},"_162-vs-code","1.6.2 VS Code",[20,146467,146468],{},"VS Code 轻量，适合后续多语言开发。",[20,146470,146471],{},"建议安装插件：",[224,146473,146474,146477,146480],{},[227,146475,146476],{},"Python。",[227,146478,146479],{},"Pylance。",[227,146481,146482],{},"Jupyter。",[20,146484,146485],{},"选择解释器：",[32,146487,146490],{"className":146488,"code":146489,"language":5325,"meta":37},[5323],"Ctrl + Shift + P -> Python: Select Interpreter\n",[24,146491,146489],{"__ignoreMap":37},[15,146493,146495],{"id":146494},"_17-第一个python程序","1.7 第一个Python程序",[20,146497,146498,146499,24755],{},"创建文件 ",[24,146500,146501],{},"hello.py",[32,146503,146505],{"className":30481,"code":146504,"language":30483,"meta":37,"style":37},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[24,146506,146507,146518],{"__ignoreMap":37},[41,146508,146509,146511,146513,146516],{"class":43,"line":44},[41,146510,30518],{"class":58},[41,146512,276],{"class":275},[41,146514,146515],{"class":378},"\"Hello World\"",[41,146517,282],{"class":275},[41,146519,146520,146522,146524,146527],{"class":43,"line":51},[41,146521,30518],{"class":58},[41,146523,276],{"class":275},[41,146525,146526],{"class":378},"\"你好，Python\"",[41,146528,282],{"class":275},[20,146530,146531],{},"在终端运行：",[32,146533,146535],{"className":34,"code":146534,"language":36,"meta":37,"style":37},"python hello.py\n",[24,146536,146537],{"__ignoreMap":37},[41,146538,146539,146541],{"class":43,"line":44},[41,146540,30483],{"class":54},[41,146542,146543],{"class":378}," hello.py\n",[20,146545,146546],{},"或：",[32,146548,146550],{"className":34,"code":146549,"language":36,"meta":37,"style":37},"python3 hello.py\n",[24,146551,146552],{"__ignoreMap":37},[41,146553,146554,146556],{"class":43,"line":44},[41,146555,100982],{"class":54},[41,146557,146543],{"class":378},[20,146559,146560],{},"输出：",[32,146562,146565],{"className":146563,"code":146564,"language":5325,"meta":37},[5323],"Hello World\n你好，Python\n",[24,146566,146564],{"__ignoreMap":37},[15,146568,146570],{"id":146569},"_18-print函数","1.8 print函数",[20,146572,146573,146576],{},[24,146574,146575],{},"print()"," 用来输出内容。",[32,146578,146580],{"className":30481,"code":146579,"language":30483,"meta":37,"style":37},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[24,146581,146582,146592,146602,146612],{"__ignoreMap":37},[41,146583,146584,146586,146588,146590],{"class":43,"line":44},[41,146585,30518],{"class":58},[41,146587,276],{"class":275},[41,146589,5982],{"class":378},[41,146591,282],{"class":275},[41,146593,146594,146596,146598,146600],{"class":43,"line":51},[41,146595,30518],{"class":58},[41,146597,276],{"class":275},[41,146599,584],{"class":58},[41,146601,282],{"class":275},[41,146603,146604,146606,146608,146610],{"class":43,"line":62},[41,146605,30518],{"class":58},[41,146607,276],{"class":275},[41,146609,324],{"class":58},[41,146611,282],{"class":275},[41,146613,146614,146616,146618,146621,146623,146625],{"class":43,"line":70},[41,146615,30518],{"class":58},[41,146617,276],{"class":275},[41,146619,146620],{"class":378},"\"年龄:\"",[41,146622,12573],{"class":275},[41,146624,923],{"class":58},[41,146626,282],{"class":275},[20,146628,146629],{},"多个内容用逗号隔开，默认中间加空格：",[32,146631,146633],{"className":30481,"code":146632,"language":30483,"meta":37,"style":37},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[24,146634,146635,146645,146655],{"__ignoreMap":37},[41,146636,146637,146640,146642],{"class":43,"line":44},[41,146638,146639],{"class":275},"name ",[41,146641,321],{"class":271},[41,146643,146644],{"class":378}," \"张三\"\n",[41,146646,146647,146650,146652],{"class":43,"line":51},[41,146648,146649],{"class":275},"age ",[41,146651,321],{"class":271},[41,146653,146654],{"class":58}," 18\n",[41,146656,146657,146659,146661,146664,146667,146669],{"class":43,"line":62},[41,146658,30518],{"class":58},[41,146660,276],{"class":275},[41,146662,146663],{"class":378},"\"姓名:\"",[41,146665,146666],{"class":275},", name, ",[41,146668,146620],{"class":378},[41,146670,146671],{"class":275},", age)\n",[20,146673,146674],{},"修改分隔符：",[32,146676,146678],{"className":30481,"code":146677,"language":30483,"meta":37,"style":37},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[24,146679,146680],{"__ignoreMap":37},[41,146681,146682,146684,146686,146689,146691,146693,146695,146697,146699,146702,146704,146706],{"class":43,"line":44},[41,146683,30518],{"class":58},[41,146685,276],{"class":275},[41,146687,146688],{"class":378},"\"2024\"",[41,146690,12573],{"class":275},[41,146692,54419],{"class":378},[41,146694,12573],{"class":275},[41,146696,54419],{"class":378},[41,146698,12573],{"class":275},[41,146700,146701],{"class":5354},"sep",[41,146703,321],{"class":271},[41,146705,32586],{"class":378},[41,146707,282],{"class":275},[20,146709,146710],{},"修改结尾符：",[32,146712,146714],{"className":30481,"code":146713,"language":30483,"meta":37,"style":37},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[24,146715,146716,146734],{"__ignoreMap":37},[41,146717,146718,146720,146722,146724,146726,146728,146730,146732],{"class":43,"line":44},[41,146719,30518],{"class":58},[41,146721,276],{"class":275},[41,146723,5982],{"class":378},[41,146725,12573],{"class":275},[41,146727,45904],{"class":5354},[41,146729,321],{"class":271},[41,146731,4497],{"class":378},[41,146733,282],{"class":275},[41,146735,146736,146738,146740,146743],{"class":43,"line":51},[41,146737,30518],{"class":58},[41,146739,276],{"class":275},[41,146741,146742],{"class":378},"\"python\"",[41,146744,282],{"class":275},[15,146746,146748],{"id":146747},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[20,146750,146751],{},"交互运行适合临时验证：",[32,146753,146755],{"className":30481,"code":146754,"language":30483,"meta":37,"style":37},">>> 10 * 3\n30\n",[24,146756,146757,146767],{"__ignoreMap":37},[41,146758,146759,146761,146763,146765],{"class":43,"line":44},[41,146760,145956],{"class":271},[41,146762,2177],{"class":58},[41,146764,6656],{"class":271},[41,146766,120139],{"class":58},[41,146768,146769],{"class":43,"line":51},[41,146770,146771],{"class":58},"30\n",[20,146773,146774],{},"脚本运行适合保存程序：",[32,146776,146778],{"className":30481,"code":146777,"language":30483,"meta":37,"style":37},"price = 8\ncount = 5\nprint(price * count)\n",[24,146779,146780,146790,146799],{"__ignoreMap":37},[41,146781,146782,146785,146787],{"class":43,"line":44},[41,146783,146784],{"class":275},"price ",[41,146786,321],{"class":271},[41,146788,146789],{"class":58}," 8\n",[41,146791,146792,146795,146797],{"class":43,"line":51},[41,146793,146794],{"class":275},"count ",[41,146796,321],{"class":271},[41,146798,54530],{"class":58},[41,146800,146801,146803,146806,146808],{"class":43,"line":62},[41,146802,30518],{"class":58},[41,146804,146805],{"class":275},"(price ",[41,146807,728],{"class":271},[41,146809,146810],{"class":275}," count)\n",[20,146812,146813],{},"实际学习中推荐：",[224,146815,146816,146819,146824],{},[227,146817,146818],{},"临时试一个语法，用交互模式。",[227,146820,146821,146822,126086],{},"写完整练习，用 ",[24,146823,146455],{},[227,146825,146826],{},"写项目，用独立目录和虚拟环境。",[15,146828,146830],{"id":146829},"_110-常见错误","1.10 常见错误",[241,146832,146834],{"id":146833},"_1101-命令找不到","1.10.1 命令找不到",[32,146836,146839],{"className":146837,"code":146838,"language":5325,"meta":37},[5323],"python: command not found\n",[24,146840,146838],{"__ignoreMap":37},[20,146842,146843],{},"原因：",[224,146845,146846,146849,146852],{},[227,146847,146848],{},"没安装 Python。",[227,146850,146851],{},"PATH 没配置。",[227,146853,146854,146855,28488],{},"Linux\u002FmacOS 应该使用 ",[24,146856,100982],{},[241,146858,146860],{"id":146859},"_1102-文件名冲突","1.10.2 文件名冲突",[20,146862,146863],{},"不要把文件命名为：",[32,146865,146868],{"className":146866,"code":146867,"language":5325,"meta":37},[5323],"random.py\njson.py\ntime.py\nrequests.py\n",[24,146869,146867],{"__ignoreMap":37},[20,146871,146872],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[241,146874,146876],{"id":146875},"_1103-中文乱码","1.10.3 中文乱码",[20,146878,146879],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[20,146881,146882],{},"如果读写文件出现乱码，要明确指定编码：",[32,146884,146886],{"className":30481,"code":146885,"language":30483,"meta":37,"style":37},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[24,146887,146888,146922],{"__ignoreMap":37},[41,146889,146890,146892,146895,146897,146900,146902,146905,146907,146910,146912,146915,146917,146919],{"class":43,"line":44},[41,146891,107936],{"class":271},[41,146893,146894],{"class":58}," open",[41,146896,276],{"class":275},[41,146898,146899],{"class":378},"\"data.txt\"",[41,146901,12573],{"class":275},[41,146903,146904],{"class":378},"\"r\"",[41,146906,12573],{"class":275},[41,146908,146909],{"class":5354},"encoding",[41,146911,321],{"class":271},[41,146913,146914],{"class":378},"\"utf-8\"",[41,146916,13852],{"class":275},[41,146918,31486],{"class":271},[41,146920,146921],{"class":275}," f:\n",[41,146923,146924,146927,146929],{"class":43,"line":51},[41,146925,146926],{"class":275},"    content ",[41,146928,321],{"class":271},[41,146930,146931],{"class":275}," f.read()\n",[15,146933,146935],{"id":146934},"_111-本章练习","1.11 本章练习",[224,146937,146938,146941,146947],{},[227,146939,146940],{},"安装 Python，并在终端输出版本号。",[227,146942,146943,146944,146946],{},"新建 ",[24,146945,146501],{},"，输出自己的姓名、年龄、学习目标。",[227,146948,104469,146949,146951],{},[24,146950,146575],{}," 输出下面格式：",[32,146953,146956],{"className":146954,"code":146955,"language":5325,"meta":37},[5323],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[24,146957,146955],{"__ignoreMap":37},[224,146959,146960],{"start":70},[227,146961,104469,146962,146964],{},[24,146963,146701],{}," 输出日期：",[32,146966,146969],{"className":146967,"code":146968,"language":5325,"meta":37},[5323],"2024-10-10\n",[24,146970,146968],{"__ignoreMap":37},[224,146972,146973],{"start":76},[227,146974,104469,146975,146977,146978,146980],{},[24,146976,45904],{}," 让两次 ",[24,146979,146575],{}," 输出在同一行。",[189,146982,146983],{},"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":37,"searchDepth":51,"depth":51,"links":146985},[146986,146987,146988,146993,146994,146995,146999,147000,147001,147002,147007],{"id":145868,"depth":51,"text":145869},{"id":145912,"depth":51,"text":145913},{"id":146013,"depth":51,"text":146014,"children":146989},[146990,146991,146992],{"id":146017,"depth":62,"text":146018},{"id":146072,"depth":62,"text":146073},{"id":146108,"depth":62,"text":146109},{"id":146181,"depth":51,"text":146182},{"id":146326,"depth":51,"text":146327},{"id":146431,"depth":51,"text":146432,"children":146996},[146997,146998],{"id":146435,"depth":62,"text":146436},{"id":146464,"depth":62,"text":146465},{"id":146494,"depth":51,"text":146495},{"id":146569,"depth":51,"text":146570},{"id":146747,"depth":51,"text":146748},{"id":146829,"depth":51,"text":146830,"children":147003},[147004,147005,147006],{"id":146833,"depth":62,"text":146834},{"id":146859,"depth":62,"text":146860},{"id":146875,"depth":62,"text":146876},{"id":146934,"depth":51,"text":146935},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145860,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147014,"title":147015,"body":147016,"description":196,"extension":197,"meta":149420,"navigation":79,"path":149421,"seo":149422,"stem":149423,"__hash__":149424},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147017,"toc":149405},[147018,147021,147025,147028,147031,147048,147051,147093,147096,147100,147103,147106,147143,147146,147180,147183,147275,147279,147293,147296,147323,147326,147330,147433,147440,147443,147460,147464,147471,147660,147663,147736,147740,147743,147827,147830,147862,147866,148070,148073,148077,148083,148185,148188,148444,148448,148451,148454,148468,148470,148656,148660,149022,149028,149032,149035,149159,149162,149341,149344,149348,149381,149385,149402],[10,147019,147015],{"id":147020},"_10-json与pyecharts折线图",[15,147022,147024],{"id":147023},"_101-数据可视化","10.1 数据可视化",[20,147026,147027],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[20,147029,147030],{},"常见图表：",[224,147032,147033,147036,147039,147042,147045],{},[227,147034,147035],{},"折线图：看趋势。",[227,147037,147038],{},"柱状图：看分类对比。",[227,147040,147041],{},"饼图：看占比。",[227,147043,147044],{},"地图：看地域分布。",[227,147046,147047],{},"散点图：看两个变量之间的关系。",[20,147049,147050],{},"Python 可视化常用库：",[411,147052,147053,147061],{},[414,147054,147055],{},[417,147056,147057,147059],{},[420,147058,146264],{},[420,147060,23878],{},[458,147062,147063,147070,147078,147085],{},[417,147064,147065,147067],{},[463,147066,146296],{},[463,147068,147069],{},"基础、经典、可定制",[417,147071,147072,147075],{},[463,147073,147074],{},"seaborn",[463,147076,147077],{},"统计图表更美观",[417,147079,147080,147082],{},[463,147081,146304],{},[463,147083,147084],{},"生成交互式网页图表",[417,147086,147087,147090],{},[463,147088,147089],{},"plotly",[463,147091,147092],{},"交互图表能力强",[20,147094,147095],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[15,147097,147099],{"id":147098},"_102-json回顾","10.2 JSON回顾",[20,147101,147102],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[20,147104,147105],{},"Python 字典：",[32,147107,147109],{"className":30481,"code":147108,"language":30483,"meta":37,"style":37},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[24,147110,147111,147119,147130,147139],{"__ignoreMap":37},[41,147112,147113,147115,147117],{"class":43,"line":44},[41,147114,101761],{"class":275},[41,147116,321],{"class":271},[41,147118,15710],{"class":275},[41,147120,147121,147124,147126,147128],{"class":43,"line":51},[41,147122,147123],{"class":378},"    \"name\"",[41,147125,51540],{"class":275},[41,147127,69372],{"class":378},[41,147129,31569],{"class":275},[41,147131,147132,147135,147137],{"class":43,"line":62},[41,147133,147134],{"class":378},"    \"value\"",[41,147136,51540],{"class":275},[41,147138,97561],{"class":58},[41,147140,147141],{"class":43,"line":70},[41,147142,1706],{"class":275},[20,147144,147145],{},"JSON 字符串：",[32,147147,147150],{"className":147148,"code":147149,"language":145895,"meta":37,"style":37},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[24,147151,147152,147156,147167,147176],{"__ignoreMap":37},[41,147153,147154],{"class":43,"line":44},[41,147155,1687],{"class":275},[41,147157,147158,147161,147163,147165],{"class":43,"line":51},[41,147159,147160],{"class":58},"  \"name\"",[41,147162,51540],{"class":275},[41,147164,69372],{"class":378},[41,147166,31569],{"class":275},[41,147168,147169,147172,147174],{"class":43,"line":62},[41,147170,147171],{"class":58},"  \"value\"",[41,147173,51540],{"class":275},[41,147175,97561],{"class":58},[41,147177,147178],{"class":43,"line":70},[41,147179,1706],{"class":275},[20,147181,147182],{},"Python 与 JSON 的转换：",[32,147184,147186],{"className":30481,"code":147185,"language":30483,"meta":37,"style":37},"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",[24,147187,147188,147195,147199,147224,147228,147247,147254,147258,147268],{"__ignoreMap":37},[41,147189,147190,147192],{"class":43,"line":44},[41,147191,30495],{"class":271},[41,147193,147194],{"class":275}," json\n",[41,147196,147197],{"class":43,"line":51},[41,147198,80],{"emptyLinePlaceholder":79},[41,147200,147201,147203,147205,147207,147209,147211,147213,147215,147218,147220,147222],{"class":43,"line":62},[41,147202,101761],{"class":275},[41,147204,321],{"class":271},[41,147206,4586],{"class":275},[41,147208,62782],{"class":378},[41,147210,51540],{"class":275},[41,147212,69372],{"class":378},[41,147214,12573],{"class":275},[41,147216,147217],{"class":378},"\"value\"",[41,147219,51540],{"class":275},[41,147221,584],{"class":58},[41,147223,1706],{"class":275},[41,147225,147226],{"class":43,"line":70},[41,147227,80],{"emptyLinePlaceholder":79},[41,147229,147230,147233,147235,147238,147241,147243,147245],{"class":43,"line":76},[41,147231,147232],{"class":275},"json_text ",[41,147234,321],{"class":271},[41,147236,147237],{"class":275}," json.dumps(data, ",[41,147239,147240],{"class":5354},"ensure_ascii",[41,147242,321],{"class":271},[41,147244,34090],{"class":58},[41,147246,282],{"class":275},[41,147248,147249,147251],{"class":43,"line":83},[41,147250,30518],{"class":58},[41,147252,147253],{"class":275},"(json_text)\n",[41,147255,147256],{"class":43,"line":89},[41,147257,80],{"emptyLinePlaceholder":79},[41,147259,147260,147263,147265],{"class":43,"line":96},[41,147261,147262],{"class":275},"new_data ",[41,147264,321],{"class":271},[41,147266,147267],{"class":275}," json.loads(json_text)\n",[41,147269,147270,147272],{"class":43,"line":104},[41,147271,30518],{"class":58},[41,147273,147274],{"class":275},"(new_data)\n",[15,147276,147278],{"id":147277},"_103-安装pyecharts","10.3 安装pyecharts",[32,147280,147282],{"className":34,"code":147281,"language":36,"meta":37,"style":37},"pip install pyecharts\n",[24,147283,147284],{"__ignoreMap":37},[41,147285,147286,147288,147290],{"class":43,"line":44},[41,147287,23967],{"class":54},[41,147289,23970],{"class":378},[41,147291,147292],{"class":378}," pyecharts\n",[20,147294,147295],{},"验证：",[32,147297,147299],{"className":30481,"code":147298,"language":30483,"meta":37,"style":37},"import pyecharts\n\nprint(pyecharts.__version__)\n",[24,147300,147301,147307,147311],{"__ignoreMap":37},[41,147302,147303,147305],{"class":43,"line":44},[41,147304,30495],{"class":271},[41,147306,147292],{"class":275},[41,147308,147309],{"class":43,"line":51},[41,147310,80],{"emptyLinePlaceholder":79},[41,147312,147313,147315,147318,147321],{"class":43,"line":62},[41,147314,30518],{"class":58},[41,147316,147317],{"class":275},"(pyecharts.",[41,147319,147320],{"class":58},"__version__",[41,147322,282],{"class":275},[20,147324,147325],{},"如果使用虚拟环境，要先激活环境再安装。",[15,147327,147329],{"id":147328},"_104-第一个折线图","10.4 第一个折线图",[32,147331,147333],{"className":30481,"code":147332,"language":30483,"meta":37,"style":37},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[24,147334,147335,147347,147351,147361,147391,147423],{"__ignoreMap":37},[41,147336,147337,147339,147342,147344],{"class":43,"line":44},[41,147338,30840],{"class":271},[41,147340,147341],{"class":275}," pyecharts.charts ",[41,147343,30495],{"class":271},[41,147345,147346],{"class":275}," Line\n",[41,147348,147349],{"class":43,"line":51},[41,147350,80],{"emptyLinePlaceholder":79},[41,147352,147353,147356,147358],{"class":43,"line":62},[41,147354,147355],{"class":275},"line ",[41,147357,321],{"class":271},[41,147359,147360],{"class":275}," Line()\n",[41,147362,147363,147366,147369,147371,147374,147376,147379,147381,147384,147386,147389],{"class":43,"line":70},[41,147364,147365],{"class":275},"line.add_xaxis([",[41,147367,147368],{"class":378},"\"周一\"",[41,147370,12573],{"class":275},[41,147372,147373],{"class":378},"\"周二\"",[41,147375,12573],{"class":275},[41,147377,147378],{"class":378},"\"周三\"",[41,147380,12573],{"class":275},[41,147382,147383],{"class":378},"\"周四\"",[41,147385,12573],{"class":275},[41,147387,147388],{"class":378},"\"周五\"",[41,147390,4795],{"class":275},[41,147392,147393,147396,147399,147401,147403,147405,147407,147409,147411,147413,147416,147418,147421],{"class":43,"line":76},[41,147394,147395],{"class":275},"line.add_yaxis(",[41,147397,147398],{"class":378},"\"销售额\"",[41,147400,77621],{"class":275},[41,147402,584],{"class":58},[41,147404,12573],{"class":275},[41,147406,1090],{"class":58},[41,147408,12573],{"class":275},[41,147410,1135],{"class":58},[41,147412,12573],{"class":275},[41,147414,147415],{"class":58},"150",[41,147417,12573],{"class":275},[41,147419,147420],{"class":58},"180",[41,147422,4795],{"class":275},[41,147424,147425,147428,147431],{"class":43,"line":83},[41,147426,147427],{"class":275},"line.render(",[41,147429,147430],{"class":378},"\"line.html\"",[41,147432,282],{"class":275},[20,147434,147435,147436,147439],{},"运行后会生成 ",[24,147437,147438],{},"line.html","，用浏览器打开即可看到图表。",[20,147441,147442],{},"核心步骤：",[224,147444,147445,147448,147451,147454,147457],{},[227,147446,147447],{},"导入图表类。",[227,147449,147450],{},"创建图表对象。",[227,147452,147453],{},"添加 x 轴数据。",[227,147455,147456],{},"添加 y 轴数据。",[227,147458,147459],{},"渲染为 HTML。",[15,147461,147463],{"id":147462},"_105-全局配置","10.5 全局配置",[20,147465,147466,147467,147470],{},"常用配置在 ",[24,147468,147469],{},"pyecharts.options"," 中。",[32,147472,147474],{"className":30481,"code":147473,"language":30483,"meta":37,"style":37},"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",[24,147475,147476,147493,147503,147507,147515,147539,147567,147572,147591,147610,147628,147648,147652],{"__ignoreMap":37},[41,147477,147478,147480,147483,147485,147488,147490],{"class":43,"line":44},[41,147479,30840],{"class":271},[41,147481,147482],{"class":275}," pyecharts ",[41,147484,30495],{"class":271},[41,147486,147487],{"class":275}," options ",[41,147489,31486],{"class":271},[41,147491,147492],{"class":275}," opts\n",[41,147494,147495,147497,147499,147501],{"class":43,"line":51},[41,147496,30840],{"class":271},[41,147498,147341],{"class":275},[41,147500,30495],{"class":271},[41,147502,147346],{"class":275},[41,147504,147505],{"class":43,"line":62},[41,147506,80],{"emptyLinePlaceholder":79},[41,147508,147509,147511,147513],{"class":43,"line":70},[41,147510,147355],{"class":275},[41,147512,321],{"class":271},[41,147514,147360],{"class":275},[41,147516,147517,147519,147521,147523,147525,147527,147529,147531,147533,147535,147537],{"class":43,"line":76},[41,147518,147365],{"class":275},[41,147520,147368],{"class":378},[41,147522,12573],{"class":275},[41,147524,147373],{"class":378},[41,147526,12573],{"class":275},[41,147528,147378],{"class":378},[41,147530,12573],{"class":275},[41,147532,147383],{"class":378},[41,147534,12573],{"class":275},[41,147536,147388],{"class":378},[41,147538,4795],{"class":275},[41,147540,147541,147543,147545,147547,147549,147551,147553,147555,147557,147559,147561,147563,147565],{"class":43,"line":83},[41,147542,147395],{"class":275},[41,147544,147398],{"class":378},[41,147546,77621],{"class":275},[41,147548,584],{"class":58},[41,147550,12573],{"class":275},[41,147552,1090],{"class":58},[41,147554,12573],{"class":275},[41,147556,1135],{"class":58},[41,147558,12573],{"class":275},[41,147560,147415],{"class":58},[41,147562,12573],{"class":275},[41,147564,147420],{"class":58},[41,147566,4795],{"class":275},[41,147568,147569],{"class":43,"line":89},[41,147570,147571],{"class":275},"line.set_global_opts(\n",[41,147573,147574,147577,147579,147582,147584,147586,147589],{"class":43,"line":96},[41,147575,147576],{"class":5354},"    title_opts",[41,147578,321],{"class":271},[41,147580,147581],{"class":275},"opts.TitleOpts(",[41,147583,51510],{"class":5354},[41,147585,321],{"class":271},[41,147587,147588],{"class":378},"\"一周销售额\"",[41,147590,38150],{"class":275},[41,147592,147593,147596,147598,147601,147603,147605,147608],{"class":43,"line":104},[41,147594,147595],{"class":5354},"    xaxis_opts",[41,147597,321],{"class":271},[41,147599,147600],{"class":275},"opts.AxisOpts(",[41,147602,79913],{"class":5354},[41,147604,321],{"class":271},[41,147606,147607],{"class":378},"\"日期\"",[41,147609,38150],{"class":275},[41,147611,147612,147615,147617,147619,147621,147623,147626],{"class":43,"line":176},[41,147613,147614],{"class":5354},"    yaxis_opts",[41,147616,321],{"class":271},[41,147618,147600],{"class":275},[41,147620,79913],{"class":5354},[41,147622,321],{"class":271},[41,147624,147625],{"class":378},"\"金额\"",[41,147627,38150],{"class":275},[41,147629,147630,147633,147635,147638,147641,147643,147646],{"class":43,"line":184},[41,147631,147632],{"class":5354},"    tooltip_opts",[41,147634,321],{"class":271},[41,147636,147637],{"class":275},"opts.TooltipOpts(",[41,147639,147640],{"class":5354},"trigger",[41,147642,321],{"class":271},[41,147644,147645],{"class":378},"\"axis\"",[41,147647,38150],{"class":275},[41,147649,147650],{"class":43,"line":1757},[41,147651,282],{"class":275},[41,147653,147654,147656,147658],{"class":43,"line":1763},[41,147655,147427],{"class":275},[41,147657,147430],{"class":378},[41,147659,282],{"class":275},[20,147661,147662],{},"常见全局配置：",[411,147664,147665,147674],{},[414,147666,147667],{},[417,147668,147669,147672],{},[420,147670,147671],{},"配置",[420,147673,102799],{},[458,147675,147676,147686,147696,147706,147716,147726],{},[417,147677,147678,147683],{},[463,147679,147680],{},[24,147681,147682],{},"TitleOpts",[463,147684,147685],{},"标题",[417,147687,147688,147693],{},[463,147689,147690],{},[24,147691,147692],{},"LegendOpts",[463,147694,147695],{},"图例",[417,147697,147698,147703],{},[463,147699,147700],{},[24,147701,147702],{},"TooltipOpts",[463,147704,147705],{},"提示框",[417,147707,147708,147713],{},[463,147709,147710],{},[24,147711,147712],{},"AxisOpts",[463,147714,147715],{},"坐标轴",[417,147717,147718,147723],{},[463,147719,147720],{},[24,147721,147722],{},"VisualMapOpts",[463,147724,147725],{},"视觉映射",[417,147727,147728,147733],{},[463,147729,147730],{},[24,147731,147732],{},"DataZoomOpts",[463,147734,147735],{},"区域缩放",[15,147737,147739],{"id":147738},"_106-系列配置","10.6 系列配置",[20,147741,147742],{},"系列配置作用于某一组数据。",[32,147744,147746],{"className":30481,"code":147745,"language":30483,"meta":37,"style":37},"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",[24,147747,147748,147753,147764,147793,147804,147823],{"__ignoreMap":37},[41,147749,147750],{"class":43,"line":44},[41,147751,147752],{"class":275},"line.add_yaxis(\n",[41,147754,147755,147758,147760,147762],{"class":43,"line":51},[41,147756,147757],{"class":5354},"    series_name",[41,147759,321],{"class":271},[41,147761,147398],{"class":378},[41,147763,31569],{"class":275},[41,147765,147766,147769,147771,147773,147775,147777,147779,147781,147783,147785,147787,147789,147791],{"class":43,"line":62},[41,147767,147768],{"class":5354},"    y_axis",[41,147770,321],{"class":271},[41,147772,1163],{"class":275},[41,147774,584],{"class":58},[41,147776,12573],{"class":275},[41,147778,1090],{"class":58},[41,147780,12573],{"class":275},[41,147782,1135],{"class":58},[41,147784,12573],{"class":275},[41,147786,147415],{"class":58},[41,147788,12573],{"class":275},[41,147790,147420],{"class":58},[41,147792,87939],{"class":275},[41,147794,147795,147798,147800,147802],{"class":43,"line":70},[41,147796,147797],{"class":5354},"    is_smooth",[41,147799,321],{"class":271},[41,147801,31579],{"class":58},[41,147803,31569],{"class":275},[41,147805,147806,147809,147811,147814,147817,147819,147821],{"class":43,"line":76},[41,147807,147808],{"class":5354},"    label_opts",[41,147810,321],{"class":271},[41,147812,147813],{"class":275},"opts.LabelOpts(",[41,147815,147816],{"class":5354},"is_show",[41,147818,321],{"class":271},[41,147820,31579],{"class":58},[41,147822,38150],{"class":275},[41,147824,147825],{"class":43,"line":83},[41,147826,282],{"class":275},[20,147828,147829],{},"常用参数：",[224,147831,147832,147838,147844,147850,147856],{},[227,147833,147834,147837],{},[24,147835,147836],{},"series_name","：系列名称。",[227,147839,147840,147843],{},[24,147841,147842],{},"y_axis","：y 轴数据。",[227,147845,147846,147849],{},[24,147847,147848],{},"is_smooth","：是否平滑曲线。",[227,147851,147852,147855],{},[24,147853,147854],{},"label_opts","：标签配置。",[227,147857,147858,147861],{},[24,147859,147860],{},"symbol_size","：标记点大小。",[15,147863,147865],{"id":147864},"_107-多条折线","10.7 多条折线",[32,147867,147869],{"className":30481,"code":147868,"language":30483,"meta":37,"style":37},"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",[24,147870,147871,147885,147895,147899,147928,147932,147940,147945,147983,148020,148024,148041,148057,148061],{"__ignoreMap":37},[41,147872,147873,147875,147877,147879,147881,147883],{"class":43,"line":44},[41,147874,30840],{"class":271},[41,147876,147482],{"class":275},[41,147878,30495],{"class":271},[41,147880,147487],{"class":275},[41,147882,31486],{"class":271},[41,147884,147492],{"class":275},[41,147886,147887,147889,147891,147893],{"class":43,"line":51},[41,147888,30840],{"class":271},[41,147890,147341],{"class":275},[41,147892,30495],{"class":271},[41,147894,147346],{"class":275},[41,147896,147897],{"class":43,"line":62},[41,147898,80],{"emptyLinePlaceholder":79},[41,147900,147901,147904,147906,147908,147910,147912,147914,147916,147918,147920,147922,147924,147926],{"class":43,"line":70},[41,147902,147903],{"class":275},"dates ",[41,147905,321],{"class":271},[41,147907,52329],{"class":275},[41,147909,147368],{"class":378},[41,147911,12573],{"class":275},[41,147913,147373],{"class":378},[41,147915,12573],{"class":275},[41,147917,147378],{"class":378},[41,147919,12573],{"class":275},[41,147921,147383],{"class":378},[41,147923,12573],{"class":275},[41,147925,147388],{"class":378},[41,147927,33349],{"class":275},[41,147929,147930],{"class":43,"line":76},[41,147931,80],{"emptyLinePlaceholder":79},[41,147933,147934,147936,147938],{"class":43,"line":83},[41,147935,147355],{"class":275},[41,147937,321],{"class":271},[41,147939,147360],{"class":275},[41,147941,147942],{"class":43,"line":89},[41,147943,147944],{"class":275},"line.add_xaxis(dates)\n",[41,147946,147947,147949,147952,147954,147956,147958,147961,147963,147965,147967,147969,147971,147973,147975,147977,147979,147981],{"class":43,"line":96},[41,147948,147395],{"class":275},[41,147950,147951],{"class":378},"\"线上销售\"",[41,147953,77621],{"class":275},[41,147955,584],{"class":58},[41,147957,12573],{"class":275},[41,147959,147960],{"class":58},"130",[41,147962,12573],{"class":275},[41,147964,1090],{"class":58},[41,147966,12573],{"class":275},[41,147968,21186],{"class":58},[41,147970,12573],{"class":275},[41,147972,1862],{"class":58},[41,147974,112305],{"class":275},[41,147976,147848],{"class":5354},[41,147978,321],{"class":271},[41,147980,31579],{"class":58},[41,147982,282],{"class":275},[41,147984,147985,147987,147990,147992,147994,147996,147998,148000,148002,148004,148006,148008,148010,148012,148014,148016,148018],{"class":43,"line":104},[41,147986,147395],{"class":275},[41,147988,147989],{"class":378},"\"线下销售\"",[41,147991,77621],{"class":275},[41,147993,885],{"class":58},[41,147995,12573],{"class":275},[41,147997,1135],{"class":58},[41,147999,12573],{"class":275},[41,148001,584],{"class":58},[41,148003,12573],{"class":275},[41,148005,1090],{"class":58},[41,148007,12573],{"class":275},[41,148009,147415],{"class":58},[41,148011,112305],{"class":275},[41,148013,147848],{"class":5354},[41,148015,321],{"class":271},[41,148017,31579],{"class":58},[41,148019,282],{"class":275},[41,148021,148022],{"class":43,"line":176},[41,148023,147571],{"class":275},[41,148025,148026,148028,148030,148032,148034,148036,148039],{"class":43,"line":184},[41,148027,147576],{"class":5354},[41,148029,321],{"class":271},[41,148031,147581],{"class":275},[41,148033,51510],{"class":5354},[41,148035,321],{"class":271},[41,148037,148038],{"class":378},"\"线上线下销售趋势\"",[41,148040,38150],{"class":275},[41,148042,148043,148045,148047,148049,148051,148053,148055],{"class":43,"line":1757},[41,148044,147632],{"class":5354},[41,148046,321],{"class":271},[41,148048,147637],{"class":275},[41,148050,147640],{"class":5354},[41,148052,321],{"class":271},[41,148054,147645],{"class":378},[41,148056,38150],{"class":275},[41,148058,148059],{"class":43,"line":1763},[41,148060,282],{"class":275},[41,148062,148063,148065,148068],{"class":43,"line":1768},[41,148064,147427],{"class":275},[41,148066,148067],{"class":378},"\"sales.html\"",[41,148069,282],{"class":275},[20,148071,148072],{},"多条折线适合比较不同指标或不同地区。",[15,148074,148076],{"id":148075},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[20,148078,148079,148080,24755],{},"假设 ",[24,148081,148082],{},"sales.json",[32,148084,148086],{"className":147148,"code":148085,"language":145895,"meta":37,"style":37},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[24,148087,148088,148093,148125,148153,148181],{"__ignoreMap":37},[41,148089,148090],{"class":43,"line":44},[41,148091,148092],{"class":275},"[\n",[41,148094,148095,148098,148101,148103,148105,148107,148110,148112,148114,148116,148119,148121,148123],{"class":43,"line":51},[41,148096,148097],{"class":275},"  {",[41,148099,148100],{"class":58},"\"date\"",[41,148102,51540],{"class":275},[41,148104,147368],{"class":378},[41,148106,12573],{"class":275},[41,148108,148109],{"class":58},"\"online\"",[41,148111,51540],{"class":275},[41,148113,584],{"class":58},[41,148115,12573],{"class":275},[41,148117,148118],{"class":58},"\"offline\"",[41,148120,51540],{"class":275},[41,148122,885],{"class":58},[41,148124,5068],{"class":275},[41,148126,148127,148129,148131,148133,148135,148137,148139,148141,148143,148145,148147,148149,148151],{"class":43,"line":62},[41,148128,148097],{"class":275},[41,148130,148100],{"class":58},[41,148132,51540],{"class":275},[41,148134,147373],{"class":378},[41,148136,12573],{"class":275},[41,148138,148109],{"class":58},[41,148140,51540],{"class":275},[41,148142,147960],{"class":58},[41,148144,12573],{"class":275},[41,148146,148118],{"class":58},[41,148148,51540],{"class":275},[41,148150,1135],{"class":58},[41,148152,5068],{"class":275},[41,148154,148155,148157,148159,148161,148163,148165,148167,148169,148171,148173,148175,148177,148179],{"class":43,"line":70},[41,148156,148097],{"class":275},[41,148158,148100],{"class":58},[41,148160,51540],{"class":275},[41,148162,147378],{"class":378},[41,148164,12573],{"class":275},[41,148166,148109],{"class":58},[41,148168,51540],{"class":275},[41,148170,1090],{"class":58},[41,148172,12573],{"class":275},[41,148174,148118],{"class":58},[41,148176,51540],{"class":275},[41,148178,584],{"class":58},[41,148180,1706],{"class":275},[41,148182,148183],{"class":43,"line":76},[41,148184,33349],{"class":275},[20,148186,148187],{},"读取并绘图：",[32,148189,148191],{"className":30481,"code":148190,"language":30483,"meta":37,"style":37},"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",[24,148192,148193,148199,148213,148223,148227,148259,148272,148276,148284,148293,148302,148306,148318,148327,148336,148345,148349,148357,148361,148378,148395,148399,148416,148432,148436],{"__ignoreMap":37},[41,148194,148195,148197],{"class":43,"line":44},[41,148196,30495],{"class":271},[41,148198,147194],{"class":275},[41,148200,148201,148203,148205,148207,148209,148211],{"class":43,"line":51},[41,148202,30840],{"class":271},[41,148204,147482],{"class":275},[41,148206,30495],{"class":271},[41,148208,147487],{"class":275},[41,148210,31486],{"class":271},[41,148212,147492],{"class":275},[41,148214,148215,148217,148219,148221],{"class":43,"line":62},[41,148216,30840],{"class":271},[41,148218,147341],{"class":275},[41,148220,30495],{"class":271},[41,148222,147346],{"class":275},[41,148224,148225],{"class":43,"line":70},[41,148226,80],{"emptyLinePlaceholder":79},[41,148228,148229,148231,148233,148235,148238,148240,148242,148244,148246,148248,148250,148252,148254,148257],{"class":43,"line":76},[41,148230,107936],{"class":271},[41,148232,146894],{"class":58},[41,148234,276],{"class":275},[41,148236,148237],{"class":378},"\"sales.json\"",[41,148239,12573],{"class":275},[41,148241,146904],{"class":378},[41,148243,12573],{"class":275},[41,148245,146909],{"class":5354},[41,148247,321],{"class":271},[41,148249,146914],{"class":378},[41,148251,13852],{"class":275},[41,148253,31486],{"class":271},[41,148255,148256],{"class":5354}," file",[41,148258,3877],{"class":275},[41,148260,148261,148263,148265,148268,148270],{"class":43,"line":83},[41,148262,101524],{"class":275},[41,148264,321],{"class":271},[41,148266,148267],{"class":275}," json.load(",[41,148269,45457],{"class":5354},[41,148271,282],{"class":275},[41,148273,148274],{"class":43,"line":89},[41,148275,80],{"emptyLinePlaceholder":79},[41,148277,148278,148280,148282],{"class":43,"line":96},[41,148279,147903],{"class":275},[41,148281,321],{"class":271},[41,148283,51941],{"class":275},[41,148285,148286,148289,148291],{"class":43,"line":104},[41,148287,148288],{"class":275},"online_sales ",[41,148290,321],{"class":271},[41,148292,51941],{"class":275},[41,148294,148295,148298,148300],{"class":43,"line":176},[41,148296,148297],{"class":275},"offline_sales ",[41,148299,321],{"class":271},[41,148301,51941],{"class":275},[41,148303,148304],{"class":43,"line":184},[41,148305,80],{"emptyLinePlaceholder":79},[41,148307,148308,148310,148313,148315],{"class":43,"line":1757},[41,148309,3163],{"class":271},[41,148311,148312],{"class":275}," item ",[41,148314,26146],{"class":271},[41,148316,148317],{"class":275}," data:\n",[41,148319,148320,148323,148325],{"class":43,"line":1763},[41,148321,148322],{"class":275},"    dates.append(item[",[41,148324,148100],{"class":378},[41,148326,4795],{"class":275},[41,148328,148329,148332,148334],{"class":43,"line":1768},[41,148330,148331],{"class":275},"    online_sales.append(item[",[41,148333,148109],{"class":378},[41,148335,4795],{"class":275},[41,148337,148338,148341,148343],{"class":43,"line":1782},[41,148339,148340],{"class":275},"    offline_sales.append(item[",[41,148342,148118],{"class":378},[41,148344,4795],{"class":275},[41,148346,148347],{"class":43,"line":1787},[41,148348,80],{"emptyLinePlaceholder":79},[41,148350,148351,148353,148355],{"class":43,"line":1793},[41,148352,147355],{"class":275},[41,148354,321],{"class":271},[41,148356,147360],{"class":275},[41,148358,148359],{"class":43,"line":1814},[41,148360,147944],{"class":275},[41,148362,148363,148365,148367,148370,148372,148374,148376],{"class":43,"line":1819},[41,148364,147395],{"class":275},[41,148366,147951],{"class":378},[41,148368,148369],{"class":275},", online_sales, ",[41,148371,147848],{"class":5354},[41,148373,321],{"class":271},[41,148375,31579],{"class":58},[41,148377,282],{"class":275},[41,148379,148380,148382,148384,148387,148389,148391,148393],{"class":43,"line":1833},[41,148381,147395],{"class":275},[41,148383,147989],{"class":378},[41,148385,148386],{"class":275},", offline_sales, ",[41,148388,147848],{"class":5354},[41,148390,321],{"class":271},[41,148392,31579],{"class":58},[41,148394,282],{"class":275},[41,148396,148397],{"class":43,"line":1838},[41,148398,147571],{"class":275},[41,148400,148401,148403,148405,148407,148409,148411,148414],{"class":43,"line":1867},[41,148402,147576],{"class":5354},[41,148404,321],{"class":271},[41,148406,147581],{"class":275},[41,148408,51510],{"class":5354},[41,148410,321],{"class":271},[41,148412,148413],{"class":378},"\"销售趋势\"",[41,148415,38150],{"class":275},[41,148417,148418,148420,148422,148424,148426,148428,148430],{"class":43,"line":1872},[41,148419,147632],{"class":5354},[41,148421,321],{"class":271},[41,148423,147637],{"class":275},[41,148425,147640],{"class":5354},[41,148427,321],{"class":271},[41,148429,147645],{"class":378},[41,148431,38150],{"class":275},[41,148433,148434],{"class":43,"line":1889},[41,148435,282],{"class":275},[41,148437,148438,148440,148442],{"class":43,"line":1894},[41,148439,147427],{"class":275},[41,148441,148067],{"class":378},[41,148443,282],{"class":275},[15,148445,148447],{"id":148446},"_109-数据清洗","10.9 数据清洗",[20,148449,148450],{},"真实数据经常不整齐，需要清洗。",[20,148452,148453],{},"常见问题：",[224,148455,148456,148459,148462,148465],{},[227,148457,148458],{},"数字是字符串。",[227,148460,148461],{},"字段缺失。",[227,148463,148464],{},"空值。",[227,148466,148467],{},"日期格式不统一。",[20,148469,15273],{},[32,148471,148473],{"className":30481,"code":148472,"language":30483,"meta":37,"style":37},"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",[24,148474,148475,148484,148507,148527,148548,148552,148556,148564,148573,148577,148588,148602,148611,148616,148620,148628,148638,148642,148649],{"__ignoreMap":37},[41,148476,148477,148480,148482],{"class":43,"line":44},[41,148478,148479],{"class":275},"raw_data ",[41,148481,321],{"class":271},[41,148483,55550],{"class":275},[41,148485,148486,148489,148491,148493,148495,148497,148500,148502,148505],{"class":43,"line":51},[41,148487,148488],{"class":275},"    {",[41,148490,148100],{"class":378},[41,148492,51540],{"class":275},[41,148494,147368],{"class":378},[41,148496,12573],{"class":275},[41,148498,148499],{"class":378},"\"sales\"",[41,148501,51540],{"class":275},[41,148503,148504],{"class":378},"\"100\"",[41,148506,5068],{"class":275},[41,148508,148509,148511,148513,148515,148517,148519,148521,148523,148525],{"class":43,"line":62},[41,148510,148488],{"class":275},[41,148512,148100],{"class":378},[41,148514,51540],{"class":275},[41,148516,147373],{"class":378},[41,148518,12573],{"class":275},[41,148520,148499],{"class":378},[41,148522,51540],{"class":275},[41,148524,7790],{"class":378},[41,148526,5068],{"class":275},[41,148528,148529,148531,148533,148535,148537,148539,148541,148543,148546],{"class":43,"line":70},[41,148530,148488],{"class":275},[41,148532,148100],{"class":378},[41,148534,51540],{"class":275},[41,148536,147378],{"class":378},[41,148538,12573],{"class":275},[41,148540,148499],{"class":378},[41,148542,51540],{"class":275},[41,148544,148545],{"class":378},"\"120\"",[41,148547,5068],{"class":275},[41,148549,148550],{"class":43,"line":76},[41,148551,33349],{"class":275},[41,148553,148554],{"class":43,"line":83},[41,148555,80],{"emptyLinePlaceholder":79},[41,148557,148558,148560,148562],{"class":43,"line":89},[41,148559,147903],{"class":275},[41,148561,321],{"class":271},[41,148563,51941],{"class":275},[41,148565,148566,148569,148571],{"class":43,"line":96},[41,148567,148568],{"class":275},"sales ",[41,148570,321],{"class":271},[41,148572,51941],{"class":275},[41,148574,148575],{"class":43,"line":104},[41,148576,80],{"emptyLinePlaceholder":79},[41,148578,148579,148581,148583,148585],{"class":43,"line":176},[41,148580,3163],{"class":271},[41,148582,148312],{"class":275},[41,148584,26146],{"class":271},[41,148586,148587],{"class":275}," raw_data:\n",[41,148589,148590,148593,148595,148598,148600],{"class":43,"line":184},[41,148591,148592],{"class":275},"    value ",[41,148594,321],{"class":271},[41,148596,148597],{"class":275}," item.get(",[41,148599,148499],{"class":378},[41,148601,282],{"class":275},[41,148603,148604,148606,148608],{"class":43,"line":1757},[41,148605,3239],{"class":271},[41,148607,39033],{"class":271},[41,148609,148610],{"class":275}," value:\n",[41,148612,148613],{"class":43,"line":1763},[41,148614,148615],{"class":271},"        continue\n",[41,148617,148618],{"class":43,"line":1768},[41,148619,80],{"emptyLinePlaceholder":79},[41,148621,148622,148624,148626],{"class":43,"line":1782},[41,148623,148322],{"class":275},[41,148625,148100],{"class":378},[41,148627,4795],{"class":275},[41,148629,148630,148633,148635],{"class":43,"line":1787},[41,148631,148632],{"class":275},"    sales.append(",[41,148634,279],{"class":58},[41,148636,148637],{"class":275},"(value))\n",[41,148639,148640],{"class":43,"line":1793},[41,148641,80],{"emptyLinePlaceholder":79},[41,148643,148644,148646],{"class":43,"line":1814},[41,148645,30518],{"class":58},[41,148647,148648],{"class":275},"(dates)\n",[41,148650,148651,148653],{"class":43,"line":1819},[41,148652,30518],{"class":58},[41,148654,148655],{"class":275},"(sales)\n",[15,148657,148659],{"id":148658},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[32,148661,148663],{"className":30481,"code":148662,"language":30483,"meta":37,"style":37},"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",[24,148664,148665,148679,148689,148693,148701,148722,148744,148766,148788,148810,148814,148818,148840,148861,148865,148873,148877,148881,148891,148900,148910,148926,148930,148934,148951,148967,148983,148999,149009,149013],{"__ignoreMap":37},[41,148666,148667,148669,148671,148673,148675,148677],{"class":43,"line":44},[41,148668,30840],{"class":271},[41,148670,147482],{"class":275},[41,148672,30495],{"class":271},[41,148674,147487],{"class":275},[41,148676,31486],{"class":271},[41,148678,147492],{"class":275},[41,148680,148681,148683,148685,148687],{"class":43,"line":51},[41,148682,30840],{"class":271},[41,148684,147341],{"class":275},[41,148686,30495],{"class":271},[41,148688,147346],{"class":275},[41,148690,148691],{"class":43,"line":62},[41,148692,80],{"emptyLinePlaceholder":79},[41,148694,148695,148697,148699],{"class":43,"line":70},[41,148696,148568],{"class":275},[41,148698,321],{"class":271},[41,148700,55550],{"class":275},[41,148702,148703,148705,148707,148709,148712,148714,148716,148718,148720],{"class":43,"line":76},[41,148704,148488],{"class":275},[41,148706,148100],{"class":378},[41,148708,51540],{"class":275},[41,148710,148711],{"class":378},"\"2024-10-01\"",[41,148713,12573],{"class":275},[41,148715,84187],{"class":378},[41,148717,51540],{"class":275},[41,148719,92126],{"class":58},[41,148721,5068],{"class":275},[41,148723,148724,148726,148728,148730,148733,148735,148737,148739,148742],{"class":43,"line":83},[41,148725,148488],{"class":275},[41,148727,148100],{"class":378},[41,148729,51540],{"class":275},[41,148731,148732],{"class":378},"\"2024-10-02\"",[41,148734,12573],{"class":275},[41,148736,84187],{"class":378},[41,148738,51540],{"class":275},[41,148740,148741],{"class":58},"1800",[41,148743,5068],{"class":275},[41,148745,148746,148748,148750,148752,148755,148757,148759,148761,148764],{"class":43,"line":89},[41,148747,148488],{"class":275},[41,148749,148100],{"class":378},[41,148751,51540],{"class":275},[41,148753,148754],{"class":378},"\"2024-10-03\"",[41,148756,12573],{"class":275},[41,148758,84187],{"class":378},[41,148760,51540],{"class":275},[41,148762,148763],{"class":58},"1500",[41,148765,5068],{"class":275},[41,148767,148768,148770,148772,148774,148777,148779,148781,148783,148786],{"class":43,"line":96},[41,148769,148488],{"class":275},[41,148771,148100],{"class":378},[41,148773,51540],{"class":275},[41,148775,148776],{"class":378},"\"2024-10-04\"",[41,148778,12573],{"class":275},[41,148780,84187],{"class":378},[41,148782,51540],{"class":275},[41,148784,148785],{"class":58},"2100",[41,148787,5068],{"class":275},[41,148789,148790,148792,148794,148796,148799,148801,148803,148805,148808],{"class":43,"line":104},[41,148791,148488],{"class":275},[41,148793,148100],{"class":378},[41,148795,51540],{"class":275},[41,148797,148798],{"class":378},"\"2024-10-05\"",[41,148800,12573],{"class":275},[41,148802,84187],{"class":378},[41,148804,51540],{"class":275},[41,148806,148807],{"class":58},"2600",[41,148809,5068],{"class":275},[41,148811,148812],{"class":43,"line":176},[41,148813,33349],{"class":275},[41,148815,148816],{"class":43,"line":184},[41,148817,80],{"emptyLinePlaceholder":79},[41,148819,148820,148822,148824,148827,148829,148831,148833,148835,148837],{"class":43,"line":1757},[41,148821,147903],{"class":275},[41,148823,321],{"class":271},[41,148825,148826],{"class":275}," [item[",[41,148828,148100],{"class":378},[41,148830,4581],{"class":275},[41,148832,3163],{"class":271},[41,148834,148312],{"class":275},[41,148836,26146],{"class":271},[41,148838,148839],{"class":275}," sales]\n",[41,148841,148842,148845,148847,148849,148851,148853,148855,148857,148859],{"class":43,"line":1763},[41,148843,148844],{"class":275},"amounts ",[41,148846,321],{"class":271},[41,148848,148826],{"class":275},[41,148850,84187],{"class":378},[41,148852,4581],{"class":275},[41,148854,3163],{"class":271},[41,148856,148312],{"class":275},[41,148858,26146],{"class":271},[41,148860,148839],{"class":275},[41,148862,148863],{"class":43,"line":1768},[41,148864,80],{"emptyLinePlaceholder":79},[41,148866,148867,148869,148871],{"class":43,"line":1782},[41,148868,147355],{"class":275},[41,148870,321],{"class":271},[41,148872,147360],{"class":275},[41,148874,148875],{"class":43,"line":1787},[41,148876,147944],{"class":275},[41,148878,148879],{"class":43,"line":1793},[41,148880,147752],{"class":275},[41,148882,148883,148885,148887,148889],{"class":43,"line":1814},[41,148884,147757],{"class":5354},[41,148886,321],{"class":271},[41,148888,147398],{"class":378},[41,148890,31569],{"class":275},[41,148892,148893,148895,148897],{"class":43,"line":1819},[41,148894,147768],{"class":5354},[41,148896,321],{"class":271},[41,148898,148899],{"class":275},"amounts,\n",[41,148901,148902,148904,148906,148908],{"class":43,"line":1833},[41,148903,147797],{"class":5354},[41,148905,321],{"class":271},[41,148907,31579],{"class":58},[41,148909,31569],{"class":275},[41,148911,148912,148914,148916,148918,148920,148922,148924],{"class":43,"line":1838},[41,148913,147808],{"class":5354},[41,148915,321],{"class":271},[41,148917,147813],{"class":275},[41,148919,147816],{"class":5354},[41,148921,321],{"class":271},[41,148923,31579],{"class":58},[41,148925,38150],{"class":275},[41,148927,148928],{"class":43,"line":1867},[41,148929,282],{"class":275},[41,148931,148932],{"class":43,"line":1872},[41,148933,147571],{"class":275},[41,148935,148936,148938,148940,148942,148944,148946,148949],{"class":43,"line":1889},[41,148937,147576],{"class":5354},[41,148939,321],{"class":271},[41,148941,147581],{"class":275},[41,148943,51510],{"class":5354},[41,148945,321],{"class":271},[41,148947,148948],{"class":378},"\"每日销售额\"",[41,148950,38150],{"class":275},[41,148952,148953,148955,148957,148959,148961,148963,148965],{"class":43,"line":1894},[41,148954,147595],{"class":5354},[41,148956,321],{"class":271},[41,148958,147600],{"class":275},[41,148960,79913],{"class":5354},[41,148962,321],{"class":271},[41,148964,147607],{"class":378},[41,148966,38150],{"class":275},[41,148968,148969,148971,148973,148975,148977,148979,148981],{"class":43,"line":1899},[41,148970,147614],{"class":5354},[41,148972,321],{"class":271},[41,148974,147600],{"class":275},[41,148976,79913],{"class":5354},[41,148978,321],{"class":271},[41,148980,147625],{"class":378},[41,148982,38150],{"class":275},[41,148984,148985,148987,148989,148991,148993,148995,148997],{"class":43,"line":1904},[41,148986,147632],{"class":5354},[41,148988,321],{"class":271},[41,148990,147637],{"class":275},[41,148992,147640],{"class":5354},[41,148994,321],{"class":271},[41,148996,147645],{"class":378},[41,148998,38150],{"class":275},[41,149000,149001,149004,149006],{"class":43,"line":1918},[41,149002,149003],{"class":5354},"    datazoom_opts",[41,149005,321],{"class":271},[41,149007,149008],{"class":275},"[opts.DataZoomOpts()],\n",[41,149010,149011],{"class":43,"line":1923},[41,149012,282],{"class":275},[41,149014,149015,149017,149020],{"class":43,"line":2715},[41,149016,147427],{"class":275},[41,149018,149019],{"class":378},"\"daily_sales.html\"",[41,149021,282],{"class":275},[20,149023,149024,149027],{},[24,149025,149026],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[15,149029,149031],{"id":149030},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[20,149033,149034],{},"如果数据结构如下：",[32,149036,149038],{"className":30481,"code":149037,"language":30483,"meta":37,"style":37},"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",[24,149039,149040,149048,149056,149078,149099,149104,149111,149131,149151,149155],{"__ignoreMap":37},[41,149041,149042,149044,149046],{"class":43,"line":44},[41,149043,101761],{"class":275},[41,149045,321],{"class":271},[41,149047,15710],{"class":275},[41,149049,149050,149053],{"class":43,"line":51},[41,149051,149052],{"class":378},"    \"北京\"",[41,149054,149055],{"class":275},": [\n",[41,149057,149058,149060,149062,149064,149067,149069,149072,149074,149076],{"class":43,"line":62},[41,149059,5055],{"class":275},[41,149061,148100],{"class":378},[41,149063,51540],{"class":275},[41,149065,149066],{"class":378},"\"2024-01-01\"",[41,149068,12573],{"class":275},[41,149070,149071],{"class":378},"\"confirm\"",[41,149073,51540],{"class":275},[41,149075,719],{"class":58},[41,149077,5068],{"class":275},[41,149079,149080,149082,149084,149086,149089,149091,149093,149095,149097],{"class":43,"line":70},[41,149081,5055],{"class":275},[41,149083,148100],{"class":378},[41,149085,51540],{"class":275},[41,149087,149088],{"class":378},"\"2024-01-02\"",[41,149090,12573],{"class":275},[41,149092,149071],{"class":378},[41,149094,51540],{"class":275},[41,149096,771],{"class":58},[41,149098,5068],{"class":275},[41,149100,149101],{"class":43,"line":76},[41,149102,149103],{"class":275},"    ],\n",[41,149105,149106,149109],{"class":43,"line":83},[41,149107,149108],{"class":378},"    \"上海\"",[41,149110,149055],{"class":275},[41,149112,149113,149115,149117,149119,149121,149123,149125,149127,149129],{"class":43,"line":89},[41,149114,5055],{"class":275},[41,149116,148100],{"class":378},[41,149118,51540],{"class":275},[41,149120,149066],{"class":378},[41,149122,12573],{"class":275},[41,149124,149071],{"class":378},[41,149126,51540],{"class":275},[41,149128,668],{"class":58},[41,149130,5068],{"class":275},[41,149132,149133,149135,149137,149139,149141,149143,149145,149147,149149],{"class":43,"line":96},[41,149134,5055],{"class":275},[41,149136,148100],{"class":378},[41,149138,51540],{"class":275},[41,149140,149088],{"class":378},[41,149142,12573],{"class":275},[41,149144,149071],{"class":378},[41,149146,51540],{"class":275},[41,149148,796],{"class":58},[41,149150,5068],{"class":275},[41,149152,149153],{"class":43,"line":104},[41,149154,149103],{"class":275},[41,149156,149157],{"class":43,"line":176},[41,149158,1706],{"class":275},[20,149160,149161],{},"绘制多地区趋势：",[32,149163,149165],{"className":30481,"code":149164,"language":30483,"meta":37,"style":37},"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",[24,149166,149167,149181,149191,149195,149220,149224,149232,149236,149240,149252,149274,149287,149291,149295,149312,149328,149332],{"__ignoreMap":37},[41,149168,149169,149171,149173,149175,149177,149179],{"class":43,"line":44},[41,149170,30840],{"class":271},[41,149172,147482],{"class":275},[41,149174,30495],{"class":271},[41,149176,147487],{"class":275},[41,149178,31486],{"class":271},[41,149180,147492],{"class":275},[41,149182,149183,149185,149187,149189],{"class":43,"line":51},[41,149184,30840],{"class":271},[41,149186,147341],{"class":275},[41,149188,30495],{"class":271},[41,149190,147346],{"class":275},[41,149192,149193],{"class":43,"line":62},[41,149194,80],{"emptyLinePlaceholder":79},[41,149196,149197,149199,149201,149203,149205,149207,149209,149211,149213,149216,149218],{"class":43,"line":70},[41,149198,147903],{"class":275},[41,149200,321],{"class":271},[41,149202,148826],{"class":275},[41,149204,148100],{"class":378},[41,149206,4581],{"class":275},[41,149208,3163],{"class":271},[41,149210,148312],{"class":275},[41,149212,26146],{"class":271},[41,149214,149215],{"class":275}," data[",[41,149217,69372],{"class":378},[41,149219,77630],{"class":275},[41,149221,149222],{"class":43,"line":76},[41,149223,80],{"emptyLinePlaceholder":79},[41,149225,149226,149228,149230],{"class":43,"line":83},[41,149227,147355],{"class":275},[41,149229,321],{"class":271},[41,149231,147360],{"class":275},[41,149233,149234],{"class":43,"line":89},[41,149235,147944],{"class":275},[41,149237,149238],{"class":43,"line":96},[41,149239,80],{"emptyLinePlaceholder":79},[41,149241,149242,149244,149247,149249],{"class":43,"line":104},[41,149243,3163],{"class":271},[41,149245,149246],{"class":275}," city, records ",[41,149248,26146],{"class":271},[41,149250,149251],{"class":275}," data.items():\n",[41,149253,149254,149257,149259,149261,149263,149265,149267,149269,149271],{"class":43,"line":176},[41,149255,149256],{"class":275},"    values ",[41,149258,321],{"class":271},[41,149260,148826],{"class":275},[41,149262,149071],{"class":378},[41,149264,4581],{"class":275},[41,149266,3163],{"class":271},[41,149268,148312],{"class":275},[41,149270,26146],{"class":271},[41,149272,149273],{"class":275}," records]\n",[41,149275,149276,149279,149281,149283,149285],{"class":43,"line":184},[41,149277,149278],{"class":275},"    line.add_yaxis(city, values, ",[41,149280,147848],{"class":5354},[41,149282,321],{"class":271},[41,149284,31579],{"class":58},[41,149286,282],{"class":275},[41,149288,149289],{"class":43,"line":1757},[41,149290,80],{"emptyLinePlaceholder":79},[41,149292,149293],{"class":43,"line":1763},[41,149294,147571],{"class":275},[41,149296,149297,149299,149301,149303,149305,149307,149310],{"class":43,"line":1768},[41,149298,147576],{"class":5354},[41,149300,321],{"class":271},[41,149302,147581],{"class":275},[41,149304,51510],{"class":5354},[41,149306,321],{"class":271},[41,149308,149309],{"class":378},"\"多地区趋势图\"",[41,149311,38150],{"class":275},[41,149313,149314,149316,149318,149320,149322,149324,149326],{"class":43,"line":1782},[41,149315,147632],{"class":5354},[41,149317,321],{"class":271},[41,149319,147637],{"class":275},[41,149321,147640],{"class":5354},[41,149323,321],{"class":271},[41,149325,147645],{"class":378},[41,149327,38150],{"class":275},[41,149329,149330],{"class":43,"line":1787},[41,149331,282],{"class":275},[41,149333,149334,149336,149339],{"class":43,"line":1793},[41,149335,147427],{"class":275},[41,149337,149338],{"class":378},"\"trend.html\"",[41,149340,282],{"class":275},[20,149342,149343],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[15,149345,149347],{"id":149346},"_1012-易错点","10.12 易错点",[224,149349,149350,149356,149362,149372,149378],{},[227,149351,149352,149355],{},[24,149353,149354],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[227,149357,149358,149361],{},[24,149359,149360],{},"render()"," 生成的是 HTML，不是图片。",[227,149363,149364,149365,149368,149369,28488],{},"JSON 字符串用 ",[24,149366,149367],{},"json.loads()","，JSON 文件用 ",[24,149370,149371],{},"json.load()",[227,149373,149374,149375,28488],{},"中文 JSON 保存时加 ",[24,149376,149377],{},"ensure_ascii=False",[227,149379,149380],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[15,149382,149384],{"id":149383},"_1013-本章练习","10.13 本章练习",[224,149386,149387,149390,149393,149396,149399],{},[227,149388,149389],{},"安装 pyecharts 并生成第一个折线图。",[227,149391,149392],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[227,149394,149395],{},"绘制两条折线，对比线上和线下销售额。",[227,149397,149398],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[227,149400,149401],{},"对含有空值的销售数据进行清洗后再绘图。",[189,149403,149404],{},"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":37,"searchDepth":51,"depth":51,"links":149406},[149407,149408,149409,149410,149411,149412,149413,149414,149415,149416,149417,149418,149419],{"id":147023,"depth":51,"text":147024},{"id":147098,"depth":51,"text":147099},{"id":147277,"depth":51,"text":147278},{"id":147328,"depth":51,"text":147329},{"id":147462,"depth":51,"text":147463},{"id":147738,"depth":51,"text":147739},{"id":147864,"depth":51,"text":147865},{"id":148075,"depth":51,"text":148076},{"id":148446,"depth":51,"text":148447},{"id":148658,"depth":51,"text":148659},{"id":149030,"depth":51,"text":149031},{"id":149346,"depth":51,"text":149347},{"id":149383,"depth":51,"text":149384},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147015,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149426,"title":149427,"body":149428,"description":196,"extension":197,"meta":151788,"navigation":79,"path":151789,"seo":151790,"stem":151791,"__hash__":151792},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149429,"toc":151765},[149430,149433,149437,149440,149443,149519,149522,149613,149616,149620,149623,149667,149680,149684,149687,149754,149757,149761,149764,149848,149856,149860,149865,150006,150009,150020,150026,150032,150146,150150,150153,150156,150409,150412,150416,150419,150523,150526,150530,150681,150685,150692,150805,150809,150812,150918,150921,150925,150928,150959,150962,151067,151070,151074,151078,151088,151156,151160,151167,151231,151234,151238,151244,151340,151349,151353,151677,151686,151690,151718,151722,151762],[10,149431,149427],{"id":149432},"_11-面向对象基础",[15,149434,149436],{"id":149435},"_111-什么是面向对象","11.1 什么是面向对象",[20,149438,149439],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[20,149441,149442],{},"面向过程：",[32,149444,149446],{"className":30481,"code":149445,"language":30483,"meta":37,"style":37},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[24,149447,149448,149457,149465,149469,149479,149510,149514],{"__ignoreMap":37},[41,149449,149450,149452,149454],{"class":43,"line":44},[41,149451,146639],{"class":275},[41,149453,321],{"class":271},[41,149455,149456],{"class":378}," \"小明\"\n",[41,149458,149459,149461,149463],{"class":43,"line":51},[41,149460,146649],{"class":275},[41,149462,321],{"class":271},[41,149464,146654],{"class":58},[41,149466,149467],{"class":43,"line":62},[41,149468,80],{"emptyLinePlaceholder":79},[41,149470,149471,149473,149476],{"class":43,"line":70},[41,149472,32050],{"class":271},[41,149474,149475],{"class":54}," introduce",[41,149477,149478],{"class":275},"(name, age):\n",[41,149480,149481,149483,149485,149487,149490,149492,149494,149496,149499,149501,149503,149505,149508],{"class":43,"line":76},[41,149482,31402],{"class":58},[41,149484,276],{"class":275},[41,149486,327],{"class":271},[41,149488,149489],{"class":378},"\"我叫",[41,149491,1169],{"class":58},[41,149493,79913],{"class":275},[41,149495,1219],{"class":58},[41,149497,149498],{"class":378},"，今年",[41,149500,1169],{"class":58},[41,149502,70324],{"class":275},[41,149504,1219],{"class":58},[41,149506,149507],{"class":378},"岁\"",[41,149509,282],{"class":275},[41,149511,149512],{"class":43,"line":83},[41,149513,80],{"emptyLinePlaceholder":79},[41,149515,149516],{"class":43,"line":89},[41,149517,149518],{"class":275},"introduce(name, age)\n",[20,149520,149521],{},"面向对象：",[32,149523,149525],{"className":30481,"code":149524,"language":30483,"meta":37,"style":37},"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",[24,149526,149527,149535,149543,149572,149576,149580,149590,149599,149608],{"__ignoreMap":37},[41,149528,149529,149531,149533],{"class":43,"line":44},[41,149530,14832],{"class":271},[41,149532,8036],{"class":54},[41,149534,3877],{"class":275},[41,149536,149537,149539,149541],{"class":43,"line":51},[41,149538,30904],{"class":271},[41,149540,149475],{"class":54},[41,149542,30910],{"class":275},[41,149544,149545,149547,149549,149551,149553,149556,149558,149560,149562,149564,149566,149568,149570],{"class":43,"line":62},[41,149546,32554],{"class":58},[41,149548,276],{"class":275},[41,149550,327],{"class":271},[41,149552,149489],{"class":378},[41,149554,149555],{"class":58},"{self",[41,149557,80404],{"class":275},[41,149559,1219],{"class":58},[41,149561,149498],{"class":378},[41,149563,149555],{"class":58},[41,149565,80416],{"class":275},[41,149567,1219],{"class":58},[41,149569,149507],{"class":378},[41,149571,282],{"class":275},[41,149573,149574],{"class":43,"line":70},[41,149575,80],{"emptyLinePlaceholder":79},[41,149577,149578],{"class":43,"line":76},[41,149579,80],{"emptyLinePlaceholder":79},[41,149581,149582,149585,149587],{"class":43,"line":83},[41,149583,149584],{"class":275},"student ",[41,149586,321],{"class":271},[41,149588,149589],{"class":275}," Student()\n",[41,149591,149592,149595,149597],{"class":43,"line":89},[41,149593,149594],{"class":275},"student.name ",[41,149596,321],{"class":271},[41,149598,149456],{"class":378},[41,149600,149601,149604,149606],{"class":43,"line":96},[41,149602,149603],{"class":275},"student.age ",[41,149605,321],{"class":271},[41,149607,146654],{"class":58},[41,149609,149610],{"class":43,"line":104},[41,149611,149612],{"class":275},"student.introduce()\n",[20,149614,149615],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[15,149617,149619],{"id":149618},"_112-类和对象","11.2 类和对象",[20,149621,149622],{},"类是模板，对象是根据模板创建出来的具体实例。",[32,149624,149626],{"className":30481,"code":149625,"language":30483,"meta":37,"style":37},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[24,149627,149628,149636,149641,149645,149649,149658],{"__ignoreMap":37},[41,149629,149630,149632,149634],{"class":43,"line":44},[41,149631,14832],{"class":271},[41,149633,8036],{"class":54},[41,149635,3877],{"class":275},[41,149637,149638],{"class":43,"line":51},[41,149639,149640],{"class":271},"    pass\n",[41,149642,149643],{"class":43,"line":62},[41,149644,80],{"emptyLinePlaceholder":79},[41,149646,149647],{"class":43,"line":70},[41,149648,80],{"emptyLinePlaceholder":79},[41,149650,149651,149654,149656],{"class":43,"line":76},[41,149652,149653],{"class":275},"student1 ",[41,149655,321],{"class":271},[41,149657,149589],{"class":275},[41,149659,149660,149663,149665],{"class":43,"line":83},[41,149661,149662],{"class":275},"student2 ",[41,149664,321],{"class":271},[41,149666,149589],{"class":275},[20,149668,149669,149672,149673,101121,149676,149679],{},[24,149670,149671],{},"Student"," 是类，",[24,149674,149675],{},"student1",[24,149677,149678],{},"student2"," 是对象。",[15,149681,149683],{"id":149682},"_113-属性","11.3 属性",[20,149685,149686],{},"属性是对象保存的数据。",[32,149688,149690],{"className":30481,"code":149689,"language":30483,"meta":37,"style":37},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[24,149691,149692,149700,149704,149708,149712,149720,149728,149736,149740,149747],{"__ignoreMap":37},[41,149693,149694,149696,149698],{"class":43,"line":44},[41,149695,14832],{"class":271},[41,149697,8036],{"class":54},[41,149699,3877],{"class":275},[41,149701,149702],{"class":43,"line":51},[41,149703,149640],{"class":271},[41,149705,149706],{"class":43,"line":62},[41,149707,80],{"emptyLinePlaceholder":79},[41,149709,149710],{"class":43,"line":70},[41,149711,80],{"emptyLinePlaceholder":79},[41,149713,149714,149716,149718],{"class":43,"line":76},[41,149715,149584],{"class":275},[41,149717,321],{"class":271},[41,149719,149589],{"class":275},[41,149721,149722,149724,149726],{"class":43,"line":83},[41,149723,149594],{"class":275},[41,149725,321],{"class":271},[41,149727,149456],{"class":378},[41,149729,149730,149732,149734],{"class":43,"line":89},[41,149731,149603],{"class":275},[41,149733,321],{"class":271},[41,149735,146654],{"class":58},[41,149737,149738],{"class":43,"line":96},[41,149739,80],{"emptyLinePlaceholder":79},[41,149741,149742,149744],{"class":43,"line":104},[41,149743,30518],{"class":58},[41,149745,149746],{"class":275},"(student.name)\n",[41,149748,149749,149751],{"class":43,"line":176},[41,149750,30518],{"class":58},[41,149752,149753],{"class":275},"(student.age)\n",[20,149755,149756],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[15,149758,149760],{"id":149759},"_114-方法","11.4 方法",[20,149762,149763],{},"类中的函数叫方法。",[32,149765,149766],{"className":30481,"code":149524,"language":30483,"meta":37,"style":37},[24,149767,149768,149776,149784,149812,149816,149820,149828,149836,149844],{"__ignoreMap":37},[41,149769,149770,149772,149774],{"class":43,"line":44},[41,149771,14832],{"class":271},[41,149773,8036],{"class":54},[41,149775,3877],{"class":275},[41,149777,149778,149780,149782],{"class":43,"line":51},[41,149779,30904],{"class":271},[41,149781,149475],{"class":54},[41,149783,30910],{"class":275},[41,149785,149786,149788,149790,149792,149794,149796,149798,149800,149802,149804,149806,149808,149810],{"class":43,"line":62},[41,149787,32554],{"class":58},[41,149789,276],{"class":275},[41,149791,327],{"class":271},[41,149793,149489],{"class":378},[41,149795,149555],{"class":58},[41,149797,80404],{"class":275},[41,149799,1219],{"class":58},[41,149801,149498],{"class":378},[41,149803,149555],{"class":58},[41,149805,80416],{"class":275},[41,149807,1219],{"class":58},[41,149809,149507],{"class":378},[41,149811,282],{"class":275},[41,149813,149814],{"class":43,"line":70},[41,149815,80],{"emptyLinePlaceholder":79},[41,149817,149818],{"class":43,"line":76},[41,149819,80],{"emptyLinePlaceholder":79},[41,149821,149822,149824,149826],{"class":43,"line":83},[41,149823,149584],{"class":275},[41,149825,321],{"class":271},[41,149827,149589],{"class":275},[41,149829,149830,149832,149834],{"class":43,"line":89},[41,149831,149594],{"class":275},[41,149833,321],{"class":271},[41,149835,149456],{"class":378},[41,149837,149838,149840,149842],{"class":43,"line":96},[41,149839,149603],{"class":275},[41,149841,321],{"class":271},[41,149843,146654],{"class":58},[41,149845,149846],{"class":43,"line":104},[41,149847,149612],{"class":275},[20,149849,149850,149852,149853,149855],{},[24,149851,30926],{}," 表示当前对象。调用方法时不需要手动传入 ",[24,149854,30926],{},"，Python 会自动传。",[15,149857,149859],{"id":149858},"_115-构造方法__init__","11.5 构造方法__init__",[20,149861,149862,149864],{},[24,149863,30932],{}," 在对象创建时自动执行，用于初始化属性。",[32,149866,149868],{"className":30481,"code":149867,"language":30483,"meta":37,"style":37},"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",[24,149869,149870,149878,149887,149899,149911,149922,149926,149934,149972,149976,149980,150002],{"__ignoreMap":37},[41,149871,149872,149874,149876],{"class":43,"line":44},[41,149873,14832],{"class":271},[41,149875,8036],{"class":54},[41,149877,3877],{"class":275},[41,149879,149880,149882,149884],{"class":43,"line":51},[41,149881,30904],{"class":271},[41,149883,30907],{"class":58},[41,149885,149886],{"class":275},"(self, name, age, score):\n",[41,149888,149889,149891,149894,149896],{"class":43,"line":62},[41,149890,30948],{"class":58},[41,149892,149893],{"class":275},".name ",[41,149895,321],{"class":271},[41,149897,149898],{"class":275}," name\n",[41,149900,149901,149903,149906,149908],{"class":43,"line":70},[41,149902,30948],{"class":58},[41,149904,149905],{"class":275},".age ",[41,149907,321],{"class":271},[41,149909,149910],{"class":275}," age\n",[41,149912,149913,149915,149918,149920],{"class":43,"line":76},[41,149914,30948],{"class":58},[41,149916,149917],{"class":275},".score ",[41,149919,321],{"class":271},[41,149921,1720],{"class":275},[41,149923,149924],{"class":43,"line":83},[41,149925,80],{"emptyLinePlaceholder":79},[41,149927,149928,149930,149932],{"class":43,"line":89},[41,149929,30904],{"class":271},[41,149931,149475],{"class":54},[41,149933,30910],{"class":275},[41,149935,149936,149938,149940,149942,149944,149946,149948,149950,149952,149954,149956,149958,149961,149963,149966,149968,149970],{"class":43,"line":96},[41,149937,32554],{"class":58},[41,149939,276],{"class":275},[41,149941,327],{"class":271},[41,149943,149489],{"class":378},[41,149945,149555],{"class":58},[41,149947,80404],{"class":275},[41,149949,1219],{"class":58},[41,149951,149498],{"class":378},[41,149953,149555],{"class":58},[41,149955,80416],{"class":275},[41,149957,1219],{"class":58},[41,149959,149960],{"class":378},"岁，成绩",[41,149962,149555],{"class":58},[41,149964,149965],{"class":275},".score",[41,149967,1219],{"class":58},[41,149969,524],{"class":378},[41,149971,282],{"class":275},[41,149973,149974],{"class":43,"line":104},[41,149975,80],{"emptyLinePlaceholder":79},[41,149977,149978],{"class":43,"line":176},[41,149979,80],{"emptyLinePlaceholder":79},[41,149981,149982,149984,149986,149989,149992,149994,149996,149998,150000],{"class":43,"line":184},[41,149983,149584],{"class":275},[41,149985,321],{"class":271},[41,149987,149988],{"class":275}," Student(",[41,149990,149991],{"class":378},"\"小明\"",[41,149993,12573],{"class":275},[41,149995,923],{"class":58},[41,149997,12573],{"class":275},[41,149999,1262],{"class":58},[41,150001,282],{"class":275},[41,150003,150004],{"class":43,"line":1757},[41,150005,149612],{"class":275},[20,150007,150008],{},"构造方法的好处：",[224,150010,150011,150014,150017],{},[227,150012,150013],{},"创建对象时必须提供必要数据。",[227,150015,150016],{},"属性初始化集中，不容易漏。",[227,150018,150019],{},"对象状态更完整。",[15,150021,150023,150024],{"id":150022},"_116-str","11.6 ",[423,150025,1443],{},[20,150027,150028,150029,28488],{},"直接打印对象时，默认输出不直观。可以定义 ",[24,150030,150031],{},"__str__",[32,150033,150035],{"className":30481,"code":150034,"language":30483,"meta":37,"style":37},"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",[24,150036,150037,150045,150054,150064,150074,150078,150087,150115,150119,150123,150139],{"__ignoreMap":37},[41,150038,150039,150041,150043],{"class":43,"line":44},[41,150040,14832],{"class":271},[41,150042,8036],{"class":54},[41,150044,3877],{"class":275},[41,150046,150047,150049,150051],{"class":43,"line":51},[41,150048,30904],{"class":271},[41,150050,30907],{"class":58},[41,150052,150053],{"class":275},"(self, name, age):\n",[41,150055,150056,150058,150060,150062],{"class":43,"line":62},[41,150057,30948],{"class":58},[41,150059,149893],{"class":275},[41,150061,321],{"class":271},[41,150063,149898],{"class":275},[41,150065,150066,150068,150070,150072],{"class":43,"line":70},[41,150067,30948],{"class":58},[41,150069,149905],{"class":275},[41,150071,321],{"class":271},[41,150073,149910],{"class":275},[41,150075,150076],{"class":43,"line":76},[41,150077,80],{"emptyLinePlaceholder":79},[41,150079,150080,150082,150085],{"class":43,"line":83},[41,150081,30904],{"class":271},[41,150083,150084],{"class":58}," __str__",[41,150086,30910],{"class":275},[41,150088,150089,150091,150094,150097,150099,150101,150103,150106,150108,150110,150112],{"class":43,"line":89},[41,150090,14890],{"class":271},[41,150092,150093],{"class":271}," f",[41,150095,150096],{"class":378},"\"Student(name=",[41,150098,149555],{"class":58},[41,150100,80404],{"class":275},[41,150102,1219],{"class":58},[41,150104,150105],{"class":378},", age=",[41,150107,149555],{"class":58},[41,150109,80416],{"class":275},[41,150111,1219],{"class":58},[41,150113,150114],{"class":378},")\"\n",[41,150116,150117],{"class":43,"line":96},[41,150118,80],{"emptyLinePlaceholder":79},[41,150120,150121],{"class":43,"line":104},[41,150122,80],{"emptyLinePlaceholder":79},[41,150124,150125,150127,150129,150131,150133,150135,150137],{"class":43,"line":176},[41,150126,149584],{"class":275},[41,150128,321],{"class":271},[41,150130,149988],{"class":275},[41,150132,149991],{"class":378},[41,150134,12573],{"class":275},[41,150136,923],{"class":58},[41,150138,282],{"class":275},[41,150140,150141,150143],{"class":43,"line":184},[41,150142,30518],{"class":58},[41,150144,150145],{"class":275},"(student)\n",[15,150147,150149],{"id":150148},"_117-封装","11.7 封装",[20,150151,150152],{},"封装就是把数据和方法放到类中，并控制访问方式。",[20,150154,150155],{},"Python 中以双下划线开头的属性通常视为私有属性。",[32,150157,150159],{"className":30481,"code":150158,"language":30483,"meta":37,"style":37},"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",[24,150160,150161,150170,150179,150191,150203,150207,150216,150225,150229,150239,150252,150263,150268,150279,150283,150292,150304,150315,150319,150332,150343,150347,150358,150362,150366,150384,150393,150402],{"__ignoreMap":37},[41,150162,150163,150165,150168],{"class":43,"line":44},[41,150164,14832],{"class":271},[41,150166,150167],{"class":54}," Account",[41,150169,3877],{"class":275},[41,150171,150172,150174,150176],{"class":43,"line":51},[41,150173,30904],{"class":271},[41,150175,30907],{"class":58},[41,150177,150178],{"class":275},"(self, owner, balance):\n",[41,150180,150181,150183,150186,150188],{"class":43,"line":62},[41,150182,30948],{"class":58},[41,150184,150185],{"class":275},".owner ",[41,150187,321],{"class":271},[41,150189,150190],{"class":275}," owner\n",[41,150192,150193,150195,150198,150200],{"class":43,"line":70},[41,150194,30948],{"class":58},[41,150196,150197],{"class":275},".__balance ",[41,150199,321],{"class":271},[41,150201,150202],{"class":275}," balance\n",[41,150204,150205],{"class":43,"line":76},[41,150206,80],{"emptyLinePlaceholder":79},[41,150208,150209,150211,150214],{"class":43,"line":83},[41,150210,30904],{"class":271},[41,150212,150213],{"class":54}," get_balance",[41,150215,30910],{"class":275},[41,150217,150218,150220,150222],{"class":43,"line":89},[41,150219,14890],{"class":271},[41,150221,38976],{"class":58},[41,150223,150224],{"class":275},".__balance\n",[41,150226,150227],{"class":43,"line":96},[41,150228,80],{"emptyLinePlaceholder":79},[41,150230,150231,150233,150236],{"class":43,"line":104},[41,150232,30904],{"class":271},[41,150234,150235],{"class":54}," deposit",[41,150237,150238],{"class":275},"(self, money):\n",[41,150240,150241,150243,150246,150248,150250],{"class":43,"line":176},[41,150242,2635],{"class":271},[41,150244,150245],{"class":275}," money ",[41,150247,1729],{"class":271},[41,150249,4231],{"class":58},[41,150251,3877],{"class":275},[41,150253,150254,150256,150258,150261],{"class":43,"line":184},[41,150255,34753],{"class":58},[41,150257,276],{"class":275},[41,150259,150260],{"class":378},"\"存款金额必须大于0\"",[41,150262,282],{"class":275},[41,150264,150265],{"class":43,"line":1757},[41,150266,150267],{"class":271},"            return\n",[41,150269,150270,150272,150274,150276],{"class":43,"line":1763},[41,150271,30948],{"class":58},[41,150273,150197],{"class":275},[41,150275,9615],{"class":271},[41,150277,150278],{"class":275}," money\n",[41,150280,150281],{"class":43,"line":1768},[41,150282,80],{"emptyLinePlaceholder":79},[41,150284,150285,150287,150290],{"class":43,"line":1782},[41,150286,30904],{"class":271},[41,150288,150289],{"class":54}," withdraw",[41,150291,150238],{"class":275},[41,150293,150294,150296,150298,150300,150302],{"class":43,"line":1787},[41,150295,2635],{"class":271},[41,150297,150245],{"class":275},[41,150299,1729],{"class":271},[41,150301,4231],{"class":58},[41,150303,3877],{"class":275},[41,150305,150306,150308,150310,150313],{"class":43,"line":1793},[41,150307,34753],{"class":58},[41,150309,276],{"class":275},[41,150311,150312],{"class":378},"\"取款金额必须大于0\"",[41,150314,282],{"class":275},[41,150316,150317],{"class":43,"line":1814},[41,150318,150267],{"class":271},[41,150320,150321,150323,150325,150327,150329],{"class":43,"line":1819},[41,150322,2635],{"class":271},[41,150324,150245],{"class":275},[41,150326,1233],{"class":271},[41,150328,38976],{"class":58},[41,150330,150331],{"class":275},".__balance:\n",[41,150333,150334,150336,150338,150341],{"class":43,"line":1833},[41,150335,34753],{"class":58},[41,150337,276],{"class":275},[41,150339,150340],{"class":378},"\"余额不足\"",[41,150342,282],{"class":275},[41,150344,150345],{"class":43,"line":1838},[41,150346,150267],{"class":271},[41,150348,150349,150351,150353,150356],{"class":43,"line":1867},[41,150350,30948],{"class":58},[41,150352,150197],{"class":275},[41,150354,150355],{"class":271},"-=",[41,150357,150278],{"class":275},[41,150359,150360],{"class":43,"line":1872},[41,150361,80],{"emptyLinePlaceholder":79},[41,150363,150364],{"class":43,"line":1889},[41,150365,80],{"emptyLinePlaceholder":79},[41,150367,150368,150371,150373,150376,150378,150380,150382],{"class":43,"line":1894},[41,150369,150370],{"class":275},"account ",[41,150372,321],{"class":271},[41,150374,150375],{"class":275}," Account(",[41,150377,149991],{"class":378},[41,150379,12573],{"class":275},[41,150381,6548],{"class":58},[41,150383,282],{"class":275},[41,150385,150386,150389,150391],{"class":43,"line":1899},[41,150387,150388],{"class":275},"account.deposit(",[41,150390,1862],{"class":58},[41,150392,282],{"class":275},[41,150394,150395,150398,150400],{"class":43,"line":1904},[41,150396,150397],{"class":275},"account.withdraw(",[41,150399,584],{"class":58},[41,150401,282],{"class":275},[41,150403,150404,150406],{"class":43,"line":1918},[41,150405,30518],{"class":58},[41,150407,150408],{"class":275},"(account.get_balance())\n",[20,150410,150411],{},"封装的意义是避免外部随意修改内部状态。",[15,150413,150415],{"id":150414},"_118-继承","11.8 继承",[20,150417,150418],{},"继承可以让子类复用父类的属性和方法。",[32,150420,150422],{"className":30481,"code":150421,"language":30483,"meta":37,"style":37},"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",[24,150423,150424,150433,150442,150453,150457,150461,150475,150484,150495,150499,150503,150513,150518],{"__ignoreMap":37},[41,150425,150426,150428,150431],{"class":43,"line":44},[41,150427,14832],{"class":271},[41,150429,150430],{"class":54}," Animal",[41,150432,3877],{"class":275},[41,150434,150435,150437,150440],{"class":43,"line":51},[41,150436,30904],{"class":271},[41,150438,150439],{"class":54}," eat",[41,150441,30910],{"class":275},[41,150443,150444,150446,150448,150451],{"class":43,"line":62},[41,150445,32554],{"class":58},[41,150447,276],{"class":275},[41,150449,150450],{"class":378},"\"吃东西\"",[41,150452,282],{"class":275},[41,150454,150455],{"class":43,"line":70},[41,150456,80],{"emptyLinePlaceholder":79},[41,150458,150459],{"class":43,"line":76},[41,150460,80],{"emptyLinePlaceholder":79},[41,150462,150463,150465,150468,150470,150473],{"class":43,"line":83},[41,150464,14832],{"class":271},[41,150466,150467],{"class":54}," Dog",[41,150469,276],{"class":275},[41,150471,150472],{"class":54},"Animal",[41,150474,30889],{"class":275},[41,150476,150477,150479,150482],{"class":43,"line":89},[41,150478,30904],{"class":271},[41,150480,150481],{"class":54}," bark",[41,150483,30910],{"class":275},[41,150485,150486,150488,150490,150493],{"class":43,"line":96},[41,150487,32554],{"class":58},[41,150489,276],{"class":275},[41,150491,150492],{"class":378},"\"汪汪\"",[41,150494,282],{"class":275},[41,150496,150497],{"class":43,"line":104},[41,150498,80],{"emptyLinePlaceholder":79},[41,150500,150501],{"class":43,"line":176},[41,150502,80],{"emptyLinePlaceholder":79},[41,150504,150505,150508,150510],{"class":43,"line":184},[41,150506,150507],{"class":275},"dog ",[41,150509,321],{"class":271},[41,150511,150512],{"class":275}," Dog()\n",[41,150514,150515],{"class":43,"line":1757},[41,150516,150517],{"class":275},"dog.eat()\n",[41,150519,150520],{"class":43,"line":1763},[41,150521,150522],{"class":275},"dog.bark()\n",[20,150524,150525],{},"子类可以扩展新方法，也可以重写父类方法。",[15,150527,150529],{"id":150528},"_119-方法重写","11.9 方法重写",[32,150531,150533],{"className":30481,"code":150532,"language":30483,"meta":37,"style":37},"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",[24,150534,150535,150543,150552,150563,150567,150571,150583,150591,150601,150605,150609,150622,150630,150641,150645,150649,150657,150667,150671,150676],{"__ignoreMap":37},[41,150536,150537,150539,150541],{"class":43,"line":44},[41,150538,14832],{"class":271},[41,150540,150430],{"class":54},[41,150542,3877],{"class":275},[41,150544,150545,150547,150550],{"class":43,"line":51},[41,150546,30904],{"class":271},[41,150548,150549],{"class":54}," speak",[41,150551,30910],{"class":275},[41,150553,150554,150556,150558,150561],{"class":43,"line":62},[41,150555,32554],{"class":58},[41,150557,276],{"class":275},[41,150559,150560],{"class":378},"\"动物叫\"",[41,150562,282],{"class":275},[41,150564,150565],{"class":43,"line":70},[41,150566,80],{"emptyLinePlaceholder":79},[41,150568,150569],{"class":43,"line":76},[41,150570,80],{"emptyLinePlaceholder":79},[41,150572,150573,150575,150577,150579,150581],{"class":43,"line":83},[41,150574,14832],{"class":271},[41,150576,150467],{"class":54},[41,150578,276],{"class":275},[41,150580,150472],{"class":54},[41,150582,30889],{"class":275},[41,150584,150585,150587,150589],{"class":43,"line":89},[41,150586,30904],{"class":271},[41,150588,150549],{"class":54},[41,150590,30910],{"class":275},[41,150592,150593,150595,150597,150599],{"class":43,"line":96},[41,150594,32554],{"class":58},[41,150596,276],{"class":275},[41,150598,150492],{"class":378},[41,150600,282],{"class":275},[41,150602,150603],{"class":43,"line":104},[41,150604,80],{"emptyLinePlaceholder":79},[41,150606,150607],{"class":43,"line":176},[41,150608,80],{"emptyLinePlaceholder":79},[41,150610,150611,150613,150616,150618,150620],{"class":43,"line":184},[41,150612,14832],{"class":271},[41,150614,150615],{"class":54}," Cat",[41,150617,276],{"class":275},[41,150619,150472],{"class":54},[41,150621,30889],{"class":275},[41,150623,150624,150626,150628],{"class":43,"line":1757},[41,150625,30904],{"class":271},[41,150627,150549],{"class":54},[41,150629,30910],{"class":275},[41,150631,150632,150634,150636,150639],{"class":43,"line":1763},[41,150633,32554],{"class":58},[41,150635,276],{"class":275},[41,150637,150638],{"class":378},"\"喵喵\"",[41,150640,282],{"class":275},[41,150642,150643],{"class":43,"line":1768},[41,150644,80],{"emptyLinePlaceholder":79},[41,150646,150647],{"class":43,"line":1782},[41,150648,80],{"emptyLinePlaceholder":79},[41,150650,150651,150653,150655],{"class":43,"line":1787},[41,150652,150507],{"class":275},[41,150654,321],{"class":271},[41,150656,150512],{"class":275},[41,150658,150659,150662,150664],{"class":43,"line":1793},[41,150660,150661],{"class":275},"cat ",[41,150663,321],{"class":271},[41,150665,150666],{"class":275}," Cat()\n",[41,150668,150669],{"class":43,"line":1814},[41,150670,80],{"emptyLinePlaceholder":79},[41,150672,150673],{"class":43,"line":1819},[41,150674,150675],{"class":275},"dog.speak()\n",[41,150677,150678],{"class":43,"line":1833},[41,150679,150680],{"class":275},"cat.speak()\n",[15,150682,150684],{"id":150683},"_1110-super","11.10 super",[20,150686,150687,150688,150691],{},"子类可以通过 ",[24,150689,150690],{},"super()"," 调用父类方法。",[32,150693,150695],{"className":30481,"code":150694,"language":30483,"meta":37,"style":37},"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",[24,150696,150697,150705,150714,150724,150728,150732,150744,150753,150764,150774,150778,150782,150798],{"__ignoreMap":37},[41,150698,150699,150701,150703],{"class":43,"line":44},[41,150700,14832],{"class":271},[41,150702,15707],{"class":54},[41,150704,3877],{"class":275},[41,150706,150707,150709,150711],{"class":43,"line":51},[41,150708,30904],{"class":271},[41,150710,30907],{"class":58},[41,150712,150713],{"class":275},"(self, name):\n",[41,150715,150716,150718,150720,150722],{"class":43,"line":62},[41,150717,30948],{"class":58},[41,150719,149893],{"class":275},[41,150721,321],{"class":271},[41,150723,149898],{"class":275},[41,150725,150726],{"class":43,"line":70},[41,150727,80],{"emptyLinePlaceholder":79},[41,150729,150730],{"class":43,"line":76},[41,150731,80],{"emptyLinePlaceholder":79},[41,150733,150734,150736,150738,150740,150742],{"class":43,"line":83},[41,150735,14832],{"class":271},[41,150737,8036],{"class":54},[41,150739,276],{"class":275},[41,150741,19184],{"class":54},[41,150743,30889],{"class":275},[41,150745,150746,150748,150750],{"class":43,"line":89},[41,150747,30904],{"class":271},[41,150749,30907],{"class":58},[41,150751,150752],{"class":275},"(self, name, score):\n",[41,150754,150755,150757,150759,150761],{"class":43,"line":96},[41,150756,30920],{"class":58},[41,150758,17399],{"class":275},[41,150760,30932],{"class":58},[41,150762,150763],{"class":275},"(name)\n",[41,150765,150766,150768,150770,150772],{"class":43,"line":104},[41,150767,30948],{"class":58},[41,150769,149917],{"class":275},[41,150771,321],{"class":271},[41,150773,1720],{"class":275},[41,150775,150776],{"class":43,"line":176},[41,150777,80],{"emptyLinePlaceholder":79},[41,150779,150780],{"class":43,"line":184},[41,150781,80],{"emptyLinePlaceholder":79},[41,150783,150784,150786,150788,150790,150792,150794,150796],{"class":43,"line":1757},[41,150785,149584],{"class":275},[41,150787,321],{"class":271},[41,150789,149988],{"class":275},[41,150791,149991],{"class":378},[41,150793,12573],{"class":275},[41,150795,1262],{"class":58},[41,150797,282],{"class":275},[41,150799,150800,150802],{"class":43,"line":1763},[41,150801,30518],{"class":58},[41,150803,150804],{"class":275},"(student.name, student.score)\n",[15,150806,150808],{"id":150807},"_1111-多态","11.11 多态",[20,150810,150811],{},"多态指不同对象响应同一个方法，表现出不同结果。",[32,150813,150815],{"className":30481,"code":150814,"language":30483,"meta":37,"style":37},"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",[24,150816,150817,150825,150833,150843,150847,150851,150859,150867,150877,150881,150885,150895,150900,150904,150908,150913],{"__ignoreMap":37},[41,150818,150819,150821,150823],{"class":43,"line":44},[41,150820,14832],{"class":271},[41,150822,150467],{"class":54},[41,150824,3877],{"class":275},[41,150826,150827,150829,150831],{"class":43,"line":51},[41,150828,30904],{"class":271},[41,150830,150549],{"class":54},[41,150832,30910],{"class":275},[41,150834,150835,150837,150839,150841],{"class":43,"line":62},[41,150836,32554],{"class":58},[41,150838,276],{"class":275},[41,150840,150492],{"class":378},[41,150842,282],{"class":275},[41,150844,150845],{"class":43,"line":70},[41,150846,80],{"emptyLinePlaceholder":79},[41,150848,150849],{"class":43,"line":76},[41,150850,80],{"emptyLinePlaceholder":79},[41,150852,150853,150855,150857],{"class":43,"line":83},[41,150854,14832],{"class":271},[41,150856,150615],{"class":54},[41,150858,3877],{"class":275},[41,150860,150861,150863,150865],{"class":43,"line":89},[41,150862,30904],{"class":271},[41,150864,150549],{"class":54},[41,150866,30910],{"class":275},[41,150868,150869,150871,150873,150875],{"class":43,"line":96},[41,150870,32554],{"class":58},[41,150872,276],{"class":275},[41,150874,150638],{"class":378},[41,150876,282],{"class":275},[41,150878,150879],{"class":43,"line":104},[41,150880,80],{"emptyLinePlaceholder":79},[41,150882,150883],{"class":43,"line":176},[41,150884,80],{"emptyLinePlaceholder":79},[41,150886,150887,150889,150892],{"class":43,"line":184},[41,150888,32050],{"class":271},[41,150890,150891],{"class":54}," make_sound",[41,150893,150894],{"class":275},"(animal):\n",[41,150896,150897],{"class":43,"line":1757},[41,150898,150899],{"class":275},"    animal.speak()\n",[41,150901,150902],{"class":43,"line":1763},[41,150903,80],{"emptyLinePlaceholder":79},[41,150905,150906],{"class":43,"line":1768},[41,150907,80],{"emptyLinePlaceholder":79},[41,150909,150910],{"class":43,"line":1782},[41,150911,150912],{"class":275},"make_sound(Dog())\n",[41,150914,150915],{"class":43,"line":1787},[41,150916,150917],{"class":275},"make_sound(Cat())\n",[20,150919,150920],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[15,150922,150924],{"id":150923},"_1112-类属性和实例属性","11.12 类属性和实例属性",[20,150926,150927],{},"实例属性属于对象：",[32,150929,150931],{"className":30481,"code":150930,"language":30483,"meta":37,"style":37},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[24,150932,150933,150941,150949],{"__ignoreMap":37},[41,150934,150935,150937,150939],{"class":43,"line":44},[41,150936,14832],{"class":271},[41,150938,8036],{"class":54},[41,150940,3877],{"class":275},[41,150942,150943,150945,150947],{"class":43,"line":51},[41,150944,30904],{"class":271},[41,150946,30907],{"class":58},[41,150948,150713],{"class":275},[41,150950,150951,150953,150955,150957],{"class":43,"line":62},[41,150952,30948],{"class":58},[41,150954,149893],{"class":275},[41,150956,321],{"class":271},[41,150958,149898],{"class":275},[20,150960,150961],{},"类属性属于类，所有对象共享：",[32,150963,150965],{"className":30481,"code":150964,"language":30483,"meta":37,"style":37},"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",[24,150966,150967,150975,150985,150989,150997,151007,151011,151015,151028,151042,151046,151053,151060],{"__ignoreMap":37},[41,150968,150969,150971,150973],{"class":43,"line":44},[41,150970,14832],{"class":271},[41,150972,8036],{"class":54},[41,150974,3877],{"class":275},[41,150976,150977,150980,150982],{"class":43,"line":51},[41,150978,150979],{"class":275},"    school ",[41,150981,321],{"class":271},[41,150983,150984],{"class":378}," \"黑马学校\"\n",[41,150986,150987],{"class":43,"line":62},[41,150988,80],{"emptyLinePlaceholder":79},[41,150990,150991,150993,150995],{"class":43,"line":70},[41,150992,30904],{"class":271},[41,150994,30907],{"class":58},[41,150996,150713],{"class":275},[41,150998,150999,151001,151003,151005],{"class":43,"line":76},[41,151000,30948],{"class":58},[41,151002,149893],{"class":275},[41,151004,321],{"class":271},[41,151006,149898],{"class":275},[41,151008,151009],{"class":43,"line":83},[41,151010,80],{"emptyLinePlaceholder":79},[41,151012,151013],{"class":43,"line":89},[41,151014,80],{"emptyLinePlaceholder":79},[41,151016,151017,151020,151022,151024,151026],{"class":43,"line":96},[41,151018,151019],{"class":275},"s1 ",[41,151021,321],{"class":271},[41,151023,149988],{"class":275},[41,151025,149991],{"class":378},[41,151027,282],{"class":275},[41,151029,151030,151033,151035,151037,151040],{"class":43,"line":104},[41,151031,151032],{"class":275},"s2 ",[41,151034,321],{"class":271},[41,151036,149988],{"class":275},[41,151038,151039],{"class":378},"\"小红\"",[41,151041,282],{"class":275},[41,151043,151044],{"class":43,"line":176},[41,151045,80],{"emptyLinePlaceholder":79},[41,151047,151048,151050],{"class":43,"line":184},[41,151049,30518],{"class":58},[41,151051,151052],{"class":275},"(s1.school)\n",[41,151054,151055,151057],{"class":43,"line":1757},[41,151056,30518],{"class":58},[41,151058,151059],{"class":275},"(s2.school)\n",[41,151061,151062,151064],{"class":43,"line":1763},[41,151063,30518],{"class":58},[41,151065,151066],{"class":275},"(Student.school)\n",[20,151068,151069],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[15,151071,151073],{"id":151072},"_1113-类方法和静态方法","11.13 类方法和静态方法",[241,151075,151077],{"id":151076},"_11131-类方法","11.13.1 类方法",[20,151079,151080,151081,151084,151085,28488],{},"类方法使用 ",[24,151082,151083],{},"@classmethod","，第一个参数通常是 ",[24,151086,151087],{},"cls",[32,151089,151091],{"className":30481,"code":151090,"language":30483,"meta":37,"style":37},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[24,151092,151093,151101,151109,151113,151121,151131,151141,151145,151149],{"__ignoreMap":37},[41,151094,151095,151097,151099],{"class":43,"line":44},[41,151096,14832],{"class":271},[41,151098,8036],{"class":54},[41,151100,3877],{"class":275},[41,151102,151103,151105,151107],{"class":43,"line":51},[41,151104,150979],{"class":275},[41,151106,321],{"class":271},[41,151108,150984],{"class":378},[41,151110,151111],{"class":43,"line":62},[41,151112,80],{"emptyLinePlaceholder":79},[41,151114,151115,151118],{"class":43,"line":70},[41,151116,151117],{"class":54},"    @",[41,151119,151120],{"class":58},"classmethod\n",[41,151122,151123,151125,151128],{"class":43,"line":76},[41,151124,30904],{"class":271},[41,151126,151127],{"class":54}," get_school",[41,151129,151130],{"class":275},"(cls):\n",[41,151132,151133,151135,151138],{"class":43,"line":83},[41,151134,14890],{"class":271},[41,151136,151137],{"class":58}," cls",[41,151139,151140],{"class":275},".school\n",[41,151142,151143],{"class":43,"line":89},[41,151144,80],{"emptyLinePlaceholder":79},[41,151146,151147],{"class":43,"line":96},[41,151148,80],{"emptyLinePlaceholder":79},[41,151150,151151,151153],{"class":43,"line":104},[41,151152,30518],{"class":58},[41,151154,151155],{"class":275},"(Student.get_school())\n",[241,151157,151159],{"id":151158},"_11132-静态方法","11.13.2 静态方法",[20,151161,151162,151163,151166],{},"静态方法使用 ",[24,151164,151165],{},"@staticmethod","，不需要访问实例和类。",[32,151168,151170],{"className":30481,"code":151169,"language":30483,"meta":37,"style":37},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[24,151171,151172,151181,151188,151197,151208,151212,151216],{"__ignoreMap":37},[41,151173,151174,151176,151179],{"class":43,"line":44},[41,151175,14832],{"class":271},[41,151177,151178],{"class":54}," MathUtils",[41,151180,3877],{"class":275},[41,151182,151183,151185],{"class":43,"line":51},[41,151184,151117],{"class":54},[41,151186,151187],{"class":58},"staticmethod\n",[41,151189,151190,151192,151194],{"class":43,"line":62},[41,151191,30904],{"class":271},[41,151193,5347],{"class":54},[41,151195,151196],{"class":275},"(a, b):\n",[41,151198,151199,151201,151203,151205],{"class":43,"line":70},[41,151200,14890],{"class":271},[41,151202,11007],{"class":275},[41,151204,754],{"class":271},[41,151206,151207],{"class":275}," b\n",[41,151209,151210],{"class":43,"line":76},[41,151211,80],{"emptyLinePlaceholder":79},[41,151213,151214],{"class":43,"line":83},[41,151215,80],{"emptyLinePlaceholder":79},[41,151217,151218,151220,151223,151225,151227,151229],{"class":43,"line":89},[41,151219,30518],{"class":58},[41,151221,151222],{"class":275},"(MathUtils.add(",[41,151224,26],{"class":58},[41,151226,12573],{"class":275},[41,151228,351],{"class":58},[41,151230,30600],{"class":275},[20,151232,151233],{},"静态方法本质上是放在类命名空间里的普通函数。",[15,151235,151237],{"id":151236},"_1114-dataclass","11.14 dataclass",[20,151239,151240,151243],{},[24,151241,151242],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[32,151245,151247],{"className":30481,"code":151246,"language":30483,"meta":37,"style":37},"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",[24,151248,151249,151261,151265,151269,151274,151282,151290,151298,151306,151310,151314,151334],{"__ignoreMap":37},[41,151250,151251,151253,151256,151258],{"class":43,"line":44},[41,151252,30840],{"class":271},[41,151254,151255],{"class":275}," dataclasses ",[41,151257,30495],{"class":271},[41,151259,151260],{"class":275}," dataclass\n",[41,151262,151263],{"class":43,"line":51},[41,151264,80],{"emptyLinePlaceholder":79},[41,151266,151267],{"class":43,"line":62},[41,151268,80],{"emptyLinePlaceholder":79},[41,151270,151271],{"class":43,"line":70},[41,151272,151273],{"class":54},"@dataclass\n",[41,151275,151276,151278,151280],{"class":43,"line":76},[41,151277,14832],{"class":271},[41,151279,8036],{"class":54},[41,151281,3877],{"class":275},[41,151283,151284,151287],{"class":43,"line":83},[41,151285,151286],{"class":275},"    name: ",[41,151288,151289],{"class":58},"str\n",[41,151291,151292,151295],{"class":43,"line":89},[41,151293,151294],{"class":275},"    age: ",[41,151296,151297],{"class":58},"int\n",[41,151299,151300,151303],{"class":43,"line":96},[41,151301,151302],{"class":275},"    score: ",[41,151304,151305],{"class":58},"float\n",[41,151307,151308],{"class":43,"line":104},[41,151309,80],{"emptyLinePlaceholder":79},[41,151311,151312],{"class":43,"line":176},[41,151313,80],{"emptyLinePlaceholder":79},[41,151315,151316,151318,151320,151322,151324,151326,151328,151330,151332],{"class":43,"line":184},[41,151317,149584],{"class":275},[41,151319,321],{"class":271},[41,151321,149988],{"class":275},[41,151323,149991],{"class":378},[41,151325,12573],{"class":275},[41,151327,923],{"class":58},[41,151329,12573],{"class":275},[41,151331,1262],{"class":58},[41,151333,282],{"class":275},[41,151335,151336,151338],{"class":43,"line":1757},[41,151337,30518],{"class":58},[41,151339,150145],{"class":275},[20,151341,151342,151343,486,151345,151348],{},"它会自动生成 ",[24,151344,30932],{},[24,151346,151347],{},"__repr__"," 等方法。适合数据模型类。",[15,151350,151352],{"id":151351},"_1115-小案例学生类","11.15 小案例：学生类",[32,151354,151356],{"className":30481,"code":151355,"language":30483,"meta":37,"style":37},"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",[24,151357,151358,151366,151375,151387,151397,151407,151417,151421,151430,151443,151447,151456,151462,151474,151486,151498,151510,151514,151518,151524,151534,151543,151553,151561,151569,151578,151582,151586,151594,151630,151634,151638,151663,151670],{"__ignoreMap":37},[41,151359,151360,151362,151364],{"class":43,"line":44},[41,151361,14832],{"class":271},[41,151363,8036],{"class":54},[41,151365,3877],{"class":275},[41,151367,151368,151370,151372],{"class":43,"line":51},[41,151369,30904],{"class":271},[41,151371,30907],{"class":58},[41,151373,151374],{"class":275},"(self, student_id, name, age, score):\n",[41,151376,151377,151379,151382,151384],{"class":43,"line":62},[41,151378,30948],{"class":58},[41,151380,151381],{"class":275},".student_id ",[41,151383,321],{"class":271},[41,151385,151386],{"class":275}," student_id\n",[41,151388,151389,151391,151393,151395],{"class":43,"line":70},[41,151390,30948],{"class":58},[41,151392,149893],{"class":275},[41,151394,321],{"class":271},[41,151396,149898],{"class":275},[41,151398,151399,151401,151403,151405],{"class":43,"line":76},[41,151400,30948],{"class":58},[41,151402,149905],{"class":275},[41,151404,321],{"class":271},[41,151406,149910],{"class":275},[41,151408,151409,151411,151413,151415],{"class":43,"line":83},[41,151410,30948],{"class":58},[41,151412,149917],{"class":275},[41,151414,321],{"class":271},[41,151416,1720],{"class":275},[41,151418,151419],{"class":43,"line":89},[41,151420,80],{"emptyLinePlaceholder":79},[41,151422,151423,151425,151428],{"class":43,"line":96},[41,151424,30904],{"class":271},[41,151426,151427],{"class":54}," is_passed",[41,151429,30910],{"class":275},[41,151431,151432,151434,151436,151438,151440],{"class":43,"line":104},[41,151433,14890],{"class":271},[41,151435,38976],{"class":58},[41,151437,149917],{"class":275},[41,151439,1850],{"class":271},[41,151441,151442],{"class":58}," 60\n",[41,151444,151445],{"class":43,"line":176},[41,151446,80],{"emptyLinePlaceholder":79},[41,151448,151449,151451,151454],{"class":43,"line":184},[41,151450,30904],{"class":271},[41,151452,151453],{"class":54}," to_dict",[41,151455,30910],{"class":275},[41,151457,151458,151460],{"class":43,"line":1757},[41,151459,14890],{"class":271},[41,151461,15710],{"class":275},[41,151463,151464,151467,151469,151471],{"class":43,"line":1763},[41,151465,151466],{"class":378},"            \"student_id\"",[41,151468,51540],{"class":275},[41,151470,30926],{"class":58},[41,151472,151473],{"class":275},".student_id,\n",[41,151475,151476,151479,151481,151483],{"class":43,"line":1768},[41,151477,151478],{"class":378},"            \"name\"",[41,151480,51540],{"class":275},[41,151482,30926],{"class":58},[41,151484,151485],{"class":275},".name,\n",[41,151487,151488,151491,151493,151495],{"class":43,"line":1782},[41,151489,151490],{"class":378},"            \"age\"",[41,151492,51540],{"class":275},[41,151494,30926],{"class":58},[41,151496,151497],{"class":275},".age,\n",[41,151499,151500,151503,151505,151507],{"class":43,"line":1787},[41,151501,151502],{"class":378},"            \"score\"",[41,151504,51540],{"class":275},[41,151506,30926],{"class":58},[41,151508,151509],{"class":275},".score,\n",[41,151511,151512],{"class":43,"line":1793},[41,151513,2667],{"class":275},[41,151515,151516],{"class":43,"line":1814},[41,151517,80],{"emptyLinePlaceholder":79},[41,151519,151520,151522],{"class":43,"line":1819},[41,151521,151117],{"class":54},[41,151523,151120],{"class":58},[41,151525,151526,151528,151531],{"class":43,"line":1833},[41,151527,30904],{"class":271},[41,151529,151530],{"class":54}," from_dict",[41,151532,151533],{"class":275},"(cls, data):\n",[41,151535,151536,151538,151540],{"class":43,"line":1838},[41,151537,14890],{"class":271},[41,151539,151137],{"class":58},[41,151541,151542],{"class":275},"(\n",[41,151544,151545,151548,151551],{"class":43,"line":1867},[41,151546,151547],{"class":275},"            data[",[41,151549,151550],{"class":378},"\"student_id\"",[41,151552,87939],{"class":275},[41,151554,151555,151557,151559],{"class":43,"line":1872},[41,151556,151547],{"class":275},[41,151558,62782],{"class":378},[41,151560,87939],{"class":275},[41,151562,151563,151565,151567],{"class":43,"line":1889},[41,151564,151547],{"class":275},[41,151566,69227],{"class":378},[41,151568,87939],{"class":275},[41,151570,151571,151573,151576],{"class":43,"line":1894},[41,151572,151547],{"class":275},[41,151574,151575],{"class":378},"\"score\"",[41,151577,87939],{"class":275},[41,151579,151580],{"class":43,"line":1899},[41,151581,38229],{"class":275},[41,151583,151584],{"class":43,"line":1904},[41,151585,80],{"emptyLinePlaceholder":79},[41,151587,151588,151590,151592],{"class":43,"line":1918},[41,151589,30904],{"class":271},[41,151591,150084],{"class":58},[41,151593,30910],{"class":275},[41,151595,151596,151598,151600,151602,151604,151607,151609,151612,151614,151616,151618,151620,151622,151624,151626,151628],{"class":43,"line":1923},[41,151597,14890],{"class":271},[41,151599,150093],{"class":271},[41,151601,524],{"class":378},[41,151603,149555],{"class":58},[41,151605,151606],{"class":275},".student_id",[41,151608,1219],{"class":58},[41,151610,151611],{"class":58}," {self",[41,151613,80404],{"class":275},[41,151615,1219],{"class":58},[41,151617,151611],{"class":58},[41,151619,80416],{"class":275},[41,151621,1219],{"class":58},[41,151623,151611],{"class":58},[41,151625,149965],{"class":275},[41,151627,1219],{"class":58},[41,151629,25236],{"class":378},[41,151631,151632],{"class":43,"line":2715},[41,151633,80],{"emptyLinePlaceholder":79},[41,151635,151636],{"class":43,"line":2729},[41,151637,80],{"emptyLinePlaceholder":79},[41,151639,151640,151642,151644,151646,151649,151651,151653,151655,151657,151659,151661],{"class":43,"line":2737},[41,151641,149584],{"class":275},[41,151643,321],{"class":271},[41,151645,149988],{"class":275},[41,151647,151648],{"class":378},"\"001\"",[41,151650,12573],{"class":275},[41,151652,149991],{"class":378},[41,151654,12573],{"class":275},[41,151656,923],{"class":58},[41,151658,12573],{"class":275},[41,151660,1262],{"class":58},[41,151662,282],{"class":275},[41,151664,151665,151667],{"class":43,"line":2742},[41,151666,30518],{"class":58},[41,151668,151669],{"class":275},"(student.is_passed())\n",[41,151671,151672,151674],{"class":43,"line":2748},[41,151673,30518],{"class":58},[41,151675,151676],{"class":275},"(student.to_dict())\n",[20,151678,151679,101121,151682,151685],{},[24,151680,151681],{},"to_dict()",[24,151683,151684],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[15,151687,151689],{"id":151688},"_1116-易错点","11.16 易错点",[224,151691,151692,151698,151704,151709,151712,151715],{},[227,151693,151694,151695,28488],{},"类名推荐使用大驼峰，如 ",[24,151696,151697],{},"StudentManager",[227,151699,151700,151701,151703],{},"方法第一个参数必须写 ",[24,151702,30926],{},"，调用时不用传。",[227,151705,151706,151708],{},[24,151707,30932],{}," 不是普通方法，它在创建对象时自动执行。",[227,151710,151711],{},"私有属性不是绝对安全，只是约定和名称改写。",[227,151713,151714],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[227,151716,151717],{},"类中方法太多时，说明职责可能过重。",[15,151719,151721],{"id":151720},"_1117-本章练习","11.17 本章练习",[224,151723,151724,151730,151736,151741,151754],{},[227,151725,151726,151727,151729],{},"定义 ",[24,151728,149671],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[227,151731,151726,151732,151735],{},[24,151733,151734],{},"Account"," 类，实现存款、取款、查询余额。",[227,151737,151726,151738,151740],{},[24,151739,17364],{}," 类，计算圆的周长和面积。",[227,151742,151726,151743,486,151746,151749,151750,151753],{},[24,151744,151745],{},"Dog",[24,151747,151748],{},"Cat"," 类，并用同一个函数调用它们的 ",[24,151751,151752],{},"speak()"," 方法。",[227,151755,104469,151756,151758,151759,28488],{},[24,151757,151242],{}," 定义一个商品类 ",[24,151760,151761],{},"Product",[189,151763,151764],{},"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":37,"searchDepth":51,"depth":51,"links":151766},[151767,151768,151769,151770,151771,151772,151774,151775,151776,151777,151778,151779,151780,151784,151785,151786,151787],{"id":149435,"depth":51,"text":149436},{"id":149618,"depth":51,"text":149619},{"id":149682,"depth":51,"text":149683},{"id":149759,"depth":51,"text":149760},{"id":149858,"depth":51,"text":149859},{"id":150022,"depth":51,"text":151773},"11.6 str",{"id":150148,"depth":51,"text":150149},{"id":150414,"depth":51,"text":150415},{"id":150528,"depth":51,"text":150529},{"id":150683,"depth":51,"text":150684},{"id":150807,"depth":51,"text":150808},{"id":150923,"depth":51,"text":150924},{"id":151072,"depth":51,"text":151073,"children":151781},[151782,151783],{"id":151076,"depth":62,"text":151077},{"id":151158,"depth":62,"text":151159},{"id":151236,"depth":51,"text":151237},{"id":151351,"depth":51,"text":151352},{"id":151688,"depth":51,"text":151689},{"id":151720,"depth":51,"text":151721},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149427,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151794,"title":151795,"body":151796,"description":196,"extension":197,"meta":155109,"navigation":79,"path":155110,"seo":155111,"stem":155112,"__hash__":155113},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151797,"toc":155085},[151798,151801,151805,151808,151811,151840,151843,151851,151855,151859,151862,151885,151888,151894,151898,153344,153347,153368,153372,153375,153387,153390,153574,153577,153703,153706,153710,153714,153850,153854,153940,153944,154026,154030,154067,154071,154260,154264,154267,154497,154501,154504,154685,154688,154692,154695,154701,154704,154730,154734,154737,154751,154754,154779,154782,154796,154799,154816,154819,154836,154839,154856,154860,154886,154890,154913,154917,154920,154922,154928,154930,154951,154954,154960,154966,154970,154973,155049,155052,155056,155082],[10,151799,151795],{"id":151800},"_12-综合案例与复习路线",[15,151802,151804],{"id":151803},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[20,151806,151807],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[20,151809,151810],{},"一个合格的入门综合项目最好覆盖：",[224,151812,151813,151816,151819,151822,151825,151828,151831,151834,151837],{},[227,151814,151815],{},"输入输出。",[227,151817,151818],{},"判断和循环。",[227,151820,151821],{},"函数拆分。",[227,151823,151824],{},"列表、字典等容器。",[227,151826,151827],{},"文件持久化。",[227,151829,151830],{},"异常处理。",[227,151832,151833],{},"模块拆分。",[227,151835,151836],{},"可选：面向对象。",[227,151838,151839],{},"可选：数据可视化。",[20,151841,151842],{},"本章整理两个方向：",[224,151844,151845,151848],{},[227,151846,151847],{},"学生管理系统。",[227,151849,151850],{},"销售数据统计和可视化。",[15,151852,151854],{"id":151853},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[241,151856,151858],{"id":151857},"_1221-需求","12.2.1 需求",[20,151860,151861],{},"实现一个命令行学生管理系统：",[224,151863,151864,151867,151870,151873,151876,151879,151882],{},[227,151865,151866],{},"添加学生。",[227,151868,151869],{},"删除学生。",[227,151871,151872],{},"修改学生。",[227,151874,151875],{},"查询学生。",[227,151877,151878],{},"显示所有学生。",[227,151880,151881],{},"保存到 JSON 文件。",[227,151883,151884],{},"程序启动时自动读取 JSON 文件。",[20,151886,151887],{},"学生字段：",[32,151889,151892],{"className":151890,"code":151891,"language":5325,"meta":37},[5323],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[24,151893,151891],{"__ignoreMap":37},[15,151895,151897],{"id":151896},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[32,151899,151901],{"className":30481,"code":151900,"language":30483,"meta":37,"style":37},"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",[24,151902,151903,151909,151919,151923,151937,151941,151945,151954,151966,151972,151976,151982,152013,152023,152030,152041,152047,152051,152055,152065,152096,152122,152126,152130,152139,152150,152161,152172,152183,152194,152205,152216,152220,152224,152234,152246,152262,152269,152276,152280,152284,152294,152302,152309,152322,152332,152343,152347,152351,152360,152368,152374,152386,152394,152405,152409,152413,152422,152438,152442,152449,152460,152465,152469,152485,152500,152515,152519,152524,152532,152540,152548,152556,152560,152565,152576,152580,152584,152593,152608,152618,152622,152634,152645,152649,152653,152658,152662,152673,152677,152681,152690,152705,152713,152717,152729,152739,152743,152747,152762,152775,152788,152792,152805,152817,152829,152833,152837,152848,152852,152856,152865,152880,152888,152892,152904,152914,152918,152922,152927,152931,152935,152945,152951,152973,152992,153011,153030,153035,153039,153043,153052,153060,153071,153075,153079,153105,153115,153120,153124,153128,153136,153146,153150,153158,153163,153179,153183,153197,153202,153216,153221,153234,153239,153252,153257,153270,153275,153288,153299,153303,153309,153320,153324,153328,153340],{"__ignoreMap":37},[41,151904,151905,151907],{"class":43,"line":44},[41,151906,30495],{"class":271},[41,151908,147194],{"class":275},[41,151910,151911,151913,151915,151917],{"class":43,"line":51},[41,151912,30840],{"class":271},[41,151914,108414],{"class":275},[41,151916,30495],{"class":271},[41,151918,108419],{"class":275},[41,151920,151921],{"class":43,"line":62},[41,151922,80],{"emptyLinePlaceholder":79},[41,151924,151925,151928,151930,151932,151935],{"class":43,"line":70},[41,151926,151927],{"class":58},"DATA_FILE",[41,151929,13702],{"class":271},[41,151931,108648],{"class":275},[41,151933,151934],{"class":378},"\"students.json\"",[41,151936,282],{"class":275},[41,151938,151939],{"class":43,"line":76},[41,151940,80],{"emptyLinePlaceholder":79},[41,151942,151943],{"class":43,"line":83},[41,151944,80],{"emptyLinePlaceholder":79},[41,151946,151947,151949,151952],{"class":43,"line":89},[41,151948,32050],{"class":271},[41,151950,151951],{"class":54}," load_students",[41,151953,32056],{"class":275},[41,151955,151956,151958,151960,151963],{"class":43,"line":96},[41,151957,3239],{"class":271},[41,151959,39033],{"class":271},[41,151961,151962],{"class":58}," DATA_FILE",[41,151964,151965],{"class":275},".exists():\n",[41,151967,151968,151970],{"class":43,"line":104},[41,151969,14890],{"class":271},[41,151971,51941],{"class":275},[41,151973,151974],{"class":43,"line":176},[41,151975,80],{"emptyLinePlaceholder":79},[41,151977,151978,151980],{"class":43,"line":184},[41,151979,125887],{"class":271},[41,151981,3877],{"class":275},[41,151983,151984,151987,151989,151991,151993,151995,151997,151999,152001,152003,152005,152007,152009,152011],{"class":43,"line":1757},[41,151985,151986],{"class":271},"        with",[41,151988,146894],{"class":58},[41,151990,276],{"class":275},[41,151992,151927],{"class":58},[41,151994,12573],{"class":275},[41,151996,146904],{"class":378},[41,151998,12573],{"class":275},[41,152000,146909],{"class":5354},[41,152002,321],{"class":271},[41,152004,146914],{"class":378},[41,152006,13852],{"class":275},[41,152008,31486],{"class":271},[41,152010,148256],{"class":5354},[41,152012,3877],{"class":275},[41,152014,152015,152017,152019,152021],{"class":43,"line":1763},[41,152016,15870],{"class":271},[41,152018,148267],{"class":275},[41,152020,45457],{"class":5354},[41,152022,282],{"class":275},[41,152024,152025,152027],{"class":43,"line":1768},[41,152026,125915],{"class":271},[41,152028,152029],{"class":275}," json.JSONDecodeError:\n",[41,152031,152032,152034,152036,152039],{"class":43,"line":1782},[41,152033,32554],{"class":58},[41,152035,276],{"class":275},[41,152037,152038],{"class":378},"\"数据文件格式错误，已使用空数据启动\"",[41,152040,282],{"class":275},[41,152042,152043,152045],{"class":43,"line":1787},[41,152044,14890],{"class":271},[41,152046,51941],{"class":275},[41,152048,152049],{"class":43,"line":1793},[41,152050,80],{"emptyLinePlaceholder":79},[41,152052,152053],{"class":43,"line":1814},[41,152054,80],{"emptyLinePlaceholder":79},[41,152056,152057,152059,152062],{"class":43,"line":1819},[41,152058,32050],{"class":271},[41,152060,152061],{"class":54}," save_students",[41,152063,152064],{"class":275},"(students):\n",[41,152066,152067,152069,152071,152073,152075,152077,152080,152082,152084,152086,152088,152090,152092,152094],{"class":43,"line":1833},[41,152068,34281],{"class":271},[41,152070,146894],{"class":58},[41,152072,276],{"class":275},[41,152074,151927],{"class":58},[41,152076,12573],{"class":275},[41,152078,152079],{"class":378},"\"w\"",[41,152081,12573],{"class":275},[41,152083,146909],{"class":5354},[41,152085,321],{"class":271},[41,152087,146914],{"class":378},[41,152089,13852],{"class":275},[41,152091,31486],{"class":271},[41,152093,148256],{"class":5354},[41,152095,3877],{"class":275},[41,152097,152098,152101,152103,152105,152107,152109,152111,152113,152116,152118,152120],{"class":43,"line":1838},[41,152099,152100],{"class":275},"        json.dump(students, ",[41,152102,45457],{"class":5354},[41,152104,12573],{"class":275},[41,152106,147240],{"class":5354},[41,152108,321],{"class":271},[41,152110,34090],{"class":58},[41,152112,12573],{"class":275},[41,152114,152115],{"class":5354},"indent",[41,152117,321],{"class":271},[41,152119,351],{"class":58},[41,152121,282],{"class":275},[41,152123,152124],{"class":43,"line":1867},[41,152125,80],{"emptyLinePlaceholder":79},[41,152127,152128],{"class":43,"line":1872},[41,152129,80],{"emptyLinePlaceholder":79},[41,152131,152132,152134,152137],{"class":43,"line":1889},[41,152133,32050],{"class":271},[41,152135,152136],{"class":54}," show_menu",[41,152138,32056],{"class":275},[41,152140,152141,152143,152145,152148],{"class":43,"line":1894},[41,152142,31402],{"class":58},[41,152144,276],{"class":275},[41,152146,152147],{"class":378},"\"====== 学生管理系统 ======\"",[41,152149,282],{"class":275},[41,152151,152152,152154,152156,152159],{"class":43,"line":1899},[41,152153,31402],{"class":58},[41,152155,276],{"class":275},[41,152157,152158],{"class":378},"\"1. 添加学生\"",[41,152160,282],{"class":275},[41,152162,152163,152165,152167,152170],{"class":43,"line":1904},[41,152164,31402],{"class":58},[41,152166,276],{"class":275},[41,152168,152169],{"class":378},"\"2. 删除学生\"",[41,152171,282],{"class":275},[41,152173,152174,152176,152178,152181],{"class":43,"line":1918},[41,152175,31402],{"class":58},[41,152177,276],{"class":275},[41,152179,152180],{"class":378},"\"3. 修改学生\"",[41,152182,282],{"class":275},[41,152184,152185,152187,152189,152192],{"class":43,"line":1923},[41,152186,31402],{"class":58},[41,152188,276],{"class":275},[41,152190,152191],{"class":378},"\"4. 查询学生\"",[41,152193,282],{"class":275},[41,152195,152196,152198,152200,152203],{"class":43,"line":2715},[41,152197,31402],{"class":58},[41,152199,276],{"class":275},[41,152201,152202],{"class":378},"\"5. 显示所有学生\"",[41,152204,282],{"class":275},[41,152206,152207,152209,152211,152214],{"class":43,"line":2729},[41,152208,31402],{"class":58},[41,152210,276],{"class":275},[41,152212,152213],{"class":378},"\"0. 退出系统\"",[41,152215,282],{"class":275},[41,152217,152218],{"class":43,"line":2737},[41,152219,80],{"emptyLinePlaceholder":79},[41,152221,152222],{"class":43,"line":2742},[41,152223,80],{"emptyLinePlaceholder":79},[41,152225,152226,152228,152231],{"class":43,"line":2748},[41,152227,32050],{"class":271},[41,152229,152230],{"class":54}," find_student",[41,152232,152233],{"class":275},"(students, student_id):\n",[41,152235,152236,152238,152241,152243],{"class":43,"line":2754},[41,152237,3339],{"class":271},[41,152239,152240],{"class":275}," student ",[41,152242,26146],{"class":271},[41,152244,152245],{"class":275}," students:\n",[41,152247,152248,152250,152253,152255,152257,152259],{"class":43,"line":2759},[41,152249,2635],{"class":271},[41,152251,152252],{"class":275}," student[",[41,152254,151550],{"class":378},[41,152256,4581],{"class":275},[41,152258,3087],{"class":271},[41,152260,152261],{"class":275}," student_id:\n",[41,152263,152264,152266],{"class":43,"line":8086},[41,152265,15870],{"class":271},[41,152267,152268],{"class":275}," student\n",[41,152270,152271,152273],{"class":43,"line":8110},[41,152272,4228],{"class":271},[41,152274,152275],{"class":58}," None\n",[41,152277,152278],{"class":43,"line":8115},[41,152279,80],{"emptyLinePlaceholder":79},[41,152281,152282],{"class":43,"line":8121},[41,152283,80],{"emptyLinePlaceholder":79},[41,152285,152286,152288,152291],{"class":43,"line":8148},[41,152287,32050],{"class":271},[41,152289,152290],{"class":54}," input_int",[41,152292,152293],{"class":275},"(prompt):\n",[41,152295,152296,152298,152300],{"class":43,"line":8153},[41,152297,2390],{"class":271},[41,152299,95395],{"class":58},[41,152301,3877],{"class":275},[41,152303,152304,152307],{"class":43,"line":8159},[41,152305,152306],{"class":271},"        try",[41,152308,3877],{"class":275},[41,152310,152311,152313,152315,152317,152319],{"class":43,"line":8171},[41,152312,15870],{"class":271},[41,152314,2521],{"class":58},[41,152316,276],{"class":275},[41,152318,53924],{"class":58},[41,152320,152321],{"class":275},"(prompt))\n",[41,152323,152324,152327,152330],{"class":43,"line":8183},[41,152325,152326],{"class":271},"        except",[41,152328,152329],{"class":58}," ValueError",[41,152331,3877],{"class":275},[41,152333,152334,152336,152338,152341],{"class":43,"line":8195},[41,152335,34753],{"class":58},[41,152337,276],{"class":275},[41,152339,152340],{"class":378},"\"请输入整数\"",[41,152342,282],{"class":275},[41,152344,152345],{"class":43,"line":9854},[41,152346,80],{"emptyLinePlaceholder":79},[41,152348,152349],{"class":43,"line":9879},[41,152350,80],{"emptyLinePlaceholder":79},[41,152352,152353,152355,152358],{"class":43,"line":9902},[41,152354,32050],{"class":271},[41,152356,152357],{"class":54}," input_float",[41,152359,152293],{"class":275},[41,152361,152362,152364,152366],{"class":43,"line":9926},[41,152363,2390],{"class":271},[41,152365,95395],{"class":58},[41,152367,3877],{"class":275},[41,152369,152370,152372],{"class":43,"line":9931},[41,152371,152306],{"class":271},[41,152373,3877],{"class":275},[41,152375,152376,152378,152380,152382,152384],{"class":43,"line":9936},[41,152377,15870],{"class":271},[41,152379,109900],{"class":58},[41,152381,276],{"class":275},[41,152383,53924],{"class":58},[41,152385,152321],{"class":275},[41,152387,152388,152390,152392],{"class":43,"line":9941},[41,152389,152326],{"class":271},[41,152391,152329],{"class":58},[41,152393,3877],{"class":275},[41,152395,152396,152398,152400,152403],{"class":43,"line":9950},[41,152397,34753],{"class":58},[41,152399,276],{"class":275},[41,152401,152402],{"class":378},"\"请输入数字\"",[41,152404,282],{"class":275},[41,152406,152407],{"class":43,"line":9955},[41,152408,80],{"emptyLinePlaceholder":79},[41,152410,152411],{"class":43,"line":9961},[41,152412,80],{"emptyLinePlaceholder":79},[41,152414,152415,152417,152420],{"class":43,"line":9982},[41,152416,32050],{"class":271},[41,152418,152419],{"class":54}," add_student",[41,152421,152064],{"class":275},[41,152423,152424,152427,152429,152431,152433,152436],{"class":43,"line":9988},[41,152425,152426],{"class":275},"    student_id ",[41,152428,321],{"class":271},[41,152430,60708],{"class":58},[41,152432,276],{"class":275},[41,152434,152435],{"class":378},"\"请输入学号:\"",[41,152437,282],{"class":275},[41,152439,152440],{"class":43,"line":10002},[41,152441,80],{"emptyLinePlaceholder":79},[41,152443,152444,152446],{"class":43,"line":10008},[41,152445,3239],{"class":271},[41,152447,152448],{"class":275}," find_student(students, student_id):\n",[41,152450,152451,152453,152455,152458],{"class":43,"line":10035},[41,152452,32554],{"class":58},[41,152454,276],{"class":275},[41,152456,152457],{"class":378},"\"学号已存在\"",[41,152459,282],{"class":275},[41,152461,152462],{"class":43,"line":10044},[41,152463,152464],{"class":271},"        return\n",[41,152466,152467],{"class":43,"line":10050},[41,152468,80],{"emptyLinePlaceholder":79},[41,152470,152471,152474,152476,152478,152480,152483],{"class":43,"line":10058},[41,152472,152473],{"class":275},"    name ",[41,152475,321],{"class":271},[41,152477,60708],{"class":58},[41,152479,276],{"class":275},[41,152481,152482],{"class":378},"\"请输入姓名:\"",[41,152484,282],{"class":275},[41,152486,152487,152490,152492,152495,152498],{"class":43,"line":10063},[41,152488,152489],{"class":275},"    age ",[41,152491,321],{"class":271},[41,152493,152494],{"class":275}," input_int(",[41,152496,152497],{"class":378},"\"请输入年龄:\"",[41,152499,282],{"class":275},[41,152501,152502,152505,152507,152510,152513],{"class":43,"line":16742},[41,152503,152504],{"class":275},"    score ",[41,152506,321],{"class":271},[41,152508,152509],{"class":275}," input_float(",[41,152511,152512],{"class":378},"\"请输入成绩:\"",[41,152514,282],{"class":275},[41,152516,152517],{"class":43,"line":16748},[41,152518,80],{"emptyLinePlaceholder":79},[41,152520,152521],{"class":43,"line":16771},[41,152522,152523],{"class":275},"    students.append({\n",[41,152525,152526,152529],{"class":43,"line":16777},[41,152527,152528],{"class":378},"        \"student_id\"",[41,152530,152531],{"class":275},": student_id,\n",[41,152533,152534,152537],{"class":43,"line":16800},[41,152535,152536],{"class":378},"        \"name\"",[41,152538,152539],{"class":275},": name,\n",[41,152541,152542,152545],{"class":43,"line":16814},[41,152543,152544],{"class":378},"        \"age\"",[41,152546,152547],{"class":275},": age,\n",[41,152549,152550,152553],{"class":43,"line":16834},[41,152551,152552],{"class":378},"        \"score\"",[41,152554,152555],{"class":275},": score,\n",[41,152557,152558],{"class":43,"line":16840},[41,152559,33564],{"class":275},[41,152561,152562],{"class":43,"line":16851},[41,152563,152564],{"class":275},"    save_students(students)\n",[41,152566,152567,152569,152571,152574],{"class":43,"line":16874},[41,152568,31402],{"class":58},[41,152570,276],{"class":275},[41,152572,152573],{"class":378},"\"添加成功\"",[41,152575,282],{"class":275},[41,152577,152578],{"class":43,"line":16896},[41,152579,80],{"emptyLinePlaceholder":79},[41,152581,152582],{"class":43,"line":16901},[41,152583,80],{"emptyLinePlaceholder":79},[41,152585,152586,152588,152591],{"class":43,"line":16907},[41,152587,32050],{"class":271},[41,152589,152590],{"class":54}," delete_student",[41,152592,152064],{"class":275},[41,152594,152595,152597,152599,152601,152603,152606],{"class":43,"line":16921},[41,152596,152426],{"class":275},[41,152598,321],{"class":271},[41,152600,60708],{"class":58},[41,152602,276],{"class":275},[41,152604,152605],{"class":378},"\"请输入要删除的学号:\"",[41,152607,282],{"class":275},[41,152609,152610,152613,152615],{"class":43,"line":16934},[41,152611,152612],{"class":275},"    student ",[41,152614,321],{"class":271},[41,152616,152617],{"class":275}," find_student(students, student_id)\n",[41,152619,152620],{"class":43,"line":16939},[41,152621,80],{"emptyLinePlaceholder":79},[41,152623,152624,152626,152628,152630,152632],{"class":43,"line":16953},[41,152625,3239],{"class":271},[41,152627,152240],{"class":275},[41,152629,39030],{"class":271},[41,152631,39036],{"class":58},[41,152633,3877],{"class":275},[41,152635,152636,152638,152640,152643],{"class":43,"line":16958},[41,152637,32554],{"class":58},[41,152639,276],{"class":275},[41,152641,152642],{"class":378},"\"学生不存在\"",[41,152644,282],{"class":275},[41,152646,152647],{"class":43,"line":16964},[41,152648,152464],{"class":271},[41,152650,152651],{"class":43,"line":16969},[41,152652,80],{"emptyLinePlaceholder":79},[41,152654,152655],{"class":43,"line":16983},[41,152656,152657],{"class":275},"    students.remove(student)\n",[41,152659,152660],{"class":43,"line":16988},[41,152661,152564],{"class":275},[41,152663,152664,152666,152668,152671],{"class":43,"line":16993},[41,152665,31402],{"class":58},[41,152667,276],{"class":275},[41,152669,152670],{"class":378},"\"删除成功\"",[41,152672,282],{"class":275},[41,152674,152675],{"class":43,"line":17007},[41,152676,80],{"emptyLinePlaceholder":79},[41,152678,152679],{"class":43,"line":17019},[41,152680,80],{"emptyLinePlaceholder":79},[41,152682,152683,152685,152688],{"class":43,"line":17024},[41,152684,32050],{"class":271},[41,152686,152687],{"class":54}," update_student",[41,152689,152064],{"class":275},[41,152691,152692,152694,152696,152698,152700,152703],{"class":43,"line":17037},[41,152693,152426],{"class":275},[41,152695,321],{"class":271},[41,152697,60708],{"class":58},[41,152699,276],{"class":275},[41,152701,152702],{"class":378},"\"请输入要修改的学号:\"",[41,152704,282],{"class":275},[41,152706,152707,152709,152711],{"class":43,"line":17042},[41,152708,152612],{"class":275},[41,152710,321],{"class":271},[41,152712,152617],{"class":275},[41,152714,152715],{"class":43,"line":17047},[41,152716,80],{"emptyLinePlaceholder":79},[41,152718,152719,152721,152723,152725,152727],{"class":43,"line":17052},[41,152720,3239],{"class":271},[41,152722,152240],{"class":275},[41,152724,39030],{"class":271},[41,152726,39036],{"class":58},[41,152728,3877],{"class":275},[41,152730,152731,152733,152735,152737],{"class":43,"line":17065},[41,152732,32554],{"class":58},[41,152734,276],{"class":275},[41,152736,152642],{"class":378},[41,152738,282],{"class":275},[41,152740,152741],{"class":43,"line":17070},[41,152742,152464],{"class":271},[41,152744,152745],{"class":43,"line":32736},[41,152746,80],{"emptyLinePlaceholder":79},[41,152748,152749,152751,152753,152755,152757,152760],{"class":43,"line":32742},[41,152750,152473],{"class":275},[41,152752,321],{"class":271},[41,152754,60708],{"class":58},[41,152756,276],{"class":275},[41,152758,152759],{"class":378},"\"请输入新姓名:\"",[41,152761,282],{"class":275},[41,152763,152764,152766,152768,152770,152773],{"class":43,"line":32748},[41,152765,152489],{"class":275},[41,152767,321],{"class":271},[41,152769,152494],{"class":275},[41,152771,152772],{"class":378},"\"请输入新年龄:\"",[41,152774,282],{"class":275},[41,152776,152777,152779,152781,152783,152786],{"class":43,"line":32754},[41,152778,152504],{"class":275},[41,152780,321],{"class":271},[41,152782,152509],{"class":275},[41,152784,152785],{"class":378},"\"请输入新成绩:\"",[41,152787,282],{"class":275},[41,152789,152790],{"class":43,"line":32760},[41,152791,80],{"emptyLinePlaceholder":79},[41,152793,152794,152797,152799,152801,152803],{"class":43,"line":32771},[41,152795,152796],{"class":275},"    student[",[41,152798,62782],{"class":378},[41,152800,4581],{"class":275},[41,152802,321],{"class":271},[41,152804,149898],{"class":275},[41,152806,152807,152809,152811,152813,152815],{"class":43,"line":32777},[41,152808,152796],{"class":275},[41,152810,69227],{"class":378},[41,152812,4581],{"class":275},[41,152814,321],{"class":271},[41,152816,149910],{"class":275},[41,152818,152819,152821,152823,152825,152827],{"class":43,"line":32797},[41,152820,152796],{"class":275},[41,152822,151575],{"class":378},[41,152824,4581],{"class":275},[41,152826,321],{"class":271},[41,152828,1720],{"class":275},[41,152830,152831],{"class":43,"line":32803},[41,152832,80],{"emptyLinePlaceholder":79},[41,152834,152835],{"class":43,"line":32814},[41,152836,152564],{"class":275},[41,152838,152839,152841,152843,152846],{"class":43,"line":32820},[41,152840,31402],{"class":58},[41,152842,276],{"class":275},[41,152844,152845],{"class":378},"\"修改成功\"",[41,152847,282],{"class":275},[41,152849,152850],{"class":43,"line":32826},[41,152851,80],{"emptyLinePlaceholder":79},[41,152853,152854],{"class":43,"line":32832},[41,152855,80],{"emptyLinePlaceholder":79},[41,152857,152858,152860,152863],{"class":43,"line":32838},[41,152859,32050],{"class":271},[41,152861,152862],{"class":54}," query_student",[41,152864,152064],{"class":275},[41,152866,152867,152869,152871,152873,152875,152878],{"class":43,"line":32844},[41,152868,152426],{"class":275},[41,152870,321],{"class":271},[41,152872,60708],{"class":58},[41,152874,276],{"class":275},[41,152876,152877],{"class":378},"\"请输入要查询的学号:\"",[41,152879,282],{"class":275},[41,152881,152882,152884,152886],{"class":43,"line":32850},[41,152883,152612],{"class":275},[41,152885,321],{"class":271},[41,152887,152617],{"class":275},[41,152889,152890],{"class":43,"line":32856},[41,152891,80],{"emptyLinePlaceholder":79},[41,152893,152894,152896,152898,152900,152902],{"class":43,"line":32876},[41,152895,3239],{"class":271},[41,152897,152240],{"class":275},[41,152899,39030],{"class":271},[41,152901,39036],{"class":58},[41,152903,3877],{"class":275},[41,152905,152906,152908,152910,152912],{"class":43,"line":32882},[41,152907,32554],{"class":58},[41,152909,276],{"class":275},[41,152911,152642],{"class":378},[41,152913,282],{"class":275},[41,152915,152916],{"class":43,"line":32898},[41,152917,152464],{"class":271},[41,152919,152920],{"class":43,"line":32904},[41,152921,80],{"emptyLinePlaceholder":79},[41,152923,152924],{"class":43,"line":32918},[41,152925,152926],{"class":275},"    print_student(student)\n",[41,152928,152929],{"class":43,"line":32924},[41,152930,80],{"emptyLinePlaceholder":79},[41,152932,152933],{"class":43,"line":32939},[41,152934,80],{"emptyLinePlaceholder":79},[41,152936,152937,152939,152942],{"class":43,"line":32945},[41,152938,32050],{"class":271},[41,152940,152941],{"class":54}," print_student",[41,152943,152944],{"class":275},"(student):\n",[41,152946,152947,152949],{"class":43,"line":32954},[41,152948,31402],{"class":58},[41,152950,151542],{"class":275},[41,152952,152953,152956,152958,152960,152963,152966,152968,152971],{"class":43,"line":32960},[41,152954,152955],{"class":271},"        f",[41,152957,524],{"class":378},[41,152959,1169],{"class":58},[41,152961,152962],{"class":275},"student[",[41,152964,152965],{"class":378},"'student_id'",[41,152967,1213],{"class":275},[41,152969,152970],{"class":58},"}\\t",[41,152972,25236],{"class":378},[41,152974,152975,152977,152979,152981,152983,152986,152988,152990],{"class":43,"line":32969},[41,152976,152955],{"class":271},[41,152978,524],{"class":378},[41,152980,1169],{"class":58},[41,152982,152962],{"class":275},[41,152984,152985],{"class":378},"'name'",[41,152987,1213],{"class":275},[41,152989,152970],{"class":58},[41,152991,25236],{"class":378},[41,152993,152994,152996,152998,153000,153002,153005,153007,153009],{"class":43,"line":32975},[41,152995,152955],{"class":271},[41,152997,524],{"class":378},[41,152999,1169],{"class":58},[41,153001,152962],{"class":275},[41,153003,153004],{"class":378},"'age'",[41,153006,1213],{"class":275},[41,153008,152970],{"class":58},[41,153010,25236],{"class":378},[41,153012,153013,153015,153017,153019,153021,153024,153026,153028],{"class":43,"line":32981},[41,153014,152955],{"class":271},[41,153016,524],{"class":378},[41,153018,1169],{"class":58},[41,153020,152962],{"class":275},[41,153022,153023],{"class":378},"'score'",[41,153025,1213],{"class":275},[41,153027,1219],{"class":58},[41,153029,25236],{"class":378},[41,153031,153032],{"class":43,"line":32990},[41,153033,153034],{"class":275},"    )\n",[41,153036,153037],{"class":43,"line":32996},[41,153038,80],{"emptyLinePlaceholder":79},[41,153040,153041],{"class":43,"line":33007},[41,153042,80],{"emptyLinePlaceholder":79},[41,153044,153045,153047,153050],{"class":43,"line":33013},[41,153046,32050],{"class":271},[41,153048,153049],{"class":54}," show_all_students",[41,153051,152064],{"class":275},[41,153053,153054,153056,153058],{"class":43,"line":33032},[41,153055,3239],{"class":271},[41,153057,39033],{"class":271},[41,153059,152245],{"class":275},[41,153061,153062,153064,153066,153069],{"class":43,"line":33038},[41,153063,32554],{"class":58},[41,153065,276],{"class":275},[41,153067,153068],{"class":378},"\"暂无学生\"",[41,153070,282],{"class":275},[41,153072,153073],{"class":43,"line":33049},[41,153074,152464],{"class":271},[41,153076,153077],{"class":43,"line":33055},[41,153078,80],{"emptyLinePlaceholder":79},[41,153080,153081,153083,153085,153088,153090,153093,153095,153098,153100,153103],{"class":43,"line":33075},[41,153082,31402],{"class":58},[41,153084,276],{"class":275},[41,153086,153087],{"class":378},"\"学号",[41,153089,1374],{"class":58},[41,153091,153092],{"class":378},"姓名",[41,153094,1374],{"class":58},[41,153096,153097],{"class":378},"年龄",[41,153099,1374],{"class":58},[41,153101,153102],{"class":378},"成绩\"",[41,153104,282],{"class":275},[41,153106,153107,153109,153111,153113],{"class":43,"line":33091},[41,153108,3339],{"class":271},[41,153110,152240],{"class":275},[41,153112,26146],{"class":271},[41,153114,152245],{"class":275},[41,153116,153117],{"class":43,"line":33097},[41,153118,153119],{"class":275},"        print_student(student)\n",[41,153121,153122],{"class":43,"line":33111},[41,153123,80],{"emptyLinePlaceholder":79},[41,153125,153126],{"class":43,"line":33117},[41,153127,80],{"emptyLinePlaceholder":79},[41,153129,153130,153132,153134],{"class":43,"line":33123},[41,153131,32050],{"class":271},[41,153133,2112],{"class":54},[41,153135,32056],{"class":275},[41,153137,153138,153141,153143],{"class":43,"line":33134},[41,153139,153140],{"class":275},"    students ",[41,153142,321],{"class":271},[41,153144,153145],{"class":275}," load_students()\n",[41,153147,153148],{"class":43,"line":33140},[41,153149,80],{"emptyLinePlaceholder":79},[41,153151,153152,153154,153156],{"class":43,"line":33146},[41,153153,2390],{"class":271},[41,153155,95395],{"class":58},[41,153157,3877],{"class":275},[41,153159,153160],{"class":43,"line":33156},[41,153161,153162],{"class":275},"        show_menu()\n",[41,153164,153165,153168,153170,153172,153174,153177],{"class":43,"line":33162},[41,153166,153167],{"class":275},"        choice ",[41,153169,321],{"class":271},[41,153171,60708],{"class":58},[41,153173,276],{"class":275},[41,153175,153176],{"class":378},"\"请输入操作:\"",[41,153178,282],{"class":275},[41,153180,153181],{"class":43,"line":33173},[41,153182,80],{"emptyLinePlaceholder":79},[41,153184,153185,153187,153190,153192,153195],{"class":43,"line":33179},[41,153186,2635],{"class":271},[41,153188,153189],{"class":275}," choice ",[41,153191,3087],{"class":271},[41,153193,153194],{"class":378}," \"1\"",[41,153196,3877],{"class":275},[41,153198,153199],{"class":43,"line":33189},[41,153200,153201],{"class":275},"            add_student(students)\n",[41,153203,153204,153207,153209,153211,153214],{"class":43,"line":33194},[41,153205,153206],{"class":271},"        elif",[41,153208,153189],{"class":275},[41,153210,3087],{"class":271},[41,153212,153213],{"class":378}," \"2\"",[41,153215,3877],{"class":275},[41,153217,153218],{"class":43,"line":33200},[41,153219,153220],{"class":275},"            delete_student(students)\n",[41,153222,153223,153225,153227,153229,153232],{"class":43,"line":33249},[41,153224,153206],{"class":271},[41,153226,153189],{"class":275},[41,153228,3087],{"class":271},[41,153230,153231],{"class":378}," \"3\"",[41,153233,3877],{"class":275},[41,153235,153236],{"class":43,"line":33296},[41,153237,153238],{"class":275},"            update_student(students)\n",[41,153240,153241,153243,153245,153247,153250],{"class":43,"line":33301},[41,153242,153206],{"class":271},[41,153244,153189],{"class":275},[41,153246,3087],{"class":271},[41,153248,153249],{"class":378}," \"4\"",[41,153251,3877],{"class":275},[41,153253,153254],{"class":43,"line":33307},[41,153255,153256],{"class":275},"            query_student(students)\n",[41,153258,153259,153261,153263,153265,153268],{"class":43,"line":33326},[41,153260,153206],{"class":271},[41,153262,153189],{"class":275},[41,153264,3087],{"class":271},[41,153266,153267],{"class":378}," \"5\"",[41,153269,3877],{"class":275},[41,153271,153272],{"class":43,"line":33332},[41,153273,153274],{"class":275},"            show_all_students(students)\n",[41,153276,153277,153279,153281,153283,153286],{"class":43,"line":33352},[41,153278,153206],{"class":271},[41,153280,153189],{"class":275},[41,153282,3087],{"class":271},[41,153284,153285],{"class":378}," \"0\"",[41,153287,3877],{"class":275},[41,153289,153290,153292,153294,153297],{"class":43,"line":33358},[41,153291,34753],{"class":58},[41,153293,276],{"class":275},[41,153295,153296],{"class":378},"\"退出系统\"",[41,153298,282],{"class":275},[41,153300,153301],{"class":43,"line":33364},[41,153302,115201],{"class":271},[41,153304,153305,153307],{"class":43,"line":33374},[41,153306,2672],{"class":271},[41,153308,3877],{"class":275},[41,153310,153311,153313,153315,153318],{"class":43,"line":33379},[41,153312,34753],{"class":58},[41,153314,276],{"class":275},[41,153316,153317],{"class":378},"\"输入错误\"",[41,153319,282],{"class":275},[41,153321,153322],{"class":43,"line":33385},[41,153323,80],{"emptyLinePlaceholder":79},[41,153325,153326],{"class":43,"line":33401},[41,153327,80],{"emptyLinePlaceholder":79},[41,153329,153330,153332,153334,153336,153338],{"class":43,"line":33446},[41,153331,1672],{"class":271},[41,153333,31323],{"class":58},[41,153335,101662],{"class":271},[41,153337,101665],{"class":378},[41,153339,3877],{"class":275},[41,153341,153342],{"class":43,"line":33452},[41,153343,101672],{"class":275},[20,153345,153346],{},"这个项目串联了：",[224,153348,153349,153352,153355,153358,153361,153363],{},[227,153350,153351],{},"菜单循环。",[227,153353,153354],{},"函数封装。",[227,153356,153357],{},"列表字典。",[227,153359,153360],{},"JSON 读写。",[227,153362,151830],{},[227,153364,153365,28488],{},[24,153366,153367],{},"if __name__ == \"__main__\"",[15,153369,153371],{"id":153370},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[20,153373,153374],{},"可以进一步拆成两个类：",[224,153376,153377,153382],{},[227,153378,153379,153381],{},[24,153380,149671],{},"：表示单个学生。",[227,153383,153384,153386],{},[24,153385,151697],{},"：负责学生增删改查和文件保存。",[20,153388,153389],{},"示意代码：",[32,153391,153393],{"className":30481,"code":153392,"language":30483,"meta":37,"style":37},"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",[24,153394,153395,153405,153409,153413,153417,153425,153432,153438,153444,153450,153454,153462,153468,153478,153488,153498,153508,153512,153516,153522,153530,153538,153546,153554,153562,153570],{"__ignoreMap":37},[41,153396,153397,153399,153401,153403],{"class":43,"line":44},[41,153398,30840],{"class":271},[41,153400,151255],{"class":275},[41,153402,30495],{"class":271},[41,153404,151260],{"class":275},[41,153406,153407],{"class":43,"line":51},[41,153408,80],{"emptyLinePlaceholder":79},[41,153410,153411],{"class":43,"line":62},[41,153412,80],{"emptyLinePlaceholder":79},[41,153414,153415],{"class":43,"line":70},[41,153416,151273],{"class":54},[41,153418,153419,153421,153423],{"class":43,"line":76},[41,153420,14832],{"class":271},[41,153422,8036],{"class":54},[41,153424,3877],{"class":275},[41,153426,153427,153430],{"class":43,"line":83},[41,153428,153429],{"class":275},"    student_id: ",[41,153431,151289],{"class":58},[41,153433,153434,153436],{"class":43,"line":89},[41,153435,151286],{"class":275},[41,153437,151289],{"class":58},[41,153439,153440,153442],{"class":43,"line":96},[41,153441,151294],{"class":275},[41,153443,151297],{"class":58},[41,153445,153446,153448],{"class":43,"line":104},[41,153447,151302],{"class":275},[41,153449,151305],{"class":58},[41,153451,153452],{"class":43,"line":176},[41,153453,80],{"emptyLinePlaceholder":79},[41,153455,153456,153458,153460],{"class":43,"line":184},[41,153457,30904],{"class":271},[41,153459,151453],{"class":54},[41,153461,30910],{"class":275},[41,153463,153464,153466],{"class":43,"line":1757},[41,153465,14890],{"class":271},[41,153467,15710],{"class":275},[41,153469,153470,153472,153474,153476],{"class":43,"line":1763},[41,153471,151466],{"class":378},[41,153473,51540],{"class":275},[41,153475,30926],{"class":58},[41,153477,151473],{"class":275},[41,153479,153480,153482,153484,153486],{"class":43,"line":1768},[41,153481,151478],{"class":378},[41,153483,51540],{"class":275},[41,153485,30926],{"class":58},[41,153487,151485],{"class":275},[41,153489,153490,153492,153494,153496],{"class":43,"line":1782},[41,153491,151490],{"class":378},[41,153493,51540],{"class":275},[41,153495,30926],{"class":58},[41,153497,151497],{"class":275},[41,153499,153500,153502,153504,153506],{"class":43,"line":1787},[41,153501,151502],{"class":378},[41,153503,51540],{"class":275},[41,153505,30926],{"class":58},[41,153507,151509],{"class":275},[41,153509,153510],{"class":43,"line":1793},[41,153511,2667],{"class":275},[41,153513,153514],{"class":43,"line":1814},[41,153515,80],{"emptyLinePlaceholder":79},[41,153517,153518,153520],{"class":43,"line":1819},[41,153519,151117],{"class":54},[41,153521,151120],{"class":58},[41,153523,153524,153526,153528],{"class":43,"line":1833},[41,153525,30904],{"class":271},[41,153527,151530],{"class":54},[41,153529,151533],{"class":275},[41,153531,153532,153534,153536],{"class":43,"line":1838},[41,153533,14890],{"class":271},[41,153535,151137],{"class":58},[41,153537,151542],{"class":275},[41,153539,153540,153542,153544],{"class":43,"line":1867},[41,153541,151547],{"class":275},[41,153543,151550],{"class":378},[41,153545,87939],{"class":275},[41,153547,153548,153550,153552],{"class":43,"line":1872},[41,153549,151547],{"class":275},[41,153551,62782],{"class":378},[41,153553,87939],{"class":275},[41,153555,153556,153558,153560],{"class":43,"line":1889},[41,153557,151547],{"class":275},[41,153559,69227],{"class":378},[41,153561,87939],{"class":275},[41,153563,153564,153566,153568],{"class":43,"line":1894},[41,153565,151547],{"class":275},[41,153567,151575],{"class":378},[41,153569,87939],{"class":275},[41,153571,153572],{"class":43,"line":1899},[41,153573,38229],{"class":275},[20,153575,153576],{},"管理器示意：",[32,153578,153580],{"className":30481,"code":153579,"language":30483,"meta":37,"style":37},"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",[24,153581,153582,153591,153599,153610,153614,153624,153637,153648,153655,153661,153665,153674,153683,153689,153696],{"__ignoreMap":37},[41,153583,153584,153586,153589],{"class":43,"line":44},[41,153585,14832],{"class":271},[41,153587,153588],{"class":54}," StudentManager",[41,153590,3877],{"class":275},[41,153592,153593,153595,153597],{"class":43,"line":51},[41,153594,30904],{"class":271},[41,153596,30907],{"class":58},[41,153598,30910],{"class":275},[41,153600,153601,153603,153606,153608],{"class":43,"line":62},[41,153602,30948],{"class":58},[41,153604,153605],{"class":275},".students ",[41,153607,321],{"class":271},[41,153609,51941],{"class":275},[41,153611,153612],{"class":43,"line":70},[41,153613,80],{"emptyLinePlaceholder":79},[41,153615,153616,153618,153621],{"class":43,"line":76},[41,153617,30904],{"class":271},[41,153619,153620],{"class":54}," find_by_id",[41,153622,153623],{"class":275},"(self, student_id):\n",[41,153625,153626,153628,153630,153632,153634],{"class":43,"line":83},[41,153627,3541],{"class":271},[41,153629,152240],{"class":275},[41,153631,26146],{"class":271},[41,153633,38976],{"class":58},[41,153635,153636],{"class":275},".students:\n",[41,153638,153639,153641,153644,153646],{"class":43,"line":89},[41,153640,4780],{"class":271},[41,153642,153643],{"class":275}," student.student_id ",[41,153645,3087],{"class":271},[41,153647,152261],{"class":275},[41,153649,153650,153653],{"class":43,"line":96},[41,153651,153652],{"class":271},"                return",[41,153654,152268],{"class":275},[41,153656,153657,153659],{"class":43,"line":104},[41,153658,14890],{"class":271},[41,153660,152275],{"class":58},[41,153662,153663],{"class":43,"line":176},[41,153664,80],{"emptyLinePlaceholder":79},[41,153666,153667,153669,153671],{"class":43,"line":184},[41,153668,30904],{"class":271},[41,153670,5347],{"class":54},[41,153672,153673],{"class":275},"(self, student):\n",[41,153675,153676,153678,153680],{"class":43,"line":1757},[41,153677,2635],{"class":271},[41,153679,38976],{"class":58},[41,153681,153682],{"class":275},".find_by_id(student.student_id):\n",[41,153684,153685,153687],{"class":43,"line":1763},[41,153686,15870],{"class":271},[41,153688,125910],{"class":58},[41,153690,153691,153693],{"class":43,"line":1768},[41,153692,30948],{"class":58},[41,153694,153695],{"class":275},".students.append(student)\n",[41,153697,153698,153700],{"class":43,"line":1782},[41,153699,14890],{"class":271},[41,153701,153702],{"class":58}," True\n",[20,153704,153705],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[15,153707,153709],{"id":153708},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[241,153711,153713],{"id":153712},"_1251-数据结构","12.5.1 数据结构",[32,153715,153717],{"className":30481,"code":153716,"language":30483,"meta":37,"style":37},"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",[24,153718,153719,153727,153758,153788,153817,153846],{"__ignoreMap":37},[41,153720,153721,153723,153725],{"class":43,"line":44},[41,153722,148568],{"class":275},[41,153724,321],{"class":271},[41,153726,55550],{"class":275},[41,153728,153729,153731,153733,153735,153737,153739,153742,153744,153747,153749,153751,153753,153756],{"class":43,"line":51},[41,153730,148488],{"class":275},[41,153732,148100],{"class":378},[41,153734,51540],{"class":275},[41,153736,148711],{"class":378},[41,153738,12573],{"class":275},[41,153740,153741],{"class":378},"\"category\"",[41,153743,51540],{"class":275},[41,153745,153746],{"class":378},"\"手机\"",[41,153748,12573],{"class":275},[41,153750,84187],{"class":378},[41,153752,51540],{"class":275},[41,153754,153755],{"class":58},"12000",[41,153757,5068],{"class":275},[41,153759,153760,153762,153764,153766,153768,153770,153772,153774,153777,153779,153781,153783,153786],{"class":43,"line":62},[41,153761,148488],{"class":275},[41,153763,148100],{"class":378},[41,153765,51540],{"class":275},[41,153767,148711],{"class":378},[41,153769,12573],{"class":275},[41,153771,153741],{"class":378},[41,153773,51540],{"class":275},[41,153775,153776],{"class":378},"\"电脑\"",[41,153778,12573],{"class":275},[41,153780,84187],{"class":378},[41,153782,51540],{"class":275},[41,153784,153785],{"class":58},"18000",[41,153787,5068],{"class":275},[41,153789,153790,153792,153794,153796,153798,153800,153802,153804,153806,153808,153810,153812,153815],{"class":43,"line":70},[41,153791,148488],{"class":275},[41,153793,148100],{"class":378},[41,153795,51540],{"class":275},[41,153797,148732],{"class":378},[41,153799,12573],{"class":275},[41,153801,153741],{"class":378},[41,153803,51540],{"class":275},[41,153805,153746],{"class":378},[41,153807,12573],{"class":275},[41,153809,84187],{"class":378},[41,153811,51540],{"class":275},[41,153813,153814],{"class":58},"15000",[41,153816,5068],{"class":275},[41,153818,153819,153821,153823,153825,153827,153829,153831,153833,153835,153837,153839,153841,153844],{"class":43,"line":76},[41,153820,148488],{"class":275},[41,153822,148100],{"class":378},[41,153824,51540],{"class":275},[41,153826,148732],{"class":378},[41,153828,12573],{"class":275},[41,153830,153741],{"class":378},[41,153832,51540],{"class":275},[41,153834,153776],{"class":378},[41,153836,12573],{"class":275},[41,153838,84187],{"class":378},[41,153840,51540],{"class":275},[41,153842,153843],{"class":58},"16000",[41,153845,5068],{"class":275},[41,153847,153848],{"class":43,"line":83},[41,153849,33349],{"class":275},[241,153851,153853],{"id":153852},"_1252-按日期统计","12.5.2 按日期统计",[32,153855,153857],{"className":30481,"code":153856,"language":30483,"meta":37,"style":37},"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",[24,153858,153859,153868,153872,153883,153897,153910,153929,153933],{"__ignoreMap":37},[41,153860,153861,153864,153866],{"class":43,"line":44},[41,153862,153863],{"class":275},"daily_total ",[41,153865,321],{"class":271},[41,153867,87971],{"class":275},[41,153869,153870],{"class":43,"line":51},[41,153871,80],{"emptyLinePlaceholder":79},[41,153873,153874,153876,153878,153880],{"class":43,"line":62},[41,153875,3163],{"class":271},[41,153877,148312],{"class":275},[41,153879,26146],{"class":271},[41,153881,153882],{"class":275}," sales:\n",[41,153884,153885,153888,153890,153893,153895],{"class":43,"line":70},[41,153886,153887],{"class":275},"    date ",[41,153889,321],{"class":271},[41,153891,153892],{"class":275}," item[",[41,153894,148100],{"class":378},[41,153896,33349],{"class":275},[41,153898,153899,153902,153904,153906,153908],{"class":43,"line":76},[41,153900,153901],{"class":275},"    amount ",[41,153903,321],{"class":271},[41,153905,153892],{"class":275},[41,153907,84187],{"class":378},[41,153909,33349],{"class":275},[41,153911,153912,153915,153917,153920,153922,153924,153926],{"class":43,"line":83},[41,153913,153914],{"class":275},"    daily_total[date] ",[41,153916,321],{"class":271},[41,153918,153919],{"class":275}," daily_total.get(date, ",[41,153921,465],{"class":58},[41,153923,13852],{"class":275},[41,153925,754],{"class":271},[41,153927,153928],{"class":275}," amount\n",[41,153930,153931],{"class":43,"line":89},[41,153932,80],{"emptyLinePlaceholder":79},[41,153934,153935,153937],{"class":43,"line":96},[41,153936,30518],{"class":58},[41,153938,153939],{"class":275},"(daily_total)\n",[241,153941,153943],{"id":153942},"_1253-按类别统计","12.5.3 按类别统计",[32,153945,153947],{"className":30481,"code":153946,"language":30483,"meta":37,"style":37},"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",[24,153948,153949,153958,153962,153972,153985,153997,154015,154019],{"__ignoreMap":37},[41,153950,153951,153954,153956],{"class":43,"line":44},[41,153952,153953],{"class":275},"category_total ",[41,153955,321],{"class":271},[41,153957,87971],{"class":275},[41,153959,153960],{"class":43,"line":51},[41,153961,80],{"emptyLinePlaceholder":79},[41,153963,153964,153966,153968,153970],{"class":43,"line":62},[41,153965,3163],{"class":271},[41,153967,148312],{"class":275},[41,153969,26146],{"class":271},[41,153971,153882],{"class":275},[41,153973,153974,153977,153979,153981,153983],{"class":43,"line":70},[41,153975,153976],{"class":275},"    category ",[41,153978,321],{"class":271},[41,153980,153892],{"class":275},[41,153982,153741],{"class":378},[41,153984,33349],{"class":275},[41,153986,153987,153989,153991,153993,153995],{"class":43,"line":76},[41,153988,153901],{"class":275},[41,153990,321],{"class":271},[41,153992,153892],{"class":275},[41,153994,84187],{"class":378},[41,153996,33349],{"class":275},[41,153998,153999,154002,154004,154007,154009,154011,154013],{"class":43,"line":83},[41,154000,154001],{"class":275},"    category_total[category] ",[41,154003,321],{"class":271},[41,154005,154006],{"class":275}," category_total.get(category, ",[41,154008,465],{"class":58},[41,154010,13852],{"class":275},[41,154012,754],{"class":271},[41,154014,153928],{"class":275},[41,154016,154017],{"class":43,"line":89},[41,154018,80],{"emptyLinePlaceholder":79},[41,154020,154021,154023],{"class":43,"line":96},[41,154022,30518],{"class":58},[41,154024,154025],{"class":275},"(category_total)\n",[241,154027,154029],{"id":154028},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[32,154031,154033],{"className":30481,"code":154032,"language":30483,"meta":37,"style":37},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[24,154034,154035,154060],{"__ignoreMap":37},[41,154036,154037,154040,154042,154044,154047,154050,154053,154056,154058],{"class":43,"line":44},[41,154038,154039],{"class":275},"top_date, top_amount ",[41,154041,321],{"class":271},[41,154043,6089],{"class":58},[41,154045,154046],{"class":275},"(daily_total.items(), ",[41,154048,154049],{"class":5354},"key",[41,154051,154052],{"class":271},"=lambda",[41,154054,154055],{"class":275}," item: item[",[41,154057,26],{"class":58},[41,154059,4795],{"class":275},[41,154061,154062,154064],{"class":43,"line":51},[41,154063,30518],{"class":58},[41,154065,154066],{"class":275},"(top_date, top_amount)\n",[15,154068,154070],{"id":154069},"_126-绘制柱状图","12.6 绘制柱状图",[32,154072,154074],{"className":30481,"code":154073,"language":30483,"meta":37,"style":37},"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",[24,154075,154076,154090,154101,154105,154113,154125,154137,154148,154152,154156,154166,154177,154191,154196,154213,154230,154246,154250],{"__ignoreMap":37},[41,154077,154078,154080,154082,154084,154086,154088],{"class":43,"line":44},[41,154079,30840],{"class":271},[41,154081,147482],{"class":275},[41,154083,30495],{"class":271},[41,154085,147487],{"class":275},[41,154087,31486],{"class":271},[41,154089,147492],{"class":275},[41,154091,154092,154094,154096,154098],{"class":43,"line":51},[41,154093,30840],{"class":271},[41,154095,147341],{"class":275},[41,154097,30495],{"class":271},[41,154099,154100],{"class":275}," Bar\n",[41,154102,154103],{"class":43,"line":62},[41,154104,80],{"emptyLinePlaceholder":79},[41,154106,154107,154109,154111],{"class":43,"line":70},[41,154108,153953],{"class":275},[41,154110,321],{"class":271},[41,154112,15710],{"class":275},[41,154114,154115,154118,154120,154123],{"class":43,"line":76},[41,154116,154117],{"class":378},"    \"手机\"",[41,154119,51540],{"class":275},[41,154121,154122],{"class":58},"27000",[41,154124,31569],{"class":275},[41,154126,154127,154130,154132,154135],{"class":43,"line":83},[41,154128,154129],{"class":378},"    \"电脑\"",[41,154131,51540],{"class":275},[41,154133,154134],{"class":58},"34000",[41,154136,31569],{"class":275},[41,154138,154139,154142,154144,154146],{"class":43,"line":89},[41,154140,154141],{"class":378},"    \"耳机\"",[41,154143,51540],{"class":275},[41,154145,124502],{"class":58},[41,154147,31569],{"class":275},[41,154149,154150],{"class":43,"line":96},[41,154151,1706],{"class":275},[41,154153,154154],{"class":43,"line":104},[41,154155,80],{"emptyLinePlaceholder":79},[41,154157,154158,154161,154163],{"class":43,"line":176},[41,154159,154160],{"class":275},"bar ",[41,154162,321],{"class":271},[41,154164,154165],{"class":275}," Bar()\n",[41,154167,154168,154171,154174],{"class":43,"line":184},[41,154169,154170],{"class":275},"bar.add_xaxis(",[41,154172,154173],{"class":58},"list",[41,154175,154176],{"class":275},"(category_total.keys()))\n",[41,154178,154179,154182,154184,154186,154188],{"class":43,"line":1757},[41,154180,154181],{"class":275},"bar.add_yaxis(",[41,154183,147398],{"class":378},[41,154185,12573],{"class":275},[41,154187,154173],{"class":58},[41,154189,154190],{"class":275},"(category_total.values()))\n",[41,154192,154193],{"class":43,"line":1763},[41,154194,154195],{"class":275},"bar.set_global_opts(\n",[41,154197,154198,154200,154202,154204,154206,154208,154211],{"class":43,"line":1768},[41,154199,147576],{"class":5354},[41,154201,321],{"class":271},[41,154203,147581],{"class":275},[41,154205,51510],{"class":5354},[41,154207,321],{"class":271},[41,154209,154210],{"class":378},"\"品类销售额\"",[41,154212,38150],{"class":275},[41,154214,154215,154217,154219,154221,154223,154225,154228],{"class":43,"line":1782},[41,154216,147595],{"class":5354},[41,154218,321],{"class":271},[41,154220,147600],{"class":275},[41,154222,79913],{"class":5354},[41,154224,321],{"class":271},[41,154226,154227],{"class":378},"\"品类\"",[41,154229,38150],{"class":275},[41,154231,154232,154234,154236,154238,154240,154242,154244],{"class":43,"line":1787},[41,154233,147614],{"class":5354},[41,154235,321],{"class":271},[41,154237,147600],{"class":275},[41,154239,79913],{"class":5354},[41,154241,321],{"class":271},[41,154243,147398],{"class":378},[41,154245,38150],{"class":275},[41,154247,154248],{"class":43,"line":1793},[41,154249,282],{"class":275},[41,154251,154252,154255,154258],{"class":43,"line":1814},[41,154253,154254],{"class":275},"bar.render(",[41,154256,154257],{"class":378},"\"category_sales.html\"",[41,154259,282],{"class":275},[15,154261,154263],{"id":154262},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[20,154265,154266],{},"时间线适合展示不同日期、月份、年份的数据变化。",[32,154268,154270],{"className":30481,"code":154269,"language":30483,"meta":37,"style":37},"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",[24,154271,154272,154286,154297,154301,154309,154333,154356,154381,154385,154389,154399,154403,154414,154423,154433,154447,154478,154483,154487],{"__ignoreMap":37},[41,154273,154274,154276,154278,154280,154282,154284],{"class":43,"line":44},[41,154275,30840],{"class":271},[41,154277,147482],{"class":275},[41,154279,30495],{"class":271},[41,154281,147487],{"class":275},[41,154283,31486],{"class":271},[41,154285,147492],{"class":275},[41,154287,154288,154290,154292,154294],{"class":43,"line":51},[41,154289,30840],{"class":271},[41,154291,147341],{"class":275},[41,154293,30495],{"class":271},[41,154295,154296],{"class":275}," Bar, Timeline\n",[41,154298,154299],{"class":43,"line":62},[41,154300,80],{"emptyLinePlaceholder":79},[41,154302,154303,154305,154307],{"class":43,"line":70},[41,154304,101761],{"class":275},[41,154306,321],{"class":271},[41,154308,15710],{"class":275},[41,154310,154311,154314,154317,154319,154321,154323,154325,154327,154329,154331],{"class":43,"line":76},[41,154312,154313],{"class":378},"    \"2024-10-01\"",[41,154315,154316],{"class":275},": {",[41,154318,153746],{"class":378},[41,154320,51540],{"class":275},[41,154322,153755],{"class":58},[41,154324,12573],{"class":275},[41,154326,153776],{"class":378},[41,154328,51540],{"class":275},[41,154330,153785],{"class":58},[41,154332,5068],{"class":275},[41,154334,154335,154338,154340,154342,154344,154346,154348,154350,154352,154354],{"class":43,"line":83},[41,154336,154337],{"class":378},"    \"2024-10-02\"",[41,154339,154316],{"class":275},[41,154341,153746],{"class":378},[41,154343,51540],{"class":275},[41,154345,153814],{"class":58},[41,154347,12573],{"class":275},[41,154349,153776],{"class":378},[41,154351,51540],{"class":275},[41,154353,153843],{"class":58},[41,154355,5068],{"class":275},[41,154357,154358,154361,154363,154365,154367,154370,154372,154374,154376,154379],{"class":43,"line":89},[41,154359,154360],{"class":378},"    \"2024-10-03\"",[41,154362,154316],{"class":275},[41,154364,153746],{"class":378},[41,154366,51540],{"class":275},[41,154368,154369],{"class":58},"17000",[41,154371,12573],{"class":275},[41,154373,153776],{"class":378},[41,154375,51540],{"class":275},[41,154377,154378],{"class":58},"19000",[41,154380,5068],{"class":275},[41,154382,154383],{"class":43,"line":96},[41,154384,1706],{"class":275},[41,154386,154387],{"class":43,"line":104},[41,154388,80],{"emptyLinePlaceholder":79},[41,154390,154391,154394,154396],{"class":43,"line":176},[41,154392,154393],{"class":275},"timeline ",[41,154395,321],{"class":271},[41,154397,154398],{"class":275}," Timeline()\n",[41,154400,154401],{"class":43,"line":184},[41,154402,80],{"emptyLinePlaceholder":79},[41,154404,154405,154407,154410,154412],{"class":43,"line":1757},[41,154406,3163],{"class":271},[41,154408,154409],{"class":275}," date, category_data ",[41,154411,26146],{"class":271},[41,154413,149251],{"class":275},[41,154415,154416,154419,154421],{"class":43,"line":1763},[41,154417,154418],{"class":275},"    bar ",[41,154420,321],{"class":271},[41,154422,154165],{"class":275},[41,154424,154425,154428,154430],{"class":43,"line":1768},[41,154426,154427],{"class":275},"    bar.add_xaxis(",[41,154429,154173],{"class":58},[41,154431,154432],{"class":275},"(category_data.keys()))\n",[41,154434,154435,154438,154440,154442,154444],{"class":43,"line":1782},[41,154436,154437],{"class":275},"    bar.add_yaxis(",[41,154439,147398],{"class":378},[41,154441,12573],{"class":275},[41,154443,154173],{"class":58},[41,154445,154446],{"class":275},"(category_data.values()))\n",[41,154448,154449,154452,154455,154457,154459,154461,154463,154465,154467,154469,154471,154473,154476],{"class":43,"line":1787},[41,154450,154451],{"class":275},"    bar.set_global_opts(",[41,154453,154454],{"class":5354},"title_opts",[41,154456,321],{"class":271},[41,154458,147581],{"class":275},[41,154460,51510],{"class":5354},[41,154462,321],{"class":271},[41,154464,327],{"class":271},[41,154466,524],{"class":378},[41,154468,1169],{"class":58},[41,154470,74029],{"class":275},[41,154472,1219],{"class":58},[41,154474,154475],{"class":378},"销售额\"",[41,154477,30600],{"class":275},[41,154479,154480],{"class":43,"line":1793},[41,154481,154482],{"class":275},"    timeline.add(bar, date)\n",[41,154484,154485],{"class":43,"line":1814},[41,154486,80],{"emptyLinePlaceholder":79},[41,154488,154489,154492,154495],{"class":43,"line":1819},[41,154490,154491],{"class":275},"timeline.render(",[41,154493,154494],{"class":378},"\"timeline_sales.html\"",[41,154496,282],{"class":275},[15,154498,154500],{"id":154499},"_128-绘制地图","12.8 绘制地图",[20,154502,154503],{},"地图适合展示地区数据。",[32,154505,154507],{"className":30481,"code":154506,"language":30483,"meta":37,"style":37},"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",[24,154508,154509,154523,154534,154538,154546,154559,154571,154584,154597,154601,154605,154615,154630,154635,154652,154671,154675],{"__ignoreMap":37},[41,154510,154511,154513,154515,154517,154519,154521],{"class":43,"line":44},[41,154512,30840],{"class":271},[41,154514,147482],{"class":275},[41,154516,30495],{"class":271},[41,154518,147487],{"class":275},[41,154520,31486],{"class":271},[41,154522,147492],{"class":275},[41,154524,154525,154527,154529,154531],{"class":43,"line":51},[41,154526,30840],{"class":271},[41,154528,147341],{"class":275},[41,154530,30495],{"class":271},[41,154532,154533],{"class":275}," Map\n",[41,154535,154536],{"class":43,"line":62},[41,154537,80],{"emptyLinePlaceholder":79},[41,154539,154540,154542,154544],{"class":43,"line":70},[41,154541,101761],{"class":275},[41,154543,321],{"class":271},[41,154545,55550],{"class":275},[41,154547,154548,154551,154553,154555,154557],{"class":43,"line":76},[41,154549,154550],{"class":275},"    (",[41,154552,69372],{"class":378},[41,154554,12573],{"class":275},[41,154556,1090],{"class":58},[41,154558,38150],{"class":275},[41,154560,154561,154563,154565,154567,154569],{"class":43,"line":83},[41,154562,154550],{"class":275},[41,154564,69392],{"class":378},[41,154566,12573],{"class":275},[41,154568,147415],{"class":58},[41,154570,38150],{"class":275},[41,154572,154573,154575,154578,154580,154582],{"class":43,"line":89},[41,154574,154550],{"class":275},[41,154576,154577],{"class":378},"\"广东\"",[41,154579,12573],{"class":275},[41,154581,1862],{"class":58},[41,154583,38150],{"class":275},[41,154585,154586,154588,154591,154593,154595],{"class":43,"line":96},[41,154587,154550],{"class":275},[41,154589,154590],{"class":378},"\"浙江\"",[41,154592,12573],{"class":275},[41,154594,147420],{"class":58},[41,154596,38150],{"class":275},[41,154598,154599],{"class":43,"line":104},[41,154600,33349],{"class":275},[41,154602,154603],{"class":43,"line":176},[41,154604,80],{"emptyLinePlaceholder":79},[41,154606,154607,154610,154612],{"class":43,"line":184},[41,154608,154609],{"class":275},"map_chart ",[41,154611,321],{"class":271},[41,154613,154614],{"class":275}," Map()\n",[41,154616,154617,154620,154622,154625,154628],{"class":43,"line":1757},[41,154618,154619],{"class":275},"map_chart.add(",[41,154621,147398],{"class":378},[41,154623,154624],{"class":275},", data, ",[41,154626,154627],{"class":378},"\"china\"",[41,154629,282],{"class":275},[41,154631,154632],{"class":43,"line":1763},[41,154633,154634],{"class":275},"map_chart.set_global_opts(\n",[41,154636,154637,154639,154641,154643,154645,154647,154650],{"class":43,"line":1768},[41,154638,147576],{"class":5354},[41,154640,321],{"class":271},[41,154642,147581],{"class":275},[41,154644,51510],{"class":5354},[41,154646,321],{"class":271},[41,154648,154649],{"class":378},"\"地区销售额\"",[41,154651,38150],{"class":275},[41,154653,154654,154657,154659,154662,154665,154667,154669],{"class":43,"line":1782},[41,154655,154656],{"class":5354},"    visualmap_opts",[41,154658,321],{"class":271},[41,154660,154661],{"class":275},"opts.VisualMapOpts(",[41,154663,154664],{"class":5354},"max_",[41,154666,321],{"class":271},[41,154668,1862],{"class":58},[41,154670,38150],{"class":275},[41,154672,154673],{"class":43,"line":1787},[41,154674,282],{"class":275},[41,154676,154677,154680,154683],{"class":43,"line":1793},[41,154678,154679],{"class":275},"map_chart.render(",[41,154681,154682],{"class":378},"\"map_sales.html\"",[41,154684,282],{"class":275},[20,154686,154687],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[15,154689,154691],{"id":154690},"_129-项目拆分建议","12.9 项目拆分建议",[20,154693,154694],{},"当代码超过一个文件时，可以这样组织：",[32,154696,154699],{"className":154697,"code":154698,"language":5325,"meta":37},[5323],"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",[24,154700,154698],{"__ignoreMap":37},[20,154702,154703],{},"职责：",[224,154705,154706,154712,154718,154724],{},[227,154707,154708,154711],{},[24,154709,154710],{},"main.py","：程序入口。",[227,154713,154714,154717],{},[24,154715,154716],{},"file_utils.py","：读写 JSON。",[227,154719,154720,154723],{},[24,154721,154722],{},"sales_service.py","：统计销售数据。",[227,154725,154726,154729],{},[24,154727,154728],{},"chart_builder.py","：生成图表。",[15,154731,154733],{"id":154732},"_1210-python基础复习清单","12.10 Python基础复习清单",[20,154735,154736],{},"语法基础：",[224,154738,154739,154742,154745,154748],{},[227,154740,154741],{},"会写变量、注释、输入输出。",[227,154743,154744],{},"会使用 int、float、str、bool。",[227,154746,154747],{},"会做类型转换。",[227,154749,154750],{},"会使用 f-string 格式化输出。",[20,154752,154753],{},"流程控制：",[224,154755,154756,154762,154768,154776],{},[227,154757,154758,154759,28488],{},"会写 ",[24,154760,154761],{},"if elif else",[227,154763,154758,154764,101121,154766,28488],{},[24,154765,108766],{},[24,154767,3163],{},[227,154769,154770,154771,101121,154773,28488],{},"理解 ",[24,154772,2192],{},[24,154774,154775],{},"continue",[227,154777,154778],{},"能写嵌套循环。",[20,154780,154781],{},"函数：",[224,154783,154784,154787,154790,154793],{},[227,154785,154786],{},"会定义和调用函数。",[227,154788,154789],{},"理解参数和返回值。",[227,154791,154792],{},"知道局部变量和全局变量。",[227,154794,154795],{},"会使用默认参数、关键字参数、不定长参数。",[20,154797,154798],{},"容器：",[224,154800,154801,154804,154807,154810,154813],{},[227,154802,154803],{},"会使用列表增删改查。",[227,154805,154806],{},"会遍历列表、字典。",[227,154808,154809],{},"会使用切片。",[227,154811,154812],{},"会用集合去重。",[227,154814,154815],{},"会处理列表嵌套字典。",[20,154817,154818],{},"文件和模块：",[224,154820,154821,154824,154827,154830,154833],{},[227,154822,154823],{},"会读写文本文件。",[227,154825,154826],{},"会读写 JSON。",[227,154828,154829],{},"会捕获常见异常。",[227,154831,154832],{},"会导入模块和第三方包。",[227,154834,154835],{},"会创建简单包结构。",[20,154837,154838],{},"项目能力：",[224,154840,154841,154844,154847,154850,154853],{},[227,154842,154843],{},"能把代码拆成函数。",[227,154845,154846],{},"能把数据保存到文件。",[227,154848,154849],{},"能处理用户输入错误。",[227,154851,154852],{},"能写一个完整菜单程序。",[227,154854,154855],{},"能用 pyecharts 生成图表。",[15,154857,154859],{"id":154858},"_1211-推荐练习顺序","12.11 推荐练习顺序",[224,154861,154862,154865,154868,154871,154874,154877,154880,154883],{},[227,154863,154864],{},"猜数字游戏。",[227,154866,154867],{},"ATM 菜单程序。",[227,154869,154870],{},"学生成绩统计。",[227,154872,154873],{},"学生管理系统函数版。",[227,154875,154876],{},"学生管理系统文件持久化版。",[227,154878,154879],{},"学生管理系统面向对象版。",[227,154881,154882],{},"销售数据统计。",[227,154884,154885],{},"销售数据可视化。",[15,154887,154889],{"id":154888},"_1212-常见学习误区","12.12 常见学习误区",[224,154891,154892,154895,154898,154901,154904,154907,154910],{},[227,154893,154894],{},"只看视频不敲代码。",[227,154896,154897],{},"一报错就复制错误去搜，不先读报错位置。",[227,154899,154900],{},"变量名随便写，后续自己看不懂。",[227,154902,154903],{},"所有代码都写在一个文件一个函数里。",[227,154905,154906],{},"不保存练习代码，复习时没有材料。",[227,154908,154909],{},"还没掌握列表字典就急着学框架。",[227,154911,154912],{},"不会读官方文档，只依赖教程。",[15,154914,154916],{"id":154915},"_1213-如何读报错","12.13 如何读报错",[20,154918,154919],{},"报错通常从下往上看最后几行。",[20,154921,15273],{},[32,154923,154926],{"className":154924,"code":154925,"language":5325,"meta":37},[5323],"ValueError: invalid literal for int() with base 10: 'abc'\n",[24,154927,154925],{"__ignoreMap":37},[20,154929,24736],{},[224,154931,154932,154938,154948],{},[227,154933,154934,154935,28488],{},"异常类型是 ",[24,154936,154937],{},"ValueError",[227,154939,107448,154940,154943,154944,154947],{},[24,154941,154942],{},"int()"," 无法把 ",[24,154945,154946],{},"'abc'"," 转成整数。",[227,154949,154950],{},"应该检查输入内容或增加异常处理。",[20,154952,154953],{},"再看文件名和行号：",[32,154955,154958],{"className":154956,"code":154957,"language":5325,"meta":37},[5323],"File \"main.py\", line 10, in \u003Cmodule>\n",[24,154959,154957],{"__ignoreMap":37},[20,154961,154962,154963,154965],{},"表示错误发生在 ",[24,154964,154710],{}," 第 10 行。",[15,154967,154969],{"id":154968},"_1214-后续学习方向","12.14 后续学习方向",[20,154971,154972],{},"Python 基础完成后，可以按兴趣选择方向：",[224,154974,154975,154987,154996,155008,155019,155028,155038],{},[227,154976,154977,154978,486,154981,486,154984,28488],{},"自动化办公：",[24,154979,154980],{},"openpyxl",[24,154982,154983],{},"python-docx",[24,154985,154986],{},"pdfplumber",[227,154988,154989,154990,486,154992,486,154994,28488],{},"数据分析：",[24,154991,100729],{},[24,154993,146288],{},[24,154995,146296],{},[227,154997,154998,154999,486,155002,486,155005,28488],{},"Web 后端：",[24,155000,155001],{},"Flask",[24,155003,155004],{},"FastAPI",[24,155006,155007],{},"Django",[227,155009,155010,155011,486,155013,486,155016,28488],{},"爬虫：",[24,155012,146273],{},[24,155014,155015],{},"BeautifulSoup",[24,155017,155018],{},"Scrapy",[227,155020,155021,155022,486,155024,155027],{},"测试开发：",[24,155023,146320],{},[24,155025,155026],{},"selenium","、接口测试。",[227,155029,155030,155031,486,155033,486,155035,28488],{},"人工智能：",[24,155032,100729],{},[24,155034,146288],{},[24,155036,155037],{},"pytorch",[227,155039,155040,155041,486,155043,486,155046,28488],{},"运维脚本：",[24,155042,145889],{},[24,155044,155045],{},"subprocess",[24,155047,155048],{},"paramiko",[20,155050,155051],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[15,155053,155055],{"id":155054},"_1215-结课练习","12.15 结课练习",[224,155057,155058,155061,155064,155067,155070,155073,155076,155079],{},[227,155059,155060],{},"完成函数版学生管理系统。",[227,155062,155063],{},"给学生管理系统增加 JSON 持久化。",[227,155065,155066],{},"给学生管理系统增加异常处理。",[227,155068,155069],{},"把学生管理系统改成面向对象版。",[227,155071,155072],{},"使用 pyecharts 绘制学生成绩柱状图。",[227,155074,155075],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[227,155077,155078],{},"按品类统计销售额并绘制柱状图。",[227,155080,155081],{},"写一份自己的 Python 学习路线图。",[189,155083,155084],{},"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":37,"searchDepth":51,"depth":51,"links":155086},[155087,155088,155091,155092,155093,155099,155100,155101,155102,155103,155104,155105,155106,155107,155108],{"id":151803,"depth":51,"text":151804},{"id":151853,"depth":51,"text":151854,"children":155089},[155090],{"id":151857,"depth":62,"text":151858},{"id":151896,"depth":51,"text":151897},{"id":153370,"depth":51,"text":153371},{"id":153708,"depth":51,"text":153709,"children":155094},[155095,155096,155097,155098],{"id":153712,"depth":62,"text":153713},{"id":153852,"depth":62,"text":153853},{"id":153942,"depth":62,"text":153943},{"id":154028,"depth":62,"text":154029},{"id":154069,"depth":51,"text":154070},{"id":154262,"depth":51,"text":154263},{"id":154499,"depth":51,"text":154500},{"id":154690,"depth":51,"text":154691},{"id":154732,"depth":51,"text":154733},{"id":154858,"depth":51,"text":154859},{"id":154888,"depth":51,"text":154889},{"id":154915,"depth":51,"text":154916},{"id":154968,"depth":51,"text":154969},{"id":155054,"depth":51,"text":155055},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151795,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155115,"title":155116,"body":155117,"description":196,"extension":197,"meta":157586,"navigation":79,"path":157587,"seo":157588,"stem":157589,"__hash__":157590},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155118,"toc":157561},[155119,155122,155126,155129,155132,155152,155155,155178,155181,155184,155206,155209,155231,155235,155238,155278,155281,155402,155406,155409,155449,155452,155476,155479,155483,155486,155500,155533,155536,155571,155574,155597,155600,155633,155636,155638,155644,155719,155722,155728,155745,155785,155789,155792,155838,155840,155878,155881,155916,155919,155954,155957,155989,155992,156011,156015,156019,156132,156134,156209,156213,156259,156262,156288,156297,156301,156304,156367,156375,156403,156407,156447,156512,156516,156519,156558,156561,156606,156609,156670,156674,156701,156704,156732,156735,156739,156743,156808,156811,156849,156852,156884,156888,156987,156991,156994,157067,157070,157118,157122,157128,157168,157171,157218,157221,157270,157274,157276,157290,157292,157473,157477,157504,157524,157531,157535,157552,157558],[10,155120,155116],{"id":155121},"_2-基础语法变量与字符串",[15,155123,155125],{"id":155124},"_21-注释","2.1 注释",[20,155127,155128],{},"注释是给人看的说明文字，不会被 Python 执行。",[20,155130,155131],{},"单行注释：",[32,155133,155135],{"className":30481,"code":155134,"language":30483,"meta":37,"style":37},"# 这是单行注释\nprint(\"hello\")\n",[24,155136,155137,155142],{"__ignoreMap":37},[41,155138,155139],{"class":43,"line":44},[41,155140,155141],{"class":47},"# 这是单行注释\n",[41,155143,155144,155146,155148,155150],{"class":43,"line":51},[41,155145,30518],{"class":58},[41,155147,276],{"class":275},[41,155149,5982],{"class":378},[41,155151,282],{"class":275},[20,155153,155154],{},"多行说明常用三引号：",[32,155156,155158],{"className":30481,"code":155157,"language":30483,"meta":37,"style":37},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[24,155159,155160,155164,155169,155174],{"__ignoreMap":37},[41,155161,155162],{"class":43,"line":44},[41,155163,95801],{"class":378},[41,155165,155166],{"class":43,"line":51},[41,155167,155168],{"class":378},"这是多行说明。\n",[41,155170,155171],{"class":43,"line":62},[41,155172,155173],{"class":378},"常用于文件顶部说明、函数说明等。\n",[41,155175,155176],{"class":43,"line":70},[41,155177,95801],{"class":378},[20,155179,155180],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[20,155182,155183],{},"不好：",[32,155185,155187],{"className":30481,"code":155186,"language":30483,"meta":37,"style":37},"# age 加 1\nage = age + 1\n",[24,155188,155189,155194],{"__ignoreMap":37},[41,155190,155191],{"class":43,"line":44},[41,155192,155193],{"class":47},"# age 加 1\n",[41,155195,155196,155198,155200,155202,155204],{"class":43,"line":51},[41,155197,146649],{"class":275},[41,155199,321],{"class":271},[41,155201,15845],{"class":275},[41,155203,754],{"class":271},[41,155205,55802],{"class":58},[20,155207,155208],{},"较好：",[32,155210,155212],{"className":30481,"code":155211,"language":30483,"meta":37,"style":37},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[24,155213,155214,155219],{"__ignoreMap":37},[41,155215,155216],{"class":43,"line":44},[41,155217,155218],{"class":47},"# 用户过完生日后，年龄增加一岁\n",[41,155220,155221,155223,155225,155227,155229],{"class":43,"line":51},[41,155222,146649],{"class":275},[41,155224,321],{"class":271},[41,155226,15845],{"class":275},[41,155228,754],{"class":271},[41,155230,55802],{"class":58},[15,155232,155234],{"id":155233},"_22-字面量","2.2 字面量",[20,155236,155237],{},"字面量就是代码中直接写出来的数据。",[32,155239,155241],{"className":30481,"code":155240,"language":30483,"meta":37,"style":37},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[24,155242,155243,155250,155257,155264,155271],{"__ignoreMap":37},[41,155244,155245,155247],{"class":43,"line":44},[41,155246,584],{"class":58},[41,155248,155249],{"class":47},"          # 整数\n",[41,155251,155252,155254],{"class":43,"line":51},[41,155253,324],{"class":58},[41,155255,155256],{"class":47},"         # 小数\n",[41,155258,155259,155261],{"class":43,"line":62},[41,155260,5982],{"class":378},[41,155262,155263],{"class":47},"      # 字符串\n",[41,155265,155266,155268],{"class":43,"line":70},[41,155267,31579],{"class":58},[41,155269,155270],{"class":47},"         # 布尔值\n",[41,155272,155273,155275],{"class":43,"line":76},[41,155274,95789],{"class":58},[41,155276,155277],{"class":47},"         # 空值\n",[20,155279,155280],{},"常见字面量类型：",[411,155282,155283,155293],{},[414,155284,155285],{},[417,155286,155287,155289,155291],{},[420,155288,23875],{},[420,155290,27595],{},[420,155292,25972],{},[458,155294,155295,155306,155317,155328,155340,155352,155364,155377,155389],{},[417,155296,155297,155299,155303],{},[463,155298,279],{},[463,155300,155301],{},[24,155302,584],{},[463,155304,155305],{},"整数",[417,155307,155308,155310,155314],{},[463,155309,315],{},[463,155311,155312],{},[24,155313,324],{},[463,155315,155316],{},"浮点数",[417,155318,155319,155321,155325],{},[463,155320,1443],{},[463,155322,155323],{},[24,155324,5982],{},[463,155326,155327],{},"字符串",[417,155329,155330,155332,155338],{},[463,155331,1495],{},[463,155333,155334,486,155336],{},[24,155335,31579],{},[24,155337,34090],{},[463,155339,66118],{},[417,155341,155342,155345,155349],{},[463,155343,155344],{},"NoneType",[463,155346,155347],{},[24,155348,95789],{},[463,155350,155351],{},"空值",[417,155353,155354,155356,155361],{},[463,155355,154173],{},[463,155357,155358],{},[24,155359,155360],{},"[1, 2, 3]",[463,155362,155363],{},"列表",[417,155365,155366,155369,155374],{},[463,155367,155368],{},"tuple",[463,155370,155371],{},[24,155372,155373],{},"(1, 2, 3)",[463,155375,155376],{},"元组",[417,155378,155379,155381,155386],{},[463,155380,114649],{},[463,155382,155383],{},[24,155384,155385],{},"{\"name\": \"张三\"}",[463,155387,155388],{},"字典",[417,155390,155391,155394,155399],{},[463,155392,155393],{},"set",[463,155395,155396],{},[24,155397,155398],{},"{1, 2, 3}",[463,155400,155401],{},"集合",[15,155403,155405],{"id":155404},"_23-变量","2.3 变量",[20,155407,155408],{},"变量是保存数据的名字。",[32,155410,155412],{"className":30481,"code":155411,"language":30483,"meta":37,"style":37},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[24,155413,155414,155422,155430,155440],{"__ignoreMap":37},[41,155415,155416,155418,155420],{"class":43,"line":44},[41,155417,146639],{"class":275},[41,155419,321],{"class":271},[41,155421,149456],{"class":378},[41,155423,155424,155426,155428],{"class":43,"line":51},[41,155425,146649],{"class":275},[41,155427,321],{"class":271},[41,155429,146654],{"class":58},[41,155431,155432,155435,155437],{"class":43,"line":62},[41,155433,155434],{"class":275},"height ",[41,155436,321],{"class":271},[41,155438,155439],{"class":58}," 1.75\n",[41,155441,155442,155445,155447],{"class":43,"line":70},[41,155443,155444],{"class":275},"is_student ",[41,155446,321],{"class":271},[41,155448,153702],{"class":58},[20,155450,155451],{},"Python 的变量不需要提前声明类型：",[32,155453,155455],{"className":30481,"code":155454,"language":30483,"meta":37,"style":37},"score = 100\nscore = \"满分\"\n",[24,155456,155457,155467],{"__ignoreMap":37},[41,155458,155459,155462,155464],{"class":43,"line":44},[41,155460,155461],{"class":275},"score ",[41,155463,321],{"class":271},[41,155465,155466],{"class":58}," 100\n",[41,155468,155469,155471,155473],{"class":43,"line":51},[41,155470,155461],{"class":275},[41,155472,321],{"class":271},[41,155474,155475],{"class":378}," \"满分\"\n",[20,155477,155478],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[15,155480,155482],{"id":155481},"_24-变量命名规则","2.4 变量命名规则",[20,155484,155485],{},"硬性规则：",[224,155487,155488,155491,155494,155497],{},[227,155489,155490],{},"只能由字母、数字、下划线组成。",[227,155492,155493],{},"不能以数字开头。",[227,155495,155496],{},"不能使用 Python 关键字。",[227,155498,155499],{},"区分大小写。",[32,155501,155503],{"className":30481,"code":155502,"language":30483,"meta":37,"style":37},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[24,155504,155505,155514,155523],{"__ignoreMap":37},[41,155506,155507,155510,155512],{"class":43,"line":44},[41,155508,155509],{"class":275},"user_name ",[41,155511,321],{"class":271},[41,155513,146644],{"class":378},[41,155515,155516,155519,155521],{"class":43,"line":51},[41,155517,155518],{"class":275},"age2 ",[41,155520,321],{"class":271},[41,155522,146654],{"class":58},[41,155524,155525,155528,155530],{"class":43,"line":62},[41,155526,155527],{"class":275},"_token ",[41,155529,321],{"class":271},[41,155531,155532],{"class":378}," \"abc\"\n",[20,155534,155535],{},"错误写法：",[32,155537,155539],{"className":30481,"code":155538,"language":30483,"meta":37,"style":37},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[24,155540,155541,155550,155562],{"__ignoreMap":37},[41,155542,155543,155546,155548],{"class":43,"line":44},[41,155544,155545],{"class":77506},"2age",[41,155547,13702],{"class":271},[41,155549,146654],{"class":58},[41,155551,155552,155554,155556,155558,155560],{"class":43,"line":51},[41,155553,131687],{"class":275},[41,155555,805],{"class":271},[41,155557,146639],{"class":275},[41,155559,321],{"class":271},[41,155561,146644],{"class":378},[41,155563,155564,155566,155568],{"class":43,"line":62},[41,155565,14832],{"class":271},[41,155567,13702],{"class":271},[41,155569,155570],{"class":378}," \"一班\"\n",[20,155572,155573],{},"查看关键字：",[32,155575,155577],{"className":30481,"code":155576,"language":30483,"meta":37,"style":37},"import keyword\n\nprint(keyword.kwlist)\n",[24,155578,155579,155586,155590],{"__ignoreMap":37},[41,155580,155581,155583],{"class":43,"line":44},[41,155582,30495],{"class":271},[41,155584,155585],{"class":275}," keyword\n",[41,155587,155588],{"class":43,"line":51},[41,155589,80],{"emptyLinePlaceholder":79},[41,155591,155592,155594],{"class":43,"line":62},[41,155593,30518],{"class":58},[41,155595,155596],{"class":275},"(keyword.kwlist)\n",[20,155598,155599],{},"推荐命名风格：",[32,155601,155603],{"className":30481,"code":155602,"language":30483,"meta":37,"style":37},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[24,155604,155605,155614,155624],{"__ignoreMap":37},[41,155606,155607,155610,155612],{"class":43,"line":44},[41,155608,155609],{"class":275},"student_name ",[41,155611,321],{"class":271},[41,155613,149456],{"class":378},[41,155615,155616,155619,155621],{"class":43,"line":51},[41,155617,155618],{"class":275},"total_price ",[41,155620,321],{"class":271},[41,155622,155623],{"class":58}," 99.8\n",[41,155625,155626,155629,155631],{"class":43,"line":62},[41,155627,155628],{"class":275},"is_finished ",[41,155630,321],{"class":271},[41,155632,125910],{"class":58},[20,155634,155635],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[15,155637,50835],{"id":50834},[20,155639,104469,155640,155643],{},[24,155641,155642],{},"type()"," 查看数据类型：",[32,155645,155647],{"className":30481,"code":155646,"language":30483,"meta":37,"style":37},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[24,155648,155649,155663,155677,155691,155705],{"__ignoreMap":37},[41,155650,155651,155653,155655,155657,155659,155661],{"class":43,"line":44},[41,155652,30518],{"class":58},[41,155654,276],{"class":275},[41,155656,103210],{"class":58},[41,155658,276],{"class":275},[41,155660,584],{"class":58},[41,155662,30600],{"class":275},[41,155664,155665,155667,155669,155671,155673,155675],{"class":43,"line":51},[41,155666,30518],{"class":58},[41,155668,276],{"class":275},[41,155670,103210],{"class":58},[41,155672,276],{"class":275},[41,155674,324],{"class":58},[41,155676,30600],{"class":275},[41,155678,155679,155681,155683,155685,155687,155689],{"class":43,"line":62},[41,155680,30518],{"class":58},[41,155682,276],{"class":275},[41,155684,103210],{"class":58},[41,155686,276],{"class":275},[41,155688,5982],{"class":378},[41,155690,30600],{"class":275},[41,155692,155693,155695,155697,155699,155701,155703],{"class":43,"line":70},[41,155694,30518],{"class":58},[41,155696,276],{"class":275},[41,155698,103210],{"class":58},[41,155700,276],{"class":275},[41,155702,31579],{"class":58},[41,155704,30600],{"class":275},[41,155706,155707,155709,155711,155713,155715,155717],{"class":43,"line":76},[41,155708,30518],{"class":58},[41,155710,276],{"class":275},[41,155712,103210],{"class":58},[41,155714,276],{"class":275},[41,155716,95789],{"class":58},[41,155718,30600],{"class":275},[20,155720,155721],{},"输出类似：",[32,155723,155726],{"className":155724,"code":155725,"language":5325,"meta":37},[5323],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[24,155727,155725],{"__ignoreMap":37},[20,155729,9163,155730,107386,155732,155734,155735,155737,155738,21638,155740,155737,155742,155744],{},[24,155731,1495],{},[24,155733,279],{}," 的子类，",[24,155736,31579],{}," 可以当作 ",[24,155739,26],{},[24,155741,34090],{},[24,155743,465],{},"，但业务代码中不要滥用。",[32,155746,155748],{"className":30481,"code":155747,"language":30483,"meta":37,"style":37},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[24,155749,155750,155768],{"__ignoreMap":37},[41,155751,155752,155754,155756,155758,155760,155762,155765],{"class":43,"line":44},[41,155753,30518],{"class":58},[41,155755,276],{"class":275},[41,155757,31579],{"class":58},[41,155759,45669],{"class":271},[41,155761,25221],{"class":58},[41,155763,155764],{"class":275},")   ",[41,155766,155767],{"class":47},"# 2\n",[41,155769,155770,155772,155774,155776,155778,155780,155782],{"class":43,"line":51},[41,155771,30518],{"class":58},[41,155773,276],{"class":275},[41,155775,34090],{"class":58},[41,155777,45669],{"class":271},[41,155779,25221],{"class":58},[41,155781,45911],{"class":275},[41,155783,155784],{"class":47},"# 1\n",[15,155786,155788],{"id":155787},"_26-类型转换","2.6 类型转换",[20,155790,155791],{},"常用转换函数：",[32,155793,155795],{"className":30481,"code":155794,"language":30483,"meta":37,"style":37},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[24,155796,155797,155807,155818,155828],{"__ignoreMap":37},[41,155798,155799,155801,155803,155805],{"class":43,"line":44},[41,155800,279],{"class":58},[41,155802,276],{"class":275},[41,155804,54419],{"class":378},[41,155806,282],{"class":275},[41,155808,155809,155811,155813,155816],{"class":43,"line":51},[41,155810,315],{"class":58},[41,155812,276],{"class":275},[41,155814,155815],{"class":378},"\"3.14\"",[41,155817,282],{"class":275},[41,155819,155820,155822,155824,155826],{"class":43,"line":62},[41,155821,1443],{"class":58},[41,155823,276],{"class":275},[41,155825,584],{"class":58},[41,155827,282],{"class":275},[41,155829,155830,155832,155834,155836],{"class":43,"line":70},[41,155831,1495],{"class":58},[41,155833,276],{"class":275},[41,155835,26],{"class":58},[41,155837,282],{"class":275},[20,155839,15273],{},[32,155841,155843],{"className":30481,"code":155842,"language":30483,"meta":37,"style":37},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[24,155844,155845,155854,155865],{"__ignoreMap":37},[41,155846,155847,155849,155851],{"class":43,"line":44},[41,155848,146649],{"class":275},[41,155850,321],{"class":271},[41,155852,155853],{"class":378}," \"18\"\n",[41,155855,155856,155858,155860,155862],{"class":43,"line":51},[41,155857,146649],{"class":275},[41,155859,321],{"class":271},[41,155861,2521],{"class":58},[41,155863,155864],{"class":275},"(age)\n",[41,155866,155867,155869,155872,155874,155876],{"class":43,"line":62},[41,155868,30518],{"class":58},[41,155870,155871],{"class":275},"(age ",[41,155873,754],{"class":271},[41,155875,25221],{"class":58},[41,155877,282],{"class":275},[20,155879,155880],{},"输入得到的内容永远是字符串：",[32,155882,155884],{"className":30481,"code":155883,"language":30483,"meta":37,"style":37},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[24,155885,155886,155902],{"__ignoreMap":37},[41,155887,155888,155891,155893,155895,155897,155900],{"class":43,"line":44},[41,155889,155890],{"class":275},"num ",[41,155892,321],{"class":271},[41,155894,60708],{"class":58},[41,155896,276],{"class":275},[41,155898,155899],{"class":378},"\"请输入数字:\"",[41,155901,282],{"class":275},[41,155903,155904,155906,155908,155910,155913],{"class":43,"line":51},[41,155905,30518],{"class":58},[41,155907,276],{"class":275},[41,155909,103210],{"class":58},[41,155911,155912],{"class":275},"(num))  ",[41,155914,155915],{"class":47},"# str\n",[20,155917,155918],{},"如果要做数学运算，必须转换：",[32,155920,155922],{"className":30481,"code":155921,"language":30483,"meta":37,"style":37},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[24,155923,155924,155942],{"__ignoreMap":37},[41,155925,155926,155928,155930,155932,155934,155936,155938,155940],{"class":43,"line":44},[41,155927,155890],{"class":275},[41,155929,321],{"class":271},[41,155931,2521],{"class":58},[41,155933,276],{"class":275},[41,155935,53924],{"class":58},[41,155937,276],{"class":275},[41,155939,155899],{"class":378},[41,155941,30600],{"class":275},[41,155943,155944,155946,155948,155950,155952],{"class":43,"line":51},[41,155945,30518],{"class":58},[41,155947,45722],{"class":275},[41,155949,754],{"class":271},[41,155951,2177],{"class":58},[41,155953,282],{"class":275},[20,155955,155956],{},"常见错误：",[32,155958,155960],{"className":30481,"code":155959,"language":30483,"meta":37,"style":37},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[24,155961,155962,155975],{"__ignoreMap":37},[41,155963,155964,155966,155968,155970,155972],{"class":43,"line":44},[41,155965,279],{"class":58},[41,155967,276],{"class":275},[41,155969,155815],{"class":378},[41,155971,155764],{"class":275},[41,155973,155974],{"class":47},"# 错误\n",[41,155976,155977,155979,155981,155984,155987],{"class":43,"line":51},[41,155978,279],{"class":58},[41,155980,276],{"class":275},[41,155982,155983],{"class":378},"\"abc\"",[41,155985,155986],{"class":275},")    ",[41,155988,155974],{"class":47},[20,155990,155991],{},"正确写法：",[32,155993,155995],{"className":30481,"code":155994,"language":30483,"meta":37,"style":37},"num = float(\"3.14\")\n",[24,155996,155997],{"__ignoreMap":37},[41,155998,155999,156001,156003,156005,156007,156009],{"class":43,"line":44},[41,156000,155890],{"class":275},[41,156002,321],{"class":271},[41,156004,109900],{"class":58},[41,156006,276],{"class":275},[41,156008,155815],{"class":378},[41,156010,282],{"class":275},[15,156012,156014],{"id":156013},"_27-运算符","2.7 运算符",[241,156016,156018],{"id":156017},"_271-算术运算符","2.7.1 算术运算符",[411,156020,156021,156032],{},[414,156022,156023],{},[417,156024,156025,156028,156030],{},[420,156026,156027],{},"运算符",[420,156029,25972],{},[420,156031,27595],{},[458,156033,156034,156048,156062,156076,156090,156104,156118],{},[417,156035,156036,156040,156043],{},[463,156037,156038],{},[24,156039,754],{},[463,156041,156042],{},"加法",[463,156044,156045],{},[24,156046,156047],{},"1 + 2",[417,156049,156050,156054,156057],{},[463,156051,156052],{},[24,156053,805],{},[463,156055,156056],{},"减法",[463,156058,156059],{},[24,156060,156061],{},"5 - 3",[417,156063,156064,156068,156071],{},[463,156065,156066],{},[24,156067,728],{},[463,156069,156070],{},"乘法",[463,156072,156073],{},[24,156074,156075],{},"2 * 3",[417,156077,156078,156082,156085],{},[463,156079,156080],{},[24,156081,857],{},[463,156083,156084],{},"除法，结果是浮点数",[463,156086,156087],{},[24,156088,156089],{},"5 \u002F 2",[417,156091,156092,156096,156099],{},[463,156093,156094],{},[24,156095,33432],{},[463,156097,156098],{},"整除",[463,156100,156101],{},[24,156102,156103],{},"5 \u002F\u002F 2",[417,156105,156106,156110,156113],{},[463,156107,156108],{},[24,156109,601],{},[463,156111,156112],{},"取余",[463,156114,156115],{},[24,156116,156117],{},"5 % 2",[417,156119,156120,156124,156127],{},[463,156121,156122],{},[24,156123,10799],{},[463,156125,156126],{},"幂运算",[463,156128,156129],{},[24,156130,156131],{},"2 ** 3",[20,156133,15273],{},[32,156135,156137],{"className":30481,"code":156136,"language":30483,"meta":37,"style":37},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[24,156138,156139,156157,156174,156191],{"__ignoreMap":37},[41,156140,156141,156143,156145,156147,156150,156152,156154],{"class":43,"line":44},[41,156142,30518],{"class":58},[41,156144,276],{"class":275},[41,156146,592],{"class":58},[41,156148,156149],{"class":271}," \u002F",[41,156151,14893],{"class":58},[41,156153,155764],{"class":275},[41,156155,156156],{"class":47},"# 2.5\n",[41,156158,156159,156161,156163,156165,156168,156170,156172],{"class":43,"line":51},[41,156160,30518],{"class":58},[41,156162,276],{"class":275},[41,156164,592],{"class":58},[41,156166,156167],{"class":271}," \u002F\u002F",[41,156169,14893],{"class":58},[41,156171,45911],{"class":275},[41,156173,155767],{"class":47},[41,156175,156176,156178,156180,156182,156185,156187,156189],{"class":43,"line":62},[41,156177,30518],{"class":58},[41,156179,276],{"class":275},[41,156181,592],{"class":58},[41,156183,156184],{"class":271}," %",[41,156186,14893],{"class":58},[41,156188,155764],{"class":275},[41,156190,155784],{"class":47},[41,156192,156193,156195,156197,156199,156202,156204,156206],{"class":43,"line":70},[41,156194,30518],{"class":58},[41,156196,276],{"class":275},[41,156198,351],{"class":58},[41,156200,156201],{"class":271}," **",[41,156203,78173],{"class":58},[41,156205,45911],{"class":275},[41,156207,156208],{"class":47},"# 8\n",[241,156210,156212],{"id":156211},"_272-赋值运算符","2.7.2 赋值运算符",[32,156214,156216],{"className":30481,"code":156215,"language":30483,"meta":37,"style":37},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[24,156217,156218,156226,156234,156242,156250],{"__ignoreMap":37},[41,156219,156220,156222,156224],{"class":43,"line":44},[41,156221,155890],{"class":275},[41,156223,321],{"class":271},[41,156225,58531],{"class":58},[41,156227,156228,156230,156232],{"class":43,"line":51},[41,156229,155890],{"class":275},[41,156231,9615],{"class":271},[41,156233,54530],{"class":58},[41,156235,156236,156238,156240],{"class":43,"line":62},[41,156237,155890],{"class":275},[41,156239,150355],{"class":271},[41,156241,47826],{"class":58},[41,156243,156244,156246,156248],{"class":43,"line":70},[41,156245,155890],{"class":275},[41,156247,137251],{"class":271},[41,156249,120139],{"class":58},[41,156251,156252,156254,156257],{"class":43,"line":76},[41,156253,155890],{"class":275},[41,156255,156256],{"class":271},"\u002F=",[41,156258,47826],{"class":58},[20,156260,156261],{},"等价关系：",[32,156263,156265],{"className":30481,"code":156264,"language":30483,"meta":37,"style":37},"num += 1\nnum = num + 1\n",[24,156266,156267,156275],{"__ignoreMap":37},[41,156268,156269,156271,156273],{"class":43,"line":44},[41,156270,155890],{"class":275},[41,156272,9615],{"class":271},[41,156274,55802],{"class":58},[41,156276,156277,156279,156281,156284,156286],{"class":43,"line":51},[41,156278,155890],{"class":275},[41,156280,321],{"class":271},[41,156282,156283],{"class":275}," num ",[41,156285,754],{"class":271},[41,156287,55802],{"class":58},[20,156289,156290,156291,101121,156294,28488],{},"Python 没有 ",[24,156292,156293],{},"num++",[24,156295,156296],{},"num--",[241,156298,156300],{"id":156299},"_273-比较运算符","2.7.3 比较运算符",[20,156302,156303],{},"比较运算结果是布尔值。",[32,156305,156307],{"className":30481,"code":156306,"language":30483,"meta":37,"style":37},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[24,156308,156309,156323,156338,156352],{"__ignoreMap":37},[41,156310,156311,156313,156315,156317,156319,156321],{"class":43,"line":44},[41,156312,30518],{"class":58},[41,156314,276],{"class":275},[41,156316,719],{"class":58},[41,156318,26325],{"class":271},[41,156320,2287],{"class":58},[41,156322,282],{"class":275},[41,156324,156325,156327,156329,156331,156334,156336],{"class":43,"line":51},[41,156326,30518],{"class":58},[41,156328,276],{"class":275},[41,156330,719],{"class":58},[41,156332,156333],{"class":271}," >=",[41,156335,2177],{"class":58},[41,156337,282],{"class":275},[41,156339,156340,156342,156344,156346,156348,156350],{"class":43,"line":62},[41,156341,30518],{"class":58},[41,156343,276],{"class":275},[41,156345,719],{"class":58},[41,156347,101662],{"class":271},[41,156349,2222],{"class":58},[41,156351,282],{"class":275},[41,156353,156354,156356,156358,156360,156363,156365],{"class":43,"line":70},[41,156355,30518],{"class":58},[41,156357,276],{"class":275},[41,156359,719],{"class":58},[41,156361,156362],{"class":271}," !=",[41,156364,2222],{"class":58},[41,156366,282],{"class":275},[20,156368,156369,156370,156372,156373,28488],{},"注意：判断相等用 ",[24,156371,3087],{},"，赋值用 ",[24,156374,321],{},[32,156376,156378],{"className":30481,"code":156377,"language":30483,"meta":37,"style":37},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[24,156379,156380,156392],{"__ignoreMap":37},[41,156381,156382,156384,156386,156389],{"class":43,"line":44},[41,156383,146649],{"class":275},[41,156385,321],{"class":271},[41,156387,156388],{"class":58}," 18",[41,156390,156391],{"class":47},"       # 赋值\n",[41,156393,156394,156396,156398,156400],{"class":43,"line":51},[41,156395,146649],{"class":275},[41,156397,3087],{"class":271},[41,156399,156388],{"class":58},[41,156401,156402],{"class":47},"      # 判断是否相等\n",[241,156404,156406],{"id":156405},"_274-逻辑运算符","2.7.4 逻辑运算符",[411,156408,156409,156417],{},[414,156410,156411],{},[417,156412,156413,156415],{},[420,156414,156027],{},[420,156416,25972],{},[458,156418,156419,156428,156437],{},[417,156420,156421,156425],{},[463,156422,156423],{},[24,156424,30565],{},[463,156426,156427],{},"并且",[417,156429,156430,156434],{},[463,156431,156432],{},[24,156433,115193],{},[463,156435,156436],{},"或者",[417,156438,156439,156444],{},[463,156440,156441],{},[24,156442,156443],{},"not",[463,156445,156446],{},"取反",[32,156448,156450],{"className":30481,"code":156449,"language":30483,"meta":37,"style":37},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[24,156451,156452,156460,156469,156473,156488,156502],{"__ignoreMap":37},[41,156453,156454,156456,156458],{"class":43,"line":44},[41,156455,146649],{"class":275},[41,156457,321],{"class":271},[41,156459,88168],{"class":58},[41,156461,156462,156465,156467],{"class":43,"line":51},[41,156463,156464],{"class":275},"has_ticket ",[41,156466,321],{"class":271},[41,156468,153702],{"class":58},[41,156470,156471],{"class":43,"line":62},[41,156472,80],{"emptyLinePlaceholder":79},[41,156474,156475,156477,156479,156481,156483,156485],{"class":43,"line":70},[41,156476,30518],{"class":58},[41,156478,155871],{"class":275},[41,156480,1850],{"class":271},[41,156482,156388],{"class":58},[41,156484,120532],{"class":271},[41,156486,156487],{"class":275}," has_ticket)\n",[41,156489,156490,156492,156494,156496,156498,156500],{"class":43,"line":76},[41,156491,30518],{"class":58},[41,156493,155871],{"class":275},[41,156495,1183],{"class":271},[41,156497,156388],{"class":58},[41,156499,114304],{"class":271},[41,156501,156487],{"class":275},[41,156503,156504,156506,156508,156510],{"class":43,"line":83},[41,156505,30518],{"class":58},[41,156507,276],{"class":275},[41,156509,156443],{"class":271},[41,156511,156487],{"class":275},[15,156513,156515],{"id":156514},"_28-字符串定义","2.8 字符串定义",[20,156517,156518],{},"三种常见写法：",[32,156520,156522],{"className":30481,"code":156521,"language":30483,"meta":37,"style":37},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[24,156523,156524,156534,156543,156553],{"__ignoreMap":37},[41,156525,156526,156529,156531],{"class":43,"line":44},[41,156527,156528],{"class":275},"name1 ",[41,156530,321],{"class":271},[41,156532,156533],{"class":378}," '小明'\n",[41,156535,156536,156539,156541],{"class":43,"line":51},[41,156537,156538],{"class":275},"name2 ",[41,156540,321],{"class":271},[41,156542,149456],{"class":378},[41,156544,156545,156548,156550],{"class":43,"line":62},[41,156546,156547],{"class":275},"text ",[41,156549,321],{"class":271},[41,156551,156552],{"class":378}," \"\"\"这是多行字符串\n",[41,156554,156555],{"class":43,"line":70},[41,156556,156557],{"class":378},"可以换行\"\"\"\n",[20,156559,156560],{},"字符串中包含引号：",[32,156562,156564],{"className":30481,"code":156563,"language":30483,"meta":37,"style":37},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[24,156565,156566,156576,156586],{"__ignoreMap":37},[41,156567,156568,156571,156573],{"class":43,"line":44},[41,156569,156570],{"class":275},"msg ",[41,156572,321],{"class":271},[41,156574,156575],{"class":378}," \"他说:'你好'\"\n",[41,156577,156578,156581,156583],{"class":43,"line":51},[41,156579,156580],{"class":275},"msg2 ",[41,156582,321],{"class":271},[41,156584,156585],{"class":378}," '他说:\"你好\"'\n",[41,156587,156588,156591,156593,156596,156599,156602,156604],{"class":43,"line":62},[41,156589,156590],{"class":275},"msg3 ",[41,156592,321],{"class":271},[41,156594,156595],{"class":378}," \"他说:",[41,156597,156598],{"class":58},"\\\"",[41,156600,156601],{"class":378},"你好",[41,156603,156598],{"class":58},[41,156605,25236],{"class":378},[20,156607,156608],{},"常见转义字符：",[411,156610,156611,156620],{},[414,156612,156613],{},[417,156614,156615,156618],{},[420,156616,156617],{},"写法",[420,156619,100803],{},[458,156621,156622,156632,156641,156651,156660],{},[417,156623,156624,156629],{},[463,156625,156626],{},[24,156627,156628],{},"\\n",[463,156630,156631],{},"换行",[417,156633,156634,156638],{},[463,156635,156636],{},[24,156637,1374],{},[463,156639,156640],{},"制表符",[417,156642,156643,156648],{},[463,156644,156645],{},[24,156646,156647],{},"\\\\",[463,156649,156650],{},"反斜杠",[417,156652,156653,156657],{},[463,156654,156655],{},[24,156656,156598],{},[463,156658,156659],{},"双引号",[417,156661,156662,156667],{},[463,156663,156664],{},[24,156665,156666],{},"\\'",[463,156668,156669],{},"单引号",[15,156671,156673],{"id":156672},"_29-字符串拼接","2.9 字符串拼接",[32,156675,156677],{"className":30481,"code":156676,"language":30483,"meta":37,"style":37},"name = \"小明\"\nprint(\"你好，\" + name)\n",[24,156678,156679,156687],{"__ignoreMap":37},[41,156680,156681,156683,156685],{"class":43,"line":44},[41,156682,146639],{"class":275},[41,156684,321],{"class":271},[41,156686,149456],{"class":378},[41,156688,156689,156691,156693,156696,156698],{"class":43,"line":51},[41,156690,30518],{"class":58},[41,156692,276],{"class":275},[41,156694,156695],{"class":378},"\"你好，\"",[41,156697,45669],{"class":271},[41,156699,156700],{"class":275}," name)\n",[20,156702,156703],{},"字符串只能和字符串拼接：",[32,156705,156707],{"className":30481,"code":156706,"language":30483,"meta":37,"style":37},"age = 18\nprint(\"年龄:\" + str(age))\n",[24,156708,156709,156717],{"__ignoreMap":37},[41,156710,156711,156713,156715],{"class":43,"line":44},[41,156712,146649],{"class":275},[41,156714,321],{"class":271},[41,156716,146654],{"class":58},[41,156718,156719,156721,156723,156725,156727,156729],{"class":43,"line":51},[41,156720,30518],{"class":58},[41,156722,276],{"class":275},[41,156724,146620],{"class":378},[41,156726,45669],{"class":271},[41,156728,74022],{"class":58},[41,156730,156731],{"class":275},"(age))\n",[20,156733,156734],{},"更推荐使用格式化字符串。",[15,156736,156738],{"id":156737},"_210-字符串格式化","2.10 字符串格式化",[241,156740,156742],{"id":156741},"_2101-百分号格式化","2.10.1 百分号格式化",[32,156744,156746],{"className":30481,"code":156745,"language":30483,"meta":37,"style":37},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[24,156747,156748,156756,156764,156773,156777],{"__ignoreMap":37},[41,156749,156750,156752,156754],{"class":43,"line":44},[41,156751,146639],{"class":275},[41,156753,321],{"class":271},[41,156755,149456],{"class":378},[41,156757,156758,156760,156762],{"class":43,"line":51},[41,156759,146649],{"class":275},[41,156761,321],{"class":271},[41,156763,146654],{"class":58},[41,156765,156766,156768,156770],{"class":43,"line":62},[41,156767,155461],{"class":275},[41,156769,321],{"class":271},[41,156771,156772],{"class":58}," 95.5\n",[41,156774,156775],{"class":43,"line":70},[41,156776,80],{"emptyLinePlaceholder":79},[41,156778,156779,156781,156783,156786,156789,156792,156795,156798,156801,156803,156805],{"class":43,"line":76},[41,156780,30518],{"class":58},[41,156782,276],{"class":275},[41,156784,156785],{"class":378},"\"姓名:",[41,156787,156788],{"class":58},"%s",[41,156790,156791],{"class":378}," 年龄:",[41,156793,156794],{"class":58},"%d",[41,156796,156797],{"class":378}," 分数:",[41,156799,156800],{"class":58},"%.1f",[41,156802,524],{"class":378},[41,156804,156184],{"class":271},[41,156806,156807],{"class":275}," (name, age, score))\n",[20,156809,156810],{},"常用占位符：",[411,156812,156813,156822],{},[414,156814,156815],{},[417,156816,156817,156820],{},[420,156818,156819],{},"占位符",[420,156821,25972],{},[458,156823,156824,156832,156840],{},[417,156825,156826,156830],{},[463,156827,156828],{},[24,156829,156788],{},[463,156831,155327],{},[417,156833,156834,156838],{},[463,156835,156836],{},[24,156837,156794],{},[463,156839,155305],{},[417,156841,156842,156847],{},[463,156843,156844],{},[24,156845,156846],{},"%f",[463,156848,155316],{},[20,156850,156851],{},"精度控制：",[32,156853,156855],{"className":30481,"code":156854,"language":30483,"meta":37,"style":37},"price = 12.3456\nprint(\"%.2f\" % price)\n",[24,156856,156857,156866],{"__ignoreMap":37},[41,156858,156859,156861,156863],{"class":43,"line":44},[41,156860,146784],{"class":275},[41,156862,321],{"class":271},[41,156864,156865],{"class":58}," 12.3456\n",[41,156867,156868,156870,156872,156874,156877,156879,156881],{"class":43,"line":51},[41,156869,30518],{"class":58},[41,156871,276],{"class":275},[41,156873,524],{"class":378},[41,156875,156876],{"class":58},"%.2f",[41,156878,524],{"class":378},[41,156880,156184],{"class":271},[41,156882,156883],{"class":275}," price)\n",[241,156885,156887],{"id":156886},"_2102-format方法","2.10.2 format方法",[32,156889,156891],{"className":30481,"code":156890,"language":30483,"meta":37,"style":37},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[24,156892,156893,156901,156909,156913,156932,156952],{"__ignoreMap":37},[41,156894,156895,156897,156899],{"class":43,"line":44},[41,156896,146639],{"class":275},[41,156898,321],{"class":271},[41,156900,149456],{"class":378},[41,156902,156903,156905,156907],{"class":43,"line":51},[41,156904,146649],{"class":275},[41,156906,321],{"class":271},[41,156908,146654],{"class":58},[41,156910,156911],{"class":43,"line":62},[41,156912,80],{"emptyLinePlaceholder":79},[41,156914,156915,156917,156919,156921,156923,156925,156927,156929],{"class":43,"line":70},[41,156916,30518],{"class":58},[41,156918,276],{"class":275},[41,156920,156785],{"class":378},[41,156922,32562],{"class":58},[41,156924,156791],{"class":378},[41,156926,32562],{"class":58},[41,156928,524],{"class":378},[41,156930,156931],{"class":275},".format(name, age))\n",[41,156933,156934,156936,156938,156940,156943,156945,156948,156950],{"class":43,"line":76},[41,156935,30518],{"class":58},[41,156937,276],{"class":275},[41,156939,156785],{"class":378},[41,156941,156942],{"class":58},"{0}",[41,156944,156791],{"class":378},[41,156946,156947],{"class":58},"{1}",[41,156949,524],{"class":378},[41,156951,156931],{"class":275},[41,156953,156954,156956,156958,156960,156963,156965,156968,156970,156973,156975,156977,156980,156982,156984],{"class":43,"line":83},[41,156955,30518],{"class":58},[41,156957,276],{"class":275},[41,156959,156785],{"class":378},[41,156961,156962],{"class":58},"{name}",[41,156964,156791],{"class":378},[41,156966,156967],{"class":58},"{age}",[41,156969,524],{"class":378},[41,156971,156972],{"class":275},".format(",[41,156974,79913],{"class":5354},[41,156976,321],{"class":271},[41,156978,156979],{"class":275},"name, ",[41,156981,70324],{"class":5354},[41,156983,321],{"class":271},[41,156985,156986],{"class":275},"age))\n",[241,156988,156990],{"id":156989},"_2103-f-string","2.10.3 f-string",[20,156992,156993],{},"推荐写法：",[32,156995,156997],{"className":30481,"code":156996,"language":30483,"meta":37,"style":37},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[24,156998,156999,157007,157015,157023,157027],{"__ignoreMap":37},[41,157000,157001,157003,157005],{"class":43,"line":44},[41,157002,146639],{"class":275},[41,157004,321],{"class":271},[41,157006,149456],{"class":378},[41,157008,157009,157011,157013],{"class":43,"line":51},[41,157010,146649],{"class":275},[41,157012,321],{"class":271},[41,157014,146654],{"class":58},[41,157016,157017,157019,157021],{"class":43,"line":62},[41,157018,155461],{"class":275},[41,157020,321],{"class":271},[41,157022,156772],{"class":58},[41,157024,157025],{"class":43,"line":70},[41,157026,80],{"emptyLinePlaceholder":79},[41,157028,157029,157031,157033,157035,157037,157039,157041,157043,157045,157047,157049,157051,157053,157055,157058,157061,157063,157065],{"class":43,"line":76},[41,157030,30518],{"class":58},[41,157032,276],{"class":275},[41,157034,327],{"class":271},[41,157036,156785],{"class":378},[41,157038,1169],{"class":58},[41,157040,79913],{"class":275},[41,157042,1219],{"class":58},[41,157044,156791],{"class":378},[41,157046,1169],{"class":58},[41,157048,70324],{"class":275},[41,157050,1219],{"class":58},[41,157052,156797],{"class":378},[41,157054,1169],{"class":58},[41,157056,157057],{"class":275},"score",[41,157059,157060],{"class":271},":.1f",[41,157062,1219],{"class":58},[41,157064,524],{"class":378},[41,157066,282],{"class":275},[20,157068,157069],{},"表达式也可以放进去：",[32,157071,157073],{"className":30481,"code":157072,"language":30483,"meta":37,"style":37},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[24,157074,157075,157083,157091],{"__ignoreMap":37},[41,157076,157077,157079,157081],{"class":43,"line":44},[41,157078,146784],{"class":275},[41,157080,321],{"class":271},[41,157082,146789],{"class":58},[41,157084,157085,157087,157089],{"class":43,"line":51},[41,157086,146794],{"class":275},[41,157088,321],{"class":271},[41,157090,54530],{"class":58},[41,157092,157093,157095,157097,157099,157102,157104,157106,157108,157111,157113,157116],{"class":43,"line":62},[41,157094,30518],{"class":58},[41,157096,276],{"class":275},[41,157098,327],{"class":271},[41,157100,157101],{"class":378},"\"总价:",[41,157103,1169],{"class":58},[41,157105,146784],{"class":275},[41,157107,728],{"class":271},[41,157109,157110],{"class":275}," count",[41,157112,1219],{"class":58},[41,157114,157115],{"class":378},"元\"",[41,157117,282],{"class":275},[15,157119,157121],{"id":157120},"_211-input输入","2.11 input输入",[20,157123,157124,157127],{},[24,157125,157126],{},"input()"," 会暂停程序，等待用户输入。",[32,157129,157131],{"className":30481,"code":157130,"language":30483,"meta":37,"style":37},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[24,157132,157133,157147],{"__ignoreMap":37},[41,157134,157135,157137,157139,157141,157143,157145],{"class":43,"line":44},[41,157136,146639],{"class":275},[41,157138,321],{"class":271},[41,157140,60708],{"class":58},[41,157142,276],{"class":275},[41,157144,152482],{"class":378},[41,157146,282],{"class":275},[41,157148,157149,157151,157153,157155,157158,157160,157162,157164,157166],{"class":43,"line":51},[41,157150,30518],{"class":58},[41,157152,276],{"class":275},[41,157154,327],{"class":271},[41,157156,157157],{"class":378},"\"你好，",[41,157159,1169],{"class":58},[41,157161,79913],{"class":275},[41,157163,1219],{"class":58},[41,157165,524],{"class":378},[41,157167,282],{"class":275},[20,157169,157170],{},"输入整数：",[32,157172,157174],{"className":30481,"code":157173,"language":30483,"meta":37,"style":37},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[24,157175,157176,157194],{"__ignoreMap":37},[41,157177,157178,157180,157182,157184,157186,157188,157190,157192],{"class":43,"line":44},[41,157179,146649],{"class":275},[41,157181,321],{"class":271},[41,157183,2521],{"class":58},[41,157185,276],{"class":275},[41,157187,53924],{"class":58},[41,157189,276],{"class":275},[41,157191,152497],{"class":378},[41,157193,30600],{"class":275},[41,157195,157196,157198,157200,157202,157205,157207,157209,157211,157214,157216],{"class":43,"line":51},[41,157197,30518],{"class":58},[41,157199,276],{"class":275},[41,157201,327],{"class":271},[41,157203,157204],{"class":378},"\"明年你",[41,157206,1169],{"class":58},[41,157208,146649],{"class":275},[41,157210,754],{"class":271},[41,157212,157213],{"class":58}," 1}",[41,157215,149507],{"class":378},[41,157217,282],{"class":275},[20,157219,157220],{},"输入小数：",[32,157222,157224],{"className":30481,"code":157223,"language":30483,"meta":37,"style":37},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[24,157225,157226,157245],{"__ignoreMap":37},[41,157227,157228,157230,157232,157234,157236,157238,157240,157243],{"class":43,"line":44},[41,157229,155434],{"class":275},[41,157231,321],{"class":271},[41,157233,109900],{"class":58},[41,157235,276],{"class":275},[41,157237,53924],{"class":58},[41,157239,276],{"class":275},[41,157241,157242],{"class":378},"\"请输入身高:\"",[41,157244,30600],{"class":275},[41,157246,157247,157249,157251,157253,157256,157258,157260,157263,157265,157268],{"class":43,"line":51},[41,157248,30518],{"class":58},[41,157250,276],{"class":275},[41,157252,327],{"class":271},[41,157254,157255],{"class":378},"\"身高:",[41,157257,1169],{"class":58},[41,157259,25084],{"class":275},[41,157261,157262],{"class":271},":.2f",[41,157264,1219],{"class":58},[41,157266,157267],{"class":378},"米\"",[41,157269,282],{"class":275},[15,157271,157273],{"id":157272},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[20,157275,123395],{},[224,157277,157278,157281,157284,157287],{},[227,157279,157280],{},"输入商品单价。",[227,157282,157283],{},"输入购买数量。",[227,157285,157286],{},"输入折扣，例如 0.8 表示八折。",[227,157288,157289],{},"输出最终金额，保留两位小数。",[20,157291,10173],{},[32,157293,157295],{"className":30481,"code":157294,"language":30483,"meta":37,"style":37},"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",[24,157296,157297,157316,157335,157355,157359,157379,157383,157406,157427,157449],{"__ignoreMap":37},[41,157298,157299,157301,157303,157305,157307,157309,157311,157314],{"class":43,"line":44},[41,157300,146784],{"class":275},[41,157302,321],{"class":271},[41,157304,109900],{"class":58},[41,157306,276],{"class":275},[41,157308,53924],{"class":58},[41,157310,276],{"class":275},[41,157312,157313],{"class":378},"\"请输入商品单价:\"",[41,157315,30600],{"class":275},[41,157317,157318,157320,157322,157324,157326,157328,157330,157333],{"class":43,"line":51},[41,157319,146794],{"class":275},[41,157321,321],{"class":271},[41,157323,2521],{"class":58},[41,157325,276],{"class":275},[41,157327,53924],{"class":58},[41,157329,276],{"class":275},[41,157331,157332],{"class":378},"\"请输入购买数量:\"",[41,157334,30600],{"class":275},[41,157336,157337,157340,157342,157344,157346,157348,157350,157353],{"class":43,"line":62},[41,157338,157339],{"class":275},"discount ",[41,157341,321],{"class":271},[41,157343,109900],{"class":58},[41,157345,276],{"class":275},[41,157347,53924],{"class":58},[41,157349,276],{"class":275},[41,157351,157352],{"class":378},"\"请输入折扣:\"",[41,157354,30600],{"class":275},[41,157356,157357],{"class":43,"line":70},[41,157358,80],{"emptyLinePlaceholder":79},[41,157360,157361,157364,157366,157369,157371,157374,157376],{"class":43,"line":76},[41,157362,157363],{"class":275},"total ",[41,157365,321],{"class":271},[41,157367,157368],{"class":275}," price ",[41,157370,728],{"class":271},[41,157372,157373],{"class":275}," count ",[41,157375,728],{"class":271},[41,157377,157378],{"class":275}," discount\n",[41,157380,157381],{"class":43,"line":83},[41,157382,80],{"emptyLinePlaceholder":79},[41,157384,157385,157387,157389,157391,157394,157396,157398,157400,157402,157404],{"class":43,"line":89},[41,157386,30518],{"class":58},[41,157388,276],{"class":275},[41,157390,327],{"class":271},[41,157392,157393],{"class":378},"\"商品单价:",[41,157395,1169],{"class":58},[41,157397,79918],{"class":275},[41,157399,157262],{"class":271},[41,157401,1219],{"class":58},[41,157403,524],{"class":378},[41,157405,282],{"class":275},[41,157407,157408,157410,157412,157414,157417,157419,157421,157423,157425],{"class":43,"line":96},[41,157409,30518],{"class":58},[41,157411,276],{"class":275},[41,157413,327],{"class":271},[41,157415,157416],{"class":378},"\"购买数量:",[41,157418,1169],{"class":58},[41,157420,84537],{"class":275},[41,157422,1219],{"class":58},[41,157424,524],{"class":378},[41,157426,282],{"class":275},[41,157428,157429,157431,157433,157435,157438,157440,157443,157445,157447],{"class":43,"line":104},[41,157430,30518],{"class":58},[41,157432,276],{"class":275},[41,157434,327],{"class":271},[41,157436,157437],{"class":378},"\"折扣:",[41,157439,1169],{"class":58},[41,157441,157442],{"class":275},"discount",[41,157444,1219],{"class":58},[41,157446,524],{"class":378},[41,157448,282],{"class":275},[41,157450,157451,157453,157455,157457,157460,157462,157465,157467,157469,157471],{"class":43,"line":176},[41,157452,30518],{"class":58},[41,157454,276],{"class":275},[41,157456,327],{"class":271},[41,157458,157459],{"class":378},"\"应付金额:",[41,157461,1169],{"class":58},[41,157463,157464],{"class":275},"total",[41,157466,157262],{"class":271},[41,157468,1219],{"class":58},[41,157470,157115],{"class":378},[41,157472,282],{"class":275},[15,157474,157476],{"id":157475},"_213-易错点","2.13 易错点",[224,157478,157479,157484,157490,157498,157501],{},[227,157480,157481,157483],{},[24,157482,157126],{}," 的结果是字符串，做运算前要转换。",[227,157485,157486,157487,28488],{},"字符串拼接时，数字要先 ",[24,157488,157489],{},"str()",[227,157491,157492,157494,157495,157497],{},[24,157493,321],{}," 是赋值，",[24,157496,3087],{}," 是比较。",[227,157499,157500],{},"Python 没有自增自减运算符。",[227,157502,157503],{},"浮点数计算可能有精度误差：",[32,157505,157507],{"className":30481,"code":157506,"language":30483,"meta":37,"style":37},"print(0.1 + 0.2)\n",[24,157508,157509],{"__ignoreMap":37},[41,157510,157511,157513,157515,157517,157519,157522],{"class":43,"line":44},[41,157512,30518],{"class":58},[41,157514,276],{"class":275},[41,157516,86313],{"class":58},[41,157518,45669],{"class":271},[41,157520,157521],{"class":58}," 0.2",[41,157523,282],{"class":275},[20,157525,157526,157527,157530],{},"金额计算如果要求严格，可以后续学习 ",[24,157528,157529],{},"decimal"," 模块。",[15,157532,157534],{"id":157533},"_214-本章练习","2.14 本章练习",[224,157536,157537,157540,157543,157546,157549],{},[227,157538,157539],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[227,157541,157542],{},"输入圆的半径，计算面积，保留两位小数。",[227,157544,157545],{},"输入工资和奖金，计算总收入。",[227,157547,157548],{},"输入摄氏温度，转换为华氏温度。",[227,157550,157551],{},"写一个 BMI 计算程序：",[32,157553,157556],{"className":157554,"code":157555,"language":5325,"meta":37},[5323],"BMI = 体重kg \u002F 身高m ** 2\n",[24,157557,157555],{"__ignoreMap":37},[189,157559,157560],{},"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":37,"searchDepth":51,"depth":51,"links":157562},[157563,157564,157565,157566,157567,157568,157569,157575,157576,157577,157582,157583,157584,157585],{"id":155124,"depth":51,"text":155125},{"id":155233,"depth":51,"text":155234},{"id":155404,"depth":51,"text":155405},{"id":155481,"depth":51,"text":155482},{"id":50834,"depth":51,"text":50835},{"id":155787,"depth":51,"text":155788},{"id":156013,"depth":51,"text":156014,"children":157570},[157571,157572,157573,157574],{"id":156017,"depth":62,"text":156018},{"id":156211,"depth":62,"text":156212},{"id":156299,"depth":62,"text":156300},{"id":156405,"depth":62,"text":156406},{"id":156514,"depth":51,"text":156515},{"id":156672,"depth":51,"text":156673},{"id":156737,"depth":51,"text":156738,"children":157578},[157579,157580,157581],{"id":156741,"depth":62,"text":156742},{"id":156886,"depth":62,"text":156887},{"id":156989,"depth":62,"text":156990},{"id":157120,"depth":51,"text":157121},{"id":157272,"depth":51,"text":157273},{"id":157475,"depth":51,"text":157476},{"id":157533,"depth":51,"text":157534},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155116,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157592,"title":157593,"body":157594,"description":196,"extension":197,"meta":159230,"navigation":79,"path":159231,"seo":159232,"stem":159233,"__hash__":159234},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157595,"toc":159211},[157596,157599,157603,157606,157621,157624,157652,157656,157706,157708,157724,157727,157753,157756,157760,157827,157830,157846,157850,157853,157971,157974,157981,158030,158036,158040,158043,158156,158159,158163,158167,158170,158220,158224,158227,158277,158281,158284,158322,158326,158329,158375,158378,158413,158417,158422,158425,158471,158473,158540,158544,158550,158661,158670,158674,158676,158687,158689,158855,158859,158861,158875,158877,159091,159095,159114,159131,159134,159180,159184,159208],[10,157597,157593],{"id":157598},"_3-判断语句",[15,157600,157602],{"id":157601},"_31-布尔值","3.1 布尔值",[20,157604,157605],{},"判断语句依赖布尔值：",[32,157607,157609],{"className":30481,"code":157608,"language":30483,"meta":37,"style":37},"True\nFalse\n",[24,157610,157611,157616],{"__ignoreMap":37},[41,157612,157613],{"class":43,"line":44},[41,157614,157615],{"class":58},"True\n",[41,157617,157618],{"class":43,"line":51},[41,157619,157620],{"class":58},"False\n",[20,157622,157623],{},"比较表达式会产生布尔值：",[32,157625,157627],{"className":30481,"code":157626,"language":30483,"meta":37,"style":37},"age = 18\nprint(age >= 18)  # True\n",[24,157628,157629,157637],{"__ignoreMap":37},[41,157630,157631,157633,157635],{"class":43,"line":44},[41,157632,146649],{"class":275},[41,157634,321],{"class":271},[41,157636,146654],{"class":58},[41,157638,157639,157641,157643,157645,157647,157649],{"class":43,"line":51},[41,157640,30518],{"class":58},[41,157642,155871],{"class":275},[41,157644,1850],{"class":271},[41,157646,156388],{"class":58},[41,157648,45911],{"class":275},[41,157650,157651],{"class":47},"# True\n",[15,157653,157655],{"id":157654},"_32-if基础语法","3.2 if基础语法",[32,157657,157659],{"className":30481,"code":157658,"language":30483,"meta":37,"style":37},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[24,157660,157661,157679,157683,157695],{"__ignoreMap":37},[41,157662,157663,157665,157667,157669,157671,157673,157675,157677],{"class":43,"line":44},[41,157664,146649],{"class":275},[41,157666,321],{"class":271},[41,157668,2521],{"class":58},[41,157670,276],{"class":275},[41,157672,53924],{"class":58},[41,157674,276],{"class":275},[41,157676,152497],{"class":378},[41,157678,30600],{"class":275},[41,157680,157681],{"class":43,"line":51},[41,157682,80],{"emptyLinePlaceholder":79},[41,157684,157685,157687,157689,157691,157693],{"class":43,"line":62},[41,157686,1672],{"class":271},[41,157688,15845],{"class":275},[41,157690,1850],{"class":271},[41,157692,156388],{"class":58},[41,157694,3877],{"class":275},[41,157696,157697,157699,157701,157704],{"class":43,"line":70},[41,157698,31402],{"class":58},[41,157700,276],{"class":275},[41,157702,157703],{"class":378},"\"可以进入网吧\"",[41,157705,282],{"class":275},[20,157707,9163],{},[224,157709,157710,157715,157718,157721],{},[227,157711,157712,157714],{},[24,157713,1672],{}," 后面是条件表达式。",[227,157716,157717],{},"条件后面必须写冒号。",[227,157719,157720],{},"条件成立时执行缩进代码块。",[227,157722,157723],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[20,157725,157726],{},"错误示例：",[32,157728,157730],{"className":30481,"code":157729,"language":30483,"meta":37,"style":37},"if age >= 18\n    print(\"可以进入\")\n",[24,157731,157732,157742],{"__ignoreMap":37},[41,157733,157734,157736,157738,157740],{"class":43,"line":44},[41,157735,1672],{"class":271},[41,157737,15845],{"class":275},[41,157739,1850],{"class":271},[41,157741,146654],{"class":58},[41,157743,157744,157746,157748,157751],{"class":43,"line":51},[41,157745,31402],{"class":58},[41,157747,276],{"class":275},[41,157749,157750],{"class":378},"\"可以进入\"",[41,157752,282],{"class":275},[20,157754,157755],{},"缺少冒号。",[15,157757,157759],{"id":157758},"_33-if-else","3.3 if else",[32,157761,157763],{"className":30481,"code":157762,"language":30483,"meta":37,"style":37},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[24,157764,157765,157783,157787,157799,157810,157816],{"__ignoreMap":37},[41,157766,157767,157769,157771,157773,157775,157777,157779,157781],{"class":43,"line":44},[41,157768,146649],{"class":275},[41,157770,321],{"class":271},[41,157772,2521],{"class":58},[41,157774,276],{"class":275},[41,157776,53924],{"class":58},[41,157778,276],{"class":275},[41,157780,152497],{"class":378},[41,157782,30600],{"class":275},[41,157784,157785],{"class":43,"line":51},[41,157786,80],{"emptyLinePlaceholder":79},[41,157788,157789,157791,157793,157795,157797],{"class":43,"line":62},[41,157790,1672],{"class":271},[41,157792,15845],{"class":275},[41,157794,1850],{"class":271},[41,157796,156388],{"class":58},[41,157798,3877],{"class":275},[41,157800,157801,157803,157805,157808],{"class":43,"line":70},[41,157802,31402],{"class":58},[41,157804,276],{"class":275},[41,157806,157807],{"class":378},"\"成年人\"",[41,157809,282],{"class":275},[41,157811,157812,157814],{"class":43,"line":76},[41,157813,1841],{"class":271},[41,157815,3877],{"class":275},[41,157817,157818,157820,157822,157825],{"class":43,"line":83},[41,157819,31402],{"class":58},[41,157821,276],{"class":275},[41,157823,157824],{"class":378},"\"未成年人\"",[41,157826,282],{"class":275},[20,157828,157829],{},"执行逻辑：",[224,157831,157832,157838,157843],{},[227,157833,157834,157835,157837],{},"条件成立，执行 ",[24,157836,1672],{}," 代码块。",[227,157839,157840,157841,157837],{},"条件不成立，执行 ",[24,157842,1841],{},[227,157844,157845],{},"两个代码块只会执行其中一个。",[15,157847,157849],{"id":157848},"_34-if-elif-else","3.4 if elif else",[20,157851,157852],{},"多条件判断：",[32,157854,157856],{"className":30481,"code":157855,"language":30483,"meta":37,"style":37},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[24,157857,157858,157876,157880,157894,157905,157919,157930,157943,157954,157960],{"__ignoreMap":37},[41,157859,157860,157862,157864,157866,157868,157870,157872,157874],{"class":43,"line":44},[41,157861,155461],{"class":275},[41,157863,321],{"class":271},[41,157865,2521],{"class":58},[41,157867,276],{"class":275},[41,157869,53924],{"class":58},[41,157871,276],{"class":275},[41,157873,152512],{"class":378},[41,157875,30600],{"class":275},[41,157877,157878],{"class":43,"line":51},[41,157879,80],{"emptyLinePlaceholder":79},[41,157881,157882,157884,157887,157889,157892],{"class":43,"line":62},[41,157883,1672],{"class":271},[41,157885,157886],{"class":275}," score ",[41,157888,1850],{"class":271},[41,157890,157891],{"class":58}," 90",[41,157893,3877],{"class":275},[41,157895,157896,157898,157900,157903],{"class":43,"line":70},[41,157897,31402],{"class":58},[41,157899,276],{"class":275},[41,157901,157902],{"class":378},"\"优秀\"",[41,157904,282],{"class":275},[41,157906,157907,157910,157912,157914,157917],{"class":43,"line":76},[41,157908,157909],{"class":271},"elif",[41,157911,157886],{"class":275},[41,157913,1850],{"class":271},[41,157915,157916],{"class":58}," 80",[41,157918,3877],{"class":275},[41,157920,157921,157923,157925,157928],{"class":43,"line":83},[41,157922,31402],{"class":58},[41,157924,276],{"class":275},[41,157926,157927],{"class":378},"\"良好\"",[41,157929,282],{"class":275},[41,157931,157932,157934,157936,157938,157941],{"class":43,"line":89},[41,157933,157909],{"class":271},[41,157935,157886],{"class":275},[41,157937,1850],{"class":271},[41,157939,157940],{"class":58}," 60",[41,157942,3877],{"class":275},[41,157944,157945,157947,157949,157952],{"class":43,"line":96},[41,157946,31402],{"class":58},[41,157948,276],{"class":275},[41,157950,157951],{"class":378},"\"及格\"",[41,157953,282],{"class":275},[41,157955,157956,157958],{"class":43,"line":104},[41,157957,1841],{"class":271},[41,157959,3877],{"class":275},[41,157961,157962,157964,157966,157969],{"class":43,"line":176},[41,157963,31402],{"class":58},[41,157965,276],{"class":275},[41,157967,157968],{"class":378},"\"不及格\"",[41,157970,282],{"class":275},[20,157972,157973],{},"注意判断顺序很重要。",[20,157975,157976,157977,157980],{},"如果把 ",[24,157978,157979],{},"score >= 60"," 放在最前面：",[32,157982,157984],{"className":30481,"code":157983,"language":30483,"meta":37,"style":37},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[24,157985,157986,157998,158008,158020],{"__ignoreMap":37},[41,157987,157988,157990,157992,157994,157996],{"class":43,"line":44},[41,157989,1672],{"class":271},[41,157991,157886],{"class":275},[41,157993,1850],{"class":271},[41,157995,157940],{"class":58},[41,157997,3877],{"class":275},[41,157999,158000,158002,158004,158006],{"class":43,"line":51},[41,158001,31402],{"class":58},[41,158003,276],{"class":275},[41,158005,157951],{"class":378},[41,158007,282],{"class":275},[41,158009,158010,158012,158014,158016,158018],{"class":43,"line":62},[41,158011,157909],{"class":271},[41,158013,157886],{"class":275},[41,158015,1850],{"class":271},[41,158017,157891],{"class":58},[41,158019,3877],{"class":275},[41,158021,158022,158024,158026,158028],{"class":43,"line":70},[41,158023,31402],{"class":58},[41,158025,276],{"class":275},[41,158027,157902],{"class":378},[41,158029,282],{"class":275},[20,158031,158032,158033,158035],{},"成绩 95 会先满足 ",[24,158034,157979],{},"，后面的优秀分支就不会执行。",[15,158037,158039],{"id":158038},"_35-判断语句嵌套","3.5 判断语句嵌套",[20,158041,158042],{},"嵌套判断就是在一个判断内部再写判断。",[32,158044,158046],{"className":30481,"code":158045,"language":30483,"meta":37,"style":37},"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",[24,158047,158048,158066,158081,158085,158097,158111,158121,158128,158139,158145],{"__ignoreMap":37},[41,158049,158050,158052,158054,158056,158058,158060,158062,158064],{"class":43,"line":44},[41,158051,146649],{"class":275},[41,158053,321],{"class":271},[41,158055,2521],{"class":58},[41,158057,276],{"class":275},[41,158059,53924],{"class":58},[41,158061,276],{"class":275},[41,158063,152497],{"class":378},[41,158065,30600],{"class":275},[41,158067,158068,158070,158072,158074,158076,158079],{"class":43,"line":51},[41,158069,156464],{"class":275},[41,158071,321],{"class":271},[41,158073,60708],{"class":58},[41,158075,276],{"class":275},[41,158077,158078],{"class":378},"\"是否有票(y\u002Fn):\"",[41,158080,282],{"class":275},[41,158082,158083],{"class":43,"line":62},[41,158084,80],{"emptyLinePlaceholder":79},[41,158086,158087,158089,158091,158093,158095],{"class":43,"line":70},[41,158088,1672],{"class":271},[41,158090,15845],{"class":275},[41,158092,1850],{"class":271},[41,158094,156388],{"class":58},[41,158096,3877],{"class":275},[41,158098,158099,158101,158104,158106,158109],{"class":43,"line":76},[41,158100,3239],{"class":271},[41,158102,158103],{"class":275}," has_ticket ",[41,158105,3087],{"class":271},[41,158107,158108],{"class":378}," \"y\"",[41,158110,3877],{"class":275},[41,158112,158113,158115,158117,158119],{"class":43,"line":83},[41,158114,32554],{"class":58},[41,158116,276],{"class":275},[41,158118,157750],{"class":378},[41,158120,282],{"class":275},[41,158122,158123,158126],{"class":43,"line":89},[41,158124,158125],{"class":271},"    else",[41,158127,3877],{"class":275},[41,158129,158130,158132,158134,158137],{"class":43,"line":96},[41,158131,32554],{"class":58},[41,158133,276],{"class":275},[41,158135,158136],{"class":378},"\"请先买票\"",[41,158138,282],{"class":275},[41,158140,158141,158143],{"class":43,"line":104},[41,158142,1841],{"class":271},[41,158144,3877],{"class":275},[41,158146,158147,158149,158151,158154],{"class":43,"line":176},[41,158148,31402],{"class":58},[41,158150,276],{"class":275},[41,158152,158153],{"class":378},"\"未成年人禁止进入\"",[41,158155,282],{"class":275},[20,158157,158158],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[15,158160,158162],{"id":158161},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[241,158164,158166],{"id":158165},"_361-and","3.6.1 and",[20,158168,158169],{},"两个条件都成立才成立。",[32,158171,158173],{"className":30481,"code":158172,"language":30483,"meta":37,"style":37},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[24,158174,158175,158183,158191,158195,158210],{"__ignoreMap":37},[41,158176,158177,158179,158181],{"class":43,"line":44},[41,158178,146649],{"class":275},[41,158180,321],{"class":271},[41,158182,88168],{"class":58},[41,158184,158185,158187,158189],{"class":43,"line":51},[41,158186,156464],{"class":275},[41,158188,321],{"class":271},[41,158190,153702],{"class":58},[41,158192,158193],{"class":43,"line":62},[41,158194,80],{"emptyLinePlaceholder":79},[41,158196,158197,158199,158201,158203,158205,158207],{"class":43,"line":70},[41,158198,1672],{"class":271},[41,158200,15845],{"class":275},[41,158202,1850],{"class":271},[41,158204,156388],{"class":58},[41,158206,120532],{"class":271},[41,158208,158209],{"class":275}," has_ticket:\n",[41,158211,158212,158214,158216,158218],{"class":43,"line":76},[41,158213,31402],{"class":58},[41,158215,276],{"class":275},[41,158217,157750],{"class":378},[41,158219,282],{"class":275},[241,158221,158223],{"id":158222},"_362-or","3.6.2 or",[20,158225,158226],{},"只要一个条件成立就成立。",[32,158228,158230],{"className":30481,"code":158229,"language":30483,"meta":37,"style":37},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[24,158231,158232,158241,158250,158254,158266],{"__ignoreMap":37},[41,158233,158234,158237,158239],{"class":43,"line":44},[41,158235,158236],{"class":275},"is_vip ",[41,158238,321],{"class":271},[41,158240,125910],{"class":58},[41,158242,158243,158246,158248],{"class":43,"line":51},[41,158244,158245],{"class":275},"coupon ",[41,158247,321],{"class":271},[41,158249,153702],{"class":58},[41,158251,158252],{"class":43,"line":62},[41,158253,80],{"emptyLinePlaceholder":79},[41,158255,158256,158258,158261,158263],{"class":43,"line":70},[41,158257,1672],{"class":271},[41,158259,158260],{"class":275}," is_vip ",[41,158262,115193],{"class":271},[41,158264,158265],{"class":275}," coupon:\n",[41,158267,158268,158270,158272,158275],{"class":43,"line":76},[41,158269,31402],{"class":58},[41,158271,276],{"class":275},[41,158273,158274],{"class":378},"\"可以享受优惠\"",[41,158276,282],{"class":275},[241,158278,158280],{"id":158279},"_363-not","3.6.3 not",[20,158282,158283],{},"取反。",[32,158285,158287],{"className":30481,"code":158286,"language":30483,"meta":37,"style":37},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[24,158288,158289,158298,158302,158311],{"__ignoreMap":37},[41,158290,158291,158294,158296],{"class":43,"line":44},[41,158292,158293],{"class":275},"is_closed ",[41,158295,321],{"class":271},[41,158297,125910],{"class":58},[41,158299,158300],{"class":43,"line":51},[41,158301,80],{"emptyLinePlaceholder":79},[41,158303,158304,158306,158308],{"class":43,"line":62},[41,158305,1672],{"class":271},[41,158307,39033],{"class":271},[41,158309,158310],{"class":275}," is_closed:\n",[41,158312,158313,158315,158317,158320],{"class":43,"line":70},[41,158314,31402],{"class":58},[41,158316,276],{"class":275},[41,158318,158319],{"class":378},"\"店铺营业中\"",[41,158321,282],{"class":275},[15,158323,158325],{"id":158324},"_37-链式比较","3.7 链式比较",[20,158327,158328],{},"Python 支持链式比较：",[32,158330,158332],{"className":30481,"code":158331,"language":30483,"meta":37,"style":37},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[24,158333,158334,158343,158347,158364],{"__ignoreMap":37},[41,158335,158336,158338,158340],{"class":43,"line":44},[41,158337,155461],{"class":275},[41,158339,321],{"class":271},[41,158341,158342],{"class":58}," 85\n",[41,158344,158345],{"class":43,"line":51},[41,158346,80],{"emptyLinePlaceholder":79},[41,158348,158349,158351,158353,158356,158358,158360,158362],{"class":43,"line":62},[41,158350,1672],{"class":271},[41,158352,4231],{"class":58},[41,158354,158355],{"class":271}," \u003C=",[41,158357,157886],{"class":275},[41,158359,1729],{"class":271},[41,158361,5892],{"class":58},[41,158363,3877],{"class":275},[41,158365,158366,158368,158370,158373],{"class":43,"line":70},[41,158367,31402],{"class":58},[41,158369,276],{"class":275},[41,158371,158372],{"class":378},"\"成绩合法\"",[41,158374,282],{"class":275},[20,158376,158377],{},"等价于：",[32,158379,158381],{"className":30481,"code":158380,"language":30483,"meta":37,"style":37},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[24,158382,158383,158403],{"__ignoreMap":37},[41,158384,158385,158387,158389,158391,158393,158395,158397,158399,158401],{"class":43,"line":44},[41,158386,1672],{"class":271},[41,158388,157886],{"class":275},[41,158390,1850],{"class":271},[41,158392,4231],{"class":58},[41,158394,120532],{"class":271},[41,158396,157886],{"class":275},[41,158398,1729],{"class":271},[41,158400,5892],{"class":58},[41,158402,3877],{"class":275},[41,158404,158405,158407,158409,158411],{"class":43,"line":51},[41,158406,31402],{"class":58},[41,158408,276],{"class":275},[41,158410,158372],{"class":378},[41,158412,282],{"class":275},[15,158414,158416],{"id":158415},"_38-真值和假值","3.8 真值和假值",[20,158418,116570,158419,158421],{},[24,158420,1672],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[20,158423,158424],{},"假值：",[32,158426,158428],{"className":30481,"code":158427,"language":30483,"meta":37,"style":37},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[24,158429,158430,158434,158439,158443,158447,158452,158456,158460,158465],{"__ignoreMap":37},[41,158431,158432],{"class":43,"line":44},[41,158433,157620],{"class":58},[41,158435,158436],{"class":43,"line":51},[41,158437,158438],{"class":58},"None\n",[41,158440,158441],{"class":43,"line":62},[41,158442,3223],{"class":58},[41,158444,158445],{"class":43,"line":70},[41,158446,32445],{"class":58},[41,158448,158449],{"class":43,"line":76},[41,158450,158451],{"class":378},"\"\"\n",[41,158453,158454],{"class":43,"line":83},[41,158455,32460],{"class":275},[41,158457,158458],{"class":43,"line":89},[41,158459,2115],{"class":275},[41,158461,158462],{"class":43,"line":96},[41,158463,158464],{"class":275},"{}\n",[41,158466,158467,158469],{"class":43,"line":104},[41,158468,155393],{"class":58},[41,158470,2115],{"class":275},[20,158472,15273],{},[32,158474,158476],{"className":30481,"code":158475,"language":30483,"meta":37,"style":37},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[24,158477,158478,158492,158496,158503,158523,158529],{"__ignoreMap":37},[41,158479,158480,158482,158484,158486,158488,158490],{"class":43,"line":44},[41,158481,146639],{"class":275},[41,158483,321],{"class":271},[41,158485,60708],{"class":58},[41,158487,276],{"class":275},[41,158489,152482],{"class":378},[41,158491,282],{"class":275},[41,158493,158494],{"class":43,"line":51},[41,158495,80],{"emptyLinePlaceholder":79},[41,158497,158498,158500],{"class":43,"line":62},[41,158499,1672],{"class":271},[41,158501,158502],{"class":275}," name:\n",[41,158504,158505,158507,158509,158511,158513,158515,158517,158519,158521],{"class":43,"line":70},[41,158506,31402],{"class":58},[41,158508,276],{"class":275},[41,158510,327],{"class":271},[41,158512,157157],{"class":378},[41,158514,1169],{"class":58},[41,158516,79913],{"class":275},[41,158518,1219],{"class":58},[41,158520,524],{"class":378},[41,158522,282],{"class":275},[41,158524,158525,158527],{"class":43,"line":76},[41,158526,1841],{"class":271},[41,158528,3877],{"class":275},[41,158530,158531,158533,158535,158538],{"class":43,"line":83},[41,158532,31402],{"class":58},[41,158534,276],{"class":275},[41,158536,158537],{"class":378},"\"姓名不能为空\"",[41,158539,282],{"class":275},[15,158541,158543],{"id":158542},"_39-match语句","3.9 match语句",[20,158545,158546,158547,158549],{},"Python 3.10 开始支持 ",[24,158548,71368],{},"。它适合处理固定选项。",[32,158551,158553],{"className":30481,"code":158552,"language":30483,"meta":37,"style":37},"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",[24,158554,158555,158571,158575,158582,158592,158603,158612,158623,158632,158643,158650],{"__ignoreMap":37},[41,158556,158557,158560,158562,158564,158566,158569],{"class":43,"line":44},[41,158558,158559],{"class":275},"command ",[41,158561,321],{"class":271},[41,158563,60708],{"class":58},[41,158565,276],{"class":275},[41,158567,158568],{"class":378},"\"请输入命令:\"",[41,158570,282],{"class":275},[41,158572,158573],{"class":43,"line":51},[41,158574,80],{"emptyLinePlaceholder":79},[41,158576,158577,158579],{"class":43,"line":62},[41,158578,71368],{"class":271},[41,158580,158581],{"class":275}," command:\n",[41,158583,158584,158587,158590],{"class":43,"line":70},[41,158585,158586],{"class":271},"    case",[41,158588,158589],{"class":378}," \"start\"",[41,158591,3877],{"class":275},[41,158593,158594,158596,158598,158601],{"class":43,"line":76},[41,158595,32554],{"class":58},[41,158597,276],{"class":275},[41,158599,158600],{"class":378},"\"启动\"",[41,158602,282],{"class":275},[41,158604,158605,158607,158610],{"class":43,"line":83},[41,158606,158586],{"class":271},[41,158608,158609],{"class":378}," \"stop\"",[41,158611,3877],{"class":275},[41,158613,158614,158616,158618,158621],{"class":43,"line":89},[41,158615,32554],{"class":58},[41,158617,276],{"class":275},[41,158619,158620],{"class":378},"\"停止\"",[41,158622,282],{"class":275},[41,158624,158625,158627,158630],{"class":43,"line":96},[41,158626,158586],{"class":271},[41,158628,158629],{"class":378}," \"restart\"",[41,158631,3877],{"class":275},[41,158633,158634,158636,158638,158641],{"class":43,"line":104},[41,158635,32554],{"class":58},[41,158637,276],{"class":275},[41,158639,158640],{"class":378},"\"重启\"",[41,158642,282],{"class":275},[41,158644,158645,158647],{"class":43,"line":176},[41,158646,158586],{"class":271},[41,158648,158649],{"class":275}," _:\n",[41,158651,158652,158654,158656,158659],{"class":43,"line":184},[41,158653,32554],{"class":58},[41,158655,276],{"class":275},[41,158657,158658],{"class":378},"\"未知命令\"",[41,158660,282],{"class":275},[20,158662,158663,158664,158666,158667,158669],{},"入门阶段掌握 ",[24,158665,154761],{}," 更重要，",[24,158668,71368],{}," 可以作为补充。",[15,158671,158673],{"id":158672},"_310-小案例成绩等级","3.10 小案例：成绩等级",[20,158675,123395],{},[224,158677,158678,158681,158684],{},[227,158679,158680],{},"输入成绩。",[227,158682,158683],{},"判断成绩是否合法。",[227,158685,158686],{},"输出等级。",[20,158688,10173],{},[32,158690,158692],{"className":30481,"code":158691,"language":30483,"meta":37,"style":37},"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",[24,158693,158694,158712,158716,158734,158745,158757,158768,158780,158791,158804,158815,158827,158838,158844],{"__ignoreMap":37},[41,158695,158696,158698,158700,158702,158704,158706,158708,158710],{"class":43,"line":44},[41,158697,155461],{"class":275},[41,158699,321],{"class":271},[41,158701,109900],{"class":58},[41,158703,276],{"class":275},[41,158705,53924],{"class":58},[41,158707,276],{"class":275},[41,158709,152512],{"class":378},[41,158711,30600],{"class":275},[41,158713,158714],{"class":43,"line":51},[41,158715,80],{"emptyLinePlaceholder":79},[41,158717,158718,158720,158722,158724,158726,158728,158730,158732],{"class":43,"line":62},[41,158719,1672],{"class":271},[41,158721,39033],{"class":271},[41,158723,4231],{"class":58},[41,158725,158355],{"class":271},[41,158727,157886],{"class":275},[41,158729,1729],{"class":271},[41,158731,5892],{"class":58},[41,158733,3877],{"class":275},[41,158735,158736,158738,158740,158743],{"class":43,"line":70},[41,158737,31402],{"class":58},[41,158739,276],{"class":275},[41,158741,158742],{"class":378},"\"成绩不合法\"",[41,158744,282],{"class":275},[41,158746,158747,158749,158751,158753,158755],{"class":43,"line":76},[41,158748,157909],{"class":271},[41,158750,157886],{"class":275},[41,158752,1850],{"class":271},[41,158754,157891],{"class":58},[41,158756,3877],{"class":275},[41,158758,158759,158761,158763,158766],{"class":43,"line":83},[41,158760,31402],{"class":58},[41,158762,276],{"class":275},[41,158764,158765],{"class":378},"\"等级:A\"",[41,158767,282],{"class":275},[41,158769,158770,158772,158774,158776,158778],{"class":43,"line":89},[41,158771,157909],{"class":271},[41,158773,157886],{"class":275},[41,158775,1850],{"class":271},[41,158777,157916],{"class":58},[41,158779,3877],{"class":275},[41,158781,158782,158784,158786,158789],{"class":43,"line":96},[41,158783,31402],{"class":58},[41,158785,276],{"class":275},[41,158787,158788],{"class":378},"\"等级:B\"",[41,158790,282],{"class":275},[41,158792,158793,158795,158797,158799,158802],{"class":43,"line":104},[41,158794,157909],{"class":271},[41,158796,157886],{"class":275},[41,158798,1850],{"class":271},[41,158800,158801],{"class":58}," 70",[41,158803,3877],{"class":275},[41,158805,158806,158808,158810,158813],{"class":43,"line":176},[41,158807,31402],{"class":58},[41,158809,276],{"class":275},[41,158811,158812],{"class":378},"\"等级:C\"",[41,158814,282],{"class":275},[41,158816,158817,158819,158821,158823,158825],{"class":43,"line":184},[41,158818,157909],{"class":271},[41,158820,157886],{"class":275},[41,158822,1850],{"class":271},[41,158824,157940],{"class":58},[41,158826,3877],{"class":275},[41,158828,158829,158831,158833,158836],{"class":43,"line":1757},[41,158830,31402],{"class":58},[41,158832,276],{"class":275},[41,158834,158835],{"class":378},"\"等级:D\"",[41,158837,282],{"class":275},[41,158839,158840,158842],{"class":43,"line":1763},[41,158841,1841],{"class":271},[41,158843,3877],{"class":275},[41,158845,158846,158848,158850,158853],{"class":43,"line":1768},[41,158847,31402],{"class":58},[41,158849,276],{"class":275},[41,158851,158852],{"class":378},"\"等级:E\"",[41,158854,282],{"class":275},[15,158856,158858],{"id":158857},"_311-小案例会员折扣","3.11 小案例：会员折扣",[20,158860,123395],{},[224,158862,158863,158866,158869,158872],{},[227,158864,158865],{},"输入消费金额。",[227,158867,158868],{},"输入会员等级，普通、银卡、金卡。",[227,158870,158871],{},"普通不打折，银卡 9 折，金卡 8 折。",[227,158873,158874],{},"满 500 再减 50。",[20,158876,10173],{},[32,158878,158880],{"className":30481,"code":158879,"language":30483,"meta":37,"style":37},"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",[24,158881,158882,158902,158918,158922,158930,158934,158948,158958,158971,158980,158993,159001,159007,159018,159022,159036,159040,159054,159064,159068],{"__ignoreMap":37},[41,158883,158884,158887,158889,158891,158893,158895,158897,158900],{"class":43,"line":44},[41,158885,158886],{"class":275},"amount ",[41,158888,321],{"class":271},[41,158890,109900],{"class":58},[41,158892,276],{"class":275},[41,158894,53924],{"class":58},[41,158896,276],{"class":275},[41,158898,158899],{"class":378},"\"请输入消费金额:\"",[41,158901,30600],{"class":275},[41,158903,158904,158907,158909,158911,158913,158916],{"class":43,"line":51},[41,158905,158906],{"class":275},"level ",[41,158908,321],{"class":271},[41,158910,60708],{"class":58},[41,158912,276],{"class":275},[41,158914,158915],{"class":378},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[41,158917,282],{"class":275},[41,158919,158920],{"class":43,"line":62},[41,158921,80],{"emptyLinePlaceholder":79},[41,158923,158924,158926,158928],{"class":43,"line":70},[41,158925,157339],{"class":275},[41,158927,321],{"class":271},[41,158929,55802],{"class":58},[41,158931,158932],{"class":43,"line":76},[41,158933,80],{"emptyLinePlaceholder":79},[41,158935,158936,158938,158941,158943,158946],{"class":43,"line":83},[41,158937,1672],{"class":271},[41,158939,158940],{"class":275}," level ",[41,158942,3087],{"class":271},[41,158944,158945],{"class":378}," \"银卡\"",[41,158947,3877],{"class":275},[41,158949,158950,158953,158955],{"class":43,"line":89},[41,158951,158952],{"class":275},"    discount ",[41,158954,321],{"class":271},[41,158956,158957],{"class":58}," 0.9\n",[41,158959,158960,158962,158964,158966,158969],{"class":43,"line":96},[41,158961,157909],{"class":271},[41,158963,158940],{"class":275},[41,158965,3087],{"class":271},[41,158967,158968],{"class":378}," \"金卡\"",[41,158970,3877],{"class":275},[41,158972,158973,158975,158977],{"class":43,"line":104},[41,158974,158952],{"class":275},[41,158976,321],{"class":271},[41,158978,158979],{"class":58}," 0.8\n",[41,158981,158982,158984,158986,158988,158991],{"class":43,"line":176},[41,158983,157909],{"class":271},[41,158985,158940],{"class":275},[41,158987,3087],{"class":271},[41,158989,158990],{"class":378}," \"普通\"",[41,158992,3877],{"class":275},[41,158994,158995,158997,158999],{"class":43,"line":184},[41,158996,158952],{"class":275},[41,158998,321],{"class":271},[41,159000,55802],{"class":58},[41,159002,159003,159005],{"class":43,"line":1757},[41,159004,1841],{"class":271},[41,159006,3877],{"class":275},[41,159008,159009,159011,159013,159016],{"class":43,"line":1763},[41,159010,31402],{"class":58},[41,159012,276],{"class":275},[41,159014,159015],{"class":378},"\"会员等级输入错误，按普通会员计算\"",[41,159017,282],{"class":275},[41,159019,159020],{"class":43,"line":1768},[41,159021,80],{"emptyLinePlaceholder":79},[41,159023,159024,159027,159029,159032,159034],{"class":43,"line":1782},[41,159025,159026],{"class":275},"pay ",[41,159028,321],{"class":271},[41,159030,159031],{"class":275}," amount ",[41,159033,728],{"class":271},[41,159035,157378],{"class":275},[41,159037,159038],{"class":43,"line":1787},[41,159039,80],{"emptyLinePlaceholder":79},[41,159041,159042,159044,159047,159049,159052],{"class":43,"line":1793},[41,159043,1672],{"class":271},[41,159045,159046],{"class":275}," pay ",[41,159048,1850],{"class":271},[41,159050,159051],{"class":58}," 500",[41,159053,3877],{"class":275},[41,159055,159056,159059,159061],{"class":43,"line":1814},[41,159057,159058],{"class":275},"    pay ",[41,159060,150355],{"class":271},[41,159062,159063],{"class":58}," 50\n",[41,159065,159066],{"class":43,"line":1819},[41,159067,80],{"emptyLinePlaceholder":79},[41,159069,159070,159072,159074,159076,159078,159080,159083,159085,159087,159089],{"class":43,"line":1833},[41,159071,30518],{"class":58},[41,159073,276],{"class":275},[41,159075,327],{"class":271},[41,159077,157459],{"class":378},[41,159079,1169],{"class":58},[41,159081,159082],{"class":275},"pay",[41,159084,157262],{"class":271},[41,159086,1219],{"class":58},[41,159088,157115],{"class":378},[41,159090,282],{"class":275},[15,159092,159094],{"id":159093},"_312-易错点","3.12 易错点",[224,159096,159097,159100,159103,159106,159111],{},[227,159098,159099],{},"冒号不能漏。",[227,159101,159102],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[227,159104,159105],{},"多分支判断要注意顺序。",[227,159107,159108,159109,28488],{},"判断相等用 ",[24,159110,3087],{},[227,159112,159113],{},"字符串比较区分大小写：",[32,159115,159117],{"className":30481,"code":159116,"language":30483,"meta":37,"style":37},"\"Y\" == \"y\"  # False\n",[24,159118,159119],{"__ignoreMap":37},[41,159120,159121,159124,159126,159128],{"class":43,"line":44},[41,159122,159123],{"class":378},"\"Y\"",[41,159125,101662],{"class":271},[41,159127,158108],{"class":378},[41,159129,159130],{"class":47},"  # False\n",[20,159132,159133],{},"可转换后再判断：",[32,159135,159137],{"className":30481,"code":159136,"language":30483,"meta":37,"style":37},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[24,159138,159139,159156,159169],{"__ignoreMap":37},[41,159140,159141,159144,159146,159148,159150,159153],{"class":43,"line":44},[41,159142,159143],{"class":275},"answer ",[41,159145,321],{"class":271},[41,159147,60708],{"class":58},[41,159149,276],{"class":275},[41,159151,159152],{"class":378},"\"是否继续(y\u002Fn):\"",[41,159154,159155],{"class":275},").lower()\n",[41,159157,159158,159160,159163,159165,159167],{"class":43,"line":51},[41,159159,1672],{"class":271},[41,159161,159162],{"class":275}," answer ",[41,159164,3087],{"class":271},[41,159166,158108],{"class":378},[41,159168,3877],{"class":275},[41,159170,159171,159173,159175,159178],{"class":43,"line":62},[41,159172,31402],{"class":58},[41,159174,276],{"class":275},[41,159176,159177],{"class":378},"\"继续\"",[41,159179,282],{"class":275},[15,159181,159183],{"id":159182},"_313-本章练习","3.13 本章练习",[224,159185,159186,159189,159192,159195,159205],{},[227,159187,159188],{},"输入年龄，判断是否成年。",[227,159190,159191],{},"输入年份，判断是否为闰年。",[227,159193,159194],{},"输入三个数字，输出最大值。",[227,159196,159197,159198,159201,159202,159204],{},"写登录判断：用户名是 ",[24,159199,159200],{},"admin"," 且密码是 ",[24,159203,15222],{}," 才登录成功。",[227,159206,159207],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[189,159209,159210],{},"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":37,"searchDepth":51,"depth":51,"links":159212},[159213,159214,159215,159216,159217,159218,159223,159224,159225,159226,159227,159228,159229],{"id":157601,"depth":51,"text":157602},{"id":157654,"depth":51,"text":157655},{"id":157758,"depth":51,"text":157759},{"id":157848,"depth":51,"text":157849},{"id":158038,"depth":51,"text":158039},{"id":158161,"depth":51,"text":158162,"children":159219},[159220,159221,159222],{"id":158165,"depth":62,"text":158166},{"id":158222,"depth":62,"text":158223},{"id":158279,"depth":62,"text":158280},{"id":158324,"depth":51,"text":158325},{"id":158415,"depth":51,"text":158416},{"id":158542,"depth":51,"text":158543},{"id":158672,"depth":51,"text":158673},{"id":158857,"depth":51,"text":158858},{"id":159093,"depth":51,"text":159094},{"id":159182,"depth":51,"text":159183},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157593,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159236,"title":159237,"body":159238,"description":196,"extension":197,"meta":161007,"navigation":79,"path":161008,"seo":161009,"stem":161010,"__hash__":161011},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159239,"toc":160987},[159240,159243,159247,159253,159256,159273,159277,159279,159296,159298,159343,159345,159362,159366,159369,159435,159438,159456,159460,159621,159630,159634,159638,159643,159690,159692,159698,159702,159707,159754,159756,159762,159766,159771,159807,159810,159857,159861,159867,159925,159930,159961,159966,159970,160025,160028,160100,160103,160162,160166,160169,160244,160247,160251,160357,160360,160386,160390,160402,160471,160474,160566,160570,160572,160583,160585,160715,160719,160921,160929,160933,160963,160967,160984],[10,159241,159237],{"id":159242},"_4-循环语句",[15,159244,159246],{"id":159245},"_41-为什么需要循环","4.1 为什么需要循环",[20,159248,159249,159250,159252],{},"如果要输出 1 到 100，不应该写 100 行 ",[24,159251,146575],{},"，而应该用循环。",[20,159254,159255],{},"循环适合处理重复任务：",[224,159257,159258,159261,159264,159267,159270],{},[227,159259,159260],{},"重复输出。",[227,159262,159263],{},"重复输入。",[227,159265,159266],{},"遍历数据。",[227,159268,159269],{},"持续执行菜单。",[227,159271,159272],{},"批量处理文件或数据。",[15,159274,159276],{"id":159275},"_42-while循环","4.2 while循环",[20,159278,5319],{},[32,159280,159282],{"className":30481,"code":159281,"language":30483,"meta":37,"style":37},"while 条件:\n    循环体\n",[24,159283,159284,159291],{"__ignoreMap":37},[41,159285,159286,159288],{"class":43,"line":44},[41,159287,108766],{"class":271},[41,159289,159290],{"class":275}," 条件:\n",[41,159292,159293],{"class":43,"line":51},[41,159294,159295],{"class":275},"    循环体\n",[20,159297,15273],{},[32,159299,159301],{"className":30481,"code":159300,"language":30483,"meta":37,"style":37},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[24,159302,159303,159311,159315,159327,159334],{"__ignoreMap":37},[41,159304,159305,159307,159309],{"class":43,"line":44},[41,159306,100251],{"class":275},[41,159308,321],{"class":271},[41,159310,55802],{"class":58},[41,159312,159313],{"class":43,"line":51},[41,159314,80],{"emptyLinePlaceholder":79},[41,159316,159317,159319,159321,159323,159325],{"class":43,"line":62},[41,159318,108766],{"class":271},[41,159320,9576],{"class":275},[41,159322,1729],{"class":271},[41,159324,2287],{"class":58},[41,159326,3877],{"class":275},[41,159328,159329,159331],{"class":43,"line":70},[41,159330,31402],{"class":58},[41,159332,159333],{"class":275},"(i)\n",[41,159335,159336,159339,159341],{"class":43,"line":76},[41,159337,159338],{"class":275},"    i ",[41,159340,9615],{"class":271},[41,159342,55802],{"class":58},[20,159344,81032],{},[224,159346,159347,159353,159356,159359],{},[227,159348,159349,159350,28488],{},"判断条件 ",[24,159351,159352],{},"i \u003C= 5",[227,159354,159355],{},"条件成立，执行循环体。",[227,159357,159358],{},"执行完后回到条件判断。",[227,159360,159361],{},"条件不成立，退出循环。",[15,159363,159365],{"id":159364},"_43-while累加","4.3 while累加",[20,159367,159368],{},"计算 1 到 100 的和：",[32,159370,159372],{"className":30481,"code":159371,"language":30483,"meta":37,"style":37},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[24,159373,159374,159382,159390,159394,159406,159416,159424,159428],{"__ignoreMap":37},[41,159375,159376,159378,159380],{"class":43,"line":44},[41,159377,100251],{"class":275},[41,159379,321],{"class":271},[41,159381,55802],{"class":58},[41,159383,159384,159386,159388],{"class":43,"line":51},[41,159385,157363],{"class":275},[41,159387,321],{"class":271},[41,159389,47436],{"class":58},[41,159391,159392],{"class":43,"line":62},[41,159393,80],{"emptyLinePlaceholder":79},[41,159395,159396,159398,159400,159402,159404],{"class":43,"line":70},[41,159397,108766],{"class":271},[41,159399,9576],{"class":275},[41,159401,1729],{"class":271},[41,159403,5892],{"class":58},[41,159405,3877],{"class":275},[41,159407,159408,159411,159413],{"class":43,"line":76},[41,159409,159410],{"class":275},"    total ",[41,159412,9615],{"class":271},[41,159414,159415],{"class":275}," i\n",[41,159417,159418,159420,159422],{"class":43,"line":83},[41,159419,159338],{"class":275},[41,159421,9615],{"class":271},[41,159423,55802],{"class":58},[41,159425,159426],{"class":43,"line":89},[41,159427,80],{"emptyLinePlaceholder":79},[41,159429,159430,159432],{"class":43,"line":96},[41,159431,30518],{"class":58},[41,159433,159434],{"class":275},"(total)\n",[20,159436,159437],{},"核心思想：",[224,159439,159440,159445,159450],{},[227,159441,159442,159444],{},[24,159443,714],{}," 控制循环次数。",[227,159446,159447,159449],{},[24,159448,157464],{}," 保存累加结果。",[227,159451,159452,159453,159455],{},"每轮循环都要更新 ",[24,159454,714],{},"，否则可能死循环。",[15,159457,159459],{"id":159458},"_44-while猜数字","4.4 while猜数字",[32,159461,159463],{"className":30481,"code":159462,"language":30483,"meta":37,"style":37},"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",[24,159464,159465,159471,159475,159492,159500,159504,159512,159532,159541,159545,159557,159568,159578,159589,159595,159617],{"__ignoreMap":37},[41,159466,159467,159469],{"class":43,"line":44},[41,159468,30495],{"class":271},[41,159470,45431],{"class":275},[41,159472,159473],{"class":43,"line":51},[41,159474,80],{"emptyLinePlaceholder":79},[41,159476,159477,159479,159481,159484,159486,159488,159490],{"class":43,"line":62},[41,159478,159143],{"class":275},[41,159480,321],{"class":271},[41,159482,159483],{"class":275}," random.randint(",[41,159485,26],{"class":58},[41,159487,12573],{"class":275},[41,159489,584],{"class":58},[41,159491,282],{"class":275},[41,159493,159494,159496,159498],{"class":43,"line":70},[41,159495,146794],{"class":275},[41,159497,321],{"class":271},[41,159499,47436],{"class":58},[41,159501,159502],{"class":43,"line":76},[41,159503,80],{"emptyLinePlaceholder":79},[41,159505,159506,159508,159510],{"class":43,"line":83},[41,159507,108766],{"class":271},[41,159509,95395],{"class":58},[41,159511,3877],{"class":275},[41,159513,159514,159517,159519,159521,159523,159525,159527,159530],{"class":43,"line":89},[41,159515,159516],{"class":275},"    guess ",[41,159518,321],{"class":271},[41,159520,2521],{"class":58},[41,159522,276],{"class":275},[41,159524,53924],{"class":58},[41,159526,276],{"class":275},[41,159528,159529],{"class":378},"\"请输入1到100之间的数字:\"",[41,159531,30600],{"class":275},[41,159533,159534,159537,159539],{"class":43,"line":96},[41,159535,159536],{"class":275},"    count ",[41,159538,9615],{"class":271},[41,159540,55802],{"class":58},[41,159542,159543],{"class":43,"line":104},[41,159544,80],{"emptyLinePlaceholder":79},[41,159546,159547,159549,159552,159554],{"class":43,"line":176},[41,159548,3239],{"class":271},[41,159550,159551],{"class":275}," guess ",[41,159553,1233],{"class":271},[41,159555,159556],{"class":275}," answer:\n",[41,159558,159559,159561,159563,159566],{"class":43,"line":184},[41,159560,32554],{"class":58},[41,159562,276],{"class":275},[41,159564,159565],{"class":378},"\"猜大了\"",[41,159567,282],{"class":275},[41,159569,159570,159572,159574,159576],{"class":43,"line":1757},[41,159571,39396],{"class":271},[41,159573,159551],{"class":275},[41,159575,1183],{"class":271},[41,159577,159556],{"class":275},[41,159579,159580,159582,159584,159587],{"class":43,"line":1763},[41,159581,32554],{"class":58},[41,159583,276],{"class":275},[41,159585,159586],{"class":378},"\"猜小了\"",[41,159588,282],{"class":275},[41,159590,159591,159593],{"class":43,"line":1768},[41,159592,158125],{"class":271},[41,159594,3877],{"class":275},[41,159596,159597,159599,159601,159603,159606,159608,159610,159612,159615],{"class":43,"line":1782},[41,159598,32554],{"class":58},[41,159600,276],{"class":275},[41,159602,327],{"class":271},[41,159604,159605],{"class":378},"\"猜对了，一共猜了",[41,159607,1169],{"class":58},[41,159609,84537],{"class":275},[41,159611,1219],{"class":58},[41,159613,159614],{"class":378},"次\"",[41,159616,282],{"class":275},[41,159618,159619],{"class":43,"line":1787},[41,159620,31730],{"class":271},[20,159622,159623,159626,159627,159629],{},[24,159624,159625],{},"while True"," 表示无限循环，通常配合 ",[24,159628,2192],{}," 使用。",[15,159631,159633],{"id":159632},"_45-break和continue","4.5 break和continue",[241,159635,159637],{"id":159636},"_451-break","4.5.1 break",[20,159639,159640,159642],{},[24,159641,2192],{}," 直接结束整个循环。",[32,159644,159646],{"className":30481,"code":159645,"language":30483,"meta":37,"style":37},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[24,159647,159648,159668,159680,159684],{"__ignoreMap":37},[41,159649,159650,159652,159654,159656,159658,159660,159662,159664,159666],{"class":43,"line":44},[41,159651,3163],{"class":271},[41,159653,9576],{"class":275},[41,159655,26146],{"class":271},[41,159657,32546],{"class":58},[41,159659,276],{"class":275},[41,159661,26],{"class":58},[41,159663,12573],{"class":275},[41,159665,617],{"class":58},[41,159667,30889],{"class":275},[41,159669,159670,159672,159674,159676,159678],{"class":43,"line":51},[41,159671,3239],{"class":271},[41,159673,9576],{"class":275},[41,159675,3087],{"class":271},[41,159677,78173],{"class":58},[41,159679,3877],{"class":275},[41,159681,159682],{"class":43,"line":62},[41,159683,31730],{"class":271},[41,159685,159686,159688],{"class":43,"line":70},[41,159687,31402],{"class":58},[41,159689,159333],{"class":275},[20,159691,146560],{},[32,159693,159696],{"className":159694,"code":159695,"language":5325,"meta":37},[5323],"1\n2\n",[24,159697,159695],{"__ignoreMap":37},[241,159699,159701],{"id":159700},"_452-continue","4.5.2 continue",[20,159703,159704,159706],{},[24,159705,154775],{}," 跳过本轮剩余代码，进入下一轮循环。",[32,159708,159710],{"className":30481,"code":159709,"language":30483,"meta":37,"style":37},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[24,159711,159712,159732,159744,159748],{"__ignoreMap":37},[41,159713,159714,159716,159718,159720,159722,159724,159726,159728,159730],{"class":43,"line":44},[41,159715,3163],{"class":271},[41,159717,9576],{"class":275},[41,159719,26146],{"class":271},[41,159721,32546],{"class":58},[41,159723,276],{"class":275},[41,159725,26],{"class":58},[41,159727,12573],{"class":275},[41,159729,617],{"class":58},[41,159731,30889],{"class":275},[41,159733,159734,159736,159738,159740,159742],{"class":43,"line":51},[41,159735,3239],{"class":271},[41,159737,9576],{"class":275},[41,159739,3087],{"class":271},[41,159741,78173],{"class":58},[41,159743,3877],{"class":275},[41,159745,159746],{"class":43,"line":62},[41,159747,148615],{"class":271},[41,159749,159750,159752],{"class":43,"line":70},[41,159751,31402],{"class":58},[41,159753,159333],{"class":275},[20,159755,146560],{},[32,159757,159760],{"className":159758,"code":159759,"language":5325,"meta":37},[5323],"1\n2\n4\n5\n",[24,159761,159759],{"__ignoreMap":37},[15,159763,159765],{"id":159764},"_46-for循环","4.6 for循环",[20,159767,159768,159770],{},[24,159769,3163],{}," 常用于遍历序列。",[32,159772,159774],{"className":30481,"code":159773,"language":30483,"meta":37,"style":37},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[24,159775,159776,159785,159789,159800],{"__ignoreMap":37},[41,159777,159778,159780,159782],{"class":43,"line":44},[41,159779,146639],{"class":275},[41,159781,321],{"class":271},[41,159783,159784],{"class":378}," \"python\"\n",[41,159786,159787],{"class":43,"line":51},[41,159788,80],{"emptyLinePlaceholder":79},[41,159790,159791,159793,159796,159798],{"class":43,"line":62},[41,159792,3163],{"class":271},[41,159794,159795],{"class":275}," ch ",[41,159797,26146],{"class":271},[41,159799,158502],{"class":275},[41,159801,159802,159804],{"class":43,"line":70},[41,159803,31402],{"class":58},[41,159805,159806],{"class":275},"(ch)\n",[20,159808,159809],{},"遍历列表：",[32,159811,159813],{"className":30481,"code":159812,"language":30483,"meta":37,"style":37},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[24,159814,159815,159837,159841,159851],{"__ignoreMap":37},[41,159816,159817,159820,159822,159824,159826,159828,159830,159832,159835],{"class":43,"line":44},[41,159818,159819],{"class":275},"students ",[41,159821,321],{"class":271},[41,159823,52329],{"class":275},[41,159825,149991],{"class":378},[41,159827,12573],{"class":275},[41,159829,151039],{"class":378},[41,159831,12573],{"class":275},[41,159833,159834],{"class":378},"\"小刚\"",[41,159836,33349],{"class":275},[41,159838,159839],{"class":43,"line":51},[41,159840,80],{"emptyLinePlaceholder":79},[41,159842,159843,159845,159847,159849],{"class":43,"line":62},[41,159844,3163],{"class":271},[41,159846,152240],{"class":275},[41,159848,26146],{"class":271},[41,159850,152245],{"class":275},[41,159852,159853,159855],{"class":43,"line":70},[41,159854,31402],{"class":58},[41,159856,150145],{"class":275},[15,159858,159860],{"id":159859},"_47-range函数","4.7 range函数",[20,159862,159863,159866],{},[24,159864,159865],{},"range()"," 用于生成整数序列。",[32,159868,159870],{"className":30481,"code":159869,"language":30483,"meta":37,"style":37},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[24,159871,159872,159886,159904],{"__ignoreMap":37},[41,159873,159874,159876,159878,159880,159883],{"class":43,"line":44},[41,159875,33519],{"class":58},[41,159877,276],{"class":275},[41,159879,592],{"class":58},[41,159881,159882],{"class":275},")          ",[41,159884,159885],{"class":47},"# 0,1,2,3,4\n",[41,159887,159888,159890,159892,159894,159896,159898,159901],{"class":43,"line":51},[41,159889,33519],{"class":58},[41,159891,276],{"class":275},[41,159893,26],{"class":58},[41,159895,12573],{"class":275},[41,159897,592],{"class":58},[41,159899,159900],{"class":275},")       ",[41,159902,159903],{"class":47},"# 1,2,3,4\n",[41,159905,159906,159908,159910,159912,159914,159916,159918,159920,159922],{"class":43,"line":62},[41,159907,33519],{"class":58},[41,159909,276],{"class":275},[41,159911,26],{"class":58},[41,159913,12573],{"class":275},[41,159915,719],{"class":58},[41,159917,12573],{"class":275},[41,159919,351],{"class":58},[41,159921,155764],{"class":275},[41,159923,159924],{"class":47},"# 1,3,5,7,9\n",[20,159926,159927,159928,24755],{},"配合 ",[24,159929,3163],{},[32,159931,159933],{"className":30481,"code":159932,"language":30483,"meta":37,"style":37},"for i in range(1, 6):\n    print(i)\n",[24,159934,159935,159955],{"__ignoreMap":37},[41,159936,159937,159939,159941,159943,159945,159947,159949,159951,159953],{"class":43,"line":44},[41,159938,3163],{"class":271},[41,159940,9576],{"class":275},[41,159942,26146],{"class":271},[41,159944,32546],{"class":58},[41,159946,276],{"class":275},[41,159948,26],{"class":58},[41,159950,12573],{"class":275},[41,159952,617],{"class":58},[41,159954,30889],{"class":275},[41,159956,159957,159959],{"class":43,"line":51},[41,159958,31402],{"class":58},[41,159960,159333],{"class":275},[20,159962,9163,159963,159965],{},[24,159964,33519],{}," 的结束值不包含在内。",[15,159967,159969],{"id":159968},"_48-for循环求和","4.8 for循环求和",[32,159971,159973],{"className":30481,"code":159972,"language":30483,"meta":37,"style":37},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[24,159974,159975,159983,159987,160007,160015,160019],{"__ignoreMap":37},[41,159976,159977,159979,159981],{"class":43,"line":44},[41,159978,157363],{"class":275},[41,159980,321],{"class":271},[41,159982,47436],{"class":58},[41,159984,159985],{"class":43,"line":51},[41,159986,80],{"emptyLinePlaceholder":79},[41,159988,159989,159991,159993,159995,159997,159999,160001,160003,160005],{"class":43,"line":62},[41,159990,3163],{"class":271},[41,159992,9576],{"class":275},[41,159994,26146],{"class":271},[41,159996,32546],{"class":58},[41,159998,276],{"class":275},[41,160000,26],{"class":58},[41,160002,12573],{"class":275},[41,160004,610],{"class":58},[41,160006,30889],{"class":275},[41,160008,160009,160011,160013],{"class":43,"line":70},[41,160010,159410],{"class":275},[41,160012,9615],{"class":271},[41,160014,159415],{"class":275},[41,160016,160017],{"class":43,"line":76},[41,160018,80],{"emptyLinePlaceholder":79},[41,160020,160021,160023],{"class":43,"line":83},[41,160022,30518],{"class":58},[41,160024,159434],{"class":275},[20,160026,160027],{},"求偶数和：",[32,160029,160031],{"className":30481,"code":160030,"language":30483,"meta":37,"style":37},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[24,160032,160033,160041,160045,160065,160081,160090,160094],{"__ignoreMap":37},[41,160034,160035,160037,160039],{"class":43,"line":44},[41,160036,157363],{"class":275},[41,160038,321],{"class":271},[41,160040,47436],{"class":58},[41,160042,160043],{"class":43,"line":51},[41,160044,80],{"emptyLinePlaceholder":79},[41,160046,160047,160049,160051,160053,160055,160057,160059,160061,160063],{"class":43,"line":62},[41,160048,3163],{"class":271},[41,160050,9576],{"class":275},[41,160052,26146],{"class":271},[41,160054,32546],{"class":58},[41,160056,276],{"class":275},[41,160058,26],{"class":58},[41,160060,12573],{"class":275},[41,160062,610],{"class":58},[41,160064,30889],{"class":275},[41,160066,160067,160069,160071,160073,160075,160077,160079],{"class":43,"line":70},[41,160068,3239],{"class":271},[41,160070,9576],{"class":275},[41,160072,601],{"class":271},[41,160074,14893],{"class":58},[41,160076,101662],{"class":271},[41,160078,4231],{"class":58},[41,160080,3877],{"class":275},[41,160082,160083,160086,160088],{"class":43,"line":76},[41,160084,160085],{"class":275},"        total ",[41,160087,9615],{"class":271},[41,160089,159415],{"class":275},[41,160091,160092],{"class":43,"line":83},[41,160093,80],{"emptyLinePlaceholder":79},[41,160095,160096,160098],{"class":43,"line":89},[41,160097,30518],{"class":58},[41,160099,159434],{"class":275},[20,160101,160102],{},"也可以：",[32,160104,160106],{"className":30481,"code":160105,"language":30483,"meta":37,"style":37},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[24,160107,160108,160116,160120,160144,160152,160156],{"__ignoreMap":37},[41,160109,160110,160112,160114],{"class":43,"line":44},[41,160111,157363],{"class":275},[41,160113,321],{"class":271},[41,160115,47436],{"class":58},[41,160117,160118],{"class":43,"line":51},[41,160119,80],{"emptyLinePlaceholder":79},[41,160121,160122,160124,160126,160128,160130,160132,160134,160136,160138,160140,160142],{"class":43,"line":62},[41,160123,3163],{"class":271},[41,160125,9576],{"class":275},[41,160127,26146],{"class":271},[41,160129,32546],{"class":58},[41,160131,276],{"class":275},[41,160133,351],{"class":58},[41,160135,12573],{"class":275},[41,160137,610],{"class":58},[41,160139,12573],{"class":275},[41,160141,351],{"class":58},[41,160143,30889],{"class":275},[41,160145,160146,160148,160150],{"class":43,"line":70},[41,160147,159410],{"class":275},[41,160149,9615],{"class":271},[41,160151,159415],{"class":275},[41,160153,160154],{"class":43,"line":76},[41,160155,80],{"emptyLinePlaceholder":79},[41,160157,160158,160160],{"class":43,"line":83},[41,160159,30518],{"class":58},[41,160161,159434],{"class":275},[15,160163,160165],{"id":160164},"_49-循环嵌套","4.9 循环嵌套",[20,160167,160168],{},"嵌套循环就是循环里面再写循环。",[32,160170,160172],{"className":30481,"code":160171,"language":30483,"meta":37,"style":37},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[24,160173,160174,160194,160214],{"__ignoreMap":37},[41,160175,160176,160178,160180,160182,160184,160186,160188,160190,160192],{"class":43,"line":44},[41,160177,3163],{"class":271},[41,160179,9576],{"class":275},[41,160181,26146],{"class":271},[41,160183,32546],{"class":58},[41,160185,276],{"class":275},[41,160187,26],{"class":58},[41,160189,12573],{"class":275},[41,160191,566],{"class":58},[41,160193,30889],{"class":275},[41,160195,160196,160198,160200,160202,160204,160206,160208,160210,160212],{"class":43,"line":51},[41,160197,3339],{"class":271},[41,160199,9638],{"class":275},[41,160201,26146],{"class":271},[41,160203,32546],{"class":58},[41,160205,276],{"class":275},[41,160207,26],{"class":58},[41,160209,12573],{"class":275},[41,160211,566],{"class":58},[41,160213,30889],{"class":275},[41,160215,160216,160218,160220,160222,160225,160227,160229,160231,160234,160236,160238,160240,160242],{"class":43,"line":62},[41,160217,32554],{"class":58},[41,160219,276],{"class":275},[41,160221,327],{"class":271},[41,160223,160224],{"class":378},"\"i=",[41,160226,1169],{"class":58},[41,160228,714],{"class":275},[41,160230,1219],{"class":58},[41,160232,160233],{"class":378},", j=",[41,160235,1169],{"class":58},[41,160237,740],{"class":275},[41,160239,1219],{"class":58},[41,160241,524],{"class":378},[41,160243,282],{"class":275},[20,160245,160246],{},"外层循环执行一次，内层循环执行完整一轮。",[15,160248,160250],{"id":160249},"_410-九九乘法表","4.10 九九乘法表",[32,160252,160254],{"className":30481,"code":160253,"language":30483,"meta":37,"style":37},"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",[24,160255,160256,160276,160299,160351],{"__ignoreMap":37},[41,160257,160258,160260,160262,160264,160266,160268,160270,160272,160274],{"class":43,"line":44},[41,160259,3163],{"class":271},[41,160261,9576],{"class":275},[41,160263,26146],{"class":271},[41,160265,32546],{"class":58},[41,160267,276],{"class":275},[41,160269,26],{"class":58},[41,160271,12573],{"class":275},[41,160273,719],{"class":58},[41,160275,30889],{"class":275},[41,160277,160278,160280,160282,160284,160286,160288,160290,160293,160295,160297],{"class":43,"line":51},[41,160279,3339],{"class":271},[41,160281,9638],{"class":275},[41,160283,26146],{"class":271},[41,160285,32546],{"class":58},[41,160287,276],{"class":275},[41,160289,26],{"class":58},[41,160291,160292],{"class":275},", i ",[41,160294,754],{"class":271},[41,160296,25221],{"class":58},[41,160298,30889],{"class":275},[41,160300,160301,160303,160305,160307,160309,160311,160313,160315,160317,160319,160321,160323,160325,160327,160329,160331,160333,160335,160337,160339,160341,160343,160345,160347,160349],{"class":43,"line":62},[41,160302,32554],{"class":58},[41,160304,276],{"class":275},[41,160306,327],{"class":271},[41,160308,524],{"class":378},[41,160310,1169],{"class":58},[41,160312,740],{"class":275},[41,160314,1219],{"class":58},[41,160316,728],{"class":378},[41,160318,1169],{"class":58},[41,160320,714],{"class":275},[41,160322,1219],{"class":58},[41,160324,321],{"class":378},[41,160326,1169],{"class":58},[41,160328,100251],{"class":275},[41,160330,728],{"class":271},[41,160332,3548],{"class":275},[41,160334,1219],{"class":58},[41,160336,524],{"class":378},[41,160338,12573],{"class":275},[41,160340,45904],{"class":5354},[41,160342,321],{"class":271},[41,160344,524],{"class":378},[41,160346,1374],{"class":58},[41,160348,524],{"class":378},[41,160350,282],{"class":275},[41,160352,160353,160355],{"class":43,"line":70},[41,160354,31402],{"class":58},[41,160356,2115],{"class":275},[20,160358,160359],{},"关键点：",[224,160361,160362,160368,160374,160380],{},[227,160363,160364,160365,160367],{},"外层 ",[24,160366,714],{}," 控制行。",[227,160369,160370,160371,160373],{},"内层 ",[24,160372,740],{}," 控制列。",[227,160375,160376,160377,160379],{},"每行结束后用 ",[24,160378,146575],{}," 换行。",[227,160381,160382,160385],{},[24,160383,160384],{},"end=\"\\t\""," 让同一行的内容横向排列。",[15,160387,160389],{"id":160388},"_411-循环else","4.11 循环else",[20,160391,160392,160393,160395,160396,160398,160399,160401],{},"Python 的循环可以带 ",[24,160394,1841],{},"。当循环正常结束时执行 ",[24,160397,1841],{},"，如果被 ",[24,160400,2192],{}," 打断，则不执行。",[32,160403,160405],{"className":30481,"code":160404,"language":30483,"meta":37,"style":37},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[24,160406,160407,160427,160439,160450,160454,160460],{"__ignoreMap":37},[41,160408,160409,160411,160413,160415,160417,160419,160421,160423,160425],{"class":43,"line":44},[41,160410,3163],{"class":271},[41,160412,9576],{"class":275},[41,160414,26146],{"class":271},[41,160416,32546],{"class":58},[41,160418,276],{"class":275},[41,160420,26],{"class":58},[41,160422,12573],{"class":275},[41,160424,617],{"class":58},[41,160426,30889],{"class":275},[41,160428,160429,160431,160433,160435,160437],{"class":43,"line":51},[41,160430,3239],{"class":271},[41,160432,9576],{"class":275},[41,160434,3087],{"class":271},[41,160436,2177],{"class":58},[41,160438,3877],{"class":275},[41,160440,160441,160443,160445,160448],{"class":43,"line":62},[41,160442,32554],{"class":58},[41,160444,276],{"class":275},[41,160446,160447],{"class":378},"\"找到了\"",[41,160449,282],{"class":275},[41,160451,160452],{"class":43,"line":70},[41,160453,31730],{"class":271},[41,160455,160456,160458],{"class":43,"line":76},[41,160457,1841],{"class":271},[41,160459,3877],{"class":275},[41,160461,160462,160464,160466,160469],{"class":43,"line":83},[41,160463,31402],{"class":58},[41,160465,276],{"class":275},[41,160467,160468],{"class":378},"\"没找到\"",[41,160470,282],{"class":275},[20,160472,160473],{},"常用于搜索。",[32,160475,160477],{"className":30481,"code":160476,"language":30483,"meta":37,"style":37},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[24,160478,160479,160500,160509,160513,160525,160536,160546,160550,160556],{"__ignoreMap":37},[41,160480,160481,160484,160486,160488,160490,160492,160494,160496,160498],{"class":43,"line":44},[41,160482,160483],{"class":275},"names ",[41,160485,321],{"class":271},[41,160487,52329],{"class":275},[41,160489,149991],{"class":378},[41,160491,12573],{"class":275},[41,160493,151039],{"class":378},[41,160495,12573],{"class":275},[41,160497,159834],{"class":378},[41,160499,33349],{"class":275},[41,160501,160502,160504,160506],{"class":43,"line":51},[41,160503,111681],{"class":275},[41,160505,321],{"class":271},[41,160507,160508],{"class":378}," \"小李\"\n",[41,160510,160511],{"class":43,"line":62},[41,160512,80],{"emptyLinePlaceholder":79},[41,160514,160515,160517,160520,160522],{"class":43,"line":70},[41,160516,3163],{"class":271},[41,160518,160519],{"class":275}," name ",[41,160521,26146],{"class":271},[41,160523,160524],{"class":275}," names:\n",[41,160526,160527,160529,160531,160533],{"class":43,"line":76},[41,160528,3239],{"class":271},[41,160530,160519],{"class":275},[41,160532,3087],{"class":271},[41,160534,160535],{"class":275}," target:\n",[41,160537,160538,160540,160542,160544],{"class":43,"line":83},[41,160539,32554],{"class":58},[41,160541,276],{"class":275},[41,160543,160447],{"class":378},[41,160545,282],{"class":275},[41,160547,160548],{"class":43,"line":89},[41,160549,31730],{"class":271},[41,160551,160552,160554],{"class":43,"line":96},[41,160553,1841],{"class":271},[41,160555,3877],{"class":275},[41,160557,160558,160560,160562,160564],{"class":43,"line":104},[41,160559,31402],{"class":58},[41,160561,276],{"class":275},[41,160563,160468],{"class":378},[41,160565,282],{"class":275},[15,160567,160569],{"id":160568},"_412-小案例登录重试","4.12 小案例：登录重试",[20,160571,123395],{},[224,160573,160574,160577,160580],{},[227,160575,160576],{},"用户最多输入 3 次密码。",[227,160578,160579],{},"密码正确则登录成功。",[227,160581,160582],{},"3 次都错误则锁定账号。",[20,160584,10173],{},[32,160586,160588],{"className":30481,"code":160587,"language":30483,"meta":37,"style":37},"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",[24,160589,160590,160600,160604,160620,160636,160640,160652,160663,160667,160673,160698,160704],{"__ignoreMap":37},[41,160591,160592,160595,160597],{"class":43,"line":44},[41,160593,160594],{"class":275},"password ",[41,160596,321],{"class":271},[41,160598,160599],{"class":378}," \"123456\"\n",[41,160601,160602],{"class":43,"line":51},[41,160603,80],{"emptyLinePlaceholder":79},[41,160605,160606,160608,160610,160612,160614,160616,160618],{"class":43,"line":62},[41,160607,3163],{"class":271},[41,160609,9576],{"class":275},[41,160611,26146],{"class":271},[41,160613,32546],{"class":58},[41,160615,276],{"class":275},[41,160617,345],{"class":58},[41,160619,30889],{"class":275},[41,160621,160622,160625,160627,160629,160631,160634],{"class":43,"line":70},[41,160623,160624],{"class":275},"    user_password ",[41,160626,321],{"class":271},[41,160628,60708],{"class":58},[41,160630,276],{"class":275},[41,160632,160633],{"class":378},"\"请输入密码:\"",[41,160635,282],{"class":275},[41,160637,160638],{"class":43,"line":76},[41,160639,80],{"emptyLinePlaceholder":79},[41,160641,160642,160644,160647,160649],{"class":43,"line":83},[41,160643,3239],{"class":271},[41,160645,160646],{"class":275}," user_password ",[41,160648,3087],{"class":271},[41,160650,160651],{"class":275}," password:\n",[41,160653,160654,160656,160658,160661],{"class":43,"line":89},[41,160655,32554],{"class":58},[41,160657,276],{"class":275},[41,160659,160660],{"class":378},"\"登录成功\"",[41,160662,282],{"class":275},[41,160664,160665],{"class":43,"line":96},[41,160666,31730],{"class":271},[41,160668,160669,160671],{"class":43,"line":104},[41,160670,158125],{"class":271},[41,160672,3877],{"class":275},[41,160674,160675,160677,160679,160681,160684,160687,160689,160691,160693,160696],{"class":43,"line":176},[41,160676,32554],{"class":58},[41,160678,276],{"class":275},[41,160680,327],{"class":271},[41,160682,160683],{"class":378},"\"密码错误，还剩",[41,160685,160686],{"class":58},"{2",[41,160688,52374],{"class":271},[41,160690,3170],{"class":275},[41,160692,1219],{"class":58},[41,160694,160695],{"class":378},"次机会\"",[41,160697,282],{"class":275},[41,160699,160700,160702],{"class":43,"line":184},[41,160701,1841],{"class":271},[41,160703,3877],{"class":275},[41,160705,160706,160708,160710,160713],{"class":43,"line":1757},[41,160707,31402],{"class":58},[41,160709,276],{"class":275},[41,160711,160712],{"class":378},"\"账号已锁定\"",[41,160714,282],{"class":275},[15,160716,160718],{"id":160717},"_413-小案例菜单程序","4.13 小案例：菜单程序",[32,160720,160722],{"className":30481,"code":160721,"language":30483,"meta":37,"style":37},"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",[24,160723,160724,160732,160743,160754,160765,160776,160787,160791,160806,160810,160822,160833,160845,160856,160868,160879,160891,160901,160905,160911],{"__ignoreMap":37},[41,160725,160726,160728,160730],{"class":43,"line":44},[41,160727,108766],{"class":271},[41,160729,95395],{"class":58},[41,160731,3877],{"class":275},[41,160733,160734,160736,160738,160741],{"class":43,"line":51},[41,160735,31402],{"class":58},[41,160737,276],{"class":275},[41,160739,160740],{"class":378},"\"====== 菜单 ======\"",[41,160742,282],{"class":275},[41,160744,160745,160747,160749,160752],{"class":43,"line":62},[41,160746,31402],{"class":58},[41,160748,276],{"class":275},[41,160750,160751],{"class":378},"\"1. 查询余额\"",[41,160753,282],{"class":275},[41,160755,160756,160758,160760,160763],{"class":43,"line":70},[41,160757,31402],{"class":58},[41,160759,276],{"class":275},[41,160761,160762],{"class":378},"\"2. 存款\"",[41,160764,282],{"class":275},[41,160766,160767,160769,160771,160774],{"class":43,"line":76},[41,160768,31402],{"class":58},[41,160770,276],{"class":275},[41,160772,160773],{"class":378},"\"3. 取款\"",[41,160775,282],{"class":275},[41,160777,160778,160780,160782,160785],{"class":43,"line":83},[41,160779,31402],{"class":58},[41,160781,276],{"class":275},[41,160783,160784],{"class":378},"\"0. 退出\"",[41,160786,282],{"class":275},[41,160788,160789],{"class":43,"line":89},[41,160790,80],{"emptyLinePlaceholder":79},[41,160792,160793,160796,160798,160800,160802,160804],{"class":43,"line":96},[41,160794,160795],{"class":275},"    choice ",[41,160797,321],{"class":271},[41,160799,60708],{"class":58},[41,160801,276],{"class":275},[41,160803,153176],{"class":378},[41,160805,282],{"class":275},[41,160807,160808],{"class":43,"line":104},[41,160809,80],{"emptyLinePlaceholder":79},[41,160811,160812,160814,160816,160818,160820],{"class":43,"line":176},[41,160813,3239],{"class":271},[41,160815,153189],{"class":275},[41,160817,3087],{"class":271},[41,160819,153194],{"class":378},[41,160821,3877],{"class":275},[41,160823,160824,160826,160828,160831],{"class":43,"line":184},[41,160825,32554],{"class":58},[41,160827,276],{"class":275},[41,160829,160830],{"class":378},"\"余额为1000元\"",[41,160832,282],{"class":275},[41,160834,160835,160837,160839,160841,160843],{"class":43,"line":1757},[41,160836,39396],{"class":271},[41,160838,153189],{"class":275},[41,160840,3087],{"class":271},[41,160842,153213],{"class":378},[41,160844,3877],{"class":275},[41,160846,160847,160849,160851,160854],{"class":43,"line":1763},[41,160848,32554],{"class":58},[41,160850,276],{"class":275},[41,160852,160853],{"class":378},"\"存款功能\"",[41,160855,282],{"class":275},[41,160857,160858,160860,160862,160864,160866],{"class":43,"line":1768},[41,160859,39396],{"class":271},[41,160861,153189],{"class":275},[41,160863,3087],{"class":271},[41,160865,153231],{"class":378},[41,160867,3877],{"class":275},[41,160869,160870,160872,160874,160877],{"class":43,"line":1782},[41,160871,32554],{"class":58},[41,160873,276],{"class":275},[41,160875,160876],{"class":378},"\"取款功能\"",[41,160878,282],{"class":275},[41,160880,160881,160883,160885,160887,160889],{"class":43,"line":1787},[41,160882,39396],{"class":271},[41,160884,153189],{"class":275},[41,160886,3087],{"class":271},[41,160888,153285],{"class":378},[41,160890,3877],{"class":275},[41,160892,160893,160895,160897,160899],{"class":43,"line":1793},[41,160894,32554],{"class":58},[41,160896,276],{"class":275},[41,160898,153296],{"class":378},[41,160900,282],{"class":275},[41,160902,160903],{"class":43,"line":1814},[41,160904,31730],{"class":271},[41,160906,160907,160909],{"class":43,"line":1819},[41,160908,158125],{"class":271},[41,160910,3877],{"class":275},[41,160912,160913,160915,160917,160919],{"class":43,"line":1833},[41,160914,32554],{"class":58},[41,160916,276],{"class":275},[41,160918,153317],{"class":378},[41,160920,282],{"class":275},[20,160922,160923,160924,160926,160927,28488],{},"菜单类程序通常使用 ",[24,160925,159625],{},"，用户选择退出时 ",[24,160928,2192],{},[15,160930,160932],{"id":160931},"_414-易错点","4.14 易错点",[224,160934,160935,160940,160946,160954,160960],{},[227,160936,160937,160939],{},[24,160938,108766],{}," 循环必须更新控制变量。",[227,160941,160942,160945],{},[24,160943,160944],{},"range(1, 10)"," 不包含 10。",[227,160947,160948,160950,160951,160953],{},[24,160949,2192],{}," 结束整个循环，",[24,160952,154775],{}," 只跳过本轮。",[227,160955,160956,160957,160959],{},"嵌套循环中，",[24,160958,2192],{}," 只跳出当前所在的一层循环。",[227,160961,160962],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[15,160964,160966],{"id":160965},"_415-本章练习","4.15 本章练习",[224,160968,160969,160972,160975,160978,160981],{},[227,160970,160971],{},"输出 1 到 100。",[227,160973,160974],{},"计算 1 到 100 的偶数和。",[227,160976,160977],{},"输出 100 以内能被 3 和 5 同时整除的数。",[227,160979,160980],{},"编写猜数字游戏，限制最多猜 7 次。",[227,160982,160983],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[189,160985,160986],{},"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":37,"searchDepth":51,"depth":51,"links":160988},[160989,160990,160991,160992,160993,160997,160998,160999,161000,161001,161002,161003,161004,161005,161006],{"id":159245,"depth":51,"text":159246},{"id":159275,"depth":51,"text":159276},{"id":159364,"depth":51,"text":159365},{"id":159458,"depth":51,"text":159459},{"id":159632,"depth":51,"text":159633,"children":160994},[160995,160996],{"id":159636,"depth":62,"text":159637},{"id":159700,"depth":62,"text":159701},{"id":159764,"depth":51,"text":159765},{"id":159859,"depth":51,"text":159860},{"id":159968,"depth":51,"text":159969},{"id":160164,"depth":51,"text":160165},{"id":160249,"depth":51,"text":160250},{"id":160388,"depth":51,"text":160389},{"id":160568,"depth":51,"text":160569},{"id":160717,"depth":51,"text":160718},{"id":160931,"depth":51,"text":160932},{"id":160965,"depth":51,"text":160966},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159237,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161013,"title":161014,"body":161015,"description":196,"extension":197,"meta":163020,"navigation":79,"path":163021,"seo":163022,"stem":163023,"__hash__":163024},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161016,"toc":163000},[161017,161020,161024,161027,161030,161044,161047,161061,161065,161067,161086,161088,161135,161137,161151,161155,161229,161232,161236,161239,161298,161306,161309,161362,161365,161369,161374,161429,161437,161487,161491,161496,161504,161603,161609,161613,161618,161621,161632,161673,161686,161690,161693,161729,161732,161745,161748,161808,161812,161816,161819,161870,161874,161877,161924,161930,161996,161999,162003,162006,162122,162125,162129,162132,162238,162242,162245,162283,162286,162328,162331,162391,162394,162398,162862,162865,162869,162896,162902,162963,162967,162997],[10,161018,161014],{"id":161019},"_5-函数基础",[15,161021,161023],{"id":161022},"_51-为什么需要函数","5.1 为什么需要函数",[20,161025,161026],{},"函数用于封装一段可以重复使用的代码。",[20,161028,161029],{},"不使用函数的问题：",[224,161031,161032,161035,161038,161041],{},[227,161033,161034],{},"重复代码多。",[227,161036,161037],{},"修改逻辑时容易漏改。",[227,161039,161040],{},"主流程不清晰。",[227,161042,161043],{},"程序越写越长，难以维护。",[20,161045,161046],{},"使用函数后的好处：",[224,161048,161049,161052,161055,161058],{},[227,161050,161051],{},"提高复用性。",[227,161053,161054],{},"提高可读性。",[227,161056,161057],{},"便于调试。",[227,161059,161060],{},"便于分工。",[15,161062,161064],{"id":161063},"_52-函数定义","5.2 函数定义",[20,161066,5319],{},[32,161068,161070],{"className":30481,"code":161069,"language":30483,"meta":37,"style":37},"def 函数名():\n    函数体\n",[24,161071,161072,161081],{"__ignoreMap":37},[41,161073,161074,161076,161079],{"class":43,"line":44},[41,161075,32050],{"class":271},[41,161077,161078],{"class":54}," 函数名",[41,161080,32056],{"class":275},[41,161082,161083],{"class":43,"line":51},[41,161084,161085],{"class":275},"    函数体\n",[20,161087,15273],{},[32,161089,161091],{"className":30481,"code":161090,"language":30483,"meta":37,"style":37},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[24,161092,161093,161102,161112,161122,161126,161130],{"__ignoreMap":37},[41,161094,161095,161097,161100],{"class":43,"line":44},[41,161096,32050],{"class":271},[41,161098,161099],{"class":54}," say_hello",[41,161101,32056],{"class":275},[41,161103,161104,161106,161108,161110],{"class":43,"line":51},[41,161105,31402],{"class":58},[41,161107,276],{"class":275},[41,161109,5982],{"class":378},[41,161111,282],{"class":275},[41,161113,161114,161116,161118,161120],{"class":43,"line":62},[41,161115,31402],{"class":58},[41,161117,276],{"class":275},[41,161119,146742],{"class":378},[41,161121,282],{"class":275},[41,161123,161124],{"class":43,"line":70},[41,161125,80],{"emptyLinePlaceholder":79},[41,161127,161128],{"class":43,"line":76},[41,161129,80],{"emptyLinePlaceholder":79},[41,161131,161132],{"class":43,"line":83},[41,161133,161134],{"class":275},"say_hello()\n",[20,161136,9163],{},[224,161138,161139,161142,161145,161148],{},[227,161140,161141],{},"函数必须先定义，再调用。",[227,161143,161144],{},"函数名遵循变量命名规则。",[227,161146,161147],{},"函数体需要缩进。",[227,161149,161150],{},"函数不调用就不会执行。",[15,161152,161154],{"id":161153},"_53-函数调用","5.3 函数调用",[32,161156,161158],{"className":30481,"code":161157,"language":30483,"meta":37,"style":37},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[24,161159,161160,161169,161180,161191,161202,161212,161216,161220,161225],{"__ignoreMap":37},[41,161161,161162,161164,161167],{"class":43,"line":44},[41,161163,32050],{"class":271},[41,161165,161166],{"class":54}," print_menu",[41,161168,32056],{"class":275},[41,161170,161171,161173,161175,161178],{"class":43,"line":51},[41,161172,31402],{"class":58},[41,161174,276],{"class":275},[41,161176,161177],{"class":378},"\"1. 查询\"",[41,161179,282],{"class":275},[41,161181,161182,161184,161186,161189],{"class":43,"line":62},[41,161183,31402],{"class":58},[41,161185,276],{"class":275},[41,161187,161188],{"class":378},"\"2. 添加\"",[41,161190,282],{"class":275},[41,161192,161193,161195,161197,161200],{"class":43,"line":70},[41,161194,31402],{"class":58},[41,161196,276],{"class":275},[41,161198,161199],{"class":378},"\"3. 删除\"",[41,161201,282],{"class":275},[41,161203,161204,161206,161208,161210],{"class":43,"line":76},[41,161205,31402],{"class":58},[41,161207,276],{"class":275},[41,161209,160784],{"class":378},[41,161211,282],{"class":275},[41,161213,161214],{"class":43,"line":83},[41,161215,80],{"emptyLinePlaceholder":79},[41,161217,161218],{"class":43,"line":89},[41,161219,80],{"emptyLinePlaceholder":79},[41,161221,161222],{"class":43,"line":96},[41,161223,161224],{"class":275},"print_menu()\n",[41,161226,161227],{"class":43,"line":104},[41,161228,161224],{"class":275},[20,161230,161231],{},"函数可以多次调用，每次调用都会执行函数体。",[15,161233,161235],{"id":161234},"_54-参数","5.4 参数",[20,161237,161238],{},"参数用于向函数传递数据。",[32,161240,161242],{"className":30481,"code":161241,"language":30483,"meta":37,"style":37},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[24,161243,161244,161253,161273,161277,161281,161290],{"__ignoreMap":37},[41,161245,161246,161248,161250],{"class":43,"line":44},[41,161247,32050],{"class":271},[41,161249,161099],{"class":54},[41,161251,161252],{"class":275},"(name):\n",[41,161254,161255,161257,161259,161261,161263,161265,161267,161269,161271],{"class":43,"line":51},[41,161256,31402],{"class":58},[41,161258,276],{"class":275},[41,161260,327],{"class":271},[41,161262,157157],{"class":378},[41,161264,1169],{"class":58},[41,161266,79913],{"class":275},[41,161268,1219],{"class":58},[41,161270,524],{"class":378},[41,161272,282],{"class":275},[41,161274,161275],{"class":43,"line":62},[41,161276,80],{"emptyLinePlaceholder":79},[41,161278,161279],{"class":43,"line":70},[41,161280,80],{"emptyLinePlaceholder":79},[41,161282,161283,161286,161288],{"class":43,"line":76},[41,161284,161285],{"class":275},"say_hello(",[41,161287,149991],{"class":378},[41,161289,282],{"class":275},[41,161291,161292,161294,161296],{"class":43,"line":83},[41,161293,161285],{"class":275},[41,161295,151039],{"class":378},[41,161297,282],{"class":275},[20,161299,161300,161302,161303,161305],{},[24,161301,79913],{}," 是形参，",[24,161304,149991],{}," 是实参。",[20,161307,161308],{},"多个参数：",[32,161310,161312],{"className":30481,"code":161311,"language":30483,"meta":37,"style":37},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[24,161313,161314,161322,161335,161341,161345,161349],{"__ignoreMap":37},[41,161315,161316,161318,161320],{"class":43,"line":44},[41,161317,32050],{"class":271},[41,161319,5347],{"class":54},[41,161321,151196],{"class":275},[41,161323,161324,161327,161329,161331,161333],{"class":43,"line":51},[41,161325,161326],{"class":275},"    result ",[41,161328,321],{"class":271},[41,161330,11007],{"class":275},[41,161332,754],{"class":271},[41,161334,151207],{"class":275},[41,161336,161337,161339],{"class":43,"line":62},[41,161338,31402],{"class":58},[41,161340,76688],{"class":275},[41,161342,161343],{"class":43,"line":70},[41,161344,80],{"emptyLinePlaceholder":79},[41,161346,161347],{"class":43,"line":76},[41,161348,80],{"emptyLinePlaceholder":79},[41,161350,161351,161354,161356,161358,161360],{"class":43,"line":83},[41,161352,161353],{"class":275},"add(",[41,161355,719],{"class":58},[41,161357,12573],{"class":275},[41,161359,973],{"class":58},[41,161361,282],{"class":275},[20,161363,161364],{},"调用时参数数量必须匹配。",[15,161366,161368],{"id":161367},"_55-返回值","5.5 返回值",[20,161370,161371,161373],{},[24,161372,17184],{}," 用于把函数内部的结果返回给调用者。",[32,161375,161377],{"className":30481,"code":161376,"language":30483,"meta":37,"style":37},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[24,161378,161379,161387,161397,161401,161405,161423],{"__ignoreMap":37},[41,161380,161381,161383,161385],{"class":43,"line":44},[41,161382,32050],{"class":271},[41,161384,5347],{"class":54},[41,161386,151196],{"class":275},[41,161388,161389,161391,161393,161395],{"class":43,"line":51},[41,161390,4228],{"class":271},[41,161392,11007],{"class":275},[41,161394,754],{"class":271},[41,161396,151207],{"class":275},[41,161398,161399],{"class":43,"line":62},[41,161400,80],{"emptyLinePlaceholder":79},[41,161402,161403],{"class":43,"line":70},[41,161404,80],{"emptyLinePlaceholder":79},[41,161406,161407,161410,161412,161415,161417,161419,161421],{"class":43,"line":76},[41,161408,161409],{"class":275},"result ",[41,161411,321],{"class":271},[41,161413,161414],{"class":275}," add(",[41,161416,719],{"class":58},[41,161418,12573],{"class":275},[41,161420,973],{"class":58},[41,161422,282],{"class":275},[41,161424,161425,161427],{"class":43,"line":83},[41,161426,30518],{"class":58},[41,161428,76688],{"class":275},[20,161430,161431,161432,161434,161435,28488],{},"如果函数没有写 ",[24,161433,17184],{},"，默认返回 ",[24,161436,95789],{},[32,161438,161440],{"className":30481,"code":161439,"language":30483,"meta":37,"style":37},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[24,161441,161442,161450,161460,161464,161468,161477],{"__ignoreMap":37},[41,161443,161444,161446,161448],{"class":43,"line":44},[41,161445,32050],{"class":271},[41,161447,161099],{"class":54},[41,161449,32056],{"class":275},[41,161451,161452,161454,161456,161458],{"class":43,"line":51},[41,161453,31402],{"class":58},[41,161455,276],{"class":275},[41,161457,5982],{"class":378},[41,161459,282],{"class":275},[41,161461,161462],{"class":43,"line":62},[41,161463,80],{"emptyLinePlaceholder":79},[41,161465,161466],{"class":43,"line":70},[41,161467,80],{"emptyLinePlaceholder":79},[41,161469,161470,161472,161474],{"class":43,"line":76},[41,161471,161409],{"class":275},[41,161473,321],{"class":271},[41,161475,161476],{"class":275}," say_hello()\n",[41,161478,161479,161481,161484],{"class":43,"line":83},[41,161480,30518],{"class":58},[41,161482,161483],{"class":275},"(result)  ",[41,161485,161486],{"class":47},"# None\n",[15,161488,161490],{"id":161489},"_56-return的作用","5.6 return的作用",[20,161492,161493,161495],{},[24,161494,17184],{}," 有两个作用：",[224,161497,161498,161501],{},[227,161499,161500],{},"返回结果。",[227,161502,161503],{},"结束函数。",[32,161505,161507],{"className":30481,"code":161506,"language":30483,"meta":37,"style":37},"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",[24,161508,161509,161519,161531,161538,161542,161554,161561,161565,161572,161576,161580,161591],{"__ignoreMap":37},[41,161510,161511,161513,161516],{"class":43,"line":44},[41,161512,32050],{"class":271},[41,161514,161515],{"class":54}," check_age",[41,161517,161518],{"class":275},"(age):\n",[41,161520,161521,161523,161525,161527,161529],{"class":43,"line":51},[41,161522,3239],{"class":271},[41,161524,15845],{"class":275},[41,161526,1183],{"class":271},[41,161528,4231],{"class":58},[41,161530,3877],{"class":275},[41,161532,161533,161535],{"class":43,"line":62},[41,161534,14890],{"class":271},[41,161536,161537],{"class":378}," \"年龄不合法\"\n",[41,161539,161540],{"class":43,"line":70},[41,161541,80],{"emptyLinePlaceholder":79},[41,161543,161544,161546,161548,161550,161552],{"class":43,"line":76},[41,161545,3239],{"class":271},[41,161547,15845],{"class":275},[41,161549,1850],{"class":271},[41,161551,156388],{"class":58},[41,161553,3877],{"class":275},[41,161555,161556,161558],{"class":43,"line":83},[41,161557,14890],{"class":271},[41,161559,161560],{"class":378}," \"成年人\"\n",[41,161562,161563],{"class":43,"line":89},[41,161564,80],{"emptyLinePlaceholder":79},[41,161566,161567,161569],{"class":43,"line":96},[41,161568,4228],{"class":271},[41,161570,161571],{"class":378}," \"未成年人\"\n",[41,161573,161574],{"class":43,"line":104},[41,161575,80],{"emptyLinePlaceholder":79},[41,161577,161578],{"class":43,"line":176},[41,161579,80],{"emptyLinePlaceholder":79},[41,161581,161582,161584,161587,161589],{"class":43,"line":184},[41,161583,30518],{"class":58},[41,161585,161586],{"class":275},"(check_age(",[41,161588,973],{"class":58},[41,161590,30600],{"class":275},[41,161592,161593,161595,161597,161599,161601],{"class":43,"line":1757},[41,161594,30518],{"class":58},[41,161596,161586],{"class":275},[41,161598,805],{"class":271},[41,161600,26],{"class":58},[41,161602,30600],{"class":275},[20,161604,161605,161606,161608],{},"函数执行到 ",[24,161607,17184],{}," 后，后面的代码不会继续执行。",[15,161610,161612],{"id":161611},"_57-none","5.7 None",[20,161614,161615,161617],{},[24,161616,95789],{}," 表示空值或没有结果。",[20,161619,161620],{},"常见使用场景：",[224,161622,161623,161626,161629],{},[227,161624,161625],{},"函数没有返回值。",[227,161627,161628],{},"变量暂时没有具体值。",[227,161630,161631],{},"表示查询不到结果。",[32,161633,161635],{"className":30481,"code":161634,"language":30483,"meta":37,"style":37},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[24,161636,161637,161645,161649,161662],{"__ignoreMap":37},[41,161638,161639,161641,161643],{"class":43,"line":44},[41,161640,161409],{"class":275},[41,161642,321],{"class":271},[41,161644,152275],{"class":58},[41,161646,161647],{"class":43,"line":51},[41,161648,80],{"emptyLinePlaceholder":79},[41,161650,161651,161653,161656,161658,161660],{"class":43,"line":62},[41,161652,1672],{"class":271},[41,161654,161655],{"class":275}," result ",[41,161657,39030],{"class":271},[41,161659,39036],{"class":58},[41,161661,3877],{"class":275},[41,161663,161664,161666,161668,161671],{"class":43,"line":70},[41,161665,31402],{"class":58},[41,161667,276],{"class":275},[41,161669,161670],{"class":378},"\"没有数据\"",[41,161672,282],{"class":275},[20,161674,161675,161676,161678,161679,161682,161683,28488],{},"判断 ",[24,161677,95789],{}," 推荐使用 ",[24,161680,161681],{},"is None","，不要写成 ",[24,161684,161685],{},"== None",[15,161687,161689],{"id":161688},"_58-函数文档字符串","5.8 函数文档字符串",[20,161691,161692],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[32,161694,161696],{"className":30481,"code":161695,"language":30483,"meta":37,"style":37},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[24,161697,161698,161708,161713],{"__ignoreMap":37},[41,161699,161700,161702,161705],{"class":43,"line":44},[41,161701,32050],{"class":271},[41,161703,161704],{"class":54}," calculate_bmi",[41,161706,161707],{"class":275},"(weight, height):\n",[41,161709,161710],{"class":43,"line":51},[41,161711,161712],{"class":378},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[41,161714,161715,161717,161720,161722,161725,161727],{"class":43,"line":62},[41,161716,4228],{"class":271},[41,161718,161719],{"class":275}," weight ",[41,161721,857],{"class":271},[41,161723,161724],{"class":275}," height ",[41,161726,10799],{"class":271},[41,161728,47826],{"class":58},[20,161730,161731],{},"查看说明：",[32,161733,161735],{"className":30481,"code":161734,"language":30483,"meta":37,"style":37},"help(calculate_bmi)\n",[24,161736,161737],{"__ignoreMap":37},[41,161738,161739,161742],{"class":43,"line":44},[41,161740,161741],{"class":58},"help",[41,161743,161744],{"class":275},"(calculate_bmi)\n",[20,161746,161747],{},"较完整的写法：",[32,161749,161751],{"className":30481,"code":161750,"language":30483,"meta":37,"style":37},"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",[24,161752,161753,161761,161766,161771,161775,161780,161785,161790,161794],{"__ignoreMap":37},[41,161754,161755,161757,161759],{"class":43,"line":44},[41,161756,32050],{"class":271},[41,161758,161704],{"class":54},[41,161760,161707],{"class":275},[41,161762,161763],{"class":43,"line":51},[41,161764,161765],{"class":378},"    \"\"\"\n",[41,161767,161768],{"class":43,"line":62},[41,161769,161770],{"class":378},"    计算BMI。\n",[41,161772,161773],{"class":43,"line":70},[41,161774,80],{"emptyLinePlaceholder":79},[41,161776,161777],{"class":43,"line":76},[41,161778,161779],{"class":378},"    :param weight: 体重，单位kg\n",[41,161781,161782],{"class":43,"line":83},[41,161783,161784],{"class":378},"    :param height: 身高，单位m\n",[41,161786,161787],{"class":43,"line":89},[41,161788,161789],{"class":378},"    :return: BMI数值\n",[41,161791,161792],{"class":43,"line":96},[41,161793,161765],{"class":378},[41,161795,161796,161798,161800,161802,161804,161806],{"class":43,"line":104},[41,161797,4228],{"class":271},[41,161799,161719],{"class":275},[41,161801,857],{"class":271},[41,161803,161724],{"class":275},[41,161805,10799],{"class":271},[41,161807,47826],{"class":58},[15,161809,161811],{"id":161810},"_59-变量作用域","5.9 变量作用域",[241,161813,161815],{"id":161814},"_591-局部变量","5.9.1 局部变量",[20,161817,161818],{},"在函数内部定义的变量，只能在函数内部使用。",[32,161820,161822],{"className":30481,"code":161821,"language":30483,"meta":37,"style":37},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[24,161823,161824,161833,161841,161847,161851,161855,161860],{"__ignoreMap":37},[41,161825,161826,161828,161831],{"class":43,"line":44},[41,161827,32050],{"class":271},[41,161829,161830],{"class":54}," test",[41,161832,32056],{"class":275},[41,161834,161835,161837,161839],{"class":43,"line":51},[41,161836,45696],{"class":275},[41,161838,321],{"class":271},[41,161840,58531],{"class":58},[41,161842,161843,161845],{"class":43,"line":62},[41,161844,31402],{"class":58},[41,161846,289],{"class":275},[41,161848,161849],{"class":43,"line":70},[41,161850,80],{"emptyLinePlaceholder":79},[41,161852,161853],{"class":43,"line":76},[41,161854,80],{"emptyLinePlaceholder":79},[41,161856,161857],{"class":43,"line":83},[41,161858,161859],{"class":275},"test()\n",[41,161861,161862,161864,161867],{"class":43,"line":89},[41,161863,30518],{"class":58},[41,161865,161866],{"class":275},"(num)  ",[41,161868,161869],{"class":47},"# 报错\n",[241,161871,161873],{"id":161872},"_592-全局变量","5.9.2 全局变量",[20,161875,161876],{},"在函数外部定义的变量，可以在函数内部读取。",[32,161878,161880],{"className":30481,"code":161879,"language":30483,"meta":37,"style":37},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[24,161881,161882,161890,161894,161898,161906,161912,161916,161920],{"__ignoreMap":37},[41,161883,161884,161886,161888],{"class":43,"line":44},[41,161885,146639],{"class":275},[41,161887,321],{"class":271},[41,161889,149456],{"class":378},[41,161891,161892],{"class":43,"line":51},[41,161893,80],{"emptyLinePlaceholder":79},[41,161895,161896],{"class":43,"line":62},[41,161897,80],{"emptyLinePlaceholder":79},[41,161899,161900,161902,161904],{"class":43,"line":70},[41,161901,32050],{"class":271},[41,161903,161099],{"class":54},[41,161905,32056],{"class":275},[41,161907,161908,161910],{"class":43,"line":76},[41,161909,31402],{"class":58},[41,161911,150763],{"class":275},[41,161913,161914],{"class":43,"line":83},[41,161915,80],{"emptyLinePlaceholder":79},[41,161917,161918],{"class":43,"line":89},[41,161919,80],{"emptyLinePlaceholder":79},[41,161921,161922],{"class":43,"line":96},[41,161923,161134],{"class":275},[20,161925,161926,161927,28488],{},"如果要在函数内部修改全局变量，需要 ",[24,161928,161929],{},"global",[32,161931,161933],{"className":30481,"code":161932,"language":30483,"meta":37,"style":37},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[24,161934,161935,161943,161947,161951,161960,161968,161976,161980,161984,161989],{"__ignoreMap":37},[41,161936,161937,161939,161941],{"class":43,"line":44},[41,161938,146794],{"class":275},[41,161940,321],{"class":271},[41,161942,47436],{"class":58},[41,161944,161945],{"class":43,"line":51},[41,161946,80],{"emptyLinePlaceholder":79},[41,161948,161949],{"class":43,"line":62},[41,161950,80],{"emptyLinePlaceholder":79},[41,161952,161953,161955,161958],{"class":43,"line":70},[41,161954,32050],{"class":271},[41,161956,161957],{"class":54}," add_count",[41,161959,32056],{"class":275},[41,161961,161962,161965],{"class":43,"line":76},[41,161963,161964],{"class":271},"    global",[41,161966,161967],{"class":275}," count\n",[41,161969,161970,161972,161974],{"class":43,"line":83},[41,161971,159536],{"class":275},[41,161973,9615],{"class":271},[41,161975,55802],{"class":58},[41,161977,161978],{"class":43,"line":89},[41,161979,80],{"emptyLinePlaceholder":79},[41,161981,161982],{"class":43,"line":96},[41,161983,80],{"emptyLinePlaceholder":79},[41,161985,161986],{"class":43,"line":104},[41,161987,161988],{"class":275},"add_count()\n",[41,161990,161991,161993],{"class":43,"line":176},[41,161992,30518],{"class":58},[41,161994,161995],{"class":275},"(count)\n",[20,161997,161998],{},"不建议大量使用全局变量，项目变大后很难维护。",[15,162000,162002],{"id":162001},"_510-函数嵌套调用","5.10 函数嵌套调用",[20,162004,162005],{},"一个函数中可以调用另一个函数。",[32,162007,162009],{"className":30481,"code":162008,"language":30483,"meta":37,"style":37},"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",[24,162010,162011,162020,162034,162038,162042,162051,162056,162076,162097,162101,162105,162109],{"__ignoreMap":37},[41,162012,162013,162015,162018],{"class":43,"line":44},[41,162014,32050],{"class":271},[41,162016,162017],{"class":54}," print_line",[41,162019,32056],{"class":275},[41,162021,162022,162024,162026,162028,162030,162032],{"class":43,"line":51},[41,162023,31402],{"class":58},[41,162025,276],{"class":275},[41,162027,32586],{"class":378},[41,162029,6656],{"class":271},[41,162031,78768],{"class":58},[41,162033,282],{"class":275},[41,162035,162036],{"class":43,"line":62},[41,162037,80],{"emptyLinePlaceholder":79},[41,162039,162040],{"class":43,"line":70},[41,162041,80],{"emptyLinePlaceholder":79},[41,162043,162044,162046,162049],{"class":43,"line":76},[41,162045,32050],{"class":271},[41,162047,162048],{"class":54}," print_info",[41,162050,149478],{"class":275},[41,162052,162053],{"class":43,"line":83},[41,162054,162055],{"class":275},"    print_line()\n",[41,162057,162058,162060,162062,162064,162066,162068,162070,162072,162074],{"class":43,"line":89},[41,162059,31402],{"class":58},[41,162061,276],{"class":275},[41,162063,327],{"class":271},[41,162065,156785],{"class":378},[41,162067,1169],{"class":58},[41,162069,79913],{"class":275},[41,162071,1219],{"class":58},[41,162073,524],{"class":378},[41,162075,282],{"class":275},[41,162077,162078,162080,162082,162084,162087,162089,162091,162093,162095],{"class":43,"line":96},[41,162079,31402],{"class":58},[41,162081,276],{"class":275},[41,162083,327],{"class":271},[41,162085,162086],{"class":378},"\"年龄:",[41,162088,1169],{"class":58},[41,162090,70324],{"class":275},[41,162092,1219],{"class":58},[41,162094,524],{"class":378},[41,162096,282],{"class":275},[41,162098,162099],{"class":43,"line":104},[41,162100,162055],{"class":275},[41,162102,162103],{"class":43,"line":176},[41,162104,80],{"emptyLinePlaceholder":79},[41,162106,162107],{"class":43,"line":184},[41,162108,80],{"emptyLinePlaceholder":79},[41,162110,162111,162114,162116,162118,162120],{"class":43,"line":1757},[41,162112,162113],{"class":275},"print_info(",[41,162115,149991],{"class":378},[41,162117,12573],{"class":275},[41,162119,923],{"class":58},[41,162121,282],{"class":275},[20,162123,162124],{},"这种方式可以把小功能组合成大功能。",[15,162126,162128],{"id":162127},"_511-参数检查","5.11 参数检查",[20,162130,162131],{},"函数内部可以检查参数是否合法。",[32,162133,162135],{"className":30481,"code":162134,"language":30483,"meta":37,"style":37},"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",[24,162136,162137,162146,162158,162164,162174,162178,162182,162199,162203,162215,162226,162232],{"__ignoreMap":37},[41,162138,162139,162141,162144],{"class":43,"line":44},[41,162140,32050],{"class":271},[41,162142,162143],{"class":54}," divide",[41,162145,151196],{"class":275},[41,162147,162148,162150,162152,162154,162156],{"class":43,"line":51},[41,162149,3239],{"class":271},[41,162151,11020],{"class":275},[41,162153,3087],{"class":271},[41,162155,4231],{"class":58},[41,162157,3877],{"class":275},[41,162159,162160,162162],{"class":43,"line":62},[41,162161,14890],{"class":271},[41,162163,152275],{"class":58},[41,162165,162166,162168,162170,162172],{"class":43,"line":70},[41,162167,4228],{"class":271},[41,162169,11007],{"class":275},[41,162171,857],{"class":271},[41,162173,151207],{"class":275},[41,162175,162176],{"class":43,"line":76},[41,162177,80],{"emptyLinePlaceholder":79},[41,162179,162180],{"class":43,"line":83},[41,162181,80],{"emptyLinePlaceholder":79},[41,162183,162184,162186,162188,162191,162193,162195,162197],{"class":43,"line":89},[41,162185,161409],{"class":275},[41,162187,321],{"class":271},[41,162189,162190],{"class":275}," divide(",[41,162192,719],{"class":58},[41,162194,12573],{"class":275},[41,162196,465],{"class":58},[41,162198,282],{"class":275},[41,162200,162201],{"class":43,"line":96},[41,162202,80],{"emptyLinePlaceholder":79},[41,162204,162205,162207,162209,162211,162213],{"class":43,"line":104},[41,162206,1672],{"class":271},[41,162208,161655],{"class":275},[41,162210,39030],{"class":271},[41,162212,39036],{"class":58},[41,162214,3877],{"class":275},[41,162216,162217,162219,162221,162224],{"class":43,"line":176},[41,162218,31402],{"class":58},[41,162220,276],{"class":275},[41,162222,162223],{"class":378},"\"除数不能为0\"",[41,162225,282],{"class":275},[41,162227,162228,162230],{"class":43,"line":184},[41,162229,1841],{"class":271},[41,162231,3877],{"class":275},[41,162233,162234,162236],{"class":43,"line":1757},[41,162235,31402],{"class":58},[41,162237,76688],{"class":275},[15,162239,162241],{"id":162240},"_512-类型提示","5.12 类型提示",[20,162243,162244],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[32,162246,162248],{"className":30481,"code":162247,"language":30483,"meta":37,"style":37},"def add(a: int, b: int) -> int:\n    return a + b\n",[24,162249,162250,162273],{"__ignoreMap":37},[41,162251,162252,162254,162256,162259,162261,162264,162266,162269,162271],{"class":43,"line":44},[41,162253,32050],{"class":271},[41,162255,5347],{"class":54},[41,162257,162258],{"class":275},"(a: ",[41,162260,279],{"class":58},[41,162262,162263],{"class":275},", b: ",[41,162265,279],{"class":58},[41,162267,162268],{"class":275},") -> ",[41,162270,279],{"class":58},[41,162272,3877],{"class":275},[41,162274,162275,162277,162279,162281],{"class":43,"line":51},[41,162276,4228],{"class":271},[41,162278,11007],{"class":275},[41,162280,754],{"class":271},[41,162282,151207],{"class":275},[20,162284,162285],{},"字符串参数：",[32,162287,162289],{"className":30481,"code":162288,"language":30483,"meta":37,"style":37},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[24,162290,162291,162308],{"__ignoreMap":37},[41,162292,162293,162295,162297,162300,162302,162304,162306],{"class":43,"line":44},[41,162294,32050],{"class":271},[41,162296,161099],{"class":54},[41,162298,162299],{"class":275},"(name: ",[41,162301,1443],{"class":58},[41,162303,162268],{"class":275},[41,162305,95789],{"class":58},[41,162307,3877],{"class":275},[41,162309,162310,162312,162314,162316,162318,162320,162322,162324,162326],{"class":43,"line":51},[41,162311,31402],{"class":58},[41,162313,276],{"class":275},[41,162315,327],{"class":271},[41,162317,157157],{"class":378},[41,162319,1169],{"class":58},[41,162321,79913],{"class":275},[41,162323,1219],{"class":58},[41,162325,524],{"class":378},[41,162327,282],{"class":275},[20,162329,162330],{},"列表参数：",[32,162332,162334],{"className":30481,"code":162333,"language":30483,"meta":37,"style":37},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[24,162335,162336,162355,162363,162375,162384],{"__ignoreMap":37},[41,162337,162338,162340,162343,162346,162348,162351,162353],{"class":43,"line":44},[41,162339,32050],{"class":271},[41,162341,162342],{"class":54}," get_total",[41,162344,162345],{"class":275},"(numbers: list[",[41,162347,279],{"class":58},[41,162349,162350],{"class":275},"]) -> ",[41,162352,279],{"class":58},[41,162354,3877],{"class":275},[41,162356,162357,162359,162361],{"class":43,"line":51},[41,162358,159410],{"class":275},[41,162360,321],{"class":271},[41,162362,47436],{"class":58},[41,162364,162365,162367,162370,162372],{"class":43,"line":62},[41,162366,3339],{"class":271},[41,162368,162369],{"class":275}," number ",[41,162371,26146],{"class":271},[41,162373,162374],{"class":275}," numbers:\n",[41,162376,162377,162379,162381],{"class":43,"line":70},[41,162378,160085],{"class":275},[41,162380,9615],{"class":271},[41,162382,162383],{"class":275}," number\n",[41,162385,162386,162388],{"class":43,"line":76},[41,162387,4228],{"class":271},[41,162389,162390],{"class":275}," total\n",[20,162392,162393],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[15,162395,162397],{"id":162396},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[32,162399,162401],{"className":30481,"code":162400,"language":30483,"meta":37,"style":37},"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",[24,162402,162403,162413,162417,162421,162429,162440,162450,162460,162470,162480,162484,162488,162497,162519,162523,162527,162536,162542,162562,162574,162585,162589,162598,162609,162614,162618,162622,162631,162637,162656,162668,162678,162682,162693,162703,162707,162715,162726,162730,162734,162738,162746,162751,162765,162769,162781,162786,162798,162803,162815,162820,162832,162842,162846,162852],{"__ignoreMap":37},[41,162404,162405,162408,162410],{"class":43,"line":44},[41,162406,162407],{"class":275},"balance ",[41,162409,321],{"class":271},[41,162411,162412],{"class":58}," 1000\n",[41,162414,162415],{"class":43,"line":51},[41,162416,80],{"emptyLinePlaceholder":79},[41,162418,162419],{"class":43,"line":62},[41,162420,80],{"emptyLinePlaceholder":79},[41,162422,162423,162425,162427],{"class":43,"line":70},[41,162424,32050],{"class":271},[41,162426,152136],{"class":54},[41,162428,32056],{"class":275},[41,162430,162431,162433,162435,162438],{"class":43,"line":76},[41,162432,31402],{"class":58},[41,162434,276],{"class":275},[41,162436,162437],{"class":378},"\"====== ATM ======\"",[41,162439,282],{"class":275},[41,162441,162442,162444,162446,162448],{"class":43,"line":83},[41,162443,31402],{"class":58},[41,162445,276],{"class":275},[41,162447,160751],{"class":378},[41,162449,282],{"class":275},[41,162451,162452,162454,162456,162458],{"class":43,"line":89},[41,162453,31402],{"class":58},[41,162455,276],{"class":275},[41,162457,160762],{"class":378},[41,162459,282],{"class":275},[41,162461,162462,162464,162466,162468],{"class":43,"line":96},[41,162463,31402],{"class":58},[41,162465,276],{"class":275},[41,162467,160773],{"class":378},[41,162469,282],{"class":275},[41,162471,162472,162474,162476,162478],{"class":43,"line":104},[41,162473,31402],{"class":58},[41,162475,276],{"class":275},[41,162477,160784],{"class":378},[41,162479,282],{"class":275},[41,162481,162482],{"class":43,"line":176},[41,162483,80],{"emptyLinePlaceholder":79},[41,162485,162486],{"class":43,"line":184},[41,162487,80],{"emptyLinePlaceholder":79},[41,162489,162490,162492,162495],{"class":43,"line":1757},[41,162491,32050],{"class":271},[41,162493,162494],{"class":54}," show_balance",[41,162496,32056],{"class":275},[41,162498,162499,162501,162503,162505,162508,162510,162513,162515,162517],{"class":43,"line":1763},[41,162500,31402],{"class":58},[41,162502,276],{"class":275},[41,162504,327],{"class":271},[41,162506,162507],{"class":378},"\"当前余额:",[41,162509,1169],{"class":58},[41,162511,162512],{"class":275},"balance",[41,162514,1219],{"class":58},[41,162516,157115],{"class":378},[41,162518,282],{"class":275},[41,162520,162521],{"class":43,"line":1768},[41,162522,80],{"emptyLinePlaceholder":79},[41,162524,162525],{"class":43,"line":1782},[41,162526,80],{"emptyLinePlaceholder":79},[41,162528,162529,162531,162534],{"class":43,"line":1787},[41,162530,32050],{"class":271},[41,162532,162533],{"class":54}," save_money",[41,162535,32056],{"class":275},[41,162537,162538,162540],{"class":43,"line":1793},[41,162539,161964],{"class":271},[41,162541,150202],{"class":275},[41,162543,162544,162547,162549,162551,162553,162555,162557,162560],{"class":43,"line":1814},[41,162545,162546],{"class":275},"    money ",[41,162548,321],{"class":271},[41,162550,109900],{"class":58},[41,162552,276],{"class":275},[41,162554,53924],{"class":58},[41,162556,276],{"class":275},[41,162558,162559],{"class":378},"\"请输入存款金额:\"",[41,162561,30600],{"class":275},[41,162563,162564,162566,162568,162570,162572],{"class":43,"line":1819},[41,162565,3239],{"class":271},[41,162567,150245],{"class":275},[41,162569,1729],{"class":271},[41,162571,4231],{"class":58},[41,162573,3877],{"class":275},[41,162575,162576,162578,162580,162583],{"class":43,"line":1833},[41,162577,32554],{"class":58},[41,162579,276],{"class":275},[41,162581,162582],{"class":378},"\"金额必须大于0\"",[41,162584,282],{"class":275},[41,162586,162587],{"class":43,"line":1838},[41,162588,152464],{"class":271},[41,162590,162591,162594,162596],{"class":43,"line":1867},[41,162592,162593],{"class":275},"    balance ",[41,162595,9615],{"class":271},[41,162597,150278],{"class":275},[41,162599,162600,162602,162604,162607],{"class":43,"line":1872},[41,162601,31402],{"class":58},[41,162603,276],{"class":275},[41,162605,162606],{"class":378},"\"存款成功\"",[41,162608,282],{"class":275},[41,162610,162611],{"class":43,"line":1889},[41,162612,162613],{"class":275},"    show_balance()\n",[41,162615,162616],{"class":43,"line":1894},[41,162617,80],{"emptyLinePlaceholder":79},[41,162619,162620],{"class":43,"line":1899},[41,162621,80],{"emptyLinePlaceholder":79},[41,162623,162624,162626,162629],{"class":43,"line":1904},[41,162625,32050],{"class":271},[41,162627,162628],{"class":54}," withdraw_money",[41,162630,32056],{"class":275},[41,162632,162633,162635],{"class":43,"line":1918},[41,162634,161964],{"class":271},[41,162636,150202],{"class":275},[41,162638,162639,162641,162643,162645,162647,162649,162651,162654],{"class":43,"line":1923},[41,162640,162546],{"class":275},[41,162642,321],{"class":271},[41,162644,109900],{"class":58},[41,162646,276],{"class":275},[41,162648,53924],{"class":58},[41,162650,276],{"class":275},[41,162652,162653],{"class":378},"\"请输入取款金额:\"",[41,162655,30600],{"class":275},[41,162657,162658,162660,162662,162664,162666],{"class":43,"line":2715},[41,162659,3239],{"class":271},[41,162661,150245],{"class":275},[41,162663,1729],{"class":271},[41,162665,4231],{"class":58},[41,162667,3877],{"class":275},[41,162669,162670,162672,162674,162676],{"class":43,"line":2729},[41,162671,32554],{"class":58},[41,162673,276],{"class":275},[41,162675,162582],{"class":378},[41,162677,282],{"class":275},[41,162679,162680],{"class":43,"line":2737},[41,162681,152464],{"class":271},[41,162683,162684,162686,162688,162690],{"class":43,"line":2742},[41,162685,3239],{"class":271},[41,162687,150245],{"class":275},[41,162689,1233],{"class":271},[41,162691,162692],{"class":275}," balance:\n",[41,162694,162695,162697,162699,162701],{"class":43,"line":2748},[41,162696,32554],{"class":58},[41,162698,276],{"class":275},[41,162700,150340],{"class":378},[41,162702,282],{"class":275},[41,162704,162705],{"class":43,"line":2754},[41,162706,152464],{"class":271},[41,162708,162709,162711,162713],{"class":43,"line":2759},[41,162710,162593],{"class":275},[41,162712,150355],{"class":271},[41,162714,150278],{"class":275},[41,162716,162717,162719,162721,162724],{"class":43,"line":8086},[41,162718,31402],{"class":58},[41,162720,276],{"class":275},[41,162722,162723],{"class":378},"\"取款成功\"",[41,162725,282],{"class":275},[41,162727,162728],{"class":43,"line":8110},[41,162729,162613],{"class":275},[41,162731,162732],{"class":43,"line":8115},[41,162733,80],{"emptyLinePlaceholder":79},[41,162735,162736],{"class":43,"line":8121},[41,162737,80],{"emptyLinePlaceholder":79},[41,162739,162740,162742,162744],{"class":43,"line":8148},[41,162741,108766],{"class":271},[41,162743,95395],{"class":58},[41,162745,3877],{"class":275},[41,162747,162748],{"class":43,"line":8153},[41,162749,162750],{"class":275},"    show_menu()\n",[41,162752,162753,162755,162757,162759,162761,162763],{"class":43,"line":8159},[41,162754,160795],{"class":275},[41,162756,321],{"class":271},[41,162758,60708],{"class":58},[41,162760,276],{"class":275},[41,162762,153176],{"class":378},[41,162764,282],{"class":275},[41,162766,162767],{"class":43,"line":8171},[41,162768,80],{"emptyLinePlaceholder":79},[41,162770,162771,162773,162775,162777,162779],{"class":43,"line":8183},[41,162772,3239],{"class":271},[41,162774,153189],{"class":275},[41,162776,3087],{"class":271},[41,162778,153194],{"class":378},[41,162780,3877],{"class":275},[41,162782,162783],{"class":43,"line":8195},[41,162784,162785],{"class":275},"        show_balance()\n",[41,162787,162788,162790,162792,162794,162796],{"class":43,"line":9854},[41,162789,39396],{"class":271},[41,162791,153189],{"class":275},[41,162793,3087],{"class":271},[41,162795,153213],{"class":378},[41,162797,3877],{"class":275},[41,162799,162800],{"class":43,"line":9879},[41,162801,162802],{"class":275},"        save_money()\n",[41,162804,162805,162807,162809,162811,162813],{"class":43,"line":9902},[41,162806,39396],{"class":271},[41,162808,153189],{"class":275},[41,162810,3087],{"class":271},[41,162812,153231],{"class":378},[41,162814,3877],{"class":275},[41,162816,162817],{"class":43,"line":9926},[41,162818,162819],{"class":275},"        withdraw_money()\n",[41,162821,162822,162824,162826,162828,162830],{"class":43,"line":9931},[41,162823,39396],{"class":271},[41,162825,153189],{"class":275},[41,162827,3087],{"class":271},[41,162829,153285],{"class":378},[41,162831,3877],{"class":275},[41,162833,162834,162836,162838,162840],{"class":43,"line":9936},[41,162835,32554],{"class":58},[41,162837,276],{"class":275},[41,162839,153296],{"class":378},[41,162841,282],{"class":275},[41,162843,162844],{"class":43,"line":9941},[41,162845,31730],{"class":271},[41,162847,162848,162850],{"class":43,"line":9950},[41,162849,158125],{"class":271},[41,162851,3877],{"class":275},[41,162853,162854,162856,162858,162860],{"class":43,"line":9955},[41,162855,32554],{"class":58},[41,162857,276],{"class":275},[41,162859,153317],{"class":378},[41,162861,282],{"class":275},[20,162863,162864],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[15,162866,162868],{"id":162867},"_514-易错点","5.14 易错点",[224,162870,162871,162874,162877,162882,162887,162890],{},[227,162872,162873],{},"函数定义后必须调用才会执行。",[227,162875,162876],{},"函数名后面有括号才是调用。",[227,162878,162879,162881],{},[24,162880,17184],{}," 后面的代码不会执行。",[227,162883,162884,162885,28488],{},"没有返回值的函数默认返回 ",[24,162886,95789],{},[227,162888,162889],{},"局部变量不能在函数外部访问。",[227,162891,162892,162893,162895],{},"不要滥用 ",[24,162894,161929],{},"，更好的方式是让函数返回新值。",[20,162897,162898,162899,162901],{},"例如不用 ",[24,162900,161929],{}," 改写存款：",[32,162903,162905],{"className":30481,"code":162904,"language":30483,"meta":37,"style":37},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[24,162906,162907,162916,162927,162931,162935,162943,162956],{"__ignoreMap":37},[41,162908,162909,162911,162913],{"class":43,"line":44},[41,162910,32050],{"class":271},[41,162912,162533],{"class":54},[41,162914,162915],{"class":275},"(balance, money):\n",[41,162917,162918,162920,162923,162925],{"class":43,"line":51},[41,162919,4228],{"class":271},[41,162921,162922],{"class":275}," balance ",[41,162924,754],{"class":271},[41,162926,150278],{"class":275},[41,162928,162929],{"class":43,"line":62},[41,162930,80],{"emptyLinePlaceholder":79},[41,162932,162933],{"class":43,"line":70},[41,162934,80],{"emptyLinePlaceholder":79},[41,162936,162937,162939,162941],{"class":43,"line":76},[41,162938,162407],{"class":275},[41,162940,321],{"class":271},[41,162942,162412],{"class":58},[41,162944,162945,162947,162949,162952,162954],{"class":43,"line":83},[41,162946,162407],{"class":275},[41,162948,321],{"class":271},[41,162950,162951],{"class":275}," save_money(balance, ",[41,162953,1862],{"class":58},[41,162955,282],{"class":275},[41,162957,162958,162960],{"class":43,"line":89},[41,162959,30518],{"class":58},[41,162961,162962],{"class":275},"(balance)\n",[15,162964,162966],{"id":162965},"_515-本章练习","5.15 本章练习",[224,162968,162969,162976,162982,162988,162994],{},[227,162970,162971,162972,162975],{},"定义函数 ",[24,162973,162974],{},"print_student(name, age)","，输出学生信息。",[227,162977,162971,162978,162981],{},[24,162979,162980],{},"get_max(a, b, c)","，返回三个数中的最大值。",[227,162983,162971,162984,162987],{},[24,162985,162986],{},"is_even(num)","，判断一个数是否为偶数。",[227,162989,162971,162990,162993],{},[24,162991,162992],{},"calculate_bmi(weight, height)","，返回 BMI。",[227,162995,162996],{},"把第 4 章的菜单程序拆分成多个函数。",[189,162998,162999],{},"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":37,"searchDepth":51,"depth":51,"links":163001},[163002,163003,163004,163005,163006,163007,163008,163009,163010,163014,163015,163016,163017,163018,163019],{"id":161022,"depth":51,"text":161023},{"id":161063,"depth":51,"text":161064},{"id":161153,"depth":51,"text":161154},{"id":161234,"depth":51,"text":161235},{"id":161367,"depth":51,"text":161368},{"id":161489,"depth":51,"text":161490},{"id":161611,"depth":51,"text":161612},{"id":161688,"depth":51,"text":161689},{"id":161810,"depth":51,"text":161811,"children":163011},[163012,163013],{"id":161814,"depth":62,"text":161815},{"id":161872,"depth":62,"text":161873},{"id":162001,"depth":51,"text":162002},{"id":162127,"depth":51,"text":162128},{"id":162240,"depth":51,"text":162241},{"id":162396,"depth":51,"text":162397},{"id":162867,"depth":51,"text":162868},{"id":162965,"depth":51,"text":162966},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161014,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163026,"title":163027,"body":163028,"description":196,"extension":197,"meta":166072,"navigation":79,"path":166073,"seo":166074,"stem":166075,"__hash__":166076},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163029,"toc":166053},[163030,163033,163037,163040,163043,163147,163150,163154,163157,163237,163240,163244,163247,163307,163310,163346,163349,163364,163368,163441,163444,163499,163502,163572,163575,163659,163669,163727,163731,163776,163779,163805,163808,163914,163918,163921,163963,163966,164030,164033,164037,164040,164101,164104,164134,164137,164175,164179,164182,164191,164194,164318,164321,164362,164366,164369,164380,164420,164423,164438,164443,164446,164513,164516,164606,164610,164613,164661,164664,164691,164693,164723,164726,164746,164749,164780,164783,164816,164820,164823,164847,164850,164874,164877,164901,164905,164908,165038,165041,165121,165124,165199,165203,165206,165256,165259,165301,165304,165328,165330,165354,165357,165412,165415,165481,165485,165488,165491,165529,165532,165585,165588,165634,165637,165670,165673,165677,165996,166000,166029,166033,166050],[10,163031,163027],{"id":163032},"_6-数据容器",[15,163034,163036],{"id":163035},"_61-什么是数据容器","6.1 什么是数据容器",[20,163038,163039],{},"数据容器用于一次保存多个数据。",[20,163041,163042],{},"常见容器：",[411,163044,163045,163062],{},[414,163046,163047],{},[417,163048,163049,163051,163054,163057,163060],{},[420,163050,25874],{},[420,163052,163053],{},"是否有序",[420,163055,163056],{},"是否可变",[420,163058,163059],{},"是否允许重复",[420,163061,27595],{},[458,163063,163064,163082,163098,163113,163130],{},[417,163065,163066,163069,163072,163075,163078],{},[463,163067,163068],{},"list列表",[463,163070,163071],{},"有序",[463,163073,163074],{},"可变",[463,163076,163077],{},"允许",[463,163079,163080],{},[24,163081,155360],{},[417,163083,163084,163087,163089,163092,163094],{},[463,163085,163086],{},"tuple元组",[463,163088,163071],{},[463,163090,163091],{},"不可变",[463,163093,163077],{},[463,163095,163096],{},[24,163097,155373],{},[417,163099,163100,163103,163105,163107,163109],{},[463,163101,163102],{},"str字符串",[463,163104,163071],{},[463,163106,163091],{},[463,163108,163077],{},[463,163110,163111],{},[24,163112,155983],{},[417,163114,163115,163118,163121,163123,163126],{},[463,163116,163117],{},"set集合",[463,163119,163120],{},"无序",[463,163122,163074],{},[463,163124,163125],{},"不允许",[463,163127,163128],{},[24,163129,155398],{},[417,163131,163132,163135,163137,163139,163142],{},[463,163133,163134],{},"dict字典",[463,163136,163071],{},[463,163138,163074],{},[463,163140,163141],{},"key不允许重复",[463,163143,163144],{},[24,163145,163146],{},"{\"name\": \"小明\"}",[20,163148,163149],{},"Python 3.7 之后，字典保持插入顺序。",[15,163151,163153],{"id":163152},"_62-列表list","6.2 列表list",[20,163155,163156],{},"列表用于保存一组有顺序的数据。",[32,163158,163160],{"className":30481,"code":163159,"language":30483,"meta":37,"style":37},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[24,163161,163162,163182,163207,163228],{"__ignoreMap":37},[41,163163,163164,163166,163168,163170,163172,163174,163176,163178,163180],{"class":43,"line":44},[41,163165,160483],{"class":275},[41,163167,321],{"class":271},[41,163169,52329],{"class":275},[41,163171,149991],{"class":378},[41,163173,12573],{"class":275},[41,163175,151039],{"class":378},[41,163177,12573],{"class":275},[41,163179,159834],{"class":378},[41,163181,33349],{"class":275},[41,163183,163184,163187,163189,163191,163193,163195,163197,163199,163201,163203,163205],{"class":43,"line":51},[41,163185,163186],{"class":275},"numbers ",[41,163188,321],{"class":271},[41,163190,52329],{"class":275},[41,163192,26],{"class":58},[41,163194,12573],{"class":275},[41,163196,351],{"class":58},[41,163198,12573],{"class":275},[41,163200,345],{"class":58},[41,163202,12573],{"class":275},[41,163204,566],{"class":58},[41,163206,33349],{"class":275},[41,163208,163209,163212,163214,163216,163218,163220,163222,163224,163226],{"class":43,"line":62},[41,163210,163211],{"class":275},"mixed ",[41,163213,321],{"class":271},[41,163215,52329],{"class":275},[41,163217,149991],{"class":378},[41,163219,12573],{"class":275},[41,163221,923],{"class":58},[41,163223,12573],{"class":275},[41,163225,31579],{"class":58},[41,163227,33349],{"class":275},[41,163229,163230,163233,163235],{"class":43,"line":70},[41,163231,163232],{"class":275},"empty ",[41,163234,321],{"class":271},[41,163236,51941],{"class":275},[20,163238,163239],{},"推荐一个列表中保存同类数据，代码更清晰。",[15,163241,163243],{"id":163242},"_63-列表索引","6.3 列表索引",[20,163245,163246],{},"正向索引从 0 开始：",[32,163248,163250],{"className":30481,"code":163249,"language":30483,"meta":37,"style":37},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[24,163251,163252,163272,163276,163287,163297],{"__ignoreMap":37},[41,163253,163254,163256,163258,163260,163262,163264,163266,163268,163270],{"class":43,"line":44},[41,163255,160483],{"class":275},[41,163257,321],{"class":271},[41,163259,52329],{"class":275},[41,163261,149991],{"class":378},[41,163263,12573],{"class":275},[41,163265,151039],{"class":378},[41,163267,12573],{"class":275},[41,163269,159834],{"class":378},[41,163271,33349],{"class":275},[41,163273,163274],{"class":43,"line":51},[41,163275,80],{"emptyLinePlaceholder":79},[41,163277,163278,163280,163283,163285],{"class":43,"line":62},[41,163279,30518],{"class":58},[41,163281,163282],{"class":275},"(names[",[41,163284,465],{"class":58},[41,163286,4795],{"class":275},[41,163288,163289,163291,163293,163295],{"class":43,"line":70},[41,163290,30518],{"class":58},[41,163292,163282],{"class":275},[41,163294,26],{"class":58},[41,163296,4795],{"class":275},[41,163298,163299,163301,163303,163305],{"class":43,"line":76},[41,163300,30518],{"class":58},[41,163302,163282],{"class":275},[41,163304,351],{"class":58},[41,163306,4795],{"class":275},[20,163308,163309],{},"反向索引从 -1 开始：",[32,163311,163313],{"className":30481,"code":163312,"language":30483,"meta":37,"style":37},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[24,163314,163315,163331],{"__ignoreMap":37},[41,163316,163317,163319,163321,163323,163325,163328],{"class":43,"line":44},[41,163318,30518],{"class":58},[41,163320,163282],{"class":275},[41,163322,805],{"class":271},[41,163324,26],{"class":58},[41,163326,163327],{"class":275},"])  ",[41,163329,163330],{"class":47},"# 小刚\n",[41,163332,163333,163335,163337,163339,163341,163343],{"class":43,"line":51},[41,163334,30518],{"class":58},[41,163336,163282],{"class":275},[41,163338,805],{"class":271},[41,163340,351],{"class":58},[41,163342,163327],{"class":275},[41,163344,163345],{"class":47},"# 小红\n",[20,163347,163348],{},"索引越界会报错：",[32,163350,163352],{"className":30481,"code":163351,"language":30483,"meta":37,"style":37},"print(names[3])\n",[24,163353,163354],{"__ignoreMap":37},[41,163355,163356,163358,163360,163362],{"class":43,"line":44},[41,163357,30518],{"class":58},[41,163359,163282],{"class":275},[41,163361,345],{"class":58},[41,163363,4795],{"class":275},[15,163365,163367],{"id":163366},"_64-列表常用方法","6.4 列表常用方法",[32,163369,163371],{"className":30481,"code":163370,"language":30483,"meta":37,"style":37},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[24,163372,163373,163389,163393,163402,163416,163430,163434],{"__ignoreMap":37},[41,163374,163375,163377,163379,163381,163383,163385,163387],{"class":43,"line":44},[41,163376,160483],{"class":275},[41,163378,321],{"class":271},[41,163380,52329],{"class":275},[41,163382,149991],{"class":378},[41,163384,12573],{"class":275},[41,163386,151039],{"class":378},[41,163388,33349],{"class":275},[41,163390,163391],{"class":43,"line":51},[41,163392,80],{"emptyLinePlaceholder":79},[41,163394,163395,163398,163400],{"class":43,"line":62},[41,163396,163397],{"class":275},"names.append(",[41,163399,159834],{"class":378},[41,163401,282],{"class":275},[41,163403,163404,163407,163409,163411,163414],{"class":43,"line":70},[41,163405,163406],{"class":275},"names.insert(",[41,163408,26],{"class":58},[41,163410,12573],{"class":275},[41,163412,163413],{"class":378},"\"小李\"",[41,163415,282],{"class":275},[41,163417,163418,163421,163423,163425,163428],{"class":43,"line":76},[41,163419,163420],{"class":275},"names.extend([",[41,163422,8821],{"class":378},[41,163424,12573],{"class":275},[41,163426,163427],{"class":378},"\"小赵\"",[41,163429,4795],{"class":275},[41,163431,163432],{"class":43,"line":83},[41,163433,80],{"emptyLinePlaceholder":79},[41,163435,163436,163438],{"class":43,"line":89},[41,163437,30518],{"class":58},[41,163439,163440],{"class":275},"(names)\n",[20,163442,163443],{},"删除元素：",[32,163445,163447],{"className":30481,"code":163446,"language":30483,"meta":37,"style":37},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[24,163448,163449,163458,163468,163482,163494],{"__ignoreMap":37},[41,163450,163451,163454,163456],{"class":43,"line":44},[41,163452,163453],{"class":275},"names.remove(",[41,163455,151039],{"class":378},[41,163457,282],{"class":275},[41,163459,163460,163463,163465],{"class":43,"line":51},[41,163461,163462],{"class":275},"last ",[41,163464,321],{"class":271},[41,163466,163467],{"class":275}," names.pop()\n",[41,163469,163470,163473,163475,163478,163480],{"class":43,"line":62},[41,163471,163472],{"class":275},"first ",[41,163474,321],{"class":271},[41,163476,163477],{"class":275}," names.pop(",[41,163479,465],{"class":58},[41,163481,282],{"class":275},[41,163483,163484,163487,163490,163492],{"class":43,"line":70},[41,163485,163486],{"class":271},"del",[41,163488,163489],{"class":275}," names[",[41,163491,465],{"class":58},[41,163493,33349],{"class":275},[41,163495,163496],{"class":43,"line":76},[41,163497,163498],{"class":275},"names.clear()\n",[20,163500,163501],{},"查询和统计：",[32,163503,163505],{"className":30481,"code":163504,"language":30483,"meta":37,"style":37},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[24,163506,163507,163535,163539,163550,163561],{"__ignoreMap":37},[41,163508,163509,163511,163513,163515,163517,163519,163521,163523,163525,163527,163529,163531,163533],{"class":43,"line":44},[41,163510,163186],{"class":275},[41,163512,321],{"class":271},[41,163514,52329],{"class":275},[41,163516,26],{"class":58},[41,163518,12573],{"class":275},[41,163520,351],{"class":58},[41,163522,12573],{"class":275},[41,163524,345],{"class":58},[41,163526,12573],{"class":275},[41,163528,351],{"class":58},[41,163530,12573],{"class":275},[41,163532,566],{"class":58},[41,163534,33349],{"class":275},[41,163536,163537],{"class":43,"line":51},[41,163538,80],{"emptyLinePlaceholder":79},[41,163540,163541,163543,163546,163548],{"class":43,"line":62},[41,163542,30518],{"class":58},[41,163544,163545],{"class":275},"(numbers.index(",[41,163547,345],{"class":58},[41,163549,30600],{"class":275},[41,163551,163552,163554,163557,163559],{"class":43,"line":70},[41,163553,30518],{"class":58},[41,163555,163556],{"class":275},"(numbers.count(",[41,163558,351],{"class":58},[41,163560,30600],{"class":275},[41,163562,163563,163565,163567,163569],{"class":43,"line":76},[41,163564,30518],{"class":58},[41,163566,276],{"class":275},[41,163568,7496],{"class":58},[41,163570,163571],{"class":275},"(numbers))\n",[20,163573,163574],{},"排序：",[32,163576,163578],{"className":30481,"code":163577,"language":30483,"meta":37,"style":37},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[24,163579,163580,163604,163608,163613,163620,163624,163638,163644,163648,163653],{"__ignoreMap":37},[41,163581,163582,163584,163586,163588,163590,163592,163594,163596,163598,163600,163602],{"class":43,"line":44},[41,163583,163186],{"class":275},[41,163585,321],{"class":271},[41,163587,52329],{"class":275},[41,163589,345],{"class":58},[41,163591,12573],{"class":275},[41,163593,26],{"class":58},[41,163595,12573],{"class":275},[41,163597,592],{"class":58},[41,163599,12573],{"class":275},[41,163601,351],{"class":58},[41,163603,33349],{"class":275},[41,163605,163606],{"class":43,"line":51},[41,163607,80],{"emptyLinePlaceholder":79},[41,163609,163610],{"class":43,"line":62},[41,163611,163612],{"class":275},"numbers.sort()\n",[41,163614,163615,163617],{"class":43,"line":70},[41,163616,30518],{"class":58},[41,163618,163619],{"class":275},"(numbers)\n",[41,163621,163622],{"class":43,"line":76},[41,163623,80],{"emptyLinePlaceholder":79},[41,163625,163626,163629,163632,163634,163636],{"class":43,"line":83},[41,163627,163628],{"class":275},"numbers.sort(",[41,163630,163631],{"class":5354},"reverse",[41,163633,321],{"class":271},[41,163635,31579],{"class":58},[41,163637,282],{"class":275},[41,163639,163640,163642],{"class":43,"line":89},[41,163641,30518],{"class":58},[41,163643,163619],{"class":275},[41,163645,163646],{"class":43,"line":96},[41,163647,80],{"emptyLinePlaceholder":79},[41,163649,163650],{"class":43,"line":104},[41,163651,163652],{"class":275},"numbers.reverse()\n",[41,163654,163655,163657],{"class":43,"line":176},[41,163656,30518],{"class":58},[41,163658,163619],{"class":275},[20,163660,163661,163664,163665,163668],{},[24,163662,163663],{},"sort()"," 会修改原列表，",[24,163666,163667],{},"sorted()"," 返回新列表。",[32,163670,163672],{"className":30481,"code":163671,"language":30483,"meta":37,"style":37},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[24,163673,163674,163698,163710,163714,163720],{"__ignoreMap":37},[41,163675,163676,163678,163680,163682,163684,163686,163688,163690,163692,163694,163696],{"class":43,"line":44},[41,163677,163186],{"class":275},[41,163679,321],{"class":271},[41,163681,52329],{"class":275},[41,163683,345],{"class":58},[41,163685,12573],{"class":275},[41,163687,26],{"class":58},[41,163689,12573],{"class":275},[41,163691,592],{"class":58},[41,163693,12573],{"class":275},[41,163695,351],{"class":58},[41,163697,33349],{"class":275},[41,163699,163700,163703,163705,163708],{"class":43,"line":51},[41,163701,163702],{"class":275},"new_numbers ",[41,163704,321],{"class":271},[41,163706,163707],{"class":58}," sorted",[41,163709,163619],{"class":275},[41,163711,163712],{"class":43,"line":62},[41,163713,80],{"emptyLinePlaceholder":79},[41,163715,163716,163718],{"class":43,"line":70},[41,163717,30518],{"class":58},[41,163719,163619],{"class":275},[41,163721,163722,163724],{"class":43,"line":76},[41,163723,30518],{"class":58},[41,163725,163726],{"class":275},"(new_numbers)\n",[15,163728,163730],{"id":163729},"_65-列表遍历","6.5 列表遍历",[32,163732,163734],{"className":30481,"code":163733,"language":30483,"meta":37,"style":37},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[24,163735,163736,163756,163760,163770],{"__ignoreMap":37},[41,163737,163738,163740,163742,163744,163746,163748,163750,163752,163754],{"class":43,"line":44},[41,163739,160483],{"class":275},[41,163741,321],{"class":271},[41,163743,52329],{"class":275},[41,163745,149991],{"class":378},[41,163747,12573],{"class":275},[41,163749,151039],{"class":378},[41,163751,12573],{"class":275},[41,163753,159834],{"class":378},[41,163755,33349],{"class":275},[41,163757,163758],{"class":43,"line":51},[41,163759,80],{"emptyLinePlaceholder":79},[41,163761,163762,163764,163766,163768],{"class":43,"line":62},[41,163763,3163],{"class":271},[41,163765,160519],{"class":275},[41,163767,26146],{"class":271},[41,163769,160524],{"class":275},[41,163771,163772,163774],{"class":43,"line":70},[41,163773,31402],{"class":58},[41,163775,150763],{"class":275},[20,163777,163778],{},"需要索引时：",[32,163780,163782],{"className":30481,"code":163781,"language":30483,"meta":37,"style":37},"for index, name in enumerate(names):\n    print(index, name)\n",[24,163783,163784,163798],{"__ignoreMap":37},[41,163785,163786,163788,163791,163793,163795],{"class":43,"line":44},[41,163787,3163],{"class":271},[41,163789,163790],{"class":275}," index, name ",[41,163792,26146],{"class":271},[41,163794,31709],{"class":58},[41,163796,163797],{"class":275},"(names):\n",[41,163799,163800,163802],{"class":43,"line":51},[41,163801,31402],{"class":58},[41,163803,163804],{"class":275},"(index, name)\n",[20,163806,163807],{},"统计总分：",[32,163809,163811],{"className":30481,"code":163810,"language":30483,"meta":37,"style":37},"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",[24,163812,163813,163838,163846,163850,163861,163869,163873,163890],{"__ignoreMap":37},[41,163814,163815,163818,163820,163822,163824,163826,163828,163830,163832,163834,163836],{"class":43,"line":44},[41,163816,163817],{"class":275},"scores ",[41,163819,321],{"class":271},[41,163821,52329],{"class":275},[41,163823,1135],{"class":58},[41,163825,12573],{"class":275},[41,163827,1009],{"class":58},[41,163829,12573],{"class":275},[41,163831,527],{"class":58},[41,163833,12573],{"class":275},[41,163835,834],{"class":58},[41,163837,33349],{"class":275},[41,163839,163840,163842,163844],{"class":43,"line":51},[41,163841,157363],{"class":275},[41,163843,321],{"class":271},[41,163845,47436],{"class":58},[41,163847,163848],{"class":43,"line":62},[41,163849,80],{"emptyLinePlaceholder":79},[41,163851,163852,163854,163856,163858],{"class":43,"line":70},[41,163853,3163],{"class":271},[41,163855,157886],{"class":275},[41,163857,26146],{"class":271},[41,163859,163860],{"class":275}," scores:\n",[41,163862,163863,163865,163867],{"class":43,"line":76},[41,163864,159410],{"class":275},[41,163866,9615],{"class":271},[41,163868,1720],{"class":275},[41,163870,163871],{"class":43,"line":83},[41,163872,80],{"emptyLinePlaceholder":79},[41,163874,163875,163878,163880,163883,163885,163887],{"class":43,"line":89},[41,163876,163877],{"class":275},"avg ",[41,163879,321],{"class":271},[41,163881,163882],{"class":275}," total ",[41,163884,857],{"class":271},[41,163886,7469],{"class":58},[41,163888,163889],{"class":275},"(scores)\n",[41,163891,163892,163894,163896,163898,163901,163903,163906,163908,163910,163912],{"class":43,"line":96},[41,163893,30518],{"class":58},[41,163895,276],{"class":275},[41,163897,327],{"class":271},[41,163899,163900],{"class":378},"\"平均分:",[41,163902,1169],{"class":58},[41,163904,163905],{"class":275},"avg",[41,163907,157262],{"class":271},[41,163909,1219],{"class":58},[41,163911,524],{"class":378},[41,163913,282],{"class":275},[15,163915,163917],{"id":163916},"_66-元组tuple","6.6 元组tuple",[20,163919,163920],{},"元组和列表类似，但不可修改。",[32,163922,163924],{"className":30481,"code":163923,"language":30483,"meta":37,"style":37},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[24,163925,163926,163943],{"__ignoreMap":37},[41,163927,163928,163931,163933,163935,163937,163939,163941],{"class":43,"line":44},[41,163929,163930],{"class":275},"point ",[41,163932,321],{"class":271},[41,163934,1798],{"class":275},[41,163936,719],{"class":58},[41,163938,12573],{"class":275},[41,163940,973],{"class":58},[41,163942,282],{"class":275},[41,163944,163945,163947,163949,163951,163953,163955,163957,163959,163961],{"class":43,"line":51},[41,163946,116417],{"class":275},[41,163948,321],{"class":271},[41,163950,1798],{"class":275},[41,163952,149991],{"class":378},[41,163954,12573],{"class":275},[41,163956,923],{"class":58},[41,163958,12573],{"class":275},[41,163960,69372],{"class":378},[41,163962,282],{"class":275},[20,163964,163965],{},"单元素元组必须加逗号：",[32,163967,163969],{"className":30481,"code":163968,"language":30483,"meta":37,"style":37},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[24,163970,163971,163985,163998,164002,164016],{"__ignoreMap":37},[41,163972,163973,163976,163978,163980,163982],{"class":43,"line":44},[41,163974,163975],{"class":275},"t1 ",[41,163977,321],{"class":271},[41,163979,1798],{"class":275},[41,163981,719],{"class":58},[41,163983,163984],{"class":275},",)\n",[41,163986,163987,163990,163992,163994,163996],{"class":43,"line":51},[41,163988,163989],{"class":275},"t2 ",[41,163991,321],{"class":271},[41,163993,1798],{"class":275},[41,163995,719],{"class":58},[41,163997,282],{"class":275},[41,163999,164000],{"class":43,"line":62},[41,164001,80],{"emptyLinePlaceholder":79},[41,164003,164004,164006,164008,164010,164013],{"class":43,"line":70},[41,164005,30518],{"class":58},[41,164007,276],{"class":275},[41,164009,103210],{"class":58},[41,164011,164012],{"class":275},"(t1))  ",[41,164014,164015],{"class":47},"# tuple\n",[41,164017,164018,164020,164022,164024,164027],{"class":43,"line":76},[41,164019,30518],{"class":58},[41,164021,276],{"class":275},[41,164023,103210],{"class":58},[41,164025,164026],{"class":275},"(t2))  ",[41,164028,164029],{"class":47},"# int\n",[20,164031,164032],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[15,164034,164036],{"id":164035},"_67-字符串str","6.7 字符串str",[20,164038,164039],{},"字符串也是序列，可以索引、切片和遍历。",[32,164041,164043],{"className":30481,"code":164042,"language":30483,"meta":37,"style":37},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[24,164044,164045,164053,164057,164068,164080,164084,164095],{"__ignoreMap":37},[41,164046,164047,164049,164051],{"class":43,"line":44},[41,164048,156547],{"class":275},[41,164050,321],{"class":271},[41,164052,159784],{"class":378},[41,164054,164055],{"class":43,"line":51},[41,164056,80],{"emptyLinePlaceholder":79},[41,164058,164059,164061,164064,164066],{"class":43,"line":62},[41,164060,30518],{"class":58},[41,164062,164063],{"class":275},"(text[",[41,164065,465],{"class":58},[41,164067,4795],{"class":275},[41,164069,164070,164072,164074,164076,164078],{"class":43,"line":70},[41,164071,30518],{"class":58},[41,164073,164063],{"class":275},[41,164075,805],{"class":271},[41,164077,26],{"class":58},[41,164079,4795],{"class":275},[41,164081,164082],{"class":43,"line":76},[41,164083,80],{"emptyLinePlaceholder":79},[41,164085,164086,164088,164090,164092],{"class":43,"line":83},[41,164087,3163],{"class":271},[41,164089,159795],{"class":275},[41,164091,26146],{"class":271},[41,164093,164094],{"class":275}," text:\n",[41,164096,164097,164099],{"class":43,"line":89},[41,164098,31402],{"class":58},[41,164100,159806],{"class":275},[20,164102,164103],{},"字符串不可变：",[32,164105,164107],{"className":30481,"code":164106,"language":30483,"meta":37,"style":37},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[24,164108,164109,164117],{"__ignoreMap":37},[41,164110,164111,164113,164115],{"class":43,"line":44},[41,164112,156547],{"class":275},[41,164114,321],{"class":271},[41,164116,159784],{"class":378},[41,164118,164119,164122,164124,164126,164128,164131],{"class":43,"line":51},[41,164120,164121],{"class":275},"text[",[41,164123,465],{"class":58},[41,164125,4581],{"class":275},[41,164127,321],{"class":271},[41,164129,164130],{"class":378}," \"P\"",[41,164132,164133],{"class":47},"  # 报错\n",[20,164135,164136],{},"如果要得到新字符串：",[32,164138,164140],{"className":30481,"code":164139,"language":30483,"meta":37,"style":37},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[24,164141,164142,164150,164168],{"__ignoreMap":37},[41,164143,164144,164146,164148],{"class":43,"line":44},[41,164145,156547],{"class":275},[41,164147,321],{"class":271},[41,164149,159784],{"class":378},[41,164151,164152,164154,164156,164158,164160,164163,164165],{"class":43,"line":51},[41,164153,156547],{"class":275},[41,164155,321],{"class":271},[41,164157,164130],{"class":378},[41,164159,45669],{"class":271},[41,164161,164162],{"class":275}," text[",[41,164164,26],{"class":58},[41,164166,164167],{"class":275},":]\n",[41,164169,164170,164172],{"class":43,"line":62},[41,164171,30518],{"class":58},[41,164173,164174],{"class":275},"(text)\n",[15,164176,164178],{"id":164177},"_68-切片","6.8 切片",[20,164180,164181],{},"切片用于从序列中取一部分。",[32,164183,164185],{"className":30481,"code":164184,"language":30483,"meta":37,"style":37},"序列[开始:结束:步长]\n",[24,164186,164187],{"__ignoreMap":37},[41,164188,164189],{"class":43,"line":44},[41,164190,164184],{"class":275},[20,164192,164193],{},"结束位置不包含。",[32,164195,164197],{"className":30481,"code":164196,"language":30483,"meta":37,"style":37},"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",[24,164198,164199,164236,164240,164259,164274,164288,164302],{"__ignoreMap":37},[41,164200,164201,164204,164206,164208,164210,164212,164214,164216,164218,164220,164222,164224,164226,164228,164230,164232,164234],{"class":43,"line":44},[41,164202,164203],{"class":275},"nums ",[41,164205,321],{"class":271},[41,164207,52329],{"class":275},[41,164209,465],{"class":58},[41,164211,12573],{"class":275},[41,164213,26],{"class":58},[41,164215,12573],{"class":275},[41,164217,351],{"class":58},[41,164219,12573],{"class":275},[41,164221,345],{"class":58},[41,164223,12573],{"class":275},[41,164225,566],{"class":58},[41,164227,12573],{"class":275},[41,164229,592],{"class":58},[41,164231,12573],{"class":275},[41,164233,617],{"class":58},[41,164235,33349],{"class":275},[41,164237,164238],{"class":43,"line":51},[41,164239,80],{"emptyLinePlaceholder":79},[41,164241,164242,164244,164247,164249,164251,164253,164256],{"class":43,"line":62},[41,164243,30518],{"class":58},[41,164245,164246],{"class":275},"(nums[",[41,164248,26],{"class":58},[41,164250,1132],{"class":275},[41,164252,566],{"class":58},[41,164254,164255],{"class":275},"])    ",[41,164257,164258],{"class":47},"# [1, 2, 3]\n",[41,164260,164261,164263,164266,164268,164271],{"class":43,"line":70},[41,164262,30518],{"class":58},[41,164264,164265],{"class":275},"(nums[:",[41,164267,345],{"class":58},[41,164269,164270],{"class":275},"])     ",[41,164272,164273],{"class":47},"# [0, 1, 2]\n",[41,164275,164276,164278,164280,164282,164285],{"class":43,"line":76},[41,164277,30518],{"class":58},[41,164279,164246],{"class":275},[41,164281,345],{"class":58},[41,164283,164284],{"class":275},":])     ",[41,164286,164287],{"class":47},"# [3, 4, 5, 6]\n",[41,164289,164290,164292,164295,164297,164299],{"class":43,"line":83},[41,164291,30518],{"class":58},[41,164293,164294],{"class":275},"(nums[::",[41,164296,351],{"class":58},[41,164298,164255],{"class":275},[41,164300,164301],{"class":47},"# [0, 2, 4, 6]\n",[41,164303,164304,164306,164308,164310,164312,164315],{"class":43,"line":89},[41,164305,30518],{"class":58},[41,164307,164294],{"class":275},[41,164309,805],{"class":271},[41,164311,26],{"class":58},[41,164313,164314],{"class":275},"])   ",[41,164316,164317],{"class":47},"# 反转\n",[20,164319,164320],{},"字符串切片：",[32,164322,164324],{"className":30481,"code":164323,"language":30483,"meta":37,"style":37},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[24,164325,164326,164335,164349],{"__ignoreMap":37},[41,164327,164328,164330,164332],{"class":43,"line":44},[41,164329,156547],{"class":275},[41,164331,321],{"class":271},[41,164333,164334],{"class":378}," \"abcdef\"\n",[41,164336,164337,164339,164341,164343,164345,164347],{"class":43,"line":51},[41,164338,30518],{"class":58},[41,164340,164063],{"class":275},[41,164342,26],{"class":58},[41,164344,1132],{"class":275},[41,164346,566],{"class":58},[41,164348,4795],{"class":275},[41,164350,164351,164353,164356,164358,164360],{"class":43,"line":62},[41,164352,30518],{"class":58},[41,164354,164355],{"class":275},"(text[::",[41,164357,805],{"class":271},[41,164359,26],{"class":58},[41,164361,4795],{"class":275},[15,164363,164365],{"id":164364},"_69-集合set","6.9 集合set",[20,164367,164368],{},"集合特点：",[224,164370,164371,164374,164377],{},[227,164372,164373],{},"无序。",[227,164375,164376],{},"元素不重复。",[227,164378,164379],{},"可以做交集、并集、差集。",[32,164381,164383],{"className":30481,"code":164382,"language":30483,"meta":37,"style":37},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[24,164384,164385,164413],{"__ignoreMap":37},[41,164386,164387,164389,164391,164393,164395,164397,164399,164401,164403,164405,164407,164409,164411],{"class":43,"line":44},[41,164388,164203],{"class":275},[41,164390,321],{"class":271},[41,164392,4586],{"class":275},[41,164394,26],{"class":58},[41,164396,12573],{"class":275},[41,164398,351],{"class":58},[41,164400,12573],{"class":275},[41,164402,345],{"class":58},[41,164404,12573],{"class":275},[41,164406,345],{"class":58},[41,164408,12573],{"class":275},[41,164410,566],{"class":58},[41,164412,1706],{"class":275},[41,164414,164415,164417],{"class":43,"line":51},[41,164416,30518],{"class":58},[41,164418,164419],{"class":275},"(nums)\n",[20,164421,164422],{},"创建空集合：",[32,164424,164426],{"className":30481,"code":164425,"language":30483,"meta":37,"style":37},"s = set()\n",[24,164427,164428],{"__ignoreMap":37},[41,164429,164430,164432,164434,164436],{"class":43,"line":44},[41,164431,10717],{"class":275},[41,164433,321],{"class":271},[41,164435,119825],{"class":58},[41,164437,2115],{"class":275},[20,164439,9163,164440,164442],{},[24,164441,32562],{}," 是空字典，不是空集合。",[20,164444,164445],{},"集合常用操作：",[32,164447,164449],{"className":30481,"code":164448,"language":30483,"meta":37,"style":37},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[24,164450,164451,164471,164475,164484,164493,164502],{"__ignoreMap":37},[41,164452,164453,164455,164457,164459,164461,164463,164465,164467,164469],{"class":43,"line":44},[41,164454,10717],{"class":275},[41,164456,321],{"class":271},[41,164458,4586],{"class":275},[41,164460,26],{"class":58},[41,164462,12573],{"class":275},[41,164464,351],{"class":58},[41,164466,12573],{"class":275},[41,164468,345],{"class":58},[41,164470,1706],{"class":275},[41,164472,164473],{"class":43,"line":51},[41,164474,80],{"emptyLinePlaceholder":79},[41,164476,164477,164480,164482],{"class":43,"line":62},[41,164478,164479],{"class":275},"s.add(",[41,164481,566],{"class":58},[41,164483,282],{"class":275},[41,164485,164486,164489,164491],{"class":43,"line":70},[41,164487,164488],{"class":275},"s.remove(",[41,164490,351],{"class":58},[41,164492,282],{"class":275},[41,164494,164495,164498,164500],{"class":43,"line":76},[41,164496,164497],{"class":275},"s.discard(",[41,164499,719],{"class":58},[41,164501,282],{"class":275},[41,164503,164504,164506,164508,164510],{"class":43,"line":83},[41,164505,30518],{"class":58},[41,164507,276],{"class":275},[41,164509,7496],{"class":58},[41,164511,164512],{"class":275},"(s))\n",[20,164514,164515],{},"交并差：",[32,164517,164519],{"className":30481,"code":164518,"language":30483,"meta":37,"style":37},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[24,164520,164521,164541,164561,164565,164580,164593],{"__ignoreMap":37},[41,164522,164523,164525,164527,164529,164531,164533,164535,164537,164539],{"class":43,"line":44},[41,164524,11057],{"class":275},[41,164526,321],{"class":271},[41,164528,4586],{"class":275},[41,164530,26],{"class":58},[41,164532,12573],{"class":275},[41,164534,351],{"class":58},[41,164536,12573],{"class":275},[41,164538,345],{"class":58},[41,164540,1706],{"class":275},[41,164542,164543,164545,164547,164549,164551,164553,164555,164557,164559],{"class":43,"line":51},[41,164544,11083],{"class":275},[41,164546,321],{"class":271},[41,164548,4586],{"class":275},[41,164550,345],{"class":58},[41,164552,12573],{"class":275},[41,164554,566],{"class":58},[41,164556,12573],{"class":275},[41,164558,592],{"class":58},[41,164560,1706],{"class":275},[41,164562,164563],{"class":43,"line":62},[41,164564,80],{"emptyLinePlaceholder":79},[41,164566,164567,164569,164572,164574,164577],{"class":43,"line":70},[41,164568,30518],{"class":58},[41,164570,164571],{"class":275},"(a ",[41,164573,626],{"class":271},[41,164575,164576],{"class":275}," b)  ",[41,164578,164579],{"class":47},"# 交集\n",[41,164581,164582,164584,164586,164588,164590],{"class":43,"line":76},[41,164583,30518],{"class":58},[41,164585,164571],{"class":275},[41,164587,1194],{"class":271},[41,164589,164576],{"class":275},[41,164591,164592],{"class":47},"# 并集\n",[41,164594,164595,164597,164599,164601,164603],{"class":43,"line":83},[41,164596,30518],{"class":58},[41,164598,164571],{"class":275},[41,164600,805],{"class":271},[41,164602,164576],{"class":275},[41,164604,164605],{"class":47},"# 差集\n",[15,164607,164609],{"id":164608},"_610-字典dict","6.10 字典dict",[20,164611,164612],{},"字典通过 key-value 保存数据。",[32,164614,164616],{"className":30481,"code":164615,"language":30483,"meta":37,"style":37},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[24,164617,164618,164626,164636,164647,164657],{"__ignoreMap":37},[41,164619,164620,164622,164624],{"class":43,"line":44},[41,164621,149584],{"class":275},[41,164623,321],{"class":271},[41,164625,15710],{"class":275},[41,164627,164628,164630,164632,164634],{"class":43,"line":51},[41,164629,147123],{"class":378},[41,164631,51540],{"class":275},[41,164633,149991],{"class":378},[41,164635,31569],{"class":275},[41,164637,164638,164641,164643,164645],{"class":43,"line":62},[41,164639,164640],{"class":378},"    \"age\"",[41,164642,51540],{"class":275},[41,164644,923],{"class":58},[41,164646,31569],{"class":275},[41,164648,164649,164652,164654],{"class":43,"line":70},[41,164650,164651],{"class":378},"    \"score\"",[41,164653,51540],{"class":275},[41,164655,164656],{"class":58},"95\n",[41,164658,164659],{"class":43,"line":76},[41,164660,1706],{"class":275},[20,164662,164663],{},"获取值：",[32,164665,164667],{"className":30481,"code":164666,"language":30483,"meta":37,"style":37},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[24,164668,164669,164680],{"__ignoreMap":37},[41,164670,164671,164673,164676,164678],{"class":43,"line":44},[41,164672,30518],{"class":58},[41,164674,164675],{"class":275},"(student[",[41,164677,62782],{"class":378},[41,164679,4795],{"class":275},[41,164681,164682,164684,164687,164689],{"class":43,"line":51},[41,164683,30518],{"class":58},[41,164685,164686],{"class":275},"(student.get(",[41,164688,62782],{"class":378},[41,164690,30600],{"class":275},[20,164692,15526],{},[32,164694,164696],{"className":30481,"code":164695,"language":30483,"meta":37,"style":37},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[24,164697,164698,164711],{"__ignoreMap":37},[41,164699,164700,164702,164705,164708],{"class":43,"line":44},[41,164701,152962],{"class":275},[41,164703,164704],{"class":378},"\"address\"",[41,164706,164707],{"class":275},"]     ",[41,164709,164710],{"class":47},"# key不存在会报错\n",[41,164712,164713,164716,164718,164720],{"class":43,"line":51},[41,164714,164715],{"class":275},"student.get(",[41,164717,164704],{"class":378},[41,164719,13852],{"class":275},[41,164721,164722],{"class":47},"# key不存在返回None\n",[20,164724,164725],{},"设置默认值：",[32,164727,164729],{"className":30481,"code":164728,"language":30483,"meta":37,"style":37},"print(student.get(\"address\", \"未知\"))\n",[24,164730,164731],{"__ignoreMap":37},[41,164732,164733,164735,164737,164739,164741,164744],{"class":43,"line":44},[41,164734,30518],{"class":58},[41,164736,164686],{"class":275},[41,164738,164704],{"class":378},[41,164740,12573],{"class":275},[41,164742,164743],{"class":378},"\"未知\"",[41,164745,30600],{"class":275},[20,164747,164748],{},"新增和修改：",[32,164750,164752],{"className":30481,"code":164751,"language":30483,"meta":37,"style":37},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[24,164753,164754,164767],{"__ignoreMap":37},[41,164755,164756,164758,164760,164762,164764],{"class":43,"line":44},[41,164757,152962],{"class":275},[41,164759,69227],{"class":378},[41,164761,4581],{"class":275},[41,164763,321],{"class":271},[41,164765,164766],{"class":58}," 19\n",[41,164768,164769,164771,164773,164775,164777],{"class":43,"line":51},[41,164770,152962],{"class":275},[41,164772,164704],{"class":378},[41,164774,4581],{"class":275},[41,164776,321],{"class":271},[41,164778,164779],{"class":378}," \"北京\"\n",[20,164781,164782],{},"删除：",[32,164784,164786],{"className":30481,"code":164785,"language":30483,"meta":37,"style":37},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[24,164787,164788,164801,164811],{"__ignoreMap":37},[41,164789,164790,164792,164794,164797,164799],{"class":43,"line":44},[41,164791,155461],{"class":275},[41,164793,321],{"class":271},[41,164795,164796],{"class":275}," student.pop(",[41,164798,151575],{"class":378},[41,164800,282],{"class":275},[41,164802,164803,164805,164807,164809],{"class":43,"line":51},[41,164804,163486],{"class":271},[41,164806,152252],{"class":275},[41,164808,69227],{"class":378},[41,164810,33349],{"class":275},[41,164812,164813],{"class":43,"line":62},[41,164814,164815],{"class":275},"student.clear()\n",[15,164817,164819],{"id":164818},"_611-字典遍历","6.11 字典遍历",[20,164821,164822],{},"遍历 key：",[32,164824,164826],{"className":30481,"code":164825,"language":30483,"meta":37,"style":37},"for key in student:\n    print(key, student[key])\n",[24,164827,164828,164840],{"__ignoreMap":37},[41,164829,164830,164832,164835,164837],{"class":43,"line":44},[41,164831,3163],{"class":271},[41,164833,164834],{"class":275}," key ",[41,164836,26146],{"class":271},[41,164838,164839],{"class":275}," student:\n",[41,164841,164842,164844],{"class":43,"line":51},[41,164843,31402],{"class":58},[41,164845,164846],{"class":275},"(key, student[key])\n",[20,164848,164849],{},"遍历 value：",[32,164851,164853],{"className":30481,"code":164852,"language":30483,"meta":37,"style":37},"for value in student.values():\n    print(value)\n",[24,164854,164855,164867],{"__ignoreMap":37},[41,164856,164857,164859,164862,164864],{"class":43,"line":44},[41,164858,3163],{"class":271},[41,164860,164861],{"class":275}," value ",[41,164863,26146],{"class":271},[41,164865,164866],{"class":275}," student.values():\n",[41,164868,164869,164871],{"class":43,"line":51},[41,164870,31402],{"class":58},[41,164872,164873],{"class":275},"(value)\n",[20,164875,164876],{},"遍历 key 和 value：",[32,164878,164880],{"className":30481,"code":164879,"language":30483,"meta":37,"style":37},"for key, value in student.items():\n    print(key, value)\n",[24,164881,164882,164894],{"__ignoreMap":37},[41,164883,164884,164886,164889,164891],{"class":43,"line":44},[41,164885,3163],{"class":271},[41,164887,164888],{"class":275}," key, value ",[41,164890,26146],{"class":271},[41,164892,164893],{"class":275}," student.items():\n",[41,164895,164896,164898],{"class":43,"line":51},[41,164897,31402],{"class":58},[41,164899,164900],{"class":275},"(key, value)\n",[15,164902,164904],{"id":164903},"_612-嵌套容器","6.12 嵌套容器",[20,164906,164907],{},"列表中保存字典，是项目中最常见的结构之一。",[32,164909,164911],{"className":30481,"code":164910,"language":30483,"meta":37,"style":37},"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",[24,164912,164913,164921,164949,164977,165005,165009,165013,165023],{"__ignoreMap":37},[41,164914,164915,164917,164919],{"class":43,"line":44},[41,164916,159819],{"class":275},[41,164918,321],{"class":271},[41,164920,55550],{"class":275},[41,164922,164923,164925,164927,164929,164931,164933,164935,164937,164939,164941,164943,164945,164947],{"class":43,"line":51},[41,164924,148488],{"class":275},[41,164926,62782],{"class":378},[41,164928,51540],{"class":275},[41,164930,149991],{"class":378},[41,164932,12573],{"class":275},[41,164934,69227],{"class":378},[41,164936,51540],{"class":275},[41,164938,923],{"class":58},[41,164940,12573],{"class":275},[41,164942,151575],{"class":378},[41,164944,51540],{"class":275},[41,164946,1262],{"class":58},[41,164948,5068],{"class":275},[41,164950,164951,164953,164955,164957,164959,164961,164963,164965,164967,164969,164971,164973,164975],{"class":43,"line":62},[41,164952,148488],{"class":275},[41,164954,62782],{"class":378},[41,164956,51540],{"class":275},[41,164958,151039],{"class":378},[41,164960,12573],{"class":275},[41,164962,69227],{"class":378},[41,164964,51540],{"class":275},[41,164966,898],{"class":58},[41,164968,12573],{"class":275},[41,164970,151575],{"class":378},[41,164972,51540],{"class":275},[41,164974,1084],{"class":58},[41,164976,5068],{"class":275},[41,164978,164979,164981,164983,164985,164987,164989,164991,164993,164995,164997,164999,165001,165003],{"class":43,"line":70},[41,164980,148488],{"class":275},[41,164982,62782],{"class":378},[41,164984,51540],{"class":275},[41,164986,159834],{"class":378},[41,164988,12573],{"class":275},[41,164990,69227],{"class":378},[41,164992,51540],{"class":275},[41,164994,948],{"class":58},[41,164996,12573],{"class":275},[41,164998,151575],{"class":378},[41,165000,51540],{"class":275},[41,165002,679],{"class":58},[41,165004,5068],{"class":275},[41,165006,165007],{"class":43,"line":76},[41,165008,33349],{"class":275},[41,165010,165011],{"class":43,"line":83},[41,165012,80],{"emptyLinePlaceholder":79},[41,165014,165015,165017,165019,165021],{"class":43,"line":89},[41,165016,3163],{"class":271},[41,165018,152240],{"class":275},[41,165020,26146],{"class":271},[41,165022,152245],{"class":275},[41,165024,165025,165027,165029,165031,165034,165036],{"class":43,"line":96},[41,165026,31402],{"class":58},[41,165028,164675],{"class":275},[41,165030,62782],{"class":378},[41,165032,165033],{"class":275},"], student[",[41,165035,151575],{"class":378},[41,165037,4795],{"class":275},[20,165039,165040],{},"统计平均分：",[32,165042,165044],{"className":30481,"code":165043,"language":30483,"meta":37,"style":37},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[24,165045,165046,165054,165058,165068,165080,165084,165099],{"__ignoreMap":37},[41,165047,165048,165050,165052],{"class":43,"line":44},[41,165049,157363],{"class":275},[41,165051,321],{"class":271},[41,165053,47436],{"class":58},[41,165055,165056],{"class":43,"line":51},[41,165057,80],{"emptyLinePlaceholder":79},[41,165059,165060,165062,165064,165066],{"class":43,"line":62},[41,165061,3163],{"class":271},[41,165063,152240],{"class":275},[41,165065,26146],{"class":271},[41,165067,152245],{"class":275},[41,165069,165070,165072,165074,165076,165078],{"class":43,"line":70},[41,165071,159410],{"class":275},[41,165073,9615],{"class":271},[41,165075,152252],{"class":275},[41,165077,151575],{"class":378},[41,165079,33349],{"class":275},[41,165081,165082],{"class":43,"line":76},[41,165083,80],{"emptyLinePlaceholder":79},[41,165085,165086,165088,165090,165092,165094,165096],{"class":43,"line":83},[41,165087,163877],{"class":275},[41,165089,321],{"class":271},[41,165091,163882],{"class":275},[41,165093,857],{"class":271},[41,165095,7469],{"class":58},[41,165097,165098],{"class":275},"(students)\n",[41,165100,165101,165103,165105,165107,165109,165111,165113,165115,165117,165119],{"class":43,"line":89},[41,165102,30518],{"class":58},[41,165104,276],{"class":275},[41,165106,327],{"class":271},[41,165108,163900],{"class":378},[41,165110,1169],{"class":58},[41,165112,163905],{"class":275},[41,165114,157262],{"class":271},[41,165116,1219],{"class":58},[41,165118,524],{"class":378},[41,165120,282],{"class":275},[20,165122,165123],{},"查找学生：",[32,165125,165127],{"className":30481,"code":165126,"language":30483,"meta":37,"style":37},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[24,165128,165129,165144,165148,165158,165172,165178,165182,165188],{"__ignoreMap":37},[41,165130,165131,165133,165135,165137,165139,165142],{"class":43,"line":44},[41,165132,111681],{"class":275},[41,165134,321],{"class":271},[41,165136,60708],{"class":58},[41,165138,276],{"class":275},[41,165140,165141],{"class":378},"\"请输入学生姓名:\"",[41,165143,282],{"class":275},[41,165145,165146],{"class":43,"line":51},[41,165147,80],{"emptyLinePlaceholder":79},[41,165149,165150,165152,165154,165156],{"class":43,"line":62},[41,165151,3163],{"class":271},[41,165153,152240],{"class":275},[41,165155,26146],{"class":271},[41,165157,152245],{"class":275},[41,165159,165160,165162,165164,165166,165168,165170],{"class":43,"line":70},[41,165161,3239],{"class":271},[41,165163,152252],{"class":275},[41,165165,62782],{"class":378},[41,165167,4581],{"class":275},[41,165169,3087],{"class":271},[41,165171,160535],{"class":275},[41,165173,165174,165176],{"class":43,"line":76},[41,165175,32554],{"class":58},[41,165177,150145],{"class":275},[41,165179,165180],{"class":43,"line":83},[41,165181,31730],{"class":271},[41,165183,165184,165186],{"class":43,"line":89},[41,165185,1841],{"class":271},[41,165187,3877],{"class":275},[41,165189,165190,165192,165194,165197],{"class":43,"line":96},[41,165191,31402],{"class":58},[41,165193,276],{"class":275},[41,165195,165196],{"class":378},"\"没有找到\"",[41,165198,282],{"class":275},[15,165200,165202],{"id":165201},"_613-容器通用操作","6.13 容器通用操作",[20,165204,165205],{},"长度：",[32,165207,165209],{"className":30481,"code":165208,"language":30483,"meta":37,"style":37},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[24,165210,165211,165230,165240],{"__ignoreMap":37},[41,165212,165213,165215,165218,165220,165222,165224,165226,165228],{"class":43,"line":44},[41,165214,7496],{"class":58},[41,165216,165217],{"class":275},"([",[41,165219,26],{"class":58},[41,165221,12573],{"class":275},[41,165223,351],{"class":58},[41,165225,12573],{"class":275},[41,165227,345],{"class":58},[41,165229,4795],{"class":275},[41,165231,165232,165234,165236,165238],{"class":43,"line":51},[41,165233,7496],{"class":58},[41,165235,276],{"class":275},[41,165237,155983],{"class":378},[41,165239,282],{"class":275},[41,165241,165242,165244,165247,165249,165251,165253],{"class":43,"line":62},[41,165243,7496],{"class":58},[41,165245,165246],{"class":275},"({",[41,165248,62782],{"class":378},[41,165250,51540],{"class":275},[41,165252,149991],{"class":378},[41,165254,165255],{"class":275},"})\n",[20,165257,165258],{},"最大最小：",[32,165260,165262],{"className":30481,"code":165261,"language":30483,"meta":37,"style":37},"max([1, 2, 3])\nmin([1, 2, 3])\n",[24,165263,165264,165282],{"__ignoreMap":37},[41,165265,165266,165268,165270,165272,165274,165276,165278,165280],{"class":43,"line":44},[41,165267,6153],{"class":58},[41,165269,165217],{"class":275},[41,165271,26],{"class":58},[41,165273,12573],{"class":275},[41,165275,351],{"class":58},[41,165277,12573],{"class":275},[41,165279,345],{"class":58},[41,165281,4795],{"class":275},[41,165283,165284,165287,165289,165291,165293,165295,165297,165299],{"class":43,"line":51},[41,165285,165286],{"class":58},"min",[41,165288,165217],{"class":275},[41,165290,26],{"class":58},[41,165292,12573],{"class":275},[41,165294,351],{"class":58},[41,165296,12573],{"class":275},[41,165298,345],{"class":58},[41,165300,4795],{"class":275},[20,165302,165303],{},"求和：",[32,165305,165307],{"className":30481,"code":165306,"language":30483,"meta":37,"style":37},"sum([1, 2, 3])\n",[24,165308,165309],{"__ignoreMap":37},[41,165310,165311,165314,165316,165318,165320,165322,165324,165326],{"class":43,"line":44},[41,165312,165313],{"class":58},"sum",[41,165315,165217],{"class":275},[41,165317,26],{"class":58},[41,165319,12573],{"class":275},[41,165321,351],{"class":58},[41,165323,12573],{"class":275},[41,165325,345],{"class":58},[41,165327,4795],{"class":275},[20,165329,163574],{},[32,165331,165333],{"className":30481,"code":165332,"language":30483,"meta":37,"style":37},"sorted([3, 1, 2])\n",[24,165334,165335],{"__ignoreMap":37},[41,165336,165337,165340,165342,165344,165346,165348,165350,165352],{"class":43,"line":44},[41,165338,165339],{"class":58},"sorted",[41,165341,165217],{"class":275},[41,165343,345],{"class":58},[41,165345,12573],{"class":275},[41,165347,26],{"class":58},[41,165349,12573],{"class":275},[41,165351,351],{"class":58},[41,165353,4795],{"class":275},[20,165355,165356],{},"类型转换：",[32,165358,165360],{"className":30481,"code":165359,"language":30483,"meta":37,"style":37},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[24,165361,165362,165372,165390],{"__ignoreMap":37},[41,165363,165364,165366,165368,165370],{"class":43,"line":44},[41,165365,154173],{"class":58},[41,165367,276],{"class":275},[41,165369,155983],{"class":378},[41,165371,282],{"class":275},[41,165373,165374,165376,165378,165380,165382,165384,165386,165388],{"class":43,"line":51},[41,165375,155368],{"class":58},[41,165377,165217],{"class":275},[41,165379,26],{"class":58},[41,165381,12573],{"class":275},[41,165383,351],{"class":58},[41,165385,12573],{"class":275},[41,165387,345],{"class":58},[41,165389,4795],{"class":275},[41,165391,165392,165394,165396,165398,165400,165402,165404,165406,165408,165410],{"class":43,"line":62},[41,165393,155393],{"class":58},[41,165395,165217],{"class":275},[41,165397,26],{"class":58},[41,165399,12573],{"class":275},[41,165401,26],{"class":58},[41,165403,12573],{"class":275},[41,165405,351],{"class":58},[41,165407,12573],{"class":275},[41,165409,345],{"class":58},[41,165411,4795],{"class":275},[20,165413,165414],{},"成员判断：",[32,165416,165418],{"className":30481,"code":165417,"language":30483,"meta":37,"style":37},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[24,165419,165420,165437,165461],{"__ignoreMap":37},[41,165421,165422,165424,165426,165429,165432,165435],{"class":43,"line":44},[41,165423,30518],{"class":58},[41,165425,276],{"class":275},[41,165427,165428],{"class":378},"\"a\"",[41,165430,165431],{"class":271}," in",[41,165433,165434],{"class":378}," \"abc\"",[41,165436,282],{"class":275},[41,165438,165439,165441,165443,165445,165447,165449,165451,165453,165455,165457,165459],{"class":43,"line":51},[41,165440,30518],{"class":58},[41,165442,276],{"class":275},[41,165444,26],{"class":58},[41,165446,165431],{"class":271},[41,165448,52329],{"class":275},[41,165450,26],{"class":58},[41,165452,12573],{"class":275},[41,165454,351],{"class":58},[41,165456,12573],{"class":275},[41,165458,345],{"class":58},[41,165460,4795],{"class":275},[41,165462,165463,165465,165467,165469,165471,165473,165475,165477,165479],{"class":43,"line":62},[41,165464,30518],{"class":58},[41,165466,276],{"class":275},[41,165468,62782],{"class":378},[41,165470,165431],{"class":271},[41,165472,4586],{"class":275},[41,165474,62782],{"class":378},[41,165476,51540],{"class":275},[41,165478,149991],{"class":378},[41,165480,165255],{"class":275},[15,165482,165484],{"id":165483},"_614-推导式","6.14 推导式",[20,165486,165487],{},"推导式用于快速生成容器。",[20,165489,165490],{},"列表推导式：",[32,165492,165494],{"className":30481,"code":165493,"language":30483,"meta":37,"style":37},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[24,165495,165496,165523],{"__ignoreMap":37},[41,165497,165498,165500,165502,165505,165507,165509,165511,165513,165515,165517,165519,165521],{"class":43,"line":44},[41,165499,164203],{"class":275},[41,165501,321],{"class":271},[41,165503,165504],{"class":275}," [i ",[41,165506,3163],{"class":271},[41,165508,9576],{"class":275},[41,165510,26146],{"class":271},[41,165512,32546],{"class":58},[41,165514,276],{"class":275},[41,165516,26],{"class":58},[41,165518,12573],{"class":275},[41,165520,617],{"class":58},[41,165522,97403],{"class":275},[41,165524,165525,165527],{"class":43,"line":51},[41,165526,30518],{"class":58},[41,165528,164419],{"class":275},[20,165530,165531],{},"带条件：",[32,165533,165535],{"className":30481,"code":165534,"language":30483,"meta":37,"style":37},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[24,165536,165537,165578],{"__ignoreMap":37},[41,165538,165539,165542,165544,165546,165548,165550,165552,165554,165556,165558,165560,165562,165564,165566,165568,165570,165572,165574,165576],{"class":43,"line":44},[41,165540,165541],{"class":275},"even_nums ",[41,165543,321],{"class":271},[41,165545,165504],{"class":275},[41,165547,3163],{"class":271},[41,165549,9576],{"class":275},[41,165551,26146],{"class":271},[41,165553,32546],{"class":58},[41,165555,276],{"class":275},[41,165557,26],{"class":58},[41,165559,12573],{"class":275},[41,165561,610],{"class":58},[41,165563,13852],{"class":275},[41,165565,1672],{"class":271},[41,165567,9576],{"class":275},[41,165569,601],{"class":271},[41,165571,14893],{"class":58},[41,165573,101662],{"class":271},[41,165575,4231],{"class":58},[41,165577,33349],{"class":275},[41,165579,165580,165582],{"class":43,"line":51},[41,165581,30518],{"class":58},[41,165583,165584],{"class":275},"(even_nums)\n",[20,165586,165587],{},"字典推导式：",[32,165589,165591],{"className":30481,"code":165590,"language":30483,"meta":37,"style":37},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[24,165592,165593,165627],{"__ignoreMap":37},[41,165594,165595,165598,165600,165603,165605,165607,165610,165612,165614,165616,165618,165620,165622,165624],{"class":43,"line":44},[41,165596,165597],{"class":275},"squares ",[41,165599,321],{"class":271},[41,165601,165602],{"class":275}," {i: i ",[41,165604,10799],{"class":271},[41,165606,14893],{"class":58},[41,165608,165609],{"class":271}," for",[41,165611,9576],{"class":275},[41,165613,26146],{"class":271},[41,165615,32546],{"class":58},[41,165617,276],{"class":275},[41,165619,26],{"class":58},[41,165621,12573],{"class":275},[41,165623,617],{"class":58},[41,165625,165626],{"class":275},")}\n",[41,165628,165629,165631],{"class":43,"line":51},[41,165630,30518],{"class":58},[41,165632,165633],{"class":275},"(squares)\n",[20,165635,165636],{},"集合推导式：",[32,165638,165640],{"className":30481,"code":165639,"language":30483,"meta":37,"style":37},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[24,165641,165642,165663],{"__ignoreMap":37},[41,165643,165644,165647,165649,165652,165654,165656,165658,165661],{"class":43,"line":44},[41,165645,165646],{"class":275},"chars ",[41,165648,321],{"class":271},[41,165650,165651],{"class":275}," {ch ",[41,165653,3163],{"class":271},[41,165655,159795],{"class":275},[41,165657,26146],{"class":271},[41,165659,165660],{"class":378}," \"hello\"",[41,165662,1706],{"class":275},[41,165664,165665,165667],{"class":43,"line":51},[41,165666,30518],{"class":58},[41,165668,165669],{"class":275},"(chars)\n",[20,165671,165672],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[15,165674,165676],{"id":165675},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[32,165678,165680],{"className":30481,"code":165679,"language":30483,"meta":37,"style":37},"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",[24,165681,165682,165690,165710,165730,165750,165770,165774,165778,165786,165800,165809,165813,165823,165835,165839,165859,165868,165872,165888,165893,165897,165911,165915,165937,165973],{"__ignoreMap":37},[41,165683,165684,165686,165688],{"class":43,"line":44},[41,165685,159819],{"class":275},[41,165687,321],{"class":271},[41,165689,55550],{"class":275},[41,165691,165692,165694,165696,165698,165700,165702,165704,165706,165708],{"class":43,"line":51},[41,165693,148488],{"class":275},[41,165695,62782],{"class":378},[41,165697,51540],{"class":275},[41,165699,149991],{"class":378},[41,165701,12573],{"class":275},[41,165703,151575],{"class":378},[41,165705,51540],{"class":275},[41,165707,1262],{"class":58},[41,165709,5068],{"class":275},[41,165711,165712,165714,165716,165718,165720,165722,165724,165726,165728],{"class":43,"line":62},[41,165713,148488],{"class":275},[41,165715,62782],{"class":378},[41,165717,51540],{"class":275},[41,165719,151039],{"class":378},[41,165721,12573],{"class":275},[41,165723,151575],{"class":378},[41,165725,51540],{"class":275},[41,165727,1084],{"class":58},[41,165729,5068],{"class":275},[41,165731,165732,165734,165736,165738,165740,165742,165744,165746,165748],{"class":43,"line":70},[41,165733,148488],{"class":275},[41,165735,62782],{"class":378},[41,165737,51540],{"class":275},[41,165739,159834],{"class":378},[41,165741,12573],{"class":275},[41,165743,151575],{"class":378},[41,165745,51540],{"class":275},[41,165747,679],{"class":58},[41,165749,5068],{"class":275},[41,165751,165752,165754,165756,165758,165760,165762,165764,165766,165768],{"class":43,"line":76},[41,165753,148488],{"class":275},[41,165755,62782],{"class":378},[41,165757,51540],{"class":275},[41,165759,163413],{"class":378},[41,165761,12573],{"class":275},[41,165763,151575],{"class":378},[41,165765,51540],{"class":275},[41,165767,1155],{"class":58},[41,165769,5068],{"class":275},[41,165771,165772],{"class":43,"line":83},[41,165773,33349],{"class":275},[41,165775,165776],{"class":43,"line":89},[41,165777,80],{"emptyLinePlaceholder":79},[41,165779,165780,165782,165784],{"class":43,"line":96},[41,165781,157363],{"class":275},[41,165783,321],{"class":271},[41,165785,47436],{"class":58},[41,165787,165788,165791,165793,165796,165798],{"class":43,"line":104},[41,165789,165790],{"class":275},"max_student ",[41,165792,321],{"class":271},[41,165794,165795],{"class":275}," students[",[41,165797,465],{"class":58},[41,165799,33349],{"class":275},[41,165801,165802,165805,165807],{"class":43,"line":176},[41,165803,165804],{"class":275},"passed ",[41,165806,321],{"class":271},[41,165808,51941],{"class":275},[41,165810,165811],{"class":43,"line":184},[41,165812,80],{"emptyLinePlaceholder":79},[41,165814,165815,165817,165819,165821],{"class":43,"line":1757},[41,165816,3163],{"class":271},[41,165818,152240],{"class":275},[41,165820,26146],{"class":271},[41,165822,152245],{"class":275},[41,165824,165825,165827,165829,165831,165833],{"class":43,"line":1763},[41,165826,159410],{"class":275},[41,165828,9615],{"class":271},[41,165830,152252],{"class":275},[41,165832,151575],{"class":378},[41,165834,33349],{"class":275},[41,165836,165837],{"class":43,"line":1768},[41,165838,80],{"emptyLinePlaceholder":79},[41,165840,165841,165843,165845,165847,165849,165851,165854,165856],{"class":43,"line":1782},[41,165842,3239],{"class":271},[41,165844,152252],{"class":275},[41,165846,151575],{"class":378},[41,165848,4581],{"class":275},[41,165850,1233],{"class":271},[41,165852,165853],{"class":275}," max_student[",[41,165855,151575],{"class":378},[41,165857,165858],{"class":275},"]:\n",[41,165860,165861,165864,165866],{"class":43,"line":1787},[41,165862,165863],{"class":275},"        max_student ",[41,165865,321],{"class":271},[41,165867,152268],{"class":275},[41,165869,165870],{"class":43,"line":1793},[41,165871,80],{"emptyLinePlaceholder":79},[41,165873,165874,165876,165878,165880,165882,165884,165886],{"class":43,"line":1814},[41,165875,3239],{"class":271},[41,165877,152252],{"class":275},[41,165879,151575],{"class":378},[41,165881,4581],{"class":275},[41,165883,1850],{"class":271},[41,165885,157940],{"class":58},[41,165887,3877],{"class":275},[41,165889,165890],{"class":43,"line":1819},[41,165891,165892],{"class":275},"        passed.append(student)\n",[41,165894,165895],{"class":43,"line":1833},[41,165896,80],{"emptyLinePlaceholder":79},[41,165898,165899,165901,165903,165905,165907,165909],{"class":43,"line":1838},[41,165900,163877],{"class":275},[41,165902,321],{"class":271},[41,165904,163882],{"class":275},[41,165906,857],{"class":271},[41,165908,7469],{"class":58},[41,165910,165098],{"class":275},[41,165912,165913],{"class":43,"line":1867},[41,165914,80],{"emptyLinePlaceholder":79},[41,165916,165917,165919,165921,165923,165925,165927,165929,165931,165933,165935],{"class":43,"line":1872},[41,165918,30518],{"class":58},[41,165920,276],{"class":275},[41,165922,327],{"class":271},[41,165924,163900],{"class":378},[41,165926,1169],{"class":58},[41,165928,163905],{"class":275},[41,165930,157262],{"class":271},[41,165932,1219],{"class":58},[41,165934,524],{"class":378},[41,165936,282],{"class":275},[41,165938,165939,165941,165943,165945,165948,165950,165953,165955,165957,165959,165961,165963,165965,165967,165969,165971],{"class":43,"line":1889},[41,165940,30518],{"class":58},[41,165942,276],{"class":275},[41,165944,327],{"class":271},[41,165946,165947],{"class":378},"\"最高分学生:",[41,165949,1169],{"class":58},[41,165951,165952],{"class":275},"max_student[",[41,165954,152985],{"class":378},[41,165956,1213],{"class":275},[41,165958,1219],{"class":58},[41,165960,4586],{"class":58},[41,165962,165952],{"class":275},[41,165964,153023],{"class":378},[41,165966,1213],{"class":275},[41,165968,1219],{"class":58},[41,165970,524],{"class":378},[41,165972,282],{"class":275},[41,165974,165975,165977,165979,165981,165984,165987,165990,165992,165994],{"class":43,"line":1894},[41,165976,30518],{"class":58},[41,165978,276],{"class":275},[41,165980,327],{"class":271},[41,165982,165983],{"class":378},"\"及格人数:",[41,165985,165986],{"class":58},"{len",[41,165988,165989],{"class":275},"(passed)",[41,165991,1219],{"class":58},[41,165993,524],{"class":378},[41,165995,282],{"class":275},[15,165997,165999],{"id":165998},"_616-易错点","6.16 易错点",[224,166001,166002,166005,166008,166011,166017,166026],{},[227,166003,166004],{},"列表可变，元组和字符串不可变。",[227,166006,166007],{},"切片结束位置不包含。",[227,166009,166010],{},"字典通过 key 取值，不是通过索引。",[227,166012,166013,166014,28488],{},"空集合要用 ",[24,166015,166016],{},"set()",[227,166018,104469,166019,166022,166023,28488],{},[24,166020,166021],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[24,166024,166025],{},"get()",[227,166027,166028],{},"嵌套容器要先看清楚每一层是什么类型。",[15,166030,166032],{"id":166031},"_617-本章练习","6.17 本章练习",[224,166034,166035,166038,166041,166044,166047],{},[227,166036,166037],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[227,166039,166040],{},"输入一句话，统计每个字符出现次数。",[227,166042,166043],{},"使用集合去除列表中的重复元素。",[227,166045,166046],{},"使用字典保存一个学生的信息，并实现修改成绩。",[227,166048,166049],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[189,166051,166052],{},"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":37,"searchDepth":51,"depth":51,"links":166054},[166055,166056,166057,166058,166059,166060,166061,166062,166063,166064,166065,166066,166067,166068,166069,166070,166071],{"id":163035,"depth":51,"text":163036},{"id":163152,"depth":51,"text":163153},{"id":163242,"depth":51,"text":163243},{"id":163366,"depth":51,"text":163367},{"id":163729,"depth":51,"text":163730},{"id":163916,"depth":51,"text":163917},{"id":164035,"depth":51,"text":164036},{"id":164177,"depth":51,"text":164178},{"id":164364,"depth":51,"text":164365},{"id":164608,"depth":51,"text":164609},{"id":164818,"depth":51,"text":164819},{"id":164903,"depth":51,"text":164904},{"id":165201,"depth":51,"text":165202},{"id":165483,"depth":51,"text":165484},{"id":165675,"depth":51,"text":165676},{"id":165998,"depth":51,"text":165999},{"id":166031,"depth":51,"text":166032},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163027,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166078,"title":166079,"body":166080,"description":196,"extension":197,"meta":168252,"navigation":79,"path":168253,"seo":168254,"stem":168255,"__hash__":168256},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166081,"toc":168227},[166082,166085,166089,166092,166172,166175,166196,166199,166203,166206,166268,166271,166288,166292,166295,166340,166342,166350,166354,166357,166439,166442,166445,166470,166473,166496,166500,166503,166505,166567,166570,166572,166623,166627,166631,166637,166742,166746,166752,166823,166827,166830,166898,166901,166981,166985,166991,167027,167030,167033,167143,167149,167153,167156,167228,167231,167235,167239,167244,167306,167310,167315,167383,167387,167392,167508,167512,167515,167595,167598,167602,167605,167709,167711,167726,167729,167733,167871,167879,167883,167885,167896,167898,168156,168160,168192,168196,168224],[10,166083,166079],{"id":166084},"_7-函数进阶",[15,166086,166088],{"id":166087},"_71-多返回值","7.1 多返回值",[20,166090,166091],{},"Python 函数可以返回多个值，本质上返回的是元组。",[32,166093,166095],{"className":30481,"code":166094,"language":30483,"meta":37,"style":37},"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",[24,166096,166097,166106,166114,166122,166131,166138,166142,166146,166155,166161],{"__ignoreMap":37},[41,166098,166099,166101,166104],{"class":43,"line":44},[41,166100,32050],{"class":271},[41,166102,166103],{"class":54}," get_info",[41,166105,32056],{"class":275},[41,166107,166108,166110,166112],{"class":43,"line":51},[41,166109,152473],{"class":275},[41,166111,321],{"class":271},[41,166113,149456],{"class":378},[41,166115,166116,166118,166120],{"class":43,"line":62},[41,166117,152489],{"class":275},[41,166119,321],{"class":271},[41,166121,146654],{"class":58},[41,166123,166124,166126,166128],{"class":43,"line":70},[41,166125,152504],{"class":275},[41,166127,321],{"class":271},[41,166129,166130],{"class":58}," 95\n",[41,166132,166133,166135],{"class":43,"line":76},[41,166134,4228],{"class":271},[41,166136,166137],{"class":275}," name, age, score\n",[41,166139,166140],{"class":43,"line":83},[41,166141,80],{"emptyLinePlaceholder":79},[41,166143,166144],{"class":43,"line":89},[41,166145,80],{"emptyLinePlaceholder":79},[41,166147,166148,166150,166152],{"class":43,"line":96},[41,166149,161409],{"class":275},[41,166151,321],{"class":271},[41,166153,166154],{"class":275}," get_info()\n",[41,166156,166157,166159],{"class":43,"line":104},[41,166158,30518],{"class":58},[41,166160,76688],{"class":275},[41,166162,166163,166165,166167,166169],{"class":43,"line":176},[41,166164,30518],{"class":58},[41,166166,276],{"class":275},[41,166168,103210],{"class":58},[41,166170,166171],{"class":275},"(result))\n",[20,166173,166174],{},"可以直接解包：",[32,166176,166178],{"className":30481,"code":166177,"language":30483,"meta":37,"style":37},"name, age, score = get_info()\nprint(name, age, score)\n",[24,166179,166180,166189],{"__ignoreMap":37},[41,166181,166182,166185,166187],{"class":43,"line":44},[41,166183,166184],{"class":275},"name, age, score ",[41,166186,321],{"class":271},[41,166188,166154],{"class":275},[41,166190,166191,166193],{"class":43,"line":51},[41,166192,30518],{"class":58},[41,166194,166195],{"class":275},"(name, age, score)\n",[20,166197,166198],{},"返回多个值适合函数需要同时给出多个结果时使用。",[15,166200,166202],{"id":166201},"_72-位置参数","7.2 位置参数",[20,166204,166205],{},"位置参数按顺序传递。",[32,166207,166209],{"className":30481,"code":166208,"language":30483,"meta":37,"style":37},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[24,166210,166211,166219,166247,166251,166255],{"__ignoreMap":37},[41,166212,166213,166215,166217],{"class":43,"line":44},[41,166214,32050],{"class":271},[41,166216,149475],{"class":54},[41,166218,149478],{"class":275},[41,166220,166221,166223,166225,166227,166229,166231,166233,166235,166237,166239,166241,166243,166245],{"class":43,"line":51},[41,166222,31402],{"class":58},[41,166224,276],{"class":275},[41,166226,327],{"class":271},[41,166228,149489],{"class":378},[41,166230,1169],{"class":58},[41,166232,79913],{"class":275},[41,166234,1219],{"class":58},[41,166236,149498],{"class":378},[41,166238,1169],{"class":58},[41,166240,70324],{"class":275},[41,166242,1219],{"class":58},[41,166244,149507],{"class":378},[41,166246,282],{"class":275},[41,166248,166249],{"class":43,"line":62},[41,166250,80],{"emptyLinePlaceholder":79},[41,166252,166253],{"class":43,"line":70},[41,166254,80],{"emptyLinePlaceholder":79},[41,166256,166257,166260,166262,166264,166266],{"class":43,"line":76},[41,166258,166259],{"class":275},"introduce(",[41,166261,149991],{"class":378},[41,166263,12573],{"class":275},[41,166265,923],{"class":58},[41,166267,282],{"class":275},[20,166269,166270],{},"顺序错了就会得到错误含义：",[32,166272,166274],{"className":30481,"code":166273,"language":30483,"meta":37,"style":37},"introduce(18, \"小明\")\n",[24,166275,166276],{"__ignoreMap":37},[41,166277,166278,166280,166282,166284,166286],{"class":43,"line":44},[41,166279,166259],{"class":275},[41,166281,923],{"class":58},[41,166283,12573],{"class":275},[41,166285,149991],{"class":378},[41,166287,282],{"class":275},[15,166289,166291],{"id":166290},"_73-关键字参数","7.3 关键字参数",[20,166293,166294],{},"关键字参数按参数名传递。",[32,166296,166298],{"className":30481,"code":166297,"language":30483,"meta":37,"style":37},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[24,166299,166300,166320],{"__ignoreMap":37},[41,166301,166302,166304,166306,166308,166310,166312,166314,166316,166318],{"class":43,"line":44},[41,166303,166259],{"class":275},[41,166305,79913],{"class":5354},[41,166307,321],{"class":271},[41,166309,149991],{"class":378},[41,166311,12573],{"class":275},[41,166313,70324],{"class":5354},[41,166315,321],{"class":271},[41,166317,923],{"class":58},[41,166319,282],{"class":275},[41,166321,166322,166324,166326,166328,166330,166332,166334,166336,166338],{"class":43,"line":51},[41,166323,166259],{"class":275},[41,166325,70324],{"class":5354},[41,166327,321],{"class":271},[41,166329,923],{"class":58},[41,166331,12573],{"class":275},[41,166333,79913],{"class":5354},[41,166335,321],{"class":271},[41,166337,149991],{"class":378},[41,166339,282],{"class":275},[20,166341,118037],{},[224,166343,166344,166347],{},[227,166345,166346],{},"顺序不容易错。",[227,166348,166349],{},"调用时可读性更强。",[15,166351,166353],{"id":166352},"_74-默认参数","7.4 默认参数",[20,166355,166356],{},"默认参数给参数设置默认值。",[32,166358,166360],{"className":30481,"code":166359,"language":30483,"meta":37,"style":37},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[24,166361,166362,166378,166408,166412,166416,166426],{"__ignoreMap":37},[41,166363,166364,166366,166368,166371,166373,166376],{"class":43,"line":44},[41,166365,32050],{"class":271},[41,166367,122196],{"class":54},[41,166369,166370],{"class":275},"(host, port",[41,166372,321],{"class":271},[41,166374,166375],{"class":58},"3306",[41,166377,30889],{"class":275},[41,166379,166380,166382,166384,166386,166389,166391,166393,166395,166397,166399,166402,166404,166406],{"class":43,"line":51},[41,166381,31402],{"class":58},[41,166383,276],{"class":275},[41,166385,327],{"class":271},[41,166387,166388],{"class":378},"\"连接",[41,166390,1169],{"class":58},[41,166392,27498],{"class":275},[41,166394,1219],{"class":58},[41,166396,1132],{"class":378},[41,166398,1169],{"class":58},[41,166400,166401],{"class":275},"port",[41,166403,1219],{"class":58},[41,166405,524],{"class":378},[41,166407,282],{"class":275},[41,166409,166410],{"class":43,"line":62},[41,166411,80],{"emptyLinePlaceholder":79},[41,166413,166414],{"class":43,"line":70},[41,166415,80],{"emptyLinePlaceholder":79},[41,166417,166418,166421,166424],{"class":43,"line":76},[41,166419,166420],{"class":275},"connect(",[41,166422,166423],{"class":378},"\"localhost\"",[41,166425,282],{"class":275},[41,166427,166428,166430,166432,166434,166437],{"class":43,"line":83},[41,166429,166420],{"class":275},[41,166431,166423],{"class":378},[41,166433,12573],{"class":275},[41,166435,166436],{"class":58},"6379",[41,166438,282],{"class":275},[20,166440,166441],{},"注意：默认参数必须放在非默认参数后面。",[20,166443,166444],{},"错误：",[32,166446,166448],{"className":30481,"code":166447,"language":30483,"meta":37,"style":37},"def connect(port=3306, host):\n    pass\n",[24,166449,166450,166466],{"__ignoreMap":37},[41,166451,166452,166454,166456,166459,166461,166463],{"class":43,"line":44},[41,166453,32050],{"class":271},[41,166455,122196],{"class":54},[41,166457,166458],{"class":275},"(port",[41,166460,321],{"class":271},[41,166462,166375],{"class":58},[41,166464,166465],{"class":275},", host):\n",[41,166467,166468],{"class":43,"line":51},[41,166469,149640],{"class":271},[20,166471,166472],{},"正确：",[32,166474,166476],{"className":30481,"code":166475,"language":30483,"meta":37,"style":37},"def connect(host, port=3306):\n    pass\n",[24,166477,166478,166492],{"__ignoreMap":37},[41,166479,166480,166482,166484,166486,166488,166490],{"class":43,"line":44},[41,166481,32050],{"class":271},[41,166483,122196],{"class":54},[41,166485,166370],{"class":275},[41,166487,321],{"class":271},[41,166489,166375],{"class":58},[41,166491,30889],{"class":275},[41,166493,166494],{"class":43,"line":51},[41,166495,149640],{"class":271},[15,166497,166499],{"id":166498},"_75-默认参数的坑","7.5 默认参数的坑",[20,166501,166502],{},"不要使用可变对象作为默认参数。",[20,166504,157726],{},[32,166506,166508],{"className":30481,"code":166507,"language":30483,"meta":37,"style":37},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[24,166509,166510,166525,166530,166537,166541,166545,166556],{"__ignoreMap":37},[41,166511,166512,166514,166517,166520,166522],{"class":43,"line":44},[41,166513,32050],{"class":271},[41,166515,166516],{"class":54}," add_item",[41,166518,166519],{"class":275},"(item, items",[41,166521,321],{"class":271},[41,166523,166524],{"class":275},"[]):\n",[41,166526,166527],{"class":43,"line":51},[41,166528,166529],{"class":275},"    items.append(item)\n",[41,166531,166532,166534],{"class":43,"line":62},[41,166533,4228],{"class":271},[41,166535,166536],{"class":275}," items\n",[41,166538,166539],{"class":43,"line":70},[41,166540,80],{"emptyLinePlaceholder":79},[41,166542,166543],{"class":43,"line":76},[41,166544,80],{"emptyLinePlaceholder":79},[41,166546,166547,166549,166552,166554],{"class":43,"line":83},[41,166548,30518],{"class":58},[41,166550,166551],{"class":275},"(add_item(",[41,166553,165428],{"class":378},[41,166555,30600],{"class":275},[41,166557,166558,166560,166562,166565],{"class":43,"line":89},[41,166559,30518],{"class":58},[41,166561,166551],{"class":275},[41,166563,166564],{"class":378},"\"b\"",[41,166566,30600],{"class":275},[20,166568,166569],{},"第二次调用会复用第一次的列表。",[20,166571,155991],{},[32,166573,166575],{"className":30481,"code":166574,"language":30483,"meta":37,"style":37},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[24,166576,166577,166591,166604,166613,166617],{"__ignoreMap":37},[41,166578,166579,166581,166583,166585,166587,166589],{"class":43,"line":44},[41,166580,32050],{"class":271},[41,166582,166516],{"class":54},[41,166584,166519],{"class":275},[41,166586,321],{"class":271},[41,166588,95789],{"class":58},[41,166590,30889],{"class":275},[41,166592,166593,166595,166598,166600,166602],{"class":43,"line":51},[41,166594,3239],{"class":271},[41,166596,166597],{"class":275}," items ",[41,166599,39030],{"class":271},[41,166601,39036],{"class":58},[41,166603,3877],{"class":275},[41,166605,166606,166609,166611],{"class":43,"line":62},[41,166607,166608],{"class":275},"        items ",[41,166610,321],{"class":271},[41,166612,51941],{"class":275},[41,166614,166615],{"class":43,"line":70},[41,166616,166529],{"class":275},[41,166618,166619,166621],{"class":43,"line":76},[41,166620,4228],{"class":271},[41,166622,166536],{"class":275},[15,166624,166626],{"id":166625},"_76-不定长参数","7.6 不定长参数",[241,166628,166630],{"id":166629},"_761-args","7.6.1 *args",[20,166632,166633,166636],{},[24,166634,166635],{},"*args"," 接收任意数量的位置参数，得到元组。",[32,166638,166640],{"className":30481,"code":166639,"language":30483,"meta":37,"style":37},"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",[24,166641,166642,166655,166663,166674,166683,166689,166693,166697,166716],{"__ignoreMap":37},[41,166643,166644,166646,166648,166650,166652],{"class":43,"line":44},[41,166645,32050],{"class":271},[41,166647,5347],{"class":54},[41,166649,276],{"class":275},[41,166651,728],{"class":271},[41,166653,166654],{"class":275},"args):\n",[41,166656,166657,166659,166661],{"class":43,"line":51},[41,166658,159410],{"class":275},[41,166660,321],{"class":271},[41,166662,47436],{"class":58},[41,166664,166665,166667,166669,166671],{"class":43,"line":62},[41,166666,3339],{"class":271},[41,166668,156283],{"class":275},[41,166670,26146],{"class":271},[41,166672,166673],{"class":275}," args:\n",[41,166675,166676,166678,166680],{"class":43,"line":70},[41,166677,160085],{"class":275},[41,166679,9615],{"class":271},[41,166681,166682],{"class":275}," num\n",[41,166684,166685,166687],{"class":43,"line":76},[41,166686,4228],{"class":271},[41,166688,162390],{"class":275},[41,166690,166691],{"class":43,"line":83},[41,166692,80],{"emptyLinePlaceholder":79},[41,166694,166695],{"class":43,"line":89},[41,166696,80],{"emptyLinePlaceholder":79},[41,166698,166699,166701,166704,166706,166708,166710,166712,166714],{"class":43,"line":96},[41,166700,30518],{"class":58},[41,166702,166703],{"class":275},"(add(",[41,166705,26],{"class":58},[41,166707,12573],{"class":275},[41,166709,351],{"class":58},[41,166711,12573],{"class":275},[41,166713,345],{"class":58},[41,166715,30600],{"class":275},[41,166717,166718,166720,166722,166724,166726,166728,166730,166732,166734,166736,166738,166740],{"class":43,"line":104},[41,166719,30518],{"class":58},[41,166721,166703],{"class":275},[41,166723,26],{"class":58},[41,166725,12573],{"class":275},[41,166727,351],{"class":58},[41,166729,12573],{"class":275},[41,166731,345],{"class":58},[41,166733,12573],{"class":275},[41,166735,566],{"class":58},[41,166737,12573],{"class":275},[41,166739,592],{"class":58},[41,166741,30600],{"class":275},[241,166743,166745],{"id":166744},"_762-kwargs","7.6.2 **kwargs",[20,166747,166748,166751],{},[24,166749,166750],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[32,166753,166755],{"className":30481,"code":166754,"language":30483,"meta":37,"style":37},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[24,166756,166757,166770,166781,166787,166791,166795],{"__ignoreMap":37},[41,166758,166759,166761,166763,166765,166767],{"class":43,"line":44},[41,166760,32050],{"class":271},[41,166762,162048],{"class":54},[41,166764,276],{"class":275},[41,166766,10799],{"class":271},[41,166768,166769],{"class":275},"kwargs):\n",[41,166771,166772,166774,166776,166778],{"class":43,"line":51},[41,166773,3339],{"class":271},[41,166775,164888],{"class":275},[41,166777,26146],{"class":271},[41,166779,166780],{"class":275}," kwargs.items():\n",[41,166782,166783,166785],{"class":43,"line":62},[41,166784,32554],{"class":58},[41,166786,164900],{"class":275},[41,166788,166789],{"class":43,"line":70},[41,166790,80],{"emptyLinePlaceholder":79},[41,166792,166793],{"class":43,"line":76},[41,166794,80],{"emptyLinePlaceholder":79},[41,166796,166797,166799,166801,166803,166805,166807,166809,166811,166813,166815,166817,166819,166821],{"class":43,"line":83},[41,166798,162113],{"class":275},[41,166800,79913],{"class":5354},[41,166802,321],{"class":271},[41,166804,149991],{"class":378},[41,166806,12573],{"class":275},[41,166808,70324],{"class":5354},[41,166810,321],{"class":271},[41,166812,923],{"class":58},[41,166814,12573],{"class":275},[41,166816,70375],{"class":5354},[41,166818,321],{"class":271},[41,166820,69372],{"class":378},[41,166822,282],{"class":275},[15,166824,166826],{"id":166825},"_77-参数解包","7.7 参数解包",[20,166828,166829],{},"列表或元组解包为位置参数：",[32,166831,166833],{"className":30481,"code":166832,"language":30483,"meta":37,"style":37},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[24,166834,166835,166844,166859,166863,166867,166887],{"__ignoreMap":37},[41,166836,166837,166839,166841],{"class":43,"line":44},[41,166838,32050],{"class":271},[41,166840,5347],{"class":54},[41,166842,166843],{"class":275},"(a, b, c):\n",[41,166845,166846,166848,166850,166852,166854,166856],{"class":43,"line":51},[41,166847,4228],{"class":271},[41,166849,11007],{"class":275},[41,166851,754],{"class":271},[41,166853,11020],{"class":275},[41,166855,754],{"class":271},[41,166857,166858],{"class":275}," c\n",[41,166860,166861],{"class":43,"line":62},[41,166862,80],{"emptyLinePlaceholder":79},[41,166864,166865],{"class":43,"line":70},[41,166866,80],{"emptyLinePlaceholder":79},[41,166868,166869,166871,166873,166875,166877,166879,166881,166883,166885],{"class":43,"line":76},[41,166870,164203],{"class":275},[41,166872,321],{"class":271},[41,166874,52329],{"class":275},[41,166876,26],{"class":58},[41,166878,12573],{"class":275},[41,166880,351],{"class":58},[41,166882,12573],{"class":275},[41,166884,345],{"class":58},[41,166886,33349],{"class":275},[41,166888,166889,166891,166893,166895],{"class":43,"line":83},[41,166890,30518],{"class":58},[41,166892,166703],{"class":275},[41,166894,728],{"class":271},[41,166896,166897],{"class":275},"nums))\n",[20,166899,166900],{},"字典解包为关键字参数：",[32,166902,166904],{"className":30481,"code":166903,"language":30483,"meta":37,"style":37},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[24,166905,166906,166914,166940,166944,166948,166972],{"__ignoreMap":37},[41,166907,166908,166910,166912],{"class":43,"line":44},[41,166909,32050],{"class":271},[41,166911,149475],{"class":54},[41,166913,149478],{"class":275},[41,166915,166916,166918,166920,166922,166924,166926,166928,166930,166932,166934,166936,166938],{"class":43,"line":51},[41,166917,31402],{"class":58},[41,166919,276],{"class":275},[41,166921,327],{"class":271},[41,166923,524],{"class":378},[41,166925,1169],{"class":58},[41,166927,79913],{"class":275},[41,166929,1219],{"class":58},[41,166931,4586],{"class":58},[41,166933,70324],{"class":275},[41,166935,1219],{"class":58},[41,166937,524],{"class":378},[41,166939,282],{"class":275},[41,166941,166942],{"class":43,"line":62},[41,166943,80],{"emptyLinePlaceholder":79},[41,166945,166946],{"class":43,"line":70},[41,166947,80],{"emptyLinePlaceholder":79},[41,166949,166950,166952,166954,166956,166958,166960,166962,166964,166966,166968,166970],{"class":43,"line":76},[41,166951,116417],{"class":275},[41,166953,321],{"class":271},[41,166955,4586],{"class":275},[41,166957,62782],{"class":378},[41,166959,51540],{"class":275},[41,166961,149991],{"class":378},[41,166963,12573],{"class":275},[41,166965,69227],{"class":378},[41,166967,51540],{"class":275},[41,166969,923],{"class":58},[41,166971,1706],{"class":275},[41,166973,166974,166976,166978],{"class":43,"line":83},[41,166975,166259],{"class":275},[41,166977,10799],{"class":271},[41,166979,166980],{"class":275},"info)\n",[15,166982,166984],{"id":166983},"_78-匿名函数lambda","7.8 匿名函数lambda",[20,166986,166987,166990],{},[24,166988,166989],{},"lambda"," 用于定义简单匿名函数。",[32,166992,166994],{"className":30481,"code":166993,"language":30483,"meta":37,"style":37},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[24,166995,166996,167013],{"__ignoreMap":37},[41,166997,166998,167001,167003,167006,167009,167011],{"class":43,"line":44},[41,166999,167000],{"class":275},"add ",[41,167002,321],{"class":271},[41,167004,167005],{"class":271}," lambda",[41,167007,167008],{"class":275}," a, b: a ",[41,167010,754],{"class":271},[41,167012,151207],{"class":275},[41,167014,167015,167017,167019,167021,167023,167025],{"class":43,"line":51},[41,167016,30518],{"class":58},[41,167018,166703],{"class":275},[41,167020,26],{"class":58},[41,167022,12573],{"class":275},[41,167024,351],{"class":58},[41,167026,30600],{"class":275},[20,167028,167029],{},"常和排序、过滤等函数一起使用。",[20,167031,167032],{},"按分数排序：",[32,167034,167036],{"className":30481,"code":167035,"language":30483,"meta":37,"style":37},"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",[24,167037,167038,167046,167066,167086,167106,167110,167114,167137],{"__ignoreMap":37},[41,167039,167040,167042,167044],{"class":43,"line":44},[41,167041,159819],{"class":275},[41,167043,321],{"class":271},[41,167045,55550],{"class":275},[41,167047,167048,167050,167052,167054,167056,167058,167060,167062,167064],{"class":43,"line":51},[41,167049,148488],{"class":275},[41,167051,62782],{"class":378},[41,167053,51540],{"class":275},[41,167055,149991],{"class":378},[41,167057,12573],{"class":275},[41,167059,151575],{"class":378},[41,167061,51540],{"class":275},[41,167063,1262],{"class":58},[41,167065,5068],{"class":275},[41,167067,167068,167070,167072,167074,167076,167078,167080,167082,167084],{"class":43,"line":62},[41,167069,148488],{"class":275},[41,167071,62782],{"class":378},[41,167073,51540],{"class":275},[41,167075,151039],{"class":378},[41,167077,12573],{"class":275},[41,167079,151575],{"class":378},[41,167081,51540],{"class":275},[41,167083,1084],{"class":58},[41,167085,5068],{"class":275},[41,167087,167088,167090,167092,167094,167096,167098,167100,167102,167104],{"class":43,"line":70},[41,167089,148488],{"class":275},[41,167091,62782],{"class":378},[41,167093,51540],{"class":275},[41,167095,159834],{"class":378},[41,167097,12573],{"class":275},[41,167099,151575],{"class":378},[41,167101,51540],{"class":275},[41,167103,679],{"class":58},[41,167105,5068],{"class":275},[41,167107,167108],{"class":43,"line":76},[41,167109,33349],{"class":275},[41,167111,167112],{"class":43,"line":83},[41,167113,80],{"emptyLinePlaceholder":79},[41,167115,167116,167119,167121,167123,167125,167127,167129,167131,167133,167135],{"class":43,"line":89},[41,167117,167118],{"class":275},"students.sort(",[41,167120,154049],{"class":5354},[41,167122,154052],{"class":271},[41,167124,154055],{"class":275},[41,167126,151575],{"class":378},[41,167128,112305],{"class":275},[41,167130,163631],{"class":5354},[41,167132,321],{"class":271},[41,167134,31579],{"class":58},[41,167136,282],{"class":275},[41,167138,167139,167141],{"class":43,"line":96},[41,167140,30518],{"class":58},[41,167142,165098],{"class":275},[20,167144,167145,167146,167148],{},"如果逻辑复杂，不要硬写 ",[24,167147,166989],{},"，定义普通函数更清晰。",[15,167150,167152],{"id":167151},"_79-函数作为参数","7.9 函数作为参数",[20,167154,167155],{},"函数可以作为参数传给另一个函数。",[32,167157,167159],{"className":30481,"code":167158,"language":30483,"meta":37,"style":37},"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",[24,167160,167161,167169,167179,167183,167187,167197,167204,167208,167212],{"__ignoreMap":37},[41,167162,167163,167165,167167],{"class":43,"line":44},[41,167164,32050],{"class":271},[41,167166,5347],{"class":54},[41,167168,151196],{"class":275},[41,167170,167171,167173,167175,167177],{"class":43,"line":51},[41,167172,4228],{"class":271},[41,167174,11007],{"class":275},[41,167176,754],{"class":271},[41,167178,151207],{"class":275},[41,167180,167181],{"class":43,"line":62},[41,167182,80],{"emptyLinePlaceholder":79},[41,167184,167185],{"class":43,"line":70},[41,167186,80],{"emptyLinePlaceholder":79},[41,167188,167189,167191,167194],{"class":43,"line":76},[41,167190,32050],{"class":271},[41,167192,167193],{"class":54}," calculate",[41,167195,167196],{"class":275},"(a, b, func):\n",[41,167198,167199,167201],{"class":43,"line":83},[41,167200,4228],{"class":271},[41,167202,167203],{"class":275}," func(a, b)\n",[41,167205,167206],{"class":43,"line":89},[41,167207,80],{"emptyLinePlaceholder":79},[41,167209,167210],{"class":43,"line":96},[41,167211,80],{"emptyLinePlaceholder":79},[41,167213,167214,167216,167219,167221,167223,167225],{"class":43,"line":104},[41,167215,30518],{"class":58},[41,167217,167218],{"class":275},"(calculate(",[41,167220,719],{"class":58},[41,167222,12573],{"class":275},[41,167224,973],{"class":58},[41,167226,167227],{"class":275},", add))\n",[20,167229,167230],{},"这种思想在排序、回调、框架中经常出现。",[15,167232,167234],{"id":167233},"_710-mapfiltersorted","7.10 map、filter、sorted",[241,167236,167238],{"id":167237},"_7101-map","7.10.1 map",[20,167240,167241,167243],{},[24,167242,74147],{}," 对每个元素执行函数。",[32,167245,167247],{"className":30481,"code":167246,"language":30483,"meta":37,"style":37},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[24,167248,167249,167273,167296],{"__ignoreMap":37},[41,167250,167251,167253,167255,167257,167259,167261,167263,167265,167267,167269,167271],{"class":43,"line":44},[41,167252,164203],{"class":275},[41,167254,321],{"class":271},[41,167256,52329],{"class":275},[41,167258,26],{"class":58},[41,167260,12573],{"class":275},[41,167262,351],{"class":58},[41,167264,12573],{"class":275},[41,167266,345],{"class":58},[41,167268,12573],{"class":275},[41,167270,566],{"class":58},[41,167272,33349],{"class":275},[41,167274,167275,167277,167279,167282,167284,167286,167289,167291,167293],{"class":43,"line":51},[41,167276,161409],{"class":275},[41,167278,321],{"class":271},[41,167280,167281],{"class":58}," map",[41,167283,276],{"class":275},[41,167285,166989],{"class":271},[41,167287,167288],{"class":275}," x: x ",[41,167290,728],{"class":271},[41,167292,14893],{"class":58},[41,167294,167295],{"class":275},", nums)\n",[41,167297,167298,167300,167302,167304],{"class":43,"line":62},[41,167299,30518],{"class":58},[41,167301,276],{"class":275},[41,167303,154173],{"class":58},[41,167305,166171],{"class":275},[241,167307,167309],{"id":167308},"_7102-filter","7.10.2 filter",[20,167311,167312,167314],{},[24,167313,80154],{}," 保留满足条件的元素。",[32,167316,167318],{"className":30481,"code":167317,"language":30483,"meta":37,"style":37},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[24,167319,167320,167348,167373],{"__ignoreMap":37},[41,167321,167322,167324,167326,167328,167330,167332,167334,167336,167338,167340,167342,167344,167346],{"class":43,"line":44},[41,167323,164203],{"class":275},[41,167325,321],{"class":271},[41,167327,52329],{"class":275},[41,167329,26],{"class":58},[41,167331,12573],{"class":275},[41,167333,351],{"class":58},[41,167335,12573],{"class":275},[41,167337,345],{"class":58},[41,167339,12573],{"class":275},[41,167341,566],{"class":58},[41,167343,12573],{"class":275},[41,167345,592],{"class":58},[41,167347,33349],{"class":275},[41,167349,167350,167352,167354,167357,167359,167361,167363,167365,167367,167369,167371],{"class":43,"line":51},[41,167351,161409],{"class":275},[41,167353,321],{"class":271},[41,167355,167356],{"class":58}," filter",[41,167358,276],{"class":275},[41,167360,166989],{"class":271},[41,167362,167288],{"class":275},[41,167364,601],{"class":271},[41,167366,14893],{"class":58},[41,167368,101662],{"class":271},[41,167370,4231],{"class":58},[41,167372,167295],{"class":275},[41,167374,167375,167377,167379,167381],{"class":43,"line":62},[41,167376,30518],{"class":58},[41,167378,276],{"class":275},[41,167380,154173],{"class":58},[41,167382,166171],{"class":275},[241,167384,167386],{"id":167385},"_7103-sorted","7.10.3 sorted",[20,167388,167389,167391],{},[24,167390,165339],{}," 返回排序后的新列表。",[32,167393,167395],{"className":30481,"code":167394,"language":30483,"meta":37,"style":37},"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",[24,167396,167397,167405,167425,167445,167465,167469,167473,167502],{"__ignoreMap":37},[41,167398,167399,167401,167403],{"class":43,"line":44},[41,167400,159819],{"class":275},[41,167402,321],{"class":271},[41,167404,55550],{"class":275},[41,167406,167407,167409,167411,167413,167415,167417,167419,167421,167423],{"class":43,"line":51},[41,167408,148488],{"class":275},[41,167410,62782],{"class":378},[41,167412,51540],{"class":275},[41,167414,149991],{"class":378},[41,167416,12573],{"class":275},[41,167418,151575],{"class":378},[41,167420,51540],{"class":275},[41,167422,1262],{"class":58},[41,167424,5068],{"class":275},[41,167426,167427,167429,167431,167433,167435,167437,167439,167441,167443],{"class":43,"line":62},[41,167428,148488],{"class":275},[41,167430,62782],{"class":378},[41,167432,51540],{"class":275},[41,167434,151039],{"class":378},[41,167436,12573],{"class":275},[41,167438,151575],{"class":378},[41,167440,51540],{"class":275},[41,167442,1084],{"class":58},[41,167444,5068],{"class":275},[41,167446,167447,167449,167451,167453,167455,167457,167459,167461,167463],{"class":43,"line":70},[41,167448,148488],{"class":275},[41,167450,62782],{"class":378},[41,167452,51540],{"class":275},[41,167454,159834],{"class":378},[41,167456,12573],{"class":275},[41,167458,151575],{"class":378},[41,167460,51540],{"class":275},[41,167462,679],{"class":58},[41,167464,5068],{"class":275},[41,167466,167467],{"class":43,"line":76},[41,167468,33349],{"class":275},[41,167470,167471],{"class":43,"line":83},[41,167472,80],{"emptyLinePlaceholder":79},[41,167474,167475,167477,167479,167481,167484,167486,167488,167490,167492,167494,167496,167498,167500],{"class":43,"line":89},[41,167476,161409],{"class":275},[41,167478,321],{"class":271},[41,167480,163707],{"class":58},[41,167482,167483],{"class":275},"(students, ",[41,167485,154049],{"class":5354},[41,167487,154052],{"class":271},[41,167489,154055],{"class":275},[41,167491,151575],{"class":378},[41,167493,112305],{"class":275},[41,167495,163631],{"class":5354},[41,167497,321],{"class":271},[41,167499,31579],{"class":58},[41,167501,282],{"class":275},[41,167503,167504,167506],{"class":43,"line":96},[41,167505,30518],{"class":58},[41,167507,76688],{"class":275},[15,167509,167511],{"id":167510},"_711-闭包入门","7.11 闭包入门",[20,167513,167514],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[32,167516,167518],{"className":30481,"code":167517,"language":30483,"meta":37,"style":37},"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",[24,167519,167520,167530,167540,167551,167555,167562,167566,167570,167584],{"__ignoreMap":37},[41,167521,167522,167524,167527],{"class":43,"line":44},[41,167523,32050],{"class":271},[41,167525,167526],{"class":54}," outer",[41,167528,167529],{"class":275},"(base):\n",[41,167531,167532,167534,167537],{"class":43,"line":51},[41,167533,30904],{"class":271},[41,167535,167536],{"class":54}," inner",[41,167538,167539],{"class":275},"(num):\n",[41,167541,167542,167544,167547,167549],{"class":43,"line":62},[41,167543,14890],{"class":271},[41,167545,167546],{"class":275}," base ",[41,167548,754],{"class":271},[41,167550,166682],{"class":275},[41,167552,167553],{"class":43,"line":70},[41,167554,80],{"emptyLinePlaceholder":79},[41,167556,167557,167559],{"class":43,"line":76},[41,167558,4228],{"class":271},[41,167560,167561],{"class":275}," inner\n",[41,167563,167564],{"class":43,"line":83},[41,167565,80],{"emptyLinePlaceholder":79},[41,167567,167568],{"class":43,"line":89},[41,167569,80],{"emptyLinePlaceholder":79},[41,167571,167572,167575,167577,167580,167582],{"class":43,"line":96},[41,167573,167574],{"class":275},"add_10 ",[41,167576,321],{"class":271},[41,167578,167579],{"class":275}," outer(",[41,167581,719],{"class":58},[41,167583,282],{"class":275},[41,167585,167586,167588,167591,167593],{"class":43,"line":104},[41,167587,30518],{"class":58},[41,167589,167590],{"class":275},"(add_10(",[41,167592,592],{"class":58},[41,167594,30600],{"class":275},[20,167596,167597],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[15,167599,167601],{"id":167600},"_712-装饰器入门","7.12 装饰器入门",[20,167603,167604],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[32,167606,167608],{"className":30481,"code":167607,"language":30483,"meta":37,"style":37},"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",[24,167609,167610,167619,167628,167639,167644,167655,167659,167666,167670,167674,167679,167687,167697,167701,167705],{"__ignoreMap":37},[41,167611,167612,167614,167616],{"class":43,"line":44},[41,167613,32050],{"class":271},[41,167615,87294],{"class":54},[41,167617,167618],{"class":275},"(func):\n",[41,167620,167621,167623,167626],{"class":43,"line":51},[41,167622,30904],{"class":271},[41,167624,167625],{"class":54}," wrapper",[41,167627,32056],{"class":275},[41,167629,167630,167632,167634,167637],{"class":43,"line":62},[41,167631,32554],{"class":58},[41,167633,276],{"class":275},[41,167635,167636],{"class":378},"\"函数开始执行\"",[41,167638,282],{"class":275},[41,167640,167641],{"class":43,"line":70},[41,167642,167643],{"class":275},"        func()\n",[41,167645,167646,167648,167650,167653],{"class":43,"line":76},[41,167647,32554],{"class":58},[41,167649,276],{"class":275},[41,167651,167652],{"class":378},"\"函数执行结束\"",[41,167654,282],{"class":275},[41,167656,167657],{"class":43,"line":83},[41,167658,80],{"emptyLinePlaceholder":79},[41,167660,167661,167663],{"class":43,"line":89},[41,167662,4228],{"class":271},[41,167664,167665],{"class":275}," wrapper\n",[41,167667,167668],{"class":43,"line":96},[41,167669,80],{"emptyLinePlaceholder":79},[41,167671,167672],{"class":43,"line":104},[41,167673,80],{"emptyLinePlaceholder":79},[41,167675,167676],{"class":43,"line":176},[41,167677,167678],{"class":54},"@log\n",[41,167680,167681,167683,167685],{"class":43,"line":184},[41,167682,32050],{"class":271},[41,167684,161099],{"class":54},[41,167686,32056],{"class":275},[41,167688,167689,167691,167693,167695],{"class":43,"line":1757},[41,167690,31402],{"class":58},[41,167692,276],{"class":275},[41,167694,5982],{"class":378},[41,167696,282],{"class":275},[41,167698,167699],{"class":43,"line":1763},[41,167700,80],{"emptyLinePlaceholder":79},[41,167702,167703],{"class":43,"line":1768},[41,167704,80],{"emptyLinePlaceholder":79},[41,167706,167707],{"class":43,"line":1782},[41,167708,161134],{"class":275},[20,167710,158377],{},[32,167712,167714],{"className":30481,"code":167713,"language":30483,"meta":37,"style":37},"say_hello = log(say_hello)\n",[24,167715,167716],{"__ignoreMap":37},[41,167717,167718,167721,167723],{"class":43,"line":44},[41,167719,167720],{"class":275},"say_hello ",[41,167722,321],{"class":271},[41,167724,167725],{"class":275}," log(say_hello)\n",[20,167727,167728],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[15,167730,167732],{"id":167731},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[32,167734,167736],{"className":30481,"code":167735,"language":30483,"meta":37,"style":37},"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",[24,167737,167738,167746,167763,167773,167792,167802,167809,167813,167819,167823,167827,167831,167839,167849,167853,167857],{"__ignoreMap":37},[41,167739,167740,167742,167744],{"class":43,"line":44},[41,167741,32050],{"class":271},[41,167743,87294],{"class":54},[41,167745,167618],{"class":275},[41,167747,167748,167750,167752,167754,167756,167759,167761],{"class":43,"line":51},[41,167749,30904],{"class":271},[41,167751,167625],{"class":54},[41,167753,276],{"class":275},[41,167755,728],{"class":271},[41,167757,167758],{"class":275},"args, ",[41,167760,10799],{"class":271},[41,167762,166769],{"class":275},[41,167764,167765,167767,167769,167771],{"class":43,"line":62},[41,167766,32554],{"class":58},[41,167768,276],{"class":275},[41,167770,167636],{"class":378},[41,167772,282],{"class":275},[41,167774,167775,167778,167780,167783,167785,167787,167789],{"class":43,"line":70},[41,167776,167777],{"class":275},"        result ",[41,167779,321],{"class":271},[41,167781,167782],{"class":275}," func(",[41,167784,728],{"class":271},[41,167786,167758],{"class":275},[41,167788,10799],{"class":271},[41,167790,167791],{"class":275},"kwargs)\n",[41,167793,167794,167796,167798,167800],{"class":43,"line":76},[41,167795,32554],{"class":58},[41,167797,276],{"class":275},[41,167799,167652],{"class":378},[41,167801,282],{"class":275},[41,167803,167804,167806],{"class":43,"line":83},[41,167805,14890],{"class":271},[41,167807,167808],{"class":275}," result\n",[41,167810,167811],{"class":43,"line":89},[41,167812,80],{"emptyLinePlaceholder":79},[41,167814,167815,167817],{"class":43,"line":96},[41,167816,4228],{"class":271},[41,167818,167665],{"class":275},[41,167820,167821],{"class":43,"line":104},[41,167822,80],{"emptyLinePlaceholder":79},[41,167824,167825],{"class":43,"line":176},[41,167826,80],{"emptyLinePlaceholder":79},[41,167828,167829],{"class":43,"line":184},[41,167830,167678],{"class":54},[41,167832,167833,167835,167837],{"class":43,"line":1757},[41,167834,32050],{"class":271},[41,167836,5347],{"class":54},[41,167838,151196],{"class":275},[41,167840,167841,167843,167845,167847],{"class":43,"line":1763},[41,167842,4228],{"class":271},[41,167844,11007],{"class":275},[41,167846,754],{"class":271},[41,167848,151207],{"class":275},[41,167850,167851],{"class":43,"line":1768},[41,167852,80],{"emptyLinePlaceholder":79},[41,167854,167855],{"class":43,"line":1782},[41,167856,80],{"emptyLinePlaceholder":79},[41,167858,167859,167861,167863,167865,167867,167869],{"class":43,"line":1787},[41,167860,30518],{"class":58},[41,167862,166703],{"class":275},[41,167864,719],{"class":58},[41,167866,12573],{"class":275},[41,167868,973],{"class":58},[41,167870,30600],{"class":275},[20,167872,167873,167874,101121,167876,167878],{},"这个写法使用 ",[24,167875,166635],{},[24,167877,166750],{}," 接收原函数的所有参数。",[15,167880,167882],{"id":167881},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[20,167884,123395],{},[224,167886,167887,167890,167893],{},[227,167888,167889],{},"给定一组学生数据。",[227,167891,167892],{},"封装函数，根据传入规则筛选学生。",[227,167894,167895],{},"筛选及格、优秀、未成年学生。",[20,167897,10173],{},[32,167899,167901],{"className":30481,"code":167900,"language":30483,"meta":37,"style":37},"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",[24,167902,167903,167911,167939,167967,167995,167999,168003,168007,168017,168025,168035,168042,168047,168053,168057,168061,168085,168108,168131,168135,168142,168149],{"__ignoreMap":37},[41,167904,167905,167907,167909],{"class":43,"line":44},[41,167906,159819],{"class":275},[41,167908,321],{"class":271},[41,167910,55550],{"class":275},[41,167912,167913,167915,167917,167919,167921,167923,167925,167927,167929,167931,167933,167935,167937],{"class":43,"line":51},[41,167914,148488],{"class":275},[41,167916,62782],{"class":378},[41,167918,51540],{"class":275},[41,167920,149991],{"class":378},[41,167922,12573],{"class":275},[41,167924,69227],{"class":378},[41,167926,51540],{"class":275},[41,167928,923],{"class":58},[41,167930,12573],{"class":275},[41,167932,151575],{"class":378},[41,167934,51540],{"class":275},[41,167936,1262],{"class":58},[41,167938,5068],{"class":275},[41,167940,167941,167943,167945,167947,167949,167951,167953,167955,167957,167959,167961,167963,167965],{"class":43,"line":62},[41,167942,148488],{"class":275},[41,167944,62782],{"class":378},[41,167946,51540],{"class":275},[41,167948,151039],{"class":378},[41,167950,12573],{"class":275},[41,167952,69227],{"class":378},[41,167954,51540],{"class":275},[41,167956,898],{"class":58},[41,167958,12573],{"class":275},[41,167960,151575],{"class":378},[41,167962,51540],{"class":275},[41,167964,1084],{"class":58},[41,167966,5068],{"class":275},[41,167968,167969,167971,167973,167975,167977,167979,167981,167983,167985,167987,167989,167991,167993],{"class":43,"line":70},[41,167970,148488],{"class":275},[41,167972,62782],{"class":378},[41,167974,51540],{"class":275},[41,167976,159834],{"class":378},[41,167978,12573],{"class":275},[41,167980,69227],{"class":378},[41,167982,51540],{"class":275},[41,167984,948],{"class":58},[41,167986,12573],{"class":275},[41,167988,151575],{"class":378},[41,167990,51540],{"class":275},[41,167992,1155],{"class":58},[41,167994,5068],{"class":275},[41,167996,167997],{"class":43,"line":76},[41,167998,33349],{"class":275},[41,168000,168001],{"class":43,"line":83},[41,168002,80],{"emptyLinePlaceholder":79},[41,168004,168005],{"class":43,"line":89},[41,168006,80],{"emptyLinePlaceholder":79},[41,168008,168009,168011,168014],{"class":43,"line":96},[41,168010,32050],{"class":271},[41,168012,168013],{"class":54}," filter_students",[41,168015,168016],{"class":275},"(students, condition):\n",[41,168018,168019,168021,168023],{"class":43,"line":104},[41,168020,161326],{"class":275},[41,168022,321],{"class":271},[41,168024,51941],{"class":275},[41,168026,168027,168029,168031,168033],{"class":43,"line":176},[41,168028,3339],{"class":271},[41,168030,152240],{"class":275},[41,168032,26146],{"class":271},[41,168034,152245],{"class":275},[41,168036,168037,168039],{"class":43,"line":184},[41,168038,2635],{"class":271},[41,168040,168041],{"class":275}," condition(student):\n",[41,168043,168044],{"class":43,"line":1757},[41,168045,168046],{"class":275},"            result.append(student)\n",[41,168048,168049,168051],{"class":43,"line":1763},[41,168050,4228],{"class":271},[41,168052,167808],{"class":275},[41,168054,168055],{"class":43,"line":1768},[41,168056,80],{"emptyLinePlaceholder":79},[41,168058,168059],{"class":43,"line":1782},[41,168060,80],{"emptyLinePlaceholder":79},[41,168062,168063,168065,168067,168070,168072,168075,168077,168079,168081,168083],{"class":43,"line":1787},[41,168064,165804],{"class":275},[41,168066,321],{"class":271},[41,168068,168069],{"class":275}," filter_students(students, ",[41,168071,166989],{"class":271},[41,168073,168074],{"class":275}," s: s[",[41,168076,151575],{"class":378},[41,168078,4581],{"class":275},[41,168080,1850],{"class":271},[41,168082,157940],{"class":58},[41,168084,282],{"class":275},[41,168086,168087,168090,168092,168094,168096,168098,168100,168102,168104,168106],{"class":43,"line":1793},[41,168088,168089],{"class":275},"excellent ",[41,168091,321],{"class":271},[41,168093,168069],{"class":275},[41,168095,166989],{"class":271},[41,168097,168074],{"class":275},[41,168099,151575],{"class":378},[41,168101,4581],{"class":275},[41,168103,1850],{"class":271},[41,168105,157891],{"class":58},[41,168107,282],{"class":275},[41,168109,168110,168113,168115,168117,168119,168121,168123,168125,168127,168129],{"class":43,"line":1814},[41,168111,168112],{"class":275},"under_age ",[41,168114,321],{"class":271},[41,168116,168069],{"class":275},[41,168118,166989],{"class":271},[41,168120,168074],{"class":275},[41,168122,69227],{"class":378},[41,168124,4581],{"class":275},[41,168126,1183],{"class":271},[41,168128,156388],{"class":58},[41,168130,282],{"class":275},[41,168132,168133],{"class":43,"line":1819},[41,168134,80],{"emptyLinePlaceholder":79},[41,168136,168137,168139],{"class":43,"line":1833},[41,168138,30518],{"class":58},[41,168140,168141],{"class":275},"(passed)\n",[41,168143,168144,168146],{"class":43,"line":1838},[41,168145,30518],{"class":58},[41,168147,168148],{"class":275},"(excellent)\n",[41,168150,168151,168153],{"class":43,"line":1867},[41,168152,30518],{"class":58},[41,168154,168155],{"class":275},"(under_age)\n",[15,168157,168159],{"id":168158},"_715-易错点","7.15 易错点",[224,168161,168162,168165,168173,168178,168189],{},[227,168163,168164],{},"默认参数不要写可变对象。",[227,168166,168167,168169,168170,168172],{},[24,168168,166635],{}," 是元组，",[24,168171,166750],{}," 是字典。",[227,168174,168175,168177],{},[24,168176,166989],{}," 只适合简单表达式。",[227,168179,168180,101121,168182,168184,168185,168188],{},[24,168181,74147],{},[24,168183,80154],{}," 的结果是迭代器，常用 ",[24,168186,168187],{},"list()"," 转换查看。",[227,168190,168191],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[15,168193,168195],{"id":168194},"_716-本章练习","7.16 本章练习",[224,168197,168198,168205,168211,168216,168221],{},[227,168199,168200,168201,168204],{},"写函数 ",[24,168202,168203],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[227,168206,168200,168207,168210],{},[24,168208,168209],{},"print_user(**kwargs)","，输出用户所有字段。",[227,168212,104469,168213,168215],{},[24,168214,166989],{}," 对学生列表按年龄排序。",[227,168217,104469,168218,168220],{},[24,168219,80154],{}," 找出成绩不及格的学生。",[227,168222,168223],{},"写一个装饰器，统计函数执行前后的提示信息。",[189,168225,168226],{},"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":37,"searchDepth":51,"depth":51,"links":168228},[168229,168230,168231,168232,168233,168234,168238,168239,168240,168241,168246,168247,168248,168249,168250,168251],{"id":166087,"depth":51,"text":166088},{"id":166201,"depth":51,"text":166202},{"id":166290,"depth":51,"text":166291},{"id":166352,"depth":51,"text":166353},{"id":166498,"depth":51,"text":166499},{"id":166625,"depth":51,"text":166626,"children":168235},[168236,168237],{"id":166629,"depth":62,"text":166630},{"id":166744,"depth":62,"text":166745},{"id":166825,"depth":51,"text":166826},{"id":166983,"depth":51,"text":166984},{"id":167151,"depth":51,"text":167152},{"id":167233,"depth":51,"text":167234,"children":168242},[168243,168244,168245],{"id":167237,"depth":62,"text":167238},{"id":167308,"depth":62,"text":167309},{"id":167385,"depth":62,"text":167386},{"id":167510,"depth":51,"text":167511},{"id":167600,"depth":51,"text":167601},{"id":167731,"depth":51,"text":167732},{"id":167881,"depth":51,"text":167882},{"id":168158,"depth":51,"text":168159},{"id":168194,"depth":51,"text":168195},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166079,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168258,"title":168259,"body":168260,"description":196,"extension":197,"meta":170779,"navigation":79,"path":170780,"seo":170781,"stem":170782,"__hash__":170783},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168261,"toc":170754},[168262,168265,168269,168272,168275,168306,168310,168314,168317,168344,168348,168351,168402,168405,168420,168423,168458,168462,168464,168488,168491,168551,168555,168559,168562,168619,168622,168642,168646,168649,168712,168716,168719,168775,168782,168806,168810,168813,168876,168880,168885,168936,168939,168943,168948,169015,169018,169100,169104,169109,169160,169163,169167,169170,169173,169181,169184,169230,169233,169279,169283,169289,169333,169336,169382,169385,169425,169428,169489,169493,169496,169586,169589,169731,169734,169801,169805,169808,169811,169952,169955,170033,170036,170212,170216,170218,170229,170231,170430,170434,170678,170682,170716,170720,170751],[10,168263,168259],{"id":168264},"_8-文件操作",[15,168266,168268],{"id":168267},"_81-文件操作的意义","8.1 文件操作的意义",[20,168270,168271],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[20,168273,168274],{},"常见文件类型：",[224,168276,168277,168283,168289,168295,168301],{},[227,168278,168279,168282],{},[24,168280,168281],{},".txt","：普通文本。",[227,168284,168285,168288],{},[24,168286,168287],{},".csv","：表格文本。",[227,168290,168291,168294],{},[24,168292,168293],{},".json","：结构化数据。",[227,168296,168297,168300],{},[24,168298,168299],{},".log","：日志文件。",[227,168302,168303,168305],{},[24,168304,146455],{},"：Python 源代码。",[15,168307,168309],{"id":168308},"_82-路径","8.2 路径",[241,168311,168313],{"id":168312},"_821-相对路径","8.2.1 相对路径",[20,168315,168316],{},"相对当前运行目录：",[32,168318,168320],{"className":30481,"code":168319,"language":30483,"meta":37,"style":37},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[24,168321,168322],{"__ignoreMap":37},[41,168323,168324,168326,168328,168330,168332,168334,168336,168338,168340,168342],{"class":43,"line":44},[41,168325,87018],{"class":58},[41,168327,276],{"class":275},[41,168329,146899],{"class":378},[41,168331,12573],{"class":275},[41,168333,146904],{"class":378},[41,168335,12573],{"class":275},[41,168337,146909],{"class":5354},[41,168339,321],{"class":271},[41,168341,146914],{"class":378},[41,168343,282],{"class":275},[241,168345,168347],{"id":168346},"_822-绝对路径","8.2.2 绝对路径",[20,168349,168350],{},"从根目录或盘符开始：",[32,168352,168354],{"className":30481,"code":168353,"language":30483,"meta":37,"style":37},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[24,168355,168356,168379],{"__ignoreMap":37},[41,168357,168358,168360,168362,168365,168367,168369,168371,168373,168375,168377],{"class":43,"line":44},[41,168359,87018],{"class":58},[41,168361,276],{"class":275},[41,168363,168364],{"class":378},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[41,168366,12573],{"class":275},[41,168368,146904],{"class":378},[41,168370,12573],{"class":275},[41,168372,146909],{"class":5354},[41,168374,321],{"class":271},[41,168376,146914],{"class":378},[41,168378,282],{"class":275},[41,168380,168381,168383,168385,168388,168390,168392,168394,168396,168398,168400],{"class":43,"line":51},[41,168382,87018],{"class":58},[41,168384,276],{"class":275},[41,168386,168387],{"class":378},"\"D:\u002Fdata\u002Fdata.txt\"",[41,168389,12573],{"class":275},[41,168391,146904],{"class":378},[41,168393,12573],{"class":275},[41,168395,146909],{"class":5354},[41,168397,321],{"class":271},[41,168399,146914],{"class":378},[41,168401,282],{"class":275},[20,168403,168404],{},"Windows 路径建议写成：",[32,168406,168408],{"className":30481,"code":168407,"language":30483,"meta":37,"style":37},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[24,168409,168410],{"__ignoreMap":37},[41,168411,168412,168415,168417],{"class":43,"line":44},[41,168413,168414],{"class":275},"path ",[41,168416,321],{"class":271},[41,168418,168419],{"class":378}," \"D:\u002Fdata\u002Fdata.txt\"\n",[20,168421,168422],{},"或原始字符串：",[32,168424,168426],{"className":30481,"code":168425,"language":30483,"meta":37,"style":37},"path = r\"D:\\data\\data.txt\"\n",[24,168427,168428],{"__ignoreMap":37},[41,168429,168430,168432,168434,168436,168438,168441,168444,168447,168449,168451,168453,168456],{"class":43,"line":44},[41,168431,168414],{"class":275},[41,168433,321],{"class":271},[41,168435,17259],{"class":271},[41,168437,524],{"class":378},[41,168439,168440],{"class":48080},"D:",[41,168442,168443],{"class":58},"\\d",[41,168445,168446],{"class":48080},"ata",[41,168448,168443],{"class":58},[41,168450,168446],{"class":48080},[41,168452,831],{"class":58},[41,168454,168455],{"class":48080},"txt",[41,168457,25236],{"class":378},[15,168459,168461],{"id":168460},"_83-open函数","8.3 open函数",[20,168463,5319],{},[32,168465,168467],{"className":30481,"code":168466,"language":30483,"meta":37,"style":37},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[24,168468,168469],{"__ignoreMap":37},[41,168470,168471,168473,168475,168477,168480,168482,168484,168486],{"class":43,"line":44},[41,168472,45457],{"class":5354},[41,168474,13702],{"class":271},[41,168476,146894],{"class":58},[41,168478,168479],{"class":275},"(文件路径, 打开模式, ",[41,168481,146909],{"class":5354},[41,168483,321],{"class":271},[41,168485,146914],{"class":378},[41,168487,282],{"class":275},[20,168489,168490],{},"常见模式：",[411,168492,168493,168502],{},[414,168494,168495],{},[417,168496,168497,168500],{},[420,168498,168499],{},"模式",[420,168501,25972],{},[458,168503,168504,168513,168522,168531,168541],{},[417,168505,168506,168510],{},[463,168507,168508],{},[24,168509,943],{},[463,168511,168512],{},"只读，文件不存在会报错",[417,168514,168515,168519],{},[463,168516,168517],{},[24,168518,1068],{},[463,168520,168521],{},"只写，文件不存在会创建，存在会清空",[417,168523,168524,168528],{},[463,168525,168526],{},[24,168527,511],{},[463,168529,168530],{},"追加，文件不存在会创建",[417,168532,168533,168538],{},[463,168534,168535],{},[24,168536,168537],{},"rb",[463,168539,168540],{},"二进制只读",[417,168542,168543,168548],{},[463,168544,168545],{},[24,168546,168547],{},"wb",[463,168549,168550],{},"二进制只写",[15,168552,168554],{"id":168553},"_84-读取文件","8.4 读取文件",[241,168556,168558],{"id":168557},"_841-read","8.4.1 read",[20,168560,168561],{},"一次读取全部内容：",[32,168563,168565],{"className":30481,"code":168564,"language":30483,"meta":37,"style":37},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[24,168566,168567,168593,168605,168612],{"__ignoreMap":37},[41,168568,168569,168571,168573,168575,168577,168579,168581,168583,168585,168587,168589,168591],{"class":43,"line":44},[41,168570,45457],{"class":5354},[41,168572,13702],{"class":271},[41,168574,146894],{"class":58},[41,168576,276],{"class":275},[41,168578,146899],{"class":378},[41,168580,12573],{"class":275},[41,168582,146904],{"class":378},[41,168584,12573],{"class":275},[41,168586,146909],{"class":5354},[41,168588,321],{"class":271},[41,168590,146914],{"class":378},[41,168592,282],{"class":275},[41,168594,168595,168598,168600,168602],{"class":43,"line":51},[41,168596,168597],{"class":275},"content ",[41,168599,321],{"class":271},[41,168601,148256],{"class":5354},[41,168603,168604],{"class":275},".read()\n",[41,168606,168607,168609],{"class":43,"line":62},[41,168608,30518],{"class":58},[41,168610,168611],{"class":275},"(content)\n",[41,168613,168614,168616],{"class":43,"line":70},[41,168615,45457],{"class":5354},[41,168617,168618],{"class":275},".close()\n",[20,168620,168621],{},"可以指定读取字符数：",[32,168623,168625],{"className":30481,"code":168624,"language":30483,"meta":37,"style":37},"content = file.read(10)\n",[24,168626,168627],{"__ignoreMap":37},[41,168628,168629,168631,168633,168635,168638,168640],{"class":43,"line":44},[41,168630,168597],{"class":275},[41,168632,321],{"class":271},[41,168634,148256],{"class":5354},[41,168636,168637],{"class":275},".read(",[41,168639,719],{"class":58},[41,168641,282],{"class":275},[241,168643,168645],{"id":168644},"_842-readline","8.4.2 readline",[20,168647,168648],{},"一次读取一行：",[32,168650,168652],{"className":30481,"code":168651,"language":30483,"meta":37,"style":37},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[24,168653,168654,168680,168684,168695,168702,168706],{"__ignoreMap":37},[41,168655,168656,168658,168660,168662,168664,168666,168668,168670,168672,168674,168676,168678],{"class":43,"line":44},[41,168657,45457],{"class":5354},[41,168659,13702],{"class":271},[41,168661,146894],{"class":58},[41,168663,276],{"class":275},[41,168665,146899],{"class":378},[41,168667,12573],{"class":275},[41,168669,146904],{"class":378},[41,168671,12573],{"class":275},[41,168673,146909],{"class":5354},[41,168675,321],{"class":271},[41,168677,146914],{"class":378},[41,168679,282],{"class":275},[41,168681,168682],{"class":43,"line":51},[41,168683,80],{"emptyLinePlaceholder":79},[41,168685,168686,168688,168690,168692],{"class":43,"line":62},[41,168687,147355],{"class":275},[41,168689,321],{"class":271},[41,168691,148256],{"class":5354},[41,168693,168694],{"class":275},".readline()\n",[41,168696,168697,168699],{"class":43,"line":70},[41,168698,30518],{"class":58},[41,168700,168701],{"class":275},"(line)\n",[41,168703,168704],{"class":43,"line":76},[41,168705,80],{"emptyLinePlaceholder":79},[41,168707,168708,168710],{"class":43,"line":83},[41,168709,45457],{"class":5354},[41,168711,168618],{"class":275},[241,168713,168715],{"id":168714},"_843-readlines","8.4.3 readlines",[20,168717,168718],{},"读取所有行，返回列表：",[32,168720,168722],{"className":30481,"code":168721,"language":30483,"meta":37,"style":37},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[24,168723,168724,168750,168762,168769],{"__ignoreMap":37},[41,168725,168726,168728,168730,168732,168734,168736,168738,168740,168742,168744,168746,168748],{"class":43,"line":44},[41,168727,45457],{"class":5354},[41,168729,13702],{"class":271},[41,168731,146894],{"class":58},[41,168733,276],{"class":275},[41,168735,146899],{"class":378},[41,168737,12573],{"class":275},[41,168739,146904],{"class":378},[41,168741,12573],{"class":275},[41,168743,146909],{"class":5354},[41,168745,321],{"class":271},[41,168747,146914],{"class":378},[41,168749,282],{"class":275},[41,168751,168752,168755,168757,168759],{"class":43,"line":51},[41,168753,168754],{"class":275},"lines ",[41,168756,321],{"class":271},[41,168758,148256],{"class":5354},[41,168760,168761],{"class":275},".readlines()\n",[41,168763,168764,168766],{"class":43,"line":62},[41,168765,30518],{"class":58},[41,168767,168768],{"class":275},"(lines)\n",[41,168770,168771,168773],{"class":43,"line":70},[41,168772,45457],{"class":5354},[41,168774,168618],{"class":275},[20,168776,168777,168778,168781],{},"每一行通常带有换行符，可以用 ",[24,168779,168780],{},"strip()"," 去掉：",[32,168783,168785],{"className":30481,"code":168784,"language":30483,"meta":37,"style":37},"for line in lines:\n    print(line.strip())\n",[24,168786,168787,168799],{"__ignoreMap":37},[41,168788,168789,168791,168794,168796],{"class":43,"line":44},[41,168790,3163],{"class":271},[41,168792,168793],{"class":275}," line ",[41,168795,26146],{"class":271},[41,168797,168798],{"class":275}," lines:\n",[41,168800,168801,168803],{"class":43,"line":51},[41,168802,31402],{"class":58},[41,168804,168805],{"class":275},"(line.strip())\n",[241,168807,168809],{"id":168808},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[20,168811,168812],{},"推荐读取大文件时使用：",[32,168814,168816],{"className":30481,"code":168815,"language":30483,"meta":37,"style":37},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[24,168817,168818,168844,168848,168860,168866,168870],{"__ignoreMap":37},[41,168819,168820,168822,168824,168826,168828,168830,168832,168834,168836,168838,168840,168842],{"class":43,"line":44},[41,168821,45457],{"class":5354},[41,168823,13702],{"class":271},[41,168825,146894],{"class":58},[41,168827,276],{"class":275},[41,168829,146899],{"class":378},[41,168831,12573],{"class":275},[41,168833,146904],{"class":378},[41,168835,12573],{"class":275},[41,168837,146909],{"class":5354},[41,168839,321],{"class":271},[41,168841,146914],{"class":378},[41,168843,282],{"class":275},[41,168845,168846],{"class":43,"line":51},[41,168847,80],{"emptyLinePlaceholder":79},[41,168849,168850,168852,168854,168856,168858],{"class":43,"line":62},[41,168851,3163],{"class":271},[41,168853,168793],{"class":275},[41,168855,26146],{"class":271},[41,168857,148256],{"class":5354},[41,168859,3877],{"class":275},[41,168861,168862,168864],{"class":43,"line":70},[41,168863,31402],{"class":58},[41,168865,168805],{"class":275},[41,168867,168868],{"class":43,"line":76},[41,168869,80],{"emptyLinePlaceholder":79},[41,168871,168872,168874],{"class":43,"line":83},[41,168873,45457],{"class":5354},[41,168875,168618],{"class":275},[15,168877,168879],{"id":168878},"_85-with语句","8.5 with语句",[20,168881,168882,168884],{},[24,168883,107936],{}," 会自动关闭文件，推荐使用。",[32,168886,168888],{"className":30481,"code":168887,"language":30483,"meta":37,"style":37},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[24,168889,168890,168920,168930],{"__ignoreMap":37},[41,168891,168892,168894,168896,168898,168900,168902,168904,168906,168908,168910,168912,168914,168916,168918],{"class":43,"line":44},[41,168893,107936],{"class":271},[41,168895,146894],{"class":58},[41,168897,276],{"class":275},[41,168899,146899],{"class":378},[41,168901,12573],{"class":275},[41,168903,146904],{"class":378},[41,168905,12573],{"class":275},[41,168907,146909],{"class":5354},[41,168909,321],{"class":271},[41,168911,146914],{"class":378},[41,168913,13852],{"class":275},[41,168915,31486],{"class":271},[41,168917,148256],{"class":5354},[41,168919,3877],{"class":275},[41,168921,168922,168924,168926,168928],{"class":43,"line":51},[41,168923,146926],{"class":275},[41,168925,321],{"class":271},[41,168927,148256],{"class":5354},[41,168929,168604],{"class":275},[41,168931,168932,168934],{"class":43,"line":62},[41,168933,31402],{"class":58},[41,168935,168611],{"class":275},[20,168937,168938],{},"等价于打开文件、读取、最后关闭，但更安全。",[15,168940,168942],{"id":168941},"_86-写入文件","8.6 写入文件",[20,168944,168945,168947],{},[24,168946,1068],{}," 模式会清空原文件。",[32,168949,168951],{"className":30481,"code":168950,"language":30483,"meta":37,"style":37},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[24,168952,168953,168983,169000],{"__ignoreMap":37},[41,168954,168955,168957,168959,168961,168963,168965,168967,168969,168971,168973,168975,168977,168979,168981],{"class":43,"line":44},[41,168956,107936],{"class":271},[41,168958,146894],{"class":58},[41,168960,276],{"class":275},[41,168962,146899],{"class":378},[41,168964,12573],{"class":275},[41,168966,152079],{"class":378},[41,168968,12573],{"class":275},[41,168970,146909],{"class":5354},[41,168972,321],{"class":271},[41,168974,146914],{"class":378},[41,168976,13852],{"class":275},[41,168978,31486],{"class":271},[41,168980,148256],{"class":5354},[41,168982,3877],{"class":275},[41,168984,168985,168988,168991,168994,168996,168998],{"class":43,"line":51},[41,168986,168987],{"class":5354},"    file",[41,168989,168990],{"class":275},".write(",[41,168992,168993],{"class":378},"\"hello",[41,168995,156628],{"class":58},[41,168997,524],{"class":378},[41,168999,282],{"class":275},[41,169001,169002,169004,169006,169009,169011,169013],{"class":43,"line":62},[41,169003,168987],{"class":5354},[41,169005,168990],{"class":275},[41,169007,169008],{"class":378},"\"python",[41,169010,156628],{"class":58},[41,169012,524],{"class":378},[41,169014,282],{"class":275},[20,169016,169017],{},"写入多行：",[32,169019,169021],{"className":30481,"code":169020,"language":30483,"meta":37,"style":37},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[24,169022,169023,169058,169062,169093],{"__ignoreMap":37},[41,169024,169025,169027,169029,169031,169034,169036,169038,169040,169043,169045,169047,169049,169052,169054,169056],{"class":43,"line":44},[41,169026,168754],{"class":275},[41,169028,321],{"class":271},[41,169030,52329],{"class":275},[41,169032,169033],{"class":378},"\"小明,18",[41,169035,156628],{"class":58},[41,169037,524],{"class":378},[41,169039,12573],{"class":275},[41,169041,169042],{"class":378},"\"小红,17",[41,169044,156628],{"class":58},[41,169046,524],{"class":378},[41,169048,12573],{"class":275},[41,169050,169051],{"class":378},"\"小刚,19",[41,169053,156628],{"class":58},[41,169055,524],{"class":378},[41,169057,33349],{"class":275},[41,169059,169060],{"class":43,"line":51},[41,169061,80],{"emptyLinePlaceholder":79},[41,169063,169064,169066,169068,169070,169073,169075,169077,169079,169081,169083,169085,169087,169089,169091],{"class":43,"line":62},[41,169065,107936],{"class":271},[41,169067,146894],{"class":58},[41,169069,276],{"class":275},[41,169071,169072],{"class":378},"\"students.txt\"",[41,169074,12573],{"class":275},[41,169076,152079],{"class":378},[41,169078,12573],{"class":275},[41,169080,146909],{"class":5354},[41,169082,321],{"class":271},[41,169084,146914],{"class":378},[41,169086,13852],{"class":275},[41,169088,31486],{"class":271},[41,169090,148256],{"class":5354},[41,169092,3877],{"class":275},[41,169094,169095,169097],{"class":43,"line":70},[41,169096,168987],{"class":5354},[41,169098,169099],{"class":275},".writelines(lines)\n",[15,169101,169103],{"id":169102},"_87-追加文件","8.7 追加文件",[20,169105,169106,169108],{},[24,169107,511],{}," 模式不会清空原内容，而是在末尾追加。",[32,169110,169112],{"className":30481,"code":169111,"language":30483,"meta":37,"style":37},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[24,169113,169114,169145],{"__ignoreMap":37},[41,169115,169116,169118,169120,169122,169125,169127,169129,169131,169133,169135,169137,169139,169141,169143],{"class":43,"line":44},[41,169117,107936],{"class":271},[41,169119,146894],{"class":58},[41,169121,276],{"class":275},[41,169123,169124],{"class":378},"\"log.txt\"",[41,169126,12573],{"class":275},[41,169128,165428],{"class":378},[41,169130,12573],{"class":275},[41,169132,146909],{"class":5354},[41,169134,321],{"class":271},[41,169136,146914],{"class":378},[41,169138,13852],{"class":275},[41,169140,31486],{"class":271},[41,169142,148256],{"class":5354},[41,169144,3877],{"class":275},[41,169146,169147,169149,169151,169154,169156,169158],{"class":43,"line":51},[41,169148,168987],{"class":5354},[41,169150,168990],{"class":275},[41,169152,169153],{"class":378},"\"程序启动",[41,169155,156628],{"class":58},[41,169157,524],{"class":378},[41,169159,282],{"class":275},[20,169161,169162],{},"日志类文件常用追加模式。",[15,169164,169166],{"id":169165},"_88-文件编码","8.8 文件编码",[20,169168,169169],{},"编码决定文字如何保存为字节。",[20,169171,169172],{},"常见编码：",[224,169174,169175,169178],{},[227,169176,169177],{},"UTF-8：推荐。",[227,169179,169180],{},"GBK：部分 Windows 中文文件常见。",[20,169182,169183],{},"读取文件乱码时，可以尝试：",[32,169185,169187],{"className":30481,"code":169186,"language":30483,"meta":37,"style":37},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[24,169188,169189,169220],{"__ignoreMap":37},[41,169190,169191,169193,169195,169197,169199,169201,169203,169205,169207,169209,169212,169214,169216,169218],{"class":43,"line":44},[41,169192,107936],{"class":271},[41,169194,146894],{"class":58},[41,169196,276],{"class":275},[41,169198,146899],{"class":378},[41,169200,12573],{"class":275},[41,169202,146904],{"class":378},[41,169204,12573],{"class":275},[41,169206,146909],{"class":5354},[41,169208,321],{"class":271},[41,169210,169211],{"class":378},"\"gbk\"",[41,169213,13852],{"class":275},[41,169215,31486],{"class":271},[41,169217,148256],{"class":5354},[41,169219,3877],{"class":275},[41,169221,169222,169224,169226,169228],{"class":43,"line":51},[41,169223,146926],{"class":275},[41,169225,321],{"class":271},[41,169227,148256],{"class":5354},[41,169229,168604],{"class":275},[20,169231,169232],{},"写文件时建议统一 UTF-8：",[32,169234,169236],{"className":30481,"code":169235,"language":30483,"meta":37,"style":37},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[24,169237,169238,169268],{"__ignoreMap":37},[41,169239,169240,169242,169244,169246,169248,169250,169252,169254,169256,169258,169260,169262,169264,169266],{"class":43,"line":44},[41,169241,107936],{"class":271},[41,169243,146894],{"class":58},[41,169245,276],{"class":275},[41,169247,146899],{"class":378},[41,169249,12573],{"class":275},[41,169251,152079],{"class":378},[41,169253,12573],{"class":275},[41,169255,146909],{"class":5354},[41,169257,321],{"class":271},[41,169259,146914],{"class":378},[41,169261,13852],{"class":275},[41,169263,31486],{"class":271},[41,169265,148256],{"class":5354},[41,169267,3877],{"class":275},[41,169269,169270,169272,169274,169277],{"class":43,"line":51},[41,169271,168987],{"class":5354},[41,169273,168990],{"class":275},[41,169275,169276],{"class":378},"\"中文内容\"",[41,169278,282],{"class":275},[15,169280,169282],{"id":169281},"_89-pathlib","8.9 pathlib",[20,169284,169285,169288],{},[24,169286,169287],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[32,169290,169292],{"className":30481,"code":169291,"language":30483,"meta":37,"style":37},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[24,169293,169294,169304,169308,169326],{"__ignoreMap":37},[41,169295,169296,169298,169300,169302],{"class":43,"line":44},[41,169297,30840],{"class":271},[41,169299,108414],{"class":275},[41,169301,30495],{"class":271},[41,169303,108419],{"class":275},[41,169305,169306],{"class":43,"line":51},[41,169307,80],{"emptyLinePlaceholder":79},[41,169309,169310,169312,169314,169316,169319,169321,169323],{"class":43,"line":62},[41,169311,168414],{"class":275},[41,169313,321],{"class":271},[41,169315,108648],{"class":275},[41,169317,169318],{"class":378},"\"data\"",[41,169320,13852],{"class":275},[41,169322,857],{"class":271},[41,169324,169325],{"class":378}," \"students.txt\"\n",[41,169327,169328,169330],{"class":43,"line":70},[41,169329,30518],{"class":58},[41,169331,169332],{"class":275},"(path)\n",[20,169334,169335],{},"创建目录：",[32,169337,169339],{"className":30481,"code":169338,"language":30483,"meta":37,"style":37},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[24,169340,169341,169351,169355,169368],{"__ignoreMap":37},[41,169342,169343,169345,169347,169349],{"class":43,"line":44},[41,169344,30840],{"class":271},[41,169346,108414],{"class":275},[41,169348,30495],{"class":271},[41,169350,108419],{"class":275},[41,169352,169353],{"class":43,"line":51},[41,169354,80],{"emptyLinePlaceholder":79},[41,169356,169357,169360,169362,169364,169366],{"class":43,"line":62},[41,169358,169359],{"class":275},"data_dir ",[41,169361,321],{"class":271},[41,169363,108648],{"class":275},[41,169365,169318],{"class":378},[41,169367,282],{"class":275},[41,169369,169370,169373,169376,169378,169380],{"class":43,"line":70},[41,169371,169372],{"class":275},"data_dir.mkdir(",[41,169374,169375],{"class":5354},"exist_ok",[41,169377,321],{"class":271},[41,169379,31579],{"class":58},[41,169381,282],{"class":275},[20,169383,169384],{},"判断文件是否存在：",[32,169386,169388],{"className":30481,"code":169387,"language":30483,"meta":37,"style":37},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[24,169389,169390,169403,169407,169414],{"__ignoreMap":37},[41,169391,169392,169394,169396,169398,169401],{"class":43,"line":44},[41,169393,168414],{"class":275},[41,169395,321],{"class":271},[41,169397,108648],{"class":275},[41,169399,169400],{"class":378},"\"data\u002Fstudents.txt\"",[41,169402,282],{"class":275},[41,169404,169405],{"class":43,"line":51},[41,169406,80],{"emptyLinePlaceholder":79},[41,169408,169409,169411],{"class":43,"line":62},[41,169410,1672],{"class":271},[41,169412,169413],{"class":275}," path.exists():\n",[41,169415,169416,169418,169420,169423],{"class":43,"line":70},[41,169417,31402],{"class":58},[41,169419,276],{"class":275},[41,169421,169422],{"class":378},"\"文件存在\"",[41,169424,282],{"class":275},[20,169426,169427],{},"读写文本：",[32,169429,169431],{"className":30481,"code":169430,"language":30483,"meta":37,"style":37},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[24,169432,169433,169445,169449,169466,169483],{"__ignoreMap":37},[41,169434,169435,169437,169439,169441,169443],{"class":43,"line":44},[41,169436,168414],{"class":275},[41,169438,321],{"class":271},[41,169440,108648],{"class":275},[41,169442,146899],{"class":378},[41,169444,282],{"class":275},[41,169446,169447],{"class":43,"line":51},[41,169448,80],{"emptyLinePlaceholder":79},[41,169450,169451,169454,169456,169458,169460,169462,169464],{"class":43,"line":62},[41,169452,169453],{"class":275},"path.write_text(",[41,169455,145979],{"class":378},[41,169457,12573],{"class":275},[41,169459,146909],{"class":5354},[41,169461,321],{"class":271},[41,169463,146914],{"class":378},[41,169465,282],{"class":275},[41,169467,169468,169470,169472,169475,169477,169479,169481],{"class":43,"line":70},[41,169469,168597],{"class":275},[41,169471,321],{"class":271},[41,169473,169474],{"class":275}," path.read_text(",[41,169476,146909],{"class":5354},[41,169478,321],{"class":271},[41,169480,146914],{"class":378},[41,169482,282],{"class":275},[41,169484,169485,169487],{"class":43,"line":76},[41,169486,30518],{"class":58},[41,169488,168611],{"class":275},[15,169490,169492],{"id":169491},"_810-json文件","8.10 JSON文件",[20,169494,169495],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[32,169497,169499],{"className":30481,"code":169498,"language":30483,"meta":37,"style":37},"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",[24,169500,169501,169507,169511,169519,169529,169539,169547,169551,169555,169580],{"__ignoreMap":37},[41,169502,169503,169505],{"class":43,"line":44},[41,169504,30495],{"class":271},[41,169506,147194],{"class":275},[41,169508,169509],{"class":43,"line":51},[41,169510,80],{"emptyLinePlaceholder":79},[41,169512,169513,169515,169517],{"class":43,"line":62},[41,169514,149584],{"class":275},[41,169516,321],{"class":271},[41,169518,15710],{"class":275},[41,169520,169521,169523,169525,169527],{"class":43,"line":70},[41,169522,147123],{"class":378},[41,169524,51540],{"class":275},[41,169526,149991],{"class":378},[41,169528,31569],{"class":275},[41,169530,169531,169533,169535,169537],{"class":43,"line":76},[41,169532,164640],{"class":378},[41,169534,51540],{"class":275},[41,169536,923],{"class":58},[41,169538,31569],{"class":275},[41,169540,169541,169543,169545],{"class":43,"line":83},[41,169542,164651],{"class":378},[41,169544,51540],{"class":275},[41,169546,164656],{"class":58},[41,169548,169549],{"class":43,"line":89},[41,169550,1706],{"class":275},[41,169552,169553],{"class":43,"line":96},[41,169554,80],{"emptyLinePlaceholder":79},[41,169556,169557,169559,169561,169564,169566,169568,169570,169572,169574,169576,169578],{"class":43,"line":104},[41,169558,156547],{"class":275},[41,169560,321],{"class":271},[41,169562,169563],{"class":275}," json.dumps(student, ",[41,169565,147240],{"class":5354},[41,169567,321],{"class":271},[41,169569,34090],{"class":58},[41,169571,12573],{"class":275},[41,169573,152115],{"class":5354},[41,169575,321],{"class":271},[41,169577,351],{"class":58},[41,169579,282],{"class":275},[41,169581,169582,169584],{"class":43,"line":176},[41,169583,30518],{"class":58},[41,169585,164174],{"class":275},[20,169587,169588],{},"写入 JSON 文件：",[32,169590,169592],{"className":30481,"code":169591,"language":30483,"meta":37,"style":37},"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",[24,169593,169594,169600,169604,169612,169640,169668,169672,169676,169706],{"__ignoreMap":37},[41,169595,169596,169598],{"class":43,"line":44},[41,169597,30495],{"class":271},[41,169599,147194],{"class":275},[41,169601,169602],{"class":43,"line":51},[41,169603,80],{"emptyLinePlaceholder":79},[41,169605,169606,169608,169610],{"class":43,"line":62},[41,169607,159819],{"class":275},[41,169609,321],{"class":271},[41,169611,55550],{"class":275},[41,169613,169614,169616,169618,169620,169622,169624,169626,169628,169630,169632,169634,169636,169638],{"class":43,"line":70},[41,169615,148488],{"class":275},[41,169617,62782],{"class":378},[41,169619,51540],{"class":275},[41,169621,149991],{"class":378},[41,169623,12573],{"class":275},[41,169625,69227],{"class":378},[41,169627,51540],{"class":275},[41,169629,923],{"class":58},[41,169631,12573],{"class":275},[41,169633,151575],{"class":378},[41,169635,51540],{"class":275},[41,169637,1262],{"class":58},[41,169639,5068],{"class":275},[41,169641,169642,169644,169646,169648,169650,169652,169654,169656,169658,169660,169662,169664,169666],{"class":43,"line":76},[41,169643,148488],{"class":275},[41,169645,62782],{"class":378},[41,169647,51540],{"class":275},[41,169649,151039],{"class":378},[41,169651,12573],{"class":275},[41,169653,69227],{"class":378},[41,169655,51540],{"class":275},[41,169657,898],{"class":58},[41,169659,12573],{"class":275},[41,169661,151575],{"class":378},[41,169663,51540],{"class":275},[41,169665,1084],{"class":58},[41,169667,5068],{"class":275},[41,169669,169670],{"class":43,"line":83},[41,169671,33349],{"class":275},[41,169673,169674],{"class":43,"line":89},[41,169675,80],{"emptyLinePlaceholder":79},[41,169677,169678,169680,169682,169684,169686,169688,169690,169692,169694,169696,169698,169700,169702,169704],{"class":43,"line":96},[41,169679,107936],{"class":271},[41,169681,146894],{"class":58},[41,169683,276],{"class":275},[41,169685,151934],{"class":378},[41,169687,12573],{"class":275},[41,169689,152079],{"class":378},[41,169691,12573],{"class":275},[41,169693,146909],{"class":5354},[41,169695,321],{"class":271},[41,169697,146914],{"class":378},[41,169699,13852],{"class":275},[41,169701,31486],{"class":271},[41,169703,148256],{"class":5354},[41,169705,3877],{"class":275},[41,169707,169708,169711,169713,169715,169717,169719,169721,169723,169725,169727,169729],{"class":43,"line":104},[41,169709,169710],{"class":275},"    json.dump(students, ",[41,169712,45457],{"class":5354},[41,169714,12573],{"class":275},[41,169716,147240],{"class":5354},[41,169718,321],{"class":271},[41,169720,34090],{"class":58},[41,169722,12573],{"class":275},[41,169724,152115],{"class":5354},[41,169726,321],{"class":271},[41,169728,351],{"class":58},[41,169730,282],{"class":275},[20,169732,169733],{},"读取 JSON 文件：",[32,169735,169737],{"className":30481,"code":169736,"language":30483,"meta":37,"style":37},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[24,169738,169739,169745,169749,169779,169791,169795],{"__ignoreMap":37},[41,169740,169741,169743],{"class":43,"line":44},[41,169742,30495],{"class":271},[41,169744,147194],{"class":275},[41,169746,169747],{"class":43,"line":51},[41,169748,80],{"emptyLinePlaceholder":79},[41,169750,169751,169753,169755,169757,169759,169761,169763,169765,169767,169769,169771,169773,169775,169777],{"class":43,"line":62},[41,169752,107936],{"class":271},[41,169754,146894],{"class":58},[41,169756,276],{"class":275},[41,169758,151934],{"class":378},[41,169760,12573],{"class":275},[41,169762,146904],{"class":378},[41,169764,12573],{"class":275},[41,169766,146909],{"class":5354},[41,169768,321],{"class":271},[41,169770,146914],{"class":378},[41,169772,13852],{"class":275},[41,169774,31486],{"class":271},[41,169776,148256],{"class":5354},[41,169778,3877],{"class":275},[41,169780,169781,169783,169785,169787,169789],{"class":43,"line":70},[41,169782,153140],{"class":275},[41,169784,321],{"class":271},[41,169786,148267],{"class":275},[41,169788,45457],{"class":5354},[41,169790,282],{"class":275},[41,169792,169793],{"class":43,"line":76},[41,169794,80],{"emptyLinePlaceholder":79},[41,169796,169797,169799],{"class":43,"line":83},[41,169798,30518],{"class":58},[41,169800,165098],{"class":275},[15,169802,169804],{"id":169803},"_811-csv文件","8.11 CSV文件",[20,169806,169807],{},"CSV 是逗号分隔值，常用于表格数据。",[20,169809,169810],{},"写入 CSV：",[32,169812,169814],{"className":30481,"code":169813,"language":30483,"meta":37,"style":37},"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",[24,169815,169816,169823,169827,169835,169853,169869,169885,169889,169893,169933,169947],{"__ignoreMap":37},[41,169817,169818,169820],{"class":43,"line":44},[41,169819,30495],{"class":271},[41,169821,169822],{"class":275}," csv\n",[41,169824,169825],{"class":43,"line":51},[41,169826,80],{"emptyLinePlaceholder":79},[41,169828,169829,169831,169833],{"class":43,"line":62},[41,169830,159819],{"class":275},[41,169832,321],{"class":271},[41,169834,55550],{"class":275},[41,169836,169837,169840,169842,169844,169846,169848,169851],{"class":43,"line":70},[41,169838,169839],{"class":275},"    [",[41,169841,73202],{"class":378},[41,169843,12573],{"class":275},[41,169845,73235],{"class":378},[41,169847,12573],{"class":275},[41,169849,169850],{"class":378},"\"成绩\"",[41,169852,87939],{"class":275},[41,169854,169855,169857,169859,169861,169863,169865,169867],{"class":43,"line":76},[41,169856,169839],{"class":275},[41,169858,149991],{"class":378},[41,169860,12573],{"class":275},[41,169862,923],{"class":58},[41,169864,12573],{"class":275},[41,169866,1262],{"class":58},[41,169868,87939],{"class":275},[41,169870,169871,169873,169875,169877,169879,169881,169883],{"class":43,"line":83},[41,169872,169839],{"class":275},[41,169874,151039],{"class":378},[41,169876,12573],{"class":275},[41,169878,898],{"class":58},[41,169880,12573],{"class":275},[41,169882,1084],{"class":58},[41,169884,87939],{"class":275},[41,169886,169887],{"class":43,"line":89},[41,169888,33349],{"class":275},[41,169890,169891],{"class":43,"line":96},[41,169892,80],{"emptyLinePlaceholder":79},[41,169894,169895,169897,169899,169901,169904,169906,169908,169910,169912,169914,169916,169918,169921,169923,169925,169927,169929,169931],{"class":43,"line":104},[41,169896,107936],{"class":271},[41,169898,146894],{"class":58},[41,169900,276],{"class":275},[41,169902,169903],{"class":378},"\"students.csv\"",[41,169905,12573],{"class":275},[41,169907,152079],{"class":378},[41,169909,12573],{"class":275},[41,169911,146909],{"class":5354},[41,169913,321],{"class":271},[41,169915,146914],{"class":378},[41,169917,12573],{"class":275},[41,169919,169920],{"class":5354},"newline",[41,169922,321],{"class":271},[41,169924,7790],{"class":378},[41,169926,13852],{"class":275},[41,169928,31486],{"class":271},[41,169930,148256],{"class":5354},[41,169932,3877],{"class":275},[41,169934,169935,169938,169940,169943,169945],{"class":43,"line":176},[41,169936,169937],{"class":275},"    writer ",[41,169939,321],{"class":271},[41,169941,169942],{"class":275}," csv.writer(",[41,169944,45457],{"class":5354},[41,169946,282],{"class":275},[41,169948,169949],{"class":43,"line":184},[41,169950,169951],{"class":275},"    writer.writerows(students)\n",[20,169953,169954],{},"读取 CSV：",[32,169956,169958],{"className":30481,"code":169957,"language":30483,"meta":37,"style":37},"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",[24,169959,169960,169966,169970,170000,170014,170026],{"__ignoreMap":37},[41,169961,169962,169964],{"class":43,"line":44},[41,169963,30495],{"class":271},[41,169965,169822],{"class":275},[41,169967,169968],{"class":43,"line":51},[41,169969,80],{"emptyLinePlaceholder":79},[41,169971,169972,169974,169976,169978,169980,169982,169984,169986,169988,169990,169992,169994,169996,169998],{"class":43,"line":62},[41,169973,107936],{"class":271},[41,169975,146894],{"class":58},[41,169977,276],{"class":275},[41,169979,169903],{"class":378},[41,169981,12573],{"class":275},[41,169983,146904],{"class":378},[41,169985,12573],{"class":275},[41,169987,146909],{"class":5354},[41,169989,321],{"class":271},[41,169991,146914],{"class":378},[41,169993,13852],{"class":275},[41,169995,31486],{"class":271},[41,169997,148256],{"class":5354},[41,169999,3877],{"class":275},[41,170001,170002,170005,170007,170010,170012],{"class":43,"line":70},[41,170003,170004],{"class":275},"    reader ",[41,170006,321],{"class":271},[41,170008,170009],{"class":275}," csv.reader(",[41,170011,45457],{"class":5354},[41,170013,282],{"class":275},[41,170015,170016,170018,170021,170023],{"class":43,"line":76},[41,170017,3339],{"class":271},[41,170019,170020],{"class":275}," row ",[41,170022,26146],{"class":271},[41,170024,170025],{"class":275}," reader:\n",[41,170027,170028,170030],{"class":43,"line":83},[41,170029,32554],{"class":58},[41,170031,170032],{"class":275},"(row)\n",[20,170034,170035],{},"使用字典写入：",[32,170037,170039],{"className":30481,"code":170038,"language":30483,"meta":37,"style":37},"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",[24,170040,170041,170047,170051,170059,170087,170115,170119,170123,170161,170182,170203,170208],{"__ignoreMap":37},[41,170042,170043,170045],{"class":43,"line":44},[41,170044,30495],{"class":271},[41,170046,169822],{"class":275},[41,170048,170049],{"class":43,"line":51},[41,170050,80],{"emptyLinePlaceholder":79},[41,170052,170053,170055,170057],{"class":43,"line":62},[41,170054,159819],{"class":275},[41,170056,321],{"class":271},[41,170058,55550],{"class":275},[41,170060,170061,170063,170065,170067,170069,170071,170073,170075,170077,170079,170081,170083,170085],{"class":43,"line":70},[41,170062,148488],{"class":275},[41,170064,62782],{"class":378},[41,170066,51540],{"class":275},[41,170068,149991],{"class":378},[41,170070,12573],{"class":275},[41,170072,69227],{"class":378},[41,170074,51540],{"class":275},[41,170076,923],{"class":58},[41,170078,12573],{"class":275},[41,170080,151575],{"class":378},[41,170082,51540],{"class":275},[41,170084,1262],{"class":58},[41,170086,5068],{"class":275},[41,170088,170089,170091,170093,170095,170097,170099,170101,170103,170105,170107,170109,170111,170113],{"class":43,"line":76},[41,170090,148488],{"class":275},[41,170092,62782],{"class":378},[41,170094,51540],{"class":275},[41,170096,151039],{"class":378},[41,170098,12573],{"class":275},[41,170100,69227],{"class":378},[41,170102,51540],{"class":275},[41,170104,898],{"class":58},[41,170106,12573],{"class":275},[41,170108,151575],{"class":378},[41,170110,51540],{"class":275},[41,170112,1084],{"class":58},[41,170114,5068],{"class":275},[41,170116,170117],{"class":43,"line":83},[41,170118,33349],{"class":275},[41,170120,170121],{"class":43,"line":89},[41,170122,80],{"emptyLinePlaceholder":79},[41,170124,170125,170127,170129,170131,170133,170135,170137,170139,170141,170143,170145,170147,170149,170151,170153,170155,170157,170159],{"class":43,"line":96},[41,170126,107936],{"class":271},[41,170128,146894],{"class":58},[41,170130,276],{"class":275},[41,170132,169903],{"class":378},[41,170134,12573],{"class":275},[41,170136,152079],{"class":378},[41,170138,12573],{"class":275},[41,170140,146909],{"class":5354},[41,170142,321],{"class":271},[41,170144,146914],{"class":378},[41,170146,12573],{"class":275},[41,170148,169920],{"class":5354},[41,170150,321],{"class":271},[41,170152,7790],{"class":378},[41,170154,13852],{"class":275},[41,170156,31486],{"class":271},[41,170158,148256],{"class":5354},[41,170160,3877],{"class":275},[41,170162,170163,170166,170168,170170,170172,170174,170176,170178,170180],{"class":43,"line":104},[41,170164,170165],{"class":275},"    fieldnames ",[41,170167,321],{"class":271},[41,170169,52329],{"class":275},[41,170171,62782],{"class":378},[41,170173,12573],{"class":275},[41,170175,69227],{"class":378},[41,170177,12573],{"class":275},[41,170179,151575],{"class":378},[41,170181,33349],{"class":275},[41,170183,170184,170186,170188,170191,170193,170195,170198,170200],{"class":43,"line":176},[41,170185,169937],{"class":275},[41,170187,321],{"class":271},[41,170189,170190],{"class":275}," csv.DictWriter(",[41,170192,45457],{"class":5354},[41,170194,12573],{"class":275},[41,170196,170197],{"class":5354},"fieldnames",[41,170199,321],{"class":271},[41,170201,170202],{"class":275},"fieldnames)\n",[41,170204,170205],{"class":43,"line":184},[41,170206,170207],{"class":275},"    writer.writeheader()\n",[41,170209,170210],{"class":43,"line":1757},[41,170211,169951],{"class":275},[15,170213,170215],{"id":170214},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[20,170217,123395],{},[224,170219,170220,170223,170226],{},[227,170221,170222],{},"读取文本文件。",[227,170224,170225],{},"统计每个单词出现次数。",[227,170227,170228],{},"输出出现次数最多的前 10 个单词。",[20,170230,10173],{},[32,170232,170234],{"className":30481,"code":170233,"language":30483,"meta":37,"style":37},"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",[24,170235,170236,170246,170250,170263,170279,170283,170293,170302,170306,170318,170338,170347,170351,170369,170373,170403,170407,170423],{"__ignoreMap":37},[41,170237,170238,170240,170242,170244],{"class":43,"line":44},[41,170239,30840],{"class":271},[41,170241,108414],{"class":275},[41,170243,30495],{"class":271},[41,170245,108419],{"class":275},[41,170247,170248],{"class":43,"line":51},[41,170249,80],{"emptyLinePlaceholder":79},[41,170251,170252,170254,170256,170258,170261],{"class":43,"line":62},[41,170253,168414],{"class":275},[41,170255,321],{"class":271},[41,170257,108648],{"class":275},[41,170259,170260],{"class":378},"\"article.txt\"",[41,170262,282],{"class":275},[41,170264,170265,170267,170269,170271,170273,170275,170277],{"class":43,"line":70},[41,170266,168597],{"class":275},[41,170268,321],{"class":271},[41,170270,169474],{"class":275},[41,170272,146909],{"class":5354},[41,170274,321],{"class":271},[41,170276,146914],{"class":378},[41,170278,282],{"class":275},[41,170280,170281],{"class":43,"line":76},[41,170282,80],{"emptyLinePlaceholder":79},[41,170284,170285,170288,170290],{"class":43,"line":83},[41,170286,170287],{"class":275},"words ",[41,170289,321],{"class":271},[41,170291,170292],{"class":275}," content.lower().split()\n",[41,170294,170295,170298,170300],{"class":43,"line":89},[41,170296,170297],{"class":275},"counter ",[41,170299,321],{"class":271},[41,170301,87971],{"class":275},[41,170303,170304],{"class":43,"line":96},[41,170305,80],{"emptyLinePlaceholder":79},[41,170307,170308,170310,170313,170315],{"class":43,"line":104},[41,170309,3163],{"class":271},[41,170311,170312],{"class":275}," word ",[41,170314,26146],{"class":271},[41,170316,170317],{"class":275}," words:\n",[41,170319,170320,170323,170325,170328,170331,170333,170336],{"class":43,"line":176},[41,170321,170322],{"class":275},"    word ",[41,170324,321],{"class":271},[41,170326,170327],{"class":275}," word.strip(",[41,170329,170330],{"class":378},"\".,!?;:",[41,170332,156598],{"class":58},[41,170334,170335],{"class":378},"'()[]\"",[41,170337,282],{"class":275},[41,170339,170340,170342,170344],{"class":43,"line":184},[41,170341,3239],{"class":271},[41,170343,39033],{"class":271},[41,170345,170346],{"class":275}," word:\n",[41,170348,170349],{"class":43,"line":1757},[41,170350,148615],{"class":271},[41,170352,170353,170356,170358,170361,170363,170365,170367],{"class":43,"line":1763},[41,170354,170355],{"class":275},"    counter[word] ",[41,170357,321],{"class":271},[41,170359,170360],{"class":275}," counter.get(word, ",[41,170362,465],{"class":58},[41,170364,13852],{"class":275},[41,170366,754],{"class":271},[41,170368,55802],{"class":58},[41,170370,170371],{"class":43,"line":1768},[41,170372,80],{"emptyLinePlaceholder":79},[41,170374,170375,170378,170380,170382,170385,170387,170389,170391,170393,170395,170397,170399,170401],{"class":43,"line":1782},[41,170376,170377],{"class":275},"items ",[41,170379,321],{"class":271},[41,170381,163707],{"class":58},[41,170383,170384],{"class":275},"(counter.items(), ",[41,170386,154049],{"class":5354},[41,170388,154052],{"class":271},[41,170390,154055],{"class":275},[41,170392,26],{"class":58},[41,170394,112305],{"class":275},[41,170396,163631],{"class":5354},[41,170398,321],{"class":271},[41,170400,31579],{"class":58},[41,170402,282],{"class":275},[41,170404,170405],{"class":43,"line":1787},[41,170406,80],{"emptyLinePlaceholder":79},[41,170408,170409,170411,170414,170416,170419,170421],{"class":43,"line":1793},[41,170410,3163],{"class":271},[41,170412,170413],{"class":275}," word, count ",[41,170415,26146],{"class":271},[41,170417,170418],{"class":275}," items[:",[41,170420,719],{"class":58},[41,170422,165858],{"class":275},[41,170424,170425,170427],{"class":43,"line":1814},[41,170426,31402],{"class":58},[41,170428,170429],{"class":275},"(word, count)\n",[15,170431,170433],{"id":170432},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[32,170435,170437],{"className":30481,"code":170436,"language":30483,"meta":37,"style":37},"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",[24,170438,170439,170445,170455,170459,170471,170475,170479,170487,170497,170503,170507,170537,170547,170551,170555,170563,170593,170617,170621,170625,170633,170662,170667],{"__ignoreMap":37},[41,170440,170441,170443],{"class":43,"line":44},[41,170442,30495],{"class":271},[41,170444,147194],{"class":275},[41,170446,170447,170449,170451,170453],{"class":43,"line":51},[41,170448,30840],{"class":271},[41,170450,108414],{"class":275},[41,170452,30495],{"class":271},[41,170454,108419],{"class":275},[41,170456,170457],{"class":43,"line":62},[41,170458,80],{"emptyLinePlaceholder":79},[41,170460,170461,170463,170465,170467,170469],{"class":43,"line":70},[41,170462,151927],{"class":58},[41,170464,13702],{"class":271},[41,170466,108648],{"class":275},[41,170468,151934],{"class":378},[41,170470,282],{"class":275},[41,170472,170473],{"class":43,"line":76},[41,170474,80],{"emptyLinePlaceholder":79},[41,170476,170477],{"class":43,"line":83},[41,170478,80],{"emptyLinePlaceholder":79},[41,170480,170481,170483,170485],{"class":43,"line":89},[41,170482,32050],{"class":271},[41,170484,151951],{"class":54},[41,170486,32056],{"class":275},[41,170488,170489,170491,170493,170495],{"class":43,"line":96},[41,170490,3239],{"class":271},[41,170492,39033],{"class":271},[41,170494,151962],{"class":58},[41,170496,151965],{"class":275},[41,170498,170499,170501],{"class":43,"line":104},[41,170500,14890],{"class":271},[41,170502,51941],{"class":275},[41,170504,170505],{"class":43,"line":176},[41,170506,80],{"emptyLinePlaceholder":79},[41,170508,170509,170511,170513,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535],{"class":43,"line":184},[41,170510,34281],{"class":271},[41,170512,146894],{"class":58},[41,170514,276],{"class":275},[41,170516,151927],{"class":58},[41,170518,12573],{"class":275},[41,170520,146904],{"class":378},[41,170522,12573],{"class":275},[41,170524,146909],{"class":5354},[41,170526,321],{"class":271},[41,170528,146914],{"class":378},[41,170530,13852],{"class":275},[41,170532,31486],{"class":271},[41,170534,148256],{"class":5354},[41,170536,3877],{"class":275},[41,170538,170539,170541,170543,170545],{"class":43,"line":1757},[41,170540,14890],{"class":271},[41,170542,148267],{"class":275},[41,170544,45457],{"class":5354},[41,170546,282],{"class":275},[41,170548,170549],{"class":43,"line":1763},[41,170550,80],{"emptyLinePlaceholder":79},[41,170552,170553],{"class":43,"line":1768},[41,170554,80],{"emptyLinePlaceholder":79},[41,170556,170557,170559,170561],{"class":43,"line":1782},[41,170558,32050],{"class":271},[41,170560,152061],{"class":54},[41,170562,152064],{"class":275},[41,170564,170565,170567,170569,170571,170573,170575,170577,170579,170581,170583,170585,170587,170589,170591],{"class":43,"line":1787},[41,170566,34281],{"class":271},[41,170568,146894],{"class":58},[41,170570,276],{"class":275},[41,170572,151927],{"class":58},[41,170574,12573],{"class":275},[41,170576,152079],{"class":378},[41,170578,12573],{"class":275},[41,170580,146909],{"class":5354},[41,170582,321],{"class":271},[41,170584,146914],{"class":378},[41,170586,13852],{"class":275},[41,170588,31486],{"class":271},[41,170590,148256],{"class":5354},[41,170592,3877],{"class":275},[41,170594,170595,170597,170599,170601,170603,170605,170607,170609,170611,170613,170615],{"class":43,"line":1793},[41,170596,152100],{"class":275},[41,170598,45457],{"class":5354},[41,170600,12573],{"class":275},[41,170602,147240],{"class":5354},[41,170604,321],{"class":271},[41,170606,34090],{"class":58},[41,170608,12573],{"class":275},[41,170610,152115],{"class":5354},[41,170612,321],{"class":271},[41,170614,351],{"class":58},[41,170616,282],{"class":275},[41,170618,170619],{"class":43,"line":1814},[41,170620,80],{"emptyLinePlaceholder":79},[41,170622,170623],{"class":43,"line":1819},[41,170624,80],{"emptyLinePlaceholder":79},[41,170626,170627,170629,170631],{"class":43,"line":1833},[41,170628,159819],{"class":275},[41,170630,321],{"class":271},[41,170632,153145],{"class":275},[41,170634,170635,170638,170640,170642,170644,170646,170648,170650,170652,170654,170656,170658,170660],{"class":43,"line":1838},[41,170636,170637],{"class":275},"students.append({",[41,170639,62782],{"class":378},[41,170641,51540],{"class":275},[41,170643,149991],{"class":378},[41,170645,12573],{"class":275},[41,170647,69227],{"class":378},[41,170649,51540],{"class":275},[41,170651,923],{"class":58},[41,170653,12573],{"class":275},[41,170655,151575],{"class":378},[41,170657,51540],{"class":275},[41,170659,1262],{"class":58},[41,170661,165255],{"class":275},[41,170663,170664],{"class":43,"line":1867},[41,170665,170666],{"class":275},"save_students(students)\n",[41,170668,170669,170671,170673,170676],{"class":43,"line":1872},[41,170670,30518],{"class":58},[41,170672,276],{"class":275},[41,170674,170675],{"class":378},"\"保存成功\"",[41,170677,282],{"class":275},[15,170679,170681],{"id":170680},"_814-易错点","8.14 易错点",[224,170683,170684,170688,170694,170699,170706,170713],{},[227,170685,170686,168947],{},[24,170687,1068],{},[227,170689,170690,170691,28488],{},"读写中文要指定 ",[24,170692,170693],{},"encoding=\"utf-8\"",[227,170695,170696,170697,28488],{},"打开文件后要关闭，推荐使用 ",[24,170698,107936],{},[227,170700,170701,170702,170705],{},"读取大文件不要直接 ",[24,170703,170704],{},"read()"," 全部内容。",[227,170707,170708,170709,170712],{},"Windows 写 CSV 时建议加 ",[24,170710,170711],{},"newline=\"\"","，避免空行。",[227,170714,170715],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[15,170717,170719],{"id":170718},"_815-本章练习","8.15 本章练习",[224,170721,170722,170729,170734,170737,170740],{},[227,170723,170724,170725,170728],{},"写入一个 ",[24,170726,170727],{},"students.txt","，每行保存一个学生姓名。",[227,170730,104458,170731,170733],{},[24,170732,170727],{}," 并输出所有学生。",[227,170735,170736],{},"把学生列表保存为 JSON 文件。",[227,170738,170739],{},"从 JSON 文件读取学生数据，计算平均分。",[227,170741,170742,170743,170746,170747,170750],{},"写一个日志函数 ",[24,170744,170745],{},"write_log(message)","，每次调用向 ",[24,170748,170749],{},"app.log"," 追加一行。",[189,170752,170753],{},"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":37,"searchDepth":51,"depth":51,"links":170755},[170756,170757,170761,170762,170768,170769,170770,170771,170772,170773,170774,170775,170776,170777,170778],{"id":168267,"depth":51,"text":168268},{"id":168308,"depth":51,"text":168309,"children":170758},[170759,170760],{"id":168312,"depth":62,"text":168313},{"id":168346,"depth":62,"text":168347},{"id":168460,"depth":51,"text":168461},{"id":168553,"depth":51,"text":168554,"children":170763},[170764,170765,170766,170767],{"id":168557,"depth":62,"text":168558},{"id":168644,"depth":62,"text":168645},{"id":168714,"depth":62,"text":168715},{"id":168808,"depth":62,"text":168809},{"id":168878,"depth":51,"text":168879},{"id":168941,"depth":51,"text":168942},{"id":169102,"depth":51,"text":169103},{"id":169165,"depth":51,"text":169166},{"id":169281,"depth":51,"text":169282},{"id":169491,"depth":51,"text":169492},{"id":169803,"depth":51,"text":169804},{"id":170214,"depth":51,"text":170215},{"id":170432,"depth":51,"text":170433},{"id":170680,"depth":51,"text":170681},{"id":170718,"depth":51,"text":170719},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168259,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170785,"title":170786,"body":170787,"description":196,"extension":197,"meta":172973,"navigation":79,"path":172974,"seo":172975,"stem":172976,"__hash__":172977},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170788,"toc":172940},[170789,170792,170796,170799,170802,170894,170896,170915,170920,170924,170927,170930,170959,170966,170969,170973,170976,171005,171007,171059,171065,171118,171122,171220,171223,171290,171294,171351,171353,171359,171363,171368,171374,171465,171470,171474,171477,171555,171558,171596,171600,171718,171721,171725,171728,171773,171776,171780,171785,171791,171841,171844,171875,171879,171883,171913,171917,171952,171956,171991,172031,172035,172051,172054,172058,172062,172141,172145,172186,172190,172245,172249,172283,172287,172317,172326,172333,172339,172396,172399,172407,172410,172414,172421,172424,172430,172433,172450,172455,172459,172465,172478,172481,172518,172521,172532,172535,172549,172552,172566,172570,172577,172610,172613,172615,172621,172624,172628,172630,172636,172641,172814,172818,172881,172885,172909,172913,172937],[10,170790,170786],{"id":170791},"_9-异常模块与包",[15,170793,170795],{"id":170794},"_91-什么是异常","9.1 什么是异常",[20,170797,170798],{},"异常是程序运行过程中出现的错误。",[20,170800,170801],{},"常见异常：",[411,170803,170804,170813],{},[414,170805,170806],{},[417,170807,170808,170811],{},[420,170809,170810],{},"异常",[420,170812,25972],{},[458,170814,170815,170825,170835,170844,170854,170864,170874,170884],{},[417,170816,170817,170822],{},[463,170818,170819],{},[24,170820,170821],{},"NameError",[463,170823,170824],{},"使用了未定义变量",[417,170826,170827,170832],{},[463,170828,170829],{},[24,170830,170831],{},"TypeError",[463,170833,170834],{},"类型不匹配",[417,170836,170837,170841],{},[463,170838,170839],{},[24,170840,154937],{},[463,170842,170843],{},"值不合法",[417,170845,170846,170851],{},[463,170847,170848],{},[24,170849,170850],{},"IndexError",[463,170852,170853],{},"列表索引越界",[417,170855,170856,170861],{},[463,170857,170858],{},[24,170859,170860],{},"KeyError",[463,170862,170863],{},"字典 key 不存在",[417,170865,170866,170871],{},[463,170867,170868],{},[24,170869,170870],{},"FileNotFoundError",[463,170872,170873],{},"文件不存在",[417,170875,170876,170881],{},[463,170877,170878],{},[24,170879,170880],{},"ZeroDivisionError",[463,170882,170883],{},"除数为 0",[417,170885,170886,170891],{},[463,170887,170888],{},[24,170889,170890],{},"ImportError",[463,170892,170893],{},"导入失败",[20,170895,15273],{},[32,170897,170899],{"className":30481,"code":170898,"language":30483,"meta":37,"style":37},"num = int(\"abc\")\n",[24,170900,170901],{"__ignoreMap":37},[41,170902,170903,170905,170907,170909,170911,170913],{"class":43,"line":44},[41,170904,155890],{"class":275},[41,170906,321],{"class":271},[41,170908,2521],{"class":58},[41,170910,276],{"class":275},[41,170912,155983],{"class":378},[41,170914,282],{"class":275},[20,170916,170917,170918,28488],{},"会触发 ",[24,170919,154937],{},[15,170921,170923],{"id":170922},"_92-为什么要处理异常","9.2 为什么要处理异常",[20,170925,170926],{},"如果不处理异常，程序会直接终止。",[20,170928,170929],{},"例如用户输入年龄：",[32,170931,170933],{"className":30481,"code":170932,"language":30483,"meta":37,"style":37},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[24,170934,170935,170953],{"__ignoreMap":37},[41,170936,170937,170939,170941,170943,170945,170947,170949,170951],{"class":43,"line":44},[41,170938,146649],{"class":275},[41,170940,321],{"class":271},[41,170942,2521],{"class":58},[41,170944,276],{"class":275},[41,170946,53924],{"class":58},[41,170948,276],{"class":275},[41,170950,152497],{"class":378},[41,170952,30600],{"class":275},[41,170954,170955,170957],{"class":43,"line":51},[41,170956,30518],{"class":58},[41,170958,155864],{"class":275},[20,170960,170961,170962,170965],{},"用户输入 ",[24,170963,170964],{},"abc","，程序就会报错退出。",[20,170967,170968],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[15,170970,170972],{"id":170971},"_93-try-except","9.3 try except",[20,170974,170975],{},"基础语法：",[32,170977,170979],{"className":30481,"code":170978,"language":30483,"meta":37,"style":37},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[24,170980,170981,170988,170993,171000],{"__ignoreMap":37},[41,170982,170983,170986],{"class":43,"line":44},[41,170984,170985],{"class":271},"try",[41,170987,3877],{"class":275},[41,170989,170990],{"class":43,"line":51},[41,170991,170992],{"class":275},"    可能出错的代码\n",[41,170994,170995,170998],{"class":43,"line":62},[41,170996,170997],{"class":271},"except",[41,170999,3877],{"class":275},[41,171001,171002],{"class":43,"line":70},[41,171003,171004],{"class":275},"    出错后的处理代码\n",[20,171006,15273],{},[32,171008,171010],{"className":30481,"code":171009,"language":30483,"meta":37,"style":37},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[24,171011,171012,171018,171036,171042,171048],{"__ignoreMap":37},[41,171013,171014,171016],{"class":43,"line":44},[41,171015,170985],{"class":271},[41,171017,3877],{"class":275},[41,171019,171020,171022,171024,171026,171028,171030,171032,171034],{"class":43,"line":51},[41,171021,152489],{"class":275},[41,171023,321],{"class":271},[41,171025,2521],{"class":58},[41,171027,276],{"class":275},[41,171029,53924],{"class":58},[41,171031,276],{"class":275},[41,171033,152497],{"class":378},[41,171035,30600],{"class":275},[41,171037,171038,171040],{"class":43,"line":62},[41,171039,31402],{"class":58},[41,171041,155864],{"class":275},[41,171043,171044,171046],{"class":43,"line":70},[41,171045,170997],{"class":271},[41,171047,3877],{"class":275},[41,171049,171050,171052,171054,171057],{"class":43,"line":76},[41,171051,31402],{"class":58},[41,171053,276],{"class":275},[41,171055,171056],{"class":378},"\"年龄必须是数字\"",[41,171058,282],{"class":275},[20,171060,171061,171062,171064],{},"不建议裸写 ",[24,171063,170997],{},"，最好指定异常类型。",[32,171066,171068],{"className":30481,"code":171067,"language":30483,"meta":37,"style":37},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[24,171069,171070,171076,171094,171100,171108],{"__ignoreMap":37},[41,171071,171072,171074],{"class":43,"line":44},[41,171073,170985],{"class":271},[41,171075,3877],{"class":275},[41,171077,171078,171080,171082,171084,171086,171088,171090,171092],{"class":43,"line":51},[41,171079,152489],{"class":275},[41,171081,321],{"class":271},[41,171083,2521],{"class":58},[41,171085,276],{"class":275},[41,171087,53924],{"class":58},[41,171089,276],{"class":275},[41,171091,152497],{"class":378},[41,171093,30600],{"class":275},[41,171095,171096,171098],{"class":43,"line":62},[41,171097,31402],{"class":58},[41,171099,155864],{"class":275},[41,171101,171102,171104,171106],{"class":43,"line":70},[41,171103,170997],{"class":271},[41,171105,152329],{"class":58},[41,171107,3877],{"class":275},[41,171109,171110,171112,171114,171116],{"class":43,"line":76},[41,171111,31402],{"class":58},[41,171113,276],{"class":275},[41,171115,171056],{"class":378},[41,171117,282],{"class":275},[15,171119,171121],{"id":171120},"_94-捕获多个异常","9.4 捕获多个异常",[32,171123,171125],{"className":30481,"code":171124,"language":30483,"meta":37,"style":37},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[24,171126,171127,171133,171154,171174,171181,171189,171200,171209],{"__ignoreMap":37},[41,171128,171129,171131],{"class":43,"line":44},[41,171130,170985],{"class":271},[41,171132,3877],{"class":275},[41,171134,171135,171138,171140,171142,171144,171146,171148,171150,171152],{"class":43,"line":51},[41,171136,171137],{"class":275},"    nums ",[41,171139,321],{"class":271},[41,171141,52329],{"class":275},[41,171143,26],{"class":58},[41,171145,12573],{"class":275},[41,171147,351],{"class":58},[41,171149,12573],{"class":275},[41,171151,345],{"class":58},[41,171153,33349],{"class":275},[41,171155,171156,171159,171161,171163,171165,171167,171169,171172],{"class":43,"line":62},[41,171157,171158],{"class":275},"    index ",[41,171160,321],{"class":271},[41,171162,2521],{"class":58},[41,171164,276],{"class":275},[41,171166,53924],{"class":58},[41,171168,276],{"class":275},[41,171170,171171],{"class":378},"\"请输入索引:\"",[41,171173,30600],{"class":275},[41,171175,171176,171178],{"class":43,"line":70},[41,171177,31402],{"class":58},[41,171179,171180],{"class":275},"(nums[index])\n",[41,171182,171183,171185,171187],{"class":43,"line":76},[41,171184,170997],{"class":271},[41,171186,152329],{"class":58},[41,171188,3877],{"class":275},[41,171190,171191,171193,171195,171198],{"class":43,"line":83},[41,171192,31402],{"class":58},[41,171194,276],{"class":275},[41,171196,171197],{"class":378},"\"索引必须是整数\"",[41,171199,282],{"class":275},[41,171201,171202,171204,171207],{"class":43,"line":89},[41,171203,170997],{"class":271},[41,171205,171206],{"class":58}," IndexError",[41,171208,3877],{"class":275},[41,171210,171211,171213,171215,171218],{"class":43,"line":96},[41,171212,31402],{"class":58},[41,171214,276],{"class":275},[41,171216,171217],{"class":378},"\"索引越界\"",[41,171219,282],{"class":275},[20,171221,171222],{},"多个异常使用相同处理逻辑：",[32,171224,171226],{"className":30481,"code":171225,"language":30483,"meta":37,"style":37},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[24,171227,171228,171234,171252,171265,171279],{"__ignoreMap":37},[41,171229,171230,171232],{"class":43,"line":44},[41,171231,170985],{"class":271},[41,171233,3877],{"class":275},[41,171235,171236,171238,171240,171242,171244,171246,171248,171250],{"class":43,"line":51},[41,171237,45696],{"class":275},[41,171239,321],{"class":271},[41,171241,2521],{"class":58},[41,171243,276],{"class":275},[41,171245,53924],{"class":58},[41,171247,276],{"class":275},[41,171249,155899],{"class":378},[41,171251,30600],{"class":275},[41,171253,171254,171256,171258,171260,171262],{"class":43,"line":62},[41,171255,31402],{"class":58},[41,171257,276],{"class":275},[41,171259,719],{"class":58},[41,171261,156149],{"class":271},[41,171263,171264],{"class":275}," num)\n",[41,171266,171267,171269,171271,171273,171275,171277],{"class":43,"line":70},[41,171268,170997],{"class":271},[41,171270,1798],{"class":275},[41,171272,154937],{"class":58},[41,171274,12573],{"class":275},[41,171276,170880],{"class":58},[41,171278,30889],{"class":275},[41,171280,171281,171283,171285,171288],{"class":43,"line":76},[41,171282,31402],{"class":58},[41,171284,276],{"class":275},[41,171286,171287],{"class":378},"\"输入不合法\"",[41,171289,282],{"class":275},[15,171291,171293],{"id":171292},"_95-获取异常信息","9.5 获取异常信息",[32,171295,171297],{"className":30481,"code":171296,"language":30483,"meta":37,"style":37},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[24,171298,171299,171305,171319,171330],{"__ignoreMap":37},[41,171300,171301,171303],{"class":43,"line":44},[41,171302,170985],{"class":271},[41,171304,3877],{"class":275},[41,171306,171307,171309,171311,171313,171315,171317],{"class":43,"line":51},[41,171308,45696],{"class":275},[41,171310,321],{"class":271},[41,171312,2521],{"class":58},[41,171314,276],{"class":275},[41,171316,155983],{"class":378},[41,171318,282],{"class":275},[41,171320,171321,171323,171325,171327],{"class":43,"line":62},[41,171322,170997],{"class":271},[41,171324,152329],{"class":58},[41,171326,64707],{"class":271},[41,171328,171329],{"class":275}," e:\n",[41,171331,171332,171334,171336,171338,171341,171343,171345,171347,171349],{"class":43,"line":70},[41,171333,31402],{"class":58},[41,171335,276],{"class":275},[41,171337,327],{"class":271},[41,171339,171340],{"class":378},"\"出错了:",[41,171342,1169],{"class":58},[41,171344,348],{"class":275},[41,171346,1219],{"class":58},[41,171348,524],{"class":378},[41,171350,282],{"class":275},[20,171352,146560],{},[32,171354,171357],{"className":171355,"code":171356,"language":5325,"meta":37},[5323],"出错了:invalid literal for int() with base 10: 'abc'\n",[24,171358,171356],{"__ignoreMap":37},[15,171360,171362],{"id":171361},"_96-else和finally","9.6 else和finally",[20,171364,171365,171367],{},[24,171366,1841],{},"：没有异常时执行。",[20,171369,171370,171373],{},[24,171371,171372],{},"finally","：无论是否异常都会执行。",[32,171375,171377],{"className":30481,"code":171376,"language":30483,"meta":37,"style":37},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[24,171378,171379,171385,171403,171411,171421,171427,171448,171454],{"__ignoreMap":37},[41,171380,171381,171383],{"class":43,"line":44},[41,171382,170985],{"class":271},[41,171384,3877],{"class":275},[41,171386,171387,171389,171391,171393,171395,171397,171399,171401],{"class":43,"line":51},[41,171388,45696],{"class":275},[41,171390,321],{"class":271},[41,171392,2521],{"class":58},[41,171394,276],{"class":275},[41,171396,53924],{"class":58},[41,171398,276],{"class":275},[41,171400,155899],{"class":378},[41,171402,30600],{"class":275},[41,171404,171405,171407,171409],{"class":43,"line":62},[41,171406,170997],{"class":271},[41,171408,152329],{"class":58},[41,171410,3877],{"class":275},[41,171412,171413,171415,171417,171419],{"class":43,"line":70},[41,171414,31402],{"class":58},[41,171416,276],{"class":275},[41,171418,153317],{"class":378},[41,171420,282],{"class":275},[41,171422,171423,171425],{"class":43,"line":76},[41,171424,1841],{"class":271},[41,171426,3877],{"class":275},[41,171428,171429,171431,171433,171435,171438,171440,171442,171444,171446],{"class":43,"line":83},[41,171430,31402],{"class":58},[41,171432,276],{"class":275},[41,171434,327],{"class":271},[41,171436,171437],{"class":378},"\"输入正确:",[41,171439,1169],{"class":58},[41,171441,1805],{"class":275},[41,171443,1219],{"class":58},[41,171445,524],{"class":378},[41,171447,282],{"class":275},[41,171449,171450,171452],{"class":43,"line":89},[41,171451,171372],{"class":271},[41,171453,3877],{"class":275},[41,171455,171456,171458,171460,171463],{"class":43,"line":96},[41,171457,31402],{"class":58},[41,171459,276],{"class":275},[41,171461,171462],{"class":378},"\"程序结束\"",[41,171464,282],{"class":275},[20,171466,171467,171469],{},[24,171468,171372],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[15,171471,171473],{"id":171472},"_97-抛出异常","9.7 抛出异常",[20,171475,171476],{},"程序可以主动抛出异常。",[32,171478,171480],{"className":30481,"code":171479,"language":30483,"meta":37,"style":37},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[24,171481,171482,171491,171503,171516,171536,171540,171544],{"__ignoreMap":37},[41,171483,171484,171486,171489],{"class":43,"line":44},[41,171485,32050],{"class":271},[41,171487,171488],{"class":54}," set_age",[41,171490,161518],{"class":275},[41,171492,171493,171495,171497,171499,171501],{"class":43,"line":51},[41,171494,3239],{"class":271},[41,171496,15845],{"class":275},[41,171498,1183],{"class":271},[41,171500,4231],{"class":58},[41,171502,3877],{"class":275},[41,171504,171505,171507,171509,171511,171514],{"class":43,"line":62},[41,171506,103535],{"class":271},[41,171508,152329],{"class":58},[41,171510,276],{"class":275},[41,171512,171513],{"class":378},"\"年龄不能为负数\"",[41,171515,282],{"class":275},[41,171517,171518,171520,171522,171524,171526,171528,171530,171532,171534],{"class":43,"line":70},[41,171519,31402],{"class":58},[41,171521,276],{"class":275},[41,171523,327],{"class":271},[41,171525,162086],{"class":378},[41,171527,1169],{"class":58},[41,171529,70324],{"class":275},[41,171531,1219],{"class":58},[41,171533,524],{"class":378},[41,171535,282],{"class":275},[41,171537,171538],{"class":43,"line":76},[41,171539,80],{"emptyLinePlaceholder":79},[41,171541,171542],{"class":43,"line":83},[41,171543,80],{"emptyLinePlaceholder":79},[41,171545,171546,171549,171551,171553],{"class":43,"line":89},[41,171547,171548],{"class":275},"set_age(",[41,171550,805],{"class":271},[41,171552,26],{"class":58},[41,171554,282],{"class":275},[20,171556,171557],{},"调用者可以捕获：",[32,171559,171561],{"className":30481,"code":171560,"language":30483,"meta":37,"style":37},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[24,171562,171563,171569,171580,171590],{"__ignoreMap":37},[41,171564,171565,171567],{"class":43,"line":44},[41,171566,170985],{"class":271},[41,171568,3877],{"class":275},[41,171570,171571,171574,171576,171578],{"class":43,"line":51},[41,171572,171573],{"class":275},"    set_age(",[41,171575,805],{"class":271},[41,171577,26],{"class":58},[41,171579,282],{"class":275},[41,171581,171582,171584,171586,171588],{"class":43,"line":62},[41,171583,170997],{"class":271},[41,171585,152329],{"class":58},[41,171587,64707],{"class":271},[41,171589,171329],{"class":275},[41,171591,171592,171594],{"class":43,"line":70},[41,171593,31402],{"class":58},[41,171595,67102],{"class":275},[15,171597,171599],{"id":171598},"_98-自定义异常","9.8 自定义异常",[32,171601,171603],{"className":30481,"code":171602,"language":30483,"meta":37,"style":37},"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",[24,171604,171605,171619,171623,171627,171631,171639,171649,171660,171670,171674,171678,171684,171701,171712],{"__ignoreMap":37},[41,171606,171607,171609,171612,171614,171617],{"class":43,"line":44},[41,171608,14832],{"class":271},[41,171610,171611],{"class":54}," BalanceNotEnoughError",[41,171613,276],{"class":275},[41,171615,171616],{"class":58},"Exception",[41,171618,30889],{"class":275},[41,171620,171621],{"class":43,"line":51},[41,171622,149640],{"class":271},[41,171624,171625],{"class":43,"line":62},[41,171626,80],{"emptyLinePlaceholder":79},[41,171628,171629],{"class":43,"line":70},[41,171630,80],{"emptyLinePlaceholder":79},[41,171632,171633,171635,171637],{"class":43,"line":76},[41,171634,32050],{"class":271},[41,171636,150289],{"class":54},[41,171638,162915],{"class":275},[41,171640,171641,171643,171645,171647],{"class":43,"line":83},[41,171642,3239],{"class":271},[41,171644,150245],{"class":275},[41,171646,1233],{"class":271},[41,171648,162692],{"class":275},[41,171650,171651,171653,171656,171658],{"class":43,"line":89},[41,171652,103535],{"class":271},[41,171654,171655],{"class":275}," BalanceNotEnoughError(",[41,171657,150340],{"class":378},[41,171659,282],{"class":275},[41,171661,171662,171664,171666,171668],{"class":43,"line":96},[41,171663,4228],{"class":271},[41,171665,162922],{"class":275},[41,171667,805],{"class":271},[41,171669,150278],{"class":275},[41,171671,171672],{"class":43,"line":104},[41,171673,80],{"emptyLinePlaceholder":79},[41,171675,171676],{"class":43,"line":176},[41,171677,80],{"emptyLinePlaceholder":79},[41,171679,171680,171682],{"class":43,"line":184},[41,171681,170985],{"class":271},[41,171683,3877],{"class":275},[41,171685,171686,171688,171690,171693,171695,171697,171699],{"class":43,"line":1757},[41,171687,162593],{"class":275},[41,171689,321],{"class":271},[41,171691,171692],{"class":275}," withdraw(",[41,171694,584],{"class":58},[41,171696,12573],{"class":275},[41,171698,1862],{"class":58},[41,171700,282],{"class":275},[41,171702,171703,171705,171708,171710],{"class":43,"line":1763},[41,171704,170997],{"class":271},[41,171706,171707],{"class":275}," BalanceNotEnoughError ",[41,171709,31486],{"class":271},[41,171711,171329],{"class":275},[41,171713,171714,171716],{"class":43,"line":1768},[41,171715,31402],{"class":58},[41,171717,67102],{"class":275},[20,171719,171720],{},"入门阶段大多数情况使用内置异常即可。",[15,171722,171724],{"id":171723},"_99-traceback","9.9 traceback",[20,171726,171727],{},"调试时可以输出完整异常堆栈。",[32,171729,171731],{"className":30481,"code":171730,"language":30483,"meta":37,"style":37},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[24,171732,171733,171740,171744,171750,171760,171768],{"__ignoreMap":37},[41,171734,171735,171737],{"class":43,"line":44},[41,171736,30495],{"class":271},[41,171738,171739],{"class":275}," traceback\n",[41,171741,171742],{"class":43,"line":51},[41,171743,80],{"emptyLinePlaceholder":79},[41,171745,171746,171748],{"class":43,"line":62},[41,171747,170985],{"class":271},[41,171749,3877],{"class":275},[41,171751,171752,171754,171756,171758],{"class":43,"line":70},[41,171753,2124],{"class":58},[41,171755,276],{"class":275},[41,171757,155983],{"class":378},[41,171759,282],{"class":275},[41,171761,171762,171764,171766],{"class":43,"line":76},[41,171763,170997],{"class":271},[41,171765,152329],{"class":58},[41,171767,3877],{"class":275},[41,171769,171770],{"class":43,"line":83},[41,171771,171772],{"class":275},"    traceback.print_exc()\n",[20,171774,171775],{},"日志系统中常把异常堆栈记录到文件。",[15,171777,171779],{"id":171778},"_910-什么是模块","9.10 什么是模块",[20,171781,171782,171783,126086],{},"模块就是一个 ",[24,171784,146455],{},[20,171786,171787,171788,24755],{},"例如创建 ",[24,171789,171790],{},"my_math.py",[32,171792,171794],{"className":30481,"code":171793,"language":30483,"meta":37,"style":37},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[24,171795,171796,171804,171814,171818,171822,171831],{"__ignoreMap":37},[41,171797,171798,171800,171802],{"class":43,"line":44},[41,171799,32050],{"class":271},[41,171801,5347],{"class":54},[41,171803,151196],{"class":275},[41,171805,171806,171808,171810,171812],{"class":43,"line":51},[41,171807,4228],{"class":271},[41,171809,11007],{"class":275},[41,171811,754],{"class":271},[41,171813,151207],{"class":275},[41,171815,171816],{"class":43,"line":62},[41,171817,80],{"emptyLinePlaceholder":79},[41,171819,171820],{"class":43,"line":70},[41,171821,80],{"emptyLinePlaceholder":79},[41,171823,171824,171826,171829],{"class":43,"line":76},[41,171825,32050],{"class":271},[41,171827,171828],{"class":54}," sub",[41,171830,151196],{"class":275},[41,171832,171833,171835,171837,171839],{"class":43,"line":83},[41,171834,4228],{"class":271},[41,171836,11007],{"class":275},[41,171838,805],{"class":271},[41,171840,151207],{"class":275},[20,171842,171843],{},"在另一个文件中导入：",[32,171845,171847],{"className":30481,"code":171846,"language":30483,"meta":37,"style":37},"import my_math\n\nprint(my_math.add(1, 2))\n",[24,171848,171849,171856,171860],{"__ignoreMap":37},[41,171850,171851,171853],{"class":43,"line":44},[41,171852,30495],{"class":271},[41,171854,171855],{"class":275}," my_math\n",[41,171857,171858],{"class":43,"line":51},[41,171859,80],{"emptyLinePlaceholder":79},[41,171861,171862,171864,171867,171869,171871,171873],{"class":43,"line":62},[41,171863,30518],{"class":58},[41,171865,171866],{"class":275},"(my_math.add(",[41,171868,26],{"class":58},[41,171870,12573],{"class":275},[41,171872,351],{"class":58},[41,171874,30600],{"class":275},[15,171876,171878],{"id":171877},"_911-import导入","9.11 import导入",[241,171880,171882],{"id":171881},"_9111-导入模块","9.11.1 导入模块",[32,171884,171886],{"className":30481,"code":171885,"language":30483,"meta":37,"style":37},"import random\n\nprint(random.randint(1, 10))\n",[24,171887,171888,171894,171898],{"__ignoreMap":37},[41,171889,171890,171892],{"class":43,"line":44},[41,171891,30495],{"class":271},[41,171893,45431],{"class":275},[41,171895,171896],{"class":43,"line":51},[41,171897,80],{"emptyLinePlaceholder":79},[41,171899,171900,171902,171905,171907,171909,171911],{"class":43,"line":62},[41,171901,30518],{"class":58},[41,171903,171904],{"class":275},"(random.randint(",[41,171906,26],{"class":58},[41,171908,12573],{"class":275},[41,171910,719],{"class":58},[41,171912,30600],{"class":275},[241,171914,171916],{"id":171915},"_9112-导入指定内容","9.11.2 导入指定内容",[32,171918,171920],{"className":30481,"code":171919,"language":30483,"meta":37,"style":37},"from random import randint\n\nprint(randint(1, 10))\n",[24,171921,171922,171933,171937],{"__ignoreMap":37},[41,171923,171924,171926,171928,171930],{"class":43,"line":44},[41,171925,30840],{"class":271},[41,171927,57899],{"class":275},[41,171929,30495],{"class":271},[41,171931,171932],{"class":275}," randint\n",[41,171934,171935],{"class":43,"line":51},[41,171936,80],{"emptyLinePlaceholder":79},[41,171938,171939,171941,171944,171946,171948,171950],{"class":43,"line":62},[41,171940,30518],{"class":58},[41,171942,171943],{"class":275},"(randint(",[41,171945,26],{"class":58},[41,171947,12573],{"class":275},[41,171949,719],{"class":58},[41,171951,30600],{"class":275},[241,171953,171955],{"id":171954},"_9113-起别名","9.11.3 起别名",[32,171957,171959],{"className":30481,"code":171958,"language":30483,"meta":37,"style":37},"import random as rd\n\nprint(rd.randint(1, 10))\n",[24,171960,171961,171972,171976],{"__ignoreMap":37},[41,171962,171963,171965,171967,171969],{"class":43,"line":44},[41,171964,30495],{"class":271},[41,171966,57899],{"class":275},[41,171968,31486],{"class":271},[41,171970,171971],{"class":275}," rd\n",[41,171973,171974],{"class":43,"line":51},[41,171975,80],{"emptyLinePlaceholder":79},[41,171977,171978,171980,171983,171985,171987,171989],{"class":43,"line":62},[41,171979,30518],{"class":58},[41,171981,171982],{"class":275},"(rd.randint(",[41,171984,26],{"class":58},[41,171986,12573],{"class":275},[41,171988,719],{"class":58},[41,171990,30600],{"class":275},[32,171992,171994],{"className":30481,"code":171993,"language":30483,"meta":37,"style":37},"from random import randint as rint\n\nprint(rint(1, 10))\n",[24,171995,171996,172012,172016],{"__ignoreMap":37},[41,171997,171998,172000,172002,172004,172007,172009],{"class":43,"line":44},[41,171999,30840],{"class":271},[41,172001,57899],{"class":275},[41,172003,30495],{"class":271},[41,172005,172006],{"class":275}," randint ",[41,172008,31486],{"class":271},[41,172010,172011],{"class":275}," rint\n",[41,172013,172014],{"class":43,"line":51},[41,172015,80],{"emptyLinePlaceholder":79},[41,172017,172018,172020,172023,172025,172027,172029],{"class":43,"line":62},[41,172019,30518],{"class":58},[41,172021,172022],{"class":275},"(rint(",[41,172024,26],{"class":58},[41,172026,12573],{"class":275},[41,172028,719],{"class":58},[41,172030,30600],{"class":275},[241,172032,172034],{"id":172033},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[32,172036,172038],{"className":30481,"code":172037,"language":30483,"meta":37,"style":37},"from random import *\n",[24,172039,172040],{"__ignoreMap":37},[41,172041,172042,172044,172046,172048],{"class":43,"line":44},[41,172043,30840],{"class":271},[41,172045,57899],{"class":275},[41,172047,30495],{"class":271},[41,172049,172050],{"class":271}," *\n",[20,172052,172053],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[15,172055,172057],{"id":172056},"_912-常用内置模块","9.12 常用内置模块",[241,172059,172061],{"id":172060},"_9121-random","9.12.1 random",[32,172063,172065],{"className":30481,"code":172064,"language":30483,"meta":37,"style":37},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[24,172066,172067,172073,172077,172091,172110],{"__ignoreMap":37},[41,172068,172069,172071],{"class":43,"line":44},[41,172070,30495],{"class":271},[41,172072,45431],{"class":275},[41,172074,172075],{"class":43,"line":51},[41,172076,80],{"emptyLinePlaceholder":79},[41,172078,172079,172081,172083,172085,172087,172089],{"class":43,"line":62},[41,172080,30518],{"class":58},[41,172082,171904],{"class":275},[41,172084,26],{"class":58},[41,172086,12573],{"class":275},[41,172088,719],{"class":58},[41,172090,30600],{"class":275},[41,172092,172093,172095,172098,172100,172102,172104,172106,172108],{"class":43,"line":70},[41,172094,30518],{"class":58},[41,172096,172097],{"class":275},"(random.choice([",[41,172099,149991],{"class":378},[41,172101,12573],{"class":275},[41,172103,151039],{"class":378},[41,172105,12573],{"class":275},[41,172107,159834],{"class":378},[41,172109,33246],{"class":275},[41,172111,172112,172114,172117,172119,172121,172123,172125,172127,172129,172131,172133,172135,172137,172139],{"class":43,"line":76},[41,172113,30518],{"class":58},[41,172115,172116],{"class":275},"(random.sample([",[41,172118,26],{"class":58},[41,172120,12573],{"class":275},[41,172122,351],{"class":58},[41,172124,12573],{"class":275},[41,172126,345],{"class":58},[41,172128,12573],{"class":275},[41,172130,566],{"class":58},[41,172132,12573],{"class":275},[41,172134,592],{"class":58},[41,172136,112305],{"class":275},[41,172138,351],{"class":58},[41,172140,30600],{"class":275},[241,172142,172144],{"id":172143},"_9122-time","9.12.2 time",[32,172146,172148],{"className":30481,"code":172147,"language":30483,"meta":37,"style":37},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[24,172149,172150,172156,172160,172167,172175],{"__ignoreMap":37},[41,172151,172152,172154],{"class":43,"line":44},[41,172153,30495],{"class":271},[41,172155,31932],{"class":275},[41,172157,172158],{"class":43,"line":51},[41,172159,80],{"emptyLinePlaceholder":79},[41,172161,172162,172164],{"class":43,"line":62},[41,172163,30518],{"class":58},[41,172165,172166],{"class":275},"(time.time())\n",[41,172168,172169,172171,172173],{"class":43,"line":70},[41,172170,95174],{"class":275},[41,172172,26],{"class":58},[41,172174,282],{"class":275},[41,172176,172177,172179,172181,172184],{"class":43,"line":76},[41,172178,30518],{"class":58},[41,172180,276],{"class":275},[41,172182,172183],{"class":378},"\"1秒后执行\"",[41,172185,282],{"class":275},[241,172187,172189],{"id":172188},"_9123-datetime","9.12.3 datetime",[32,172191,172193],{"className":30481,"code":172192,"language":30483,"meta":37,"style":37},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[24,172194,172195,172207,172211,172221,172228],{"__ignoreMap":37},[41,172196,172197,172199,172202,172204],{"class":43,"line":44},[41,172198,30840],{"class":271},[41,172200,172201],{"class":275}," datetime ",[41,172203,30495],{"class":271},[41,172205,172206],{"class":275}," datetime\n",[41,172208,172209],{"class":43,"line":51},[41,172210,80],{"emptyLinePlaceholder":79},[41,172212,172213,172216,172218],{"class":43,"line":62},[41,172214,172215],{"class":275},"now ",[41,172217,321],{"class":271},[41,172219,172220],{"class":275}," datetime.now()\n",[41,172222,172223,172225],{"class":43,"line":70},[41,172224,30518],{"class":58},[41,172226,172227],{"class":275},"(now)\n",[41,172229,172230,172232,172235,172238,172240,172243],{"class":43,"line":76},[41,172231,30518],{"class":58},[41,172233,172234],{"class":275},"(now.strftime(",[41,172236,172237],{"class":378},"\"%Y-%m-",[41,172239,156794],{"class":58},[41,172241,172242],{"class":378}," %H:%M:%S\"",[41,172244,30600],{"class":275},[241,172246,172248],{"id":172247},"_9124-os","9.12.4 os",[32,172250,172252],{"className":30481,"code":172251,"language":30483,"meta":37,"style":37},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[24,172253,172254,172260,172264,172271],{"__ignoreMap":37},[41,172255,172256,172258],{"class":43,"line":44},[41,172257,30495],{"class":271},[41,172259,45408],{"class":275},[41,172261,172262],{"class":43,"line":51},[41,172263,80],{"emptyLinePlaceholder":79},[41,172265,172266,172268],{"class":43,"line":62},[41,172267,30518],{"class":58},[41,172269,172270],{"class":275},"(os.getcwd())\n",[41,172272,172273,172275,172278,172281],{"class":43,"line":70},[41,172274,30518],{"class":58},[41,172276,172277],{"class":275},"(os.listdir(",[41,172279,172280],{"class":378},"\".\"",[41,172282,30600],{"class":275},[241,172284,172286],{"id":172285},"_9125-sys","9.12.5 sys",[32,172288,172290],{"className":30481,"code":172289,"language":30483,"meta":37,"style":37},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[24,172291,172292,172299,172303,172310],{"__ignoreMap":37},[41,172293,172294,172296],{"class":43,"line":44},[41,172295,30495],{"class":271},[41,172297,172298],{"class":275}," sys\n",[41,172300,172301],{"class":43,"line":51},[41,172302,80],{"emptyLinePlaceholder":79},[41,172304,172305,172307],{"class":43,"line":62},[41,172306,30518],{"class":58},[41,172308,172309],{"class":275},"(sys.version)\n",[41,172311,172312,172314],{"class":43,"line":70},[41,172313,30518],{"class":58},[41,172315,172316],{"class":275},"(sys.path)\n",[15,172318,172320,172321,172323,172324,524],{"id":172319},"_913-if-name-main","9.13 if ",[423,172322,79913],{}," == \"",[423,172325,102161],{},[20,172327,172328,172329,172332],{},"模块被直接运行和被导入时，",[24,172330,172331],{},"__name__"," 的值不同。",[20,172334,172335,172336,24755],{},"创建 ",[24,172337,172338],{},"my_module.py",[32,172340,172342],{"className":30481,"code":172341,"language":30483,"meta":37,"style":37},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[24,172343,172344,172352,172362,172366,172370,172382],{"__ignoreMap":37},[41,172345,172346,172348,172350],{"class":43,"line":44},[41,172347,32050],{"class":271},[41,172349,5347],{"class":54},[41,172351,151196],{"class":275},[41,172353,172354,172356,172358,172360],{"class":43,"line":51},[41,172355,4228],{"class":271},[41,172357,11007],{"class":275},[41,172359,754],{"class":271},[41,172361,151207],{"class":275},[41,172363,172364],{"class":43,"line":62},[41,172365,80],{"emptyLinePlaceholder":79},[41,172367,172368],{"class":43,"line":70},[41,172369,80],{"emptyLinePlaceholder":79},[41,172371,172372,172374,172376,172378,172380],{"class":43,"line":76},[41,172373,1672],{"class":271},[41,172375,31323],{"class":58},[41,172377,101662],{"class":271},[41,172379,101665],{"class":378},[41,172381,3877],{"class":275},[41,172383,172384,172386,172388,172390,172392,172394],{"class":43,"line":83},[41,172385,31402],{"class":58},[41,172387,166703],{"class":275},[41,172389,26],{"class":58},[41,172391,12573],{"class":275},[41,172393,351],{"class":58},[41,172395,30600],{"class":275},[20,172397,172398],{},"作用：",[224,172400,172401,172404],{},[227,172402,172403],{},"直接运行该文件时，执行测试代码。",[227,172405,172406],{},"被其他文件导入时，不执行测试代码。",[20,172408,172409],{},"这是写模块时很常用的习惯。",[15,172411,172413],{"id":172412},"_914-包","9.14 包",[20,172415,172416,172417,172420],{},"包是包含 ",[24,172418,172419],{},"__init__.py"," 的目录，用于组织多个模块。",[20,172422,172423],{},"目录结构：",[32,172425,172428],{"className":172426,"code":172427,"language":5325,"meta":37},[5323],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[24,172429,172427],{"__ignoreMap":37},[20,172431,172432],{},"导入：",[32,172434,172436],{"className":30481,"code":172435,"language":30483,"meta":37,"style":37},"from utils.file_utils import read_file\n",[24,172437,172438],{"__ignoreMap":37},[41,172439,172440,172442,172445,172447],{"class":43,"line":44},[41,172441,30840],{"class":271},[41,172443,172444],{"class":275}," utils.file_utils ",[41,172446,30495],{"class":271},[41,172448,172449],{"class":275}," read_file\n",[20,172451,172452,172454],{},[24,172453,172419],{}," 可以为空，也可以写包初始化逻辑。",[15,172456,172458],{"id":172457},"_915-第三方包","9.15 第三方包",[20,172460,172461,172462,172464],{},"第三方包通过 ",[24,172463,23967],{}," 安装。",[32,172466,172468],{"className":34,"code":172467,"language":36,"meta":37,"style":37},"pip install requests\n",[24,172469,172470],{"__ignoreMap":37},[41,172471,172472,172474,172476],{"class":43,"line":44},[41,172473,23967],{"class":54},[41,172475,23970],{"class":378},[41,172477,146201],{"class":378},[20,172479,172480],{},"使用：",[32,172482,172484],{"className":30481,"code":172483,"language":30483,"meta":37,"style":37},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[24,172485,172486,172492,172496,172511],{"__ignoreMap":37},[41,172487,172488,172490],{"class":43,"line":44},[41,172489,30495],{"class":271},[41,172491,146201],{"class":275},[41,172493,172494],{"class":43,"line":51},[41,172495,80],{"emptyLinePlaceholder":79},[41,172497,172498,172501,172503,172506,172509],{"class":43,"line":62},[41,172499,172500],{"class":275},"response ",[41,172502,321],{"class":271},[41,172504,172505],{"class":275}," requests.get(",[41,172507,172508],{"class":378},"\"https:\u002F\u002Fwww.example.com\"",[41,172510,282],{"class":275},[41,172512,172513,172515],{"class":43,"line":70},[41,172514,30518],{"class":58},[41,172516,172517],{"class":275},"(response.status_code)\n",[20,172519,172520],{},"查看已安装包：",[32,172522,172524],{"className":34,"code":172523,"language":36,"meta":37,"style":37},"pip list\n",[24,172525,172526],{"__ignoreMap":37},[41,172527,172528,172530],{"class":43,"line":44},[41,172529,23967],{"class":54},[41,172531,119058],{"class":378},[20,172533,172534],{},"导出项目依赖：",[32,172536,172537],{"className":34,"code":146396,"language":36,"meta":37,"style":37},[24,172538,172539],{"__ignoreMap":37},[41,172540,172541,172543,172545,172547],{"class":43,"line":44},[41,172542,23967],{"class":54},[41,172544,146405],{"class":378},[41,172546,26325],{"class":271},[41,172548,146410],{"class":378},[20,172550,172551],{},"安装项目依赖：",[32,172553,172554],{"className":34,"code":146416,"language":36,"meta":37,"style":37},[24,172555,172556],{"__ignoreMap":37},[41,172557,172558,172560,172562,172564],{"class":43,"line":44},[41,172559,23967],{"class":54},[41,172561,23970],{"class":378},[41,172563,119742],{"class":58},[41,172565,146410],{"class":378},[15,172567,172569],{"id":172568},"_916-模块搜索路径","9.16 模块搜索路径",[20,172571,172572,172573,172576],{},"Python 导入模块时会在 ",[24,172574,172575],{},"sys.path"," 中查找。",[32,172578,172580],{"className":30481,"code":172579,"language":30483,"meta":37,"style":37},"import sys\n\nfor path in sys.path:\n    print(path)\n",[24,172581,172582,172588,172592,172604],{"__ignoreMap":37},[41,172583,172584,172586],{"class":43,"line":44},[41,172585,30495],{"class":271},[41,172587,172298],{"class":275},[41,172589,172590],{"class":43,"line":51},[41,172591,80],{"emptyLinePlaceholder":79},[41,172593,172594,172596,172599,172601],{"class":43,"line":62},[41,172595,3163],{"class":271},[41,172597,172598],{"class":275}," path ",[41,172600,26146],{"class":271},[41,172602,172603],{"class":275}," sys.path:\n",[41,172605,172606,172608],{"class":43,"line":70},[41,172607,31402],{"class":58},[41,172609,169332],{"class":275},[20,172611,172612],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[20,172614,157726],{},[32,172616,172619],{"className":172617,"code":172618,"language":5325,"meta":37},[5323],"random.py\njson.py\ntime.py\n",[24,172620,172618],{"__ignoreMap":37},[20,172622,172623],{},"这些文件名可能导致导入异常。",[15,172625,172627],{"id":172626},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[20,172629,172423],{},[32,172631,172634],{"className":172632,"code":172633,"language":5325,"meta":37},[5323],"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",[24,172635,172633],{"__ignoreMap":37},[20,172637,172638,24755],{},[24,172639,172640],{},"utils\u002Ffile_utils.py",[32,172642,172644],{"className":30481,"code":172643,"language":30483,"meta":37,"style":37},"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",[24,172645,172646,172652,172662,172666,172670,172680,172690,172698,172704,172708,172735,172745,172749,172753,172763,172789],{"__ignoreMap":37},[41,172647,172648,172650],{"class":43,"line":44},[41,172649,30495],{"class":271},[41,172651,147194],{"class":275},[41,172653,172654,172656,172658,172660],{"class":43,"line":51},[41,172655,30840],{"class":271},[41,172657,108414],{"class":275},[41,172659,30495],{"class":271},[41,172661,108419],{"class":275},[41,172663,172664],{"class":43,"line":62},[41,172665,80],{"emptyLinePlaceholder":79},[41,172667,172668],{"class":43,"line":70},[41,172669,80],{"emptyLinePlaceholder":79},[41,172671,172672,172674,172677],{"class":43,"line":76},[41,172673,32050],{"class":271},[41,172675,172676],{"class":54}," read_json",[41,172678,172679],{"class":275},"(path):\n",[41,172681,172682,172685,172687],{"class":43,"line":83},[41,172683,172684],{"class":275},"    path ",[41,172686,321],{"class":271},[41,172688,172689],{"class":275}," Path(path)\n",[41,172691,172692,172694,172696],{"class":43,"line":89},[41,172693,3239],{"class":271},[41,172695,39033],{"class":271},[41,172697,169413],{"class":275},[41,172699,172700,172702],{"class":43,"line":96},[41,172701,14890],{"class":271},[41,172703,51941],{"class":275},[41,172705,172706],{"class":43,"line":104},[41,172707,80],{"emptyLinePlaceholder":79},[41,172709,172710,172712,172714,172717,172719,172721,172723,172725,172727,172729,172731,172733],{"class":43,"line":176},[41,172711,34281],{"class":271},[41,172713,146894],{"class":58},[41,172715,172716],{"class":275},"(path, ",[41,172718,146904],{"class":378},[41,172720,12573],{"class":275},[41,172722,146909],{"class":5354},[41,172724,321],{"class":271},[41,172726,146914],{"class":378},[41,172728,13852],{"class":275},[41,172730,31486],{"class":271},[41,172732,148256],{"class":5354},[41,172734,3877],{"class":275},[41,172736,172737,172739,172741,172743],{"class":43,"line":184},[41,172738,14890],{"class":271},[41,172740,148267],{"class":275},[41,172742,45457],{"class":5354},[41,172744,282],{"class":275},[41,172746,172747],{"class":43,"line":1757},[41,172748,80],{"emptyLinePlaceholder":79},[41,172750,172751],{"class":43,"line":1763},[41,172752,80],{"emptyLinePlaceholder":79},[41,172754,172755,172757,172760],{"class":43,"line":1768},[41,172756,32050],{"class":271},[41,172758,172759],{"class":54}," write_json",[41,172761,172762],{"class":275},"(path, data):\n",[41,172764,172765,172767,172769,172771,172773,172775,172777,172779,172781,172783,172785,172787],{"class":43,"line":1782},[41,172766,34281],{"class":271},[41,172768,146894],{"class":58},[41,172770,172716],{"class":275},[41,172772,152079],{"class":378},[41,172774,12573],{"class":275},[41,172776,146909],{"class":5354},[41,172778,321],{"class":271},[41,172780,146914],{"class":378},[41,172782,13852],{"class":275},[41,172784,31486],{"class":271},[41,172786,148256],{"class":5354},[41,172788,3877],{"class":275},[41,172790,172791,172794,172796,172798,172800,172802,172804,172806,172808,172810,172812],{"class":43,"line":1787},[41,172792,172793],{"class":275},"        json.dump(data, ",[41,172795,45457],{"class":5354},[41,172797,12573],{"class":275},[41,172799,147240],{"class":5354},[41,172801,321],{"class":271},[41,172803,34090],{"class":58},[41,172805,12573],{"class":275},[41,172807,152115],{"class":5354},[41,172809,321],{"class":271},[41,172811,351],{"class":58},[41,172813,282],{"class":275},[20,172815,172816,24755],{},[24,172817,154710],{},[32,172819,172821],{"className":30481,"code":172820,"language":30483,"meta":37,"style":37},"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",[24,172822,172823,172834,172838,172851,172871],{"__ignoreMap":37},[41,172824,172825,172827,172829,172831],{"class":43,"line":44},[41,172826,30840],{"class":271},[41,172828,172444],{"class":275},[41,172830,30495],{"class":271},[41,172832,172833],{"class":275}," read_json, write_json\n",[41,172835,172836],{"class":43,"line":51},[41,172837,80],{"emptyLinePlaceholder":79},[41,172839,172840,172842,172844,172847,172849],{"class":43,"line":62},[41,172841,159819],{"class":275},[41,172843,321],{"class":271},[41,172845,172846],{"class":275}," read_json(",[41,172848,151934],{"class":378},[41,172850,282],{"class":275},[41,172852,172853,172855,172857,172859,172861,172863,172865,172867,172869],{"class":43,"line":70},[41,172854,170637],{"class":275},[41,172856,62782],{"class":378},[41,172858,51540],{"class":275},[41,172860,149991],{"class":378},[41,172862,12573],{"class":275},[41,172864,151575],{"class":378},[41,172866,51540],{"class":275},[41,172868,1262],{"class":58},[41,172870,165255],{"class":275},[41,172872,172873,172876,172878],{"class":43,"line":76},[41,172874,172875],{"class":275},"write_json(",[41,172877,151934],{"class":378},[41,172879,172880],{"class":275},", students)\n",[15,172882,172884],{"id":172883},"_918-易错点","9.18 易错点",[224,172886,172887,172890,172895,172900,172903,172906],{},[227,172888,172889],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[227,172891,172892,172893,28488],{},"能指定异常类型就不要裸写 ",[24,172894,170997],{},[227,172896,172897,172899],{},[24,172898,171372],{}," 无论是否出错都会执行。",[227,172901,172902],{},"模块文件名不要和标准库重名。",[227,172904,172905],{},"导入自己写的模块时，要注意运行目录。",[227,172907,172908],{},"第三方包要安装到当前解释器或虚拟环境中。",[15,172910,172912],{"id":172911},"_919-本章练习","9.19 本章练习",[224,172914,172915,172918,172921,172927,172934],{},[227,172916,172917],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[227,172919,172920],{},"写函数读取文件，如果文件不存在则返回空字符串。",[227,172922,172335,172923,172926],{},[24,172924,172925],{},"math_utils.py","，实现加减乘除函数并导入使用。",[227,172928,172929,172930,172933],{},"创建一个 ",[24,172931,172932],{},"utils"," 包，把 JSON 读写函数放进去。",[227,172935,172936],{},"写一个程序，捕获除零异常和输入格式异常。",[189,172938,172939],{},"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":37,"searchDepth":51,"depth":51,"links":172941},[172942,172943,172944,172945,172946,172947,172948,172949,172950,172951,172952,172958,172965,172967,172968,172969,172970,172971,172972],{"id":170794,"depth":51,"text":170795},{"id":170922,"depth":51,"text":170923},{"id":170971,"depth":51,"text":170972},{"id":171120,"depth":51,"text":171121},{"id":171292,"depth":51,"text":171293},{"id":171361,"depth":51,"text":171362},{"id":171472,"depth":51,"text":171473},{"id":171598,"depth":51,"text":171599},{"id":171723,"depth":51,"text":171724},{"id":171778,"depth":51,"text":171779},{"id":171877,"depth":51,"text":171878,"children":172953},[172954,172955,172956,172957],{"id":171881,"depth":62,"text":171882},{"id":171915,"depth":62,"text":171916},{"id":171954,"depth":62,"text":171955},{"id":172033,"depth":62,"text":172034},{"id":172056,"depth":51,"text":172057,"children":172959},[172960,172961,172962,172963,172964],{"id":172060,"depth":62,"text":172061},{"id":172143,"depth":62,"text":172144},{"id":172188,"depth":62,"text":172189},{"id":172247,"depth":62,"text":172248},{"id":172285,"depth":62,"text":172286},{"id":172319,"depth":51,"text":172966},"9.13 if name == \"main\"",{"id":172412,"depth":51,"text":172413},{"id":172457,"depth":51,"text":172458},{"id":172568,"depth":51,"text":172569},{"id":172626,"depth":51,"text":172627},{"id":172883,"depth":51,"text":172884},{"id":172911,"depth":51,"text":172912},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170786,"description":196},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172979,"title":172980,"body":172981,"description":173144,"extension":197,"meta":173145,"navigation":79,"path":173146,"seo":173147,"stem":173148,"__hash__":173149},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172982,"toc":173139},[172983,172986,172989,172992,173003,173005,173079,173082,173085,173088,173091,173094,173097,173100,173103,173106,173109],[10,172984,172980],{"id":172985},"python教程",[20,172987,172988],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[20,172990,172991],{},"建议学习环境：",[224,172993,172994,172997,173000],{},[227,172995,172996],{},"Python 版本：Python 3.10 及以上。",[227,172998,172999],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[227,173001,173002],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[15,173004,117181],{"id":117181},[224,173006,173007,173013,173019,173025,173031,173037,173043,173049,173055,173061,173067,173073],{},[227,173008,173009],{},[511,173010,173012],{"href":173011},".\u002Fch1-Python","Python环境与第一个程序",[227,173014,173015],{},[511,173016,173018],{"href":173017},".\u002Fch2","基础语法、变量与字符串",[227,173020,173021],{},[511,173022,173024],{"href":173023},".\u002Fch3","判断语句",[227,173026,173027],{},[511,173028,173030],{"href":173029},".\u002Fch4","循环语句",[227,173032,173033],{},[511,173034,173036],{"href":173035},".\u002Fch5","函数基础",[227,173038,173039],{},[511,173040,173042],{"href":173041},".\u002Fch6","数据容器",[227,173044,173045],{},[511,173046,173048],{"href":173047},".\u002Fch7","函数进阶",[227,173050,173051],{},[511,173052,173054],{"href":173053},".\u002Fch8","文件操作",[227,173056,173057],{},[511,173058,173060],{"href":173059},".\u002Fch9","异常、模块与包",[227,173062,173063],{},[511,173064,173066],{"href":173065},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[227,173068,173069],{},[511,173070,173072],{"href":173071},".\u002Fch11","面向对象基础",[227,173074,173075],{},[511,173076,173078],{"href":173077},".\u002Fch12","综合案例与复习路线",[15,173080,173081],{"id":173081},"学习路线",[20,173083,173084],{},"第一阶段：能运行程序。",[20,173086,173087],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[20,173089,173090],{},"第二阶段：能组织数据。",[20,173092,173093],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[20,173095,173096],{},"第三阶段：能封装逻辑。",[20,173098,173099],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[20,173101,173102],{},"第四阶段：能做小项目。",[20,173104,173105],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[15,173107,173108],{"id":173108},"参考资料",[224,173110,173111,173118,173125,173132],{},[227,173112,173113,173114],{},"黑马程序员 Python 入门教程推荐：",[511,173115,173116],{"href":173116,"rel":173117},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24001],[227,173119,173120,173121],{},"Python 官方中文教程：",[511,173122,173123],{"href":173123,"rel":173124},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24001],[227,173126,173127,173128],{},"Python 标准库文档：",[511,173129,173130],{"href":173130,"rel":173131},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24001],[227,173133,173134,173135],{},"pyecharts 文档：",[511,173136,173137],{"href":173137,"rel":173138},"https:\u002F\u002Fpyecharts.org\u002F",[24001],{"title":37,"searchDepth":51,"depth":51,"links":173140},[173141,173142,173143],{"id":117181,"depth":51,"text":117181},{"id":173081,"depth":51,"text":173081},{"id":173108,"depth":51,"text":173108},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23516},"\u002Fwiki\u002F2024-10-10-python",{"title":172980,"description":173144},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398811]